連載
» 2013年12月26日 10時30分 UPDATE

制御システム技術者のためのセキュリティ基礎講座(2):制御システムを狙ったマルウェア「Stuxnet」って何? (2/3)

[佐々木 弘志 / マカフィー,MONOist]

スタックスネットは何をやったのか

 では、スタックスネットは、ラダープログラミングソフトに対してどのような改ざんを行ったのだろうか。

 スタックスネットの標的となったシステムはシーメンス社製PLCで構成されていた。そして、スタックスネットは、シーメンス社製PLC用のラダープログラミングソフトをハッキングしたのである。シーメンス社のラダープログラミングソフト「Step 7」は、国際基準であるIEC61131-3に準拠している(関連記事:PLCの国際標準プログラミング入門(1): IEC 61131-3とPLCopenの目的とは)。

 ここでは、ST(Structured Text)言語の場合の例を挙げて、スタックスネットがPLCのプログラムを改ざんした様子を説明しよう(関連記事:PLCの国際標準プログラミング入門(2):IEC 61131-3の特長〔前編〕5つのプログラミング言語と変数)。

 スタックスネットは、Step 7の構成モジュールの1つでPLCとの通信を行う「s7otbxdx.dll」モジュールを改ざんして、そこに不正なコードを追加できるようにする。改ざんの仕組みをもう少し詳しく説明すると、もともとあった「s7otbxdx.dll」モジュールは「s7otbxsx.dll」というファイル名にリネームされ、スタックスネットによって追加された「s7otbxdx.dll」モジュールに置き換えられる。

 この新たなモジュールは、ラダープログラミングソフトに公開しているほとんどのサービス呼び出しに対しては、元の「s7otbxsx.dll」にそのまま転送して同じ動作をする。しかし、PLCのプログラムブロックを読み書きするサービスなどについては独自の処理を行うのだ。図2では、「s7blk_read(PLCからプログラムブロックを読み出す)サービス」を乗っ取って別の処理を行い、PLC内のST言語で書かれたプログラムブロックをPLCからStep 7に読みだす際に、プログラムに変更を加えている仕組みを示している。

図2 図2:スタックスネットがPLCのプログラムに不正なSTブロックを追加する仕組み(出典:シマンテック社レポート「W32 stuxnet dossier(PDF)」)

 このような方法で、PLCと通信する部分のモジュールを乗っ取ってしまえば、PLCに対して攻撃者の思う通りの制御を行うことができる。実際、スタックスネットはこのような手法でPLC内のプログラムを書き換えて、遠心分離器をコントロールするインバータの周波数を正常周波数の範囲外に上下させて破壊活動を行った。

 さらに、モニターソフトに対しては、さも正常に動作しているかのように、過去に記録した正常値データを返すなどして、現場のオペレータが異常に気付かないようにすることまで行っている。

Copyright © ITmedia, Inc. All Rights Reserved.