Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
NGWAF — 基于机器学习的反馈式WAF的第一个迭代版本 | Kitploit
工具/GitHubGitHub/fa-pengfei/ngwaf
防御工具IDS/IPS规避WAF绕过Web安全渗透测试机器学习学习与教育红队异常检测实验室与实践
GitHubfa-pengfei/ngwaf

NGWAF

基于机器学习的反馈式WAF的第一个迭代版本

6073年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

N3XT-G3N Web应用防火墙(NGWAF)

NGWAF 由 @yupengfei、@zhangbosen、@matthewng 和 @elizabethlim 创建。

特别感谢 @ruinahkoh 在 NGWAF 初始阶段所做的贡献。

NGWAF 是一个实验性概念验证,目前尚未准备好投入生产使用。

目录

  1. 动机

    ​ NGWAF 如何工作?

    ​ NGWAF 的关键考量

  2. 组件 | NGWAF 的齿轮

    ​ 大脑:基于机器学习的 WAF

    ​ 镜屋:可扩展的交互式隔离环境

    ​ 图书馆:强化大脑的再训练序列

  3. 设置 NGWAF

    ​ 要求

    ​ 安装与使用

  4. 免责声明及其他考量

  5. 许可

动机

自21世纪初以来,随着Web应用的爆炸式增长,基于Web的攻击也日益猖獗。一种常见的解决方案是Web应用防火墙(WAF)。然而,调整当前WAF的规则以改进检测机制可能复杂且困难。NGWAF旨在通过一种新颖的机器学习和隔离到蜜罐架构来解决这些缺点。

受运营WAF时实际痛点的启发,NGWAF旨在通过以下流程简化并重新构想WAF操作:

痛点NGWAF 特性
检测机制和规则的维护可能很复杂利用机器学习来自动化创建和更新检测机制的过程
立即阻止恶意流量减少了从威胁行为者行为中学习以改进未来WAF的机会通过重定向隔离消除威胁,而非传统的丢弃和阻止恶意流量

为了简化部署并使其可移植,我们使用docker将架构中的不同组件容器化,并在docker-compose文件中进行了配置。这使得在新安装系统上运行变得快速而简单,因为依赖项由docker自动处理。该部署可以扩展为部署到本地或云提供商的kubernetes集群中,从而使其具有可扩展性,用户可以通过增加节点/容器(pod)数量来处理大量流量。

该部署已在 macOS(Docker Desktop)和 Linux(Ubuntu)上测试。

NGWAF 如何工作?

NGWAF 开箱即用,包含三个关键组件,这些组件如上所述均已容器化,并且可根据预期用途进行扩展。 受保护的资源可以通过在设置中进行部署更改来自定义。


NGWAF 的高层架构,展示了不同参与方的预期流量流向

关键优势

NGWAF 的设计考虑了以下关键用户优势:

1. 规则复杂性降低

NGWAF 用深度学习模型取代了传统的规则集,以降低管理和更新规则的复杂性。NGWAF 的机器学习不是手动编辑规则,而是自动从恶意数据中学习模式。从隔离环境中收集的数据会自动清洗并分批处理,如果需要,可以重新训练到我们的检测模型中。

2. 网络欺骗

NGWAF 采用了一种新颖的架构,包含一个交互式隔离环境,用于隔离潜在的攻击者。与传统WAF在检测到威胁时直接阻止不同,NGWAF 将威胁行为者引导至仿真系统,将其困住以减轻其恶意行为的影响。该环境还充当收集当前攻击方法的陷阱,从而能够观察和收集恶意数据。这些数据可用于进一步提高 NGWAF 的检测能力。


NGWAF 运行中:检测到 SQL 注入后,NGWAF 将攻击重定向到我们的隔离环境,而不是丢弃或阻止该尝试。

3. 符合国际公认标准

创建 NGWAF 的指导原则是防范开放Web应用程序安全项目(OWASP)标准意识文档 The OWASP Top 10 2021 中强调的风险。

NGWAF 的训练数据和合规性检查均基于此要求进行收集和执行。

NGWAF 的组件

1. 大脑:基于机器学习的 WAF

