openappsec/openappsec
GitHub: openappsec/openappsec
基于机器学习的开源 Web 应用与 API 威胁防护引擎,通过监督式和无监督双层模型自动检测并拦截未知攻击。
Stars: 1654 | Forks: 127
openappsec/openappsec
[](https://bestpractices.coreinfrastructure.org/projects/6629)
# 关于
[open-appsec](https://www.openappsec.io) (openappsec.io) 基于机器学习构建,提供针对 OWASP-Top-10 和 zero-day 攻击的预防性 Web 应用及 API 威胁防护。它可以作为附加组件部署在 Linux、Docker 或 K8s 上,并支持 NGINX、Kong、APISIX 或 Envoy。
open-appsec 引擎会学习用户通常如何与您的 Web 应用进行交互。然后,它会利用这些信息自动检测超出正常操作范围的请求,并进行进一步的分析,以决定该请求是否为恶意请求。
对于每一个 HTTP 请求,所有部分都会被解码,JSON 和 XML 部分会被提取出来,并应用任何 IP 级别的访问控制。
每一个发往该应用的请求都会经历两个阶段:
1. 多个变量被输入到机器学习引擎中。这些变量要么直接从 HTTP 请求中提取,要么从 payload 的不同部分解码而来,包括攻击指标、IP 地址、user agent、指纹以及许多其他考量因素。机器学习引擎的监督式模型使用这些变量将请求与全球发现的许多常见攻击模式进行比较。
2. 如果请求被识别为有效且合法的请求,则允许该请求并将其转发到您的应用。然而,如果该请求被认为是可疑或高风险的,它将由在您的特定环境中训练出的无监督模型进行评估。该模型使用诸如 URL 和相关用户等信息来生成最终的置信度分数,从而决定是允许还是阻止该请求。

open-appsec 使用两种机器学习模型:
1. 基于数百万次请求(包括恶意和良性请求)离线训练的监督式模型。
* 该仓库中提供了一个**基础模型**。建议在“仅监控”和测试环境中使用。
* **高级模型**更准确,**推荐用于生产环境**,可以从 [open-appsec portal](https://my.openappsec.io)->User Menu->Download advanced ML model 下载。该模型会不时更新,当这些更新发生时,您将收到一封电子邮件。
2. 在受保护的环境中实时构建的无监督模型。该模型使用特定于该环境的流量模式。
# 管理
open-appsec 可以通过多种方式进行管理:
* [声明式配置文件](https://docs.openappsec.io/getting-started/getting-started)
* [Kubernetes Helm Charts 和 annotations](https://docs.openappsec.io/getting-started/getting-started)
* [使用 SaaS Web 管理](https://docs.openappsec.io/getting-started/using-the-web-ui-saas)
open-appsec Web UI:

## 演练场(虚拟实验室)
您可以使用 [Playgrounds](https://www.openappsec.io/playground) 来体验 open-appsec

# 资源
* [项目网站](https://openappsec.io)
* [官方文档](https://docs.openappsec.io/)
* [视频教程](https://www.openappsec.io/tutorials)
# 安装
对于使用 Helm 的 Kubernetes(NGINX / Kong / APISIX / Istio):请遵循[文档](https://docs.openappsec.io/getting-started/start-with-kubernetes)
对于使用安装程序的 Linux(NGINX / Kong / APISIX)(受支持的/预编译的 NGINX 附件列表可在[这里](https://downloads.openappsec.io/packages/supported-nginx.txt)获取):
```
$ wget https://downloads.openappsec.io/open-appsec-install && chmod +x open-appsec-install
$ ./open-appsec-install --auto
```
对于基于 kong Lua 的插件,请遵循[文档](https://docs.openappsec.io/getting-started/start-with-linux)
对于 Linux,如果您构建了自己的包,请使用以下命令:
```
$ install-cp-nano-agent.sh --install --hybrid_mode
$ install-cp-nano-service-http-transaction-handler.sh --install
$ install-cp-nano-attachment-registration-manager.sh --install
```
您可以在第一个命令中添加 ```--token
```、```--email ``` 和 ```registered_server``` 选项。要获取 token,请遵循[文档](https://docs.openappsec.io/getting-started/using-the-web-ui-saas/connect-deployed-agents-to-saas-management-k8s-and-linux)。
对于 Docker:请遵循[文档](https://docs.openappsec.io/getting-started/start-with-docker)
欲了解更多信息,请阅读[文档](https://docs.openappsec.io/)或观看[视频教程](https://www.openappsec.io/tutorials)。
# 仓库
open-appsec GitHub 包含四个主要仓库:
* [openappsec/openappsec](https://github.com/openappsec/openappsec) open-appsec 的主要代码和逻辑。使用 C++ 开发。
* [openappsec/attachment](https://github.com/openappsec/attachment) 连接提供 HTTP 数据的进程(例如 NGINX)与 open-appsec Agent 安全逻辑。使用 C 开发。
* [openappsec/smartsync](https://github.com/openappsec/smartsync) 负责关联来自多个 agent 实例的学习数据,并为每个资产提供统一的学习模型。使用 Golang 开发。
* [openappsec/smartsync-shared-files](https://github.com/openappsec/smartsync-shared-files) smartsync 服务用于存储学习数据的物理存储接口。使用 Golang 开发。
# 编译说明
## 安装外部依赖
在编译服务之前,您需要确保安装以下库和工具的最新开发版本:
* Boost
* OpenSSL
* PCRE2
* libxml2
* GTest
* GMock
* cURL
* Redis
* Hiredis
* MaxmindDB
* yq
在 Alpine 上安装这些包的示例:
```
$ apk update
$ apk add boost-dev openssl-dev pcre2-dev libxml2-dev gtest-dev curl-dev hiredis-dev redis libmaxminddb-dev yq
```
## 编译和打包 Agent 代码
1. 克隆此仓库
2. 运行 CMake 命令
3. 运行 make install 命令
```
$ git clone https://github.com/openappsec/openappsec.git
$ cd openappsec/
$ cmake -DCMAKE_INSTALL_PREFIX=build_out .
$ make install
$ make package
```
## 将 Agent 代码放入 Alpine docker 镜像中
一旦 Agent 代码被编译并打包,就可以创建一个运行它的 Alpine 镜像。这需要具有执行 `docker` 命令的权限。
```
$ make docker
```
这将为您的 docker 创建一个名为 `agent-docker` 的本地镜像。
## 将 Agent docker 镜像部署为容器
要将 Nano-Agent 作为容器运行,需要执行以下步骤:
1. 如果您正在使用容器管理系统/计划使用您的 CI 部署容器,请将 agent docker 镜像添加到可访问的 registry 中。
2. 如果您计划使用 open-appsec UI 管理 agent,请确保从管理门户获取 agent token 并执行 Enforce。
3. 使用以下命令运行 agent(其中 -e https_proxy 参数是可选的):
`docker run -d --name=agent-container --ipc=host -v=:/etc/cp/conf -v=:/etc/cp/data -v=:/var/log/nano_agent -e https_proxy= -e registered_server= -it /cp-nano-agent [--token | --standalone]`
示例:
```
$ docker run -d --name=agent-container --ipc=host -v=/home/admin/agent/conf:/etc/cp/conf -v=/home/admin/agent/data:/etc/cp/data -v=/home/admin/agent/logs:/var/log/nano_agent –e https_proxy=user:password@1.2.3.4:8080 -e registered_server='nginx' -it agent-docker /cp-nano-agent --standalone
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e67f2abbfd4 agent-docker "/cp-nano-agent --hybrid-mode" 1 minute ago Up 1 minute agent-container
```
请注意,如果您在本地管理安全策略,则不需要使用管理门户的 token。但是,在这种情况下,您必须使用 --standalone 标志。此外,仅当您希望在 agent 重启/升级/崩溃及其重新执行后保持持久化时,命令中的 volumes 才是必需的。
最后,为了让 agent 能够访问受保护的附件(NGINX server)的共享内存,--ipc=host 参数是必需的。
支持的 registered_server 有:
- NGINX
- Kong
- KongLua
- APISIX
- Envoy
4. 使用 [Attachment Repository](https://github.com/openappsec/attachment) 创建或替换 NGINX 容器。
这将使用 agent docker 镜像运行一个 docker 容器。
# 安全
### 安全审计
open-appsec 代码于 2022 年 9 月至 10 月由独立的第三方进行了审计。
请参阅[完整报告](https://github.com/openappsec/openappsec/blob/main/LEXFO-CHP20221014-Report-Code_audit-OPEN-APPSEC-v1.2.pdf)。
### 报告安全漏洞
如果您在 open-appsec 中发现漏洞或潜在漏洞,请通过 security-alert@openappsec.io 告知我们。我们将在 24 小时内发送确认邮件以确认您的报告,并在我们确定问题属实与否时,向您发送一封额外的邮件。
# 许可证
open-appsec 是开源的,并在 Apache 2.0 许可证下提供。
基础 ML 模型是开源的,并在 Apache 2.0 许可证下提供。
高级 ML 模型是开源的,并在机器学习模型许可证下提供,该许可证可在下载的 tar 文件中找到。标签:Apex, API安全, AppImage, Bash脚本, CISA项目, JSON输出, NGINX, WAAP, Web应用防火墙, 威胁防护, 子域名突变, 安全测试工具, 搜索引擎查询, 机器学习, 请求拦截