攻防:黑客技能与Fuzz测试
文/H3C攻防团队
对付信息安详规模,2014年无疑是动荡不安的一年,Heartbeat、Shellshock、贵客犬、沙虫等裂痕一连不断的产生。对付普通公共和相当一部门技能人员来说黑客技能老是带着一些神秘的色彩,可是任何人在仔细研究之后城市发明,黑客技能并没有那么神秘,它和我们写的每一行代码、设计的每一个测试用例一样,都遵循最根基的道理。
一、 黑客技能黑客技能是许多技能的荟萃,涵盖计较机技能的多个方面从硬件、系统、应用到WEB等,由于涉及的常识较多,很少有研究者可以或许在各个方面都做到能干,因此掌握其本质和主线就显得尤为重要。
1. 裂痕与黑客技能在相识黑客技能之前我们有须要先相识一些黑客技能的对立面—信息安详方面的一些常识。如图 1所示,信息安详的焦点在于权限打点,保密性、完整性、可用性、不行诡辩性等要素都是环绕着权限展开的;认证、防火墙、入侵检测等技能本质上都是为了确保信息被拥有权限的主体利用。
而黑客技能和信息安详正好相反,黑客技能则是为了得到犯科权限(如图 2所示)。现实中任何系统在设计的时候城市做一些权限的限制,但由于各种原因,这些限制并非牢不行破,个中往往存在各类百般的裂痕,可能是操纵人员的失误、可能软件设计的裂痕,正是因为这些裂痕的存在,黑客技能才得以成为现实。因此黑客技能的焦点在于获取犯科权限,其实现方法是挖掘和操作裂痕。
由前面的阐明可知裂痕是领略黑客技能的主线与焦点,所以裂痕挖掘技能和操作技能是黑客的两大焦点技术。对付任何一个软件系统或IT系统,其安详性或进攻难度取决于裂痕的几多和裂痕的操作难度。传统的安防产物的思路是提高裂痕的操作难度,而淘汰裂痕的数量则是软件或设备提供商思量的工作,但也有一些新兴的安详公司譬喻Codenomicon提供专业裂痕挖掘的产物。
图 1 信息安详3要素
图 2 黑客技能的焦点
2. 安详裂痕的分类由于信息技能的高速成长,此刻的软件系统异常巨大。最初的软件产物只分为硬件和软件两个构成部门,相对而言,裂痕的种类较量有限;此刻的软件产物软件层面多,可分为驱动、操纵系统、应用措施、剧本、WEB等层面,并且软件产物的种类也很是多,因此为裂痕的分类提出了庞大的挑战。
今朝对付裂痕分类最权威的是由美国网络安详与通信办公室、美国疆域安配合推出的CWE(Common Weakness Enumeration,通用裂痕列举),CWE收录了上千种裂痕范例,虽然包罗熟悉的缓冲区溢出、DDoS、SQL注入、跨站剧本等,这些资料对付研究安详裂痕长短常重要的,不外对付相识黑客技能来讲显得过于细节化了。为了便于相识我们可以简朴得将裂痕分为如下几个层面:
表1 裂痕的简朴分类
在现实的渗透测试中,陈设应用和运作打点裂痕是最常见的,Rapid 7 首席信息安详官暗示:“利用默认暗码可以会见险些一半的互联网。”许多人对付黑客技能的误解就在于此,任何单个的技能看起来都是简朴的,但各类技能组合起来,结果大概会相当惊人。但对付网络设备厂商,软件编码裂痕和软件设计裂痕才是最值得存眷的。
二、 Fuzz测试1. 什么是Fuzz测试?裂痕挖掘有三种要领:白盒代码审计、灰盒逆向工程、黑盒测试。个中黑盒的Fuzz测试是效率最高的一种,可以或许快速验证大量潜在的安详威胁。
Fuzz测试,也叫做“恍惚测试”,是一种挖掘软件安详裂痕、检测软件结实性的黑盒测试,它通过向软件输入犯科的字段,视察被测试软件是否异常而实现。Fuzz测试的观念很是容易领略,假如我们结构犯科的报文而且通过测试东西打入被测设备,那么这就是一个Fuzz测试的测试例执行,大大都测试工程师必定都实验过这种测试手段。
对付网络协议裂痕挖掘来说,Fuzz测试也就意味着打入各类异常报文,然后调查设备是否有异常。
2. 针对FTP sever的Fuzz测试在本节我们将设计一个简朴的针对FTP server的Fuzz测试剧本。从道理上设计Fuzz测试用例是较量简朴的,无非是阅读RFC,按照报文设计异常字段,但在实际实施进程中将会碰着以下几个问题。
m 网络协议是有状态的,最常见的一种环境就是,我们需要在协议状态机举办到某种状态的时候发送某种报文,好比FTP协议,假如我们想对put呼吁的参数举办变异、发送异常报文,则我们需要先通过FTP认证;因此要想实现协议的fuzz测试,则只妙手工编写剧本,现有的东西和测试仪都无法实现这些巨大逻辑。
m 别的如何结构异常,这是一个和履历相关性较量大的问题,需要恒久积聚,以及对安详裂痕有较深入的研究。
m 如何检测被测设备是否异常,这也是一个很是棘手的问题,好比内存泄露,大概只是泄露几个字节的内存,这时候被测设备外部表示正常。
在本节中先容的FTP server的Fuzz测试中,仅结构较量简朴的异常—--超长的报文;设备异常通过查抄FTP毗连的状态来判定。被测设备选择MSR36设备和日常事情中常用的3CDaemon FTP server2.0。详细测试步调分为如下。
¡ 输入超长的FTP用户名,被测设备应该表示正常;
¡ 正常登岸FTP后,对付FTP呼吁“mdelete、cd、mkdir、cwd、mdir、mput、rename”输入超长参数, 被测设备应该表示正常。
按照测试用例设计相应的测试剧本,测试剧本利用python语言编写。剧本主要由三个函数构成。
m get_fuzz_str()函数,用于生成Fuzz str,即异常报文的要害部门;在本例顶用于生成超长的字符串“aaaaaa…”(如图3所示)。
图3 get_fuzz_str代码
m fuzz_FTP_usr()函数,用于发送超长的用户名,要害代码如图4所示,将超长的字符串4串拼接在一起,作为user的参数发送给处事器。
图4 fuzz_FTP_user()函数要害代码
m fuzz_FTP_cmd()函数,用于发送超长的呼吁,要害代码如图5所示,对每一个呼吁结构异常的参数,然后发送给处事器。
图5 fuzz_FTP_cmd()函数要害代码
之后,执行测试用例,设定被测设备为MSR36设备,MSR36设备表示正常,未发明任何问题(如图6所示)。
图6 MSR36测试功效
将被测设备设定为3CDaemon FTP server,测试功效如图7所示,看起来剧本找到了一个安详裂痕;为了验证我们用windbg调试FTP server看一看,如图8所示可以看到3CDaemon FTP server已经被溢出了,EIP寄存器被我们的字符串“aaaa”包围,从而导致措施瓦解,并且从调试器看到这是一个栈溢出裂痕,这些信息会为进一步的裂痕操作提供线索。
图7 3CDaemon FTP server测试功效
图8 3CDaemon FTP server调试功效
通过这个简朴的Fuzz测试剧本乐成找到了一个缓冲区溢出裂痕。
三、 竣事语假如将裂痕作为领略黑客技能的焦点,黑客技能自己已经不再神秘,在日常测试中,颠末简朴设计的测试用例即可完成裂痕挖掘的事情。可是应该看到的是跟着安详技能的成长,挖掘裂痕和操作裂痕肯定更为巨大。实际上针对协议设计Fuzz测试剧本并不是一件简朴的工作,其庞洪水平往往高出实现协议自己,在实际的测试中往往需要借助专业的测试框架、测试套件,可能按照实际环境设计较量有针对性的测试用例举办测试。