学习入侵躲避技术—理解AET

学习入侵躲避技术—理解AET

大家好,又见面了,我是全栈君。

什么是入侵躲避技术
2010
10
18
日,芬兰的Stonesoft
公司宣布发现了一种新型的高级逃逸技术(AET
Advanced Evasion Technique
),可以轻松躲避目前的IPS/IDS
检测,成功入侵目标服务器,震惊了信息安全界。作为这个技术的佐证之一,就是近年来令大家迷惑的未知攻击越来越多,未知攻击就是只知道被攻击了的事实,却不知道黑客采用了什么手段,何时进行的入侵,遗憾的是目前的安全措施都没有发现其踪迹。
后来,Stonesoft
公开了其中的部分技术细节,大概40
多种组合躲避技术,并发布一个针对漏洞(CVE-2008-4250/
CVE-2004-1315)
的躲避技术演示工具软件。演示结果简单明了:入侵者对没有打补丁的目标服务器直接入侵,成功建立远程SHELL
;中间部署IPS
设备后,开启安全防护策略,直接入侵则不再成功;通过调整软件上的组合参数,如IP
参数、TCP
参数等,很快入侵成功的SHELL
窗口再次打开。
其实早在1998
Newsham
Ptacek
就发表论文,讨论利用IP
碎片技术躲避网络入侵检测设备了,只是当时没有引起安全界的重视,而他们的研究对黑客来说,可谓是思路广开,随后的几年,这种技术被广泛使用于实际的入侵攻击中,尤其是APT
攻击,针对性很强,效果非常好。
高级逃逸技术(AET)
是黑客利用协议组合的技巧,躲过网络上安全措施的检查,成功抵达目标,实施入侵攻击。我更喜欢翻译成为高级躲避技术,或者是入侵躲避技术;躲避是指还处在你监视环境下继续生存,但我成功地“隐身”了自己,逃逸则是我设法逃出你的监视范围。入侵躲避技术的目的还是要入侵,而不是逃走了事。下图是入侵躲避技术的原理:
学习入侵躲避技术---理解AET 
入侵躲避技术的分类:
入侵躲避技术可谓是种类繁多,实际上就是利用安全设备与目标主机对各种协议、各种字符集,以及他们的组合处理的差异,合理地躲避了检查,成功入侵了目标。因此,入侵躲避技术是有针对性的,不是一种方式走天下,而是在具体的入侵环境中,选择不同的参数组合、协议组合、字符集组合,达到躲避的目的。
 
根据躲避安全措施的不同分为:
1.         
网络入侵躲避技术:躲避网络上的安全检查,如FW\IDS\IPS\WAF\UTM
等,其中主要部分是IPS
。需要躲避的是入侵时的攻击行为,如漏洞探测,上传的恶意代码,如ShellCode
,下传敏感信息,如口令文件;
2.         
主机入侵躲避技术:躲避主机(
目标服务器)
上的安全检查,如主机防入侵防御软件\
主机防病毒软件等。典型的技术是进程注入、rootkit
等。
 
其中网络躲避又可以根据躲避的方向分为:
1.         
单向躲避:目标点没有接应的,躲避了安全检查的攻击流应该能被目标主机正常“理解”,完成入侵行为,否则即使躲避了中间的安全检查,也达不到入侵的目的。单向躲避一般应用在入侵过程中;
2.         
双向躲避:目标点有接应者,只要躲避了中间的安全检查,到达目标后,接应者负责信息的还原。双向躲避一般应用在攻击成功后的恶意代码传递与远程控制联络。
 
