Kaspersky Labは4月12日(現地時間)、「Kaspersky analysis of the backdoor in XZ|Securelist」において、圧縮ツールおよびライブラリ「xz」から発見された悪意のあるコードの分析結果を公開した。この問題の概要は「緊急警告、圧縮ツールxzにsshdを介した不正アクセスの可能性 - 利用の中止を | TECH+(テックプラス)」にて報じている。
xzに潜んでいた悪意のあるコードとは
xzから発見された悪意のあるコードは脆弱性「CVE-2024-3094」として追跡されている。攻撃者はこの脆弱性を悪用することでsystemdによって起動されたsshdの認証を妨害し、システムへの侵入を可能にするという。
分析結果
Kaspersky Labによると、xzに悪意のあるコードを埋め込んだ人物は「Jia Tan」または「jiaT75」と呼ばれる開発者で、xzの開発に影響力を持っていたとされる。Jia Tanは悪意のあるコードを1度にすべて埋め込むのではなく、他の開発者に気付かれないように狡猾に行動していたとみられる。その概要は次のとおり。
- 無害に見える2つのテストファイルをGitHubにコミットする。これらファイルには難読化された悪意のあるシェルスクリプトとバックドアのバイナリーオブジェクトが含まれているが、抽出するコードは含まれていない。そのため、GitHubからソースコードを取得しても悪意のあるコードは実行されず、検出される可能性は低くなる
- Jia Tanの管理する「https://xz[.]tukaani.org」から配布するソースコードにのみビルドファイル「build-to-host.m4」を追加する。xzではこのURLからソースコードをダウンロードすることが一般的となっており、多くのディストリビューションにて採用されていた
- build-to-host.m4には悪意のあるシェルスクリプトを抽出するコードが含まれている。ユーザーがこのソースコードからビルドすると、悪意のあるシェルスクリプトが抽出される。抽出されたシェルスクリプトは後続のスクリプトに挿入され実行される
- 悪意のあるシェルスクリプトはビルドプロセスがLinux上で動作しているか確認し、Linuxの場合は第2のシェルスクリプトを抽出して実行する
- 第2のシェルスクリプトは現在の環境が攻撃可能な環境か確認し、攻撃可能な場合はバックドアのバイナリーオブジェクト「liblzma_la-crc64-fast.o」を抽出する
- 次に「crc_x86_clmul.h」を修正し、バックドアのバイナリーオブジェクトをリンクする
このバックドアは、次の関数を秘密裏にフックする高度な機能を持つとされる。これら関数を侵害することでsshdの認証プロセスを妨害し、攻撃者の侵入経路を開くものとみられる。
- RSA_public_decrypt - 秘密鍵で署名された暗号文を復号化する
- EVP_PKEY_set1_RSA - 特定のコンテキストのRSAキーを設定する
- RSA_get0_key - RSAキーを取得する
対策
Kaspersky Labはxzの悪意あるバイナリオブジェクトを検出するためのYaraルールを公開している。また、分析の過程で判明したセキュリティ侵害インジケーター(IoC: Indicator of Compromise)も公開されており、必要に応じて活用することが望まれている。