卒業研究のご紹介
2020年版

情報系所属学生

静的リンクされたELFファイルのAPIトレーサーの試作

瀧澤 裕弥新潟県
情報学部情報ネットワーク・コミュニケーション学科 2020年3月卒業
上越高等学校出身

研究の目的

近年、IoT機器と呼ばれるインターネットに繋がるモノを標的とするウイルスが増加している。ウイルスによる被害の把握や検知のためには、ウイルスの仕組みや動作などの解析が不可欠である。
解析手法の1つに、APIトレースと呼ばれる手法がある。これはプログラムを実際に動作させ、その挙動を追跡する手法である。実際に動作させることから、比較的短時間でプログラムの挙動を分析することができる。しかし、IoTウイルスは従来のウイルスとはウイルスの生成方法が異なることが原因でAPIトレースを行うことが難しく、今までAPIトレースは行われてこなかった。
そのため本研究ではトレースが難しいウイルスに対してAPIトレースを行うことを目的に、トレーサーを開発した。これにより未知のウイルスの解析を効率化し、ウイルスの検知や被害の抑制へ貢献することができると考える。

研究内容や成果等

■ APIの特定手法

APIトレースを行うにあたり、トレーサーはまずプログラムが使用しているAPIの特定を行う。APIの特定にはパターンマッチング方式を採用し、マッチングエンジンのYARAを使用した。マッチングに使用するルールは、静的ライブラリlibc.aに含まれるAPIのマシン語コード列から生成する。ルール生成では、初めにlibc.aからAPIごとにAPIのコード列を読み取る。コード列にアドレス値が存在する場合、それらをワイルドカードに置換してルールを生成する。これはアドレス値がプログラムごとに異なるためである。この工程をすべてのAPIに対して行う。APIの特定には出力されたルールを用いる。ルールとの合致があれば合致したAPIの名前とアドレスの一覧を出力する。

■ トレース手法

APIを特定したら、トレーサーは出力されたAPI情報をもとにAPIの先頭命令をINT3命令に書き換える。すべてのAPIに対して書き換えが終わると、トレーサーはプログラムを実行する。これにより、APIが呼び出されるとINT3命令が実行され、デバッグ例外が発生する。トレーサーはこの例外をキャッチすることでAPIの実行を検知し、例外が発生したアドレスからAPIを識別して、API名を表示する。API名を表示したら、トレーサーはプログラムカウンタを1つ巻き戻し、書き換えた命令を元に戻す。その後ステップ実行を行い、再びAPIの先頭命令をINT3命令に書き換える。これは同じAPIが繰り返し呼び出されることを想定しているためである。

■ 試作したトレーサーの評価

試作したトレーサーが実際のウイルスに対して有効であるかテストを行った。テストではLinuxウイルスのMiraiを使用した。Miraiはソースコードが一般に公開されており、トレーサーの動作検証が容易であることと、Miraiの仕組みは多くのウイルスに流用されていることからテストケースとして採用した。テストではMiraiの起動から攻撃までをトレーサーでトレースした。図1にトレースの実行結果の一部を示す。そしてMiraiのソースコードと所得したトレースログを比較し、APIが正しくトレースできていることを確認した。またトレーサーがMiraiの動作を妨げないことを確認するため、トレースの際にWiresharkを用いて攻撃パケットをキャプチャし、攻撃が正常に行えていることも確認した。

図1  トレースの実行結果の一部

■ おわりに

本研究では静的リンクされたウイルスのAPIトレースを行うトレーサーを試作した。またMiraiを用いてテストを行い、トレーサーが実際のウイルスに対しても有効である可能性を示した。今後の課題として、Mirai以外のウイルスに対してのトレースなどが挙げられる。
指導教員からのコメント コンピュータウイルス対策研究室教授 岡本 剛
IoT機器の増加とともにこれらを標的とするコンピュータウイルスが猛威を奮っています。このようなウイルスを検知したり被害を防止したりするにはウイルスの解析技術が必要になります。ウイルスの目的や機能を解析するため、瀧澤さんはわずか7ヶ月程度でAPIトレーサーを試作し、実在するウイルスに対して有効であることを示しました。瀧澤さんの研究成果は新しい卒業研究に引き継がれ、現在もウイルス解析の重要な役割を果たしています。卒業研究で経験した様々なアイデアの試行錯誤とその成果が今後のエンジニア人生の礎になることを期待しています。
卒業研究学生からの一言 瀧澤 裕弥
大学4年間ではコンピューターサイエンスやネットワークといった様々な知識を学ぶことができました。研究活動は分からないこと、上手くいかないことの連続でしたが、試行錯誤を繰り返すなかで、問題を分析し解決策を導く「問題解決能力」を身につけることができました。また、担当教員のサポートもあり、1年間で多くのことを学ぶことができました。4年間の大学生活で得られたものは、今後社会に出ていく上でとても役に立つものだと感じています。