This post is also available in: English (英語)
概要
攻撃者による Linux システムへの標的型攻撃は増加し、LaZagne (広く利用されているオープンソースのパスワード回復ツール) のようなハックツール ユーティリティへのアクセスは容易になっています。攻撃者らはこれらのツールを濫用してマルウェア攻撃チェーンでパスワードをダンプすることが増えています。このツールは Linux ユーザーに重大なリスクをもたらします。Pidgin などの人気チャット ソフトウェアを狙い、D-Bus API を使ってパスワードなどの機微情報を抽出するからです。
本稿では、LaZagne が Pidgin D-Bus API を悪用してこの情報を取得する方法と、D-Bus API の監視が賢明なセキュリティ対策となり得る理由について簡潔に概要を説明します。また、攻撃者が特定のマルウェア キャンペーンで LaZagne をどのように使っているのかについても見ていきます。
eBPF を搭載したAdvanced WildFire for Linux は D-Bus API 関連のアクティビティを検出可能です。パロアルトネットワークスのお客様は、LaZagne の脅威に関連する不審なアクティビティを検出する YARA と振る舞いのルールにより、Wildfire を使ってハック ツール LaZagne からの保護を受けられます。
関連するUnit 42のトピック | Linux, API Attacks |
D-Bus とは
Desktop-Bus (通称 D-Bus) は *NIX 系システムにおけるプロセス間通信 (IPC) のしくみの 1 つで、アプリケーションとサービスが効率よく通信しあえるようにしています。D-Bus は、dbus-daemon アプリケーションがサーバーとして動作し、アプリケーションがクライアントとして動作する、クライアント サーバー アーキテクチャを使っています。
D-Bus は、NetworkManager、PulseAudio、systemd、Evolution などの一般的なソフトウェアで広く使われていて、さまざまなシステム コンポーネントやアプリケーション間で、シームレスな通信を可能にしてくれます。たとえば Evolution というメール クライアントは Evolution データ サーバーのような別コンポーネントとの通信に D-Bus を使っています。Evolution データ サーバーは、メール アカウント、連絡先、カレンダーの保存と管理などのタスクを処理しています。
Linux システム上の D-Bus API はアプリケーションとサービスとの間の通信を支えるものですが、ここから機微データが漏えいしてしまう可能性があります。したがって、監視されていない API はリスクをもたらしかねません。LaZagne ハックツールは Pidgin の D-Bus API を利用してクレデンシャルをダンプします。
LaZagne が Pidgin クレデンシャルを盗む方法
LaZagne は、アプリケーションの実行中に Pidgin クライアントの D-Bus API に接続し、ユーザー名とパスワードを含むアカウント クレデンシャルを取得します (図 1)。
図 2 のコードは、LaZagne ハックツールが Pidgin D-Bus API に接続してクレデンシャルを取得する方法を示しています。
上記の図 2 でハイライト表示したコードの内容は次のとおりです。
- get_password_from_dbus メソッドが ModuleInfo クラスを継承する Pidgin クラス内で定義される。
- 各セッションの D-Bus 接続が dbus.bus.BusConnection(session) を使って作成される。purple オブジェクト (Pidgin D-Bus API のインスタンスとして作成される) で呼び出される各メソッドに対し dbus-python ライブラリが内部的に D-Bus メッセージの作成、送信、受信を処理する。
- PurpleAccountGetUsername(_acc) メソッド、PurpleAccountGetPassword(_acc) メソッド、PurpleAccountGetProtocolName(_acc) メソッドが Pidgin アプリケーションとやりとりに使われる。これらのメソッドで Pidgin D-Bus API から各アカウントのユーザー名、パスワード、プロトコル名をそれぞれ取得する。
- 抽出された情報はその後 pwd_found という名前のリストに辞書として格納される。
同様の処理に使用できる低レベル libdbus ライブラリー API (図 3 に示す) には次のものがあります。
- dbus_message_new_method_call()
- メソッド呼び出し用に新しい D-Bus メッセージを作成する
- dbus_message_append_args()
- D-Bus メッセージに引数をアペンドする
- dbus_connection_send_with_reply_and_block()
- メッセージを送信して返信を待つ
- dbus_message_get_args()
- 返信メッセージから引数を抽出する
攻撃者は LaZagne を使って Pidgin のアカウントに加え、ほかのアカウントのクレデンシャルもダンプできます。D-Bus API 経由で KDE Wallet (KWallet) のパスワードをダンプすることもできます。KWallet は、Linux の KDE デスクトップ環境で使われている安全なパスワード管理システムです。これらのパスワードは KWallet システム内に保存されている個別のパスワードで、Web サイトやメール アカウント、Wi-Fi ネットワークなどのパスワードのほか、ユーザーが保存することを選択したそのほかのクレデンシャルが含まれる場合があります。
攻撃者はこれらの D-Bus API を使って機微データを入手しており、過去数年、 LaZagne を利用した犯罪グループの事例がさまざまな公的情報源によって文書化されています。
マルウェアキャンペーンにおける LaZagne
LaZagne は複数のオペレーティング システムで利用可能なことから、攻撃者にとって魅力的なツールとなっています。
2019 年にはイランの支援が疑われる脅威グループ Agent Serpens (別名Charming Kitten、APT35) は、Windowsベースのシステムからログイン クレデンシャルを収集する一連の攻撃で LaZagne を使用していました。
2020 年には、Unit 42 のリサーチャーが CL-CRI-0025 (別名 UNC1945 LightBasin) の名前で追跡しているアクティビティ クラスターが、カスタムの Quick Emulator (QEMU) Linux 仮想マシンに LaZagne をはじめとするさまざまなツールを含め、これでイタリアなどヨーロッパの標的からクレデンシャルを収集していました。
2020 年以降では、私たちが Prying Libra (別名 Gold Dupont、RansomEXX ランサムウェアにつながる攻撃の背後にいるグループ) として追跡している脅威アクターが、標的ホストからクレデンシャルを抽出するのに LaZagne を使っているとの報告があります。
2021 年 7 月には、Adept Libra (別名 TeamTNT) が Chimaera キャンペーンの一環で LaZagne を使い、クラウドベース環境の Linux ディストリビューションを含むさまざまなオペレーティング システムからパスワードを盗んでいました。この攻撃は、Adept Libra が LaZagne を使って Kubernetes 環境の WordPress サイトからパスワードを盗んでいた 2021 年 12 月までは、少なくとも続いていました。
さまざまなマルウェア攻撃キャンペーンにおけるハックツールの使用状況を以下の表にまとめます。
脅威アクター | 標的の業種 | キャンペーンでの LaZagne 使用 |
Adept Libra | IoT、クラウド インフラ | Chimaera キャンペーン、 kubelet キャンペーン |
CL-CRI-0025 | 通信、防衛 | イタリアの企業に対する脅威キャンペーン |
Agent Serpens | 軍事、外交 | Windows ベースの攻撃キャンペーンに利用 |
Prying Libra | ソフトウエア、工業 | RansomEXX ランサムウェア キャンペーン |
図 4 は LaZagne を使う bash スクリプトのサンプルで、2021 年 12 月に報告された攻撃のものです。
技術力の高い脅威グループがキャンペーンで LaZagne を使っていることから、パスワードを捕捉し、さらなる悪用を可能にする同ツールの有効性がうかがえます。
D-Bus API の監視
LaZagne は D-Bus を使って実行中のアプリケーションから機微データを抽出できます。そこで、D-Bus の API コールを監視すれば、そうした不審なアクティビティを検出できます。たとえば Extended Berkeley Packet Filter ( eBPF) をベースにしているライブラリー トレース ツール類は D-Bus の API コール洗い出しに有用です。
以下の図 5 は、bpftrace ツールを使って LaZagne ハックツールのアクティビティ (SHA256:d2421efee7a559085550b5575e2301a7c2ed9541b9e861a23e57361c0dbdbdb) のD-Bus API を監視しているようすです。
bpftrace は Linux システム用のコマンドライン ツールで、カーネル レベル/ユーザー レベル プログラムの動的解析に向けて設計されています。bpftrace ツールを使って dbus_message_get_args() API にプローブを設定します。私たちはこの API (libdbus-1.so.3 共有オブジェクト ライブラリーで定義) を使い、返信メッセージから引数を抽出しました。
使用したワンライナーの bpftrace プローブ コマンドは以下の通りです。
1 |
sudo bpftrace -e 'uprobe:/lib/x86_64-linux-gnu/libdbus-1.so.3:dbus_message_get_args { printf("pid: %d, comm: %s, func: %s called with 1st param value: 0x%lx\n", pid, comm, func, arg0); }' |
上の図 5 は LaZagne が Pidgin のユーザー名とパスワードのダンプに成功し (左側のターミナル) 、その API コールが bpftrace の出力にログとして記録されたようす (右側のターミナル) を表しています。
高レベルのD-Bus API をフックして、プロセス識別子 (PID) やプログラム名などの詳細をログに記録しておくと、どのプロセスが API を呼び出したかを特定できるので有用です。
結論
D-Bus API を注意深く監視することは、マルウェアやハックツールからアプリケーションや接続されたシステムを守る重要な方法の 1 つになりえます。開発者とサイバーセキュリティ専門家で協力しあい、セキュリティリスクについて常に情報を入手し、アプリケーションと機微なユーザー データを保護するための必要な措置を講じねばなりません。
クラウド コンピューティングや IoT の導入が進むなか、堅牢なセキュリティ対策は不可欠です。eBPF を搭載したAdvanced WildFire for Linux は D-Bus API 関連のアクティビティを検出可能です。パロアルトネットワークスのお客様は、LaZagne の脅威に関連する不審なアクティビティを検出する YARA と振る舞いのルールにより、Wildfire を使ってハック ツール LaZagne からの保護を受けられます。
侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらのフォームからご連絡いただくか、infojapan@paloaltonetworks.comまでメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。
- 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
- 欧州: +31.20.299.3130
- アジア太平洋: +65.6983.8730
- 日本: +81.50.1790.0200
パロアルトネットワークスは、ファイル サンプルや IoC (侵害指標) を含む調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー脅威アクターを体系的に阻害できます。詳細については Cyber Threat Alliance にてご確認ください。
謝辞
本稿執筆にあたり Yang Ji 氏、Dongrui Zeng 氏に貴重なフィードバックと提案をいただきましたことを感謝します。
IoC
LaZagne バイナリー
- d2421efee7a559085550b5575e2301a7c2ed9541b9e861a23e57361c0cdbdbdb
LaZagne バイナリー
- d23707e0123732e03d156a0fd474a1384e1b3deee3235df9e96ff5d21a4d440c
LaZagne シェル スクリプト (kubelet キャンペーンで利用されていたもの)
- b58bef842f6d6d4f53e6821f9ac1b63780267cc81006b649b56c263efeab1306
YARA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
rule elf_hacktool_lazagne { meta: author = "Siddharth Sharma - PaloAltoNetworks" description = "the lazagne hacktool." strings: $str1="lazagne" ascii wide nocase $str2="softwares.chats.pidgin" ascii wide nocase $str3="softwares.wallet.gnome" ascii wide nocase $str4="softwares.sysadmin.shadow" ascii wide nocase $str5="libdbus" ascii wide nocase condition: uint32(0) == 0x464c457f and all of them } |