
PLC 기반 ICS 제어 애플리케이션용 계측형 퍼저로, Wago 컨트롤러의 Codesys 런타임을 대상으로 메모리 손상 및 크래시를 유발하는 입력을 발견합니다.
ICSFuzz: ICS 제어 애플리케이션용 퍼징 도구
ICSFuzz는 ICS 제어 애플리케이션의 취약점을 발견하기 위한 PLC 측 퍼징 도구입니다.
작성자: Dimitris Tychalas \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
이 도구는 사용자 머신에 이미 설치된 크로스 컴파일러가 필요합니다. 퍼저는 PLC에서 네이티브로 실행되므로 OSELAS와 같은 ARM 기반 크로스 툴체인으로 컴파일되어야 합니다. 이러한 툴체인을 설치하려면 다음 링크의 지침을 따르고 Makefile을 수정하여 크로스 컴파일러의 위치를 지정하십시오.
OSELAS 툴체인 <https://pengutronix.de/en/software/toolchain.html>__ICSFuzz 도구는 ICS 제어 애플리케이션을 평가하기 위한 전문 보안 평가 도구입니다. 현재 단계에서는 Wago PLC에 맞게 수정 및 적용된 Codesys 플랫폼 기반 애플리케이션만 지원합니다. 이 도구는 저희의 지속적인 작업 중 하나이며, 업그레이드 및 호환성 개선에 대한 제안은 언제나 환영합니다 :) [email protected]로 이메일을 보내주세요.
이 도구는 Wago PLC에서 실행되는 간단한 애플리케이션으로 빌드됩니다. Makefile을 실행하고, 생성된 fuzzer 바이너리를 PLC에 복사한 후 실행하세요! 이 도구는 임의의 프로세스 메모리에 접근하고 수정하기 때문에 관리자 권한이 필요합니다. sudo 또는 root 사용자로 실행해야 합니다.
이 도구는 현재 Codesys 3.5, 패치 02.06.20(08) 및 이전 버전과 호환됩니다. ICSFuzz를 제대로 호스팅하려면 PLC 펌웨어를 업그레이드하거나 다운그레이드하십시오. 퍼징 과정을 시각적으로 확인하려면 Wago PLC용 개발/HMI 도구로 제공되는 e!cockpit 플랫폼을 사용할 수 있습니다. 이 플랫폼을 통해 애플리케이션에 전달되는 퍼징 입력을 추적하고 잠재적 크래시를 확인할 수 있습니다. 애플리케이션이 실행을 멈추면 "run" LED가 빨간색으로 고정됩니다. 애플리케이션이 중지되므로 현재 (고정된) 입력이 크래시를 일으킨 입력입니다. e!cockpit을 통해 애플리케이션을 다시 시작하고 퍼저도 다시 시작할 수 있습니다.
퍼저에는 초기 하드코딩 시작 값이 있으며(소스 코드에서 seed_input으로 표기됨), 퍼저를 사용하면서 자유롭게 수정할 수 있습니다.
저희 작업이 흥미롭다고 생각하고 (학술적이든 아니든) 연구에 사용하신다면, ICSFuzz를 설명하는 Usenix Security 2021 논문을 인용해 주세요:
Tychalas, Dimitrios, Hadjer Benkraouda, and Michail Maniatakos. "ICSFuzz: Manipulating I/Os and Repurposing Binary Code to Enable Instrumented Fuzzing in {ICS} Control Applications." 30th {USENIX} Security Symposium ({USENIX} Security 21). 2021.
ICSFuzz는 인생의 모든 좋은 것들과 마찬가지로 거인의 어깨 위에 서 있습니다. 이 프레임워크는 ICS 애플리케이션에 전달되는 필수 입력 변이를 생성하기 위해 Michal Zalewski의 강력한 AFL을 기반으로 합니다.
AFL <https://lcamtuf.coredump.cx/afl/>__