Log.i53

Themidaのアンパックを目指すブログ改め使い物になるえんじにゃを目指すブログ

コード難読化・アンパック系論文サーベイ

最終更新:2016/03/02
関係しそうな論文を古いものから新しいものまで発掘してアブスト訳(※ガバガバ訳)とともにここに記します.暇な時にどんどん増えます.ある程度まとめ終わったらなんとなく読みたいと思ったものを読みます.この分野の研究者ではないのでほとんど趣味です.

アンパッキングは芸術である.
それは知的な挑戦であり,リバース・エンジニアリングの分野における
最もエキサイティングなマインドゲームの一つである.
The Art of Unpacking : Mark Vincent Yason (IBM X-Force)

2003年

【難読化技術】C. Linn and S. Debray, Obfuscation of executable code to improve resistance to static disassembly (CCS ’03)

アブスト

多くのソフトウェアは実行コードの形式で配布されている.実行ファイルのリバースエンジニアリングが可能となっていれば,ソフトウェアの著作権侵害を介して知的財産の窃盗の機会を作成することに繋がる.同様に,攻撃者にアプリケーションの脆弱性が発見されることでセキュリティ侵害などに繋がる恐れもある.実行可能プログラムをリバースエンジニアリングするプロセスは一般的に,マシンコードをアセンブリコードに変換する,逆アセンブリから始まる.次に,アセンブリコードからより高いレベルの抽象度を回復することを目指す様々な逆コンパイルのステップに続く.コード難読化の作業のほどんどは,この逆コンパイルフェーズの混乱または中断に焦点を当てている.本稿では,これとは対照的に,初期の逆アセンブリフェーズに焦点を当てている.静的な逆アセンブリプロセスを破壊するために,プログラムを正常に逆アセンブリすることを困難にすることが我々の目標である.我々は2種類の広く使用されている静的逆アセンブリアルゴリズムを記述し,それらを阻止するためのテクニックについて説明する.実験結果から,我々の技術を使用して難読化された実行可能ファイルの多くの部分が正常に逆アセンブリされないことが示され,すなわちそれが我々の方式の有効性を示している.

2004年

【難読化技術,静的解析】C. Kruegel et al., Static disassembly of obfuscated binaries (USENIX Security ’04)

アブスト

アセンブリは,バイナリからプログラムのマシンコード命令のシンボリック表現を回復するプロセスである.近年,逆アセンブリプロセスを妨げるための多くの技術が提案されてきている.これらの技術は最先端の逆アセンブラに対して非常に有効であり,バイナリプログラムのかなりの部分が正しく逆アセンブリされることから防止される.しかし,これにより攻撃者が悪意あるコードを正しい逆アセンブラ出力に依存する静的解析ツール(ウイルススキャナなど)から隠蔽することができるようにもなるだろう.本稿では,難読化されたバイナリに直面した時,逆アセンブリプロセスの成功を実質的に向上させる新たなバイナリ解析技術を提示する.制御フローグラフの情報と統計的手法に基づいて,プログラムの命令の大部分は正確に識別することが可能である.我々のツールの制度と性能の評価を,いくつかの最先端の逆アセンブラの比較とともに提示する.

2005年

