8.5、对策

虽然黑客手段层出不穷,但是如果我们能睁大眼睛注意有多少弱点总是被黑客利用来攻击,同样,我们就会有多少对策来应对这些攻击。

接下来的故事就是讲这个的。

8.5.1、公司防火墙

防火墙应当被设置为只允许开通公司业务需求的关键服务。我们必须反复仔细地检查防火墙来保证:除了业务实际需求的服务外,任何服务都没有开通。另外,可以考虑使用“状态检测防火墙(statefulin spection firewall)”,这种防火墙能够在一段时间内追踪数据包,从而提供更好的安全保障。收到的数据包只允许回应向外接出的连接。换句话说,防火墙基于输出流来开放他的特殊接口。同时也实现了向外接出的连接控制规则。防火墙管理员应该定期检查防火墙设置和日志来保证没有任何未经授权的改动出现。因为一旦有黑客攻破了防火墙,那么他就极有可能做出一些难以发现的小改动来得到好处。

还有,如果可以的话,还要考虑控制进入基于用户IP地址的VPN的权限。当使用VPN到公司网络的个人连接限额时,这将是可行的。另外,要考虑使用更安全的VPN认证形式,比如说智能卡或者客户端证书,而不是静态的共享密钥。

8.5.2、个人防火墙

Eric进入了CEO的计算机,发现了其中安装了个人防火墙。他没有放弃,因为他挖掘出了一个被防火墙允许进入的服务。他可以通过Microsoft SQL服务器默认允许的存储过程(Stored Procedure)来传输命令。这又是一个挖掘出防火墙没有保护的服务的例子。这个例子中的受害者从来没有想过做这样一件麻烦事,检査他的庞大的包含超过500K的活动记录防火墙日志。这不是个特例。许多机构都配置了侵入保护和预防技术,同时期待这些技术能自己解决所有问题,拿出来就可以直接用。以上例子中的粗心行为将使得攻击愈演愈烈。

教训是很明显的:不仅要严格制定防火墙规则,过滤掉服务器上非关键业务上的进出流,还要定期重新检查防火墙规则和日志,发现非授权的改动或者有意图的安全破坏。

一旦一个黑客侵入,他就很可能夺取一个匿名系统或者用户账户,以便将来卷土重来。另外一个策略就是给那些已经被获取的账户添加特权或是组。定期地做好用户账户和组的审计,同时文件许可也可以作为一种找到可能的侵入或是非授权人员活动的方法。许多商业和公共相关的工具都可以自动完成以上部分过程。既然黑客也知道这一点,那么定期检查安全相关工具和脚本以及任何源文件相关数据来保证其完整性是很重要的。

系统配置不当是导致大量入侵的直接原因,例如过多开放的接口,脆弱的文件读写许可和Web服务器的不当配置。一旦一个黑客在用户层侵占了系统,那么他的下一步就是通过搜寻没有公开的或尚未升级打补丁的漏洞,以及许可配置的不足来对系统进行攻击,从而提高他的权限。不要忘了,许多黑客都是一步一步慢慢侵蚀直到攻破整个系统的。

支持Micsoft SQL服务器的数据库管理员必须考虑禁止某些存储过程,(如xp_cmdshell,xp_makewebtask和xp_regread),因为它们通常会被用来得到远程系统访问权限。

8.5.3、端口扫描

当你在看这本书的时候,你那台连上了Internet的计算机可能正在被一些讨厌的黑客扫描。他们想要找到“可轻而易举得到的果实”。由于端口扫描在美国是合法的(以及大多数其他国家),因此你能得到的反对黑客的帮助是很有限的。关键是要能够从成千上万探测你的网络地址空间的脚本中,鉴别出其中最大的威胁。

