署名できてしまったドライバー

ほぼこもセキュリティニュース By Terilogy Worx

Windowsの実行環境はUser modeとKernel modeの2つに分割されています。
この2つの領域は論理的に分割されていますので、お互いに直接やり取りすることはできません。
この機構により、システムの安全性を確保することを目指して設計されています。

そしてKernel modeで動作させるものには署名が必要になっています。
署名されたドライバーであれば、Kernel modeで動作させることができます。
じゃぁ、署名してしまえばいいじゃないか、ということが起こってしまっています。

古いドライバーの互換性の維持を目的とした例外を悪用した取り組みです。

2つのフリーウェアがこの用途に利用されていることが確認されています。

  • HookSignTool
    これはWindows APIへのフックと正規のコード署名ツールのインポートテーブルの手動変更を組み合わせて、署名プロセス中にドライバーの署名日付を変更するドライバー署名偽造ツールです。
    GitHubで公開されています。
  • FunCertVerifyTimeValidity
    こちらも署名タイムスタンプを偽造する機能を持ちます。
    このツールはもともとはゲームの不正ソフトウェアに署名するために開発されたものと思われ、GitHubで公開されています。
    機能はHookSignToolよりも少ないのですが、こちらのツールで署名を変更した場合、その痕跡が残らないという特徴があります。

ツールだけでは目的は果たせません。
これらのツールと一緒に使用する証明書が必要です。
この部分にはなんらかの方法で盗難された証明書が使用されています。
これらの盗難された証明書は期限が切れているのですが、前述の署名偽造ツールと組み合わせて使用することで期限を巧みに変更し例外を悪用します。

この問題は根本的な対処が簡単ではないものとなっています。
現在盗難されて悪用されていることがわかっている証明書については、それをブロックするという取り組みで対応することができています。
しかし言い方を変えれば、脅威アクターがブロックされていない証明書を入手出来てしまうと、同じ手法でマルウェアに不正に署名ができて攻撃に使用することができる状態にできてしまうということになります。
入手元が確かでないものには注意する、これはやはり重要ということのようです。

参考記事(外部リンク):Old certificate, new signature: Open-source tools forge
signature timestamps on Windows drivers

blog.talosintelligence.com/old-certificate-new-signature/