大话Fuzz测试

对于信息安全领域,2021年无疑是动荡不安的一年,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测试脚本并不是一件简单的事情,其复杂程度往往超过实现协议本身,在实际的测试中往往需要借助专业的测试框架、测试套件,或者根据实际情况设计比较有针对性的测试用例进行测试。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容