マルウェア「BPFDoor」が進化 - スニッフィングバックドアの機能を強化
BPFdoorとは?
BPFdoorは、既に侵害されたネットワークや環境において、持続的かつ長期的な足場を維持することを目的としたLinux固有のロープロファイルのパッシブバックドアで、主に侵害後の長期間にわたって、攻撃者が感染したシステムに再侵入できるようにするために機能しています。このマルウェアの名前は、Berkley Packet Filter を使用することから付けられました。このマルウェアは、受信トラフィックに対するファイアウォールの制限を回避し、指令を受け取り、検出を回避する非常にユニークな方法です。
このマルウェアは、中国の脅威アクターであるRed Menshen(aka Red Dev 18)に関連しているとされており、2021年以降、中東やアジア全域の通信プロバイダーや、政府、教育、物流分野の事業者を標的とすることが確認されています。
最初に発見されたのは約1年前で、BPFdoorはその効果的でエレガントなデザインと、検知されず長期的な持続性を維持するために不可欠な要素であるステルス性を高く重視していることが注目されました。
最近、Deep Instinctの脅威ラボは、これまで文書化されておらず、まったく検出されていないBPFdoorの新しい亜種を入手・分析しました。
よりステルス性を高めた新型
この新バージョンは、従来のバージョンと比較して、さらにステルス性を高めるために、以下のようないくつかの重要な違いがあります:
“新しくステルスな” 2023年型 | “旧” 2022年型 | |
---|---|---|
暗号 | スタティックライブラリ暗号化 | RC4暗号化 |
コミュニケーション | リバースシェル | バインドシェルと iptables |
コマンド | ハードコードされたコマンドはなく、すべてのコマンドはリバースシェルを介して送信 | ハードコードされたコマンド |
ファイル名 | ハードコードされていない | ハードコードされている |
以前の亜種と比較して最も大きな違いの1つは、ハードコードされたインジケーターの多くが削除されたことにあり、新しいバージョンの検出をより困難にしています。2023年2月にVirusTotalで初めて登録されて以来、この新しい亜種は検出されないままであり、この記事を書いている時点でも検出されていません。
BPFdoor のテクニカル分析
BPFdoorサンプルは、実行されると、”/var/run/initd.lock”にあるランタイムファイルの作成とロック取得を試み、そのファイルを仮のミューテックスとして使用して失敗すると終了します。
成功すると、BPFdoorは自身をフォークして子プロセスとして実行し続け、このコンテキストでstdin、stdout、stderrストリームを閉じ、以下のオペレーティングシステムのシグナルを無視するように自身をセットします:
シグナル番号 | シグナル名 | シグナル概要 |
---|---|---|
1 | SIGHUP | SIGHUP("signal hang-up")とは、制御端末のセッションが終了したときにプロセスに送られる信号のことですSIGINT(「シグナル・インタラプト」)とは、ユーザーがプログラムを中断したときに送られる信号(Ctrl + C) |
2 | SIGINT | SIGINT(「シグナル・インタラプト」)とは、ユーザーがプログラムを中断したときに送られる信号(Ctrl + C) |
3 | SIGQUIT | SIGQUITは、プロセスを終了させるために送信される信号 |
13 | SIGPIPE | SIGPIPEは、パイプが破損したときに送られる信号 |
17 | SIGCHLD | SIGCHLDは、子プロセスが終了するときに送られるシグナル |
21 | SIGTTIN | SIGTTINは、同じターミナルセッションから読み込もうとするプロセスに送る信号で、ブロックされる |
23 | SIGTTOU | SIGTTOUは、同じ端末セッションに書き込もうとするプロセスに送られる信号で、ブロックされる |
これらのシグナルを無視することで、BPFdoorのプロセスに対する改ざんを防ぐことができます。
以上のように設定したBPFdoorは、次に以下のようにメモリバッファを確保し、ソケットを作成します:
setsockoptを使用して、以下のソケットオプションの指定に進みます:
そして、recvfromを使用して、ループ(さらに後述します)でそこから読み取ります:
図7 - Recvfromコール
上記のフローで興味深い点は、recvfromの呼び出しで "addr" パラメータがゼロになっていることです。ソケットは接続されておらず、bindやlistenの呼び出しも行われていません。一体、ここで何が行われているのでしょうか?
ソケットを作成するために使用される正確な引数を解釈すると、この呼び出しは次のような構造になっていることがわかります:
図8 - ソケットの呼び出し
これは、特定のプロトコルに縛られることなく、イーサネット層以上からマシンに送信されるすべてのパケットを読むことができる特別なパケットスニッフィングソケットとしてソケットを作成します。
BPFdoorでは、このようなパケットスニッフィングソケットを利用して、addrパラメータがなくても、以下のループを使って特定の「マジック」バイト列を検索し、recvfromでデータを読み込んでいます:
図9 -「マジック」バイト列のループ検索(ハイライト表示)
「マジック」バイト列: \x44\x30\xCD\x9F\x5E\x14\x27\x66
これが見つかると、ループが切れて、BPFdoorは次のフェーズに進むことができます。
しかし、これではBPFdoorが通過しなければならないトラフィックがかなり多くなってしまう。
setsockoptの使い方をもう少し詳しく調べてみましょう。その引数を解析すると、次のようなコードにたどり着きます:
これが、BPFdoorの名前の由来です。上記のコードは、ソケットに Berkley Packet Filter をアタッチしています。これは、libpcapのような情報セキュリティの定番を支える仕組みと全く同じで、BPFdoorがソケットから送られてくる「興味のない」タイプのデータをフィルタリングすることを可能にします。
Berkley Packet Filterは以下の例のように定義することができ、IPv4上のTCPを許可します:
図 11 - BPF の例
ソケットオプションSO_ATTACH_FILTERを設定し、フィルターを以下のsock_filter_codeに向けることです:
図12 - BPF sock_filter_code
BPFdoor は、ポート 22(ssh)、80(http)、443(https)を経由する UDP、TCP、SCTP トラフィックのみを読み込むように、カーネルを誘導してそのソケットをセットアップします。
BPFdoorはこのような低レイヤーに位置するため、ファイアウォールのルールには従わず、受信トラフィックに関するファイアウォールの制限をバイパスして、マシンのユーザーモードに浮上することのないパケットをリスニングすることができます。
BPFdoorは、フィルタリングされたトラフィックの中に「マジック」バイトを含むパケットを見つけると、それをオペレータからのメッセージとして扱い、2つのフィールドを解析して再び自身をフォークします。
親プロセスはソケットを通過するフィルタリングされたトラフィックを監視し続け、子プロセスは以前に解析されたフィールドをコマンド&コントロールのIP-ポートの組み合わせとして扱い、それにコンタクトしようとします。
図13 - Command & Controlへの接続
BPFdoorのこの亜種には、オープンソースの暗号化ライブラリである libtomcryptのプリコンパイルバージョンが含まれていることが、サンプルの含まれる文字列で確認できます:
図14 - 含まれる文字列
このライブラリは、Red Hat Linuxが動作するシステム上でGCCを使用して2022年10月初旬にコンパイルされたことがわかります。このことは、この亜種がVirusTotalに初めて登場するよりもかなり早い時期に運用されていたことを示唆しています。
私たち自身のバージョンのライブラリを同様の方法でコンパイルし、bindiffを使用してBPFdoorと比較することで、静的にリンクされたエクスポートを確認することができました:
比較した結果、BPFdoor は libtomcrypt の機能を使って、コマンド&コントロールと安全で暗号化された「リバースシェル」セッションをセットアップしていると判断しました。これは、以前のメカニズムに取って代わるものです。
このセッションが確立された後、BPFdoorは以下のようなループ動作を開始します:
結論
BPFdoorは、この最新のアップデートにより、非常にステルス性が高く、検出が困難なマルウェアとしての評判を維持しています。
暗号化ライブラリのコンパイル時期(2022年10月)とVirusTotalへの最初の投稿(2023年2月)のどちらを、このサンプルが最初に使用された時期を示すものとして考えるかは別として、現時点でも主要セキュリティ製品からまったく検出されないままであることは、本当に驚くべきことです。
図16・17 - VirusTotalの検出数0、7種類のスキャン
IOCs
afa8a32ec29a31f152ba20a30eb483520fe50f2dce6c9aa9135d88f7c9c511d7 – BPFDoor ELF SHA256
/var/run/initd.lock – BPFDoor "mutex”
MITRE ATT&CK:
タクティクス | テクニック | 概要 | オブザーバブル |
---|---|---|---|
コマンド&コントロール | T1205 - トラフィック・シグナリング | 攻撃者は、反応を引き起こすために「マジック」値を使用 | マジックバイト列 |
コマンド&コントロール | T1205.002 - トラフィックシグナリング: ソケットフィルター | 攻撃者は、ネットワークソケットにフィルタを装着 | バークレーパケットフィルターの使用方法 |
コマンド&コントロール | T1573 - 暗号化されたチャンネル | 攻撃者は暗号化された Command & Control通信を使用 | libtomcryptの使用方法 |
エグゼキューション | T1106 – Native API | 攻撃者は、OSのネイティブAPIを呼び出して動作を実行 | ポペンの使用法 |
同様の亜種の解析:
https://www.elastic.co/security-labs/a-peek-behind-the-bpfdoor
Deep Instinctは、世界初で唯一の専用に構築されたディープラーニングのサイバーセキュリティフレームワークを使用して、ランサムウェアやその他のマルウェアを阻止する予防第一のアプローチをとります。ランサムウェア、ゼロデイ脅威、および未知のマルウェアを、ランサムウェアが暗号化できる最速の速度よりも750倍速い20ミリ秒未満で防止します。Deep Instinctは99%以上のゼロデイ精度を持ち、<0.1%の誤検出率を約束します。Deep Instinct Prevention Platformは、ハイブリッド環境における脅威に対する完全で多層的な保護を提供する、あらゆるセキュリティスタックに不可欠な追加機能です。