Este proyecto es un escáner de seguridad de Docker minimalista pero potente implementado en Go. El escáner verifica los contenedores en ejecución en busca de problemas de seguridad comunes, como ejecutarse como root, puertos expuestos y actualizaciones de seguridad faltantes. El script utiliza el SDK de Docker para Go para interactuar con Docker.
- Verificación de Ejecución como Root: Identifica contenedores que se ejecutan como el usuario root.
- Verificación de Puertos Expuestos: Detecta puertos expuestos en contenedores en ejecución.
- Actualizaciones de Seguridad Faltantes (Simplificado): Una verificación simplificada de actualizaciones de seguridad faltantes.
- Go (Golang): Asegúrate de tener Go instalado en tu sistema. Puedes descargarlo desde golang.org.
- Docker: Asegúrate de tener Docker instalado y en ejecución en tu sistema. Puedes descargarlo desde docker.com.
docker-security-scanner/
├── Dockerfile
├── README.md
├── .gitignore
└── main.go
-
Clonar el Repositorio:
git clone https://github.com/elliotsecops/docker-security-scanner.git cd docker-security-scanner
-
Construir el Escáner de Seguridad de Docker:
go build -o docker-security-scanner
-
Asegúrate de que Docker esté en Ejecución:
- Asegúrate de que Docker esté en ejecución en tu sistema. Puedes verificarlo ejecutando:
docker ps
- Asegúrate de que Docker esté en ejecución en tu sistema. Puedes verificarlo ejecutando:
-
Ejecutar el Escáner de Seguridad de Docker:
./docker-security-scanner
Cuando ejecutes el escáner, mostrará los resultados de las verificaciones de seguridad para cada contenedor en ejecución. Aquí tienes un ejemplo de cómo podría verse la salida:
Listando contenedores...
Conectando al socket Unix...
Encontrados 1 contenedores
Inspeccionando contenedor <container_id>...
El contenedor <container_id> se está ejecutando como root
El contenedor <container_id> tiene el puerto expuesto: 80/tcp -> 8080
El escáner verifica si un contenedor se está ejecutando como el usuario root inspeccionando la sección Config
de la respuesta JSON del contenedor. Si el contenedor se está ejecutando como root, mostrará:
El contenedor <container_id> se está ejecutando como root
El escáner verifica los puertos expuestos examinando la sección HostConfig
de la respuesta JSON del contenedor. Si el contenedor tiene puertos expuestos, mostrará:
El contenedor <container_id> tiene el puerto expuesto: <port> -> <host_port>
Esta verificación es más compleja y generalmente implica inspeccionar el sistema de archivos del contenedor o usar herramientas de gestión de paquetes para verificar paquetes desactualizados. La implementación actual es simplificada y no realiza una verificación detallada.
Puedes personalizar el escáner para incluir más verificaciones de seguridad o modificar las existentes. Aquí tienes algunas ideas:
-
Verificación de Archivos Sensibles:
- Añade una verificación para inspeccionar el sistema de archivos del contenedor en busca de archivos sensibles (por ejemplo,
.env
,config.json
).
- Añade una verificación para inspeccionar el sistema de archivos del contenedor en busca de archivos sensibles (por ejemplo,
-
Verificación de Contraseñas Débiles:
- Añade una verificación para inspeccionar las cuentas de usuario del contenedor en busca de contraseñas débiles.
-
Verificación de Servicios Innecesarios:
- Añade una verificación para inspeccionar los servicios en ejecución del contenedor en busca de servicios innecesarios o inseguros (por ejemplo, SSH).
¡Las contribuciones son bienvenidas! Si tienes ideas para nuevas verificaciones de seguridad o mejoras a las existentes, no dudes en enviar un pull request!
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
This project is a minimalist yet powerful Docker security scanner implemented in Go. The scanner checks running containers for common security issues such as running as root, exposed ports, and missing security updates. The script leverages the Docker SDK for Go to interact with Docker.
- Running as Root Check: Identifies containers running as the root user.
- Exposed Ports Check: Detects exposed ports on running containers.
- Missing Security Updates (Simplified): A simplified check for missing security updates.
- Go (Golang): Ensure Go is installed on your system. You can download it from golang.org.
- Docker: Ensure Docker is installed and running on your system. You can download it from docker.com.
docker-security-scanner/
├── Dockerfile
├── README.md
├── .gitignore
└── main.go
-
Clone the Repository:
git clone https://github.com/elliotsecops/docker-security-scanner.git cd docker-security-scanner
-
Build the Docker Security Scanner:
go build -o docker-security-scanner
-
Ensure Docker is Running:
- Make sure Docker is running on your system. You can verify this by running:
docker ps
- Make sure Docker is running on your system. You can verify this by running:
-
Run the Docker Security Scanner:
./docker-security-scanner
When you run the scanner, it will output the results of the security checks for each running container. Here's an example of what the output might look like:
Listing containers...
Dialing Unix socket...
Found 1 containers
Inspecting container <container_id>...
Container <container_id> is running as root
Container <container_id> has exposed port: 80/tcp -> 8080
The scanner checks if a container is running as the root user by inspecting the Config
section of the container's JSON response. If the container is running as root, it will output:
Container <container_id> is running as root
The scanner checks for exposed ports by examining the HostConfig
section of the container's JSON response. If the container has exposed ports, it will output:
Container <container_id> has exposed port: <port> -> <host_port>
This check is more complex and typically involves inspecting the container's filesystem or using package management tools to check for outdated packages. The current implementation is simplified and does not perform a detailed check.
You can customize the scanner to include more security checks or modify the existing ones. Here are some ideas:
-
Check for Sensitive Files:
- Add a check to inspect the container's filesystem for sensitive files (e.g.,
.env
,config.json
).
- Add a check to inspect the container's filesystem for sensitive files (e.g.,
-
Check for Weak Passwords:
- Add a check to inspect the container's user accounts for weak passwords.
-
Check for Unnecessary Services:
- Add a check to inspect the container's running services for unnecessary or insecure services (e.g., SSH).
Contributions are welcome! If you have ideas for new security checks or improvements to the existing ones, feel free to submit a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.