TrisenYu/b0gus
GitHub: TrisenYu/b0gus
b0gus:基于Go的欺骗陷阱工具,用于网络安全评估和红蓝对抗。
Stars: 572 | Forks: 41
查看以下已翻译成不同语言的 b0gus 介绍。
- [中文](readmes/zh_cn.md)
## TL;DR
b0gus 是一个低交互、配置导向的 golang 欺骗陷阱。

此外,项目结构的含义如下表所示。
| 目录/文件 | 功能 |
|:---------------------:|:-------------------------------------------------------------------------------------------------------------|
| `.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 语言, 低交互, 依赖管理, 内部模块, 功能模块, 加密模块, 国际化, 提示信息, 数据库交互, 文档存储, 日志审计, 未来特性, 测试代码, 网络安全, 蜜罐, 证书利用, 请求拦截, 配置驱动, 隐私保护, 静态文件