常见的网络躲避技术有下面几类:
1.         
字符变换:IPS
一般基于特征比对与行为模式识别,若把传输的内容变成检查者不认识的“外文”,就容易蒙混过关。这个方法常被用在注入攻击中的不同字符集之间的转换。寻找到IPS
与目标主机对某字符集解释的差异,就可以实施躲避攻击;典型的方式是SQL
注入;
2.         
协议组合:每个业务链接会使用多个协议,利用网络各种协议的参数组合,如包大小、碎片处理、重叠处理、多线程传送等,由于IPS
与目标主机解析协议的处理方式不同,就可以躲避IPS
的特征检查,同时又可以达到攻击的目的;
3.         
传输加密:加密本是直接躲避技术的首选,但加密需要到达目标解密后才能使用,而在攻击过程中,目标的解析者是标准的应用服务,加密就不能达到入侵效果。同时,越来越的网络环境中限制加密的连接,因为管理者不能监控你的通讯内容;因此,加密方法一般使用在双向躲避的部分环境中。
 
    
涉及主机躲避技术,本人在《服务器入侵加固的几种方式》中有所介绍,本文主要讨论网络躲避技术,就重叠分片躲避与多线程躲避为例,分析一下网络躲避技术的原理。
 
重叠分片躲避技术分析
把一个大的数据包分成多个切片(IP
)
传输,是TCP
协议的功能之一。正常的情况下接收端按照切片的编号、偏移量,再重新组装成完整的数据包。
正常的协议解析过程是每个分片顺序排列,并且按序号送达目的主机。由于网络的不同路径延迟不同,造成到达目标的分片不一定是顺序的;某个分片或许中途损坏要重传,延迟自然更大一些;有些系统本身的Bug
,分片时偏移量写错了,造成分片之间有重叠
这里只讨论一种分片重叠的躲避技术,如下图:
我们可以看到,在正常的分片中,第二个分片中有恶意代码的特征,IPS
通过缓存各个分片的负载,就可以还原数据包,自然就可以发现这个特征。
为了躲避IPS
的检测,我们故意把第一分片的后面增加了一段随机数据(
其大小甚至可以覆盖分片2
,或更长)
,同时增加分片1
的长度,分片2
与分片3
都不做改动。
这样分片1
与分片2
的内容就有重合了,目标服务器接收时,对于重合的部分是选分片1
的,还是选分片2
的呢?我们知道,这个最终结果要根据目标服务器的操作系统而定,不同操作系统,或者有些版本之间的处理方式是不同,归结为TCP/IP
协议栈的代码编写。有选分片1
的,也有选分片2
的,但告知发送方分片有错误,要求重传的不多。
这样就出现了一个问题:负责安全检查的IPS
采用的方式是前向的,还是后向的呢?目前大部分IPS
厂商还不能确定其后边的服务器采用什么样的操作系统,无法自动匹配具体的应用环境,要两种方式都检查的话,需要设立双倍的缓冲区内存,显然是不划算的。因此,大部分厂家都只选择一种,比如是前向的,即分片重叠时,数据选择前一个编号的数据为准。
学习入侵躲避技术---理解AET
现在机会就来的,我们在分片1
后面加了随机数据,覆盖了分片2
的恶意代码部分,IPS
的协议栈中重组的数据包就是良性的数据包,成功地躲避了IPS
的安全检查。
而此时目标服务器的协议栈正好是后向方式,重叠部分采用分片2
的数据,重组的数据包正是原来的入侵数据包,目标服务器被实施攻击。
 
重叠分片适用于单向躲避,尤其是攻击前的扫描、漏洞溢出、提权等阶段。测试实际环境中IPS
是前向的还是后向的,是比较容易的,正常访问中带些恶意代码,测试一次就知道了。此后,就可以放心大胆地对IPS
后面采用不同协议栈的应用放手攻击了。
 
多线程躲避技术分析
多线程技术大家应该不陌生,很多下载工具都在使用。我们知道,每个连接传送数据包要一个一个地来,速度上是受限制的,不能充分利用网络带宽。多线程的意思就是在源和目的地址之间同时建立多个连接线程,把一个要下载的文件分成若干个部分,每个线程负责一个部分下载,当有线程闲置时,就继续传送下一个分块。接收方按照文件切片的偏移量与编号重组文件。
学习入侵躲避技术---理解AET
很显然,在每个线程中看到的全部数据流都是割裂的,小的、碎的数据块;对每一个线程的数据缓存,都不能进行有效的特征比对。由于IPS
厂商是针对连接建立应用缓冲区的,三个线程的数据分布在三个缓冲区中,并且每个分片的编号与位置信息,是收发双方的主控进程管理的,并非通用协议可知信息,因此,IPS
即使知道入侵者采用多线程在传送,也无法还原原始的数据包。并且,由于IPS
无法知道主控进程管理着哪些子线程,所以也无法判断哪些连接属于同一个多线程组合。
有人提出建议:多线程的特点是同源同目的地址,并且是同协议,还是同一个连接时段,有些安全策略甚至可以限制这样的连接对大个数为1
,限制使用多线程技术。
但入侵者完全可以让不同的线程采用不同的协议,只要是IPS
允许的协议都可以,如线程1
采用http
,线程2
采用FTP
,线程3
采用SNMP
。在IPS
看来,这完全就是同源同目的地址之间的三个业务连接,这这种业务模式是常见的,如员工连接到公司,发邮件,访问网站等。
 
