産業用自動化システムの脆弱性と悪意のあるコード

15〜20年前に開発された産業用自動化ツールには、実際には安全機能が含まれていませんでした。過去数十年にわたって、企業はサイバー犯罪者による悪用に利用できる致命的なアーキテクチャ上の欠陥を備えた機器の全艦隊を蓄積してきました。この投稿では、産業用自動化システムの脆弱性について説明し、状況を改善するための推奨事項を提供します。



画像



2019年に、重工業用機械用のソフトウェアを配布するストアをインターネット上に見つけました。これらのアプリのいくつかをダウンロードし、それらがどのように機能するかを理解するためにリバースエンジニアリングしました。彼らのコードは、車を組み立ててコンベヤーに食べ物を詰める産業用ロボットを自動化するために使用される独自のプログラミング言語の1つで書かれました。これらのアプリケーションの1つで脆弱性が発見されRogue Automation:IndustrialProgrammingのVulnerableand MaliciousCodeに関する調査が開始されました



最も人気のある8つの産業用プログラミング環境(ABB、Comau、Denso、Fanuc、Kawasaki、Kuka、Mitsubishi、Universal Robots)の技術的な詳細と弱点を調べたところ、これらの言語を使用して、1つから移動するワームマルウェアを作成できることがわかりました。オペレーターのリモートコマンドに従い、他のロボットに対して脆弱なロボット。



見つかった欠陥は、数十年前に行われた設計上の選択の結果です。これらのソリューションは、産業機器のプログラミングに今日でも使用されているテクノロジー、方法、およびツールを定義しました。現代のサイバー脅威の文脈でこの選択の意味を考慮してください。



ロボットからデータを盗む



産業用ロボットで実行するアプリケーションとして実装された脆弱なWebサーバーの実際のケースを発見しました。 ABB Rapidで記述されたWebサーバーには、攻撃者がネットワーク経由でロボットに接続し、ログを含むロボットのコントローラーからファイルをコピーすることを可能にするトラバーサルの脆弱性が含まれていました。このようなファイルには、さまざまな機密データやノウハウが含まれている可能性が高いため、地下市場で収益性の高い方法で販売できます。



攻撃者がロボットと同じネットワーク上のコンピューターにハッキングした場合、プログラムはエージェントからの要求をすべて実行するため、エージェントを装ったコントローラーのWebサーバーに接続し、目的のファイルを要求し、許可なく取得することができます。



画像

脆弱なアプリケーションコードのフラグメント。ソース(以下、特に明記されていない限り):Trend Micro



Line 493は、sendFile関数を呼び出して、要求されたファイルをクライアントに送信します。 pageStringはフィルタリングされないため、「... /」またはその他のパスが含まれている可能性があります。これにより、ファイルシステムをトラバースして、ほぼすべてのファイルをダウンロードできます。



画像

脆弱性の悪用スキーム



この場合、注目すべきは、脆弱なWebサーバーの開発者がコードに残したコメントです。彼は自分が書いたコードが脆弱であることを知っていましたが、すべての要求が入力データを検証し、「..」のような文字列を許可しない「正しい」ブラウザから来ると想定したため、問題を修正することは何もしませんでした。 。\\ ... \\ ":



画像

,





一部の脆弱性の悪用は、物理的な世界に影響を与える可能性があります。たとえば、完成品や周囲の人々に害を及ぼす可能性があります。

産業用ロボットKukaのオープンソースプロジェクトで、可動部品の軌道を変更できる脆弱性を発見しました。プログラムは、ネットワークを介して座標のストリームを受信し、指定された動作を実行するアクチュエータに転送します。このために、特別なクラスの手順が使用されます-モーションオートメーションサーバー。これは、産業用ロボットOEMが製品の動きを一貫して制御する方法を提供できるようにする標準インターフェースです。



画像

トラフィック自動化サーバーの脆弱なコードには、転送されたデータの正当性のチェックが含まれていません



サーバーコードは、ロボットの動きの座標の次の部分がどこから来たのかを決してチェックしません。内部認証を提供しません。唯一の保護は、送信者のMACアドレスとIPアドレスをチェックすることです。これらはいずれも、ネットワークに侵入した侵入者によって簡単に偽装される可能性があります。



私たちの実験台では、なりすましを使用して、ロボットとエンジニアリングワークステーション間のトラフィックを改ざんできることを確認しました。攻撃者は任意の座標を送信する可能性があり、ロボットはそれらを実行するだけで、実際のプロダクションでは事故につながる可能性があります。



座標が正しくないネットワークパケットをトラフィックに注入することで、マニピュレータをセキュリティゾーンから数回押し出し、ロボットの「手」で物理的なオブジェクトを叩くことができました。その結果、ロボットが物体を拾う「アーム」が脱落しました。ロボットの脱落した



画像

アームは、安全でない座標をトラフィックに導入した結果です。



動的マルウェア



このタイプの攻撃は、ロボットが信頼できると思われるシステムインテグレーターによって作成されたプログラムを実行していることを前提としています。実際には、インテグレータによって作成されたプログラムはすべて信頼できると見なされ、コードセキュリティチェックなしで展開されます。



