TrisenYu/b0gus

GitHub: TrisenYu/b0gus

b0gus:基于Go的欺骗陷阱工具,用于网络安全评估和红蓝对抗。

Stars: 572 | Forks: 41

查看以下已翻译成不同语言的 b0gus 介绍。 - [中文](readmes/zh_cn.md) ## TL;DR b0gus 是一个低交互、配置导向的 golang 欺骗陷阱。 ![arch.png](https://raw.githubusercontent.com/TrisenYu/b0gus/dev/../assets/design/en/arch-design.png) 此外,项目结构的含义如下表所示。 | 目录/文件 | 功能 | |:---------------------:|:-------------------------------------------------------------------------------------------------------------| | `.github` | GitHub CI/DependentBot 配置和少量说明文档 | | `_examples` | 单个模块的示例,分别编译成可执行程序 | | `_future-feats` | 未来新功能 | | `assets` | 存储静态文件(如 i18n 和提示)的包,并作为接口暴露给其他模块 | | `configs` | 配置目录,并暴露服务配置结构或日志给其他模块 | | `crypto_aux` | 与密码学相关的模块 | | `databases` | 与数据库交互的模块 | | `diff_tests` | 测试代码包 | | `docs` | 主要用于存储说明文档的目录 | | `internal` | 内部功能函数模块 | | `llm` | 作为 LLM 客户端与 LLM 服务提供商交互的模块 | | `net_aux` | 简化套接字编程的模块 | | `services` | 存储欺骗陷阱管理服务和特定服务定义的模块 | | `terminal` | 终端模拟模块 | | `tools` | 自动生成代码定义或静态资源文件的工具包 | | `b0gus.go` | 整个程序当前的入口点 | | `makefile` | 用于简化操作命令 | | `buildImg.Dockerfile` | 编译程序的 Dockerfile | ### 功能 目前,**bogus** 仍处于积极开发阶段。 一些业务功能尚未完全开发。 b0gus 支持将 _SSH_、_HTTP_、_SMTP_ 和 _NTP_ 作为功能性的欺骗陷阱部署。 这里的“功能性”意味着您可以分配非特权端口号, 从交互中获取记录(等 `攻击者 IP`、`用户名`、`密码`、`公钥`、 `ssh 版本`、`访问时间`、`攻击模式`) 并将服务配置实时重新加载。 ### 构建 & 部署 构建所需的主要外部依赖项是 [antlr4](https://github.com/antlr/antlr4) 和 [protoc-gen-go](https://pkg.go.dev/google.golang.org/protobuf). 前者需要一个本地的 Java 解释器(Openjdk-25-jdk)。在本地编译后, 通过脚本写入环境变量以支持特定语言的 AST 解析和 遍历。 对于后者,在基于 Debian 的 Linux 环境中, 可以通过运行 `sudo apt install -y protoc-gen-go` 直接获得编译支持。 它主要用于将特定数据以 Protobuf 格式存储到数据库中。 请参考 [buildImg.Dockerfile](../buildImg.Dockerfile) 中定义的构建阶段,以了解这两个依赖项。 一旦确认这两个依赖项可用, 在项目目录中运行 `make release` 以编译生产二进制可执行文件。 如果依赖项缺失,构建过程将不会修改项目内嵌入的多个预编译代码文件, 而将直接使用现有的预编译版本进行编译。 对于交叉编译,需要提前指定 `Arch` 和 `osType` 构建参数。 要本地部署 b0gus,请确保主机运行一个具有可用数据库后端的 Linux 系统。 推荐使用 PostgreSQL 作为首选的分布式备份能力。 目前不支持以用户级服务的方式本地安装和配置。 ### 贡献指南 只有满足以下所有要求,才能合并拉取请求(PR): 1. 分叉此存储库。 2. 基于分支 `dev` 使用命令创建一个名为 `feat-xxx` 的新分支: `git checkout -b feat-xxx`。这里,`xxx` 指的是您实现的新功能,以 解决现有问题或完成缺失的功能。 3. 在提交更改之前,遵守 [代码质量指南](#Code Quality Guidelines)。 对于提交信息,使用标准前缀,如 `feat`、`chore`、`add` 和 `del`,以清楚地 指示功能添加或代码删除。同时指定主要修改的文件和 更改的简要描述。另外,将自己添加到 [作者列表](./AUTHORS)。 4. 确认您的实现在本地的环境中运行正常,没有逻辑错误、并发问题、内存泄漏、 越界访问或其他异常行为后,再从您的分支提交拉取请求。 如果您在 `diff_tests` 下添加了单元测试,请确保您的新功能的所有测试都完全通过。 **确保在提交之前对拉取请求中的所有提交进行完全验证**。 5. 每个拉取请求都必须由至少一位不是 PR 作者的项目维护者 进行审查和批准,并遵守 [拉取请求建议](#Pull Request Recommendations) 中所述的要求。 您的分支将在代码审查和综合评估后合并,您将成为 b0gus 的贡献者。 #### 拉取请求建议 鼓励新贡献者从修复简单的公开问题开始。 重新基座您的 PR 而不是反复将主分支或开发分支合并到功能分支中, 这会污染提交历史。 在审查过程中,如果需要更改,请直接使用 `git commit --amend` 更新现有的提交。 要推送更新到您的分叉存储库,请使用 `git push --force-with-lease`。 #### 代码质量指南 此存储库对所有在此编写的代码强制执行限制性规则: 1. 在单个函数内,原则上 **缩进不应超过 4 级**, 行数不应超过 100 行,每列的字符数不应超过 110。 1. 如果不可避免地超过 4 级缩进但不超过 5 级, 该范围内的总行数(包括注释)不应超过 10 行。 2. 一旦缩进级别 ≥ 6,则拒绝审查或接受拉取请求。 3. Go 结构体标签暂时免于列限制。 2. 对于函数签名/函数定义,输入和 输出参数的总数不应超过 6。当定义过长时, 应遵循以下参考格式。 3. 为了满足国际化要求,**所有注释都必须用英语编写**。 同时,为任何复杂和晦涩的部分提供详细说明。 4. 在遵守前三个约束的前提下, 请在创建分支拉取请求之前,使用本地 lint 或 代码格式化工具自动格式化您的实现代码。 5. 除了自动生成的代码实现和单元测试代码外, 建议每个文件的代码行数不超过 2000。 ``` from typing import NoReturn # 使用其声明类型的大写下划线命名常量 UPPER_CONST_WITH_TYPE_DEF: int = 0 mapper = { "a": 0, "b": 1, "c": 2, "d": 3, } array = [ 0xa, 0xb, 0xc, 0xd, # It is recommended to wrap lines at a fixed column width. 0xe, 0xf, 0x0, 0x1 ] # 通过驼峰命名法命名一个类 class CamelStruct: def __init__(self): pass # 通过下划线命名法命名一个函数或变量 def foo_snake( a: int, b: str, # Multiple parameters per line are allowed if the column limit is not exceeded c: float, d: tuple[int, int], e: dict ) -> NoReturn: # The closing parenthesis, return type, and opening brace (if applicable) of the function are placed on the same line. pass ``` ``` package tmp func tmpCamel( x string, y int, z bool, w error, ) (int, error) { // define you implementation return 0, nil } ``` ``` // If you need to use C language, the format is as follows. int fib(int argc, char *argv[]) { int a = 1, b = 1, c; for (int i = 0; i < 16; i++) { // Braces must be retained even for a single line statement c = a + b; // not recommend to write in one line: a = b, b = c; a = b; b = c; } printf("%d", c); return 0; } static inline void hello_world(int a1, int a2) { if (a1 < a2) { return; } else { printf("%d", a1); } } /* definition format of function do_something is also acceptable */ static inline struct abc_def do_something() { struct abc_def res; return res; } // require alignment. static __attribute__((always_inline)) __attribute__((unused)) void retry( int a1, int b1, const void* a2, void *b2 ); ``` ### 参考 在代码或文档中提到的。 ### 许可证 b0gus 在 BSD 3-Clause 许可证的条款下分发。有关详细信息,请参阅 b0gus 根目录中包含的文件 `license`。 ### 待办事项列表 - 如果可能,设置 [oss-fuzz](https://google.github.io/oss-fuzz/getting-started/new-project-guide/) - 源代码中提到的其他待办事项 - 尝试在 Windows 上运行
标签:EVTX分析, GitHub CI, Go 语言, 低交互, 依赖管理, 内部模块, 功能模块, 加密模块, 国际化, 提示信息, 数据库交互, 文档存储, 日志审计, 未来特性, 测试代码, 网络安全, 蜜罐, 证书利用, 请求拦截, 配置驱动, 隐私保护, 静态文件