More Related Content
Similar to DLL読み込みの問題を読み解く (20)
More from JPCERT Coordination Center (20)
DLL読み込みの問題を読み解く
- 2. Copyright ©2017 JPCERT/CC All rights reserved.
本⽇の話題
ü ⾃⼰紹介
ü 「DLL読み込みの脆弱性」って?
ü 過去を振り返る -- 2010年ころ
ü 最近の届け出
ü ユーザが⾏うべき対策、開発者が⾏うべき対策
ü まとめ
ü 参考情報など
2
- 3. Copyright ©2017 JPCERT/CC All rights reserved.
http://www.tomo.gr.jp/root/e9706.html
JPCERT/CC
情報流通対策グループ
リードアナリスト ⼾⽥ 洋三
脆弱性情報分析, セキュアコーディ
ング普及啓発活動……
に努めています
3
⾃⼰紹介
- 5. Copyright ©2017 JPCERT/CC All rights reserved.
過去のOSC参加履歴 (セミナーを⾏ったもの)
5
•OSC2017@Osaka
•SEI CERT コーディングスタンダードのご紹介
•OSC2016@Hokkaido
•OWASP ASVS と Cheat Sheet(日本語版)のご紹介
•OSC2015@Hokkaido
•CSRF 脆弱性とその対策について
•OSC2014@Fukuoka
•Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
•OSC2013@Kyoto
•~ヒトの振り見て我が振り直せ~脆弱性事例に学ぶJavaセキュアコーディング
•OSC2012@Fukuoka
•Androidセキュアコーディング~安全なAndroidアプリ開発のための心得~
•OSC2011@Nagoya: セキュアコーディングノススメ(JAVA編)
•OSC2010@Hokkaido: あなたのコードにセキュアコーディングスタンダード
•OSC2009@Fukuoka: セキュアコーディングノススメ
•OSC2008@Tokyo/Spring: セキュアコーディングノススメ
•OSC2007@Fukuoka: セキュアコーディングノススメ
•OSC2007@Niigata: ソフトウェア脆弱性を取り巻く状況と対策
•OSC2007@Kansai: ソフトウェア脆弱性情報流通のこれまでとこれから
•OSC2005@Tokyo/Fall: ソフトウェア脆弱性情報流通への取り組み
- 6. Copyright ©2017 JPCERT/CC All rights reserved.
JPCERT/CC の活動
重要インフラ、重要情報インフラ事業者等の特定組織向け情報発信早期警戒情報
海外のNational-CSIRTや企業内のセキュリティ対応組織の構築・運⽤⽀援CSIRT構築⽀援
脆弱性情報ハンドリング
Ø 未公開の脆弱性関連情報を製品開発者へ提供し、
対応依頼
Ø 関係機関と連携し、国際的に情報公開⽇を調整
Ø セキュアなコーディング⼿法の普及
Ø 制御システムに関する脆弱性関連情報の適切な
流通
マルウエア(不正プログラム)等の攻撃⼿法の分析、解析アーティファクト分析
各種業務を円滑に⾏うための海外関係機関との連携国際連携
インシデントの予測と捕捉インシデント予防 発⽣したインシデントへの対応
制御システムに関するインシデントハンドリング、情報収集・分析発信制御システムセキュリティ
⽇本シーサート協議会、フィッシング対策協議会の事務局運営等国内外関係者との連携
Ø マルウエアの接続先等の攻撃関連サイト等の閉
鎖等による被害最⼩化
Ø 攻撃⼿法の分析⽀援による被害可能性の確認、
拡散抑⽌
Ø 再発防⽌に向けた関係各関の情報交換及び情報
共有
インシデントハンドリング
(インシデント対応調整⽀援)
情報収集・分析・発信
定点観測(TSUBAME)
Ø ネットワークトラフィック情報の収集分析
Ø セキュリティ上の脅威情報の収集、分析、必要
とする組織への提供
6
- 8. Copyright ©2017 JPCERT/CC All rights reserved.
slideshare にも講演資料やセミナコンテンツ置いてます
8
www.slideshare.net/jpcert_securecoding/presentations
- 12. Copyright ©2017 JPCERT/CC All rights reserved.
そもそも DLL ってなんだっけ?
12
ダイナミック リンク ライブラリ (DLL) は、関数とリソースの共有ラ
イブラリとして機能する実行可能ファイルです。
……
オペレーティング システムは、実行可能ファイルの読み込み時、
または実行時に必要に応じて、DLL を実行可能ファイルのメモリ
領域に読み込むことができます。 また、DLL は、実行可能ファイ
ル間で関数とリソースを共有しやすくします。 メモリ内の DLL の
内容には、同時に複数のアプリケーションがアクセスできます。
https://msdn.microsoft.com/ja-jp/library/1ez7dh12.aspx
•Windows 標準の DLL(Kernel32.dll, User32.dll, GDI32.dll, …)
•アプリ固有の DLL
- 13. Copyright ©2017 JPCERT/CC All rights reserved.
DLL の読み込み
13
• (C などの)スタートアップルーチンの初期化の一環として
必要な DLL を読み込み
• アプリの中で LoadLibrary() などを使って読み込み
1. 実⾏ファイルがあるディレクトリ (アプリケーションディレクトリ)
2. Windows システムディレクトリ
3. Windows ディレクトリ
4. カレントディレクトリ
5. 環境変数 PATH
0. “KnownDLLs” に登録されているかどうか
Windows デスクトップアプリが使用する DLL 検索パス
(cf. https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx)
- 14. Copyright ©2017 JPCERT/CC All rights reserved.
DLL 読み込みの様⼦を⾒る
14
•Sysinternals に含まれている Process Monitor (procmon)
• DLL 読み込みをはじめ、Win32 API 呼び出しの様⼦などの調査に
役⽴つ
•Dependency Walker
• DLL の読み込み順序、依存関係を調べる
定番のツール2つ
- 15. Copyright ©2017 JPCERT/CC All rights reserved.
Sysinternals Process Monitor (procmon)
ファイル関連の操作やレジス
トリ操作などのイベントを記
録できる
⼤量のイベントログのなかか
ら、プロセス名、パス名、操
作内容などによるフィルタを
かけて必要な部分のみを抽出
できる
15
https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
- 16. Copyright ©2017 JPCERT/CC All rights reserved.
procmon を使った挙動確認
üprocmon.exe を実⾏ (イベント記録開始)
üプログラム起動, ひととおり操作
üprocmon.exe でフィルタ設定
üフィルタ後のログ内容を精査
ü必要に応じてログ保存
16
- 21. Copyright ©2017 JPCERT/CC All rights reserved.21
プロセス名, パス名など “begins with”,
“contains” など “include”, “exclude”
「プロセス名」が「firefox」で「始まる」ものを選択
Procmon のフィルタ設定(1)
“Add” ボタンを押す
- 23. Copyright ©2017 JPCERT/CC All rights reserved.23
“Apply” ボタンを
押す
フィルタ内容の更新完了.
以下同様にして、必要なだけルールを追加していく.
Procmon のフィルタ設定(3)
- 28. Copyright ©2017 JPCERT/CC All rights reserved.
2010年ころの状況(1)
28
• セキュリティベンダから, DLL 読み込みの脆弱性に対する攻撃
⼿法が公開され, 注⽬を集める
• CERT/CC VU#707943 や US-CERT Technical Alert TA10-238A
公開
• Microsoft からアドバイザリや開発者向けガイダンス⽂書公開
• セキュリティアドバイザリ 2269637
• 「DLLプリロード問題の対策ガイダンス」
[参考]
WindowsのDLLだけが危ないのか?DLL hijacking vulnerability概説(前編)
https://codezine.jp/article/detail/5441
https://www.jpcert.or.jp/sc-magazine/codezine02-8.html
WindowsのDLLだけが危ないのか?DLL hijacking vulnerability概説(後編)
https://codezine.jp/article/detail/5442
https://www.jpcert.or.jp/sc-magazine/codezine02-9.html
- 30. Copyright ©2017 JPCERT/CC All rights reserved.
不正な DLL を読み込ませる攻撃とは…
30
- (攻撃者が)ドキュメントファイルと一緒に細工した DLL を置く
- 細工した DLL をドキュメントファイルと一緒にダウンロードさ
せそのまま実行させる
1. ドキュメントファイルと一緒に細工
した DLL を置く
2. ドキュメントファイルに関連づけら
れたアプリを起動
3. カレントディレクトリにある DLL を
使ってしまう
https://www.jpcert.or.jp/sc-magazine/codezine02-8.html
- 31. Copyright ©2017 JPCERT/CC All rights reserved.
「カレントディレクトリ」からの DLL 読み込み
31
1. 実⾏ファイルがあるディレクトリ (アプリケーションディレクトリ)
2. Windows システムディレクトリ
3. Windows ディレクトリ
4. カレントディレクトリ
5. 環境変数 PATH
0. “KnownDLLs” に登録されているかどうか
Windows デスクトップアプリが使用する DLL 検索パス
(cf. https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx)
これ
対策として検索順位が下がった
- 33. Copyright ©2017 JPCERT/CC All rights reserved.
DLL読み込みの届け出の増加
33
• 2016年ころから DLL 読
み込みの脆弱性の届け出
が増加
• 対象のほとんどは
「インストーラ」
「⾃⼰解凍書庫」
2016Q4
2017Q1
2017Q2
「JPCERT/CC 活動概要」から
(https://www.jpcert.or.jp/pr/)
- 35. Copyright ©2017 JPCERT/CC All rights reserved.
不正な DLL を読み込ませる攻撃とは (旧)
35
- (攻撃者が)ドキュメントファイルと一緒に細工した DLL を置く
- 細工した DLL をドキュメントファイルと一緒にダウンロードさ
せそのまま実行させる
1. ドキュメントファイルと一緒に細工
した DLL を置く
2. ドキュメントファイルに関連づけら
れたアプリを起動
3. カレントディレクトリにある DLL を
使ってしまう
https://www.jpcert.or.jp/sc-magazine/codezine02-8.html
- 36. Copyright ©2017 JPCERT/CC All rights reserved.
不正な DLL を読み込ませる攻撃とは (新)
36
- (攻撃者が)インストーラと一緒に細工した DLL を置く
- 細工した DLL をインストーラと一緒にダウンロードさせその
まま実行させる
1. インストーラと一緒に細工した
DLL を置く
2. インストーラを起動
3. 同一ディレクトリにある DLL を
使ってしまう
脆弱性のある
インストーラ
- 37. Copyright ©2017 JPCERT/CC All rights reserved.
DLL 読み込み: 通常の動作
プログラム起動!
プログラムと同じディレクトリから DLL を探し出そうとする
通常は DLL が⾒つからず(NOT FOUND)、次の場所に探しに
⾏く
システムディレクトリにある DLL を発⾒して使⽤
37
- 38. Copyright ©2017 JPCERT/CC All rights reserved.
プログラム起動!
プログラムと同じディレクトリから DLL を探し出そうとする
通常は DLL が⾒つからず(NOT FOUND)、次の場所に探しに
⾏く
システムディレクトリにある DLL を発⾒して使⽤
38
DLL を⾒つけ、ロードする
細⼯した DLL をプログラムと同じディレクトリに置く
DLL 読み込み: 問題が発⽣するケース
- 39. Copyright ©2017 JPCERT/CC All rights reserved.
「アプリケーションディレクトリ」からの DLL 読み込み
39
1. 実⾏ファイルがあるディレクトリ (アプリケーションディレクトリ)
2. Windows システムディレクトリ
3. Windows ディレクトリ
4. カレントディレクトリ
5. 環境変数 PATH
0. “KnownDLLs” に登録されているかどうか
Windows デスクトップアプリが使用する DLL 検索パス
(cf. https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx)
- 40. Copyright ©2017 JPCERT/CC All rights reserved.
システムの保護、アプリのセキュリティ
40
• “Windows” や ”Program Files” といったシステム領域
• アプリ側ではなくシステム側が保護
• 細工された DLL が置かれるといった状況はシステム側の責任
• (もちろんユーザが適切な形で使用している前提)
• ユーザディレクトリ
• 管理はユーザ側の責任
• フィッシングや水飲み場攻撃など, 世の中はユーザを騙す攻撃がいっぱい
• どこまでユーザの責任にする?
システム領域外で動作するアプリには,
よりセキュアな実装を求めたい
インストーラ, 自己解凍書庫, ポータブルアプリなど
- 42. Copyright ©2017 JPCERT/CC All rights reserved.
ユーザが⾏うべき対策
42
• あやしいファイルを放置しない
• インストーラや自己解凍書庫を安全な形で実行する
安全な形で実行
1. (インストーラをダウンロード)
2. 新規にディレクトリを作成
3. 作成したディレクトリにインストーラを移動
4. インストーラを起動
- 43. Copyright ©2017 JPCERT/CC All rights reserved.
開発者が⾏うべき対策
43
ØDLL の読み込み方法に注意する
Øアプリ/インストーラの挙動についてユーザに説明し,
注意を促す
DLLの読み込み
• SetDefaultDllDirectories() や SetDllDirectory() でアプリ
ケーションディレクトリを排除
• DLL 読み込みは可能な限り絶対パスで
• インストーラ作成ツールによるインストーラ作成やアーカイ
バによる自己解凍書庫作成時にはツールの対応状況を
確認
- 44. Copyright ©2017 JPCERT/CC All rights reserved.
開発者が対処しきれないケース
44
vアプリのスタートアップ部分で勝手にロード
vWindows 標準 DLL が独自に他 DLL をロード
vWindows 標準機能 (DLL forwarding, OS 互換機能
の発動など)
v動作監視ソフトの影響
vなど
DLL の読み込み⽅法
ガンバりたいヒトには, 遅延読み込み指定とフック関数を活⽤して⾃前の読み込みという⼿段もある
(それでも100%解決できるわけではないけど)
[参考]
(https://docs.microsoft.com/en-us/cpp/build/reference/linker-support-for-delay-loaded-dlls)
(http://www.ponsoftware.com/archiver/bug.htm)
(http://micco.mars.jp/vul/2017/mhsvi20170515_01.htm)
(https://ipmsg.org/dllpreload/dllpreload_attack.html)
など…
- 45. Copyright ©2017 JPCERT/CC All rights reserved.
まとめ
45
DLL 読み込み案件の扱いに苦労しています
ユーザがとるべき対策: 安全な形で実⾏
開発者がとるべき対策:
—どのくらいアプリ側でがんばるか決める
—使⽤上の注意をきちんとユーザに説明する
DLL読み込みと合わせてコマンド呼び
出しについても注意!!
- 46. Copyright ©2017 JPCERT/CC All rights reserved.
関連情報(1)
46
JVNTA#91240916: Windows アプリケーションによる DLL 読み込みやコマンド実
行に関する問題
(https://jvn.jp/ta/JVNTA91240916/)
JVNVU#707943: Windows プログラムの DLL 読み込みに脆弱性
(https://jvn.jp/vu/JVNVU707943/)
任意のDLL/実行ファイル読み込みに関する脆弱性の注意喚起
(https://www.ipa.go.jp/about/press/20101111.html)
Dynamic-Link Library Security
(https://msdn.microsoft.com/en-us/library/windows/desktop/ff919712(v=vs.85).aspx)
- 47. Copyright ©2017 JPCERT/CC All rights reserved.47
Windows DLLプリロード攻撃の新しいパターンと防御法
(https://ipmsg.org/dllpreload/dllpreload_attack.html)
UNLHA32.DLL で作成された自己解凍書庫における任意の DLL 読み込
みに関する脆弱性
(http://micco.mars.jp/vul/2017/mhsvi20170515_01.htm)
UNLHA32.DLL における任意の DLL 読み込みに関する脆弱性
(http://micco.mars.jp/vul/2017/mhsvi20170515_02.htm)
Microsoft Windows における DLL 読み込みに関する脆弱性
(http://www.ponsoftware.com/archiver/bug.htm#load_lib)
関連情報(2)
- 48. Copyright ©2017 JPCERT/CC All rights reserved.
セキュアコーディングに関するお問合せ、インシデント対応のご依頼は
48
JPCERTコーディネーションセンター
̶Tel:03-3518-4600
̶https://www.jpcert.or.jp/
セキュアコーディングに関するお問い合わせ
̶Email:secure-coding@jpcert.or.jp
̶https://www.jpcert.or.jp/securecoding/
インシデントの報告
̶Email:info@jpcert.or.jp
̶https://www.jpcert.or.jp/form/