cruikshank25/Security-Log-Generator
GitHub: cruikshank25/Security-Log-Generator
该工具用于按线性或波形分布生成SOC常见格式的模拟安全事件日志,帮助安全团队在没有真实数据时进行测试与验证。
Stars: 44 | Forks: 10
# 安全日志生成器
 [](https://www.gnu.org/licenses/gpl-3.0)
## 功能
- 生成 SOC 中通常会出现的日志格式的模拟事件。
- 截至 2023 年 1 月 31 日,它支持 IDS、Web 访问和 Endpoint 日志格式。
- 可以按线性方式生成特定数量的事件,或者使用波形为您的数据增加“起伏感”。
- 未来计划添加以下日志格式:
- Windows 事件日志
- Linux 事件日志
- 边界设备日志(防火墙、VPN、代理等)
- 如果您需要未列出的其他格式,欢迎为项目添加 issue
- 代码是模块化且可扩展的,添加其他格式相对容易。
## 架构

## 环境要求
- Python 3.7+ 版本的安装环境
- 使用 pip 安装库:
(目前唯一的依赖是 Faker - https://pypi.org/project/Faker/)
```
pip install -r requirements.txt
```
## 配置说明
- 直接在 config.yaml 文件中编辑以下值。
- 配置参数可划分如下:
### - 常规参数:
- log_type:定义要生成的日志类型。
- 可取值为:
- access
- ids
- endpoint
- event_distribution:定义如何随时间分布事件。
- 可取值为:
- linear
- wave
#### - 线性分布参数:
- no_events:定义要生成的事件数量。
- 可以在此指定任意整数。
- write_time:定义写入特定事件所需的时间。
- 可以在此指定浮点数或整数。
#### - 波形分布参数:
- frequency:
- 一个时间切片内的振荡次数,值越大,波峰和波谷越多。
- amplitude:
- 波的强度,与 Y 轴上的最大值相关,对应于将生成多少事件。
- sample_rate:
- 每个时间切片采取的样本数,对应于每个时间切片将生成多少事件。
- duration:
- 表示一个波持续的时间,在本程序中,1 个 duration 将产生 1 个波(如果 frequency 为 1)。
- stretch:
- 类似于线性分布的 'write_time',但作用于 'duration'
- 例如,如果 'duration' 值为 2 且 'stretch' 值为 10
- 您可以预期程序大约需要 20 秒左右的时间来完成其事件生成。
#### - 有效的线性分布配置示例:
- 一个有效的线性分布配置可能如下所示:
```
config:
# Logging Parameters
logging_level: INFO
# General Parameters (applies first)
log_type: ids
event_distribution: linear
# Linear Distribution Parameters (only applies if linear distribution)
no_events: 2500
write_time: 0.5
# Wave Distribution Parameters (only applies if wave distribution)
frequency: 'n/a'
amplitude: 'n/a'
sample_rate: 'n/a'
duration: 'n/a'
stretch: 'n/a'
```
- 上述配置的事件分布大致如下所示:

#### - 有效的波形分布配置示例:
- 一个有效的波形分布配置可能如下所示:
```
config:
# Logging Parameters
logging_level: INFO
# General Parameters (applies first)
log_type: ids
event_distribution: wave
# Linear Distribution Parameters (only applies if linear distribution)
no_events: 'n/a'
write_time: 'n/a'
# Wave Distribution Parameters (only applies if wave distribution)
frequency: 1
amplitude: 100
sample_rate: 200
duration: 2
stretch: 10
```
- 上述配置的事件分布大致如下所示:

###### - 波形生成器基准测试
- 由于波形分布的配置可能相当复杂,我提供了一些关于生成事件数量以及以秒为单位的运行时间的基准测试,以便根据测试结果为您提供有关预期行为的一些提示。
- 通常,我建议使用较低的 'frequency' + 'duration' 值以及较高的 'stretch' 值,以创建更平滑的分布。
| Amplitude | Frequency | Sample Rate | Duration | Events Generated | Time Taken (s) | No. of Waves |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 10 | 1 | 100 | 1 | 636 | 10.8 | 1 |
| 20 | 1 | 100 | 1 | 1284 | 10.8 | 1 |
| 30 | 1 | 100 | 1 | 1908 | 10.8 | 1 |
| 10 | 2 | 100 | 1 | 640 | 10.8 | 2 |
| 10 | 3 | 100 | 1 | 636 | 10.8 | 3 |
| 10 | 4 | 100 | 1 | 640 | 10.8 | 2 |
| 10 | 1 | 200 | 1 | 636 | 10.8 | 1 |
| 10 | 1 | 400 | 1 | 2552 | 12.38 | 1 |
| 10 | 1 | 800 | 1 | 5100 | 12.3 | 1 |
| 10 | 1 | 100 | 2 | 1272 | 21 | 2 |
| 10 | 1 | 100 | 3 | 1908 | 32.5 | 3 |
| 10 | 1 | 100 | 4 | 2544 | 43.43 | 4 |
| 100 | 6 | 1200 | 10 | 764,400 | 185.7 | many |
| 200 | 4 | 600 | 40 | 3,056,000 | 743.14 | many |
| 100 | 1 | 600 | 40 | 1,528,480 | 742.86 | many |
| 100 | 1 | 100 | 40 | 254,720 | 433.17 | many |
## 运行
- 要运行程序,只需在终端中执行 'python main.py'。
```
python main.py
```
## 常规性能预期
所有基准测试均在 12th Gen Intel Core i5-12600K 系列 CPU 上进行。
对于事件的线性分布,每秒写入事件的性能与 `write_time` 设置相关。通常,您可以在较低的 `write_time` 设置(一般为 0.01 秒)下达到最高性能,这是程序在写入一个新事件之前的等待时间。
每秒最大事件处理量会因 `log_type` 设置而异。基于以下 log_types(如果使用性能相近的处理器),您可以预期以下最高 eps(每秒事件数):
`ids` - 每秒 64 个事件
`access` - 每秒 15 个事件
`endpoint` - 每秒 26 个事件
通常,在进行此测试的 CPU 上,程序的每个实例会占用大约 `7%` 的资源。因此,应该有充足的余量来同时运行程序的多个实例,以获得更高的 `events per second`(每秒事件数)得分。
已测试的性能基准可以在项目根目录下的 `Benchmarks.xlsx` 电子表格中找到。
一般说明 - 许多性能指标不仅与程序使用的随机生成器有关,还与 Python 本身的一些基础限制有关。我们正在努力提高未来版本的性能,但性能并不是该工具的高优先级目标,其目标更侧重于生成事件的随机性和“可信度”。在许多需要快速连续生成大量事件的用例中,其他工具可能更适合该任务。
针对基于波形的事件生成(即 `event_distribution: wave`)的性能尚未经过全面测试。
标签:Python, 内存取证对抗, 安全运营, 扫描框架, 数据仿真, 无后门, 日志生成, 逆向工具