【Windows CEの詳細】Part4 稼働中のWindows CEベースのヒューマン・マシン・インターフェース(HMI)に対する脆弱性調査

本記事は、Windows CE 調査シリーズの最終回となります。Part1では、Windows CE アプリケーションの構築方法やデバッグ方法を紹介し、Part2(英語)ではWindows CE のデバッグ構造の解析を、そしてPart3(英語)ではクラロティの専門分析チームTeam82 のオープンソースデバッガーの紹介を紹介しました。

本記事では、クラロティのデバッガーツールを用いて実施した脆弱性調査と、本プロジェクトを通じて得た知見について解説します。

ご紹介する調査は、「C-more HMI デバイス」を対象に行われました。C-more HMI は、PLC(プログラマブル・ロジック・コントローラ)などのプロセス制御デバイスと連携するためのグラフィカル・インターフェースです。C-more HMI は日本のメーカーであるJTEKTグループが製造し、AutomationDirectが販売しています。

 

HMI(ヒューマン・マシン・インターフェース)とは?

HMIは、産業用プロセスの監視やエンジニアによる設備管理を可能にするために使用される、重要インフラ向けの産業用パネルです。これらのデバイスは、ほぼあらゆる種類の運用環境に組み込まれており、通常は産業ネットワーク内でネットワークアクセスが可能になっています。

HMIデバイスを使用した一般的な産業環境
HMIデバイスを使用した一般的な産業環境

AutomationDirect の C-more HMI プラットフォームは、産業用制御およびオートメーション向けに設計されたHMI製品のラインです。C-more HMI は、機械やプロセスの監視・制御・操作を行うために、オペレーター向けにカスタマイズ可能なインターフェースを提供します。これらの HMI は、AutomationDirect 製の PLC に加え、幅広い他社製コントローラーとも互換性があります。また、イーサーネット、シリアル、USB 接続にも対応しています。

C-more HMI は Windows CE をベースにした組込みシステムであり、新たに開発したデバッガーユーティリティの実地テストに最適な対象となります。

ターゲットデバイス オートメーションダイレクト C-More HMI

C-more HMIデバイス
C-more HMIデバイス

Censys や Shodan といったインターネット検索エンジンを使用して、クラロティのTeam82は、インターネット上にウェブサービスが公開されている C-more HMI パネルのインスタンスをおよそ 330 件特定することに成功しました。以下のクエリを用いて調査を行いました。

インターネットで公開されている C-More HMI の Shodan クエリ結果
インターネットで公開されている C-More HMI の Shodan クエリ結果

これらのデバイスにはオンラインでアクセスが可能で、通常は HMI 内のコンテンツプレビューが表示されます。

オンラインでアクセス可能なC-more HMIパネルの画像
オンラインでアクセス可能なC-more HMIパネルの画像

C-moreファームウェアの展開

クラロティのTeam82は、ベンダーのサイトから C-more プログラミングソフトウェアをインストールすることで、デバイスのファームウェアイメージを取得することに成功しました。このソフトウェア内に、以下のパスにファームウェアが格納されているのを確認しました:

%Installation-Directory%\C_more_EA9_v6\Firmware\EA...eas9

binwalk を使ってファームウェアイメージからファイルシステムを抽出しようとした単純な試みは失敗しましたが、これはファームウェアが独自形式でパッキングされており、binwalk がその構造を完全には解析できなかったためです。

この問題を克服するために、ファームウェアを hex エディタで開き、ファームウェアイメージの形式を解析し始めました。解析自体は比較的簡単で、シンプルな Python スクリプトを使って、ファームウェア内に格納されていたファイルシステムの抽出に成功しました。

extractor.pyスクリプトは、ファームウェアからファイルシステムを抽出するために使用されます
extractor.pyスクリプトは、ファームウェアからファイルシステムを抽出するために使用されます

WSFTP.exe C-More HMI の FTP サーバー

C-more HMI プラットフォームのファームウェアイメージから抽出したファイルシステムを調査していると、さまざまな構成ファイルや実行ファイルが含まれていることが分かりました。その中で特に目を引いたのが、WSFTP.exe という実行ファイルです。

