
Фреймворк криминалистики с открытым исходным кодом для анализа метаданных и проектных файлов промышленных ПЛК. Сканирует подозрительные артефакты в средах АСУ ТП для поддержки реагирования на инциденты и ручного расследования.

Microsoft ICS Forensics Tools framework — это фреймворк криминалистики с открытым исходным кодом, позволяющий анализировать метаданные промышленных ПЛК и файлы проектов.
Фреймворк предоставляет следователям удобный способ сканирования ПЛК и выявления подозрительных артефактов в средах АСУ, что может использоваться для ручной проверки, автоматизированных задач мониторинга или операций реагирования на инциденты для обнаружения скомпрометированных устройств.
Будучи инструментом с открытым исходным кодом, ICS Forensics Tools позволяет следователям просматривать результаты и настраивать их под свои конкретные требования.
Эти инструкции помогут вам получить копию проекта и запустить его на локальной машине для целей разработки и тестирования.
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 помечена как «Корень источников».
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 в папке pluginsfrom 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 в папке analyzersMicrosoft Defender for IoT — это сетевое решение безопасности без использования агентов, которое позволяет организациям непрерывно отслеживать и обнаруживать активы, выявлять угрозы и управлять уязвимостями в устройствах IoT/OT и промышленных системах управления (ICS) как локально, так и в средах, подключённых к Azure.
Section 52 в блоге MSRC
Лекция по ICS об инструменте
Section 52 - Investigating Malicious Ladder Logic | Microsoft Defender for IoT Webinar - YouTube
Этот проект приветствует вклад и предложения. Большинство вкладов требуют вашего согласия с Лицензионным соглашением с участником (CLA), которое подтверждает ваше право и фактическое предоставление нам прав на использование вашего вклада. Подробности см. на https://cla.opensource.microsoft.com.
Когда вы отправляете запрос на включение изменений (pull request), бот CLA автоматически определит, нужно ли вам предоставить CLA и соответствующим образом оформит PR (например, проверка статуса, комментарий). Просто следуйте инструкциям, предоставленным ботом. Это нужно сделать только один раз для всех репозиториев, использующих нашу CLA.
Этот проект принял Кодекс поведения Microsoft Open Source. Для получения дополнительной информации ознакомьтесь с Часто задаваемыми вопросами о Кодексе поведения или обратитесь по адресу [email protected] с любыми дополнительными вопросами или комментариями.
Этот проект может содержать товарные знаки или логотипы для проектов, продуктов или услуг. Авторизованное использование товарных знаков Microsoft или логотипов подлежит и должно соответствовать Руководству по использованию товарных знаков и брендов Microsoft. Использование товарных знаков или логотипов Microsoft в модифицированных версиях этого проекта не должно вызывать путаницу или подразумевать спонсорство со стороны Microsoft. Любое использование товарных знаков или логотипов третьих сторон регулируется политиками этих третьих сторон.
Copyright (c) 2018 Microsoft Corporation. Все права защищены.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ В КОЕМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, УБЫТКАМ ИЛИ ДРУГИМ ОБЯЗАТЕЛЬСТВАМ, БУДЬ ТО В РАМКАХ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКШИМ ИЗ, В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ЕГО ИСПОЛЬЗОВАНИЕМ, ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С НИМ.
| Аргументы | Описание | Обязательный / Необязательный |
|---|
-h, --help | показать это справочное сообщение и выйти | Необязательный |
-s, --save-config | Сохранить файл конфигурации для удобного использования | Необязательный |
-c, --config | Путь к файлу конфигурации, по умолчанию config.json | Необязательный |
-o, --output-dir | Каталог для вывода файлов, по умолчанию output | Необязательный |
-v, --verbose | Вывод логов в файл и консоль | Необязательный |
-p, --multiprocess | Запуск в многопроцессорном режиме по количеству плагинов/анализаторов | Необязательный |
| Аргументы | Описание | Обязательный / Необязательный |
|---|
-h, --help | показать это справочное сообщение и выйти | Необязательный |
--ip | Путь к файлу адресов, CIDR или CSV-файл с IP-адресами (требуется колонка ip). добавьте больше колонок для доп. информации об IP (имя пользователя, пароль и т.д.) | Обязательный |
--port | Номер порта | Необязательный |
--transport | tcp/udp | Необязательный |
--analyzer | Имя анализатора для запуска | Необязательный |