在斯诺登曝光了美国国家安全局的Man-on-the-Side攻击能力之后,我们看到已经有人专门发布了可以检测这种攻击的IDS特征,还有人发现既有的一些IDS特征也是能够检测这类攻击的。
FreeBuf科普:
Man-on-the-Side是一种类似中间人攻击手法: 中间人攻击是完全控制一个网络节点,而Man-on-the-side攻击则是攻击者监听通信信道利用时间差注入新数据。
尽管如此,有一些Man-on-the-Side攻击手法,如量子插入(QUANTUM INSERT),仍然可以秘密发动攻击,并且不会触发这些IDS特征。
0×01 关于 Man-on-the-Side攻击
Man-on-the-Side(MOTS)攻击具有下列两个特征:
- 攻击者能够读取流量信息并插入新消息,但是不会修改或删除通信方发送的消息。 - 当受害者发出请求时,攻击者利用时间优势让自己发送的响应先于合法的响应到达受害者。
实际上,这意味着攻击者可以利用数据包注入技术,插入一个含有效载荷的TCP数据包,来让受害者执行,比如插入一个HTTP重定向,将受害者引导至恶意网站等。这个注入的数据包的TCP序列号通常是与实际发自合法网络服务器的HTTP响应的序列号一致的。因此,终端节点将看到两个重复的TCP段,但是它们却含有不同的应用层数据。
0×02 为什么它难以检测
需要注意的是,对于那些设计用来检测带有不同数据的重复TCP流量的常规特征,例如Suricata特征2210050,是无法发现这类MOTS攻击的。
Suricata及其他方法之所以无法检测到这种攻击,主要是因为被注入的数据包中既有应用层数据(HTTP重定向),也有TCP FIN旗标。当收到这个伪造的数据包时,客户端(受害者)就会根据应用层数据指示进行重定向,同时关闭针对该Web服务器的当前TCP套按字,并以FIN+ACK数据包作为响应。这样,客户端就会忽略后面由实际的Web服务器发送的数据包,因为当这些数据包到达时,这个TCP套按字早就被关闭了。
入侵检测系统中的流量重组引擎也会忽略TCP套接字关闭后收到的数据包,因为它会假设TCP对话此时也关闭了。因此,当注入的TCP数据包携带有FIN旗标的时候,入侵检测系统是无法检测到带有不同数据的重复TCP段的。我创建了一个PCAP示例文件,专门用来说明这种情况,该文件名为mots-with-fin.pcap ,下载地址:点这里。下面是使用Tshark进行分析该PCAP文件时的一个截图:
上面,5号帧是一个“302 Found ”数据包,它是由攻击者注入的一个伪造数据包。TCP旗标值0×19被翻译为FIN+PUSH+ACK,这意味着攻击者试图拆除TCP连接。在8号帧中,客户端响应了一个FIN+ACK (0×11),而最后一个帧才是来自合法Web服务器的实际HTTP响应。
0×04 检测MOTS攻击
Martin Bruse开发了一款名为qisniff的软件,可以用来自动检测含有不同数据的重复TCP段。下面是利用qisniff分析mots-with-fin.pcap文件时的一个截图:
在上面的命令输出中,不仅可以看到被注入的内容<A>,还有来自实际Web服务器的合法内容<B>。实际上,qisniff所做的工作,基本就是重新组织数据流,并比将新收到的TCP段中的应用层数据与之前收到的TCP段重点数据进行比较。这是一种通用的检测方法,可以检测任何形式的TCP数据包注入,不管是量子插入攻击中的包注入,还是Airpwn注入或其他新兴的数据包注入攻击,都非常有效。
Martin的qisniff工具是一款开源软件,遵循GPLv2版权,下载地址:GitHub。需要注意的是,要想使用qisniff,需要事先安装Go 1.5以及gopacket。
0×05 结束语
在本文中,我们首先介绍了Man-on-the-Side攻击的基本特征,然后解释了为何传统的方法无法检测这种攻击,最后介绍了一种新的开源工具来帮大家检测这种类型的攻击。希望大家能够喜欢。
*原文:netresec 编译/I12016,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)