
DigiExam監視ソフトウェアにおけるCVE-2023-33668の技術的分析と概念実証バイパス。脆弱なVM検出とネイティブモジュール整合性チェックを示しています。
DigiExamは、監視試験監督およびプロクタリングソフトウェアです。このソフトウェアは学校(または学生)のコンピューターにインストールされます。学生が試験に参加すると、DigiExamは次のことを行います:仮想マシン上で動作していないことを確認し、すべてのアプリケーションを終了させ、自身を全画面表示し、ユーザーがDigiExamウィンドウ以外に移動できないようにします。
セキュリティ検出は脆弱であり、ファイルシステム内のファイル(ユーザー所有)を単に置き換えることで簡単に回避できることが判明しています。これはDigiExam v14.0.2で動作することが確認されており、その後はテストされていません(私は試験に合格しました:))。
脆弱性:DigiExam(Electronアプリケーション)は、仮想マシン検出(およびほとんどのセキュリティ機能)をdx-secと呼ばれるネイティブモジュールに「外部委託」しています。dx-secモジュールの整合性チェックが欠如しているため、モジュールをパッチ適用されたバージョンに置き換えることができます。このパッチは、dx-sec内にある任意の機能(仮想マシン検出や、不正プロセスのホワイトリストなど)を実質的に変更できます。
初回起動時に、DigiExamアプリケーションは %localappdata%\DigiExam\app-14.0.2\resources\app.asar.unpacked\node_modules\%modulename%\build\Release\%modulename.node% にネイティブモジュールをダウンロードします。これらの .node ファイルは(file コマンドによると)PE32 executable (DLL) (GUI) Intel 80386, for MS Windows です。
Ghidraでdx-secファイルを開き、「Virtual Machine」という文字列を検索すると、多数の結果が得られ、FUN_10020370(detect_virtual_machine と改名)にたどり着きます(これにより、VM検出のために何が検査されているかがかなり興味深く明らかになります)。

detect_virtual_machine には FUN_10007ab0(detect_virtual_machine_node_handler と改名)への1つの相互参照があります。これは、Node関連のライブラリエントリポイント(メイン関数 detect_virtual_machine のコンストラクタとデストラクタ)のように見えます。

detect_virtual_machine は、即座に戻るようにパッチを適用できます。スクリーンショットの右側がパッチ適用後のバージョンです。

これにより、VM検出ロジックが完全にバイパスされます。
はじめに述べたように、DigiExamは共有学校のコンピューターにインストールされることがよくあります。VM検出ロジックにパッチを当てる代わりに、攻撃者はこれを利用して、学生が試験を受けるとすぐに任意の学生のセッションでコード実行を取得し、学生のドキュメントや情報に対してより破壊的な攻撃を仕掛ける可能性があります。永続性はDigiExamが更新されるまで続きます。