インテグレータを危険にさらしたり、脆弱なネットワークストレージ内のプログラムを置き換えたりすることで、悪意のあるコードを目に見えない形でエンタープライズネットワークに挿入できます。攻撃者が必要とするモジュールをダウンロードし、標準の生産サイクルの一部として実行するために起動するローダーを追加します。



画像

産業用ロボット用のプログラミング言語で書かれたマルウェアダウンローダー



この概念をテストするために、産業用ロボット用のプログラミング言語でドロッパーを作成し、外部プログラムを使用してコードをロボットコントローラーにロードして実行できることを確認しました。制御されると、そのようなプログラムは、ネットワークインフラストラクチャに関する情報を収集し、ファイルと資格情報を盗むことによって、さらに悪意のあるアクションを実行できます。



異常なRCEの脆弱性



私たちの発見の1つは、実行のために関数を起動する完全に立派なプログラムであり、その名前はネットワークを介して受信されます。それらを実行するために、動的なコードのロードを使用しますが、正確に何を起動するかには関心がありません。プログラムは、ロードされたライブラリの整合性をチェックするための機能を提供しません。



画像

「立派な」アプリケーション



画像

の脆弱なロジック脆弱なロジックを実装するコードフラグメント。



プログラム自体には悪意のある機能は含まれていませんが、攻撃者はそれを使用して適切なタイミングでロボットにコマンドを発行し、物理的な世界に影響を与える可能性があります。



創造の王冠-悪意のあるワーム



検出された問題の深刻さを実証するために、自己伝播と自動更新、制御サーバーからのコードの動的ロード、およびリモート制御機能を備えたプログラムを開発しました。スキャンプログラムは、ネットワークスキャンを実行し、任意のファイルをコマンドおよび制御サーバーに転送し、感染したデバイスのリストを維持し、ボットとして機能することもできます。



画像

実際のマルウェアの動作をシミュレートするPoCプログラムのロジック



画像

検出されたファイルのリストを作成し、それを制御サーバーに送信します



問題の原因



過去数十年間に開発された産業用自動化のための8つの人気のあるプログラミング言語を分析した後、特定された潜在的な脆弱性の主な理由は、これらの言語がシステムリソースにアクセスするための低レベルの手段を含んでいることであるという結論に達しました。これらのツール自体は危険ではありませんが、攻撃者は他の目的に使用する可能性があり、ロボット、そのオペレーター、および接続されたシステムの安全性に重大な影響を及ぼします。たとえば、マニピュレータを上に移動したり、ワークピースを持ち上げたり、マニピュレータを下に下げたり、ワークピースを解放したりするために使用できます。



この高度な機能の豊富なセットにより、プロセスエンジニアは、ネットワークからデータを取得したり、ファイルを読み書きしたりできるアプリケーションを自由に開発できます。ただし、プラットフォームはこれらの高度な機能への安全なアクセスを提供しないため、攻撃者はそれらを使用して悪意のあるモジュールを作成できます。

機器とともに継承された、産業用自動化用の廃​​止された言語(Industrial Robots Programming Language、IRPL)の別の問題は、C、C ++、C#、Javaのツールと同様に、安全でないパターンのコードをチェックするためのツールがないことです。 PHPとPython。



各OEMは、ターゲットプログラムが実行される独自の言語と環境を作成します。これらの一部はリアルタイムオペレーティングシステム(RTOS)に基づいていますが、全体として標準化されていません。各IRPLのセマンティクスも一意であり、汎用プログラミング言語のセマンティクスとは大幅に異なる場合があります。文字列の操作や暗号化操作などの一部の機能は、IRPLにないか、従来の言語ほど高度ではありません。



IRPLで記述されたプログラムの脆弱性の主な原因は、次の3つの主な機能です。



  • ファイルとディレクトリの操作、
  • モジュールを動的にロードし、名前で関数を呼び出す、
  • ネットワーク機能-外部システムへのデータの送受信。


画像

IRPLで利用可能な危険な機能



身を守る方法



信頼できないデータを処理する他のソフトウェアアプリケーションと同様に、産業用自動化システムは、適切なセキュリティメカニズムを使用して設計、実装、構成、および展開する必要があります。



画像

産業用自動化の



ためのプログラムの安全性を確保するための統合された推奨事項したがって、そのようなプログラムを作成するときは、次の原則に従う必要があります。



  • 産業用ロボットをコンピューターと考え、それらのアプリケーションを非常に重要なコードと考えてください。
  • すべての通信を認証します。
  • アクセス制御ポリシーを実装します。
  • 該当する場合は常に入力検証を実装します。
  • 出力の継続的な消毒を確実にします。
  • エラーを処理するときは、不要な技術的詳細を公開しないでください。
  • 正しい構成と展開手順を作成します。
  • 産業用自動化コードの変更管理プロセスを実装します。


古いですか、それとも賢いですか?



従来のソフトウェア開発者は、安全でないプログラミングの結果と何十年にもわたって戦い、勝利を確実にするためのさまざまな技術を開発してきましたが、産業自動化の世界は、脆弱性の悪用を検出して防止する準備ができていないことが判明しました。



IT / OTコンバージェンスのペースを考えると、安全なコード開発方法を産業用自動化業界に導入することが不可欠です。そうでなければ、今後数年間で業界での事件の多くの報告がもたらされる可能性があり、これらの事件の結果はサイバースペースだけでなく物理的な世界にも現れます。



All Articles