DockerENT 是一款活跃运行时应用安全扫描工具(RAST 工具)。它是一个基于 Python 编写的插件化框架。它带有 CLI 应用程序和一个使用 StreamLit 编写的简洁 Web 界面。
DockerENT 旨在检测生产部署中可能导致严重后果的薄弱安全配置错误。该应用程序与系统中的运行中容器连接,获取薄弱和有漏洞的运行时配置列表,并生成报告。 如果通过 Web 界面调用,它可以在 UI 本身中显示扫描和审计报告。
急着测试它?从 PyPi 下载最新的 稳定版,然后运行 Web 应用,其他一切都很直观。
pip install DockerENT
然后像这样运行应用程序:
DockerENT -w
这就行了。
DockerENT 的设计始终以简洁和易用为宗旨。目前,你只需克隆仓库并下载依赖项,或者构建 Dockerfile。一旦依赖项在本地系统安装完成,我们就可以运行该工具并分析运行中容器的运行时配置。
# 下载并设置
git clone https://github.com/r0hi7/DockerENT.git
cd DockerENT
make venv
source venv/bin/activate
# 运行
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.
# 或者通过容器
docker build . -t dockerent
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 8501:8501 --name dockerent dockerent
# 然后只需在浏览器中打开 http://localhost:8051
观看这个快速入门视频。
file 和 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)
-n <count> 来指定并行处理的进程数。JSON 和 HTML 文件。JSON 报告体积较大。| 插件名称 | 插件文件 | 功能 | 审计 |
|---|
| CMD_HISTORY | 文件 | 识别 shell 历史记录 | Root 历史记录和用户 shell 历史记录 |
| FILESYSTEM | 文件 | 识别读写文件系统 | 如果存在读写文件系统 |
| NETWORK | 文件 | 识别网络状态 | 识别所有映射端口 |
| PLAINTEST_PASSWORD | 文件 | 识别不同文件中的密码 | |
| SECURITY_PROFILES | 文件 | 识别薄弱安全配置文件 | 列出薄弱安全配置文件 |
| USER_INFO | 文件 | 识别用户信息 | 列出 passwd 及其他敏感文件的权限 |
| SYSTEM_INFO | 文件 | 识别 Docker 系统信息 | 无审计 |
| FILES_INFO | 文件 | 识别全局可写目录和文件 | 列出所有此类文件 |
| PROC_INFO | 文件 | 识别 Docker 系统中的进程列表 |