多线程躲避技术适用于双向躲避,不同于加密通讯,又类似于加密技术。尤其是入侵者远程控制肉鸡时,多线程等于多条控制渠道,这些通道同时启动,避免有些通道被发现,或被关闭时,对肉鸡失控的状态;同时也可以避免有人冒充自己,利用自己的肉鸡。
 
小结:
    
这里只是对入侵躲避技术的一个初步认识,在今后的讨论中我们再将进一步分析各种躲避技术的原理与方法。





本文转自 zhaisj 51CTO博客,原文链接:http://blog.51cto.com/zhaisj/1173352,如需转载请自行联系原作者
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107966.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • STL库 总览_stl库函数

    STL库 总览_stl库函数  STL库1泛型程序设计2STL标准模板库2.1STL库的基本组件2.1.1STL基本组件—-容器2.1.2STL基本组件—-迭代器2.1.3STL基本组件—-函数对象2.1.4STL基本组件—-算法3迭代器4容器的基本功能与分类4.1顺序容器  1泛型程序设计  泛型程序设计就是时候,将程序设计的尽量的通用。STL标准库就是泛型程序设计的一个很好的范例。  ◇编写不依赖具体数据类型的程序;  ◇将算法从特定的数据结构中抽象出来,成为通用的;  ◇

    2022年10月10日
  • 实现textarea内换行

    为什么会出现这个问题呢?是因为我在做自己个人网站的留言板时,我想预设好textarea的值,像这样,让用户输入的时候直接另起一行!不墨墨唧唧了,直接告诉你们,下面两种方法是没有用的。1.企图在html里面加上<br/><textareacols="15"rows="8"id="Txt">To

  • 【CSS3常用功能的写法】

    随着浏览器的升级,CSS3已经可以投入实际应用了。但是,不同的浏览…

  • 怎么给idea配置jdk_ideaj配置tomcat

    怎么给idea配置jdk_ideaj配置tomcat这里写自定义目录标题如何给Idea配置Tomcat安装Tomcat过程中出现的问题:怎么给idea配置idea如何给Idea配置Tomcat思路:首先下载好Tomcat安装包,然后安装好Tomcat,Tomcat安装成功后,再打开idea进行tomcat的配置。一、怎么安装Tomcat1.首先去官网(镜像网站)下载idea对应版本的tomcat2.下载完成tomcat后,放到你自己选择的文件位置。比如说我这里就是放在了D:\ProgramFiles\Java文件夹下面3.然后给Tomcat配

  • android定时器取消,Android定时器崩溃取消

    android定时器取消,Android定时器崩溃取消我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款。Android定时器崩溃取消然后我想要做的是点击一个按钮,然后创建一个电子邮件。除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃。当按下按钮时试图取消计时器时,也会使应用程序崩溃。任何帮助,将不胜感激。下面的代码片段:publicclassmyApplicationextendsActivity{StringBuild…

  • GitHub 标星 2.9w+,我发现了一个宝藏项目,作为编程新手有福了!「建议收藏」

    GitHub 标星 2.9w+,我发现了一个宝藏项目,作为编程新手有福了!「建议收藏」大家好,我是Rocky0429,一个最近老在GitHub上闲逛的蒟蒻…特别惭愧的是,虽然我很早就知道GitHub,但是学会逛GitHub的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞ACM,没有做一些工程类的项目,所以想当然的以为和GitHub也没什么关系(当然这种想法是错误的)。后来自己花了一个星期看完了Pyt…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号