恶意程序HTTPS解密

距离省考宣布寄了已经过去了两个月了
于是打了两个月的游戏,属实是打吐了
出来去原来的单位实习
上来就是分析病毒
在摸索的过程中产生了这篇文章

0x00 Wireshark

尝试抓包恶意软件

开启Wireshark,运行恶意程序,全是HTTPS的数据

看了下网上的资料可以设置环境变量$SSLKEYLOGFILE来设置SSL密钥临时文件的位置,然后在Wireshark里导入

1
export SSLKEYLOGFILE=/tmp/tls.log

Edit→ Preferences → Protocols → TLS → (Pre-)Master-Secret log filename

选择环境变量$SSLKEYLOGFILE的内容

1
curl https://www.baidu.com/

即可$SSLKEYLOGFILE中看到HTTPS的密钥

Wireshark中也可以看到解密的HTTPS流量

但是运行恶意程序,恶意程序发起的HTTPS请求后并不会在$SSLKEYLOGFILE写入密钥

所以这个方法行不通

有想到过自己看TLS的密钥协商过程,写个脚本来计算出Master Secret Key,然后导入Wireshark来解密已保存的流量,但水平有限写不出来

好吧,正常情况


0x01 Burpsuite

将Burpsuite证书设置为系统证书(与这篇文章类似)

1
2
3
4
5
burpsuite&
curl -O http://127.0.0.1:8080/cert
openssl x509 -inform DER -in cert -out burp.crt
mv burp.crt /usr/local/share/ca-certificates/
update-ca-certificates

设置系统代理

1
2
export http_proxy="http://127.0.0.1:8080/"
export https_proxy="http://127.0.0.1:8080/"

命令行里的curl和python都能被抓到https的数据包

但是恶意软件的流量抓不到

使用proxychains代理

1
2
3
apt-get install proxychains
echo "http 127.0.0.1 8080" >> /etc/proxychains.conf
proxychain ./fritzfrog

(配置文件/etc/proxychains.conf好像默认有一个socks4的代理?自己看着删掉吧)

但是恶意软件的流量还是抓不到

大概是这个恶意程序设置的是不走系统的代理吧,只能说开发人员有点水平


0x02 Fiddler Everywhere

想着在Fiddler上抓一下全局流量,结果Fiddler4在linux上面用不了,只能用mono运行一个老版本

还是用Fidder Everywhere吧

1
2
3
wget https://downloads.getfiddler.com/linux/fiddler-everywhere-3.2.0.AppImage
chmod +x fiddler-everywhere-3.2.0.AppImage
./fiddler-everywhere-3.2.0.AppImage

注册,登录,“Your 30-day free trial has expired!”

看来是得破解一下了

AppImage格式操作说明

网上逛逛找到了个补丁

补丁下载

1
fiddler-everywhere-3.2.0.AppImage --appimage-extract

Fiddler.WebUi.dll./squashfs-root/resources/app/out/WebServer/

main.3f983221e4e1aade.js./squashfs-root/resources/app/out/WebServer/ClientApp/dist/

替换完成后进行打包

1
2
3
4
5
6
wget https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage
mv appimagetool-x86_64.AppImage appimagetool
chmod +x appiamgetool
mv appimagetool /usr/local/bin/
ARCH=x86_64 appimagetool squashfs-root/
./Fiddler_Everywhere-x86_64.AppImage

卡在"Please Wait"界面,寄

根据这篇博客[Linux]破解抓包软件FiddlerEverywhere 3.2.0 cracked用dnspy改FiddlerBackendSDK.dll文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//raw
public AccountDTO GetBestAccount(UserWithBestAccountDTO user)
{
if (user.BestEverywhereAccountId != null)
{
return Enumerable.FirstOrDefault<UserAccountDTO>(user.Accounts, (UserAccountDTO x) => x.Id == user.BestEverywhereAccountId.Value);
}
return null;
}

//modified
public AccountDTO GetBestAccount(UserWithBestAccountDTO user)
{
return Enumerable.FirstOrDefault<UserAccountDTO>(user.Accounts, (UserAccountDTO x) => true);
}

改成这样重打包dll,替换原dll后重打包appimage

运行后还是卡在"Please Wait"界面,寄

浪费了大半天的时间混了大半天


0x03 Polarproxy

之前想着恶意程序既然能够绕过系统代理,那我把网卡的流量用iptables整个重定向到Burpsuite不就行了

但是实际上还是不行,自己大概思考了一下,这玩意估计把TCP握手的流量也丢给Burpsuite了,Burpsuite估计是处理不了TCP流量,然后就寄了(未验证)

混了大半天,突然脑子有个想法,google上搜了一下"how to decrypt malware https traffic"

然后第一个结果就介绍了PolarProxy这个工具,去官网看了一下

1
PolarProxy is a transparent SSL/TLS proxy created for incident responders and malware researchers. PolarProxy is primarily designed to intercept and decrypt TLS encrypted traffic from malware. PolarProxy decrypts and re-encrypts TLS traffic, while also saving the decrypted traffic in a PCAP file that can be loaded into Wireshark or an intrusion detection system (IDS).

看来自己是找对东西了

这玩意得单独用个用户运行,不然到时候iptables重定向会跟这玩意整个死循环出来

安装并启用

1
2
3
4
5
6
7
8
9
10
11
12
sudo adduser --system --shell /bin/bash proxyuser
sudo mkdir /var/log/PolarProxy
sudo chown proxyuser:root /var/log/PolarProxy/
sudo chmod 0775 /var/log/PolarProxy/
sudo su - proxyuser
mkdir ~/PolarProxy
cd ~/PolarProxy/
curl https://www.netresec.com/?download=PolarProxy | tar -xzf -
exit
sudo cp /home/proxyuser/PolarProxy/PolarProxy.service /etc/systemd/system/PolarProxy.service
sudo systemctl enable PolarProxy.service
sudo systemctl start PolarProxy.service

配置系统证书

1
2
3
sudo mkdir /usr/share/ca-certificates/extra
sudo openssl x509 -inform DER -in /var/log/PolarProxy/polarproxy.cer -out /usr/share/ca-certificates/extra/PolarProxy-root-CA.crt
sudo dpkg-reconfigure ca-certificates

启用extra /PolarProxy-root-CA.crt即可

配置iptables

1
2
iptables -t nat -A OUTPUT -m owner --uid 0 -p tcp --dport 443 -j REDIRECT --to 10443
iptables -t nat -A OUTPUT -m owner --uid 1000 -p tcp --dport 443 -j REDIRECT --to 10443

运行恶意程序后在目录/var/log/PolarProxy/中可以看到程序捕获并解密的HTTPS流量

使用wireshark打开即可

普通用户运行恶意程序没啥反应,用root运行才抓到包

顺带一提,这个程序默认每天解密10GB的HTTPS的流量或10000次SESSION,但是够用了


0x04 ecapture

https://github.com/ehids/ecapture

看ebpf rootkit的时候看到了一个基于ebpf的monitor

能检测bash和解密https

解密的大概思路是hook一些ssl库,对于tls层可以直接获取http请求与响应

也就意味着这玩意甚至能免除用于MITM的CA

但是缺点也很明显

1
2
ldd ./apache2
not a dynamic executable