对错误,漏洞和对错误,漏洞和exploits的说明的说明
对错误,漏洞和exploits的说明
作者:Mark Vogels
翻译:黯魂[S.S.T]
在这篇文档中,我将会试着为你提供一个对于错误,和由于那些错误而产生的漏洞以及它们的exploits的基本认识。那决不意
味着能让你完全理解exploits和漏洞,但是能帮助你学会认识可能的漏洞以及怎样处理它们。
一般而言有3种不同类型的错误会可能危及计算机系统和网络的安全。
#编程错误
#配置错误
#设计错误
错误可以被看成是失误,尽管它们并非都是由事故导致的。软件/设备的最初创建者可能就存在错误,用最好的想法却创建了
错误,并且没有意识到它可能就是一个潜在的威胁。这听上去可能有点糊涂,但是稍后在文章中都将会被澄清。为了深入探讨
关于错误的细节,我们需要创建一个对不同类型的错误的定义以至于我们能更容易认识它们。
不同错误类型的定义
编程错误:
编程错误通常是由程序编写者造成的。最常见的可利用编程错误是缓冲区溢出。把缓冲区溢出想象成一个空的杯子:程序的使
用者将要倒咖啡到杯子里,但是程序编写者事先并不知道使用者将会倒多少咖啡在里面。所以程序编写者必须在使用者把咖啡
倒进杯子之前检查和测试,以阻止咖啡从杯子里溢出。有时候检查输入大小并不容易,或者由于时间紧迫,程序员没有时间写
足够广泛的错误检测函数。那么结果就是:可能的缓冲区溢出和其他的编程错误被创建。
另一个编程错误的例子是:当用户做一些预料之外的事,比如加载一个错误类型的文件到程序中时,程序会崩溃。当然不是所
有的编程错误都需要用户输入才能做一些预料之外的事,像使程序崩溃。一个程序也会取决于总是在一个明确位置的特殊文
件。如果那个文件被移动,并且程序员没有预料到,他就不可能在程序尝试打开它之前检测文件是否还是在那个位置。假如程
序在打开那个文件后尝试用它运行,这就会导致不可预见的行为。
这些类型的错误发生得相当频繁,并且大多时候厂商都会分发补丁包来解决由消费者或者他们自己发现的被报告的错误。
配置错误:
这样想象一个配置错误:如果你是一个网络管理员并且你需要运行一个防火墙来保护你的网络。习惯上,你会允许任何进出的
流量,除专门拒绝的流量种类之外。
一个简单的例子是防火墙仅仅阻塞了80端口,然而它将允许来自因特网的任何人连接到防火墙的配置页面重新配置它。其余
的端口都是开着的。这明显就是一个配置错误,任何人都能通过使用另一个端口号来绕过防火墙。
幸运的是大多数厂商都知道这个错误,因此他们都正确的做了相反的处理:任何流量都被阻塞除非专门允许的。所以自从端口
被关闭以后,网络管理员都不再需要担心发现的新问题,通过一个不使用的端口能访问他的网络。(这里我只使用端口来举例
子,不过这在相同的端口上也能应用不同类型的流量。)
另一个配置错误的例子是,在一个网络中的不受管理的hub代替可管理的交换机的用法。不同之处是,hub发送所有进入的数
据包到所有的端口,因为它并不知道在它后面的接收者被定位到哪个端口,而交换机知道。所以,在一个使用hub代替交换机
的网络中运行一个sniffer,允许一个攻击者查看包含可能的用户名及密码的更多数据包,解决办法就是在网络中使用交换机。
即使现在这是一个配置错误,但在过去却不是,因为那时交换机还不存在。
设计错误:
设计错误可以被看成是在软件设计阶段发生的错误。即使程序员花足够的时间在软件发布之前编写检测流程来检验所有用户的
输入,即使软件被最终用户正确地配置,这些错误仍然会造成对于一个网络的安全的极大危险。
让我们看看这种情况:一个公司决定开发一个软件,这个软件允许远程访问到一个网络。那么他们也不得不支持这个软件,从
而他们决定放一些后门在里面以至于能使用公司名字作为密码远程登录。如果公司以外的人发现了那些后门呢,会发生什么?
他使用那个软件的远程访问能够登录进任何一个网络。结果将会是损失惨重的!
尽管这些后门在过去被创建的相当频繁,现在一个公司销售类似的软件却不会再带来风险了,因为他要对攻击者的滥用后门负
责。
另一个设计错误的例子是使用在安全无线网络中的WEP加密。我不打算深入说明这为什么是一个设计错误,毕竟那超出了这
篇文章的范围,但是它的基本流程是这样的:
一个3字节的初始化矢量增加到公钥中来加密每个唯一的数据包。假设公钥是abcde。第一个数据包的初始化矢量是123,因此
评论0
最新资源