EN

NRIセキュア ブログ

ソフトウェアサプライチェーンのセキュリティ対策 | ソースコードに潜むバックドアの検出

目次

    blogtop

    DXの普及に伴いクラウドサービスの利用やソフトウェアのモジュール化などサービスを提供するための構成要素が分解され、様々な関連企業やOSSがシステムに関わるようになりました。近年では経済安全保障に関する意識の高まりもあり、サイバーセキュリティ上のリスクとして関連企業に起因するサプライチェーン攻撃が重要視されつつあります。

     

    ソフトウェア開発のプロセスにおいて、バックドアの埋め込みやビルド成果物のすり替えを行うソフトウェアサプライチェーン攻撃が実際に発生しています。この攻撃はソフトウェアを利用するユーザやシステムが対象となり、広範囲に影響が及ぶという特徴があります。

     

    本記事ではこのようなバックドア埋め込みを検出するための1つのアプローチとして、ソースコードからバックドアを検出するための観点について紹介します。

     

     

     

    ▶「DX時代のソフトウェア開発手法」をダウンロードする

    ソフトウェアサプライチェーンにおけるバックドアの埋め込み

    バックドアは裏口・勝手口を意味し、サイバーセキュリティにおけるバックドアは「限られた人物のみが対象システムを操作できるシステム仕様に記載されない隠された機能」を指します。

     

    開発者のみがメンテナンス目的で利用できる意図した機能として提供されるケースもあれば、再委託事業者の不正行為によってバックドアが追加されるケース、脆弱性が意図せずバックドアとして動作するケースなど様々なパターンで組み込まれる可能性があります。

    ソフトウェアサプライチェーンにおけるバックドア埋め込みのリスク図1:ソフトウェアサプライチェーンにおけるバックドア埋め込みのリスク

    バックドアの検出には、対象ソフトウェアの機能や動作仕様を把握したうえで、不適切なコードであるかを判断する必要があるため、自動化したツールのみでバックドアの有無を判断することはできません。

     

    また、バックドアの埋め込みには様々な実装方法がとられるため、観点を整理したうえでの調査が必要となります。そこで、典型的なバックドア特有の機能や振る舞いをモデル化し、それぞれの要素からバックドアを検出する観点を整理しました。

    バックドアの検出観点

    サイバーセキュリティにおけるバックドアの検出手法を述べた論文[Backdoors: Definition, Deniability & Detection]によると、バックドアの動作をモデル化すると大きく4つの要素から機能が構成されます。

     

    1. 入力ソース(Input Source)
      バックドアへ到達するための入力箇所。APIや開発者のみが知るデバッグポートなどがある。
    2. トリガー(Trigger Mechanism)
      入力がバックドアを動作させる条件に一致するかを判定する
    3. ペイロード(Payload)
      バックドアとして振る舞う機能。特権画面や任意のOSコマンドの実行などが該当する
    4. 特権状態(Privileged State)
      バックドアで提供される権限。システムの掌握を容易にするため強力な権限を付与することが多い
    バックドア内部処理の概念図バックドア内部処理の概念図

    バックドアの検出には、これらの要素を検出するための観点を整理する必要があります。バックドア関連の論文や実事例を元に整理したソースコードからバックドアを検出する観点を下記に例示します。

     

    いずれかの観点で検出された場合、詳細調査を行いバックドアのリスクがあるかを判断します。内容に応じて開発者へのヒアリングなど追加の調査を要する場合もあります。

     

    要素

    観点

    手法

    入力ソース

    Web API

    API仕様書上の記載とソースコードの差分から不要な機能を確認する

    入力ソース

    リクエストパラメータ

    仕様書上の記載とソースコードの差分から不要なパラメータを確認する

    入力ソース

    待ち受けポート

    仕様書上の記載とソースコードの差分から不要な待ち受けポートを提供する機能を確認する

    トリガー

    特別な入力値

    特別な入力値を受け取った際に分岐する処理周辺を確認する

    トリガー

    脆弱性の作りこみ

    ソースコード診断の観点で悪用可能な脆弱性を確認する

    ペイロード

    隠しコマンド実行機能

    コマンドの実行系の機能を確認し、任意のパラメータを受けつける箇所を確認する

    ペイロード

    意図しないネットワーク活動

    プライベートネットワークの探索や外部へのC&Cのビーコン通信など、対象のソフトウェアで通常利用しない不適切な通信が行われている箇所を確認する

    ペイロード

    脆弱な設定・機能の埋込

    システムのセキュリティ上重要であるパラメータをアプリケーションから変更する箇所を確認する

    特権状態

    過度な権限付与

    特権など過剰な権限が利用されている箇所を確認する

    その他

    難読化

    不自然に文字列長の長い文字列リテラルを確認する

    その他

    変更承認履歴

    変更履歴からレビュー無しでのマージ操作を確認する

    バックドア検出観点の活用

    当該観点を用いて、実際に公開されているソフトウェアに対して分析を行い仕様書に記載されない隠された機能が検出できることを検証しました。検査対象として、Fortinet社によって悪性のPythonライブラリであることが報告されているhttpxrequesterを利用しました。

     

    httpxrequesterは、HTTPクライアントライブラリであるhttpxに類似した名称であり、誤って利用されることを狙ったものと推察されます。正常に動作する場合、httpx相当のHTTPクライアントライブラリとしての動作が期待されますが、実装としてそのような機能はありませんでした。

     

    本ライブラリの悪性の動作としては大きく下記の3ステップとなります。

    httpxrequesterの動作httpxrequesterの動作

    今回紹介した観点を用いて人手による分析を行いました。それぞれの結果詳細の一部を紹介します。

    隠しコマンド実行機能

    OSコマンドの実行系の機能を確認し、任意のパラメータを受けつける箇所を確認します。OSコマンドの実行機能を含む標準ライブラリであるsubprocessモジュールを利用して、プロセスのkillを行う処理が確認できました。

     

    引数に任意文字列を含めることができる場合、任意コード実行につながります。代入している入力値を確認すると固定値が利用されているためコマンド実行ができないことがわかりますが、HTTPクライアントライブラリとしては不適切なコードと推察できます。

    意図しないネットワーク活動

    ソフトウェア外部と通信を行う処理を調査し、ソフトウェアの機能として適切な機能であるかを確認します。

    HTTPクライアントを含む標準ライブラリであるurllib.requestモジュールを利用して、外部への通信活動を行う処理が複数確認できました。

     

    ライブラリであるにもかかわらず、チャットサービスやファイル共有サービスへの固定URLが存在することからHTTPクライアントライブラリとして通常利用が想定されない機能と推察されます。

    難読化

    ランダムな長い文字列を中心に難読化された文字列がソースコードに含まれているかを確認します。

     

    ランダムな文字列長としてチャットサービスであるDiscordのURLパスを確認できました。これは難読化の観点としては誤検知といえますが、当該URLは本ライブラリとして必要のない固定URLであることから不適切なコードであると推察されます。

     

    なお当該変数(hook)は、前述の意図しないネットワーク活動に検出したリクエストで利用されるパラメータでありDiscordへの通信が行われていることがわかります。

    特別な入力値

    本観点では分岐直後の処理に不適切な処理が存在しないことを調査します。

     

    検出例として、DETECTEDという変数の結果に応じて分岐を行う処理に着目します。分岐後、対象のbrowserPathsに対して圧縮処理を行っています。この時点で本ライブラリの挙動として不適切なコードと推察され、詳細の調査を行います。

    browserPathsの値を確認すると、各ブラウザ種別においてCookieやLocalStorageなどのユーザデータやEthereumのID管理プラグインであるMetaMaskのパスをまとめて指定していることがわかります。

     

    それらのパスのそれぞれをまとめてzip圧縮することがわかり、前述の意図しないネットワーク活動にある外部送信処理と組み合わせて、ブラウザに保存された情報を奪取する流れが特定できます。

    結論

    調査結果として上記に記載したものを含め、それぞれ下記の結果となりました。

    複数の観点で隠された機能により不適切な挙動を示すコードが含まれていることを特定できました。

    観点

    確認結果

    仕様書に存在しないAPI

    -

    仕様書に存在しないリクエストパラメータ

    -

    待ち受けポート

    問題は見つかりませんでした。

    特別な入力値

    Webサイトのパスワードをローカルシステムから収集する機能が確認されました。これはバックドアの挙動ではありませんが、本ライブラリとしては意図した機能とはいえず、不適切なコードであると推察されます。

    脆弱性の作りこみ

    -

    隠しコマンド実行機能

    コマンド実行機能は、バックドアの一部ではありませんが、本ライブラリとして意図された機能とはいえず、不適切なコードであると推察されます。

    意図しないネットワーク活動

    外部への通信機能が複数存在しています。本ライブラリでの存在は適切といえますが、固定URLに対する外部への通信処理があり、不適切なコードであると推察されます。

    脆弱な設定・機能の埋込

    問題は見つかりませんでした。

    過剰な特権付与

    問題は見つかりませんでした。

    難読化

    難読化機能はありませんでしたが、当該ライブラリに通常必要のないチャットサービスへのWebhookリンクが確認されました。

    変更承認履歴

    -

     

    終わりに

    バックドア検出の観点を紹介し、実際のソフトウェアで不適切な挙動を示すコードが特定できることを検証しました。


    紹介したバックドア検出の観点は、ソースコード診断サービスで活用しています。また、紹介した観点を含めバックドア検出のサポートツール開発を進めています。

     

    ソースコード診断サービスやソフトウェアサプライチェーンのセキュリティ対策にご興味ありましたらお気軽にNRIセキュアまでご相談ください。