
산업용 PLC 메타데이터 및 프로젝트 파일을 분석하기 위한 오픈소스 포렌식 프레임워크입니다. ICS 환경에서 의심스러운 아티팩트를 스캔하여 사고 대응 및 수동 조사를 지원합니다.

Microsoft ICS 포렌식 도구 프레임워크는 산업용 PLC 메타데이터 및 프로젝트 파일 분석을 가능하게 하는 오픈 소스 포렌식 프레임워크입니다.
이 프레임워크는 조사관이 PLC를 스캔하고 ICS 환경 내에서 의심스러운 아티팩트를 식별할 수 있는 편리한 방법을 제공하며, 이를 수동 확인, 자동 모니터링 작업 또는 손상된 장치를 탐지하기 위한 사고 대응 작업에 사용할 수 있습니다.
오픈 소스 도구이므로 ICS 포렌식 도구를 통해 조사관은 출력 결과를 검토하고 특정 요구 사항에 맞게 사용자 지정할 수 있습니다.
이 지침은 개발 및 테스트 목적으로 로컬 머신에서 프로젝트를 복사하여 실행할 수 있도록 안내합니다.
git clone https://github.com/microsoft/ics-forensics-tools.git
Python 요구 사항 설치
pip install -r requirements.txt
| 인수 | 설명 | 필수 / 선택 |
|---|---|---|
-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 | 실행할 분석기 이름 | 선택 |
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는 에이전트 없는 네트워크 계층 보안 솔루션으로, 조직이 온프레미스 및 Azure 연결 환경에서 IoT/OT 및 산업 제어 시스템(ICS) 장치의 자산을 지속적으로 모니터링 및 검색하고, 위협을 탐지하며, 취약성을 관리할 수 있도록 합니다.
MSRC 블로그의 Section 52
도구에 관한 ICS 강연
Section 52 - 악성 래더 로직 조사 | Microsoft Defender for IoT 웨비나 - YouTube
이 프로젝트는 기여와 제안을 환영합니다. 대부분의 기여는 귀하가 기여를 사용할 권리가 있으며 실제로 사용 권한을 부여한다는 내용의 Contributor License Agreement(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.
본 소프트웨어는 '있는 그대로' 제공되며, 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않는 어떠한 명시적 또는 묵시적 보증도 제공되지 않습니다. 어떠한 경우에도 저작자 또는 저작권 보유자는 계약, 불법 행위 또는 기타에 관계없이 소프트웨어 또는 소프트웨어의 사용 또는 기타 거래로 인해 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다.