
オープンソースのフォレンジックフレームワークで、産業用PLCのメタデータとプロジェクトファイルを分析します。ICS環境内の不審なアーティファクトをスキャンし、インシデント対応や手動調査を支援します。

Microsoft ICSフォレンジックツールフレームワークは、産業用PLCメタデータおよびプロジェクトファイルの分析を可能にするオープンソースのフォレンジックフレームワークです。
このフレームワークは、調査担当者にPLCをスキャンし、ICS環境内の不審なアーティファクトを特定する便利な方法を提供します。これは、手動チェック、自動監視タスク、または侵害されたデバイスを検出するためのインシデント対応運用に使用できます。
オープンソースツールであることにより、ICSフォレンジックツールは調査担当者が出力を確認し、特定の要件に合わせてカスタマイズすることを可能にします。
以下の手順に従って、開発およびテスト目的でプロジェクトのコピーをローカルマシンにセットアップできます。
git clone https://github.com/microsoft/ics-forensics-tools.git
Python要件をインストール
pip install -r requirements.txt
python driver.py -s -v PluginName --ip ips.csv
python driver.py -s -v PluginName --ip ips.csv --analyzer AnalyzerName
python driver.py -s -v -c config.json --multiprocess
from forensic.client.forensic_client import ForensicClient
from forensic.interfaces.plugin import PluginConfig
forensic = ForensicClient()
plugin = PluginConfig.from_json({
"name": "PluginName",
"port": 123,
"transport": "tcp",
"addresses": [{"ip": "192.168.1.0/24"}, {"ip": "10.10.10.10"}],
"parameters": {
},
"analyzers": []
})
forensic.scan([plugin])
ローカルで開発する場合は、必ずsrcフォルダを「Sources root」としてマークしてください。
from pathlib import Path
from forensic.interfaces.plugin import PluginInterface, PluginConfig, PluginCLI
from forensic.common.constants.constants import Transport
class GeneralCLI(PluginCLI):
def __init__(self, folder_name):
super().__init__(folder_name)
self.name = "General"
self.description = "General Plugin Description"
self.port = 123
self.transport = Transport.TCP
def flags(self, parser):
self.base_flags(parser, self.port, self.transport)
parser.add_argument('--general', help='General additional argument', metavar="")
class General(PluginInterface):
def __init__(self, config: PluginConfig, output_dir: Path, verbose: bool):
super().__init__(config, output_dir, verbose)
def connect(self, address):
self.logger.info(f"{self.config.name} connect")
def export(self, extracted):
self.logger.info(f"{self.config.name} export")
__init__.pyファイルに新しいプラグインをインポートしてください。from pathlib import Path
from forensic.interfaces.analyzer import AnalyzerInterface, AnalyzerConfig
class General(AnalyzerInterface):
def __init__(self, config: AnalyzerConfig, output_dir: Path, verbose: bool):
super().__init__(config, output_dir, verbose)
self.plugin_name = 'General'
self.create_output_dir(self.plugin_name)
def analyze(self):
pass
__init__.pyファイルに新しいアナライザーをインポートしてください。Microsoft Defender for IoTは、エージェントレスなネットワーク層セキュリティソリューションであり、組織はIoT/OTおよび産業用制御システム(ICS)デバイスを継続的に監視し、資産を発見し、脅威を検出し、脆弱性を管理できます。オンプレミスおよびAzure接続環境の両方で利用可能です。
MSRCブログのSection 52
このツールに関するICS講義
Section 52 - 悪意のあるラダーロジックの調査 | Microsoft Defender for IoT ウェビナー - YouTube
このプロジェクトは貢献と提案を歓迎します。ほとんどの貢献には、あなたが貢献を使用する権利を当社に付与する権利があること、および実際に付与することを宣言するコントリビューターライセンス契約(CLA)への同意が必要です。詳細については、https://cla.opensource.microsoft.com をご覧ください。
プルリクエストを送信すると、CLAボットが自動的にCLAを提供する必要があるかどうかを判断し、PRを適切にデコレートします(例:ステータスチェック、コメント)。ボットからの指示に従ってください。これを一度行うだけで、当社のCLAを使用するすべてのリポジトリで有効です。
このプロジェクトはMicrosoftオープンソースの行動規範を採用しています。詳細については、行動規範FAQを参照するか、追加の質問やコメントがある場合は[email protected]にお問い合わせください。
このプロジェクトには、プロジェクト、製品、またはサービスに関する商標またはロゴが含まれる場合があります。Microsoftの商標またはロゴの許可された使用は、Microsoftの商標およびブランドガイドラインに従う必要があります。このプロジェクトの修正版でのMicrosoftの商標またはロゴの使用は、混乱を引き起こしたり、Microsoftの後援を示唆したりしてはなりません。サードパーティの商標またはロゴの使用は、それぞれのサードパーティのポリシーに従います。
Copyright (c) 2018 Microsoft Corporation. All rights reserved.
本ソフトウェアは「現状のまま」提供され、明示的または黙示的を問わず、商品適格性、特定目的への適合性、および非侵害に関する黙示の保証を含むがこれに限定されない、いかなる保証もありません。いかなる場合も、著作者または著作権保持者は、契約、不法行為、またはその他の行為に起因する、ソフトウェアまたはその使用もしくはその他の取引に関連する、いかなる請求、損害、またはその他の責任も負いません。
| 引数 | 説明 | 必須 / オプション |
|---|
-h, --help | このヘルプメッセージを表示して終了 | オプション |
-s, --save-config | 将来の使用のために設定ファイルを保存 | オプション |
-c, --config | 設定ファイルのパス、デフォルトはconfig.json | オプション |
-o, --output-dir | 生成されたファイルを出力するディレクトリ、デフォルトはoutput | オプション |
-v, --verbose | コンソールだけでなくファイルにもログを出力 | オプション |
-p, --multiprocess | プラグイン/アナライザーの数だけマルチプロセスモードで実行 | オプション |
| 引数 | 説明 | 必須 / オプション |
|---|
-h, --help | このヘルプメッセージを表示して終了 | オプション |
--ip | アドレスファイルパス、CIDR、またはIPアドレスCSV (ip列必須)。 各IPの追加情報(ユーザー名、パスワードなど)を追加する列を追加できます。 | 必須 |
--port | ポート番号 | オプション |
--transport | tcp/udp | オプション |
--analyzer | 実行するアナライザー名 | オプション |