mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
Translated ['linux-hardening/privilege-escalation/docker-security/README
This commit is contained in:
parent
071160d4d7
commit
d2d4870f07
1 changed files with 36 additions and 36 deletions
|
@ -6,11 +6,11 @@
|
|||
|
||||
支持HackTricks的其他方式:
|
||||
|
||||
* 如果您想看到您的**公司在HackTricks中被广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
|
||||
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
|
||||
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
|
||||
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs收藏品](https://opensea.io/collection/the-peass-family)
|
||||
- **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -22,17 +22,17 @@
|
|||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## **基本Docker引擎安全**
|
||||
## **基本Docker引擎安全性**
|
||||
|
||||
**Docker引擎**利用Linux内核的**命名空间**和**Cgroups**来隔离容器,提供基本的安全层。通过**Capabilities dropping**、**Seccomp**和**SELinux/AppArmor**提供额外的保护,增强容器隔离性。**认证插件**可以进一步限制用户操作。
|
||||
**Docker引擎**利用Linux内核的**Namespaces**和**Cgroups**来隔离容器,提供基本的安全层。通过**Capabilities dropping**、**Seccomp**和**SELinux/AppArmor**提供额外的保护,增强容器隔离性。**认证插件**可以进一步限制用户操作。
|
||||
|
||||
![Docker安全](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
|
||||
|
||||
### 安全访问Docker引擎
|
||||
|
||||
Docker引擎可以通过Unix套接字本地访问,也可以通过HTTP远程访问。对于远程访问,必须使用HTTPS和**TLS**来确保机密性、完整性和认证。
|
||||
Docker引擎可以通过Unix套接字本地访问,也可以通过HTTP远程访问。对于远程访问,必须使用HTTPS和**TLS**来确保机密性、完整性和身份验证。
|
||||
|
||||
默认情况下,Docker引擎在Unix套接字上侦听`unix:///var/run/docker.sock`。在Ubuntu系统上,Docker的启动选项定义在`/etc/default/docker`中。要允许远程访问Docker API和客户端,请添加以下设置以通过HTTP套接字公开Docker守护程序:
|
||||
默认情况下,Docker引擎在Unix套接字`unix:///var/run/docker.sock`上监听。在Ubuntu系统上,Docker的启动选项定义在`/etc/default/docker`中。要允许远程访问Docker API和客户端,通过添加以下设置将Docker守护程序暴露在HTTP套接字上:
|
||||
```bash
|
||||
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
|
||||
sudo service docker restart
|
||||
|
@ -50,7 +50,7 @@ sudo service docker restart
|
|||
|
||||
* [**Docker Hub**](https://hub.docker.com):Docker提供的公共注册服务。
|
||||
* [**Docker Registry**](https://github.com/docker/distribution):允许用户托管自己的注册表的开源项目。
|
||||
* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry):Docker的商业注册服务,具有基于角色的用户身份验证功能,并与LDAP目录服务集成。
|
||||
* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry):Docker的商业注册服务,具有基于角色的用户身份验证和与LDAP目录服务集成的功能。
|
||||
|
||||
### 镜像扫描
|
||||
|
||||
|
@ -78,7 +78,7 @@ Note that we do not currently have vulnerability data for your image.
|
|||
```
|
||||
* [**`trivy`**](https://github.com/aquasecurity/trivy)
|
||||
```bash
|
||||
trivy -q -f json <ontainer_name>:<tag>
|
||||
trivy -q -f json <container_name>:<tag>
|
||||
```
|
||||
* [**`snyk`**](https://docs.snyk.io/snyk-cli/getting-started-with-the-cli)
|
||||
```bash
|
||||
|
@ -106,10 +106,10 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
|
|||
|
||||
***
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
|
||||
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可以轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
|
||||
立即获取访问权限:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -126,7 +126,7 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
|
|||
|
||||
**命名空间**
|
||||
|
||||
* **目的**:确保资源(如进程、网络和文件系统)的隔离。特别是在Docker中,命名空间将容器的进程与主机和其他容器分开。
|
||||
* **目的**:确保资源(如进程、网络和文件系统)的隔离。特别是在Docker中,命名空间使容器的进程与主机和其他容器分开。
|
||||
* **使用`unshare`**:使用`unshare`命令(或底层系统调用)来创建新的命名空间,提供额外的隔离层。然而,尽管Kubernetes本身不会阻止此操作,但Docker会。
|
||||
* **限制**:创建新的命名空间不允许进程恢复到主机的默认命名空间。要穿透主机命名空间,通常需要访问主机的`/proc`目录,并使用`nsenter`进行进入。
|
||||
|
||||
|
@ -138,9 +138,9 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
|
|||
**能力降权**
|
||||
|
||||
* **重要性**:这是进程隔离的关键安全功能。
|
||||
* **功能**:通过放弃某些能力,限制根进程可以执行的操作。即使进程以根权限运行,缺乏必要的能力也会阻止其执行特权操作,因为系统调用将由于权限不足而失败。
|
||||
* **功能**:通过放弃某些能力,限制根进程可以执行的操作。即使进程以root权限运行,缺乏必要的能力也会阻止其执行特权操作,因为由于权限不足,系统调用将失败。
|
||||
|
||||
这是进程放弃其他能力后的**剩余能力**:
|
||||
这些是进程放弃其他能力后的**剩余能力**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
|
@ -196,7 +196,7 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
|
|||
|
||||
权限允许对根用户允许的权限进行更精细的控制。Docker使用Linux内核功能来限制容器内可以执行的操作,无论用户类型如何。
|
||||
|
||||
当运行Docker容器时,进程会放弃敏感权限,这些权限可能被用于逃离隔离。这样可以确保进程无法执行敏感操作并逃离:
|
||||
当运行Docker容器时,进程会放弃敏感权限,这些权限可能被进程用来逃离隔离。这样可以确保进程无法执行敏感操作并逃脱:
|
||||
|
||||
[linux-capabilities.md](../linux-capabilities.md)
|
||||
|
||||
|
@ -208,27 +208,27 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
|
|||
|
||||
### Docker中的AppArmor
|
||||
|
||||
AppArmor是一个内核增强功能,用于将容器限制在一组有限的资源和每个程序的配置文件中:
|
||||
AppArmor是一个内核增强功能,用于将容器限制在一组有限的资源和每个程序的配置文件中。
|
||||
|
||||
[apparmor.md](apparmor.md)
|
||||
|
||||
### Docker中的SELinux
|
||||
|
||||
* **标签系统**:SELinux为每个进程和文件系统对象分配唯一标签。
|
||||
* **策略执行**:它执行定义了进程标签在系统中可以对其他标签执行的操作的安全策略。
|
||||
* **策略执行**:它执行定义了进程标签在系统中可以对其他标签执行哪些操作的安全策略。
|
||||
* **容器进程标签**:当容器引擎启动容器进程时,它们通常被分配一个受限SELinux标签,通常是`container_t`。
|
||||
* **容器内的文件标签**:容器内的文件通常被标记为`container_file_t`。
|
||||
* **策略规则**:SELinux策略主要确保具有`container_t`标签的进程只能与标记为`container_file_t`的文件交互(读取、写入、执行)。
|
||||
|
||||
这种机制确保即使容器内的进程受到损害,也仅限于与具有相应标签的对象交互,从而显著限制了此类妥协可能造成的潜在损害。
|
||||
这种机制确保即使容器内的进程被入侵,也仅限于与具有相应标签的对象交互,从而显著限制了此类妥协可能造成的潜在损害。
|
||||
|
||||
[selinux.md](../selinux.md)
|
||||
|
||||
### AuthZ和AuthN
|
||||
### AuthZ & AuthN
|
||||
|
||||
在Docker中,授权插件通过检查两个关键上下文来决定是否允许或阻止对Docker守护程序的请求。这一决定是通过检查两个关键上下文来做出的:
|
||||
|
||||
* **认证上下文**:包括有关用户的全面信息,例如他们是谁以及如何进行身份验证。
|
||||
* **认证上下文**:包括有关用户的全面信息,例如他们是谁以及他们如何进行身份验证。
|
||||
* **命令上下文**:包括与正在进行的请求相关的所有相关数据。
|
||||
|
||||
这些上下文有助于确保只有经过身份验证的用户的合法请求才会被处理,增强Docker操作的安全性。
|
||||
|
@ -265,7 +265,7 @@ nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444;
|
|||
|
||||
#### no-new-privileges
|
||||
|
||||
如果您正在运行一个容器,攻击者设法以低特权用户的身份访问。如果您有一个**配置错误的suid二进制文件**,攻击者可能会滥用它并**在容器内提升权限**。这可能允许他逃离容器。
|
||||
如果您正在运行一个容器,攻击者以低权限用户的身份获得访问权限。如果您有一个**配置错误的suid二进制文件**,攻击者可能会滥用它,并在容器内**升级权限**。这可能允许他逃离容器。
|
||||
|
||||
使用启用了**`no-new-privileges`**选项运行容器将**防止这种特权升级**。
|
||||
```
|
||||
|
@ -292,9 +292,9 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
|
|||
|
||||
避免直接将机密信息嵌入Docker镜像或使用环境变量是至关重要的,因为这些方法会将您的敏感信息暴露给通过诸如`docker inspect`或`exec`命令访问容器的任何人。
|
||||
|
||||
**Docker卷**是一个更安全的替代方案,推荐用于访问敏感信息。它们可以被用作临时内存文件系统,减轻了与`docker inspect`和日志记录相关的风险。然而,root用户和那些具有对容器的`exec`访问权限的用户仍然可以访问这些机密信息。
|
||||
**Docker卷**是一个更安全的替代方案,推荐用于访问敏感信息。它们可以被用作临时内存中的文件系统,减轻了与`docker inspect`和日志记录相关的风险。然而,root用户和那些具有对容器的`exec`访问权限的用户仍然可以访问这些机密信息。
|
||||
|
||||
**Docker机密信息**提供了一个更安全的处理敏感信息的方法。对于在镜像构建阶段需要机密信息的情况,**BuildKit**提供了一个高效的解决方案,支持构建时机密信息,提高构建速度并提供额外功能。
|
||||
**Docker机密**提供了一种更安全的处理敏感信息的方法。对于在镜像构建阶段需要机密信息的情况,**BuildKit**提供了一个高效的解决方案,支持构建时机密信息,提高构建速度并提供额外功能。
|
||||
|
||||
要利用BuildKit,可以通过以下三种方式激活它:
|
||||
|
||||
|
@ -306,7 +306,7 @@ BuildKit允许使用`--secret`选项使用构建时机密信息,确保这些
|
|||
```bash
|
||||
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
|
||||
```
|
||||
对于运行容器中需要的机密信息,**Docker Compose 和 Kubernetes** 提供了强大的解决方案。Docker Compose 利用服务定义中的 `secrets` 键来指定机密文件,如下所示的 `docker-compose.yml` 示例:
|
||||
对于运行中容器中需要的机密信息,**Docker Compose 和 Kubernetes** 提供了强大的解决方案。Docker Compose 利用服务定义中的 `secrets` 键来指定机密文件,如在 `docker-compose.yml` 示例中所示:
|
||||
```yaml
|
||||
version: "3.7"
|
||||
services:
|
||||
|
@ -325,32 +325,32 @@ file: ./my_secret_file.txt
|
|||
|
||||
### gVisor
|
||||
|
||||
**gVisor**是一个用Go语言编写的应用内核,实现了Linux系统表面的大部分功能。它包括一个名为`runsc`的[Open Container Initiative (OCI)](https://www.opencontainers.org)运行时,提供了应用程序和主机内核之间的**隔离边界**。`runsc`运行时与Docker和Kubernetes集成,使得运行沙盒容器变得简单。
|
||||
**gVisor**是一个用Go编写的应用程序内核,实现了Linux系统表面的大部分功能。它包括一个名为`runsc`的[Open Container Initiative (OCI)](https://www.opencontainers.org)运行时,提供了应用程序和主机内核之间的**隔离边界**。`runsc`运行时与Docker和Kubernetes集成,使得运行沙盒容器变得简单。
|
||||
|
||||
{% embed url="https://github.com/google/gvisor" %}
|
||||
|
||||
### Kata Containers
|
||||
|
||||
**Kata Containers**是一个开源社区,致力于构建一个安全的容器运行时,使用轻量级虚拟机,感觉和表现类似于容器,但通过硬件虚拟化技术提供了更强大的工作负载隔离作为第二层防御。
|
||||
**Kata Containers**是一个开源社区,致力于构建一个安全的容器运行时,使用轻量级虚拟机,感觉和执行像容器,但通过硬件虚拟化技术提供**更强大的工作负载隔离**作为第二层防御。
|
||||
|
||||
{% embed url="https://katacontainers.io/" %}
|
||||
|
||||
### 总结提示
|
||||
|
||||
* **不要使用`--privileged`标志或在容器内挂载** [**Docker套接字**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**。** Docker套接字允许生成容器,因此通过使用`--privileged`标志运行另一个容器是获取主机完全控制的简单方法。
|
||||
* **不要在容器内以root身份运行。使用** [**不同的用户**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **和** [**用户命名空间**](https://docs.docker.com/engine/security/userns-remap/)**。**容器内的root与主机上的root相同,除非使用用户命名空间重新映射。它仅受到Linux命名空间、功能和cgroups的轻微限制。
|
||||
* **不要在容器内以root身份运行。使用** [**不同的用户**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **和** [**用户命名空间**](https://docs.docker.com/engine/security/userns-remap/)**。**容器内的root与主机上的root相同,除非使用用户命名空间重新映射。它仅受到轻微限制,主要是由Linux命名空间、功能和cgroups限制。
|
||||
* [**放弃所有功能**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`),仅启用所需功能** (`--cap-add=...`)。许多工作负载不需要任何功能,添加功能会增加潜在攻击的范围。
|
||||
* [**使用“no-new-privileges”安全选项**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **防止进程获取更多权限,例如通过suid二进制文件。
|
||||
* [**限制容器可用的资源**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**。**资源限制可以保护机器免受拒绝服务攻击。
|
||||
* **调整** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(或SELinux)**配置文件,将容器可用的操作和系统调用限制为最低所需。
|
||||
* **调整** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(或SELinux)**配置文件,将容器可用的操作和系统调用限制为最低要求。
|
||||
* **使用** [**官方Docker镜像**](https://docs.docker.com/docker-hub/official_images/) **并要求签名**,或者基于它们构建自己的镜像。不要继承或使用[后门](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/)镜像。同时将根密钥、密码存储在安全位置。Docker计划使用UCP管理密钥。
|
||||
* **定期** **重建**您的镜像以**应用安全补丁到主机和镜像**。
|
||||
* 明智地管理您的**secrets**,使攻击者难以访问它们。
|
||||
* 如果**暴露Docker守护程序,请使用HTTPS**进行客户端和服务器身份验证。
|
||||
* 在Dockerfile中,**优先使用COPY而不是ADD**。ADD会自动解压缩文件并可以从URL复制文件。COPY不具备这些功能。尽量避免使用ADD,以免通过远程URL和Zip文件遭受攻击。
|
||||
* 为每个微服务**使用单独的容器**。
|
||||
* 在Dockerfile中,**优先使用COPY而不是ADD**。ADD会自动解压缩文件并可以从URL复制文件。COPY不具备这些功能。尽量避免使用ADD,以免通过远程URL和Zip文件受到攻击。
|
||||
* 每个微服务**使用单独的容器**
|
||||
* **不要在容器内放置ssh**,“docker exec”可用于ssh到容器。
|
||||
* 使用**更小的**容器**镜像**
|
||||
* 使用**更小**的容器**镜像**
|
||||
|
||||
## Docker越狱/权限提升
|
||||
|
||||
|
@ -370,7 +370,7 @@ file: ./my_secret_file.txt
|
|||
|
||||
## 加固Docker
|
||||
|
||||
* 工具[**docker-bench-security**](https://github.com/docker/docker-bench-security)是一个脚本,检查在生产环境中部署Docker容器时的几十个常见最佳实践。这些测试都是自动化的,基于[CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/)。\
|
||||
* 工具[**docker-bench-security**](https://github.com/docker/docker-bench-security)是一个检查在生产环境中部署Docker容器周围几十种常见最佳实践的脚本。这些测试都是自动化的,基于[CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/)。\
|
||||
您需要从运行Docker的主机或具有足够权限的容器中运行该工具。了解如何在README中运行它:[**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security)。
|
||||
|
||||
## 参考资料
|
||||
|
@ -392,7 +392,7 @@ file: ./my_secret_file.txt
|
|||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
|
||||
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进的**社区工具。\
|
||||
立即获取访问权限:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -404,6 +404,6 @@ file: ./my_secret_file.txt
|
|||
|
||||
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
|
||||
* 探索我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
|
||||
|
|
Loading…
Reference in a new issue