Nozomi Networks 研究所は最近、ベッコフオートメーションの TwinCAT/BSD オペレーティングシステムに 4 つの脆弱性を発見しました。この脆弱性は、適切な条件下で、PLC がロジックの改ざんや DoS 攻撃を受けやすくなる可能性があり、監視された産業プロセスに大きな影響を与えます。実際のところ、私たちが発見した問題は、PLC の root 権限でコマンドを実行する可能性や、OS レベルのフリーズを引き起こす可能性など、影響力のあるサイバー脅威を提示するものであり、解決には電源の再投入が必要です。
攻撃を成功させるには、オペレーティングシステム上の有効なローカルアカウントへのアクセス権を取得する必要があります。しかし、特定の権限は必要ないため、PLC 上で最低限の権限しか持たないユーザーやサードパーティアプリケーションでも、この脆弱性を悪用することが可能です。
ベッコフオートメーションは、この脆弱性を発見した際、2ヶ月という驚異的なスピードで問題解決に取り組みました。これらの脆弱性に対するパッチと緩和策は、ベッコフの公式アドバイザリーページで公開されています。
以下に、これら4件の新たな脆弱性を発見するに至ったセキュリティ調査の結果を示します。改めて、ベッコフ社の迅速な対応と公開プロセスを通じての継続的なプロフェッショナリズムに感謝申し上げます。
リサーチ範囲
TwinCAT/BSDは、ベッコフオートメーションが開発したオペレーティングシステムで、TwinCATのリアルタイム制御機能とBSD Unixベースオペレーティングシステムの堅牢で汎用性の高い機能を組み合わせるように設計されています。TwinCATは、「The Windows Control and Automation Technology」の略称で、ほぼすべてのPCベースのシステムを、マルチPLCシステム機能を備えたリアルタイムコントローラに変換するソフトウェアシステムです。
TwinCAT/BSD にインストールできるソフトウェアには、ベッコフデバイスマネージャ (図1) があります。これは、ベッコフデバイスの稼働状況、パフォーマンス、および構成を中央の集中管理場所からリモートで監視するための包括的な機能スイートです。
このブログで提示されたすべてのセキュリティ上の欠陥は、このソフトウェアを分析した後に特定されました。脆弱なパッケージとバージョンの詳細なリストについては、"脆弱性リストと影響を受けるバージョン" のセクションを参照してください。
![](https://cdn.prod.website-files.com/645a45d56fc4750d4edd96fe/66b17c9a55260ca2a2384321_66b17c2cd744997479997be9_12440269323__Web%2520copy.webp)
これらの脆弱性の影響
これらの脆弱性は、影響を受けるデバイスに重大な影響を及ぼします。攻撃者が PLC のオペレーティングシステムに何らかのアクセスを達成した場合 (詳細は後述)、取得した特権に関わらず、攻撃者は以下のような攻撃シナリオを実行することが可能になります。
- PLC ロジックの改ざん:限定的な認証情報しか持たない攻撃者は、特定された脆弱性のひとつを利用して、元のパスワードなしで PLC 管理者のパスワードをリセットすることができます。これにより、標準的なエンジニアリングツールを使用して PLC に管理者アクセスで接続し、望むようにデバイスを再プログラムすることが可能となり、監視下にある産業プロセスを潜在的に破壊する可能性があります。
- PLC のサービス拒否:限定的な認証情報しか持たない攻撃者は、別の脆弱性を悪用して、電源リセットが実行されるまで、ネットワーク経由のリモートアクセスおよびマウスやキーボードを介したローカルアクセス両方において、デバイスを応答不能にして利用できないようにすることが可能です。 これは、デバイスに対する他の攻撃と組み合わせることが可能です。たとえば、脅威の主体が先に挙げた PLC プログラミングの操作を行い、産業プロセスの混乱を引き起こす可能性があります。その後、このシナリオを実行してデバイスへのアクセスを阻止し、制御を回復しようとするあらゆる試みをブロックします。
これらの攻撃シナリオを実行する上で、攻撃者が用いる最も単純な方法のひとつは、PLC の OS アカウントのひとつに対する有効な認証情報を取得 (例:スニッフィング、フィッシングによる盗難、クラッキングなど) し、SSH 経由でデバイスにログインすることです。攻撃者は、厳重に保護された管理用認証情報を標的にする必要はなく、監査担当者や外部委託業者がデバイスにアクセスし、メンテナンス作業を行う際に使用するような、より権限の低い認証情報を標的にするかもしれません。実際、こうした種類の認証情報では、パスワードの保護が弱いことが珍しくありません。例えば、複雑性が低かったり、頻繁に変更されなかったり、複数のデバイスで使い回されていたりといったことです。しかし、この戦略では、デバイスとの直接的なやり取りが必要であり、PLC は一般的に公開インターネット上に公開されていないため、おそらく事前に社内ネットワークへのアクセスが必要になります。
脅威の主体が脆弱な PLC を攻撃するために利用する可能性がある別のルートは、デバイスのサードパーティ製アプリケーションまたはライブラリのサプライチェーンを侵害し、毒入りのソフトウェアアップデートがインストールされるのを待つというもので、liblzma と SSH サーバーで発生した事態と類似しています。liblzma のケースでは、攻撃者が共同管理者となるのに十分な信頼を確立するまでに約 3年を要したように、これは些細なことではありませんが、この攻撃シナリオは、認証情報の取得や標的システムとのネットワークパケットの交換を必要とせずに、リモートで実行される可能性があります。
脆弱性リストと影響を受けるバージョン
次の表は、発見された 4つの脆弱性をCVSS v3.1 の基本スコア順に並べたものです。
CVE-2024-41173 および CVE-2024-41175 は、TwinCAT/BSD Version 2.0.0.1 (含まれていません) までの IPC-Diagnostics パッケージに影響します。
CVE-2024-41174は、バージョン2.1.1.0 までの TwinCAT/BSD に含まれる IPC-Diagnostics-www パッケージに影響します (含まれていません)。
CVE-2024-41176 は、TwinCAT/BSD に含まれる MDP パッケージ(バージョン1.2.7.0まで) に影響します (含まれていません)。
脆弱性スポットライト
発見された4つの脆弱性の中で、CVE-2024-41173とCVE-2024-41175については、追加の考慮が必要です。
CVE-2024-41173 は、他の OT および IoT 機器でも同様に検出された見落としが原因で発生する認証バイパス脆弱性です。特に、Beckhoff Device Manager から外部から受信した HTTP リクエストの流れを追跡したところ、管理リクエストがループバックインターフェースにのみ公開されている他の内部サービスに転送される前に、Nginx を介して Authelia によって検証されていることが判明しました。しかし、これらの後者のサービスでは、認証レベルの再検証ステップが省略され、受信したコマンドの配信または実行のみに焦点が当てられています。そのため、Authelia 認証により外部から直接管理リクエストを送信できない権限の低いユーザーは、SSH 経由で認証を行うだけで、この保護メカニズムを簡単に回避し (実際、低権限ユーザーでも、Beckhoff Device Manager で作成された直後から SSH アクセスが許可されています)、内部サービスにリクエストを発行することができます。
管理上のリクエストの人つは、認証情報を必要とせずにアカウントの任意の削除や作成を許可しているため、攻撃者はこの脆弱性を悪用して、デバイス上で最も高い権限を持つアカウント "Administrator" を削除し、新しいパスワードで再作成することが考えられます。この段階で、デバイスの完全な制御が攻撃者に渡り、攻撃者はデバイスを自由に再プログラムすることができます。この攻撃シナリオを図2 に示します。
![](https://cdn.prod.website-files.com/645a45d56fc4750d4edd96fe/66c3e9fcca98306f86b07606_66c3e9e9ca98306f86b06944_Beckhoff-Attack-PLC-Tampering.webp)
対照的に、CVE-2024-41175 は、外部から受信した入力に対して堅牢なパーサーを設計する際に考慮すべき別の例となっています。
すべての管理リクエストは、Beckhoff が定義した構造に従うシリアライズされた base64 エンコードのペイロードを含む HTTP POST リクエストの形式で送信されます。よくあるように、文字列はふたつのフィールドを使用してシリアライズされます。文字列の長さを表す固定サイズの数値、それに続く文字列自体の実際のコンテンツです。
おそらく、コードの継続的な変更を必要とせずに、可能な限りのシナリオに対応できるようにするため、文字列の長さは 4バイトの符号なし整数で表現されるように選択されました。したがって、解析ルーチンに伝達できる文字列の最大サイズは "0xffffffff" となり、これは約 4GBに相当します。
Nozomi Networks Labs で実施した、4GB の RAM を搭載した Beckhoff CX5130 PLC のテストによると、宣言サイズが 4GB の文字列を含むリクエストが PLC に送信された場合 (実際には 4GBの文字列がリクエストに含まれている必要はなく、文字列のサイズを宣言するだけで十分です)、解析ルーチンがこの大きな文字列用のスペースを割り当てようと試みます。これにより、PLC の使用可能なリソースがすぐに枯渇し、数秒以内にフリーズします。このような状態になると、PLC はネットワーク経由でも、ローカルのマウスやキーボード経由でも使用できなくなります。
図3は、同様に細工されたリクエストを送った数秒後の "ps" の出力のスナップショッ トです。
![](https://cdn.prod.website-files.com/645a45d56fc4750d4edd96fe/66b17c9a55260ca2a2384319_66b17c7c0fa2f16d9ed2c781_Screenshot%25202024-07-26%2520at%252015.51.51%2520copy.webp)
修復
これらの脆弱性を報告した後、Beckhoff は脆弱性のあるパッケージの修正版を迅速に提供しました。アセットの管理者は、TwinCAT/BSD インストールで影響を受けるソフトウェアを以下のバージョンに更新することで、これらの脆弱性に対処することができます。
- IPC-Diagnostics: Version 2.0.0.1 以降
- IPC-Diagnostics-www: Version 2.1.1.0 以降
- MDP: 少なくともバージョン1.2.7.0
脆弱なパッケージを更新することが難しい場合、悪用される可能性を低減するために、以下の緩和策を適用することができます。
- TwinCAT/BSD が動作する PLC にアクセスできるローカルアカウントの数は、権限に関係なく最小限に抑えてください。信頼できるアカウントのみが許可され、そのパスワードが確実に保護されていることを確認してください。
- デバイスへの正常なログインを記録し、定期的に監査する;
- サードパーティのアプリケーションやパッケージをTwinCAT/BSDにインストールしたり、アップデートしたりする前に、十分に確認してください。
資産の所有者は、Beckhoff Information System Web ポータルの公式アドバイザリページで、響を受ける構成に対するすべての公式パッチと緩和策を確認できます。