イランのナタンズにあるウラン濃縮施設で使われているプログラマブルロジックコントローラ(PLC)に Stuxnet が及ぼす影響について初めて詳しく報告したとき、シマンテックは 2 つの攻撃戦略を文書にまとめました。また、417 PLC 機器を標的とする亜種が無効化されていたことも指摘しています。今回シマンテックは、417 PLC 機器に対する完全機能版の攻撃コードを備えた初期バージョンの Stuxnet を入手しました。
綿密な解析の結果、417 PLC 機器に対する攻撃コードは、気化した UF6(六フッ化ウラン)をウラン濃縮遠心分離機に供給するときに使われるバルブの状態を変化させることが確認できました。この攻撃でバルブが閉鎖されると、給気が停止され、遠心分離機と関連システムの破損につながります。しかも、このコードはシステムの通常の運転状態についてスナップショットを作成し、攻撃中にこの通常運転の値を再生するので、オペレータはシステムが正常に動作していないことに気づきません。また、攻撃サイクルの途中でオペレータが設定の変更を試みても、バルブの状態は変更できないようになっています。
図 1. Stuxnet 0.5 の攻撃戦略の概要
Stuxnet 0.5 が Stuxnet の初期バージョンだとすれば、417 に対する攻撃が当初の戦略であり、その後は Stuxnet 1.x バージョンで使われていたように、遠心分離機の速度を変える方法に方向転換したようです。
Stuxnet 1.x にはコードに欠落がありましたが、それが Stuxnet 0.5 に存在します。この欠落部分は、417 攻撃戦略を展開する前に標的システムのフィンガープリンティングを実行し、必須の PLC データブロック(DB8061)を作成するコードです。これでようやく、意図されていた 417 攻撃戦略の全容を解き明かせるようになりました。
標的となるシステム構成のフィンガープリンティング
このバージョンの Stuxnet は、幅広く標的システムのフィンガープリンティングを実行したうえで、ペイロードを発動する前に、そのシステムが正しい場所にあるかどうかを確認します。これを判断するために、Stuxnet は侵入先のシステムで Step 7 ソフトウェアが実行されているかどうかを調べ、標的システムのシンボルテーブルを解析します。シンボルテーブルには、標的システムの物理機器それぞれに関する識別ラベルが記録されています。たとえば、バルブ、ポンプ、センサーなどに重複しない識別子が付けられています。シンボルラベルは、配管/計装図(P&ID)に使われる計装記号と識別情報(Instrumentation Symbols and Identification)に関する ANSI/ISA-5.1の規格に緩やかに従っています。
図 2.イランのウラン濃縮施設で使われている P&ID 図の例(出典: PressTV)
Stuxnet がこのシンボルテーブルで検索する機器とラベルを、以下の表に示します。
表 1. Stuxnet の標的になった機器のタイプとラベル
各機器に対するラベルは、以下に示す特定のフォーマットに従っています。
たとえば、モジュール A21 のバルブはカスケード 8 にあり、遠心分離機 160 に対応するので、ラベルは「PV-A21-8-160」となります。
このような文字列の解析に使われるロジックから、さらに興味深い手掛かりも得られます。たとえば、カスケードモジュールは A21 から A28 の間でなければなりません。これが、イランのナタンズにおけるカスケードモジュールの既知の構成に一致する範囲だからです。Stuxnet は、モジュールごとに最大 18 段のカスケードを想定し、164 台の遠心分離機をカスケードごとに 15 のステージにグループ分けします。これも、ナタンズの施設について公開されている構成と一致しています。
さらに遠心分離機の数は、以下の表のように、ステージごとに配分されることになっています。
表 2.処理ステージと遠心分離機の構成
各ステージでは、遠心分離機がさらに 4 台ずつのサブクラスタにグループ分けされます。
フィンガープリンティングの際、Stuxnet は想定した構成に一致する機器ごとにカウンタを記録します。このカウンタが一定のしきい値を超えると、Stuxnet はフィンガープリンティング中のシステムが標的システムの構成に一致したと見なし、攻撃用の PLC コードをインジェクトします。また、最大 18 段のうち値の大きい順に 6 段のカスケードを特定し、その情報を機器のアドレスや構成情報とともに、データブロック DB8061 に保存します。
攻撃のプロセス
バージョン 1.x の Stuxnet と同様、417 PLC 機器に対する攻撃コードは、8 種類の状態をとりうるステートマシンで構成されています。これらの状態が、18 段中 6 段のカスケードのバルブを閉鎖することで攻撃を実行します。
図 3. 417 PLC 機器に対する攻撃コードの状態フロー図
- 状態 0 - 待機: システムの識別を実行し、攻撃の前に濃縮プロセスが定常状態に達するまで(およそ 30 日間)待機する。
- 状態 1 - 記録: 周辺機器のスナップショットを作成し、後で再生する偽の入力ブロックを構築する。
- 状態 2 - 遠心分離機のバルブを攻撃: 偽の入力信号の再生を開始する。最初の給気ステージバルブを除き、大部分の遠心分離機でバルブを閉鎖する。
- 状態 3 - 二次圧力を読み取り: 1 段のカスケードの最終ステージでバルブを開き、低圧力の値を読み取る。
- 状態 4 - 圧力変化を待機: 所定の圧力変化または制限時間まで待機する。所要時間は最大 2 時間。
- 状態 5 - 補助バルブを攻撃: 最初の給気ステージ(ステージ 10)に近いと考えられるバルブを除き、すべての補助バルブを開く。この状態で 3 分間待機する。
- 状態 6 - 攻撃の完了を待機: いっさいの状態変更をさせないようにしたまま 6 分間待機する。
- 状態 7 - 終了: リセットして状態 0 に戻る。
ほぼすべてのバルブを閉鎖しますが最初の給気ステージバルブは例外なので、UF6 は引き続きシステムに流入します。この動作だけでも遠心分離機そのものを破損するには十分ですが、Stuxnet は運転圧力が通常の 5 倍に達することを想定しています。圧力がそのレベルに達した場合、ウラン濃縮システムに甚大な損害が発生し、UF6 は気体から固体に戻ることもあります。
こうした想定どおりに攻撃が成功するのかどうかは、依然として不明です。仮に攻撃に成功したとしても、攻撃者は別の戦略に転じることを決定し、Stuxnet バージョン 1.x では、遠心分離機そのものの速度に対して攻撃を仕掛けることにしました。
遠心分離方式のウラン濃縮システムについては、ISIS(Institute for Science and International Security)から継続的に情報をご提供いただきました。ここに感謝の意を表します。
Stuxnet 0.5 の主な特徴について詳しくは、以下のブログ、ビデオ、テクニカルホワイトペーパーを参照してください。
- Stuxnet 0.5: ミッシングリンク見つかる
- Stuxnet 0.5: その進化の過程
- Stuxnet 0.5: コマンド & コントロールの機能
- ビデオ: Stuxnet Timeline and Attack Strategy(Stuxnet のタイムラインと攻撃戦略)
Stuxnet 0.5 について詳しくは、シマンテックのホワイトペーパー(英語)をご覧ください。
* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/jaにアクセスしてください。