这里有几个软件,包括防火墙和侵入检测系统,可以鉴别出各种端口扫描类型,并且能够提醒相关人员这些扫描活动。你可配置大多数防火墙来鉴别各类端口扫描,并断掉相关连接。一些商用防火墙产品拥有一些配置选项,可以避免快速的端口扫描。同时还有一些“开源”工具可以检测出端口扫描,并能到丢掉某个时间段的数据包。

8.5.4、了解你的系统

应该做好下列大量的系统管理工作:

☆ 检查进程列表,找到所有异常或是未知的进程。

☆ 检查预定程序列表,找到所有非授权的添加或改动。

☆ 检查文件系统,找到最新或被改动的系统二进制文件、脚本或是应用程序。

☆ 搜查任何异常的空闲磁盘空间的减少。

☆ 核查所有当前活动的系统或用户账户,移除匿名或未知账户。

☆ 核查被默认配置的特别账户,以拒绝相互式或网络上的登录。

☆ 检查任何陌生活动所产生的日志(例如从未知源的远程访问,或在晚上或者周末的非正常时间访问)。

☆ 审计Web服务器日志以鉴别任何访问非授权文件的要求。如本章所提到的,黑客会把文件复制到Web服务器目录下,同时通过Web(HTTP)把文件下载下来。

☆ 在配置了FrontPage或WebDav的Web服务器环境下,要确保设置恰当的许可,以避免来自访问文件的非授权用户。

8.5.5、事故应变和警告

了解安全事故在何时发生将有助于损失控制。通过操作系统审计,能鉴别出潜在的安全缺陷。配置一个自动系统,以便某些审计事件发生的时候对系统管理员发出警告。然而,一定要注意:如果一个黑客获取了足够的特权,并且对整个审计过程了如指掌的话,他就可以通过欺诈避开这个自动警告系统。

8.5.6、检查应用程序中经过授权了的改动

Robert能够通过搜寻FrontPage授权的不当配置来替换掉程序。在他完成获取那家公司龙头产品的源代码后,他把helpdesk程序那个“被攻破”的版本依然留在那里,以便日后他可以再回去。一个工作负荷很大的管理员可能从未意识到一个黑客会偷偷摸摸地改变一个现有的程序,特别是如果没有任何完整性的检测。对于手工检测来说的另一种检测方法就是注册一个类似于Tripwire3的程序去实现非授权改动的自动检测。

8.5.7、许可

通过浏览在/includes文件夹中的文件,Erik获取了相当机密的数据库口令。如果设有初始口令的话,或许就可以阻碍他的步伐。在一个任何人可读的源文件中,那些被暴露的敏感数据库口令都是他需要得到的。其实,最好的安全措施就是尽量避免在批量文件、源文件或是脚本文件里存储任何明文口令。除非迫不得已,否则我们都应该釆用企业整体策略,禁止存储明文门令。最起码,那些包含有未加密过的口令文件必须小心保护,以免意外泄露。

在Robert攻击的那家公司,Microsoft IIS 4服务器没有恰当配置,不能避免匿名或guest用户读写文件到Web服务器目录上去。任何用户只要登录系统,就可以阅读被用来协调Microsoft Visual Source Safe的外部口令文件。由于这些不当配置,黑客可以获取对目标的Windows域的完全控制。针对应用程序和数据,配置一个有组织的目录结构系统可以增加访问控制的效率。

8.5.8、口令

除了本书已提到过的其他普通的口令管理建议外,本章中黑客还有以下突出的成功要点。Erik说到基于他已经破解的口令,他可以预测公司的其他口令是如何构造的。如果你的公司的雇员们正在使用一些标准且可预测的方式来构造门令的话,显然你正在敞开门对黑客们发出邀请。

一旦一个黑客获取了进入系统的访问权限后,他就会紧接着获取其他用户或数据库的口令。通过搜索电子邮件或是整个文件系统,寻找在电子邮件、脚本、批量文件、源文件和公告栏中的明文口令,这种策略相当地普遍。

