anoopnaveen/7018SCN-Portfolio

GitHub: anoopnaveen/7018SCN-Portfolio

一个安全工程实践项目,提供认证、SIEM 与恶意软件分析的三合一命令行工具集。

Stars: 0 | Forks: 0

# 安全工程作品集脚本 一组自定义命令行安全工具的完整集合,展示了安全软件开发原则、威胁检测和恶意软件分析技术。 ## 项目概述 本作品集包含三个独立的安全工具,用于解决关键的网络安全挑战: 1. **任务 1:安全认证** - 实现带有盐值哈希、复杂度强制和暴力破解防御的安全用户注册与登录 2. **任务 2:SIEM Lite** - 解析服务器日志并检测网络流量中的恶意 IP 3. **任务 3:恶意软件分析与数字取证** - 执行安全的静态恶意软件分析和取证提取 ## 安装 ### 先决条件 - Python 3.7+ - pip 包管理器 ### 设置 ``` cd "Task copy 6" python3 -m pip install -r requirements.txt ``` **依赖项:** - `Pillow` - 用于图像处理与 EXIF 元数据提取 ## 任务 1:安全认证(25%) ### 概述 一个命令行认证系统,演示安全密码处理实践,包括加盐哈希、复杂度强制和暴力破解防御。 **评估的学习成果:** LO1, LO2 ### 功能 ✅ **安全存储** - 使用 `os.urandom(16)` 为每个用户生成唯一的 16 字节盐值 - 使用 SHA-256(行业标准,非过时的 MD5)哈希密码 - 以 JSON 格式存储盐值与哈希,便于持久化 ✅ **密码复杂度强制** - 使用正则表达式模式强制严格的密码要求: - 最小 12 个字符 - 至少一个数字 - 至少一个特殊符号(非字母数字) ✅ **暴力破解防御** - 仅在**登录失败时**实施 2 秒人工延迟 - 不对成功登录进行延迟(尊重合法用户) - 使字典攻击在数学上不可行 ### 用法 #### 注册新用户: ``` python3 task1_secure_auth.py register ``` **示例:** ``` python3 task1_secure_auth.py register alice Enter password: P@ssw0rd123! User 'alice' registered securely. ``` **密码要求:** - ✓ 有效:`MySecure#Pass123` - ✓ 有效:`P@ssw0rd!2024` - ✗ 无效:`weak`(太短,缺少数字和符号) - ✗ 无效:`Password123`(缺少特殊符号) - ✗ 无效:`P@ssword!`(缺少数字) #### 登录已有用户: ``` python3 task1_secure_auth.py login ``` **示例:** ``` python3 task1_secure_auth.py login alice Enter password: P@ssw0rd123! Login successful. ``` ### 实现细节 - 用户存储在持久化 JSON 文件:`users.json` - 盐值以十六进制字符串存储,便于序列化 - 密码比较使用常量时间哈希相等性 - 对缺失或损坏的用户数据库进行适当的错误处理 ### 示例 users.json 结构 ``` { "alice": { "salt_hex": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "password_hash": "sha256_hash_here..." } } ``` ## 任务 2:SIEM Lite(威胁检测与缓解)(25%) ### 概述 一个安全信息与事件管理(SIEM)工具,解析服务器日志和网络流量文件以检测并告警恶意活动。 **评估的学习成果:** LO1, LO2, LO3 ### 功能 ✅ **数据解析** - 读取模拟的 Linux `auth.log` 或网络流量 CSV 文件 - 使用 UTF-8 回退优雅处理编码错误 - 支持大文件的高效流式处理 ✅ **使用正则表达式进行模式提取** - 从“Failed password”日志中提取 IP 地址 - 检测包含“spike”或“massive”关键字的流量峰值 - 健壮的 regex 模式以处理日志格式变化 ✅ **动态告警** - 通过命令行参数(`sys.argv`)传递告警阈值 - 允许在事件响应期间实时调整灵敏度 - **无硬编码限制** - 完全灵活 ✅ **结构化 JSON 导出** - 以防火墙兼容的 JSON 格式导出检测到的 IP - 包含元数据:阈值、唯一 IP 数量、事件频率 - 按事件计数排序(最活跃的攻击者优先) ### 用法 ``` python3 task2_siem_lite.py ``` **参数:** - `` - 包含事件的 auth.log 或 CSV 文件路径 - `` - 标记 IP 为恶意的最小事件计数(正整数) - `` - 恶意 IP 列表的输出文件路径 ### 示例 #### 示例 1:低灵敏度(标记事件数 ≥ 2 的 IP) ``` python3 task2_siem_lite.py test_auth.log 2 malicious_ips.json ``` **输出:** ``` Processed events: 8 Exported malicious IP list to: malicious_ips.json ``` #### 示例 2:高灵敏度(标记事件数 ≥ 5 的 IP) ``` python3 task2_siem_lite.py auth.log 5 blocked_ips.json ``` ### 输入日志格式 该脚本接受标准 Linux auth.log 条目: ``` Jan 15 08:12:45 server sshd[1234]: Failed password for invalid user admin from 192.168.1.100 port 22 ssh2 Jan 15 08:12:46 server sshd[1235]: Failed password for invalid user root from 10.10.10.10 port 23 ssh2 ``` 或带有峰值指示器的网络流量 CSV: ``` 2024-01-15 08:12:45,192.168.1.100,443,massive spike detected,data_exfiltration ``` ### JSON 输出格式 ``` { "threshold": 2, "total_unique_ips": 3, "malicious_ips": [ { "ip": "192.168.1.100", "event_count": 5 }, { "ip": "10.10.10.10", "event_count": 3 }, { "ip": "22.22.22.22", "event_count": 2 } ] } ``` ### 错误处理 - 文件未找到:提供包含文件路径的清晰错误信息 - 无效阈值:拒绝非正整数 - 编码问题:优雅处理损坏的 UTF-8 - 权限错误:捕获 OSError 并提供描述性消息 ## 任务 3:恶意软件分析与数字取证(30%) ### 概述 用于可疑文件的静态分析与取证检查工具,安全地计算文件哈希、与威胁情报比对、隔离匹配项并提取取证元数据。 **评估的学习成果:** LO2, LO3, LO5 ### 功能 ✅ **安全分块哈希** - 以 4096 字节块读取文件,防止内存崩溃 - 处理任意大小的文件而不影响系统 - 安全扫描大型企业数据库 ✅ **签名比对** - 将 SHA-256 哈希与已知恶意签名数据库比对 - 在 Python 列表中存储已知恶意哈希 - 与威胁情报(TI)源集成 ✅ **安全隔离** - 使用 `shutil.move()` 物理移动恶意文件 - 创建隔离的 `QUARANTINE_VAULT` 目录 - 通过递增后缀处理文件名冲突 - **非**简单重命名 - 真正的隔离 ✅ **取证提取** - 从图像文件中提取 EXIF GPS 坐标 - 将 GPS EXIF 格式转换为十进制度数 - 优雅处理缺失的 EXIF 数据 - 有助于调查受感染设备 ✅ **路径白名单安全** - 限制扫描到安全的根目录(可配置) - 防止意外隔离操作系统文件 - 使用 `Path.resolve()` 实现符号链接安全 ### 用法 ``` python3 task3_malware_forensics.py ``` ### 示例 #### 示例 1:扫描安全的测试文件 ``` python3 task3_malware_forensics.py test_file.txt ``` **输出:** ``` SHA-256: d90ef1651fd9e7563e1a1450a16bd784e9a7e2d3df0f5a798dfc1bdf70a64aea No known malicious signature match found. No EXIF GPS metadata found. ``` #### 示例 2:扫描恶意文件 ``` python3 task3_malware_forensics.py malware.exe ``` **输出(若签名匹配):** ``` SHA-256: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Known malicious signature found. File moved to: QUARANTINE_VAULT/malware.exe No EXIF GPS metadata found. ``` #### 示例 3:从受感染图像提取 GPS ``` python3 task3_malware_forensics.py suspicious_photo.jpg ``` **输出:** ``` SHA-256: d8f3e4b9a1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d No known malicious signature match found. EXIF GPS -> latitude: 37.7749, longitude: -122.4194 ``` ### 配置 #### 已知恶意签名 在脚本中编辑 `KNOWN_BAD_SIGNATURES` 列表: ``` KNOWN_BAD_SIGNATURES = [ "d41d8cd98f00b204e9800998ecf8427e4b7e3f6f1f8e9b4f3f4e1a2d3c4b5a6f", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ] ``` #### 安全扫描根目录 定义白名单目录用于扫描: ``` SAFE_SCAN_ROOTS = [ Path.cwd(), # Current working directory Path("/home/user/downloads"), ] ``` ### 隔离目录 恶意文件被移动到:`QUARANTINE_VAULT/` ``` QUARANTINE_VAULT/ ├── malware.exe ├── trojan_1.dll └── backdoor_2.dll ``` ### 错误处理 - 文件未找到:提供清晰的错误信息 - 无效文件类型(非文件):拒绝目录 - 路径遍历尝试:阻止访问安全根目录之外的文件 - EXIF 解析错误:继续正常执行 - 权限问题:提供描述性错误消息 ## 测试结果 ### 任务 1:认证测试 ``` $ python3 task1_secure_auth.py register testuser Enter password: Weak # ✗ Rejected Error: password must be 12+ chars, include a number, and a special symbol. $ python3 task1_secure_auth.py register testuser Enter password: SecurePass#123 # ✓ Accepted User 'testuser' registered securely. $ python3 task1_secure_auth.py login testuser Enter password: WrongPass#123 # ✗ Failed (2-second delay) Login failed. $ python3 task1_secure_auth.py login testuser Enter password: SecurePass#123 # ✓ Instant success Login successful. ``` ### 任务 2:SIEM 测试 ``` $ python3 task2_siem_lite.py test_auth.log 2 test_malicious_ips.json Processed events: 8 Exported malicious IP list to: test_malicious_ips.json $ cat test_malicious_ips.json { "threshold": 2, "total_unique_ips": 3, "malicious_ips": [ {"ip": "192.168.1.100", "event_count": 3}, {"ip": "10.10.10.10", "event_count": 3}, {"ip": "22.22.22.22", "event_count": 2} ] } ``` ### 任务 3:取证测试 ``` $ echo "test file content" > test_file.txt $ python3 task3_malware_forensics.py test_file.txt SHA-256: d90ef1651fd9e7563e1a1450a16bd784e9a7e2d3df0f5a798dfc1bdf70a64aea No known malicious signature match found. No EXIF GPS metadata found. ``` ## 避免的常见错误 ### ✅ 任务 1:认证 - ❌ 问题:硬编码盐值使目的落空 - ✅ 解决方案:`os.urandom(16)` 为每个用户生成唯一的 16 字节盐值 - ❌ 问题:成功时延迟会使用户沮丧 - ✅ 解决方案:仅在失败尝试时执行 `time.sleep(2)` - ❌ 问题:字符串长度检查不足够 - ✅ 解决方案:正则表达式模式强制数字、特殊字符 ### ✅ 任务 2:SIEM Lite - ❌ 问题:脆弱的字符串分割在格式变化时失效 - ✅ 解决方案:使用正则表达式(`re.findall`)进行健壮的 IP 提取 - ❌ 问题:硬编码阈值限制灵活性 - ✅ 解决方案:通过 `sys.argv` 参数动态设置阈值 - ❌ 问题:无错误处理会在文件缺失时崩溃 - ✅ 解决方案:使用带有描述性错误的 try/except 块 ### ✅ 任务 3:取证 - ❌ 问题:`file.read()` 在 50GB 数据库文件上崩溃 - ✅ 解决方案:分块读取,块大小为 4096 字节 - ❌ 问题:`os.rename()` 留下危险文件可访问 - ✅ 解决方案:使用 `shutil.move()` 移动到隔离的 `QUARANTINE_VAULT` - ❌ 问题:缺乏防护措施可能隔离关键系统文件 - ✅ 解决方案:使用 `Path.resolve()` 进行白名单强制 ## 展示的安全最佳实践 | 实践 | 任务 | 实现方式 | |------|------|----------| | 加密哈希 | 1 | SHA-256(非常数 MD5)与唯一盐值 | | 密码复杂度 | 1 | 正则表达式验证(长度、数字、符号) | | 速率限制 | 1 | 失败尝试时 2 秒延迟 | | 日志分析 | 2 | 使用正则表达式提取模式 | | 威胁情报 | 2 | 动态阈值调整 | | 安全文件哈希 | 3 | 分块读取(4096 字节) | | 隔离程序 | 3 | 使用 `shutil.move()` 物理隔离 | | 取证分析 | 3 | EXIF 元数据提取 | | 路径验证 | 3 | 白名单强制与 `Path.resolve()` | ## 文件结构 ``` Task copy 6/ ├── task1_secure_auth.py # Secure authentication system ├── task2_siem_lite.py # SIEM log parser & detector ├── task3_malware_forensics.py # Malware analysis & forensics ├── requirements.txt # Python dependencies ├── malicious_ips.json # Example output ├── users.json # Generated user database ├── QUARANTINE_VAULT/ # Isolated malware storage ├── README.md # This file └── test_auth.log # Test log file ``` ## 依赖项 - **Python 3.7+** - **Pillow** - 图像处理与 EXIF 提取 使用以下命令安装: ``` pip install -r requirements.txt ``` ## 故障排除 ### 任务 1:"users.json" 权限错误 ``` chmod 600 users.json ``` ### 任务 2:日志文件编码问题 - 脚本自动处理 UTF-8 错误 - 确保日志文件可读:`chmod 644 auth.log` ### 任务 3:EXIF 数据提取失败 - 确保文件是有效图像(jpg、png、tiff 等) - 某些图像会剥离 EXIF;脚本会优雅处理 ### QUARANTINE_VAULT 权限问题 ``` chmod 700 QUARANTINE_VAULT ``` ## 性能特征 | 任务 | 可扩展性 | 限制 | |------|----------|------| | 任务 1 | O(n) 注册/登录操作 | JSON 文件大小(实际限制:10K 用户) | | 任务 2 | O(n) 日志行 | 高效处理大于 1GB 的文件 | | 任务 3 | O(n) 文件块 | 安全支持任意大小文件 | ## 后续增强 - [ ] 任务 1:多因素认证(TOTP) - [ ] 任务 1:使用 SQLite 数据库替代 JSON - [ ] 任务 2:实时日志流(tail -f) - [ ] 任务 2:IP 地理位置丰富化 - [ ] 任务 3:病毒签名数据库集成(ClamAV) - [ ] 任务 3:并行文件扫描 - [ ] 任务 3:加密隔离存储 ## 联系与支持 对于问题或疑问,请查阅每个任务文件的实现说明或检查测试用例。 ## 许可证 仅限教育用途。作为安全工程作品集评估的一部分。 **最后更新:** 2026年4月14日
标签:AMSI绕过, DAST, DNS枚举, EXIF 提取, Homebrew安装, JSON 存储, Pillow, Python 3.7, Python CLI, SHA-256, TGT, VEH, 云安全监控, 加盐哈希, 威胁检测, 字典攻击, 安全工程, 安全开发生命周期, 密码复杂度, 密码学, 恶意软件分析, 手动系统调用, 攻防演练, 数字取证, 暴力破解防御, 网络安全工具, 自动化脚本, 逆向工具, 静态分析