有了神经网络,谁还需要手动操作

传统的规则集需要分析师随着时间的推移手动识别和添加规则,而 NGWAF 则利用端到端的机器学习管道进行检测,大大降低了 WAF 规则管理的复杂性,尤其是在检测复杂负载时。

基础模型

为此,我们首先需要创建一个基础模型和架构,供用户开始使用,之后用户可以使用从自己应用收集的数据进行重新训练和微调:

  1. 我们从多个公开数据集中收集了恶意和非恶意负载(1, 2, 3)
  2. 我们没有手动识别规则,而是利用机器学习和深度学习来自动化从先前恶意数据中学习模式的过程。我们试验了几种模型架构,最终模型采用了循环神经网络。

基础模型的通用架构是一个带双向LSTM模块的简单RNN,如下所示:


图片来自 Tensorflow(链接)

性能

通过使用这种RNN架构,我们在性能上比简单模型有所提升:

模型架构准确率F1 分数

维护与重新训练

尽管我们包含了来自各种应用的日志以提高基础模型的泛化能力,但进一步的模型维护和重新训练对于以下方面至关重要:

  1. 针对用户特定应用的流量调整模型以获得更好性能
  2. 随着威胁行为者发现新的方法和机会,减少模型随时间的性能退化

为了解决这个问题,NGWAF 的用户受益于我们打包的端到端模型重新训练管道,可以通过几个简单的步骤轻松触发模型维护,而无需深入研究底层细节。(参见下面的第3节)。

2. 镜屋:可扩展的交互式隔离环境

别让他们走,拘留他们!

与传统的WAF在检测到恶意流量时直接阻止或丢弃不同,NGWAF 采取更灵活的方法。它将恶意行为者重定向并拘留在一个隔离环境中。该环境包含各种交互式仿真蜜罐,以尝试收集更多的攻击方法/数据,这些数据将用于潜在地提高 NGWAF 对更现代和复杂攻击的检测率。

恶意数据的捕获与自动清洗(用于重新训练)

目前,NGWAF 的隔离环境会将被困攻击者提交的所有数据转发到我们的 ELK 堆栈进行分析和可视化。 数据会被自动清洗为 HTTP 请求的不同组件,然后以 JSON 格式在环境的后端内部打包,之后再转发。 这有助于降低在启动重新训练过程时清理和索引数据所需的人力成本。

创建自定义隔离环境

NGWAF 目前允许用户更改隔离环境中蜜罐的前端外观(基于 Drupot 的自定义版本)。用户只需将 docker volume 中的 assets 文件夹替换为他们选择的前端资源即可。

NGWAF 也允许用户将自有的蜜罐作为隔离环境的一部分进行链接。用户只需将蜜罐的 HTTP 请求转发到环境的后端服务器(后端进程会自动清洗数据并将其转发到分析仪表板 - ELK 堆栈)。

3. 图书馆:强化大脑的再训练序列

不学习就不算真正的聪明

随着新的负载和攻击向量不断出现,为了确保安全,升级检测能力至关重要。因此,NGWAF 内置了一个重新训练功能,以确保防御者能够训练机器学习模型来检测这些更新的负载。即使不熟悉数据科学或神经网络,用户也能通过这个简单界面微调模型,因为复杂的步骤已经由系统处理。

工作方式

用户只需上传一小部分来自自己实时系统的已标记数据(例如,几千条),这些数据将用于在后端微调现有模型:

  1. 引入新概念:模型的文本向量化层的词汇表将扩展以包含新数据集中的新术语。同时也会为新术语初始化新的嵌入。
  2. 保留已有知识:为了利用先前模型中已有的“所学知识”,先前模型中已知词汇的嵌入和 LSTM 模块将被加载。这也有助于加速训练过程。
  3. 然后,这个更新后的架构将在新数据集上进行训练,训练完成后,新模型将被部署到实时 WAF 端点。

训练完成后,用户还会收到一些简要的模型诊断信息(例如,在测试集上的性能以及在不同分数阈值下的表现),以评估新模型。

用户流程