使用Windows操作系统的机构应该注意操作系统的配置,禁止LAN Manager口令的散列在注册表里储存。如果一个黑客获取了管理员权限的话,他可以析取口令的散列并破解他们。IT人员可以简单地配置系统使得旧类型的散列不被保留,这样就能充分提高破解口令的难度。然而,一旦一个黑客“拥有”了你的机器,他/她就能够找到网络流,或者安装一个第三方的口令附加软件来获取账户口令。

避开LAN Manager口令散列的另一种方法就是建立一个带有键盘上无法敲上去的口令,比如说,如第6章中所说,使用<Alt>键和数字标志符。广泛使用的口令破解软件是不可以破解使用Greek,Hebrew,Latin和Arabic字符集中的字符口令的。

8.5.9、第三方软件

利用定制的Web探测工具,Erik发现了一个未被保护的商用FTP产品生成日志文件。这个日志中包含传入和传出系统的文件的完整路径信息。所以,在安装第三方软件的时候,请不要依赖简单的默认设置。设置的实现最可能泄露有价值的信息,例如可被用来攻击网络的日志数据。

8.5.10、保护共享空间

配置网络空间是公司网络中实现共享文件和文件夹的普遍做法。IT员工们也许没有设置口令或访问的权限,因为共享空间仅仅只是内部网络可见。本书中己提到,许多机构把他们的努力都放在维持一个优良的四围安全,却忽视了来自于网络内部的安全问题。然而像Robert这样想要进入你系统的黑客,会搜寻那些带有预示着有价值的和敏感信息的名字的共享空间。如“research”或“backup”等类似描述的名字会使黑客的工作轻松许多。最好的做法就是充分保护所有包含敏感信息的网络共享空间。

8.5.11、避免DNS猜测

在域中可公共访问的存储区的文件内,Robert利用了一个DNS猜测的程序来鉴别可能的主机名。你可以使用水平分割的DNS来避免泄露内部主机名,这个水平分割的DNS拥有内部和外部两个名字服务器。只有可以公共访问的主机才会在内部名字服务器的存储区文件上提到,而保护得更好的内部名字服务器将被用来解决公司网络的内部DNS请求。

8.5.12、保护Microsoft SQL服务器

Robert找到了一个备份mail以及正在运行MicrosoftSQL服务器的Web服务器,而且那上面的用户名以及口令与在源代码“inckide”文件中发现的口令一致。在没有合法的业务需求时,SQL服务器不应该暴露在Internet中。即使“SA”账户被重新命名,黑客仍然可以在未保护的源文件中找出新的账户名以及口令。除非万不得已,否则最好的做法就是过滤掉1433端口(Microsoft SQL服务器)。

8.5.13、保护敏感文件

本章故事中的黑客攻击最后都成功了,都是因为存储在服务器上的源代码没有被充分保护起来。在特别敏感的环境下,例如公司的R&D或者发展小组,应该通过口令技术来提供另一层安全。

对于单独的开发者,另一种方法(在拥有大量人员请求访问开发中的产品源代码的大型团队环境下,这个方法可能不实用)就是釆取加密极度敏感的数据,例如产品源文件:例如PGP Disk或PGP Corporate Disk。为这些产品创建虚拟的加密磁盘,但是对用户来说是透明的。

8.5.14、保护备份

如上面故事中所提到的,雇员们——即使是那些特别在意安全事宜的雇员——都会很容易忽视非授权人员对备份文件可读性的安全保护,其中包括电子邮件备份文件。在我自己以前的黑客生涯中,我发现许多系统管理员会留下未保护的敏感文件夹的压缩档案。同时在一家较大的医院IT部门工作时,我注意到职工工资数据库被例行备份后没有任何文件保护措施——所以任何在行的人都可以获取它。

当Robert通过在Web服务器上可公共访问目录中的商用邮件列表应用程序而找到了源文件备份时,他实际也是利用了这个工作人员未保护好备份的疏忽。

