(邦訳:解析回避機能を持つマルウェアの解析手法:テイント伝播によるアプローチ)
川古谷 裕平 NTTセキュアプラットフォーム研究所 特別研究員 |
キーワード
マルウェア | 解析妨害 | データフロー解析 |
[背景]標的型攻撃などでマルウェアが高度化
[問題]マルウェアの解析妨害機能により,一般的な解析ツールでは解析不可能
[貢献]既存解析ツールの設計上の問題点の指摘,テイント伝播を利用した解決手法の提案
インターネット上でさまざまな事件や被害(インシデント)が日々おきている.これらの裏では,マルウェアと呼ばれる悪意のあるプログラムがよく利用されている.このマルウェアへの対策を生み出す手段として,マルウェア解析が行われ,マルウェアの機能や意図などを分析し,防御に活用している.
しかし,実際のマルウェアは解析されにくくするための機能,解析妨害機能を持っている.1つの例として,コード注入がある.これは,マルウェアが自身のコードの一部を正規のプロセス(たとえばexplore.exe)に注入し,そのプロセスの中で悪意のある挙動を行うものである.これにより,マルウェア自身ではなく,正規のプロセス(explore.exe)が悪意のある挙動を行っているように見えてしまい,誤検知や解析漏れが発生してしまう.
本研究では,これら解析妨害を可能にする要因として,一般的な解析ツールが持つ設計上の問題を指摘し,この問題をTarget Gap問題として定義した.Target Gap問題は,解析ツールが本来見るべきものと実際に見ているものに乖離があるといった問題である.たとえば,解析ツールはプロセス単位(PID: Process IDentifier)で挙動を監視することが多いが,あるマルウェアの動作は1つのプロセスで完結しないことがある.そのため,プロセス単位の監視では,マルウェアの挙動の一部を見逃してしまう.これは,本来見るべきもの(マルウェアのコードの実行)と実際見ているもの(マルウェアのコードを保持していると考えられるプロセスの実行)との間に乖離があるため発生しているTarget Gap問題であると言える.
このTarget Gap問題を実証するため,本研究ではStealth Loaderというプログラムローダを開発した.Stealth Loaderは,Windows APIのコードの実行(本来見るべきもの)とAPIのコードが置かれているとOSが認識しているメモリ領域の実行(実際にみているもの)のGapを利用し,解析ツールに監視されずにAPIを呼び出す手法である.実際にマルウェア解析やフォレンジックス☆1の現場で利用されている主要なツールで評価し,そのすべてのツールを回避できることを示した.
このTarget Gap問題を解決するため,テイント解析に基づく動的・静的解析手法を提案した.テイント解析とは,データフロー解析技術の1つで,テイントタグと呼ばれる属性情報を観測したいデータに対して付与する.監視対象のデータが操作されるたびに,そのテイントタグを伝播させることで,監視対象のデータの動き(フロー)を追跡する.本研究では,このテイント解析を解析対象のコード,つまりマルウェアに設定するコードテイントという新たな手法を提案した.これは,テイントタグが付いている命令を実行された場合,監視対象の命令として実行し,テイントタグがなかった場合,監視対象外として通常実行するものである.これにより,解析すべきもの(監視対象コードの実行)と実際に見ているもの(監視対象コードの実行)を一致させることができTarget Gap問題を解消できる.本手法をシステムとして実装し,実際のマルウェアのさまざまな解析妨害に対しても影響を受けることなく正確にマルウェアの挙動を観測できることを示した.
[貢献]既存解析ツールの設計上の問題点の指摘,テイント伝播を利用した解決手法の提案
インターネット上でさまざまな事件や被害(インシデント)が日々おきている.これらの裏では,マルウェアと呼ばれる悪意のあるプログラムがよく利用されている.このマルウェアへの対策を生み出す手段として,マルウェア解析が行われ,マルウェアの機能や意図などを分析し,防御に活用している.
しかし,実際のマルウェアは解析されにくくするための機能,解析妨害機能を持っている.1つの例として,コード注入がある.これは,マルウェアが自身のコードの一部を正規のプロセス(たとえばexplore.exe)に注入し,そのプロセスの中で悪意のある挙動を行うものである.これにより,マルウェア自身ではなく,正規のプロセス(explore.exe)が悪意のある挙動を行っているように見えてしまい,誤検知や解析漏れが発生してしまう.
本研究では,これら解析妨害を可能にする要因として,一般的な解析ツールが持つ設計上の問題を指摘し,この問題をTarget Gap問題として定義した.Target Gap問題は,解析ツールが本来見るべきものと実際に見ているものに乖離があるといった問題である.たとえば,解析ツールはプロセス単位(PID: Process IDentifier)で挙動を監視することが多いが,あるマルウェアの動作は1つのプロセスで完結しないことがある.そのため,プロセス単位の監視では,マルウェアの挙動の一部を見逃してしまう.これは,本来見るべきもの(マルウェアのコードの実行)と実際見ているもの(マルウェアのコードを保持していると考えられるプロセスの実行)との間に乖離があるため発生しているTarget Gap問題であると言える.
このTarget Gap問題を実証するため,本研究ではStealth Loaderというプログラムローダを開発した.Stealth Loaderは,Windows APIのコードの実行(本来見るべきもの)とAPIのコードが置かれているとOSが認識しているメモリ領域の実行(実際にみているもの)のGapを利用し,解析ツールに監視されずにAPIを呼び出す手法である.実際にマルウェア解析やフォレンジックス☆1の現場で利用されている主要なツールで評価し,そのすべてのツールを回避できることを示した.
このTarget Gap問題を解決するため,テイント解析に基づく動的・静的解析手法を提案した.テイント解析とは,データフロー解析技術の1つで,テイントタグと呼ばれる属性情報を観測したいデータに対して付与する.監視対象のデータが操作されるたびに,そのテイントタグを伝播させることで,監視対象のデータの動き(フロー)を追跡する.本研究では,このテイント解析を解析対象のコード,つまりマルウェアに設定するコードテイントという新たな手法を提案した.これは,テイントタグが付いている命令を実行された場合,監視対象の命令として実行し,テイントタグがなかった場合,監視対象外として通常実行するものである.これにより,解析すべきもの(監視対象コードの実行)と実際に見ているもの(監視対象コードの実行)を一致させることができTarget Gap問題を解消できる.本手法をシステムとして実装し,実際のマルウェアのさまざまな解析妨害に対しても影響を受けることなく正確にマルウェアの挙動を観測できることを示した.
☆1 マルウェアに感染した端末の痕跡調査

(2019年5月30日受付)