0x00 简介
在攻防演练中,使用云函数来隐藏 C&C 的 ip 地址已经成为了一种“标配”
在应急处置过程中,我们经常遇到 netstat -pantu | grep ip
无法找到安全设备关于红队外联的告警的情况
由于 C&C 的 ip 地址是一直变化的,所以常规的 netstat -pantu | grep ip
这种模式就可能行不通了
以目前国内厂商对云函数的支持来看,主要集中在 80, 443 这两个端口。所以如果要排查的服务器对外访问 80 和 443 不多的情况下还是可以一个一个分析的
但这终究是个麻烦事,所以有了今天的这篇文章
我们对抗云函数的方式无非就是从 DNS 解析下手
但是 Linux 默认的程序组合几乎无法实时获取到究竟是哪一个进程发起了对云函数的域名的 DNS 解析请求
所以,我们需要人工干预一下,将云函数的网站的解析地址换成我们自己的地址,之后通过筛选连接了我们指定的地址的 80 或者 443 端口的进程,获取到 pid 后再获取进程详细信息
0x01 查看 DNS 缓存记录
如果是 windows ,这件事是非常简单的,在 Linux 中就变得麻烦很多,我们需要使用下面的命令来进行获取 DNS 缓存记录
sudo killall -USR1 systemd-resolved
sudo journalctl -u systemd-resolved > ~/dns-cache.txt
cat ~/dns-cache.txt | grep tencentcs.com
如果攻击者使用了云函数,那么应该会保存 DNS 的解析记录,我们只需要将常见的云函数的网站地址作为筛选条件进行筛选即可,这里以腾讯云的云函数为例
常见云函数、CDN之类的网站地址有:
tencentcs.com
herokuapp.com
worker.dev
*.tk
假设获取到的域名为 service-123456.bj.tencentcs.com
0x02 服务器配置监控程序
当服务器对我们的监听端口发起了连接,就将发起连接的进程相关信息记录下来
此处 VPS ip 以 1.1.1.1 为例
#!/bin/bash
while true
do
sleep 0.1
pids=$(netstat -pantu | grep 1.1.1.1 | awk -F "/" '{print $1}' | awk -F " " '{print $NF}' | sort | uniq)
for one_pid in $pids
do
if [ $one_pid == "-" ]; then
continue
fi
echo "" >> $(pwd)/virus_info.txt
echo "[ lsof -p $one_pid ]" >> $(pwd)/virus_info.txt
lsof -p $one_pid >> $(pwd)/virus_info.txt
echo "" >> $(pwd)/virus_info.txt
echo "[ cat /proc/$one_pid/maps ]" >> $(pwd)/virus_info.txt
cat /proc/$one_pid/maps >> $(pwd)/virus_info.txt
echo "" >> $(pwd)/virus_info.txt
echo "[ ls -al /proc/$one_pid/exe ]" >> $(pwd)/virus_info.txt
ls -al /proc/$one_pid/exe >> $(pwd)/virus_info.txt
done
if [ -f "$(pwd)/virus_info.txt" ]; then
echo "Found it !"
exit
fi
done
0x03 修改 HOSTS 文件,建立解析记录
root 用户下执行,VPS IP 以 1.1.1.1
为例
echo "1.1.1.1 service-123456.bj.tencentcs.com" >> /etc/hosts
Linux 的 hosts 文件是不支持通配符的,也就是配置
*.tencentcs.com
是无效的所以,如果在 0x01 步骤未获取到云函数的具体域名,那就需要借助 Dnsmasq 这类程序或者外部网络设备来进行辅助,原理是一样的
0x04 在 VPS 上建立监听
mkdir listen_test
cd listen_test
python3 -m http.server 80
python3 -m http.server 443
0x05 使用 nmap 模拟对 C&C 的访问
virus_info.txt
文件内容如下
[ lsof -p 20657 ]
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nmap 20657 root cwd DIR 8,2 4096 524291 /home/join
nmap 20657 root rtd DIR 8,2 4096 2 /
nmap 20657 root txt REG 8,2 2961432 798351 /usr/bin/nmap
nmap 20657 root mem REG 8,2 47568 1581433 /lib/x86_64-linux-gnu/libnss_files-2.27.so
nmap 20657 root mem REG 8,2 97176 1581430 /lib/x86_64-linux-gnu/libnsl-2.27.so
nmap 20657 root mem REG 8,2 47576 1581435 /lib/x86_64-linux-gnu/libnss_nis-2.27.so
nmap 20657 root mem REG 8,2 39744 1581431 /lib/x86_64-linux-gnu/libnss_compat-2.27.so
nmap 20657 root mem REG 8,2 445768 798342 /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
nmap 20657 root mem REG 8,2 14560 1581426 /lib/x86_64-linux-gnu/libdl-2.27.so
nmap 20657 root mem REG 8,2 144976 1581438 /lib/x86_64-linux-gnu/libpthread-2.27.so
nmap 20657 root mem REG 8,2 2030928 1581423 /lib/x86_64-linux-gnu/libc-2.27.so
nmap 20657 root mem REG 8,2 96616 1581418 /lib/x86_64-linux-gnu/libgcc_s.so.1
nmap 20657 root mem REG 8,2 1700792 1581427 /lib/x86_64-linux-gnu/libm-2.27.so
nmap 20657 root mem REG 8,2 1594864 796948 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
nmap 20657 root mem REG 8,2 59408 798344 /usr/lib/x86_64-linux-gnu/liblinear.so.3.2.
nmap 20657 root mem REG 8,2 224048 798347 /usr/lib/x86_64-linux-gnu/liblua5.3.so.0.0.0
nmap 20657 root mem REG 8,2 116960 1573720 /lib/x86_64-linux-gnu/libz.so.1.2.11
nmap 20657 root mem REG 8,2 2917216 792886 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
nmap 20657 root mem REG 8,2 577312 792985 /usr/lib/x86_64-linux-gnu/libssl.so.1.1
nmap 20657 root mem REG 8,2 265344 792967 /usr/lib/x86_64-linux-gnu/libpcap.so.1.8.1
nmap 20657 root mem REG 8,2 464824 1573695 /lib/x86_64-linux-gnu/libpcre.so.3.13.3
nmap 20657 root mem REG 8,2 179152 1581419 /lib/x86_64-linux-gnu/ld-2.27.so
nmap 20657 root 0u CHR 136,1 0t0 4 /dev/pts/1
nmap 20657 root 1u CHR 136,1 0t0 4 /dev/pts/1
nmap 20657 root 2u CHR 136,1 0t0 4 /dev/pts/1
nmap 20657 root 3r CHR 5,0 0t0 13 /dev/tty
nmap 20657 root 4u IPv4 169623 0t0 TCP ubuntu:43930->service-123456.bj.tencentcs.com:domain (SYN_SENT)
[ cat /proc/20657/maps ]
55c0e5298000-55c0e53e6000 r-xp 00000000 08:02 798351 /usr/bin/nmap
55c0e55e6000-55c0e55eb000 r--p 0014e000 08:02 798351 /usr/bin/nmap
55c0e55eb000-55c0e576b000 rw-p 00153000 08:02 798351 /usr/bin/nmap
55c0e576b000-55c0e5792000 rw-p 00000000 00:00 0
55c0e66b7000-55c0e6c37000 rw-p 00000000 00:00 0 [heap]
7fe9f2ccb000-7fe9f2cd6000 r-xp 00000000 08:02 1581433 /lib/x86_64-linux-gnu/libnss_files-2.27.so
7fe9f2cd6000-7fe9f2ed5000 ---p 0000b000 08:02 1581433 /lib/x86_64-linux-gnu/libnss_files-2.27.so
...
...
7fe9f5d65000-7fe9f5d66000 rw-p 0002a000 08:02 1581419 /lib/x86_64-linux-gnu/ld-2.27.so
7fe9f5d66000-7fe9f5d67000 rw-p 00000000 00:00 0
7ffee5382000-7ffee53a3000 rw-p 00000000 00:00 0 [stack]
7ffee53a9000-7ffee53ac000 r--p 00000000 00:00 0 [vvar]
7ffee53ac000-7ffee53ae000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
[ ls -al /proc/20657/exe ]
lrwxrwxrwx 1 root root 0 Jul 2 15:03 /proc/20657/exe -> /usr/bin/nmap
我们可以获取到以下信息:
-
进程 pid 为
20657
-
启这个进程的二进制文件为
/usr/bin/nmap
-
启这个进程的时候攻击者所在的目录为
/home/join
-
启这个进程的用户为
root
Windows 也是同理,对于 CDN 的检查也可以参考这个模式
「圈子的最近主题和圈子内部工具一些展示」
纷传100%官方认证授权,可在发现-圈子页面查看
poc漏洞库 8000+src陆续更新中 -紧跟时代发展争做先进网安人
一起愉快刷分-榜上有名
免杀-护网必备
新手学习、老手巩固-温故而知新
学习报告-三人行必有我师
各类会员-尊贵的SVIP
「你即将失去如下所有学习变强机会」
学习效率低,学不到实战内容
一顿自助钱,我承诺一定让用户满意,也希望用户能给予我一份信任
【详情下方图片了解】,【扫下方二维码加入】:只做高质量优质精品内容」
圈子目前价格为¥99元(交个朋友啦!,现在星球有近150+位师傅相信并选择加入我们,圈子每天都会更新内容,老用户可永久享受初始加入价格,圈子内容持续更新中
一张图总结
免责声明
由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!