8.5.15、保护MS免遭SQL注入攻击

Robert故意从基于Web且被设计为避免SQL注入攻击的应用程序里移除了输入确认检测。以下几步可以让你不会再被类似Robert这样的黑客用同样的方法欺骗你的系统了。

  • 不要在系统上下文中运行Microsoft SQL服务器。

  • 考虑在不同账户上下文中运行SQL服务器。

  • 当开发程序时,不要写生成动态SQL查询的语句。

  • 利用存储过程来执行SQL查询。建立一个只用于执行存储过程的账户,同时在账户上建立必要的许可去完成所需任务。

8.5.16、利用Microsoft VPN服务

利用Windows认证作为认证方式,这使得黑客搜寻脆弱口令去获取VPN访问权限的难度降低。在某些环境下,要求对VPN访问的智能卡认证可能会比较适合——有些地方使用一个认证功能更强的形式,而不是使用一个共享的密钥将会增加黑客攻击的难度。还有在某些情况下,控制基于客户IP地址的VPN访问可能比较适合。

在Robert的攻击中,系统管理员应该监视VPN服务器,以便发现任何新加入到VPN组的用户。前面还提到一些方法,包括从系统中移除匿名账户,保证一个适当的进程来移除被辞退的雇员账户,或使之不能再被启用,同时,严格控制在工作日并且工作时间里进行VPN及拨号访问。

8.5.17、移除安装文件

Robert并没有搜寻邮件列表自身程序,而是利用了应用程序默认脚本的弱点,最终获取到了邮件列表。因此,一旦一个应用程序被成功安装,安装脚本就应该立刻移除。

8.5.18、重命名管理员账户

任何连接到Internet上的人可以在Google上输入“default password list”来找到一个站点,列出了制造厂商设置的默认状态下的账户和口令。因此,如果可以的话,重命名guest和管理员账户不失为一个好主意。虽然这没有任何好处,但是,当账户名和口令不受阻碍地被存储着,那就会发生如同Erik攻击的那家公司一样的情况。

8.5.19、让Windows更健壮——避免存储某些资格

WINODWS的默认配置会自动缓存口令散列和存储拨号上网的明文门令。在获取足够权限后,黑客会尝试着析取足够多可能得到的信息,包括存储在注册表或者系统其他区域的口令。

一个得到了信赖的内部人员在他的工作站正在缓存当地口令时,只要通过使用一点点社会工程就可以侵占整个域。我们不满的内部人士要求得到技术支持,抱怨他不能在他的工作站里登录。他想要技术人员来立刻施以援手。技术人员来了,用他的身份登录上了系统并解决了“问题”。一会儿后,这个内部人员析取了技术人员的口令散列并破解了它,并把自己的雇员访问权限提高到技术人员的管理员权限(这些缓存的散列被二次散列了,所以它需要另外一个程序去解开并破解这种类型的散列)。

许多程序,如Internet Explorer和Outlook,都把口令缓存在注册表内。若想知道如何使这种功能不可用,可以去Google搜索:“disable password caching”。

8.5.20、深度防御

本章描述的故事相对本书其他章节来说显得更为生动,同时也给你的公司网络的电子防御不足敲响了警钟。在当今这种环境下,随着公司邀请用户到他们的网络,防御力度也变得越来越衰退。同样,防火墙也不能阻止所有攻击。黑客将通过尝试搜索被防火墙规则允许的服务来寻找在防火墙内部的攻击。一个缓解的策略就是替换掉在他们自己网络段上的任何公共访问系统,同时仔细过滤进入比较敏感的网络段的网络流。

例如,如果在公司网络上有一个backend SQL服务器,那么二级防火墙可以设置为只允许运行服务的端口的连接。建立内部防火墙来保护敏感信息可能会给你带来某些损害,但如果你真的想保护你的数据,不被想的怀有恶意的内部人员或外部入侵者突破外部防御得到的话,这还是很有必要的。