peetch:一個針對eBPF的安全實踐研究平臺
關于peetch
peetch是一個針對eBPF的安全實踐研究平臺,該平臺由多種工具組成,旨在幫助廣大研究人員通過各種方式繞過TLS協議保護功能,并以此來研究和分析eBPF的安全性。
當前版本的peetch支持兩個子命令,第一個為“dump”,該命令可以通過關于每個數據包源進程的相關信息來嗅探網絡流量;第二個命令為“tls”,該命令可以使用OpenSSL來提取加密密鑰,并識別進程信息。
通過使用這兩個命令,我們可以輕松解密PCAPng格式中記錄的TLS交換記錄。
工具限制
當前版本的peetch僅支持OpenSSL和TLS 1.2。
工具安裝
peetch的正常工作需要依賴多個組件,其中包括bcc和Scapy。我們可以通過使用Docker鏡像來輕松構建工具環境,相關命令如下:
docker build -t quarkslab/peetch .
工具使用
下列給出的命令可以幫助你進入peetch的Docker鏡像,并啟動peetch:
docker run --privileged --network host --mount type=bind,source=/sys,target=/sys --mount type=bind,source=/proc,target=/proc --rm -it quarkslab/peetch
dump命令
dump命令可以幫助我們使用一個eBPF TC分類符來嗅探網絡數據包,并獲取對應進程的PID和進程名稱:
peetch dumpcurl/1289291 - Ether / IP / TCP 10.211.55.10:53052 > 208.97.177.124:https S / Paddingcurl/1289291 - Ether / IP / TCP 208.97.177.124:https > 10.211.55.10:53052 SA / Paddingcurl/1289291 - Ether / IP / TCP 10.211.55.10:53052 > 208.97.177.124:https A / Paddingcurl/1289291 - Ether / IP / TCP 10.211.55.10:53052 > 208.97.177.124:https PA / Raw / Paddingcurl/1289291 - Ether / IP / TCP 208.97.177.124:https > 10.211.55.10:53052 A / Padding
需要注意的是,dump命令只會基于TCP分段來捕捉IPv4流量。為了方便起見,捕捉到的數據包可以使用“--write”命令保存為PCAPng格式(包含進程相關信息):
peetch dump --write peetch.pcapng^C
這種PCAPng格式支持使用WireShark或Scapy來進行修改
scapy>>> l = rdpcap("peetch.pcapng")>>> l[0]<Ether dst=00:1c:42:00:00:18 src=00:1c:42:54:f3:34 type=IPv4 |<IP version=4 ihl=5 tos=0x0 len=60 id=11088 flags=DF frag=0 ttl=64 proto=tcp chksum=0x4bb1 src=10.211.55.10 dst=208.97.177.124 |<TCP sport=53054 dport=https seq=631406526 ack=0 dataofs=10 reserved=0 flags=S window=64240 chksum=0xc3e9 urgptr=0 options=[('MSS', 1460), ('SAckOK', b''), ('Timestamp', (1272423534, 0)), ('NOP', None), ('WScale', 7)] |<Padding load='\x00\x00' |>>>>>>> l[0].commentb'curl/1289909'
tls命令
這個子命令旨在識別使用了OpenSSL的進程,并嘗試導出進程相關的各種明文信息以及敏感數據。默認情況下,“peetch tls”只會按行顯示每個進程的信息,如果使用“--directions”參數則可以顯示更多交換信息:
peetch tls --directions<- curl (1291078) 208.97.177.124/443 TLS1.2 ECDHE-RSA-AES128-GCM-SHA256> curl (1291078) 208.97.177.124/443 TLS1.-1 ECDHE-RSA-AES128-GCM-SHA256
使用“--content”命令可以顯示OpenSSL緩沖區內容:
peetch tls --content<- curl (1290608) 208.97.177.124/443 TLS1.2 ECDHE-RSA-AES128-GCM-SHA256 0000 47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A GET / HTTP/1.1.. 0010 48 6F 73 74 3A 20 77 77 77 2E 70 65 72 64 75 2E Host: www.perdu. 0020 63 6F 6D 0D 0A 55 73 65 72 2D 41 67 65 6E 74 3A com..User-Agent: 0030 20 63 75 72 6C 2F 37 2E 36 38 2E 30 0D 0A 41 63 curl/7.68.0..Ac -> curl (1290608) 208.97.177.124/443 TLS1.-1 ECDHE-RSA-AES128-GCM-SHA256 0000 48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D HTTP/1.1 200 OK. 0010 0A 44 61 74 65 3A 20 54 68 75 2C 20 31 39 20 4D .Date: Thu, 19 M 0020 61 79 20 32 30 32 32 20 31 38 3A 31 36 3A 30 31 ay 2022 18:16:01 0030 20 47 4D 54 0D 0A 53 65 72 76 65 72 3A 20 41 70 GMT..Server: Ap
“--secrets”參數可以顯示從內存中提取出來的TLS aMaster Secrets,下列示例將利用“--write”命令寫入提取出的敏感信息:
$ (sleep 5; curl https://www.perdu.com/?name=highly%20secret%20information --tls-max 1.2 -http1.1) &# peetch tls --write & curl (1293232) 208.97.177.124/443 TLS1.2 ECDHE-RSA-AES128-GCM-SHA256 # peetch dump --write traffic.pcapng ^C # Add the master secret to a PCAPng file $ editcap --inject-secrets tls,1293232-master_secret.log traffic.pcapng traffic-ms.pcapng
許可證協議
本項目的開發與發布遵循GPL-2.0開源許可證協議。