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测试脚本并不是一件简单的事情,其复杂程度往往超过实现协议本身,在实际的测试中往往需要借助专业的测试框架、测试套件,或者根据实际情况设计比较有针对性的测试用例进行测试。
文章名称/相关信息 |
Two statistical traffic features for certain APT group identification---2022.06 |
作者想解决什么问题 |
作者想解决APT攻击C2阶段的检测问题。 |
作者通过什么理论/模型来解决该问题 |
1、特征选择:C2Load_fluct被添加到DNS特性集,而Bad_rate被添加到TCP和HTTP/HTTPS特性集。 2、PADASYN sampling algorithm对不平衡的样本常用处理 3、使用优化后的adaboost算法的对恶意流量辨识。 |
作者给出的答案/解决方案是什么 |
作者着重于C&C连接阶段,分析了某个APT组样本的特征,提出了两种新的流量统计特征。同时,为了解决数据集不平衡的问题,提出了一种数据采样算法,并使用优化后的AdaBoost算法对APT组进行识别。 |
作者为什么研究这个课题 |
因为作者发现了某一APT组攻击的DNS和TCP流量,构建了C2 Load_fluct(C2响应包负荷波动)和Bad_rate(坏包率)两个新特征,可用于APT组的识别。 C2Load_fluct描述了单位长度所携带的信息与域名之间的相关性。C2Load_fluct的值越低,使用域名进行信息传输的可能性就越高。Bad_rate反映了生成APT恶意流量和正常流量时的网络状态。 |
目前这个课题的研究进行到了什么阶段? |
作者使用AdaBoost分类器,并与决策树、KNN、朴素贝叶斯和SVM算法进行了比较,采用f1分数对识别效果进行评价。
|
这篇文章存在哪些缺陷? |
Bad_rate特征在其他APT组流量中也有相当多的0,因此该特征对其他APT组的识别影响很小,即坏包率的特征对APT检测不具有普适性。 |
作者关于这个课题的构思有哪几点? |
1、在数据传输阶段,大多数攻击者通过DNS获取与域名对应的IP信息,并将远程C&C与TCP、HTTP/HTTPS协议进行连接起来。 2、APT恶意软件产生的流量有两个主要目的:一是与远程C&C服务器建立连接;另一个是数据被窃取并传输到远程服务器,导致数据泄漏。除了恶意流量分类的常见特征外,还需要考虑隧道传输造成的数据泄露等情况。 3、APT组使用远程控制命令窃取数据。在数据传输过程中,可能会受到网络限制和C&C端迁移的影响,导致数据包无序和重传。因此,正常流量的无序和重传可能性低于APT恶意流量。
|
自己的反思 |
1、可以从特征入手,发现C&C传输阶段没有发掘到的,特殊的特征。 2、通过杀伤链模型和因果场景生成算法来映射流量和攻击阶段。针对C2通信,有在被入侵主机的尝试连接阶段,也有成功入侵以后的传送数据阶段,特征不同。 3、Gans |
相关APT的研究 |
从特征角度分析: 1、Yan等。[6]认为在一些APT攻击中,DNS的解析过程是不寻常的,所以他们提出了一个特征即APT攻击中DNS响应与识别可疑DNS行为的请求之间的时间间隔。 2、[7]发现大多数APT攻击会定期使用DNS定位C&C服务器进行信息传输,这将在网络流量和DNS日志中留下一些记录。他们结合了字符串匹配和基于DNS流量的傅里叶变换来检测到的APT恶意软件。 3、HTTP流量特性[8],即由APT恶意软件产生的HTTP流量与正常上网用户的正常HTTP流量无关。基于这一观察结果,他们分析了HTTP流量的报头字段,以发现与数据泄露和其他可疑的APT活动相关的APT恶意软件流量。 深度学习提取特征:(缺点是样本要足够大,然而,APT攻击样本的数量很少,而且标记网络流量数据集的过程特别昂贵) 1、10]提出了一种基于多路径残差学习的卷积神经网络(CNN)结构,以学习不同粒度的特征,以提高神经网络的表达能力和特征表示的多样性。 2、11]利用一维卷积网络分析混合神经网络的序列特征,并使用深度神经网络进行学习高维特征向量的特征,包括一般统计特征和环境特征,对网络异常检测进行综合分析。以及其他研究12]提出了多分布式变分自动编码器(MVAE)。标签信息允许MVAE在潜在特征空间中强制/划分网络数据样本在不同区域的不同类别。还有一些文学作品13]使用标准化的UTF-8字符编码进行空间特征学习(SFL),可以完全提取实时HTTP流量的特征,而无需使用加密、熵计算或压缩。其他研究14]设计了一个基于元学习框架的深度神经网络(DNN)全卷积网络(FC-Net),该网络由一个特征提取网络和一个比较网络组成。
|