(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-10
(54)【発明の名称】バックドア検知装置、バックドア検知方法、およびバックドア検知プログラム
(51)【国際特許分類】
G06F 21/57 20130101AFI20241003BHJP
【FI】
G06F21/57 370
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024522218
(86)(22)【出願日】2021-10-14
(85)【翻訳文提出日】2024-04-12
(86)【国際出願番号】 JP2021038007
(87)【国際公開番号】W WO2023062768
(87)【国際公開日】2023-04-20
(81)【指定国・地域】
(71)【出願人】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100080816
【氏名又は名称】加藤 朝道
(74)【代理人】
【識別番号】100098648
【氏名又は名称】内田 潔人
(72)【発明者】
【氏名】ガハテ ナクル
(72)【発明者】
【氏名】嶋田 有佑
(72)【発明者】
【氏名】鑪 講平
(57)【要約】
バックドア検知装置は、外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出する検出部と、前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出する抽出部と、脅威のレベルに基づいて前記関数操作フローに優先順位を付ける優先順位付け部とを含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出する検出部と、
前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出する抽出部と、
脅威のレベルに基づいて前記関数操作フローに優先順位を付ける優先順位付け部と、
を含むバックドア検知装置。
【請求項2】
前記優先順位付け部は、前記関数操作フローにおける、外部からの入力に依存する条件分岐に基づいて、前記関数操作フローの優先順位を付ける請求項1に記載のバックドア検知装置。
【請求項3】
前記優先順位付け部は、前記外部からの入力に依存する条件分岐の数に基づいて、前記関数操作フローの優先順位を付ける請求項2に記載のバックドア検知装置。
【請求項4】
前記優先順位付け部は、前記関数操作フローのデータに基づいて、前記関数操作フローの優先順位を付ける請求項1に記載のバックドア検知装置。
【請求項5】
前記優先順位付け部は、前記データのエントロピーに基づいて前記関数操作フローに優先順位を付ける請求項4に記載のバックドア検知装置。
【請求項6】
既知のバックドアを含むデータベースと、
前記優先される関数操作フローと既知のバックドアのデータベースとを比較する評価部と、
をさらに含む請求項1から請求項5のいずれか1項に記載のバックドア検知装置。
【請求項7】
前記関数操作フローには、外部入力を受け取り前記シンクにつながる関数呼び出しから得られる全ての変数および命令が含まれる請求項1から請求項6のいずれか1項に記載のバックドア検知装置。
【請求項8】
前記優先順位付け部が参照する、脅威のレベルごとに分類された前記シンクのリストをさらに含む請求項1から請求項7のいずれか1項に記載のバックドア検知装置。
【請求項9】
外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出し、
前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出し、
脅威のレベルに基づいて前記関数操作フローに優先順位を付けること、
を含むバックドア検知方法。
【請求項10】
外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出する検出処理と、
前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出する抽出処理と、
脅威のレベルに基づいて前記関数操作フローに優先順位を付ける優先順位付け処理と、
を含むバックドア検知プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、バックドア検知装置、バックドア検知方法、およびバックドア検知プログラムに関するものである。
【背景技術】
【0002】
企業リソースおよび情報への損害リスクを軽減するために、バックドア機能を検出する重要性が高まっている。現在のコンピュータシステムは複雑化しており、単一の企業の製品だけで構成することは難しい。そこで、外部から製品を調達し、調達した製品を組み合わせてシステムを構成することが一般的である。このサプライチェーンにおいては、バックドアの検出の重要性が高まっているため、製造者が責任を負う。
【0003】
しかしながら、ソースコードが無いファームウェアにおけるバックドアの検出では、ファームウェアの逆アセンブルおよび逆コンパイルを行い、怪しい関数群や実行パスを詳細に分析して、バックドアを手動でふるい分けをする必要があるため、大きな時間と労力を必要とする。そこで、バックドアの検出に伴う作業において、コンピュータ支援技術が求められている(例えば特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【0006】
ところで、従来技術においても、バックドアにしばしば利用される、注意して分析すべき関数とそれらを呼び出す実行パスとをプログラム中から特定することが可能であった。しかしながら、バックドアの存在に関係なく、実行パスには、ライブラリ関数やシステムコールを定義している関数がしばしば含まれている。結局、実行パスに対して最終的に人間が手動解析を行う必要があった。
【0007】
本発明の目的は、上述した課題を鑑み、セキュリティ運用者の時間的・労力的コストの最小化に寄与するバックドア検知装置、バックドア検知方法、およびバックドア検知プログラムを提供することにある。
【課題を解決するための手段】
【0008】
本発明の第1の視点では、外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出する検出部と、前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出する抽出部と、脅威のレベルに基づいて前記関数操作フローに優先順位を付ける優先順位付け部と、を含むバックドア検知装置が提供される。
【0009】
本発明の第2の視点では、外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出し、前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出し、脅威のレベルに基づいて前記関数操作フローに優先順位を付けることを含むバックドア検知方法が提供される。
【0010】
本発明の第3の視点では、外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出する検出処理と、前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出する抽出処理と、脅威のレベルに基づいて前記関数操作フローに優先順位を付ける優先順位付け処理とを含むバックドア検知プログラムが提供される。なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非一時的(non-transient)なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【0011】
本発明の各視点によれば、セキュリティ運用者の時間的・労力的コストの最小化に寄与するバックドア検知装置、バックドア検知方法、およびバックドア検知プログラムを提供することができる。
【図面の簡単な説明】
【0012】
【
図1】
図1は、バックドア検知装置を説明するための模式図である。
【
図2】
図2は、ソースおよびシンクからの実行パスを含むサブコールグラフの一例を示す図である。
【
図3】
図3は、関数操作フローを取得するプロセスの一例を示す図である
【
図4】
図4は、バックドア検知方法の概略を示すフローチャートである。
【
図5】
図5は、バックドア検知装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【0013】
以下、図面を参照しながら、本発明の実施形態について説明する。ただし、以下に説明する実施形態により本発明が限定されるものではない。また、各図面において、同一または対応する要素には適宜同一の符号を付している。さらに、図面は模式的なものであり、各要素の寸法の関係、各要素の比率などは、現実のものとは異なる場合があることに留意する必要がある。図面の相互間においても、互いの寸法の関係や比率が異なる部分が含まれている場合がある。
【0014】
図1は、バックドア検知装置を説明するための模式図である。
図1に示すように、バックドア検知装置100は、検出部110と抽出部120と優先順位付け部130とを含む。
【0015】
検出部110は、プログラムの制御フローグラフからソースとシンクを検出する。ソースは外部からの入力を受け付ける関数であり、シンクはマシンに影響を与えるとみなされる所定の関数である。システム内には、システムコールやライブラリ関数など、悪意のある脅威を引き起こすことにおいて、より大きな影響を与える関数が存在する。これらを「シンク」と呼ぶ。攻撃者は外部からの入力でトリガされる関数を用いて、バックドアを起動し、悪意のある操作を行う。外部からの入力を受け入れる関数は「ソース」と呼ばれる。
【0016】
プログラムの制御フローグラフは、プログラムが実行されるときに辿る可能性のある全てのパスを表現したものである。このグラフにおいて、ノードは分岐も宛先も含まないコードの連続シーケンスを表し、あるノードを他のノードに接続する有向枝は、あるブロックから他のブロックへのジャンプターゲットを表す。制御フローグラフは通常の静的解析ツールによって得られる。
【0017】
抽出部120は、制御フローグラフから関数操作フローを抽出する。関数操作フローは、ソースからシンクに至る実行パスである。前述のように、攻撃者は通常、ソースを用いてシンクをトリガしてバックドアを起動し、悪意のある操作を実行する。抽出部120は、攻撃者が利用する可能性のある実行パスを検索する。
【0018】
優先順位付け部130は、脅威のレベルに基づいて関数操作フローに優先順位を付ける。優先順位付け部130は、完全な二分探索を実行する必要性を排除し、分析をより効率的にする。
【0019】
以下、検出部110、抽出部120、優先順位付け部130の処理について詳細に説明する。
【0020】
検出部110は、プログラムの制御フローグラフからソースとシンクを検出する。このプロセスにおいて、検出部110は、ソース(即ち、外部からの入力を受信する関数)のリストと、シンク(即ち、システムに重大な影響を与える関数)のリストを参照してもよく、プログラムの制御フローグラフに記載された関数を検索する。以下はソースのリストとシンクのリストの例である。
【0021】
ソースのリスト
Function list: {scanf, fgets, read, vscanf, ...}
シンクのリスト
Function list: {write, execve, link, rename, ...}
【0022】
抽出部120は、制御フローグラフから関数操作フローを抽出する。まず、抽出部120は、制御フローグラフ全体のうち、ソースおよびシンクからの実行パスを含むサブコールグラフを検出する。これにより、検索空間が極めて狭くなる。
図2は、ソースおよびシンクからの実行パスを含むサブコールグラフの一例を示す図である。例えば、ソースがノード7に含まれ、シンクがノード14に含まれる場合、サブグラフはノード4、6~7、10~14から構成される。
【0023】
次に、抽出部120は、特定されたサブコールグラフ内でソースからシンクまでを検索する。実行パスが見つかった場合、抽出部120は、外部入力からの命令およびデータを含む関数操作フローを生成する。実行パスが見つからない場合、または関数テーブルに登録された関数が見つからない場合には、バックドアを通知しない。
【0024】
図3は、関数操作フローを取得するプロセスの一例を示す図である。
図3の例でも、ソースがノード7に含まれ、シンクがノード14に含まれていると仮定している。
【0025】
ソース(fgets)からの実行パスを検索する手順において、抽出部120は、ノード7内に変数操作伝播チェーンを作成する。戻り変数(varn)がノード7内の変数操作伝播チェーンに含まれる場合、その変数(varn)を呼び出し元のノード4に伝播させる。抽出部120は、戻り変数が見つからず、変数の伝播もなくなるまで、上記のステップを繰り返し続ける。
【0026】
シンク(execve)への実行パスを検索する手順において、抽出部120は、ノード14内に条件分岐伝播チェーンを作成する。シンク(execve)は分岐条件によって保護されている。次に、抽出部120は、上記のソースからの実行パスを検索する際の変数伝播チェーンに条件分岐が存在するか否かをチェックする。条件分岐が変数伝播チェーンに存在する場合、シンク関数への実行パスが見つかったことになる。
【0027】
抽出部120は、ソースおよびシンクごとに関数操作フローを検索し続ける。そして、抽出部120は、解析対象プログラムの関数操作フローのリストを取得する。関数操作フローには、外部入力を受け取り、シンクにつながる関数呼び出しから得られる全ての変数および命令が含まれる。以下は関数操作フロー(FOF)のリストの一例である。
【0028】
FOF = {
{func 7: (instruction1, data1), (instruction2, data2), ...}
{func 4: (instruction1, data1), (instruction2, data2), …}
…
{func 14: (instruction1, data1), (instruction2, data2), …}
}
【0029】
優先順位付け部130は、脅威のレベルに基づいて関数操作フローに優先順位を付ける。そのために、優先順位付け部130は以下の機能を有する。
【0030】
優先順位付け部130は、脅威のレベルに基づいてシンクを分類する。一部のシンクは、ユーザに完全な制御を許す他のシンクよりも脅威となる。優先順位付け部130が参照する、脅威のレベルに基づいて分類されたシンクのリストの一例は以下のとおりである。
【0031】
【0032】
優先順位付け部130は、各シンク関数について、関数操作フロー内の外部入力の分岐条件の数に基づいて関数操作フローに優先順位を付ける。その理由は、攻撃者は実際のデータの流れを隠すために常に複雑な分岐ルートを使用するため、より多くの外部入力の分岐条件に潜在的なバックドア情報が含まれている可能性があるためである。以下はシンク(open)に至る関数操作フロー内の外部入力に依存する分岐条件の数の例である。
【0033】
【0034】
優先順位付け部130は、各シンク関数について、それぞれの関数操作フロー内のデータのエントロピーに基づいて関数操作フローに優先順位を付ける。より高いエントロピーは、暗号化および/または圧縮されたデータの存在を示唆する。暗号化データは認証を回避するパスワードを含む可能性が非常に高く、したがってバックドアの機能を有する可能がある。
【0035】
エントロピーは次のように計算される。
E = -Σipilog2pi
ここで、piは各バイトカウントの発生確率である。関数操作フローを計算するために、関数操作フローは命令(オペコード)とデータに分類され、データは16進数バイトに変換される。以下は関数操作フロー内の命令(オペコード)とデータの例である。
【0036】
【0037】
バイトの値は0から256となり、従ってインデックス「i」は0から256の範囲となり、エントロピー値は0から8の間となる。各バイトカウントの発生確率は、式pi=ni/nTOTALによって計算される。例えば、インデックスi=4、ni=25、nTOTAL=15000の場合、各バイトカウントの発生確率はp4=25/15000となる。
【0038】
バックドア検知装置100は、優先される関数操作フローをセキュリティ運用者に通知する。この段階において、バックドア検知装置100は、既知のバックドアを含むデータベースと、優先される関数操作フローと既知のバックドアのデータベースとを比較する評価部とを含むことが好ましい。
【0039】
上記のように、バックドア検知装置100は、プログラムの制御フローグラフからソースとシンクを検出する検出部110と、制御フローグラフから関数操作フローを抽出する抽出部120と、脅威のレベルに基づいて関数操作フローに優先順位を付ける優先順位付け部130とを含み、セキュリティ運用者の時間的・労力的コストの最小化に寄与する。
【0040】
(バックドア検知方法)
図4は、バックドア検知方法の概略を示すフローチャートである。
図4に示すように、バックドア検知方法は、検出ステップ(S1)、抽出ステップ(S2)、および優先順位付けステップ(S3)を含む。
【0041】
検出ステップ(S1)において、プログラムの制御フローグラフからソースとシンクを検出する。前述の通り、ソースは外部からの入力を受け付ける関数であり、シンクはマシンに影響を与えるとみなされる所定の関数である。
【0042】
抽出ステップ(S2)において、制御フローグラフから関数操作フローを抽出する。ここで、関数操作フローは、ソースからシンクに至る実行パスである。
【0043】
優先順位付けステップ(S3)において、脅威のレベルに基づいて関数操作フローに優先順位を付ける。この優先順位付けにおいて、脅威のレベルに基づいて分類されたシンクおよび/または関数操作フローは、それらの内部の外部入力の分岐条件の数によって順序付けされ、そして/または関数操作フローは、各関数操作フロー内のデータのエントロピーに基づいて優先順位が付けられる。
【0044】
上記のように、バックドア検知方法は、検出ステップ(S1)と、抽出ステップ(S2)と、優先順位付けステップ(S3)とを含み、セキュリティ運用者の時間的・労力的コストの最小化に寄与する。
【0045】
図5は、バックドア検知装置のハードウェア構成例を示す図である。上記説明したバックドア検知装置100は、
図5に示すハードウェア構成の情報処理装置(コンピュータ)200として構成することができる。ただし、
図5に示すハードウェア構成例は、バックドア検知装置100の各機能を実現するハードウェア構成の一例であり、バックドア検知装置100のハードウェア構成を限定する趣旨ではない。バックドア検知装置100は、
図5に示さないハードウェアを含むことができる。
【0046】
図5に示すように、コンピュータ200は、例えば内部バスにより相互に接続される、CPU(Central Processing Unit)210、主記憶装置220、補助記憶装置230、および通信インターフェイスであるNIC(Network Interface Card)240を含む。
【0047】
CPU210は、バックドア検知プログラムを実行する。主記憶装置220は、例えばRAM(Random Access Memory)であり、コンピュータ200が実行するバックドア検知プログラムをCPU210が処理するために一時記憶する。
【0048】
補助記憶装置230は、例えば、HDD(Hard Disk Drive)であり、バックドア検知プログラムを中長期的に記憶しておくことが可能である。バックドア検知プログラムは、非一時的なコンピュータ可読記録媒体(non-transitory computer-readable storage medium)に記録されたコンピュータプログラムとして提供することができる。補助記憶装置230は、非一時的なコンピュータ可読記録媒体に記録されたバックドア検知プログラムを中長期的に記憶することに利用可能である。
【0049】
NIC240は、ネットワークを介して外部端末へのインターフェイスを提供する。NIC240は、接続作業を行うケーブルの先端の表面紋様や装置のホスト名やポートの画像を受信すること、または、個品識別の結果に基づいた作業支援情報を送信することなどに用いられる。
【0050】
上記のようなコンピュータ200がバックドア検知プログラムを実行することにより、コンピュータ200はバックドア検知装置100として動作し、
図4に示すバックドア検知方法を実現する。
【0051】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
[付記1]
外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出する検出部と、前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出する抽出部と、脅威のレベルに基づいて前記関数操作フローに優先順位を付ける優先順位付け部と、を含むバックドア検知装置。
[付記2]
前記優先順位付け部は、前記関数操作フローにおける、外部からの入力に依存する条件分岐に基づいて、前記関数操作フローの優先順位を決定する付記1に記載のバックドア検知装置。
[付記3]
前記優先順位付け部は、前記外部からの入力に依存する条件分岐の数に基づいて、前記関数操作フローの優先順位を決定する付記2に記載のバックドア検知装置。
[付記4]
前記優先順位付け部は、前記関数操作フローのデータに基づいて、前記関数操作フローの優先順位を決定する付記1に記載のバックドア検知装置。
[付記5]
前記優先順位付け部は、前記データのエントロピーに基づいて前記関数操作フローに優先順位を付ける付記4に記載のバックドア検知装置。
[付記6]
既知のバックドアを含むデータベースと、前記優先される関数操作フローと前記既知のバックドアのデータベースとを比較する評価部とをさらに含む付記1から付記5のいずれか1に記載のバックドア検知装置。
[付記7]
前記関数操作フローには、外部入力を受け取り前記シンクにつながる関数呼び出しから得られる全ての変数および命令が含まれる付記1から付記6のいずれか1に記載のバックドア検知装置。
[付記8]
前記優先順位付け部が参照する、脅威のレベルごとに分類された前記シンクのリストをさらに含む付記1から付記7のいずれか1に記載のバックドア検知装置。
[付記9]
外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出し、前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出し、脅威のレベルに基づいて前記関数操作フローに優先順位を付けること、を含むバックドア検知方法。
[付記10]
外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出する検出処理と、前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出する抽出処理と、脅威のレベルに基づいて前記関数操作フローに優先順位を付ける優先順位付け処理と、を含むバックドア検知プログラム。
【0052】
以上、本発明の各実施形態を説明したが、本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択(あるいは少なくとも部分的な削除を含む)が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。また、引用した上記の特許文献等の各開示は、本書に引用をもって織り込むものとする。
【符号の説明】
【0053】
100 バックドア検知装置
110 検出部
120 抽出部
130 優先順位付け部
200 情報処理装置(コンピュータ)
210 CPU(Central Processing Unit)
220 主記憶装置
230 補助記憶装置
240 NIC(Network Interface Card)
【手続補正書】
【提出日】2024-04-12
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項9
【補正方法】変更
【補正の内容】
【請求項9】
バックドア検知装置が、外部からの入力を受け付ける関数であるソースとマシンに影響を与えるとみなされる所定の関数であるシンクをプログラムの制御フローグラフから検出し、
前記バックドア検知装置が、前記ソースから前記シンクに至る実行パスである関数操作フローを前記制御フローグラフから抽出し、
前記バックドア検知装置が、脅威のレベルに基づいて前記関数操作フローに優先順位を付けること、
を含むバックドア検知方法。
【国際調査報告】