
Wagoコントローラ上のCodesysランタイムを標的とし、メモリ破壊やクラッシュを引き起こす入力を発見する、PLCベースのICS制御アプリケーション向け計測機能付きファザー。
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/>__