はじめに
本ツールはExploit Preventionで誤検知が発生し、使用中のアプリケーションが停止された際の事象の発生箇所を特定するために使用するDLL Debug tool(以下本ツール)の使用方法を説明します。
本ツールはCLIで動作し、Step by StepでExploit Preventionの各機能(Shellcode Protection / SmartBlock Protection)を無効にし、さらに、動作中のソフトウェアが使用するDLLをExploit Preventionから除外し、再現可否を確認することで、Exploit Preventionのどの機能、DLLがExploit Preventionの誤検知を引き起こしているか確認することが可能です。本ツールは以下の3つのステップで実行されます。
- ShellCode Protectionの無効化テスト
- SmartBlock Protectionの無効化テスト
- 参照しているDLLの除外テスト
本ツールは個々のテストの中で、再現試験を実施し、Yes/Noで質問に答えていくことで、最終的に被疑箇所を特定します。典型的な結果としては、被疑となったDLLを除外させるなどの対応方法が提示されます。
注意事項
- 本ツールは、各ステップで再現試験を正しく実行し、その再現結果をYes/Noで正確に回答していくことで、正しいソリューションを提示します。実際の結果と異なる結果、間違った結果を入力しますと、正しいソリューションが提示されませんので、各ステップで正しく再現試験を実施し、正しい回答を入力するようご協力をお願いします。
本記事で説明している流れを全て理解いただく必要はございませんが、必ず各ステップにて再現試験の実施の依頼と「事象が再現したか?」という質問はYes/Noで間違いなくお答えいただくことになります。
- 本ツールはConnectorのインストーラには含まれておりません。別途取得いただく必要がございます。なお、常に最新版を使用する必要がありますので、必要になった場合は都度、TACからツールのファイル本体を取得するよう、お願いいたします。古いツールを使用した場合は、改めて最新のツールで再取得いただく場合がございます。
全体フロー
DLL Debug Toolの使用方法は複雑です。全体のフローを以下に示し、個々の手順について記事で紹介します。

手順
以下、本ツールの手順を示します。
DLL Debug toolを使用するためには、Cisco AMP for Endpointsのサービスを停止する必要がありますので、サービスからCisco AMP for Endpoint Connectorを右クリックし、停止します。

Cisco TACからDLL Debug toolを取得し任意のフォルダに展開します。
CMDを管理者(Administrator)として実行し、以下フォルダに移動します。
32bitの場合
<展開先>\ExPrevDllDebugTool-<Version>\Win32\Release-Logging
64bitの場合
<展開先>\ExPrevDllDebugTool-<Version>\x64\Release-Logging
誤検知が発生しているプロセスを起動します。以下、記事ではpowershell.exeで事象が発生している前提で話を進めます。
以下コマンドを実行し、事象が発生しているプロセス(powershell.exe)を -pn オプションを指定して起動します。もし、このタイミングで対象となるプロセスが起動していない場合は、エラーが発生し、ツールは動作しません。

ツールを起動すると、powershell.exeがどの会社製の何個のDLLを使用しているかを確認できます。ここではMicrosoft社による73個のDLLが確認できます。複数の会社が表示されている場合もございます。
以後、再現のために何度も起動することになりますが、現時点では一旦、powershell.exeを終了します。
Step1. ShellCode Protection無効化テスト
ツールを起動すると、早速ShellCode Protectionを無効するテストが開始します。
この時点で、本ツールが持っているExploit Prevention機能が動作し始め、Shell Code Protectionの機能が無効化された状態となります。

ここで、Powershellを起動し、事象の再現を試みます。
もし、事象が再現されない(CrashやAttack検知が再現しない)ということは、ShellCode Protectionが停止しているために、事象が発生していないということになりますため、問題箇所はShellCode Protectionであるという結論になります。したがって、「Could the issue be reproduced?」の質問にnoと答えると、以下の通り、被疑箇所が特定できたということで、ツールが終了します。この場合、問題解析のためにProc DumpとProcmonログの取得が必要となる旨指示されます。

