Docker Forensics

Reading time: 7 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

コンテナの変更

いくつかのdockerコンテナが侵害された疑いがあります:

bash
docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cc03e43a052a        lamp-wordpress      "./run.sh"          2 minutes ago       Up 2 minutes        80/tcp              wordpress

このコンテナに対して行われたイメージに関する変更を簡単に見つけることができます:

bash
docker diff wordpress
C /var
C /var/lib
C /var/lib/mysql
A /var/lib/mysql/ib_logfile0
A /var/lib/mysql/ib_logfile1
A /var/lib/mysql/ibdata1
A /var/lib/mysql/mysql
A /var/lib/mysql/mysql/time_zone_leap_second.MYI
A /var/lib/mysql/mysql/general_log.CSV
...

前のコマンドで CChanged を意味し、AAdded を意味します。
もし /etc/shadow のような興味深いファイルが変更されたことがわかった場合、悪意のある活動を確認するために、次のコマンドを使用してコンテナからダウンロードできます:

bash
docker cp wordpress:/etc/shadow.

新しいコンテナを実行し、そこからファイルを抽出することで、元のものと比較することもできます:

bash
docker run -d lamp-wordpress
docker cp b5d53e8b468e:/etc/shadow original_shadow #Get the file from the newly created container
diff original_shadow shadow

いくつかの疑わしいファイルが追加された場合は、コンテナにアクセスして確認できます:

bash
docker exec -it wordpress bash

画像の変更

エクスポートされたdockerイメージ(おそらく.tar形式)を受け取った場合、container-diffを使用して変更の概要を抽出できます:

bash
docker save <image> > image.tar #Export the image to a .tar file
container-diff analyze -t sizelayer image.tar
container-diff analyze -t history image.tar
container-diff analyze -t metadata image.tar

次に、イメージを解凍し、ブロブにアクセスして、変更履歴で見つけた疑わしいファイルを検索できます:

bash
tar -xf image.tar

基本分析

You can get basic information from the image running:

bash
docker inspect <image>

変更履歴の要約を取得することもできます:

bash
docker history --no-trunc <image>

イメージからdockerfileを生成することもできます:

bash
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 madhuakula/k8s-goat-hidden-in-layers>

Dive

Dockerイメージ内の追加または変更されたファイルを見つけるために、divereleasesからダウンロード)ユーティリティを使用することもできます:

bash
#First you need to load the image in your docker repo
sudo docker load < image.tar                                                                                                                                                                                                         1 ⨯
Loaded image: flask:latest

#And then open it with dive:
sudo dive flask:latest

これにより、dockerイメージの異なるblobをナビゲートし、どのファイルが変更または追加されたかを確認できます。は追加されたことを意味し、黄色は変更されたことを意味します。タブを使用して他のビューに移動し、スペースを使用してフォルダーを折りたたむ/開くことができます。

dieを使用すると、イメージの異なるステージの内容にアクセスすることはできません。そうするには、各レイヤーを解凍してアクセスする必要があります
イメージが解凍されたディレクトリから、次のコマンドを実行してすべてのレイヤーを解凍できます:

bash
tar -xf image.tar
for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; done

メモリからの資格情報

ホスト内でdockerコンテナを実行するとき、ホストからコンテナ上で実行されているプロセスを見ることができます。単にps -efを実行するだけです。

したがって(rootとして)、ホストからプロセスのメモリをダンプし資格情報を検索することができます。ちょうど次の例のように

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする