PRootでBYOF

ほぼこもセキュリティニュース By Terilogy Worx

PRootは任意のディレクトリを新しいルートファイルシステムとして使用することができるようにする管理者向けツールです。
そしてBYOFはBring Your Own Filesystemという攻撃手法です。
どういうものでしょう。

  • ツールの詰め合わせ
    攻撃には多くのファイルを使用したくなります。
    いろいろなツールがあるほうが便利です。
    この攻撃手法ではツールを1つのファイルシステムの状態にまとめて扱うことができるため、必要なものを全部含めた状態で相手環境に持ち込むことができます。

     

  • 独立して動作する
    PRootで作成されたコマンド群はそのファイルシステムの中側にしか依存しません。
    通常Linuxにはいろいろなディストリビューションがあり、そのディストリビューションによってライブラリのPATHなどのファイルの構成が異なります。
    このため通常プログラムをコンパイルしたものを何かの環境に持ち込んで使用する場合、そのコンパイルされたプログラムはその環境に適合するようになっていないとなりません。
    しかしPRootのなかに含まれるコマンド群は、参照するものがすべてPRootの中にしかない状態にコンパイルされています。
    このため、ファイルシステムの外側の構成に依存することなく常にその中のコマンドは利用することができます。
    こういったことからPRootで作成したファイルシステムは多くのディストリビューションに対応できる状態となります。

     

  • 検出しにくい
    これまでBYOF形式の攻撃は一般化してきていません。
    このためファイルシステムの形式で持ち込まれる攻撃ツールの塊に対して、正しく問題を検出することは容易ではありません。
    形式の問題だけでなく、ファイルシステムとすることでバイナリのサイズ自体も大きくなりますので、いろいろな意味で難しいものとなることが考えられます。

     

  • 自由度が高い
    持ち込めるものはファイルシステムそのものです。
    このことがどう危険になるのでしょう。
    たとえば持ち込むファイルのなかにbashを含めておきます。
    そのbashにはsetuidビットを設定しておきます。
    ファイルシステムをマウントした後、このファイルシステムのなかのbashを一般ユーザが実行するとどうなるでしょう。
    そのbashは、bashの所有者権限を持ったものとして動作を開始します。rootシェルが簡単に実現できます。

     

  • 攻撃の流れ
    ファイルシステムのファイルを環境に持ち込む、持ち込み先でファイルシステムをマウントする、中のコマンドを使って攻撃する、という流れです。
    中のコマンドはそのまま利用できる状態で格納されていますので、実行のための準備などは必要ありません。目的のコマンドを実行するだけです。
    もちろん中のコマンドは作成時に自由に構成することができます。
    確認されている事例では、masscanやnmapなどのネットワークスキャンツール、XMRigクリプトマイナーなどが持ち込まれます。

もともとはPRootは管理者向けの機構です。
ですが、使い方でこうも変わるのですね。
便利なツールは危険なツールとなります。
通常攻撃者は侵入先の環境の違いに苦労することが多いのですが、そういった苦労をこの機構は取り除いてくれます。

「write once, run anywhere」という言葉があります。
Javaが出てきたときによく目にしました。
一度書けばどこでも実行できる、というものです。
これを実現するものとなってしまっています。

参考記事(外部リンク):Discovered new BYOF technique to cryptomining with PRoot
sysdig.com/blog/proot-post-explotation-cryptomining/