More Related Content
PDF
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010 PDF
本当にわかる Spectre と Meltdown PDF
PDF
PDF
PDF
PPTX
PDF
システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009 What's hot
PPTX
PDF
【学習メモ#4th】12ステップで作る組込みOS自作入門 PDF
PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと PDF
【学習メモ#7th】12ステップで作る組込みOS自作入門 PDF
SpectreとMeltdown:最近のCPUの深い話 PPTX
signal の話 或いは Zend Signals とは何か PPTX
PDF
PDF
PDF
PDF
いいかげんな人のためのTransactional Memory Primer KEY
PDF
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会 PPT
PDF
【学習メモ#6th】12ステップで作る組込みOS自作入門 PDF
Yunusov babin 7sins-pres_atm_v4(2)_jp PDF
PPTX
[CB16] COFIブレイク:実用的な制御フローインテグリティとプロセッサのトレースによるエクスプロイト阻止 by Ron Shina & Shlomi... PDF
Similar to Windows をより安全にする SafeSEH on MinGW
PDF
IDAの脆弱性とBug Bounty by 千田 雅明 ODP
PDF
技術紹介: S2E: Selective Symbolic Execution Engine PDF
PPTX
CVE-2021-3156 Baron samedit (sudoの脆弱性) PDF
[CB19] アンチウイルスをオラクルとしたWindows Defenderに対する新しい攻撃手法 by 市川遼 PDF
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja) PPTX
[CB16] マイクロソフトウィンドウズカーネルのデスノート by Peter Hlavaty & Jin Long PDF
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文 PDF
SpectreBustersあるいはLinuxにおけるSpectre対策 PDF
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料) PDF
PPTX
PPTX
Statically detecting vulnerability under memory pressure usingexhaustive search ODP
PPTX
Css2014 ruo ando_2014-10-23-01 PPTX
Survey and Analysis of ICS Vulnerabilities (Japanese) KEY
Functional Pearl + Brainfuck PDF
2017-12-04 Linuxの基本構造とBashでの扱い方 PDF
More from Tsukasa Oi
PDF
A New Tracer for Reverse Engineering - PacSec 2010 PDF
ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009 PDF
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009 PDF
Creating Secure VM (Comarison between Intel and AMD, and one more thing...) -... PDF
Stealthy Rootkit : How bad guy fools live memory forensics? - PacSec 2009 PDF
Lack of System Registers and two simple anti-forensic attacks - AVTokyo 2009 PDF
Farewell, Stagefright bugs! Recently uploaded
PDF
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと... PPTX
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool PDF
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2 PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1 Windows をより安全にする SafeSEH on MinGW
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
What is MinGW?
•Windows 用のプログラムを
GNU で作るためのツールチェーン + α
– ほとんどの機能は本家 binutils/gcc で対応済
• 最近は 64-bit 向けフォークの
mingw-w64 が面白い!
– Windows 固有の機能にほとんど対応
– カーネルモードドライバも (一応) 作れる!
– 自分もパッチを 2 個ほど投げました。
- 7.
What is this?
<?xmlversion="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/">
<overflow [omitted] hÐpàhhDbd [censored]
Ô1ö1ÿGVh.exehcalc1æWj [censored] [omitted] ézÿÿÿëùÌÌ
[censored] /></xfdf>
- 8.
What is this?
<?xmlversion="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/">
<overflow [omitted] hÐpàhhDbd [censored]
Ô1ö1ÿGVh.exehcalc1æWj [censored] [omitted] ézÿÿÿëùÌÌ
[censored] /></xfdf>
• 情報セキュリティに関する問題の回答例
– 脆弱性のアドバイザリ (CVE-2004-0194) と
Acrobat Reader のバイナリから exploit を書け
– ファイルを開くと電卓を起動する。
入社試験前問題
- 9.
- 10.
Exploitation Process (1)
OVERFLOW!
ポインタ 戻り
脆弱なバッファ
変数 アドレス
• 戻りアドレスとの間にポインタ変数がある!
– この部分をうまく回避しないと、戻りアドレスを
上書きしても制御を奪えない。
• オーバーフローの後もこの部分が複数回
参照されるので、攻略が少し難しい。
- 11.
SEH overwrite
• この攻撃には、Windowsの例外処理機構を
悪用した exploit が使用されている。
• 構造化例外処理 (Structured Exception Handling)
– x86 版ではスタックに、例外ハンドラのアドレスや
次の例外ハンドラを示す情報をスタックに積む。
- 12.
SEH overwrite
• この攻撃には、Windowsの例外処理機構を
悪用した exploit が使用されている。
• 構造化例外処理 (Structured Exception Handling)
– x86 版ではスタックに、例外ハンドラのアドレスや
次の例外ハンドラを示す情報をスタックに積む。
– この部分をうまく置き換えると、シェルコードが
いとも簡単に実行されてしまう。
• スタックやヒープのアドレスを
細かく調べる必要がなくなる。
- 13.
Exploitation Process (2)
OVERFLOW!
ポインタ 戻り SEH
脆弱なバッファ
変数 アドレス 構造体
• スタック上の SEH 構造体を上書きする
– その後、むしろ積極的に例外を発生させる!
– Google: pop-pop-ret
– すると、SEH 構造体の一部がコードとして実行される。
• 脆弱性なのは変わらないが、SEH 上書きのせいで
攻略の難易度が飛躍的に下がってしまう…
- 14.
What is this?
<?xmlversion="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/">
<overflow [omitted] hÐpàhhDbd [censored]
Ô1ö1ÿGVh.exehcalc1æWj [censored] [omitted] ézÿÿÿëùÌÌ
[censored] /></xfdf>
• 情報セキュリティに関する問題の回答例
– 脆弱性のアドバイザリ (CVE-2004-0194) と
Acrobat Reader のバイナリから exploit を書け
– ファイルを開くと電卓を起動する。
入社試験前問題
- 15.
What is this?
<?xmlversion="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/">
<overflow [omitted] hÐpàhhDbd [censored]
Ô1ö1ÿGVh.exehcalc1æWj [censored] [omitted] ézÿÿÿëùÌÌ
[censored] /></xfdf>
• 情報セキュリティに関する問題の回答例
– 脆弱性のアドバイザリ (CVE-2004-0194) と
Acrobat Reader のバイナリから exploit を書け
– ファイルを開くと電卓を起動する。
入社試験前問題
- 16.
SafeSEH!
• SEH の例外ハンドラは、予め決まっている。
•なら、それを予め登録しておく = SafeSEH
– Windows XP SP2 で対応した保護機能
(いわゆるソフトウェア DEP)
– PE ファイル内に有効な例外ハンドラを格納する
– それ以外のアドレスを例外ハンドラとして
指定された場合には、単に強制終了させる。
• 少なくとも、任意コード実行よりはマシ。
- 17.
SafeSEH on MinGW(1)
• アセンブラ (GNU as)
– SafeSEH 関連の擬似命令を定義
• 一部 SEH 関連の擬似命令はすでに定義済
– オブジェクトファイルに SafeSEH 情報をエミット
• リンカ (GNU ld)
– オブジェクトファイルの SafeSEH 情報をリンク
• コンパイラ (GCC)
– SafeSEH 対応を示すマクロを定義。
• mingw-w64 の CRT では、SEH 情報を
インラインアセンブラで (条件付き) 記述している。
- 18.
SafeSEH on MinGW(2)
• SafeSEH 情報
– COFF (.obj …) と PE (.exe …) で構造が違う!
• COFF
– @feat.00 シンボル
• SafeSEH 対応を示す特殊シンボル (bit 0 = 1)
– .sxdata セクション
• 例外ハンドラのシンボル番号リスト
• PE
– IMAGE_LOAD_CONFIG_DIRECTORY 構造体
• 例外ハンドラのアドレスリスト
- 19.
SafeSEH on GNUas (1)
• 擬似命令: .safeseh_handler <symbol>
– COFF の仕様上、ハンドラはシンボルで
参照できる必要がある。
– このハンドル時に .sxdata に
シンボルのインデックスを追加する。
• アセンブル終了前
– @feat.00 シンボルを追加する
• しかしこれはうまくいかない!
- 20.
SafeSEH on GNUas (2)
• Problem 1 : シンボル番号がズレる!?
– COFF 仕様によれば、シンボルテーブルは
一定の規則でソートされる必要がある。
– 擬似命令解釈時にはこの番号がわからない。
• Solution 1 : シンボルを後で .sxdata に吐く
– 擬似命令解釈時にはシンボル情報だけ
リストに入れておき、最後にまとめて
.sxdata セクションに吐き出す。
• 状況がさらに悪化した…
- 21.
SafeSEH on GNUas (3)
• Problem 2 : セクションもシンボルも弄れない
– オブジェクトファイル処理最終段階では、
セクションの内容が固定されており、データの
追加が不可能。
– シンボルはここでも並び替えられていない…
• 試行錯誤の末、なんとかできた!
- 22.
SafeSEH on GNUas (4)
• オブジェクトファイル処理時に、
COFF シンボルを強制的に並び替える。
– coff_renumber_symbols 関数は本来本当に最後に
使われるが、ここではその前に呼び出す!
• .sxdata にダミーデータを追加しておき、
後で強制的に書き換える。
– 擬似命令解釈時にダミーのデータを .sxdata に吐く
– 最終段階で、このデータを実際のものに置換する
• これは再配置処理などでもやるので、
多分大丈夫だと思う。
- 23.
SafeSEH on GNUas (5)
• .sxdata セクションの属性は特殊
– IMAGE_SCN_LNK_INFO
• BFD 部分に手を入れて、.sxdata セクションの
特殊扱いを追加する。
– .text や .bss などの特殊扱いと同様。
– ここへの変更は objdump などにも影響する。
- 24.
SafeSEH on GNUld
• .sxdata セクションを削除する
– PE ではもはや必要ないため
– リンカスクリプトの一部 (/DISCARD/) に追記
• オプション: --safeseh
– リンク時に SafeSEH を有効にするオプション
– SafeSEH 無効のバイナリ処理時にエラー生成
• COFF の SafeSEH 情報をリンクする
未完成orz
- 25.
…時間切れorz
• 2 週間後を目処にパッチ公開予定。
– mingw-w64 / GNU の本家に採用されればいいなぁ。
• 実は SafeSEH はあまり役に立たない orz
– プロセス内に SafeSEH 無効バイナリがあれば
SafeSEH の有効性が大幅に低下する。
– ハードウェア DEP が有効な場合、この種の
テクニックが使いにくくなる。
– そもそも、ヒープでコードが実行できるなら、
もっと単純な SEH overwrite + heap splay で
攻略可能!
- 26.
- 27.
じゃあなんでやったの?
• むしゃくしゃしてやった(ry
• SEH関連で実装されていない機能が
ほとんど存在しない!
– x64, ARM, MIPS… の安全な SEH に対応。
• UNIX 系でいう DWARF2 EH に近い
– 実装されていないのは次のものだけ!
• Itanium 版の安全な SEH
• x86 専用の SafeSEH
– なんか実装されていないのは中途半端に思えた。
- 28.