名前のとおり、これは C-more HMI がオペレーターの利便性のために提供している FTP サーバー です。興味深いことに、このサービスをインターネット上で公開している HMI デバイスがどれほどあるのかを調査したところ、多数のデバイスがこのサービスを外部に公開していることが判明しました。これはつまり、もしこのアプリケーションに脆弱性が見つかれば、産業施設で実際に稼働中のシステムに重大な脅威を与える可能性があることを意味します。

そこで私たちは、この実行ファイルの解析に踏み込み、アプリケーションのコード実行をリモートから変更可能にする重大なセキュリティ問題を発見しました。

古いバグは存在する: スタックバッファオーバーフロー

この FTP アプリケーション内のセキュリティ上の問題を探る中で、認証されていない攻撃者が制御するワイド文字列を、スタック上のメモリバッファにコピーする関数を発見しました。

この関数には、悪意ある入力によって引き起こされるメモリ破壊を防ぐための境界チェック処理が不十分であり、これによりスタックバッファオーバーフローが発生する可能性があることが分かりました。

攻撃者が制御可能な入力を、スタック上のメモリバッファに対して、安全でないワイド文字列コピーで書き込む処理
攻撃者が制御可能な入力を、スタック上のメモリバッファに対して、安全でないワイド文字列コピーで書き込む処理

安全でないメモリコピーを行う脆弱な処理は、TG_widechars_copy という関数内にあり、この関数は複数の FTP コマンド処理メソッドから呼び出されます。そのうちのひとつが、TG_TYPE_cmd というコマンド処理関数です。

この TG_TYPE_cmd 関数は、FTP サーバーに対して TYPE コマンドを送信することでアクセス可能であり、サーバーへの認証を必要としません。つまり、未認証の攻撃者でもこの脆弱な処理に到達可能であるということです。

TYPE コマンドの処理関数: 古典的なスタックベースのバッファオーバーフロー
TYPE コマンドの処理関数: 古典的なスタックベースのバッファオーバーフロー

この安全でないメソッドに関する知見をベースに調査を進めたところ、攻撃者が制御する入力が、スタック上にある宛先バッファの境界を考慮せずにコピーされていることがわかりました。

これは、まさに古典的なスタックベースのバッファオーバーフロー脆弱性であり、PoC(概念実証)エクスプロイトの開発を試みる価値があることを意味します。

この問題を確認するために、私たちはアプリケーションがクラッシュするかどうかを確かめるべく、シンプルな入力を用いて FTP サーバーの動作をテストしました。

FTP サーバプロセスをクラッシュさせる脆弱性のテスト
FTP サーバプロセスをクラッシュさせる脆弱性のテスト
プログラムがクラッシュする: アプリケーションエラーのポップアップウィンドウ
プログラムがクラッシュする: アプリケーションエラーのポップアップウィンドウ

この問題がアプリケーション内に実際に存在することを確認するために、独自開発の Windows CE デバッガーを用いた動的解析を行い、脆弱性を悪用するための PoC(概念実証)を開発しました。

このアプリケーションの動的解析中に判明したのは、この脆弱性を利用することで、TYPE コマンドのペイロードに含まれる攻撃者制御のデータを使って、レジスタ r4、r5、そして pc(プログラムカウンタ)を上書き可能であるという点です。

明らかになった点のひとつは、攻撃者の入力からワイド文字列(wide-char)としてエンコードされた内容がスタックにコピーされているという事実でした。つまり、シンプルなペイロードでは完全に上書きができず、レジスタの一部がヌルバイトで埋められてしまっていたのです。とはいえ、この小さな障害は克服することができました。

そのキーとなった考え方は、ワイド文字エンコーディングはASCII範囲に限定されず、絵文字など他の種類の記号も表現できるという事実です。

そこでクラロティのTeam82は、「有効なアドレスを構成できる記号が存在するはずだ」と仮定しました。この仮定を検証するために、エクスプロイトチェーン内で使用可能な有効なアドレスを構成し得る文字の範囲を列挙した変換テーブルを作成しました。

Wide-char 変換列挙テーブル
Wide-char 変換列挙テーブル

作成した変換テーブルを用いることで、アプリケーションの実行時に有効なアドレスを構成できる、さまざまな有用なバイトペアを見つけることができました。これらはエクスプロイトに利用可能なものでした。

私たちのPoCでは、この発見した脆弱性を使って、PC(プログラムカウンタ)レジスタを値 0x12030 に上書きするペイロードを作成しました。

