
La única herramienta de código abierto para analizar vulnerabilidades y problemas de configuración en contenedor(es) docker en ejecución y redes docker.
DockerENT es una herramienta activE de escaneo de seguridad de aplicaciones en tiempo de ejecución (herramienta RAST). Es un marco de trabajo basado en plugins escrito en Python. Viene con una aplicación CLI y una interfaz web limpia escrita con StreamLit.
DockerENT ha sido diseñado para detectar configuraciones de seguridad débiles en implementaciones de producción que pueden tener consecuencias graves. Esta aplicación se conecta con los contenedores en ejecución en el sistema y obtiene la lista de configuraciones de tiempo de ejecución débiles y vulnerables y genera un informe. Si se invoca a través de la interfaz web, puede mostrar el informe de escaneo y auditoría en la propia interfaz de usuario.
¿Tienes prisa por probarlo? Descarga la última versión estable de PyPi y ejecuta la aplicación web, todo lo demás es intuitivo.
pip install DockerENT
Luego ejecuta la aplicación así:
DockerENT -w
Eso es todo.
DockerENT ha sido diseñado teniendo en cuenta la simplicidad y la usabilidad. Actualmente solo tienes que clonar el repositorio y descargar las dependencias o construir el Dockerfile. Una vez que las dependencias estén instaladas en el sistema local, podemos ejecutar la herramienta y analizar las configuraciones de tiempo de ejecución de los contenedores en ejecución.
# Descargar y configurar
git clone https://github.com/r0hi7/DockerENT.git
cd DockerENT
make venv
source venv/bin/activate
# Ejecutar
python -m DockerENT --help
usage: Find the vulnerabilities hidden in your running container(s).
[-h] [-d [DOCKER_CONTAINER]] [-p [DOCKER_PLUGINS]]
[-d-nw [DOCKER_NETWORK]] [-p-nw [DOCKER_NW_PLUGINS]] [-w]
[-n [PROCESS_COUNT]] [-a] [-o [OUTPUT]]
optional arguments:
-h, --help show this help message and exit
-w, --web-app Run DockerENT in WebApp mode. If this parameter is
enabled, other command line flags will be ignored.
-n [PROCESS_COUNT], --process [PROCESS_COUNT]
Run scans in parallel (Process pool count).
-a, --audit Flag to check weather to audit results or not.
-d [DOCKER_CONTAINER], --docker [DOCKER_CONTAINER]
Run scan against the running container.
-p [DOCKER_PLUGINS], --plugins [DOCKER_PLUGINS]
Run scan with only specified plugins.
-p-nw [DOCKER_NW_PLUGINS], --nw-plugins [DOCKER_NW_PLUGINS]
Run scan with only specified plugins.
-d-nw [DOCKER_NETWORK], --docker-network [DOCKER_NETWORK]
Run scan against running docker-network.
-o [OUTPUT], --output [OUTPUT]
Output plugin to write data to.
# o mediante el contenedor
docker build . -t dockerent
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 8501:8501 --name dockerent dockerent
# Luego solo abre tu navegador en http://localhost:8051
Mira este rápido video para comenzar.
file y html.demo.cp DockerENT/docker_plugins/docker_sample_plugin.py DockerENT/docker_plugins/docker_demo_plugin.py
_plugin_name = 'demo_plugin'
def scan(container, output_queue, audit=False, audit_queue=None):
_log.info('Staring {} Plugin ...'.format(_plugin_name_))
res = {}
result = {
'test_class': {
'TEST_NAME': ['good']
}
}
res[container.short_id] = {
_plugin_name_: result
}
# Do something magical.
_log.info('Completed execution of {} Plugin.'.format(_plugin_name_))
'''Make Sure you put dict of following structure in Q.
{
'contiainer_id': {
'plugin_name': {
'test_name_demo1': {
resultss:[]
},
'test_name_demo2': {
results: []
}
}
}
}
'''
output_queue.put(res)
if audit:
_audit(container, res, audit_queue)
def _audit(container, results, audit_queue):
'''Make Sure to add dict of following structure to Audit Q
res = {
"container_id": [
"_plugin_name_, WARN/INFO/ERROR, details"
]
}
'''
# Magical logic to perform Audit.
audit_queue.put(res)
| Nombre del Plugin | Archivo del Plugin | Característica | Auditoría |
|---|---|---|---|
| CMD_HISTORY | File | Identificar el historial del shell | Historial de root y del usuario |
| FILESYSTEM | File | Identificar sistemas de archivos RW | Si hay sistemas de archivos RW presentes. |
| NETWORK | File | Identificar el estado de la red | Identifica todos los puertos mapeados. |
| PLAINTEST_PASSWORD | File | Identificar contraseñas en diferentes archivos | |
| SECURITY_PROFILES | File | Identificar perfiles de seguridad débiles | Lista perfiles de seguridad débiles. |
| USER_INFO | File | Identificar información del usuario | Lista permisos en passwd y otros archivos sensibles |
| SYSTEM_INFO | File | Identificar información del sistema Docker | Sin auditoría |
| FILES_INFO | File | Identificar directorios y archivos escribibles por cualquier usuario | Lista todos esos archivos. |
| PROC_INFO | File | Identificar la lista de procesos en el sistema Docker |
-n <count> para especificar los procesadores en paralelo.JSON y HTML.JSON son voluminosos.