利用远程注册表加强系统安全
2019-11-02 14:06:56
供稿:网友
远程访问机器的注册表通常是令人皱眉的事情;毕竟,您想让其他人在您不知道的情况下查看您的注册表吗?但是,如果正确处理的话,这个过程可以成为抽取机器信息和识别您网络中潜在 漏洞的强大工具。在这里,Brian 运用他在 WebSphere Business Integrator Team 中的工作经验,描述了远程注册表访问如何允许您从多台机器中抽取信息 ― 并且识别那些易受攻击的系统。本文还包括了代码样本。
在一个软件开发测试环境中,跟踪机器被证明是非常困难的,尤其是当机器的数量达到两位数的时候。在哪台机器上使用了什么软件?使用的 NT 是什么版本?服务包(service pack)的级别是什么?安装了什么修订程序?您可以走到每台机器前手工检查核对所有这些问题,但是当机器分散在一个广阔的区域内,这样做会是一个非常费时的过程。
在这样的情形下,如果有一种方法,能够不必实际使用某台机器并且不安装额外软件,就可以获取那台机器的信息,那将是很有用的。然后,收集到的信息可以用来分配资源和识别那些可能易受恶意的用户和程序攻击的机器。本文描述了利用远程注册表访问的某些方面。
警告:通过使用本文中描述的远程注册表功能,您能节省系统管理的大量时间。但是仍要小心,因为编辑另一个系统的注册表会与编辑您自己的注册表一样危险(如果不比编辑您自己的更危险的话)。
利用安装功能
在这里的 WebSphere Business Integrator(WSBI)测试环境中,我们有大约 40 台测试机器,它们的地理位置分散在整个英国 Hursley 实验室中。在最初的测试阶段期间,我们的注意力主要集中于 WSBI 的安装和配置。在测试机器上不断地安装和重新安装各种产品以及服务包和必备软件 ― 通常必须重新安装整个操作系统。很快,我们发现要监视每台测试机器状态几乎是不可能的。我们需要一种方法,它可以在不必访问每台机器的情况下,快速知道该机器所处的状态。
在 WSBI 安装中,我们要在单一安装封装器中安装并配置了大约 15 个 IBM 产品 ― 例如 DB2 V7.2、MQSeries V5.2、HTTP Server V1.3.12。正如对于所有好的安装程序,在任何安装开始之前,都要检查目标机器以确保它满足要安装的软件的前提条件 ― 例如服务包级别和相关产品。这个检查通常在 InstallShield 脚本中由编写注册表脚本检查相关值来完成的。
例如,一种最常见的检查就是验证 NT 服务包级别。键 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion 下的注册表项,它们会出现在 Regedit.exe 中。
当在脚本中查询一个注册表项时,需要知道三样东西:
要查询的键名称 ― 本例中,是 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion 键中值的名称,这里是“CSDVersion”
正在查询的值类型,这里是一个字符串值
使用 InstallShield 脚本函数 RegDBGetKeyValueEx 来执行注册表查询。但是假设您想要检查安装了什么级别的服务包。清单 1 显示可以如何达到这一点。
清单1. 抽取服务包级别
STRING szKey, szName, svServicePackVersion;
NUMBER nvType, nvSize;
begin
svKey = ";SOFTWARE//Microsoft//Windows NT//CurrentVersion";;
svName = ";CSDVersion";;
nvType = REGDB_STRING;
RegDBGetKeyValueEx (szKey, szName, nvType, svServicePackVersion, nvSize);
end; 清单1 将返回值“Service Pack 6”并把它存储在 svServicePackVersion 中。然后,您可以知道这台机器上安装了 Service Pack 6。通过执行类似这样的各种查询,可能确定一台机器的配置以及在它上面安装了什么软件。
当我们意识到可以对远程机器的注册表执行这些查询时,我们的实验室工作取得了突破性的进展。