97 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Docker Forensics
{{#include ../../banners/hacktricks-training.md}}
## コンテナの変更
いくつかの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
...
```
前のコマンドで **C****Changed** を意味し、**A** は **Added** を意味します。\
もし `/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**](https://github.com/GoogleContainerTools/container-diff/releases)を使用して**変更の概要を抽出**できます:
```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イメージ内の追加または変更されたファイルを見つけるために、[**dive**](https://github.com/wagoodman/dive)[**releases**](https://github.com/wagoodman/dive/releases/tag/v0.10.0)からダウンロード)ユーティリティを使用することもできます:
```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として、**ホストからプロセスのメモリをダンプし**、**資格情報**を検索することができます。ちょうど[**次の例のように**](../../linux-hardening/privilege-escalation/index.html#process-memory)。
{{#include ../../banners/hacktricks-training.md}}