拡張頭蓋 | Extended Cranium

もしかすると誰かの役に立つかもしれないことを書き留めておく

2018-02-06 セキュリティニュースまとめ: X.509 デジタル証明書を秘密の通信路として悪用する方法が確認される

X.509 デジタル証明書を秘密の通信路として悪用する方法が確認される

一次ソース: Fidelis Cybersecurity

www.fidelissecurity.com

同社リサーチャーによる論文

Covert channel by abusing x509 extensions

本件に関する PoC (Github)

GitHub - fideliscyber/x509: Proof of concept framework for transferring a file over x509 extension covert channel

関連ニュース記事

www.darkreading.com

参考情報

3.3.6 X.509証明書の拡張領域

概要

  • すでに侵害を受けた組織内から外部の C2 サーバーへ秘密の通信を行う方法として、X.509 デジタル証明書の拡張領域を悪用する方法が確認された
  • TLS ハンドシェイク中、X.509 デジタル証明書の拡張領域を使って C2 サーバー宛のデータを送信することにより実際には TLS セッションを張らなくても C2 サーバーとデータを交換することができる
  • 証明書に含まれる値を検査しないセキュリティ対策はバイパスされてしまう可能性がある
  • Mimikatz を使った PoC
  • この方法を利用する攻撃例の検知用 YARA ルールサンプルと YARA ルールを元にした Suricata の IDS Alert ルールサンプル

YARA ルールのサンプル

  • 拡張領域の subjectKeyIdentifier (主体者鍵識別子) を利用した攻撃で 127 バイトより長い値をもつ主体者鍵識別子を検出する
rule abnormal_subjectkeyid
{ 
meta:
author = "Jason Reaves"
strings: 
$shortlens = /\x06\x03\x55\x1d\x0e\x04.\x04[^\x08\x10\x14\x20\x30\x40]/
$longlens = {06 03 55 1d 0e 04 8?}
condition:
any of them
}

Suricata IDS アラートのルールサンプル

  • 拡張領域の subjectKeyIdentifier (主体者鍵識別子) を利用した攻撃で 127 バイトより長い値をもつ主体者鍵識別子を検出する YARA ルールを Suricata のルールに変換
alert tcp any any -> any any ( msg:"Abnormal x509v3 SubjectKeyIdentifier extension"; dsize:>768;
​content: "|16 03|"; depth:2; content:"|06 03 55 1d 0e 04|"; offset:0x150;
pcre:"/\x06\x03\x55\x1d\x0e\x04.\x04[^\x08\x10\x14\x20\x30\x40]/"; classtype:misc-attack;
sid:1000001; rev:1;)

まとめ

  • C2 サーバーへの秘密の通信路として X.509 の拡張領域を利用すると、ネットワーク境界に配備したセキュリティ機能が検出できない場合がある
  • 標準から逸脱したデジタル証明書を検出することで、こうした秘密の通信路を検出しうる