[レポート]stelftools: クロスアーキテクチャに対応した静的結合されたライブラリ関数の特定ツール – CODE BLUE 2023 #codeblue_jp

CODE BLUE 2023で行われた「stelftools: クロスアーキテクチャに対応した静的結合されたライブラリ関数の特定ツール」というセッションのレポートです。
2023.11.07

こんにちは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

今回はCODE BLUE 2023で行われた以下のセッションのレポートです。

stelftools: クロスアーキテクチャに対応した静的結合されたライブラリ関数の特定ツール

stelftoolsは、IoTマルウェアに静的結合されたライブラリ関数を特定するためのツールです。 多くのIoTマルウェア検体からは関数の名前やアドレスなどのシンボル情報が消去されているため、関数単位での解析が困難です。 stelftoolsでは、命令列のシグネチャマッチングや関数の依存関係や結合順を手がかりにしたシンプルな特定手法により、静的結合されたライブラリ関数を特定することで、マルウェア解析者の負担を減らします。

Presented by : 赤羽 秀 - Shu Akabane 岡本 剛 - Takeshi Okamoto 川古谷 裕平 - Yuhei Kawakoya

レポート

  • 背景
    • 高度な静的解析にはたくさんの時間がかかる
    • IoTマルウェアのために大量のシグネチャを用意するのが辛い
  • stelftoolsとは?
    • https://github.com/shuakabane/stelftools
    • 網羅的にライブラリ関数に対応
      • 高い特定精度を持つ
    • 700以上のtoolchainにサポート
      • 前処理としてライブラリ関数を特定する必要あり
    • 17のISAに対応
      • ISA = 命令セットアーキテクチャ
      • IoTには多様なISAが存在
    • 他のツールとの連携性能
      • 単体でも利用可能だが、他の静的ツール、動的ツールと連携可能。
      • 静的ツールだと下記と連携可能
        • IDA
        • Ghidra
        • radare2
  • デモ
    • CLI
      • Pattern matching(manual)
        • 見つかった関数のアドレス、関数名が表示される
        • func_ident.py
      • Brute forced toolchain indntification(manual)
        • 総当たり特定なので実行にかなり時間がかかる
        • _bruteforce-ident.py
      • Signature generation
        • ライブラリ関数の特定
        • libfunc_info_create.py
    • GUI
      • デモの結果では、バイナリの後方部分にライブラリ関数がリンクされている
      • Identification
      • Generation
    • Function Tracing
      • Call tracing in Qilling with stelftools
        • ql_stelftools.py
        • バイナリを実行して、実行内容をトレースする
        • どのような順番でバイナリが実行されているのかが分かる
        • 一度特定したバイナリ結果を取り込んで実行することも可能。これをすると実行時間を大幅に短縮出来る。
    • Unpacking & Identifying
  • stelftoolsの内部について
    • 処理の流れ
      • パターンマッチングを行い、関数名の候補リストを作る
      • 関数名の候補リストをもとに絞り込みを行い、関数を特定する
    • 短いパターンマッチでの誤マッチを防いでいる
      • 各アーキテクチャごとにXバイトの識閾を用いている
      • Branch target analytics(BTA)
        • 分岐先のアドレスが定義されていて、対象ではない分岐先アドレスは除いた上で絞り込みを行っている
    • Call-dependency filtering
      • 静的ライブラリの依存関係とマルウェアのアセンブリから見つけた呼び出しの依存関係を比較する
    • Linking order filtering
      • 上のfilteringより原始的
      • Dummy binaryと実際のマルウェアバイナリを実行し、結果を比較する
  • まとめ
    • stelftoolsは静的ライブラリに対して高い解析性能を持つツール
    • 様々なtoolchain、ISAに対応
    • stelftoolsはGitHubに公開されているため誰でも利用可能

感想

IoTマルウェアに静的結合されたライブラリ関数の特定に利用するツールの紹介セッションでした。

IoTの場合、多様なISAがあるためマルウェアの解析には膨大な作業量と時間がかかるそうです。デモの流れの順序が分かりやすく、具体的にどのように解析を進めるのかが理解出来ました。

セッション内でも紹介されていたようにstelftoolsはGitHubで公開されているので、気になった方は利用してみてはいかがでしょうか。

ちなみにstelftoolsの読みはステルフツールズ、静的なelf解析のためのツール(st-elf-tools)、という情報を開始前の運営スタッフの方が雑談で聞き出してくれました。