SECURITY 760 | ||||||||||||||||||||||||||||||||||||
Advanced Exploit Development for Penetration Testers |
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
受講に必要なPC環境
演習で使用するノートPCをご持参下さい。受講に必要なPC環境についてご確認ください。
SANSトレーニングを有意義に受講していただくには、以下の要件を満たすノートPCを受講者自らご用意いただきます。下記要件をよく確認し、事前に必要な設定を完了しておいてください。セッション中には、下記の設定を実施する時間は設けられていません。必ず事前の確認・設定をお願いいたします。
講義での演習では、予め複数のOSを実行できるようにVMwareを導入しておく必要があります。コースの初日には演習に必要なすべてのツールを含んだLinux仮想マシンが提供されます。Windows用に必要なツールはクラスで配布しますが、受講者は下記のオプション1またはオプション2で指定されたWindows仮想マシンを構築のうえ、持参する必要があります。演習でパッチのインストールおよびアンインストールを実施するため、Windowsにはパッチを適用しないでください。また統一した環境で演習を行うことが望ましいため、可能であれば英語版を準備ください。指定のOSやサービスパック以外の版を持参した場合、演習結果が意図するものと異なる可能性があります。
ウイルス対策やパーソナルファイアウォールなど、すべてのセキュリティソフトウェアと保護機能を無効にする管理機能があることを確認してください。このレベルの権限がない場合、演習を完了できない可能性があります。管理またはセキュリティ制御によってブロックされる可能性のあるソフトウェアのインストールを行う場合、制御を一時的に回避する方法があることことを確認してください。仮想マシンにはさまざまなデバッガと脆弱なアプリケーションをインストールします。
ノートパソコンのハードウェア要件、ソフトウェア要件
- 8GB以上のRAM。推奨は16GB。
- VMware Workstation、VMware Player、VMware Fusionをインストール。30日間トライアルライセンスはhttp://www.vmware.comから入手可能
- 必須 下記のどちらかの組み合わせで仮想OSがインストールされていること(OSは英語版、パッチ未適用かつ非Enterprise版推奨)
オプション①:Windows 7 32ビット(SP1)、Windows 7 64ビット(SP 1)
オプション②:Windows 7 32ビット(SP1)、Windows 8.0 64ビット(Windows 8.1は不可) - BacktrackまたはKali Linux。
- Adobe Flex 4.6 SDK。次のリンクからダウンロードしたものをクラスへ持参。
- Windows 7または8用Windows Software Development Kit(SDK)のインストール。Windows 8.1向けのSDKは不可。デバッグツールのみのインストールで問題なし。ツールは次のリンクから取得可能。
- 50GB以上の空きディスク容量。
- CPU Pentium III 1GHz以上。推奨はMシリーズ1.5GHz以上。
- BinDiff(次のリンクから無償ダウンロード可能。http://www.zynamics.com/software.html) クラスでは代替えとなるツールを提供します。
Mac OS XおよびLinuxユーザ
VMware Fusionを使用した仮想マシン間でWindowsカーネルのデバッグを実行する際にはさまざまな問題が発生するため、普段ご利用のPCの他にWindowsホストOSを搭載した端末を準備していただくことを強くお勧めします。やむを得ずMacまたはLinuxをホストとしたOSをご利用の際には、受講時までにカーネルデバッグを行っていただくことが必須です。Fusionを起動しているWindows仮想マシンから別のWindows仮想マシンへカーネルデバッグセッションを正常に実行可能かテストしておく必要もあります。上記のオプション①、②で記載するすべてのシステムに対してカーネルデバッグが実行できる必要があり、これはMac、Linuxユーザ両方に適用されます。
留意事項:講義中において演習環境に関するトラブルシューティングを行う時間は非常に限られます。下記の参考情報および窓口をご利用いただき、万全の環境を準備のうえお越しください。
リモートカーネルデバッグに関する参考情報はこちらを参照ください。
http://deadlisting.com/files/Remote_Kernel_Debugging_Vmware_Fusion_and_Linux.docx
コース概要
Microsoft Windows 7/8、Server2012、最新のLinuxディストリビューションなど、最近のオペレーティングシステムの脆弱性は、非常に繊細で巧妙なことがよくあります。しかし、非常に熟練した攻撃者によって悪用された場合、これらの脆弱性は組織の防御を弱体化させ、重大な損害にさらす可能性があります。基本的なレベルで脆弱性が存在する理由や、脆弱性を悪用するためのエクスプロイトコードを作成する方法を理解するのはもちろん、発見するスキルを持ったセキュリティ専門家はほとんどいません。逆に、攻撃者は、それらの複雑さに関係なく、このスキルセットを維持する必要があります。SANS SEC760:Advanced Exploit Development for Penetration Testersでは、32ビットおよび64ビットアプリケーションのリバースエンジニアリング、リモートユーザーアプリケーションおよびカーネルのデバッグの実行、1-dayエクスプロイトによるパッチの分析、複雑なエクスプロイトの作成 (最新のソフトウェアおよびオペレーティングシステムに対する無停止使用の攻撃など) に必要なスキルについて説明します。
あなたは、次のことができるようになります(一例)。
- Windows 7/8/10オペレーティングシステムに対する最新のエクスプロイトを作る方法
- use-after-free、カーネルエクスプロイト、パッチ分析による1-day exploit、その他の高度なトピックなど、複雑な攻撃を実行する方法
- 脅威モデリングとともに、セキュリティ開発ライフサイクル(SDL)を利用することの重要性
- さまざまなデバッガやプラグインを効果的に利用した脆弱性の調査とスピードを向上させる方法
- エクスプロイトの成功阻止や攻撃継続の意図を挫けさせることを目的とした現代のセキュリティ緩和策への対応
本講座受講にあたっての前提
本コースでは、SANS SEC660:Advanced Penetration Testing,Exploit Writing,Ethical Hackingで解説するエクスプロイトを自身で作成し攻撃を行うといった経験が必須となります。
これには、LinuxとWindowsの両方でのスタックベースのバッファオーバーフローの経験、およびData Execution Prevention(DEP)、Address Space Layout Randomization(ASLR)、カナリア、およびSafeSEHなどの最新の攻撃緩和対策の無効化などを含みます。
Sulley Fuzing FrameworkやPeachなどのFuzzingツールの経験または理解も必要であるとともに可能であればC/C++の経験が推奨されます。少なくとも、Python、Perl、Ruby、LUAなどでのスクリプト作成経験は必須です。関数、ポインタ、呼び出し規約、構造、クラスなどのプログラミングの基礎は前提知識としてあることが想定されます。デバッガや逆アセンブラの内部からx86の逆アセンブルを読み取る能力と同様に、脆弱なコードのリバースエンジニアリングの経験も必要です。
LinuxとWindowsの両方の深い理解に基づく操作経験、およびTCP/IPの経験が必要です。これらの前提条件を満たせない場合、本コースの内容は非常に困難になることが予想されます。
SEC760につながるコース:
SEC660:Advanced Penetration Testing, Exploit Writing, and Ethical Hacking
FOR610:Reverse-Engineering Malware: Malware Analysis Tools and Techniques
SEC760の前提条件となるコース:
SEC660:Advanced Penetration Testing, Explit Writing, and Ethical Hacking
SEC760コースは、IDAによるリモートデバッグ、IDA PythonとIDCスクリプトの作成、SDLと脅威モデリング、Linuxヒープオーバーフロー、Patch Differing、use-after-free攻撃、Windowsカーネルのデバッグとエクスプロイトなどを含む非常にハイレベルなトピックを網羅しています。詳細については、本ページの記載内容を参照し、推奨される前提条件とラップトップの要件をご確認ください。
繰り返しとなりますが、WindowsおよびLinuxアプリケーション用のエクスプロイトを作成する方法、DEPやASLRなどのエクスプロイト攻撃緩和対策を回避する方法、return-oriented shellcode(ROP)を使用する方法などはすでに習得している必要があります。
SANSは受講者が本コースに対して準備ができているか? SEC660を先に受講した方がよいかなど多くの質問を受けます。これらの質問に対してオールマイティな回答はありません。SANSの推奨事項は、受講を検討しているすべてのコースについて、コースのシラバスと受講前提条件の説明を熟読することです。コース開発者であるStephen Sims氏は、十分な情報に基づいた意思決定を行うために、受講者からの質問にお答えします。連絡先はこちら(stephen@deadlisting.com)になります。
SANSでは、受講者がSEC660とSEC760のどちらのコースが適しているかを判断するための10問のテストを公開しています。これは純粋に攻撃開発の観点から行われるものです。SEC660には、エクスプロイトの開発とエクスプロイト攻撃緩和対策の回避に関する内容が盛り込まれています。ネットワークデバイスの活用(ルーター、スイッチ、ネットワークアクセス制御)、暗号実装に対するペンテスト、Fuzzing、Python、ネットワークブート攻撃、LinuxやWindowsの制限された環境からの脱出など、広範囲にわたる高度な侵入テストのトピックに関する2日間分にわたるものです。SEC760の多くの受講生は、Offensive Security、Exodus Intelligence、Corelanなどのトレーニングを受けています。一部のセクションには重複がありますが、重複のない固有のセクションが多数あります。
受講者が学ぶ内容
- パッチ適用されたOS上でのプログラムのゼロデイ脆弱性の発見
- 詳細なペンテストプロセスを通じた脆弱性を悪用するためのエクスプロイトの作成
- IDA Proの高度な機能とカスタムIDC、IDA Pythonスクリプト作成
- LinuxとWindowsアプリケーションに対するリモートデバッグの実行
- Linuxヒープオーバーフローの理解とエクスプロイト
- Retrun-Oriented Shellcodeの記述
- パッチ適用された脆弱性を探査するためのプログラム、ライブラリ、ドライバに対するパッチの拡散
- Windowsヒープオーバーフローの実行とuse-after-free攻撃
- 攻撃成功率を向上させるための正確なヒープスプレイ
- 64ビットWindows 8までのカーネルデバッグの実行
- Windowsカーネルエクスプロイト
受講対象者
- シニアネットワーク、システムペネトレーションテスター
- セキュアアプリケーション開発者(C、C++)
- リバースエンジニアリング専門家
- シニアインシデントハンドラー
- シニア脅威分析者
- 脆弱性研究者
- セキュリティ研究者
ずっと情報セキュリティを学ぶ者として私はSEC760:Advanced Exploit Writing for Penetration Testersを提供できることに興奮しています。エクスプロイトの開発は最近のホットな話題であり、今後も重要性が増していくでしょう。「Windows7」 や 「Windows8」 などのOSが提供している最新のエクスプロイト緩和コントロール機能を考えると、実用的なエクスプロイトを作成するスキルを持つ専門家の数は非常に限られています。Secure-SDLCプロセスを実行し、脅威のモデル化を実行し、脆弱性が悪用可能かどうかを判断し、セキュリティ調査を行う能力を持つ専門家を雇用する企業が増えている中で、このコースはこのような非常に人気の高いポジションに就くために役立つように作られました。また、ターゲットを徹底的に評価するための最先端のテクニックを習得し、エクスプロイト開発能力を向上させるスキルを提供します。
Threat Modeling, Reversing and Debugging with IDA
Security Development Lifecycle (SDL) とSecure-SDLCの一環として、静的解析やファジングで見つかったバグや潜在的リスクに対して、開発者やエクスプロイト作成者はIDA Proを使って自身のコードに対するデバッグやリバースエンジニアリングを行う経験を持つべきです。
不適切なスレットモデリングとSDLは、すなわちセキュリティのギャップを生むことになり、攻撃者に悪用される可能性があります。
このセクションでは、Microsoft SDLの実装方法、脅威モデリングの実行方法、IDAを使用したローカルおよびリモートデバッグの実行方法、および独自のIDAPythonスクリプトの作成方法について説明します。
トピック
- Security Development Lifecycle
- 脅威モデリング
- IDAがNo.1リバースエンジニアリングツールな理由
- IDAナビゲーション
- IDA PythonとIDA IDC
- IDA plug-insと拡張性
- IDAによるローカルアプリのデバッグ
- IDAによるリモートアプリのデバッグ
Advanced Linux Exploitation
より高度なリバースエンジニアリングとエクスプロイトを活用するにはSEC660でカバーするような基本的なソフトウェアの脆弱性について、専門家レベルで理解している必要があります。
ヒープオーバーフローは、最新のエクスプロイトテクニック習得のために避けては通れないものです。Day2はこの知識ギャップを埋め、より抽象的な考え方を刺激することを目的としています。Linuxはこれらのテクニックを習得するための比較的理解しやすいオペレーティングシステムであり、これがWindowsの世界へ足を踏み入れる際の恰好の入り口になるでしょう。
トピック
- Linuxヒープ管理、構築、環境
- ヒープのナビゲーション
- unlink() や frontlink()マクロの悪用
- ポインター機能の上書き
- フォーマットストリングエクスプロイト
- カスタム双方向リストの悪用
- Linuxのエクスプロイト回避策の突破
- Linuxアプリのエクスプロイトに対するIDAの利用
- フォーマットストリングバグを使ったASLRバイパス
Patch Diffing, One-Day Exploits, and Return-Oriented Shellcode
脆弱性は時に秘密裏に修正されることがあるため、攻撃者はMicrosoftなどのベンダーからパッチが提供されると、パッチによってどんな脆弱性が改修されたのかを探し出すために真っ先にそれをダウンロードして解析を行います。そうすることで、パッチが適用されていないシステムにどんな脆弱性が潜んでいるかを把握し、それらのシステムの制御権を奪おうとします。このテクニックは、インシデントハンドラ、IDS管理者やベンダ、ペンテスト企業、および政府機関などによっても実行されます。Day3で紹介する資料を使い、ベンダーがパッチを当てたにも関わらず存在するバグを特定し、それを悪用することになります。
トピック
- Microsoftのパッチ管理プロセスと「火曜(日本では水曜)」のパッチ
- パッチの入手とパッチ抽出
- BinDiff、patchdiff2、turbioff、およびDarunGrim4を使用したBinary Differing
- コード変更の視覚化と修正の特定
- 32ビットと64ビットのアプリケーションとモジュールのリバースエンジニアリング
- パッチがが適用された脆弱性のトリガー
- 1-dayエクスプロイトの記述
- 現代のエクスプロイト緩和対策
- ROPを使用したオンザフライコンパイルシェルコード(Return-Oriented Shellcode)
Windows Kernel Debugging and Exploitation
Day4は、複雑で扱いにくいWindowsカーネルと最近のバージョンで追加された数々のエクスプロイト緩和策の理解を進めます。
複数のWindows OSのカーネルデバッグを実施し、固有の複雑さへの対処方法を学びます。さらに、Ring 0ドライバ脆弱性を解析し、エクスプロイトテクニックを調べ、実際に動作するエクスプロイトを見つけます。
トピック
- Windowsカーネルの理解
- Windowsカーネルの探索
- 現代のカーネル保護方法
- 7/8カーネルとドライバのデバッグ
- WinDbg
- カーネル脆弱性とその種類の解析
- カーネルエクスプロイトテクニック
- トークン盗難とHALディスパッチテーブルの上書き
Windows Heap Overflows and Client-Side Exploitation
このセクションでは、主にWindowsブラウザとクライアントサイドのエクスプロイトに焦点を当てます。最も一般的に利用されるメカニズムのC++ vftableオーバーフローの分析を学習します。これらの多くの脆弱性はブラウザで発見されるため、IE8~11、FireFoxやChromeなどのブラウザに対応するため、現代のヒープスプレーに代表されるブラウザテクニックを学習します。また、ASLRとDEPをバイパスするためにUse-After-Free/Dangling Pointer脆弱性に対するエクスプロイトを作成します。
トピック
- Windowsヒープ管理、構築、環境
- LFH(Low Fragmentation Heap:低断片化ヒープ)の理解
- ブラウザベース、クライアントサイドエクスプロイト
- ヒープスプレーの是正
- C++ vftable/vtable 挙動の理解
- アドレス推測を確定させるための現代版ヒープスプレー
- Use-After-Free攻撃とポインター
- 独自Flashオブジェクトを使ったASLRバイパス
- ASLR、DEPや一般的な緩和策の突破