要触发重新训练过程,请访问仪表板并按照以下步骤操作:

  1. 创建一个用于上传的新数据集(.csv),包含以下列:

    • payload [str]:这应该是来自你系统的负载,或一些基于字符串的示例(例如 SQL 注入示例)
    • label [int]:非恶意示例为 0,恶意示例为 1
    • is_url [bool]:如果负载来自你的系统(即包含路径和设备等其他系统信息),则为 TRUE;如果是基于字符串的示例(例如 "1==1"),则为 FALSE
  2. 导航到 http://localhost:8088 查看 NGWAF 管理面板。

  3. 选择“导入数据集”选项卡,上传你创建的训练集。

  1. 在“管理数据集”选项卡下确认训练集已成功上传。
  1. 在“管理模型”选项卡下,选择你想要重新训练模型的数据集,然后点击“更新 WAF 模型”按钮。
  1. 恭喜!模型应在一段时间后完成重新训练。你应该会看到一些模型诊断信息返回。

4. 附加功能:

NGWAF 使用 ELK 堆栈捕获通过 NGWAF 的网络数据日志,允许用户监控通过 NGWAF 的流量以进行进一步分析。

NGWAF 还带有实时 Telegram 通知,以通知所有者 NGWAF 检测到的实时恶意威胁。

示例使用场景

  1. 新部署的普通应用程序(使用内建的 Web 克隆器或创建另一个重复部署作为隔离环境)
  2. 集成到现有的蜜罐/蜜网中(更新配置以指向蜜罐/蜜网)

设置 NGWAF

要求

已测试的操作系统

  1. macOS(Docker Desktop)
  2. Linux

ML WAF 组件

  1. Python
  2. request
  3. fastapi
  4. pandas
  5. scikit-learn
  6. tensorflow
  7. urllib

WAF 管理面板组件

  1. fastapi
  2. scikit-learn
  3. nltk
  4. pandas
  5. Create React App
  6. Flatlogic 的 React Material Admin 模板

解码层

  1. Cyberchef 服务器

缓存层

  1. Redis

隔离环境

  1. Drupot
  2. Elastic Search 堆栈组件(Elasticsearch、Logstash、Kibana、Filebeats)

Web 应用

  1. DVWA
  2. OWASP Juice Shop
  3. VulnLab

安装与使用

在运行 Docker 的情况下,使用以下命令运行以下文件:

./run.sh

要替换目标,请将 /waf/WafApp/waf.py 文件中的 dest_server 和 honey_pot_server 变量指向正确的目标:

root@kitploit:~
# 替换我
dest_server = "dvwa"
honey_pot_server = "drupot:5000"

一旦 Docker 容器启动,你可以访问本地主机,以下端口正在运行这些服务:

还需要在 waf-secrets.env 文件中设置以下内容:

root@kitploit:~
# ML 模型 API 端点
API_ENDPOINT="https://xxxxx.xxx"
API_KEY="******************"

# Telegram 配置
TELEGRAM_CHAT_ID="-57893457893457345"
TELEGRAM_TOKEN="******************"

同时需要在 waf-admin-secrets.env 文件中设置以下内容:

root@kitploit:~
# ML 模型 API 端点
API_ENDPOINT="https://xxxxxx.xxx"
API_KEY="******************"
BUCKET_NAME="******************"

ACCESS_KEY_ID="******************"
SECRET_ACCESS_KEY="******************"

SQL_USERNAME="******************"
SQL_PASSWORD="******************"
SQL_SERVER="******************"
SQL_DATABASE_NAME="******************"

免责声明及其他考量

NGWAF 是一个正在进行的开源项目,功能和特性可能会在每次补丁中发生变化。 如果你有兴趣贡献,请随时创建 issue 或 pull request!

许可

许可证

MIT 许可证

下载工具
我们的最终模型0.9950.993
无LSTM模块的神经网络0.9560.891
决策树0.8780.840
逻辑回归0.9460.914
端口服务备注凭据(如有)
8080DVWAWAF 所在位置admin:password
5601Elasticsearch查看日志elastic:changeme
8088管理仪表板管理 WAF 模型的仪表板
5001Drupot蜜罐