これにより、コードの実行フローを任意に変更し、アプリケーションの実行時の動作を制御できることを実証しました。

プログラムコード実行を迂回させる脆弱性のトリガー
プログラムコード実行を迂回させる脆弱性のトリガー
脆弱な関数からのリターン直前のコードで、攻撃者が制御するアドレスへジャンプする処理
脆弱な関数からのリターン直前のコードで、攻撃者が制御するアドレスへジャンプする処理

PCレジスタに加え、R4およびR5レジスタも制御可能になったことで、この強力なプリミティブを利用してコードの実行フローを自在に変更し、アプリケーション全体の制御を奪うことが可能になりました。

さらに、リターンオリエンテッドプログラミング(ROP)チェーンを用いることで、プログラムの機能を改変し、デバイス上でリモートコマンドを実行できる能力を獲得することも可能です。

この脆弱性(CVE-2024-25137)に対するPoC(概念実証)の開発と解析を完了した後、私たちのチームはこのセキュリティ問題について AutomationDirect に責任ある情報開示(Coordinated Disclosure)を行いました。同社はこの問題に対応し、C-MORE EA9 HMI のファームウェアを V6.78 に更新して修正しました。

また、CISAは、この脆弱性に関する勧告を公開し、CVE-2024-25136 および CVE-2024-25138という2件の関連脆弱性についてもあわせて通知しました。

まとめ

Windows CEアプリケーションの攻撃サーフェスに関するクラロティのTeam82の研究は、オープンソースのCEデバッガのリリースにつながりました。最終回となる今回は、Windows CEベースの産業用パネルであるC-more HMIで私たちが公表した3つの脆弱性のうちの1つに関する詳細です。

クラロティのTeam82の脆弱性調査は、デバイスのFTPサーバーであるWSFTP.exeに焦点を当て、リモート・コード実行の変更を可能にするスタック・バッファ・オーバーフローの脆弱性を発見しました。この脆弱性は、境界チェックのバイパスによる安全でないメモリコピールーチンに起因します。

 

 

◆クラロティー公式製品ページはこちらから

https://claroty.com/ja#product

◆クラロティー ニュースレタートップページに戻る

https://claroty-jp-newsroom.prezly.com/

◆ご相談やお問い合わせは、下記よりお願いします。

https://claroty.com/ja/request-a-demo

お問い合わせ先

加藤俊介

APJシニアセールスソリューションエンジニア, クラロティ

受信トレイを更新

[購読]をクリックすることで、プライバシーポリシーを読んで同意したことを確認します。

Claroty Japan Newsroomについて

このニュースルームでは日本のお客様へ向けて、プレスリリース以外の弊社最新製品情報や、イベントやセミナー登壇情報、Claroty公式HPよりブログやグローバルのケーススタディなど、クラロティのことをもっと知っていただけるよう幅広いトピックをご案内いたします。

クラロティについて

クラロティは、産業分野(製造工場やプラントにおけるOT)、ヘルスケア分野(病院におけるIoMT)、商業分野(ビル管理システムやエンタープライズIoT)にわたるサイバーフィジカルシステムの広大なネットワークであるXIoT(拡張型モノのインターネット)を保護し、組織をサポートします。当社のサイバー・フィジカル・システム保護プラットフォームは、顧客の既存のインフラストラクチャと統合して、可視性、リスクと脆弱性の管理、ネットワークのセグメンテーション、脅威の検出、および安全なリモートアクセスのためのあらゆる制御を提供します。

2015年の設立以来、ニューヨーク、テルアビブヤフォ、ロンドン、ミュンヘン、アジア太平洋地域などに拠点を構え、50カ国以上数百社の顧客に製品を提供し、8,000以上の工場・プラント、2,000以上の医療施設に導入実績があります。2021年にはシリーズD、E合計で6億4000万米ドルの資金調達を獲得し、ユニコーン企業の1社となりました。クラロティのプラットフォームは、包括的なセキュリティ管理を可能にするSaaS型のxDomeとオンプレミス型のCTD (Continuous Threat Detection)、安全なリモート接続を可能にするSRA (Secure Remote Access)、資産情報を素早く収集するEdgeの4つで構成される、統合的な産業用サイバーセキュリティソリューションです。