在漏洞利用开发中规避 IDS

信息安全 开发 身份证 缓冲区溢出
2021-08-30 09:52:31

在缓冲区溢出漏洞利用开发的背景下,有人问我:

Discuss how your exploit may be modified to evade an Intrusion Detection System.

我不是要求完成我的作业,但在使用了我最好的 Google-Fu 之后,我能找到的唯一答案是使用编码器(如shikata_ga_nai)

在利用开发中是否有其他方法可以规避 IDS?

鉴于上下文,这似乎不太可能是我唯一应该讨论的事情,但正如我所说,在花了一个晚上之后我找不到其他任何东西。

4个回答

虽然另一个答案侧重于修改漏洞利用本身,但您也可以修改漏洞利用的传输,以便 IDS 不会检测到它(免责声明:其中一些指向我自己的研究)。

一些关于如何在应用层上使用 HTTP 执行此操作的示例(即,在浏览网页时进行驱动下载等):

  • 使用有效但不太常见的 HTTP 压缩方法,浏览器支持但 IDS 通常不支持。通常一个简单Content-Encoding: deflate的就足够了,比如ZScaler 或 Comodo WebinspectorSophos UTM (fixed)
  • 结合 HTTP 压缩,例如使用Content-Encodingofdeflate, deflategzip, deflateBro、Snort、Suricata 甚至 VirusTotal 等 IDS只查看第一个或最后一个压缩方案,而 Firefox 或 Google Chrome 等浏览器则接受多次压缩的内容。

在通过电子邮件发送恶意软件时,可以通过玩内容传输编码来完成类似的规避。

然后有一个关于在传输层规避 IDS 的很好的研究。有一篇关于Evading Deep Inspection for Fun and Shell的论文以及来自 Blackhat 13 的视频

当然,您也可以修改漏洞利用本身。是关于如何修改现有漏洞的一个很好的描述,以便普通的 AV 不再检测到它们。

其他规避技术使用社交方法来规避 IDS,例如将漏洞利用放入加密的 ZIP 文件中,将其附加到邮件中,并将密码也写入邮件中。如果做得好,受害者将被引诱使用提供的密码打开文件,只是为了获取内容(如其公司的所谓工资清单或类似的陷阱)。由于 IDS 不知道密码,因此它无法检测到恶意软件。

  1. 利用现成的系统资源。
  2. 字母数字外壳代码。
  3. 加密 shellcode。
  4. 多态shellcode。
  5. 变形的shellcode。

http://www.tenouk.com/Bufferoverflowc/Bufferoverflow5.html

点击链接并跳至“更高级的技术”以获取更多信息。

与其使用谷歌来寻找“如何避免 IDS”的答案,不如把它转过来。搜索 IDS 并阅读各种 IDS 解决方案。要回答这个问题,您首先需要定义 IDS 的含义。不是字母代表什么,而是您理解该术语所指的内容和使用的主要技术。您会发现它们分为几种典型类型 - 例如,网络/防火墙 IDS 系统可以执行深度数据包和协议检查、可疑连接模式和端口扫描检测等操作,以及查找异常进程、文件系统更改的 OS IDS 、异常的网络活动等以及可能监控连接、数据输入等的应用程序 IDS。

一旦你有了明确的定义,然后阅读适合你定义的各种技术。然后考虑如何能够击败这些技术。

由于您的问题是指讨论如何修改您的漏洞利用以避免检测,因此可以假设您有特定的漏洞利用。看看您找到的各种 IDS 如何检测您的漏洞,然后尽情发挥想象力。例如,如果您的漏洞利用建立多个连接,您可能会在每个连接之间添加延迟以击败 IDS,该 IDS 在短时间内寻找来自 IP 的高级别连接,或者您可能会更改您的漏洞利用以使用不同的传输协议高水平的流量,例如 http 或者您可以将其伪装成 DNS 流量等。

答案真的取决于你的利用。为了提供良好的响应,您需要知道哪些 IDS 技术可以检测到您的漏洞利用。

同意 Steffen 对他最初的几种方法的看法。

此外,我在这里回答了一个类似的问题——https: //security.stackexchange.com/a/83497/140——并且应该应用使用 SniffJoke 的技术。更改您的网络流量通常比修改您的漏洞利用阶段或有效负载更好。但是,每种情况都不同。收集有关目标环境的更多信息并在实验室中模拟攻击,然后再进行实际操作。

关于编码的答案真的归结为这些问题——https ://www.scriptjunkie.us/2011/04/why-encoding-does-not-matter-and-how-metasploit-generates-exes/——编码器是旨在处理来自空格、换行符和换行符的 NULL 终止。编码器并不意味着提供混淆。