- 信息安全防御技术与实施
- 韦文思 徐津主编
- 7505字
- 2020-08-27 19:31:33
4.2 操作系统平台安全加固
操作系统平台加固也是一种实现安全操作系统的方式。操作系统平台加固是一种用来分析和确定操作系统及服务程序弱点,并做适当的更改以保护操作系统及其服务程序免受攻击的方法。操作系统平台加固可以帮助检查操作系统的各个组件及相关应用程序,以确定最安全的配置方案。配置过程包括从系统中删除不需要的服务、软件和用户,加强对操作系统工具和软件的控制,最终结果是有了一个在自身安全方面扮演积极角色的平台,该平台不仅仅依赖于外在的安全机制。
4.2.1 加固方案
尽管加固系统平台的具体方案是依据系统平台的不同而定的,但总体指导思想是一致的,具体如下:
(1)减少无用软件、服务和进程的数目。
(2)在持续提供对资源访问的同时,要使所有软件、服务,以及进程配置处于最安全的状态。
(3)尽可能避免系统对其身份、服务,以及功能等信息的泄露。
为达到成功加固系统平台的目的,应采取如下步骤:
(1)确定目标系统的用途。
(2)评定系统是否符合最初要求。
(3)根据目标系统需求,制定安全策略。
(4)采用标准构件的方法实施系统平台加固。
1. 确定目标系统的用途
逐一确定每个目标系统的用途,确保不要遗忘任何系统平台。对企业最危险的安全威胁之一是仍起作用却被遗忘的系统平台。那些原以为被取代的系统,实际仍然起作用,并作为执行未经授权动作的主机,是企业最危险的安全威胁。在加固平台时,必须回答下列问题:
(1)为什么要建这个平台?
(2)谁对这个平台负责?
(3)这个系统能满足与业务相关的需求吗?
(4)要满足这个需求需要哪些服务?
(5)谁需要访问这个系统?
(6)这个系统需要访问什么资源?
这个列表反映出在使用系统之前必须编辑的需求文档的类型。它既作为对系统生存周期有关过程的健全性检验,又定义了系统必须的应用程序、服务和进程的蓝图。
2. 评定系统是否符合最初要求
一旦确定了系统需求,下一步就是评定系统以确定实际的实现是否符合最初的需求。这个评定不需要使用复杂的方法和工具。系统操作员通常可以提供服务、端口、应用程序、软件版本、用户,以及进程的清单,这个简单的清单通常足以建立一个简单的评测报告。很多情况下,实际服务的数量远远大于所需要的服务数量。此信息将作为下一阶段工作的基准。
3. 根据目标系统需求,制定安全策略
要设计一种策略以满足目标系统平台的需求,通常安全策略的制定应考虑以下5方面的内容。
(1)网络。这个系统正常运行需要多少网络访问量?用户需要对系统进行远程访问吗?这个访问是源自于网络可信的部分还是不可信的部分?组织会支持取消所有未加密的访问服务吗?来自这个系统的文件需要和别的系统共享吗?这个系统能进行远程管理吗?防火墙或数据包过滤设备会保护网络访问吗?如果不能,能在平台上实现数据包过滤吗?如果能,防火墙能够支持预期的系统吞吐量吗?
(2)系统软件。该系统在最近是否发布了标准软件版本或补丁?这些软件版本是否符合供应商推荐的安全补丁等级?有没有不再使用并可以卸载的主要内部软件包?是否使用了基于菜单或GUI的管理程序?关键的软件组件是否存有正确的日志?这些日志是循环的还是会归档?是否使用标准的图像来建立新的系统以保持一致?
(3)文件系统。文件系统是本地的,还是有远程的装入卷?这些远程装入卷是否使用安全协议?本地卷是否正确划分了分区?日志是否会超出其存储空间并损坏系统?是否使用了基于操作系统的加密技术来保护文件?可执行文件是否受到合理限制?SUID(SetUserID)的功能是否受限于关键的可执行文件?系统是否正确地备份?
(4)用户。哪些用户需要系统的访问权?他们是否使用了强密码?密码是否有期限要求?账户的储存和管理是本地的还是使用一个公用目录?用户账户是否被定期审核和重新验证?谁能创建账户?基于角色的账户能否执行特权功能?是否对使用进行了监控?是否设置了用户路径和权限集?
(5)物理。系统是否位于安全的数据中心?它是否连接到安全的电源?是否有合适的温度调控系统?系统控制台是否置于锁好的机柜里?控制台在处于不活动状态一段时间后是否会自动退出系统?
4. 用标准构件的方法实施系统平台加固
在实施系统平台加固的最后过程中,应采用构件的开发方法以保证加固成功。标准构件是一种具有达到特定目标所需的全部功能、特定系统类型的每个小部件集合的镜像。企业可以为桌面、Web服务器、数据库系统,以及用于企业的所有其他类型平台开发配置文件。这些配置文件指定了操作系统的类型、补丁级别、应用程序软件和安全设置。然后在实验环境中对它们进行研究,并镜像为一种可以重复生产的形式,这样可缩短生产时间,因为所有软件和配置都包含于这个镜像中。当新的补丁和需求及软件版本出现时,配置文件和图像必须进行更新。
标准构件也可用于简化现有系统的加固。很多情况下,可以实现交换系统(Swap-Out System)。有了交换系统,可以将标准构件映射到相应的硬件平台上。目标系统的配置和数据在替代系统上执行,然后将两个单元进行交换。在最后一步中,数据进行了同步化,产生了符合所需操作目的的生产平台,不同的是,这是一种更为安全的方式。随后旧的单元可以重新映射以取代另一个生产系统,然后重复整个过程。通过使用这种方式,能够节省时间和资源,从而实现更为有效的安全组织。
4.2.2 加固指南
依据平台加固的总体指导思想,平台加固应从以下几方面考虑。
1. 端口和进程
网络操作系统使用进程向外提供服务,减少无用软件及服务的任务就是要在所有系统进程中找出多余进程。由于进程通过打开网络端口向外提供服务,所以找出多余进程的最快方法是观察进程及端口对应表。
Netstat命令显示协议统计和当前的TCP/IP网络连接,该命令只有在安装了TCP/IP协议后才可以使用。通过使用该命令可以列出一个系统上所有打开的TCP/IP网络监听端口。这些打开着的端口正是入侵者所要攻击的,因为它们通向系统平台内部。因此,作为平台加固的一部分,用户使用Netstat命令来识别出无关端口,并由此找到需要删除或禁用的服务。
禁用Windows中不必要的服务非常简单,具有图形界面的控制面板可以用来设置各项服务并确定它们如何启动,只需要浏览列表来关闭或禁用不需要的服务。Windows的服务面板,如图4-3所示。
图4-3 Windows的服务面板
禁用UNIX平台上的服务要复杂一些。主要不同的是UNIX版本服务的启动脚本及文件的存放位置不同。对于每个要启动的服务,操作系统中通常包含一组启动及停止脚本,启动时操作系统按所需的顺序调用这些脚本,关闭时系统执行停止脚本。加固过程中要合理定位不同操作系统脚本的位置并合理禁用不必要的服务程序。如表4-1所示列出了一些UNIX系统启动脚本的位置。
表4-1 不同版本UNIX启动脚本的位置
2. 安装系统补丁
所有软件都有缺陷。为了修复这些错误,供应商会发布软件补丁。如果没有这些补丁,组织很容易遭受攻击。在有很严格的更改控制策略的组织中,及时安装补丁会是一个问题。对补丁的彻底测试是这个过程的关键部分,因为供应商在解决旧问题时,有可能会引入新的问题。而对于和安全缺陷无关的补丁来说没有问题。但是,入侵者搜索和利用安全弱点的速度很快,所以要求有更快的安全补丁修正过程。企业必须注意安全补丁的发布,并随时准备快速地使用它们。建议企业及时查阅www.sans.org以获得最新漏洞修复信息。不同操作系统的系统补丁,如表4-2所示。
表4-2 不同操作系统的系统补丁
3. 密码强度及存储
计算平台速度的巨大改进,以及人们对现代密码系统的兴趣和理解的增加,向平台安全提出了新的挑战。UNIX系统传统上使用一些快速类型的哈希算法来对存放的用户密码进行加密。为了允许低特权进程使用这个密码系统,密码存储(依赖于加密技术来保护它)需要全局性的可读许可。
系统允许的密码强度是传统UNIX系统的另一薄弱之处。密码强度取决于密码中使用的字符数和随机性。越来越快速的计算机和可以免费得到的解密软件已经使密码存储越来越容易受到离线攻击,因为几乎任何用户都可以访问用户口令的密文。现代的PC机有足够的能力解密这些脆弱的口令。
UNIX系统能够为用户口令存储添加保护层,只需要设置这些系统就可以了。现代的UNIX系统(甚至一些合理修补的遗留系统)对无特权用户隐藏了用户口令的密文,但是仍然允许他们访问认证子系统(称为阴影)。它们也可以阻止用户使用容易被猜测到的字典词汇作为用户口令并要求用户定期更换口令。UNIX系统有一些固有的对用户透明的功能,只需要激活它们就可以了。
Windows也包含了保护本地密码存储完整性的方法。通过一次性使用syskey命令,可以使操作系统在密码存储中使用更强的加密技术。Windows也可以要求用户使用更长、更随机的密码。
4. 用户账户
用户账户标识了需要访问平台资源的实体(无论是应用程序进程还是人)。操作系统通过权限和优先权将用户账户与其访问控制系统相关联。因为用户账户是合法进入系统的机制,所以入侵者常常试图利用用户账户管理和访问控制中的缺陷。如果可以作为合法用户轻松地登录系统,那么为什么还要浪费时间去做自定义缓冲器溢出攻击呢?
用户账户管理的弱点有5个方面:弱密码、制造商默认的账户、基于角色的账户、公司默认账户,以及废弃账户。在任何情况下,平台加固的目标是将用户账户数目减少到所需的绝对最小值。下面描述了用户账户管理5个方面的缺点:
(1)弱密码处理的问题。
(2)制造商默认的账户由制造商创建,是为了维护或者在安装时首次登录到平台而使用的。虽然今天已经不太流行,但是这些账户仍然存在于一些旧的系统上,这可能会非常危险。
(3)基于角色的账户非常危险,因为它们不能实现适当的可信赖性。角色账户由一群人来使用,而不是要求用户使用他们自己的ID登录。例如备份操作员或者Web站点管理员。
(4)公司默认账户是由于标准构件过程的误用而安装于整个企业平台上的账户。这些账户和基于角色的账户的相似之处是,它们不能实现适当的可信赖性。然而,它们可能会更危险,因为它们错误地允许一些用户匿名登录到系统中。
(5)废弃账户会导致最糟糕的问题,因为它们的存在导致了安全规程极危险的缺陷。最佳实践证明,不再被授权访问资源的用户或者那些离开公司的用户,他们的账户应当立即停止使用,废弃的账户最容易受到同事和支持人员的内部攻击。
关于用户账户管理,在平台加固时需要关注的另一个方面是,那些用于运行人机交互式进程(例如Web服务器)的用户账户。默认情况下,这些进程的绝大部分以超级用户特权运行,这意味着任何对这些进程的成功攻击将获得对系统访问优先权的极大提升。只有关键的系统和核心任务,虽然需要比较高的访问级别,但是其他的应用程序并不需要。应该创建和配置应用程序所需的确切访问级别的专用用户账户,以帮助保护系统,不让入侵得逞。这些措施包括锁定账户的远程登录权或者禁止获得对Shell提示符的访问,还包括限制账户只能访问自己的文件。
5. 用户特权
用户特权是UNIX系统安全的基础之一。正确实现的用户特权应该确保用户只具有他们执行任务所需要的访问权限。UNIX系统中的超级用户是一个享有完全和不受限系统资源访问权的用户账户。这个账户是为专门需要高级别访问的系统管理任务保留的,但是系统管理员常常将之用于他们普通的日常活动。大多数UNIX系统不提供一个中间级别的系统特权,所以超级用户特权往往被授予比完成任务实际所需的数目多得多的用户。因为超级用户账户可以破坏和修改系统安全功能,所以系统管理员每次给予这个关键的访问级别,就是在增加系统被攻击的可能。并且,由于只有一个超级用户账户,所以要跟踪谁在使用它是很困难的。
SUDO(Set User and Do)设计使系统管理员能够给超级用户更精细级别的访问权。可以为每一个用户指派通常只能作为超级用户运行的特定的应用程序和功能,而不是真正地使用超级用户账户。SUDO也可以启用详细的日志记录,使得可以根据任何运行于SUDO的超级用户功能追踪到某个特定的用户。在特定的应用中,使用SUDO意味着没有人使用过超级用户账户。
6. 文件系统安全
通过在程序文件上设置SUID标志,某一个进程可以临时提升其特权用以完成某项任务(例如,访问文件passwd)。当程序执行时,可以暂时得到这些额外的特权而不用被全授予如此高的特权。这个SUID标志常常过度使用,当它与被黑客修改过的软件包结合时,被修改的程序执行后会使某个用户得到全时提升的系统权利。UNIX系统可能有很多带有这个标志的组件,但是通常只需要它们中的一小部分。建议使用命令从整个系统中删除不需要SUID标志程序的SUID标志。
7. 远程访问的安全
Telnet和rlogin是UNIX系统上最常用的远程访问方式。这些系统都不采用加密技术来保护远程访问会话。一种被动的网络监听攻击可以看到用户在进入Telnet或者rlogin会话中按下的每一个键。安全Shell(SSH)是一种在UNIX及Window系统上使用的软件包,它提供与Telnet和rlogin相同功能,但增加了加密会话功能。这个软件包已经成为用加密和访问控制的各种可配置级别进行安全远程访问的行业标准。
8. 服务标题、操作系统指纹
前面已经提到过,平台加固要减少系统泄露的信息数。默认情况下,类似Telnet和FTP的服务在被访问时,会显示一个描述其软件版本和平台类型的标题。攻击者使用这个信息,通过检查任何含有关于特定软件版本和类型的可利用信息的数据库,可以确定该平台是否有可利用的漏洞。许多入侵者通过扫描Internet的整个区段,寻找他们已知可利用的服务的特定版本漏洞。这个服务信息对平台的正常运行完全是不必要的,因此完全可以将之删除。这样,攻击者就只能盲目地攻击服务了。
另外一个对攻击者特别有用的是系统平台的指纹信息。通过使用特定的工具查询系统的网络服务,入侵者可以将结果与属性数据库相匹配,以确定操作系统的类型和版本。这样,攻击者可以使攻击针对特定操作系统的弱点。通常,应把这种指纹信息伪装成其他操作系统,或者可以伪装成不与任何操作系统相匹配。与服务标题一样,做这种修改不会影响平台的正常功能,而且可以大大增强防御能力。
4.2.3 加固工具
加固工具是一种自动高效地帮助人们确定系统平台的漏洞,并辅助人们加固系统平台的工具。目前常见的加固工具有以下几种。
1. Nessus
Nessus是一个功能强大而又易于使用的远程安全扫描器,它不仅免费而且更新极快。安全扫描器的功能是对指定网络进行安全检查,找出该网络是否存在有导致对手攻击的安全漏洞。该系统被设计为Client/Sever模式,服务器端负责进行安全检查,客户端用来配置管理服务器端。在服务端还采用了Plug-in的体系,允许用户加入执行特定功能的插件,这个插件可以进行更快速和更复杂的安全检查。在Nessus中还采用了一个共享的信息接口,称为知识库,其中保存了前面进行检查的结果。检查的结果可以HTML、纯文本、LaTeX(一种文本文件格式)等几种格式保存。
在未来的新版本中,Nessus将会支持速度更快的安全检查,而且这种检查将会占用更少的带宽,其中可能会用到集群的技术以提高系统的运行效率。
Nessus的优点在于:
(1)采用了基于多种安全漏洞的扫描,避免了扫描不完整的情况。
(2)它是免费的,比起商业的安全扫描工具,如ISS具有价格优势。
(3)Nessus扩展性强、容易使用、功能强大,可以扫描出多种安全漏洞。
Nessus的安全检查完全是由Plug-in的插件完成的。到目前为止,Nessus提供的安全检查插件已达18类705个,而且这个数量以后还会增加。比如:在“useless services”类中,“Echo Port Open”和“Chargen”插件用来测试主机是否易受到已知的Echo-chargen攻击。在“Backdoors”类中,“PcAnywhere”插件用来检查主机是否运行了BO、PcAnywhere等后台程序,其中还包括了肆虐一时的CodeRed及其变种的检测。
注意:
在Nessus主页中不但详细介绍了各种插件的功能,还提供了解决问题的相关方案。有关Plug-in的详细说明请参见http://cgi.nessus.org/plugins/dump.php3? viewby=family
除了这些插件外,Nessus还为用户提供了描述攻击类型的脚本语言,来进行附加的安全测试,这种语言称为Nessus攻击脚本语言(NSSL),用它来完成插件的编写。
在客户端,用户可以指定运行Nessus服务的计算机、使用的端口扫描器及测试的内容及测试的IP地址范围。Nessus本身是工作在多线程基础上的,所以用户还可以设置系统同时工作的线程数,这样用户在远端就可以设置Nessus的工作配置了。安全检测完成后,服务端将检测结果返回到客户端,客户端生成直观的报告。在这个过程当中,由于服务器向客户端传送的内容是系统的安全弱点,为了防止通信内容受到监听,其传输过程还可以选择加密。
2. HardenNT
HardenNT是专为Microsoft Windoiws系统平台设计的众多加固脚本之一。尽管它的设计是针对Windows NT的,但它的主要功能同样适用于Windows 9x/2000。HardenNT主要完成以下工作:
(1)根据操作系统版本及CPU的结构安装相应的安全补丁。
(2)限制用户组的默认NT特权。
(3)启动Windows NT安全事件审计服务。
(4)设置NTFS ACL许可,删除/移走重要的安全文件。
(5)保护Windows系统的注册表。
3. YASSP
YASSP是一个用于Solaris x系统安全加固的包。它的设计同Solaris安装过程一起运行,它的目标是建立一个面向Internet的平台(例如Web服务器、Ftp服务器),但是也可以用于内部系统。YASSP完成如下安全设置:
(1)禁止无用网络服务。
(2)解决文件属性及保护弱点问题。
(3)启动系统日志审记。
(4)调整重要系统参数,禁止堆栈区执行代码。
YASSP的配置通过yassp.conf文件完成。在这个文件中,用户指定希望YASSP处理哪个文件。其中可能包括删除初始化文件或者添加可以增强基本安全功能的目录。
4. Tⅰtan
Titan由信息安全的先驱者Brand M.Powell、Dan Farmer和Matthew Arch开发。它由一系列可配置的Shell脚本组成。用户可以在诸如文件权限和根目录等属性上做低级的配置更改。由于采用Shell脚本编写,具有良好的扩展性及移植性,所以Titan可以在多种UNIX版本上运行。
人们为Titan编写了许多模块,每个模块实施一个特定配置的更改。下面是其中一些模块的例子:
(1)禁用自动装入器。
(2)设置Solaris BSM(Basic Security Module)来审核系统事件。
(3)设置公共桌面环境以忽略危险的外部连接。
(4)登录时,加强所有用户的默认权限。
(5)确保默认的系统账户不会被攻击。
(6)删除不必要的SUID配置。
(7)禁用不严格的信任关系。
所有这些模块都有完备的文档,并为用户提供关于其功能的简要描述。
5. LC4
LC4是针对Windows系统平台的密码审计及恢复工具。LC4功能之一是以在线或离线方式检测Windows系统的用户密码强度。其网络窃听功能窃听所有SMB会话,用以发现其他系统用户密码的弱点。
6. TCP封装器
运行于UNIX系统上的TCP封装器(TCP Wrapper),完成对系统的TCP输入请求实时监视,若发现是其负责管理服务的连接请求(如Telnet、FTP、Finger、Rwho、TFTP等,定义在inet.conf中)时,首先进行一定的验证(如通过host.allow、host.deny等配置文件),当通过验证后,启动原真正的服务器进程,如in.ftpd或in.telnetd等对连接请求进行处理。
7. Trⅰpwⅰre
Tripwire是一种数据完整性检测工具。它是由Purdue大学COAST实验室的Gene H·Kim和Eugene H·Spafford于1992开发的。它们的目的是建立一个工具,通过这个工具监视一些重要的文件和目录发生的任何改变。1997年,Gene Kim和W.Wyatt Starnes发起成立了Tripwire公司。他们成立这个公司的目的之一是发布一个能够用于更多平台的商业升级版本Tripwire。
Tripwire采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来。当文件现在的数字签名与保留的数字签名不一致时,那么现在这个文件必定被改动过了。具体到监控项目,在Tripwire的配置文件中予以说明。