他のステップのテストにおいても、この形でソリューションが提示されます。
ShellCode Protectionが原因であると判明したため、ツールは終了されます。
ここで、事象が再現するためにYesを選んだ場合は、ShellCode Protetionが被疑箇所ではなかったため、次のステップのテストへ移ります。基本的に同じ流れでSmartblock Protectionの無効化と、DLLの除外を順番に調査していきます。
Step2. Smartblock protectionの無効化テスト
先ほどのShellcode ProtectionのチェックでYesを選んだ場合は、次はSmartblock Protectionのテストに移ります。先ほどと同様にSmartblock Protectionが停止されるため、再びpowershellを起動し、事象の再現を試みます。

ここで事象が再現できた場合は、Smartblock Protectionが問題箇所であることが特定されます。この場合は、信頼できるサイトにアクセスしたサイトを追加するか、SmartBlockの機能を無効にすることが、Workaroundとなります。

Step3 DLLの除外テスト
Smartblock Protectionが被疑ではなかった場合、アプリケーション(powershell)が使用しているDLLを、Exploit Preventionの対象から除外していくことで、どのDLLが被疑箇所であるかを特定します。
DLLは最初に提供ベンダー単位で調査し、その後個々のDLLの調査をします。この場合はMicrosoft一社が提供しているDLLのみであるため、選択肢は一つだけとなっておりますので1を選択します。複数ある場合は、複数の中から選びます。

Microsoft社が提供している全てのDLLをExploit Preventionから除外して、再現を試みます。この場合、Microsoft一社のみであるため、当然再現はできなくなるはずです。

想定通り、再現しなくなったらNoを選択します。もし、DLL提供ベンダーが複数あり、1社目のDLL除外で再現する場合は、他ベンダーのDLLが原因ということになりますため、YESを選択し、別ベンダーのDLLでそれぞれ除外テストを実施します。
ベンダー単位でDLL除外を確認し、この時点でどのベンダーのDLLが被疑であるかが特定できておりますので、以降は、実際被疑と疑われるベンダーのDLLを一つずつ、除外から外して再現試験をすることで、事象が再現するDLLを特定します。
ここで「除外から外す」という表現は実際ツールで出てきますが、二重否定であり、特定ベンダーのDLLを全て除外した状態から一つずつExploit Preventionの対象にしていくという意味になりますので誤解のないようご注意ください。
ここからは、Microsoft社のDLLを全て除外した状態から、一つずつExploit Preventionを有効にし、事象が再現されるまで繰り返す工程となります。73個全てやるのはかなり気が遠くなりますが、ここでは73あるDLLのうち一つ目を除外から外していることを示しています。

再現しないということは、違うDLLが原因ということになりますので、Noを選択し、次のDLLのチェックに移ります。
繰り返し実行する中で、特定のDLLを有効にして再現した場合、そのDLLが被疑であるということになりますので、Yesを選択します。被疑が1箇所特定出来て、全てを念の為チェックしても問題ないですし、途中で終了することも可能です。qを押すと終了します。

全ての項目のチェックが終了するか、もしくはQで終了させると、確認のために、今度は、被疑箇所となったDLLのみを除外して再現試験を実施します。

想定される結果としては、ここで再現しないことが確認され、Noを選択するのですが、そうではなく再現してYesを選択した場合、最後に該当DLLを無効にしつつ、ShellCode Protectionを無効にした状態で再現しないことを確認します。
(Testing possible solution 1 with shellcode protection disabledと記載されております。)

ここでは、仮に無事再現しなかったとしてNoを選択しますと、最後に以下のようにShellcode Protection無効化と、被疑DLL2つを除外するというソリューションが表示され、ツールは終了します。

先ほどのDLL除外のみのテストで再現せず、ソリューションが有効だった場合は、以下のようにDLL除外のみを推奨されます。

最終的に、表示されたCLIの結果を保存します。