(57)【要約】  バイナリコードを難読化するシステム及び方法を開示する。一実施形態では、バイナリコードを難読化するシステムは一つ以上のプロセッサを備える。一つ以上のプロセッサは、バイナリファイルを受け取るように構成される。一つ以上のプロセッサは更に、バイナリファイルを難読化するように構成される。難読化は、バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成することに基づいてもよい。バイナリファイルと第二バイナリランダム化バイナリファイルは機能的に等価である。難読化は、バイナリファイルの機能を変更することなく、ロード時にバイナリファイルをランダム化することに基づいてもよい。
2018517965.tif 000002
【特許請求の範囲】
【請求項１】
バイナリコードを難読化するシステムであって、
一つ以上のプロセッサを備え、
当該プロセッサは、
バイナリファイルを受け取り、
前記バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成することであって、前記バイナリファイルと前記第二バイナリランダム化バイナリファイルは機能的に等価であること、及び
前記バイナリファイルの機能を変更することなく、ロード時に前記バイナリファイルをランダム化することと、
の少なくとも一つに基づいて、前記バイナリファイルを難読化するように構成されていることを特徴とするシステム。
【請求項２】
前記一つ以上のプロセッサは更に、前記バイナリファイルの複数の基本ブロックを再整列させることと、前記バイナリファイルの命令を置換することの少なくとも一つを行うように構成され、前記基本ブロックのそれぞれは転送されることなく全体として実行する、請求項１に記載のシステム。
【請求項３】
前記一つ以上のプロセッサは更に、前記バイナリファイルに関連したページテーブルをランダム化するように構成される、請求項１に記載のシステム。
【請求項４】
前記一つ以上のプロセッサは更に、ページテーブル割当てアルゴリズムを修正するように構成される、請求項３に記載のシステム。
【請求項５】
前記一つ以上のプロセッサは更に、前記バイナリファイルをミドルウェア形式に変換し、実行時に記憶位置及びアドレス情報を追加するように構成される、請求項１に記載のシステム。
【請求項６】
前記バイナリファイルは第一カーネルイメージの一部である、請求項１に記載のシステム。
【請求項７】
前記一つ以上のプロセッサは更に、前記第二バイナリランダム化バイナリファイルを備える第二バイナリランダム化カーネルイメージを生成するように構成される、請求項６に記載のシステム。
【請求項８】
前記第二バイナリランダム化カーネルイメージは仮想マシン上に展開される、請求項７に記載のシステム。
【請求項９】
前記一つ以上のプロセッサは更に、前記バイナリファイルを展開するデバイスの最初のブート時に、前記バイナリファイルをランダム化するように構成される、請求項１に記載のシステム。
【請求項１０】
バイナリコードを難読化する方法であって、
バイナリファイルを受け取ることと、
前記バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成することであって、前記バイナリファイルと前記第二バイナリランダム化バイナリファイルは機能的に等価であり、及び
前記バイナリファイルの機能を変更することなく、ロード時に前記バイナリファイルをランダム化すること、
の少なくとも一つに基づいて、前記バイナリファイルを難読化することと、
を備える方法。
【請求項１１】
更に、前記バイナリファイルの複数の基本ブロックを再整列させることと、前記バイナリファイルの命令を置換することと、の少なくとも一つを備え、前記基本ブロックのそれぞれは転送されることなく全体として実行する、請求項１０に記載の方法。
【請求項１２】
前記バイナリファイルに関連したページテーブルをランダム化することを更に備える、請求項１０に記載の方法。
【請求項１３】
ページテーブル割当てアルゴリズムを修正することを更に備える、請求項１２に記載の方法。
【請求項１４】
前記バイナリファイルをミドルウェア形式に変換し、実行時に記憶位置及びアドレス情報を追加する、請求項１０に記載の方法。
【請求項１５】
前記バイナリファイルは第一カーネルイメージの一部である、請求項１０に記載の方法。
【請求項１６】
前記第二バイナリランダム化バイナリファイルを備える第二バイナリランダム化カーネルイメージを生成することを更に備える、請求項１５に記載の方法。
【請求項１７】
前記第二バイナリランダム化カーネルイメージは仮想マシン上に展開される、請求項１６に記載の方法。
【請求項１８】
前記バイナリファイルを展開するデバイスの最初のブート時に、前記バイナリファイルをランダム化することを更に備える、請求項１０に記載の方法。
【請求項１９】
バイナリコードを難読化するコンピュータ読取り可能プログラムを格納する非一時的コンピュータ読取り可能媒体であって、
バイナリファイルを受け取るコンピュータ読取り可能命令と、
前記バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成することであって、前記バイナリファイルと前記第二バイナリランダム化バイナリファイルは機能的に等価であり、及び
前記バイナリファイルの機能を変更することなく、ロード時に前記バイナリファイルをランダム化することと、
の少なくとも一つに基づいて、前記バイナリファイルを難読化するコンピュータ読取り可能命令と、
を備える非一時的コンピュータ読取り可能媒体。
【請求項２０】
前記バイナリファイルの複数の基本ブロックを再整列させることと、前記バイナリファイルの命令を置換することの少なくとも一つを行うコンピュータ読取り可能命令を更に備え、前記基本ブロックのそれぞれは転送されることなく全体として実行する、請求項１９に記載の非一時的コンピュータ読取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、米国仮出願番号６２／１４４，０９２、出願日２０１５年４月７日、発明の名称「バイナリ及びメモリ多様性によるカーネルセキュリティ用のシステム及び方法」の優先権を主張し、ここで全体として本明細書に参照によって組み込まれる。
【０００２】
本開示のシステム及び方法は、権限のないユーザによる侵害及び不正使用から最新のオペレーティングシステムを保護する新規なシステム及び方法に関する。本開示のシステム及び方法は、多くの異なるオペレーティングシステム全体（例えば、Ｌｉｎｕｘ（登録商標）、ＵＮＩＸ（登録商標）、Ｗｉｎｄｏｗｓ）に適用されてもよい。
【背景技術】
【０００３】
一般的な問題  
オペレーティングシステムは異なる方法で攻撃され得る。例えば、オペレーティングシステム（「ＯＳ」）の複製は、数百万個の電話、数十万台の車などで同様である。ハッカーが攻撃を工夫する一つの方法は、彼らの最終的なターゲットを代表するデバイス又はソフトウェアを入手（購入、盗用、及び／又は借用）することである。そのデバイスを用いて、攻撃者は、欠点及び脆弱性を探すために、リバースエンジニアリングとして知られる手法であるデバイス上でのソフトウェア研究を行うことができる。所定の基準に適合する脆弱性が識別された場合、エクスプロイトとして脆弱性を武器化することが可能になる。エクスプロイトは、所定の目的のために脆弱性を利用するハッカーによって作成されたコードである。目的の範囲は、特権の拡大、データ流出、サービス拒否等を含む。脆弱性及びエクスプロイトの性質に依存して、エクスプロイトは、同じＯＳ及びハードウェア構成の他のデバイスに対しても有用なる可能性がある。例えば、スマートフォンの脱獄は、何者かによって見出されたエクスプロイトであり、誰もが自分のデバイス上で脱獄を実現するために使用可能なツールキットとしてユーザコミュニティによって広められる。同じ原理は、サーバＯＳ、ＳＣＡＤＡ装置の組込み型ＯＳ等にも当てはまり、つまり、一つのデバイス上での攻撃を見出し、同様のデバイスに攻撃を課す。
【０００４】
Ｎａｔｉｏｎａｌ  Ｖｕｌｎｅｒａｂｉｌｉｔｙ  Ｄａｔａｂａｓｅによると、最近の２４ヵ月に、Ｌｉｎｕｘ（登録商標）  ＯＳ及びカーネルに２００個より多くの文書化された脆弱性があった。書換え、パッチ処理等のコストは非常に高価になる可能性がある。
仮想化及び／又はクラウドベースのオペレーティングシステムの脆弱性
【０００５】
ＯＳがベアメタル上で動作する場合、マイクロコンピュータ時代の最初の数十年でそうであったように、コンピュータ間の物理的分離に構造セキュリティがあった。クラウド環境では、ゲストＯＳの間には物理的分離も論理的分離さえもないので、このセキュリティの概念には問題がある。別個の物理的マシン上で動作したとしても、クラウドシステムは、リソースの割当て、ゲストＯＳ等を中央で管理する。コンピューティング、ネットワーキング及び決定論理の多くのレイヤがゲストＯＳのバイナリ命令と、ホストシステム上の実際の実行との間にあるので、攻撃者が攻撃の基盤として仮想化を用いる多くの機会がある。
組込みオペレーティングシステムの脆弱性
【０００６】
世界のいくつかの場所では、コンピューティングは既にある程度普及しており、低コストの組込みコンピュータに一日に数え切れないほど出くわすことがある（交通信号、輸送通信、建物の環境制御、販売時点管理システム、スマートフォン、タブレット、無線ネットワーキング、セキュリティシステム、環境データ収集、自動車制御システム、その他多数）。
【０００７】
従来、十分な処理能力及びハッキングの価値がある財政上重要性を備えた唯一のシステムは、企業及び政府のＩＴ資産であった。現在では、これらのシステムはどこにでもあり、鍵の掛かった扉の後ろにあるという保護の歴史的な積み重ねさえない。現在の組込みシステムには、いくつかの制約があり、それらは各々セキュリティ上に影響を与える。
１．システムの最終的な販売価格は低いので、わずかな金額だけハードウェアコストを低減するためにサプライチェーンを管理する。運用上のセキュリティ制御（監視、検査等）は、価格競争力を維持するために避けられるコストを製造に加える。同じコストの考え方は、セキュリティ回路を省くことによって電子回路設計に影響を与えてもよい（例えば、信頼できるプラットフォームモジュール）。攻撃者は、企業のサプライチェーン、電子部品等を操作することによって、市販品の大きな区画に自らを焼き込むことができる。
２．多数の同一の製品が製造され、それらは比較的安価に入手できる。ミニコンピュータの時代には、攻撃者には攻撃の計画を立て試験するハードウェアを入手するためにずっと困難な時期があった。
３．数十年前は、国防システムの多くの部品は完全に独自のもので特注されていた。その結果、攻撃を工夫するために、攻撃者は所定のハードウェアの一部を必要とし、そこへのアクセスは非常に警戒されていた。現在では、市販の電子回路が設計時間や試験コストを低下させるので、兵器システムにますます関わるようになっている。攻撃者は従属部品又は他の電子回路へのアクセスを容易に獲得できるため、軍事産業複合体は機密性の高いシステム内の市販のソフトウェア／ハードウェア基盤の増大に対処するツールを必要としている。これは、攻撃者が、公的に利用可能なシステムの脆弱性を攻撃することによって、システム内に深く侵入する道を見つけることを可能にする。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
バイナリコードを難読化するシステム及び方法を開示する。
【課題を解決するための手段】
【０００９】
一実施形態では、バイナリコードを難読化するシステムは一つ以上のプロセッサを備える。一つ以上のプロセッサは、バイナリファイルを受け取るように構成されてもよい。一つ以上のプロセッサは更に、バイナリファイルを難読化するように構成されてもよい。難読化は、バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成することに基づいてもよい。バイナリファイルと第二バイナリランダム化バイナリファイルは機能的に等価である。難読化は、バイナリファイルの機能を変更することなく、ロード時にバイナリファイルをランダム化することに基づいてもよい。
【００１０】
本実施形態の他の態様によると、一つ以上のプロセッサは更に、バイナリファイルの基本ブロックを再整列することと、バイナリファイルの命令を置換することの少なくとも一方を行うように構成されてもよい。基本ブロックは各々、転送なしで全体として実行できる。
【００１１】
本実施形態の他の態様によると、一つ以上のプロセッサは更に、バイナリファイルに関連したページテーブルをランダム化するように構成されてもよい。
【００１２】
本実施形態の他の態様によると、一つ以上のプロセッサは更に、ページテーブル割当てアルゴリズムを修正するように構成されてもよい。
【００１３】
本実施形態の他の態様によると、一つ以上のプロセッサは更に、バイナリファイルをミドルウェア形式に変換し、実行時に記憶場所及びアドレス情報を追加するように構成されてもよい。
【００１４】
本実施形態の他の態様によると、バイナリファイルは第一カーネルイメージの一部であってもよい。
【００１５】
本実施形態の他の態様によると、一つ以上のプロセッサは更に、第二バイナリランダム化バイナリファイルを備える第二バイナリランダム化カーネルイメージを生成するように構成されてもよい。
【００１６】
本実施形態の他の態様によると、第二バイナリランダム化カーネルイメージは仮想マシン上に展開されてもよい。
【００１７】
本実施形態の他の態様によると、一つ以上のプロセッサは更に、バイナリファイルを展開するデバイスの最初のブート時にバイナリファイルをランダム化するように構成されてもよい。
【００１８】
別の実施形態では、バイナリコードを難読化する方法を開示する。本方法によると、バイナリファイルを受け取ることができる。そのバイナリファイルを難読化できる。難読化は、バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成し、バイナリファイルと第二バイナリランダム化バイナリファイルは機能的に等価であることと、バイナリファイルの機能を変更することなく、ロード時にバイナリファイルをランダム化することの少なくとも一方に基づいてもよい。
【００１９】
更に別の実施形態では、バイナリコードを難読化するコンピュータ読取り可能プログラムを格納する非一時的コンピュータ読取り可能媒体を開示する。プログラムは、バイナリファイルを受け取るコンピュータ読取り可能命令を含んでいてもよい。プログラムは更に、バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成すること、このバイナリファイルと第二バイナリランダム化バイナリファイルは機能的に等価であり、このバイナリファイルの機能を変更することなく、ロード時にバイナリファイルをランダム化することのうちの少なくとも一つに基づいて、バイナリファイルを難読化するコンピュータ読取り可能命令を含んでいてもよい。
【００２０】
ここで、添付の図面に示したように、その特定の実施形態を参照しながら本開示を更に詳しく説明する。本開示は特定の実施形態について以降で説明されるが、当然のことながら本開示はそれらには限定されない。本明細書の開示内容へのアクセスを有する当業者は、追加の実行形態、修正形態、及び実施形態、並びに他の使用分野を認識でき、それらは、本明細書で説明される本開示の範囲内にあり、それに対して本開示は著しい有用性を有してもよい。
【００２１】
本開示のより十分な理解を促進するために、ここで添付の図面を参照するが、図面では同様の要素は同様の番号で参照される。これらの図面は、本開示を限定するものと解釈すべきではなく、ほんの一例にすぎない。
【図面の簡単な説明】
【００２２】
【図１】本開示の一実施形態に従って、基本ブロックのランダム化（例えば、基本ブロック再整列）による難読化を表す図である。
【図２】本開示の一実施形態に従って、命令置換（例えば、セマンティックコード置換）を表すブロック図である。
【図３】本開示の一例の方法に従って、バイナリコードの難読化を表す流れ図である。
【図４】本開示の一実施形態に従って、仮想サーバ展開を表すブロック図である。
【発明を実施するための形態】
【００２３】
本開示のシステム及び方法は、カーネルコードの記憶位置及びメモリ位置をランダム化することによってＯＳ用のセキュリティレイヤを生成できる。例えば、Ｌｉｎｕｘ（登録商標）カーネルの最近のコード実行エクスプロイトの約８０％は、カーネル内のポインタ及びコードアドレスへのセンシティビティを有する。コード記憶位置及びポインタの予測不可能なシフトは、エクスプロイト作成者の生産性を著しく低下させる可能性がある。攻撃者が脆弱性を攻略する方法を決定できる場合、ＯＳの有用性は非常に限定されることになる。
【００２４】
本開示のシステム又は方法が用いられる場合、ＯＳの連続的なインスタンス（次のルータ、クラウド仮想マシン等）は完全に異なるランダムな組織を有することができる。Ｌｉｎｕｘ（登録商標）カーネルが３７，０００個のファイル及び１５，０００，０００行のコードより多くを有する場合、より十分な構築ブロックが存在し、本開示によるカーネル多様性を生成するための数兆個の組合せを生成する。
【００２５】
本開示のシステム及び方法は、複数のＯＳの展開に対して静的バイナリ書換え及びメモリ難読化技術を採用することを含んでいてもよい。本開示のシステム及び方法を用いることによって、ＩＴ及び製品管理者は、所定のＯＳの任意の数の固有のバージョンを作成する能力を有することになる。これらの複製は同一に振る舞うが内部は完全に異なり、同じ画像から二つの異なるジグソーパズルを作成することに酷似している。それらは同様に見えるが、構成要素は交換可能ではない。攻撃者にとって、本開示のシステム及び方法は代替え性の仮定を著しく損なう可能性がある。
【００２６】
加えて、ＩＴ及び製品管理者は、カーネルセキュリティの専門知識を身につけることなく、これらの保護を適用する能力を有することになる。本開示のシステム及び方法は、カーネルソースコードに対する非常に限られた修正を用いて、及びアセンブリレベルにおけるカーネルのバイナリファイルの直接操作によって適用されてもよい。
カーネルバイナリのランダム化による攻略可能性の低減
【００２７】
実行コードを含むメモリ部分を難読化できることは、多数の共通攻撃機構が成功することを著しく困難にする。例えば、既知の「Ｒｅｔｕｒｎ−ｔｏ−ｌｉｂｃ」攻略技術は、大部分の処理のアドレス空間で見出される共通のシステムライブラリコードを用いて、データ実行保護（「ＤＥＰ」）等の共通の防御機構によって、既存のバッファオーバフロー機構から保護されるシステムを攻略する。本開示によると、ＯＳ自体を修正することなく、ＮＸビット等の、ＯＳワイド構成を有するこれらの同じ種類のセキュリティ保証を追加できるという点で、静的バイナリ書換えは独自性がある。
【００２８】
本開示のシステム及び方法は、ネットワーキング及び通信ハードウェア、クラウド環境、汎用組込みシステム及び従来のＩＴシステム上で遭遇する種類の環境に、静的バイナリ書換えを適用する能力を含んでいてもよい。本開示のシステム及び方法は、次の基準に適合しながらこの結果を実現してもよい。
１．セキュリティ保証を劣化させることなく、対象システム上のコンパイル済みバイナリにバイナリ書換えを適用することは、そのバイナリ又はそのバイナリの機能を変更することによって既に支持されている。
２．対象システム上のコンパイル済みバイナリにバイナリ書換えを適用することは、そのバイナリの実行時間を明らかに増大させることなく実行される。
【００２９】
多くのアルゴリズムは、アセンブリコードの閉じた形態の離散変換を実現する。二つの例は、（１）ブロック再整列と（２）命令置換である。これらを次により詳しく説明する。
【００３０】
図１は、本開示の一実施形態に従って、基本ブロックのランダム化（例えば、基本ブロック再整列）による難読化を表す図を示す。大部分のプログラムが基本ブロックの組として観察され得る。これらのブロックは、メモリ、計算値等を修正する命令シーケンスを含む。しかし、プログラムがクラッシュしないと仮定すると、ブロックは常に全体として実行される。単一の基本ブロック内のプログラムの他の部分への転送はない。基本ブロックの終了時には、プログラム制御は多くの可能な位置（記憶位置）の一つに転送されるものとする。更に、基本ブロックは、制御が複数の他の基本ブロックからそれに転送されたときのみ実行される。基本ブロックへの及びそこからの転送は、プログラム内で定義され、つまり、プログラムが使用中のライブラリ内では定義されず、通常プログラム内では静的である。従って、プログラムが実行され、メモリにロードされると、それは好ましくは同じ開始基本アドレスを有し、それらが備える基本ブロック及び機能のこれらの静的アドレスは正しい。そういう場合、コンパイルした後、プログラムの基本ブロックをシャッフルし、注意深い解析及び修正によって、このようなプログラム動作及びフローは同じのままであるが、そのメモリ内のレイアウトは劇的に変換することが可能になる。
【００３１】
図１に示したように、元のコンパイル済みバイナリプログラムＰは、連続ブロックとして基本ブロックＡ１〜Ａ４を備える機能Ａと、連続ブロックとして基本ブロックＢ１〜Ｂ５を備える機能Ｂを備える。元のコンパイル済みバイナリブログラムＰは、基本ブロック再整列を用いて、バイナリプログラムＰ’に書き換えられる。図１に示したように、元のコンパイル済みバイナリプログラムＰの場合、メモリにロードされると、基本ブロックＡ１は開始アドレス１０１を有し、基本ブロックＡ２は開始アドレス１０２を有し、基本ブロックＡ３は開始アドレス１０３を有し、基本ブロックＡ４は開始アドレス１０４を有し、基本ブロックＢ１は開始アドレス１０５を有し、基本ブロックＢ２は開始アドレス１０６を有し、基本ブロックＢ３は開始アドレス１０７を有し、基本ブロックＢ４は開始アドレス１０８を有し、基本ブロックＢ５は開始アドレス１０９を有する。プログラムＰをプログラムＰ’に書き換えた後、Ｐ’がメモリにロードされると、基本ブロックＡ１は開始アドレス１０３を有し、基本ブロックＡ２は開始アドレス１０２を有し、基本ブロックＡ３は開始アドレス１０６を有し、基本ブロックＡ４は開始アドレス１０８を有し、基本ブロックＢ１は開始アドレス１０４を有し、基本ブロックＢ２は開始アドレス１０７を有し、基本ブロックＢ３は開始アドレス１０１を有し、基本ブロックＢ４は開始アドレス１０９を有し、基本ブロックＢ５は開始アドレス１０５を有する。従って、書き換え済みのバイナリプログラムＰ’のメモリレイアウトは、元のバイナリプログラムＰのメモリレイアウトと比べて劇的に変換される。しかし、Ｐ’の機能はＰと同じ（例えば、等価な）ままである。図１に示したように、Ｐ’の動作フローはＰと同じままである。例えば、基本ブロックＡ１から基本ブロックＡ４までの動作フロー１１０はそのままであり、基本ブロックＢ３から基本ブロックＢ４までの動作フロー１１２はそのままである。いくつかの実施形態では、少なくとも一つの基本ブロックを再整列してもよい。
【００３２】
図２は、本開示に従って、命令置換（例えば、セマンティックコード置換）を表すブロック図を示す。ネットワーキング及び通信装置に含まれるハードウェア内に見出される最も基本的な縮小命令ソースコンピューティング（ＲＩＳＣ）プロセッサであっても、なお命令セットはかなり大きい。従って、一つ以上の他の命令シーケンスに置換され得る命令シーケンスが存在する。例えば、正の数を加算することは、負の数を減算することと同一であり、又は値０をレジスタに移動することは、そのレジスタとそれ自体とのビット毎のＸＯＲ演算を行うことと同一である。これらは、使用されるものの簡単な例であるが、他のものも可能である。置換命令は、プロセッサ及びシステムの状態を同一に修正し、例えば、ステータスフラグを設定するように注意しなければならない。このような変換では、プログラムの命令レベル表現を劇的に変更しながら、その機能に影響を与えないことが可能である。図２に示したように、プログラムＰ、Ｐ’及びＰ”は全て、メモリ及びプロセッサ状態に同じ変化をもたらすが、固有の命令ストリームをフィーチャする。図２に示したように、プログラムＰは、命令「ｐｕｓｈ  ｅａｘ」、「ａｄｄ  ｅｃｘ，３２」、「ｐｕｓｈ  ｅｃｘ」及び「ｃａｌｌ  ｆｕｎｃ＿Ａ」を備える。プログラムＰ’は、命令「ｓｕｂ  ｅｓｐ，４」、「ｍｏｖ［ｅｓｐ］，ｅａｘ」、「ｓｕｂ  ｅｃｘ，−３２」、「ｐｕｓｈ  ｅｃｘ」及び「ｃａｌｌ  ｆｕｎｃ＿Ａ」を備える。プログラムＰ”は、命令「ｐｕｓｈ  ｅａｘ」、「ｌｅａ  ｅｃｘ，［ｅｃｘ−３２］」、「ｐｕｓｈ  ｅｃｘ」、「ｃａｌｌ  ＄＋５」、「ａｄｄ  ［ｅｓｐ］，５」及び「ｊｍｐ  ｆｕｎｃ＿Ａ」を備える。図２に示したように、プログラムＰ、Ｐ’及びＰ”は機能的には等価であるが、コードは様々である。
【００３３】
対象のネットワークハードウェアに適用可能にするために、生成されるバイナリ書換えツールは、オペレーティングシステムコード（「ＯＳＣ」）、つまり、カーネルを書換え可能でなければならない。これは、これらのシステムによって実行される機能の大部分がカーネルによって処理されるためである。カーネル型コードの複雑性、及びこのコードは基礎をなすハードウェアと密にやり取りするという傾向のために、様々な技術的問題が生じる。例えば、間接的なファンクションコールは、呼び出される機能を決定するためにポインタ解析を必要とするアプリケーションコードよりＯＳＣ内では著しく頻繁に発生するが、これは、Ｒａｊａｇｏｐａｌａｎなどの（Ｍｏｈａｎ  Ｒａｊａｇｏｐａｌａｎ，Ｓｏｍｕ  Ｐｅｒｉａｎａｙａｇａｍ，ＨａｉＦｅｎｇ  Ｈｅ，Ｇｒｅｇｏｒｙ  Ａｎｄｒｅｗｓ，  ａｎｄ  Ｓａｕｍｙａ  Ｄｅｂｒａｙ；オペレーティングシステムカーネルのバイナリ書換え；Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｂｉｎａｒｙ  Ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ，２００６年６月）に示されている。また、あるセクションのコードに対して可能なエントリポイントを決定することは、システムコール及び割込みハンドラの存在によって複雑化され、後者は、割込みが無効にされない任意のセクションのコードで発生する可能性がある。これらの要因は、問題をより複雑にするが、正確に行われれば、侵入及び攻略のためのＯＳレベルコードハッキングの基となる敵対的試行を著しく混乱させる。
ページテーブルランダム化を利用することによる攻略可能性の低減
【００３４】
多くのアプリケーションでは、メモリを出入りする際にデータを修正又は難読化することは不可能である。コードの一部がデータをメモリに書き込む場合、そのデータへのアクセスに再び進む際、正しく同じデータを取り出すことを要求する。従って、攻撃者の観点から難読化する手段として、メモリ内のデータをシャッフルすることは実用的ではない可能性がある。しかし、アプリケーション及びＯＳは、メモリへの直接アクセスと共に動作する代わりに仮想メモリを用いる。難読化が仮想メモリレイヤに適用された場合、仮想メモリレイヤの下で実行中の敵対者は、難読化されたメモリを確認するが、その上で実行中のアプリケーションはそうではない。従って、物理メモリから直接読み込む敵対者はこれらの難読化を克服しなければならない。この種の難読化は、ページテーブルエントリを難読化することによって実現される。
【００３５】
このような状況では、ページテーブルは仮想メモリと物理メモリのアドレスの間の変換機構として機能する。
【００３６】
本開示のシステム及び方法は、ネットワーキング及び通信ハードウェア、クラウド環境、汎用組込みシステム、及び従来のＩＴシステム上で遭遇する種類の環境にページテーブルランダム化を適用する能力を含んでいてもよい。本開示のシステム及び方法は、次の利点を含んでいてもよい。
１．ＯＳのセキュリティの劣化又はその機能の変更を行うことなく、対象システムのＯＳにページテーブルランダム化を適用すること。
２．そのＯＳ上での著しく高い性能オーバヘッドを損なうことなく、対象システムのＯＳにページテーブルランダム化を適用すること。
【００３７】
最新の複数のＯＳ及びソフトウェアは、メモリの物理アドレス（つまり、バスを横切るアドレス）ではなく、仮想アドレスを介してメモリにアクセスする。これは、システム上で実行中の各プロセスがメモリの別個の始点を有することを可能にし、ページング及びメモリ保護を有効にする。別個のプロセスを持つことができないネットワークアプリケーションでさえ、これらの追加の利点のために、なお仮想アドレスを有効にすることができる。仮想アドレスと物理アドレスの間の正確なマッピングは、ページテーブル又は変換索引バッファ（「ＴＬＢ」）のいずれかに記述され、ＯＳによって構成される。本開示のシステム及び方法は、このマッピングのランダム化を実現し、バス上でリスニング中又はメモリに直接アクセス中のハードウェアトロイは、静的であるこれらのマッピングに基づくことはできない。
【００３８】
このランダム化技術は、多くのコンピュータシステムで用いられるアドレス空間レイアウトランダム化（「ＡＳＬＲ」）技術と比較される。しかし、ＡＳＬＲの場合、ＯＳは仮想アドレス空間内のどこにコード及びデータを配置するかをランダム化する一方、ページテーブルランダム化は、物理アドレス空間内のどこにコード及びデータを配置するかをランダム化する。両方の技術は、この種の再マッピングを非常に効率的に行う既存のハードウェア機能を利用する。ただし、スーパーページ（例えば、標準の４ＫＢに比べて１ＭＢ以上のページ）で用いられる場合、ページテーブルランダム化は効果がなくなるため、ソフトウェア管理されたＴＬＢを用いるプラットフォームでは非効率になる可能性がある。１ＭＢ以上のページテーブルは、二つの理由でページテーブルランダム化のセキュリティ上の利点を無効にする可能性がある。第一に、１ＭＢのページテーブルでは、はるかに多くの連続的な基本ブロックが同じ仮想ページ上に共に配置され、脆弱なコードの重要な区画が識別されると、関連のガジェットを見出すために更に解析を行う必要がなくなる可能性が増大する。第二に、４ＫＢ（４×１０３）のページテーブルサイズから１ＭＢ（１×１０６）へのジャンプは、攻撃者が解析するページテーブルが３桁少なくなることを意味する。
【００３９】
本開示のシステム及び方法は、ページテーブルの割当てアルゴリズムを修正することによって、ＦｒｅｅＢＳＤカーネル内でページテーブルランダム化防御機構を実現でき、ＯＳ又はユーザコード及びデータがメモリ内のどこに配置されるかを容易に予測することはもはや不可能になる。
【００４０】
ｘ８６プロセッサの場合、本開示のシステム又は方法は、ページテーブルランダム化に二つの方式を適用する。第一方式は、ブートプロセスの非常に早期に行われ、カーネルバイナリのデータ区画をランダム化する。これは、容易にランダム化できない数ページのデータメモリがあり、コンピュータがマルチプロセッサを有する場合、後で物理的にアドレスされるために行われる。第二方式は、カーネル内の動的メモリ割当てをランダム化することである。これには制限はないが、好ましくは、ＣＰＵ固有のヒープはあってもよく、それらの間のページ移動は高価であるので、断片化によるメモリの浪費を本開示のシステム及び方法に従って避けるために、ランダム化の量は制限され、最終的に、カーネルは、動的メモリアクセス（「ＤＭＡ」）等のために物理メモリの連続的な割当てを実行できる必要がある。
典型的な流れ図
【００４１】
図３は、本開示の一例の方法に従って、バイナリコードの難読化用の流れ図を示す。方法３００は、バイナリファイルを受け取り（３０２）、バイナリファイルを難読化する（３０４）ことを含んでいてもよい。バイナリファイルを難読化することは、バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成することであって、バイナリファイルと第二バイナリランダム化バイナリファイルは機能的に等価であり、バイナリファイルの機能を変更することなく、ロード時にバイナリファイルをランダム化することの少なくとも一つに基づいてもよい。
【００４２】
方法３００は、バイナリファイルを受け取ることを含んでいてもよい（３０２）。方法３００は、バイナリファイルを難読化することを含んでいてもよい（３０４）。以上及び以降で説明するように、バイナリファイルを難読化することは、バイナリファイルを書き換え、第二バイナリランダム化バイナリファイルを生成することであって、バイナリファイルと第二バイナリランダム化バイナリファイルは機能的に等価であり、バイナリファイルの機能を変更することなく、ロード時にバイナリファイルをランダム化することの少なくとも一つを備えていてもよい。いくつかの実施形態では、書換えは、基本ブロック再整列と命令置換の少なくとも一方に基づいていてもよい。ロード時にランダム化することは、バイナリファイルに関連したページテーブルをランダム化することを備えていてもよい。いくつかの実施形態では、バイナリファイルは、そのバイナリファイルが展開されるデバイスの最初のブート時にランダム化される。
典型的な展開ユースケース
【００４３】
次に、本開示のシステム及び方法のユースケースを表す。
クラウド／仮想化
【００４４】
クラウド展開では、ＩＴ管理者は、本開示のシステム及び方法を用いて、管理者のクラウド環境にホストされるＯＳの間に多様性を生成できる。本開示のシステム及び方法は、クラウド環境の各仮想マシンが、機能的に同一で、バイナリランダム化されたバージョンのベースＯＳイメージを有するようにできる。
【００４５】
図４は、本開示の一実施形態に従って、仮想サーバ展開を表すブロック図を示す。図４を参照すると、４００において、本開示によるプロセスを示す。この例示の目的では、対象のクラウド環境４１０は、三つの仮想マシンＶＳ１４１２、ＶＳ２４１４及びＶＳ３４１６を利用する。管理サーバ４０２上の変換機能４０６は、入力機能として未修正のカーネルイメージファイル（／ｂｏｏｔ）４０４をとる。出力は、機能的に同一の（例えば、機能的に等価な）及びバイナリランダム化カーネルイメージファイル（／ｂｏｏｔ−ｍｏｄ）４０８である。その後、クラウド環境４１０の管理構造は、／ｂｏｏｔ−ｍｏｄイメージ４０８を仮想マシンの一つ（例えば、ＶＳ１４１２）に転送できる。その後、管理サーバは変換機能４０６を用いて、別の（機能的に同一の、バイナリランダム化）イメージファイルを生成する。修正済みのカーネルは、ここでクラウド環境構造を用いて転送され、カーネルをＶＳ２４１４に転送する。プロセスは、ＶＳ３４１６に対して再び繰り返してもよい。ＶＭｗａｒｅ、Ｘｅｎ、Ａｍａｚｏｎ等によって用いられる現在の世代の仮想技術に適用する場合、管理サーバは、物理的に別個のボックスではなく、ハイパーバイザに一体化されてもよい。
スマートフォン
【００４６】
スマートフォンは、各電話用の別個のカーネルを使用する。製造時に、各電話は、それ自体の機能的に同一の、バイナリランダム化カーネルを受け取る。これを処理可能な別の方法は、電話を最初にオンしたとき、ブートローダがランダム化を処理することである。これは、共通のブートローダを配布可能であるという利点を有し、ブートされるデバイスへのハードウェアリンクを有するように、その後、ランダム化カーネルに署名を行う。いったんカーネルが保護されると、ランダム化されていないバージョンは削除される。これの欠点は、ブートローダに依存することである。しかし、ブートローダカーネル自体が本開示の方法で保護されていれば、ブートローダの侵害ははるかに困難になる。
エンタープライズエレクトロニクス
【００４７】
本開示のシステム及び方法の目的の場合、エンタープライズエレクトロニクスは、大部分のビジネスの一部であるＩＴインフラストラクチャ（ルータ、ＶＰＮボックス、セキュリティシステム等）を指す。これらのシステムは、対象データが行き来する情報ハイウェイであることが多いので、侵害する価値の高い対象となる。製造時には、各ルータ又は他のデバイスには、それ自体のカーネルの複製を移植する。もしくは、デバイスは、最初のブート時にそれ自体をランダム化する共通イメージを用いて製造できる。最初のブートアップは、デバイスが製造者を離れる前に行うことができる。
自動車、ＳＣＡＤＡ、兵器システム、モノのインターネット、汎用組込み型
【００４８】
本開示のシステムは、自動車及び輸送システム、建物の制御システム、エネルギ制御システム及びモノのインターネットを含むが、それらには限定されない環境の無数のリストで実行中の複数のＯＳのセキュリティを改善できる。
【００４９】
本開示のシステム及び方法を追加する場合、基礎となるアーキテクチャは好ましくは、命令セットアーキテクチャ（ＩＳＡ）を実行するアプリケーションプロセッサ、ランダムアクセスメモリ（ＲＡＭ）及び永続ストレージを含んでいてもよい。ＩＳＡは好ましくは、最低でも、メモリ読み書き、制御フロー（例えば、ジャンプ、リターン）及び実行時決定ベース論理といった種類の命令を含むことができる。
他の実施形態
命令セットアーキテクチャ
【００５０】
本開示のシステム及び方法は、特定の命令セットアーキテクチャのいずれにも構造的に束縛されない。特に、ｘ８６、ＡＲＭ、ＰｏｗｅｒＰＣ、Ｔｈｕｍｂ、ＭＩＰＳ上で実行中のカーネルは全て、本開示のシステム及び方法から恩恵を受けることができる。加えて、本開示のシステム及び方法は、仮想化アーキテクチャ中で実行中のカーネルにも適用できる。
デバイスファームウェア
【００５１】
攻撃者は最近、コンピュータ、電子システム、サブシステム等の永続的侵害の基盤として、修正済みのデバイスファームウェアを利用している。複数のＰＣでは、ハッカーはＢＩＯＳを侵害し、デバイス内のＯＳ、ハードドライブ及び他の全ての構成要素を置換した後でも、デバイス上での存在を密かに維持できる。最新のスマートフォン及びタブレット上のブートローダは、攻撃者がスマートフォンのＯＳへの無許可の変更をできるようにする「脱獄」の対象である。ＡＲＭのＴｒｕｓｔＺｏｎｅ及びＩｎｔｅｌのＳＧＸ等の信頼できる実行環境は、それらの安全な要素を駆動するためにマイクロカーネル又はファームウェアを利用する。本開示のシステムは、それらのカーネルのセキュリティも同様に改善できる。
【００５２】
このファームウェアは、所定の種類の性能に対して最適化したデバイス／周辺機器、アプリケーションプロセッサ又は特定用途プロセッサ上のいくつかの場所の一つで実行される。例えば、最新のネットワークインタフェースカード（「ＮＩＣ」）は内蔵型ネットワークプロセッサを利用する。このネットワークプロセッサは、ネットワークトラフィックの処理中、電気／光インタフェースに指示を行うマイクロカーネルを有する。このマイクロカーネルは、無許可の及び／又は意図せぬネットワーク挙動があるように攻撃者によって置換される。本開示のシステム及び方法は、これらのファームウェアインスタンス及びマイクロカーネルに適用され、攻撃者の画策をいっそう困難にする。
オペレーティングシステム
【００５３】
本開示のシステム及び方法は、最新の複数のＯＳの攻撃者のエクスプロイト方法を阻止できる。非包括的なリストには、Ｌｉｎｕｘ（登録商標）、ＵＮＩＸ（登録商標）（及び改変版）、Ｗｉｎｄｏｗｓ（全ての改変版）、ＱＮＸ、ＡＩＸ、ＨＰ−ＵＸがある。加えて、攻撃者を阻止するために本開示のシステム及び方法には完全なＯＳは必要とされない。ホームルータ等の多くのデバイスは、デバイスの実行の全ての面を管理する大きなアセンブリ（．ｂｉｎ）ファイルを実行する。この．ｂｉｎファイルは、コンピュータ科学的な意味ではＯＳではないが、それでも本開示のシステム及び方法から恩恵を受けることができる。．ｂｉｎを実行中のシステムは、メモリ、ストレージ及びアプリケーションプロセッサを有する。プロセッサは、算術演算、メモリ操作、制御フロー命令等を含む命令セットアーキテクチャを有する。これが、デバイスのセキュリティを改善するために、本開示のシステム及び方法にとって必要な全てのものである。
コード署名検証
【００５４】
バイナリ多様性は、コードレベルセキュリティについての多くの問題に対処することに役立つ。しかし、それは「署名済みのコード」を用いるシステムに関わる問題を発生させる。コード署名は、実行するために提示されるコードが、正しい権限によって利用可能になったコードであることを誰かが決定する暗号の根拠を提供する。各バージョンのカーネルを別個に署名し、検証器によって信任されなければならないため、最も基本的なレベルにおいて、本開示のシステムで利用されるバイナリ多様性は、コード署名にとって難問となる可能性がある。
【００５５】
いくつかの代替え形態は次のとおりであってもよい。
・機能的に同一の、バイナリランダム化カーネルを生成する際、新しいイメージのハッシュが検証器の秘密鍵によって署名される。その後、エンドユーザデバイス（スマートフォン、タブレット等）上での検証器機能は、そのハッシュが正当であることを確認できる。加えて、正しい情報が製造時に利用可能な場合、エンドユーザデバイスからの鍵識別情報（ＨＥＸＩＤ、ＥＩＮ等）を署名に含め、製造者は、そのデバイス上で実行可能なカーネルの変形形態を制限できる。
・本開示のシステム及び方法は、システム署名インフラストラクチャと一体化させ、新しいカーネルが生成される毎に、組織の秘密鍵を用いて同時に署名される。その後、署名システムからデバイス上にプリントされる組織配布及び製造システムに署名済みのイメージを移動させる。
・無線でも、更新をサポートする必要がある。現在、電話は全ての影響されるデバイスに同じ更新を配布する。この場合、各デバイスにはそれ自体のイメージが割り当てられ、各バイナリは一つのデバイスにのみ転送されるようにする。
ＴｒｕｓｔＺｏｎｅ又はハイパーバイザを用いるイントロスペクション
【００５６】
カーネルイントロスペクションは、それがなお安全な状態であるかどうかを決定するために、カーネルのメモリを探索する概念である。既存の解決策の洗練さのレベルは様々であり、ＴＩＭＡは非常に簡単なイントロスペクションを使用し、ＶＭｗａｒｅ  ｖＳｈｉｅｌｄ  Ｅｎｄｐｏｉｎｔ及びＭｃＡｆｅｅ  ＤｅｅｐＳＡＦＥはいっそう複雑である。カーネルのより良いモデリング及びこのモデルから逸脱していないことを確認することによって、ＴＩＭＡの効果を増大できる可能性がある。加えて、ＴｒｕｓｔＺｏｎｅを用いる最新型のサービス拒否保護を生成する機会もある。
制御フロー完全性
【００５７】
制御フロー完全性（「ＣＦＩ」）は、大部分の制御フロー乗っ取りを防止する強力な技術のままである。カーネルでＣＦＩを確実に実行する労力は、手書きのアセンブリ、ＤＭＡ及び非伝統的な制御フロー（例えば、割込み、システムコール）の使用によって頓挫している。これまでは、ＫＣｏＦＩ及びＣＰＩがこの問題に対する二つの最も強力な方式である。ＫＣｏＦＩは深刻な性能上の懸念があり、定着できない可能性がある。ＣＰＩは、まだ今のところカーネルには適用されていないが、研究は進行中である。ＤＭＡとの問題に対する唯一の解決策は、Ｉ／Ｏメモリ管理ユニット（ＩＯＭＭＵ）を用いることであり、それは現在、デスクトップ及びサーバ上の至る所にあるが組込み型デバイスにはない。ＣＰＩも同様にＤＭＡを処理できる可能性があるが、まだ明らかではない。本開示のシステムは、複数のＩＯＭＭＵを含むシステム及び複数のＩＯＭＭＵを含まない組込み型システムに対して、カーネルに適用される制御フロー完全性技術を含むことができる。
実行時／ロード時のバイナリ多様性
【００５８】
これまで、攻撃者は、カーネルのアドレス空間内のコードのランダム化についてそれほど心配する必要はなかった。動的にロードされるモジュールはロード時にランダム化されるが、これはカーネル自体の場合はまれである。バイナリ多様性は、バイナリ内のコードをランダム化することによってこれを変更し、各コンピュータは、攻撃者にとって異なるように見えるバイナリを有することができる。この静的ランダム化に加えて、動的ランダム化を含むようにそれを拡張することもできる。いったん解析が行われ、バイナリコードをランダム化する方法が分かると、ロード時におけるランダム化のコストは小さくなり、リブート毎に異なるコードレイアウトをもたらすことができる。本開示のシステム及び方法は、保護されたカーネルバイナリをミドルウェア形式に変換することによってバイナリランダム化解析を捕捉でき、記憶場所及びアドレス情報は実行時に加えられる。カーネル内の保護された各バイナリに対して添付のファイル内に、再配置情報を配置することもできる。本開示のシステム及び方法は、カーネルロード処理を修正する情報を含んでいてもよく、カーネルコード及びデータ記憶位置を実行時にランダム化できる。
【００５９】
加えて、情報開示脆弱性の影響を低減する方法を識別する必要性も増大している。現在、いったん攻撃者がメモリのある部分を開示できると、ＡＳＬＲによって提供される保護及び可能なバイナリ多様性は著しく損なわれる。これらの攻撃に対してバイナリ多様性を保護する一つの可能な技術は、バイナリのランダム化済みコードを列挙する試行に対して実行時防御を提供するガードページを導入することである。加えて、ガードはコード内に追加され、制御フローを難読化し、コードを列挙するより進んだ試行に対して更に防御を提供する。本開示のシステム及び方法は、ガードページを含むことによってカーネル内の情報開示脆弱性に対して保護を行う。
バイナリレベル脆弱性パッチ処理
【００６０】
本開示のシステムは、新しくランダム化されたバイナリが生成される毎にバイナリパッチを配置する能力を含む。パッチは脆弱性が識別された直後に適用され、管理者はカーネルの再構築について心配する必要はないので、この機能はシステム管理者を手助けする。
【００６１】
任意のコンピュータプログラムは、ストレージ媒体（例えば、ＣＤ−ＲＯＭ、ハードディスク又は磁気ディスク）又はデバイス（例えば、コンピュータ周辺機器）等の製造品上に格納され、それは汎用又は専用プログラム可能コンピュータによって読取り可能であり、ストレージ媒体又はデバイスがコンピュータによって読み取られると、コンピュータの構成及び操作を行い、本実施形態の機能を実行する。本実施形態又はその一部は、コンピュータプログラムと共に構成されるマシン読取り可能なストレージ媒体として実現してもよく、実行時に、コンピュータプログラム内の命令は上記で説明した実施形態の機能を実行するようにマシンを動作させる。
【００６２】
上で説明した本開示のシステム及び方法の実施形態、又はその一部は様々な用途で用いられる。本実施形態又はその一部はこの点では限定されないが、本実施形態又はその一部は、いくつかの電子部品の中で特に、マイクロコントローラ、汎用マイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、縮小命令セットコンピューティング（ＲＩＳＣ）及び複合命令セットコンピューティング（ＣＩＳＣ）内のメモリデバイスを用いて実行される。その上、上で説明した本実施形態又はその一部は、主メモリ、キャッシュメモリ又は他の種類のメモリと呼ばれる集積回路ブロックを用いて実行してもよく、それらはマイクロプロセッサによって実行される電子命令を格納するか、又は算術演算で用いられるデータを格納する。
【００６３】
本説明は、任意のコンピューティング又は処理環境に適用可能である。本実施形態又はその一部は、ハードウェア、ソフトウェア又はその二つの組合せで実行される。例えば、本実施形態又はその一部は、一つ以上のプログラム可能ロジック（例えば、ＡＳＩＣ）、論理ゲート、プロセッサ及びメモリ等の回路を用いて実行される。
【００６４】
開示された実施形態に対する様々な修正形態は当業者には明らかであり、以降で述べられる一般的な原理は他の実施形態及び用途に適用してもよい。従って、本開示は、本明細書で示され説明された実施形態には限定されないものとする。
【００６５】
本開示は、本明細書で説明した特定の実施形態によって範囲を限定されないものとする。実際、本明細書で説明したものに加えて、本開示の他の様々な実施形態及びそれに対する修正形態は、以上の説明及び添付の図面から当業者には明らかである。従って、このような他の実施形態及び修正形態は、本開示の範囲内にあるものとする。更に、本開示は、少なくとも一つの特定の目的に対して少なくとも一つの特定の環境の少なくとも一つの特定の実行形態の状況で本明細書では説明してきたが、当業者には明らかなように、その有用性はそれには限定されず、本開示は、任意の数の目的に対して任意の数の環境で好ましくは実行される。従って、以降に述べられる請求項は、本明細書で説明したように本開示の十分な幅及び精神を考慮して解釈されるべきである。
【図１】
2018517965.tif 000003
【図２】
2018517965.tif 000004
【図３】
2018517965.tif 000005
【図４】
2018517965.tif 000006
【国際調査報告】
2018517965.tif 000007