【難読化技術】S. K. Udupa et al., Deobfuscation: Reverse engineering obfuscated code (WCRE '05)

アブスト

近年,プロプライエタリなソフトウェアシステムの内部動作を攻撃者が理解できないようにすることでソフトウェアのセキュリティを改善するための低コストなアプローチとして,コード難読化が注目されている.本稿では,そのようなプログラムをリバースエンジニアリングするための第一歩として,難読化されたプログラムを自動解析する技術について検証する.検証の結果,静的解析の困難性を増大させるように設計されたコード難読化の多くの作用が,単純な静的および動的解析の組み合わせを使用して簡単に無効にすることが可能である.これは,ソフトウェアエンジニアリングとソフトウェアセキュリティの両方に適用可能である.ソフトウェアエンジニアリングの側面では,リバースエンジニアリングすることが困難であるように設計されたコードに対して,リバースエンジニアリングを増強するために使用することのできる動的解析の方法を示している.ソフトウェアセキュリティの側面では,コード難読化ツールのための攻撃モデルとして機能し,単純なリバースエンジニアリングに対して弾力性のある難読化技術の開発を支援することができる.

2006年

【アンパック】P. ROYAL et al., PolyUnpack: Automating the Hidden-Code Extraction of Unpack-Executing Malware (ACSAC '06)

アブスト

現代のマルウェアは多くの場合,プログラムコードの悪質な部分をコンパイル時にはデータとして扱い,実行時に実行可能なコードに変換することで隠蔽している.この難読化技術は,新規または未知のマルウェアの悪質な挙動を理解したい研究者や検出モデルや回復手法を作成したい専門家に障害をもたらしている.本稿では,この種のマルウェアに隠されたコードの本体を抽出する処理を自動化するための手法を提案する.我々のアプローチはマルウェアインスタンス内でパックまたは隠蔽されたコード配列の観察に基づいており,そのランタイム実行が静的コードモデルにと照合されたときに自己識別が実行される.我々の技術を導出する際に,マルウェアが示すアンパック実行の挙動を正式に定義し,その隠蔽コードを識別して抽出するアルゴリズムを考案する.また,実装の詳細と抽出技術の評価を提供する.数千のマルウェアバイナリで実験を行った結果,我々のアプローチがコードを隠蔽するマルウェアを解析する際に必要な時間を大幅に短縮するために使用でき,マルウェア検出ツールのパフォーマンスを向上させることを示している.

2007年

【難読化技術】I. V.Popov et al., Binary obfuscation using signals (USENIX Security ’07)

アブスト

ソフトウェアのリバースエンジニアリングは,下位レベルのプログラム表現からより高いレベルの構造と意味を回復するプロセスである.これは正当な目的(例えば,失われたソースコードの回復など)で使用することもできるが,多くの場合,知的財産を盗んだり,バイナリ内のセキュリティ上の脆弱性を検索するなどの非道な目的で使用される.バイナリプログラムをリバースエンジニアリングする最初のステップはマシンコードをアセンブリコードに逆アセンブルすることである.本稿では,マシンコードの静的な逆アセンブルと困難にすることによってバイナリのリバースエンジニアリングを難しくする問題に対処している.その出発点は実行可能バイナリプログラムである.実行可能ファイルは,その後多くのシグナル(トラップ)への制御転送に変更され,シグナルの後にダミーの制御転送と"ジャンク"命令が挿入されることで難読化される.その結果生成されたコードはまだ正しいプログラムではあるが,現在の逆アセンブラではプログラム内の命令の30~80%しか逆アセンブルすることができない.さらに,逆アセンブラは制御フローエッジの半数以上を誤って解釈している.しかしながら,難読化されたプログラムは必然的にオリジナルのものよりも実行速度が遅くなる.実験結果より,難読化の程度と実行時間の増加との間のトレードオフを定量化している.

【アンパック】L. Martignoni et al., Omniunpack: Fast, generic, and safe unpacking of malware (ACSAC '07)

アブスト

悪意あるソフトウェア(またはマルウェア)の脅威が増大する中,マルウェアの作成者は圧縮または暗号化の層で悪意あるペイロードを「パッキング」することによってシグニチャベースの検出器を簡単に回避できることを学んでいる.最先端のマルウェア検出器は,パックされたマルウェアペイロードを回復するために静的および動的な技術の両方を採用しているが,残念ながらそのような技術はそこまで有効なものではない.本論文では,OmniUnpackと呼ばれる,プログラムの実行をリアルタイムで監視して,プログラムがパッキングの様々な層を削除する挙動を検出する新しい技術を提案する.OmniUnpackは,アンパックされた悪意あるペイロードを検出器に直接提供する事によってマルウェア検出を補助する目的で利用できる.実験結果は,我々のアプローチの有効性を示している.OmniUnpackは,既知および未知のパッキングアルゴリズムの両方に対応することが可能であり,低オーバーヘッド(パックされた良性プログラムで最大11%)で導入可能である

【難読化技術】A. Moser et al., Limits of static analysis for malware detection (ACSAC '07)

アブスト

悪意あるコードはコンピューターシステムのセキュリティ脅威としてますます重要な課題となってきている.マルウェアに対する防御の伝統的なラインは,ウィルスやスパイウェアスキャナなどのマルウェア検出ツールで構成されている.残念ながら,研究者もマルウェア作者もこれらのスキャナがマルウェアを識別するためにパターンマッチングを使用しており,それは簡単な符号変換によって容易に回避できることを把握している.この欠点に対処するために,より強力なマルウェアの検出器が提案されている.これらのツールは,セマンティックシグネチャに依存し,モデル検査などの静的解析技術を採用して,検出を実行するための定理を証明している.これらのシステムは,現在のマルウェアを識別するのに非常に有用であることが示されているが,新規の検出メカニズムを考慮するようなマルウェアに対して成功するかどうかはそれほど明確になっていない.本稿の目的は,悪意あるコード検出のための静的解析の限界を探ることである.この目的のために,不透明な定数(opaque constants)のアイデアに依存するバイナリ難読化スキームを提示する.このアイデアは,分析ツールでは値を判断できないようにレジスタに定数をロードすることが根幹となっている.不透明な定数の考え方に基づいて,我々はプログラム制御フローの曖昧化,ローカル変数やグローバル変数へのアクセスの隠蔽,および,プロセッサレジスタに保持されている値の追跡を妨げる,難読化変換を構築する.我々の提案する難読化アプローチを使用して,高度なセマンティックベースのマルウェア検出器を回避できることを示す.さらに,我々の不透明な定数のプリミティブは,任意の静的コード解析器による解析を困難にする方法に適用できることが明白であり,これは静的解析技術単独では,もはや,マルウェアを識別するのには十分ではないかもしれないことを示している.

2008年

【難読化技術】M. Sharif et al., Impeding Malware Analysis using Conditional Code Obfuscation (NDSS '08)

アブスト

トリガーベースの挙動を組み込むマルウェアプログラムは,特定の入力によって条件が満たされる場合にのみ悪意ある活動を開始される.最先端のマルウェア分析器は,複数の経路探索を介するトリガーによって守られたコードを発見するために,すべてのトリガー入力が知らない場合には,シンボリック実行か強制的な条件付き実行を余儀なくされる.我々はこれらのマルウェア分析器から特定のトリガーベースの挙動を自動的に隠すマルウェアの難読化技術を提示する.我々の技術は,入力から派生するキーで入力値に条件付きで依存しているコードを暗号化して,その後プログラムからキーを削除することで,自動的にプログラムを変換する.我々はマルウェアソース・プログラムを受け取って自動的に難読化されたバイナリを生成するコンパイラレベルのツールを実装している.様々な既知のマルウェアサンプルを用いた実験により,我々のツールがトリガーベースのコードの大部分を隠蔽可能であることが示された.このマルウェア難読化技術に対処するために,現在の分析アプローチを強化するうえでの長所や短所,方法への洞察を提供している.

【アンパック】F. Guo et al., A study of the packer problem and its solutions (RAID '08)

アブスト

イン・ザ・ワイルドで配布されているマルウェアのうちパッカーでパックされたマルウェアは増加傾向にある.パッカーは入力バイナリの実行セマンティクスに影響を与えることなく外観を変換するプログラムであり,これはシグネチャベースのマルウェア検出ツールを回避することができる新しいマルウェアの亜種を作成する目的で使用できる.本稿では,シマンテックで収集されたデータに基づいて,パッカーの問題の程度と,この問題に対処する既存の解決策の有効性についての,包括的な研究の結果を報告する.その後で,パックされたバイナリ実行におけるアンパッキングの終了を検出し,その時点でプロセスイメージに対してAVスキャンを起動するように設計された,Justin(ジャスト・イン・タイムAVスキャン)と呼ばれる汎用的なアンパッキングソリューションを提示する.正確なエンド・ツー・アンパッキング検出のために,Justinには次のヒューリスティックが組み込まれている:Dirty Page Execution, Unpacker Memory Avoidance, Stack Pointer Check,および,Command-Line Argument Access.実証的実験では,選択的なパッカーのコレクションとそのパッカーに対応するマニュアルで生成されたアンパッカーのセットを含むSymPackというソリューションとJustinを比較して評価している.実験結果より,Justinの有効性は,SymPackでサポートされているパッカーによってパックされたバイナリに対してはSymPackに匹敵する性能であり,SymPackがサポートしていないパッカーによってパックされたバイナリに対してもSymPackよりはるかに優れた性能を持っていることが示された.

【難読化技術,メタモーフィック】J. Borello and L. Me, Code Obfuscation Techniques for Metamorphic Viruses (Journal of Computer Virology and Hacking Techniques, 2008)

アブスト

本論文では,メタモーフィックウイルスを取り扱う.より正確には,メタモーフィックウイルスに適用される高度なコード難読化技術の利用を調査している.我々の目的は,このような難読化技術を使用するウイルスの,信頼性の高い静的検出の難易度を評価することである.ここでは,ポリモーフィックウィルスの検出の複雑性について提示しているSpinellisの結果(IEEE Trans. Inform. Theory, 49(1), 280–284, 2003)をメタモーフィックウイルスへ拡張している.特に,メタモーフィックウイルスの特定のカテゴリの静的検出の信頼性はNP完全問題であることを証明している.その後,検出を回避するために将来的にメタモーフィックウイルスによって使用できるであろう実用的な難読化ツールを構築して,経験的にその実験結果を示している.

【アンパック】L. BOHNE ¨ , Pandora’s Bochs: Automatic Unpacking of Malware (Master’s thesis, University of Mannheim, 2008)

アブスト

本論文では今日のコンピューターシステムにもたらされる脅威を強調しており,動的および静的解析を防止する,または妨げるためにマルウェアによって使用される技術を示している.特に,ランタイム・パッキングが静的解析に与える問題を指摘し,ランタイムパックされた実行ファイルを静的解析するために,オリジナルコードを自動的にアンパックすることを目的とするソフトウェアの開発を詳述する.仮想メモリ内のオリジナルコードを抽出するため,ランタイムパックされたバイナリによって使用されるアンパッキングスタブの実行を監視することを可能にするBochs PCエミュレーターを拡張した,Pandora's Bochsと呼ばれるソリューションを提示する.これは,新しく生成されたコードの実行を検出し,監視対象プロセスの仮想アドレス空間からそれを抽出し,抽出したデータから有効なアンパックされた実行ファイルの生成を試みる.未知あるいは悪質なサンプルにおけるPandora’s Bochsの適用を評価するため,RWTH Aachenハニーネットが収集したマルウェアのセットと,アンパックの結果を既知のものと比較することができるうように悪意のないサンプルとの,合成サンプルセットを用いて評価を行う.

2009年

【アンパック】K. Coogan et al., Automatic static unpacking of malware binaries (WCRE '09)

アブスト

現在のマルウェアは,アンチウイルスソフトウェアによる検査を妨害するためにパックまたは符号化された形式で流布されている.新しいマルウェアを分析する際に,検査のためにコードをアンパックするうえで,研究者は典型的に動的コード解析技術に頼っている.残念ながら,これらの動的な技術は,"タイムボム"や"ロジックボム"はもちろん,監視防御に対抗する様々な機能の影響を受けやすく,分析を遅く退屈なものにして,分析の無効化を図っている.本稿では,このプロセスを自動化するために静的解析技術に依存する別のアプローチについて議論する.エイリアス解析はアンパックの存在を識別するために使用することができ,静的スライシングによってアンパックコードの識別が可能となる.また,制御フロー解析により動的解析の防御機構を識別して中和することが可能となる.識別されたアンパックコードはインストゥルメントされて変換され,その後でアンパックを行うために実行される.我々はカスタムまたは商用パッカーでパックされた,動的解析の防御機構の例をいくつか含んでいる,様々なマルウェアバイナリを扱うことができるワーキングプロトタイプを提示している.

【難読化技術】H. Chen et al., Control flow obfuscation with information flow tracking (MICRO '09)

アブスト

最近のマイクロアーキテクチャの研究では,プログラムの様々な特性を追跡するための追加のタグでプロセッサを強化するための様々な方式が提案されている.情報フロー追跡と呼ばれるこれらの技術は,セキュアなソフトウェア実行(テイント追跡など)や,ソフトウェアプライバシの保護,および,パフォーマンスの改善(コントロール・スペキュレーションなど)のために広く適用されてきている.本稿では,わずかなパフォーマンスへの影響でプログラムの制御フロー全体を難読化するために,情報フロー追跡を利用する新たな手法を提案する.これは,悪意あるコードインジェクションを打倒し,ソフトウェアの違法コピーを阻止し,マルウェアの分析を妨げる目的で利用できる.具体的には,我々は情報フロー追跡の2つの一般的な機能を活用する.1つはタグを自動的に伝搬するアーキテクチャサポートであり,もう1つはタグ誤用の違反処理である.攻撃(テイント追跡など)やスペキュレーションの失敗をキャッチするオラクルとしてタグを使用する他の方式とは異なり,我々は通常の制御フロー転送を隠蔽する目的で,フローセンシティブな述語としてタグを使用している.このタグは,実際の制御フロー転送の発生時に,違反ハンドラに制御フローを転送するための述語として使用される.我々は,コントロール・スペキュレーションのためのハードウェアサポートを活用することで,Itaniumベースのプロセッサベースで動作するプロトタイプを実装している.実験結果より,BOSHがSPECINT2006上で平均26.7%(4%から59%の範囲)程度のオーバヘッドで,制御フロー全体を難読化できることが示された.また,コードサイズとコンパイル時間の増加も控えめである.

【アンパック,仮想難読化】R. Rolles, Unpacking virtualization obfuscators, (WOOT '09)

i53.hatenablog.jp

【仮想難読化,動的解析】M. Sharif et al., Automatic reverse engineering of malware emulators, (IEEE S&P '09)

アブスト

最近,マルウェア作者は,自身のコードを難読化するためにエミュレーション技術を使用し始めている.これは,ネイティブマルウェアバイナリを,ランダムに生成された命令セットで記述されたバイトコードプログラムと,そのバイトコードを解釈するネイティブバイナリエミュレータのペアに変換する.既存のマルウェア解析では,この難読化技術が適用されたプログラムを確実に解析することはできない.本稿では,このマルウェアエミュレータを自動的にリバースエンジニアリングする最初の取り組みを紹介する.我々のアルゴリズムは動的解析にもとづいている.我々は,保護された環境下でエミュレートされたマルウェアを実行し,エミュレータによって生成されたx86命令のトレース全体を記録する.その後,トレース上で動的データフロー解析およびテイント解析を使用して,バイトコードプログラムを含むデータバッファを識別し,バイトコード命令セットについての構文的および意味的情報を抽出する.これらの解析の出力で,制御フローグラフのような,その後のマルウェア分析のための基盤を提供するためのデータ構造を生成することが可能となる.我々は,Rotalumeと呼ばれる概念実証システムを実装し,VMProtectやCode Virtualizerによってエミュレートされた正規のプログラムとマルウェアの両方を使用してその評価を行った.その結果,Rotalumeがエミュレートされた命令セットの構文と意味を正確に明らかにし,そのバイトコード表現から元のプログラムの実行パスを再構築できることが示された.

2010年

【アンパック,OEP検出,エントロピ】G. Jeong et al., Generic Unpacking using Entropy Analysis, (IEEE journal, 2010)

アブスト

マルウェアは様々な難読化技術を使用してAVスキャナを回避しようと試みる.パッキングはマルウェア全体の80%で使用される人気の難読化技術である.本稿では,エントロピー分析を使用してオリジナルエントリポイント(OEP)を発見する一般的なアンパックメカニズムを提案している.110のパックされた実行ファイルを使用した実験では,提案されたメカニズムがパックされた実行ファイルの72%のOEPを特定できることを示している.さらに,我々のメカニズムをパックされたマルウェアに対して適用する方法を示す.

【難読化技術】Z. Wu, S et al., Mimimorphism: A new approach to binary code obfuscation, (CCS '10)

アブスト

バイナリ難読化は,マルウェアの静的解析や検出を回避するための重要な役割を果たしている.ポリモーフィズムやメタモーフィズムのようなコード難読化技術は広く使用されており,構文ベースの検出を回避することに焦点を当てている.しかしながら,統計的検定や意味論的解析技術が,これらの検出回避の試みを阻止するために開発されてきている.より最近のバイナリ難読化技術は,統計的または意味的なアプローチのいずれかを攻撃する目的に分かれているが,その両方を攻撃するわけではない.本稿では,統計的アプローチと意味的アプローチの両方の検出を回避する可能性を持つミミモーフィズム(mimimorphism)という新たなバイナリ難読化技術を導入する.ミミモーフィック(mimimorphic)マルウェアは,統計的性質と意味特性の点で良性のプログラム高い類似性を示す擬態の実行ファイルにそのバイナリを変換する,命令構文を意識した高度な模倣機能を使用している.我々は,Intel x86プラットフォーム上でミミモーフィックエンジンのプロトタイプを実装し,統計的なアノマリ検出と意味的な分析による検出技術を回避する能力を評価する.実験の結果,擬態の実行ファイルは,制御フローフィンガープリントだけでなく,バイト頻度分布やエントロピーの面でも令制プログラムと区別できないことを示されている.

【難読化解除,コンフィッカー】H. Saıdi et al., Experiences inMalware Binary Deobfuscation (Virus Bulletin, 2010)

アブスト

マルウェア作者は,自動化されたリバースエンジニアリングおよび静的解析の努力を妨げるための回避技術を無数に採用している.最も人気のある技術は,シグネチャベースの検出システムを破りながら,元のバイナリコードを同一の機能を提供する同等のフォームへ書き換える「コード難読化ツール」を含んでいる.コード難読化技術は,一般的には現代的な商用パッカーに統合されているが,リバースエンジニアリングの視点から,難読化の解除は多くの場合,マルウェアバイナリをアンパッキングした後で,独立して行わなければならない手順である.本稿では,オリジナルのマルウェアのロジックを完全に復元することを目的として,コード難読化の影響を自動的にアンロールするための技術のセットを記述する.我々は,IDA Proという著名な逆アセンブラプラグインとして,汎用的な難読化解除のルールの設置を実装している.2009年に現れた2種類の悪名高いマルウェア,Conficker CとHydraq (オーロラ攻撃に関連したバイナリ)のインスタンスによって使用される洗練された難読化戦略をケーススタディとして使用している.その両方のインスタンスにおいて,我々の難読化解除ツールが,基礎となるコードロジックの完全な逆コンパイルを可能にしている.本研究は,Confickerワームに埋め込まれている強力に難読化されたP2Pプロトコルリバースエンジニアリングに統合的に尽力している.このプラグインは,バイナリからC言語形式のコードに変換する,マルウェアバイナリの完全なリバースエンジニアリングを提供するHexRaysデコンパイラに統合されており,SRIマルウェア脅威センターのウェブサイト上で無料でダウンロード可能である:http://www.mtc.sri.com/deobfuscation/.

【アンパック】Y. Kawakoya, M. Iwamura, and M. Itoh,Memory Behavior-Based Automatic Malware Unpacking in Stealth Debugging Environment,(Malware2010)

アブスト

最近のマルウェアはデバッガや逆アセンブラによる分析を妨害する目的でパッカーによって難読化されており,マルウェアアナリストがマルウェアを分析するためには,まずパックされた実行ファイルから隠蔽されたオリジナルコードを抽出しなければならない.隠蔽されたコードの自動抽出には,隔離された環境でマルウェアを実行して実行時の命令フェッチとライトメモリアクセスを監視して実行中に新しく生成されたコードを特定し,その後オリジナルコードの候補としてファイルに特定のメモリ領域をダンプするという,いくつかの既存研究が存在する.しかしながら,この従来の技術をイン・ザ・ワイルドマルウェアに対して適用した実験では,オリジナルコードの候補として大量のダンプファイルを出力する.したがって,オリジナルコードの真の識別はマニュアルで行わなければならない.本稿では,ダンピングポイントの前後でメモリアドレスのアクセス傾向の変化に応じて多くの候補の中から真のオリジナルコードを特定するアルゴリズムである「メモリ挙動ベースのアンパッキング」を提示する.このアルゴリズムを達成するために,我々はマルウェアの任意のアンチデバッグ関数を割り込みすることなく,プロセスのすべてのメモリアクセスを監視しデバッグするための仮想マシンモニタである,ステルスデバッガを実装している.一般的なパッカーによって難読化されたマルウェアを使用して提案システムの評価を行っている.その結果,我々の提案システムが正常にマルウェアのオリジナルコードを取得して,オリジナルエントリポイントを検出することを示している.

2011年

【仮想難読化,セマンティクス】K. Coogan et al., Deobfuscation of virtualization-obfuscated software: a semantics-based approach (CCS '11)

アブスト

新しいマルウェアが発見された時,それらを可能な限り早く研究者が分析して理解することが重要である.近年,この作業をより困難にさせる仮想難読化されたマルウェアコードが増加してきていることが研究者によって確認されている.このプログラムは,静的および動的解析技術の両方に耐性を持っているため,その理解やリバースエンジニアリングが困難となっている.これらのコードに対処するための現在のアプローチは,まずバイトコードインタプリタリバースエンジニアリングして,その後バイトコードプログラムのロジックを解くためにそれを利用するものである.このアウトサイドインなアプローチは,インタプリタの構造が知られている場合には良好な結果が得られるが,すべての場合に適用することができない.本稿では,難読化されたコードの観測可能な挙動に影響を与える命令を特定することに焦点を当て,この問題に対する異なるアプローチを提案する.このインサイドアウトなアプローチは,より少ない仮定の元で既存の技術を補完することを目的としており,自動分析の対象となる難読化プログラムの領域を広げることが可能となる.最後にプロトタイプツールを実際の悪意あるコードに適用した結果を示す.

【パッカー特定】川古谷 裕平,岩村 誠,針生 剛男,実行命令トレースに基づく動的パッカー特定手法 (CSS 2011)

アブスト

世の中のマルウェアの多くは静的解析を妨害するためパッカーと呼ばれるツールにより難読化が施されている。このようなマルウェアを解析するためには難読化を解きオリジナルコードを取り出す必要がある。難読化アルゴリズムはパッカー毎に異なるため、正確にオリジナルコードを取り出すにはパッカー毎に対応するのが望ましい。しかし、パッカーには数多くの種類が存在し、既存技術のシグネチャベースでの静的なパッカー特定手法では誤検知が多く発生し正確に特定することが難しい。そこで本論文では、隔離された環境内でマルウェアを実行し、そのマルウェアの実行する特徴的な命令列を元にパッカーを特定する動的なパッカー特定手法を提案する。パッカーを特定することにより利用されている難読化アルゴリズムを把握することができ、効率的にオリジナルコードを取り出すことが可能となる。本提案手法を 8 個の Windows に標準に含まれる実行ファイルを 10 種類のパッカーで難読化を施した 80 個の検体を元にクロスバリデーション方式で評価を行ったところすべての検体のパッカーの特定に成功した。また CCC Dataset2011の検体に対して本手法を提案した結果も併せて示す。

2012年

【仮想難読化,静的解析】J Kinder., Towards static analysis of virtualization-obfuscated binaries (WCRE '12)

アブスト(訳が意味不明なので読み終わったら修正予定です…)

仮想難読化は,保護プログラムをランダムに選択された仮想アーキテクチャのバイトーコードにコンパイルして,それに対応するインタプリタを取り付けることで,手動または自動解析からプログラムを保護する技術である.このため,仮想難読化によって保護されたプログラムで直接確認できるのはインタプリタのコードのみとなっており,静的解析はそのままでは役に立たない.本稿では,インタプリタとそのバイトコードを静的解析する上での特定の課題について説明する.計算に利用される変数は,そのロケーションのみが共通している.しかしながら,インタプリタのループは,バイトコードプログラムの異なるロケーションから無関係なデータフロー情報を組み合わせている.この情報の損失を回避する目的で,我々は仮想プログラムカウンタの値を把握するためにロケーションの追加の次元に既存の静的解析をどのように適用するかについて説明する.この静的解析は同一のバイトコードのロケーションからのみ,データフローをマージしている.我々はJAKSTAB静的解析器で実装された既存の分析にこれを適用し,仮想難読化されたバイナリを処理する上での現時点での予備的な結果を示す.

【難読化技術,技術サーベイ】 K. A. Roundy and B. P. Miller. Binary-Code Obfuscations in Prevalent Packer Tools (ACM Computing Surveys, 2012)

マルウェアの防御機構を分析する上での最初のステップは,現実世界のマルウェアバイナリに存在する難読化技術を理解することである.それらの難読化がどのように分析を妨げ,そしてそれらをどのように克服するのかを知ることが重要である.既存研究では,いくつかの難読化技術が独立して報告されているが,本調査では,実質的な深さと幅を加えながら議論を統合していく.本調査ではまた,マルウェアの防御機構を解析するために拡張されたバイナリ解析および計測ツールであるDynistを使用して,これらの難読化の有病率の相対的な定量化を行う.本調査の目的は,実世界のマルウェアの中で最も普及している難読化の解決に焦点を当てたいアナリストを奨励することである.

【パッカー検出,PEファイル】D. Devi and S. Nandi, PE File Features in Detection of Packed Executables (IJCTE)

PEファイルの特徴は,パックされた実行ファイルの検出において重要な役割を果たしている.パッキングは,任意のリバースエンジニアリング技術,アンチウイルス(AV)スキャナ,およびプログラムの類似性から実行ファイルがマルウェアか良性ソフトウェアであるかを把握するための分析を困難にする目的で,PEファイルの内部構造に多くの改変を行っている.したがって,与えられた実行ファイルが悪性か良性かを検出する前に,それがパックされたマルウェアかそうでないかを把握することは非常に重要である.パックされたバイナリであることが検出出来れば,アンパックを適用した後でAVスキャナや類似性検出プログラムの分析を適用することが可能である.本論文には,パックされたPEファイルを分析する前に,理解する必要のあるPEファイルフォーマットの簡単な説明が含まれている.我々は,UPXパッカーによりパックされた実行ファイルにのみ検討を行っており,従って,UPXパッカーの非常に分かりやすい機能についてのみ言及している.我々のアプローチは基本的には次の2つのフェーズで動作する.第一フェーズでは,PEファイルの様々な特徴を抽出し,第二フェーズでは,抽出された特徴を分析してその特徴の最良のセットを導出する.ここで導出された特徴は,UPXパッカーによってパックされているか否かを識別するために使用することが可能である.実験結果は本論文の最後に示されている.我々はUPXパッカーによってパックされた実行ファイルとそうでない実行ファイルの差分を表示するために,適切な正当性を持つ特徴セットを導出している.

2013年

【アンパック,OEP検出】R Isawa, M Kamizono, D Inoue, Generic Unpacking Method Based on Detecting Original Entry Point (Neural Information Processing, 2013)

アブスト

本稿では,一般的な手法でパックされた実行ファイルのアンパックの問題に焦点を当てる.つまり,我々はアンパックを行う為に,パックされた実行ファイルの生成に使用されるアルゴリズムについての知識を特定することは想定していない(すなわち,我々はリバースアルゴリズムの抽出/作成は行わない).一般的に,パックされた実行ファイルが起動されるとまず初めに元のプログラムのコードが再構築され,メモリ内のどこかにそれを書き溜めた後,拡張命令ポインタ(EIP)にプログラムのオリジナルエントリポイント(OEP)を割り当てることによって,オリジナルコードへ実行を遷移させる.したがって,実行フロー内の転送イベントを正確に識別する方法をもっているならば,OEPを検出することで,(OEPに達した後で残りのコードを検査することにより)分析においてオリジナルコードをより簡単に抽出することができるだろう.我々は2つの新しいOEP検出技術の組み合わせに基づいて,効果的な汎用アンパック手法を提案する.1つはアンパックプロセスに割当てられたメモリ空間に格納された情報のエントロピーの増分に依存し,もう1つは同じメモリ空間内の潜在的なWindows API呼び出しの増分検索とカウントに依存する技術である.

2014年

【その他】C. Sahin et al., How does code obfuscations impact energy usage? (ICSME '14)

アブスト

ソフトウェアの違法コピーは,アプリ開発者にとって重要な懸念事項である.このような懸念は,モバイルアプリ市場で特に関連しており,違法コピー率は90%に達する勢いである.著作権侵害を防止するためにモバイル開発者によって最も一般的な使用されるアプローチが,コード難読化である.しかしながら,現在モバイル開発者が高い関心を持っている異なる懸念事項として「エネルギー消費」の問題がある中で,難読化はエネルギー消費への影響を考慮せずに行われている.ソフトウェアの著作権侵害とバッテリ寿命の両方が重要な懸念事項であり,モバイルアプリ開発者はアプリケーションを保護することと,そのユーザのデバイスのバッテリ寿命を維持することとの間でバランスをとらなければならない.開発者のそのような選択を助けるために,我々は11のAndroidアプリケーションに対して15通りの利用シナリオを実行することによって,18種類のコード難読化によるエネルギー消費量に関する影響を実証的に調査する.実験の結果,難読化がエネルギー使用量に対して統計学的に有意な影響を有し,エネルギー使用量が減少する場合もあるが,増大させる可能性の方が高いことが示された.しかし,バッテリー寿命の観点でモバイルアプリユーザに影響を与える可能性は低いだろう.

2015年

【アンパック,セマンティクス】B. Yadegari et al., A generic approach to automatic deobfuscation of executable code (IEEE S&P '15)

アブスト

悪意のあるソフトウェアにはたいてい,分析への対抗や検出を回避する目的で難読化が施されている.新しいマルウェアに遭遇した時,コードの内部ロジックを理解して対応策を考案するためには,そのような難読化を見抜いて除去("deobfuscate")しなければならない.本論文では,難読化された実行可能コードを解読するための一般的なアプローチについて説明する.我々のアプローチは,使用される難読化の性質について仮定を行うのではなく,その代わりに難読化コードを単純化するためにセマンティクスを保存するプログラム変換を使用している.我々は,エミュレーションベースの難読化,実行時コードアンパックを行うエミュレーションベースの難読化,リターン・オリエンテッド・プログラミングを含む,異なる種類の様々な難読化に対して我々のアイデアのプロトタイプ実装を適用している.我々の実験結果は有望であり,このアプローチは従来の手法では扱うことの出来なかったThemidaなどのツールを含む,様々な難読化技術を使用して難読化されたコードから内部ロジックを抽出するのに有効であり得ることを示唆している.

【動的解析,シンボリック実行,コンコリック実行】B. Yadegari et al., Symbolic execution of obfuscated code (CCS ’15)

アブスト

シンボリックおよびコンコリック実行により,悪意あるコードの分析を含む,セキュリティ関連のプログラム解析において多くの重要なアプリケーションが発見されている.しかしながら,悪意あるコードは多くの場合難読化される傾向にあり,現在のコンコリック解析技術ではそれらの難読化に対処する上でトラブルが生じて,不正確な結果や過度なリソースの消費に繋がる恐れがある.本稿ではそのような3つの難読化について説明する.このうちの2つの技術は既にマルウェアによって使用される難読化ツールで活用されているもので,残りの1つは既存の難読化技術における単純なバリエーションである.我々は既存のシンボリック解析がそのような難読化に対しては堅牢ではないことを経験的に示し,きめ細かいビットレベルのテイント解析とアーキテクチャを意識した制約生成の組み合わせにより,問題を緩和する方法を提案する.実験結果から,我々のアプローチによって,シンボリックおよびコンコリック実行でそのような難読化を有効的に処理可能であることが示される.

2016年

【難読化技術】Pei Wang et al., Translingual Obfuscation (IEEE EuroS&P '16)

アブスト

プログラム難読化は,攻撃者がソフトウェアのプログラミング・ロジックや設計を明らかにすることを防止する重要なプログラム保護技術である.我々は特定のプログラミング言語のユニークな機能を「誤用(misusing)」することによってプログラムを曖昧にする,新しいソフトウェア難読化スキームである言語間難読化(translingual obfuscation)を導入する.言語間難読化は,プログラムの一部をそのオリジナル言語から,様々なプログラミングパラダイムや実行モデルを持つ別の言語に変換することによって,そのプログラムの複雑さを増加させ,リバースエンジニアリングを妨げる.本稿では,論理プログラミング言語であるPrologで言語間難読化の実現可能性と有効性を調査する.我々はBABELと呼ばれるツールで言語間難読化を実装した.これはC言語の関数をPrologの述語に選択的に変換することが可能である.Prolog言語の2つの重要な機能,すなわち,単一化とバックトラックを活用することで,BABELはCプログラムのデータレイアウトと制御フローの両方を難読化し,これによりリバースエンジニアリングをはるかに困難にしている.実験では,BABELが効果的かつステルス性の高いソフトウェア難読化を提供しながら,そのコストは市場で最も人気のある商用難読化ツールの1つに比べてわずかな差でしかないことを示している.BABELにより,我々は言語間難読化の実現可能性を検証し,これはソフトウェア難読化における新しい方向性の1つとして有望であると考えている.