制限を超えるElevator

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

Dockerというコンテナシステムがあります。
コンテナによる仮想化を用いてアプリケーションを開発・配置・実行するためのオープンプラットフォームです。
OSレベルの仮想化によりアプリケーションを開発・実行環境から隔離し、アプリケーションの素早い提供を可能にします。
開発する側としては例えば複数のバージョンをメンテナンスする場合に有効ですし、提供を受ける側としては環境構築の負担を小さくすることができます。
そんなことから利用している環境も多いのではないでしょうか。

こういった効能が期待できるコンテナシステムが、脅威アクターのターゲットとなっています。
利用される攻撃ツールの名前はElevatorです。

  • 対象環境
    Dockerを動作させることのできる環境3種がターゲットとなっています。
    2つのバージョンのCoreOSと1つのバージョンのUbuntuです。
    4.14.63-coreos (CoreOS 1800.7)、4.14.48-coreos-r2 (CoreOS 1745.7)、4.15.0-42-generic (Ubuntu)です。
  • 攻撃の様子
    Elevatorを使った攻撃は多段階で進んでいきます。
  • 初期偵察モジュール
    まずは偵察が実行されます。
    偵察の主目的は悪用する予定の脆弱性の存在確認です。
    確認は2種実行されます。
    1つは、eBPFプログラムにアタッチしてソケットへの書き込みが実行できるかが確認されます。
    もう1つは、モジュールをベリファイしたりロードしたりした際の戻り値をヒープから読み取ることが可能かを確認します。
    これらの確認により、CVE-2018-18445の悪用が可能かが確認されます。
  • Elevator(特権昇格)
    攻撃が成り立つことが想定できると判断された場合、次の段階に進みます。
    ターゲットとして成り立つと想定される環境であるかを確認するため、unameコマンドが実行され、kernelバージョンを確認します。
    ターゲットと分かった場合、eBPFのさまざまな関数を呼び出し、巧みにコンテナを抜け出してホスト環境でroot権限を使った活動を開始します。
  • Elevator(情報収集とリモートシェル)
    コンテナを抜け出しroot権限を獲得すると、さらに次の段階に進みます。
    ハードウェアに関する情報やネットワークに関する情報など、さまざまな情報を収集します。
    情報はPythonスクリプトで収集し、収集した情報は攻撃者の準備したC2に送信されます。
    さらにその後、bashを起動し、リモートからの操作を可能にします。
    これにより、攻撃者はリモートから任意のコマンドが実行できるようになります。

Dockerを使うことによりアプリケーションの動作環境をホスト環境と切り離すことができますので、通常はセキュリティの向上を期待することができます。
しかし、環境に存在する脆弱性への対応が適切に対策されることが前提とできない場合、その安全は保つことができません。
コンテナだから大丈夫、のように特定の技術を過信することなく、環境全体に対して適切な運用を心掛けたいものです。

参考記事(外部リンク):Taking The Elevator Down To Ring 0
blog.lumen.com/taking-the-elevator-down-to-ring-0/