2026年7月、ミネソタ州で30以上の水道施設が一斉に被害を受けました。犯人は、水道施設の「頭脳」にあたるPLCという機器を狙いました。
PLCとは、ポンプなどの機械を自動で制御する産業用コンピューターです。いわば施設全体を静かに動かし続ける、縁の下の力持ちといえます。
被害を受けた施設の多くは、Rockwell Automation社のLogix系という製品を使っていました。同社は、世界中の工場やインフラで広く使われるPLCを製造している大手企業です。
PLCの多くは、C言語というプログラミング言語で作られています。
C言語は、機械に近い細かい命令を、人間が直接書けるように設計された言語です。そのぶん処理速度は速いのですが、安全装置が少ないという特徴もあります。
たとえば、データを入れる箱の大きさを、プログラムを書く人が自分で管理しなければなりません。箱に入りきらない量のデータを誤って詰め込んでしまうと、あふれたデータが隣の領域を書き換えてしまうことがあります。
この現象は「バッファオーバーフロー」と呼ばれます。C言語で特に起きやすい不具合の代表例です。
こうした細かい管理を人間が担う分、書き方を誤ると、思わぬ穴が生まれやすい言語といえます。
ところで、もともとPLCは、外部とつながらない閉じた環境で使われていました。工場や施設の中だけで完結する、いわば「陸の孤島」だったのです。
しかし人手不足が進み、現場に常駐する担当者を減らす必要が出てきました。
そこで、遠くの管理室からでも機械の状態を確認したい、という要望が高まりました。さらに、複数の施設をまとめて一元管理したいというニーズも生まれました。
こうした流れから、PLCを通信回線やインターネットにつなぐ流れが広がりました。IoTとしてPLCが認識されたのです。
IoTという言葉は、狭義と広義の二つの捉え方があります。
狭義のIoTとは、モノの状態をセンサーで捉え、デジタルデータとしてネットに送り出す仕組みです。
たとえば、留守番中のペットにカメラを設置し、その様子をスマホで見守れるサービスがあります。これは、ペットの姿という現実の情報を、データとして飼い主のもとへ届けているだけの仕組みです。
一方、広義のIoTは、集めたデータをもとに、機械が現実世界そのものを動かすところまでを含みます。
PLCは、センサーで状態を捉えるだけでなく、その情報をもとにポンプなどを実際に動かします。つまりPLCは、データを集めて終わりではなく、現実を動かすところまで担う、広義のIoT機器です。
PLCの内部には、暗号の鍵にあたる仕組みが組み込まれています。
暗号の鍵は、大きく二つの種類があります。
一つ目は「共通鍵暗号」で、暗号化と復号に同じ鍵を使う方式です。たとえるなら、パスワード付きZIPファイルのようなものです。圧縮するときも、解凍するときも、同じパスワードを使う仕組みです。
共通鍵暗号は、送る側と受け取る側で、あらかじめパスワードを共有しておく必要があります。この「共有」こそが、共通鍵暗号の弱点になります。
パスワードを送る途中で誰かに盗み見られれば、それで終わりだからです。
二つ目は「公開鍵暗号」で、暗号化用と復号用の鍵が別々の方式です。公開する鍵は誰に見られてもよく、秘密の鍵だけを自分だけで持ちます。そのため、鍵そのものを事前に共有する必要がなく、盗み見られる隙がありません。
さらに、相手ごとに違う鍵ペアを用意できるため、一つ漏れても被害が広がりにくいのです。
「事前共有が不要」で「個体ごとに分けられる」という二点が、公開鍵暗号が安全とされる理由です。
一方、共通鍵暗号は処理が軽いため、IoT機器のような資源の限られた機器でよく使われてきました。
今回悪用されたとみられるのが、CVE-2021-22681という脆弱性です。
これは、そのLogix系PLCに存在する、認証をすり抜けられる欠陥です。この脆弱性の深刻度は、CVSSという共通の物差しで評価されています。
CVSSは、世界中のセキュリティ関係者が同じ基準で危険度を測るための仕組みです攻撃のしやすさや、被害の大きさなどを点数化し、0から10点で表します。
この脆弱性のスコアは9.8点と、最高水準に近い深刻度とされてます。
原因は、暗号鍵の保護が不十分だったことにあります。
この鍵は、あらゆるLogix PLCで共通して使われています。いわば、同じパスワードを設定したZIPファイルが、世界中にばらまかれていた状態です。
一つのパスワードさえ知れば、同じ製品を使う施設すべてを開けてしまえるのです。
修正しようにも、既存の何百万台との互換性が崩れてしまうため、ベンダーもパッチを出せずにいます。
便利さを追い求めた末に、「あとで直せばいい」が積み重なってきました。その積み重ねが今、こうした形で表に出てきたのかもしれません。