igors93/suspicious-process-detector

GitHub: igors93/suspicious-process-detector

一个基于 Python 的防御性 CLI 工具,通过扫描运行中进程的多维指标生成风险评分与 JSON 安全报告,帮助蓝队和安全学习者识别值得人工调查的可疑进程。

Stars: 0 | Forks: 0

# 可疑进程检测器 ![Tests](https://static.pigsec.cn/wp-content/uploads/repos/cas/09/097271ca091990be630ef6043309cc48240faa054413384202036fa2efedb2d2.svg) 一个轻量级的防御性 Python 工具,用于分析正在运行的进程、检测可疑指标,并生成警报以供人工调查。 ## 这是一个什么项目? 可疑进程检测器是一个基于规则的防御性进程分析工具。 它扫描当前正在机器上运行的进程,并寻找可能表明可疑或潜在恶意行为的指标。 目标是帮助识别已经在运行且可能值得人工调查的程序。 本项目专为以下用途设计: - 防御性安全学习 - 蓝队实践 - Python 作品集构建 - 进程行为分析 - 安全的本地实验 ## 本项目不是什么 本项目**不是杀毒软件**。 它不会: - 清除恶意软件 - 删除文件 - 隔离程序 - 终止进程 - 拦截威胁 - 修改系统文件 - 扫描磁盘上的非活动文件 - 保证某个进程是恶意的 它只分析正在运行的进程并生成警报。 用户收到警报后,调查和响应均由人工完成。 ## 当前功能 - 扫描正在运行的进程 - 收集进程元数据 - 收集父进程信息 - 检测可疑目录 - 检测可疑进程名 - 检测外观相似的进程名 - 检测可疑命令行关键字 - 检测可能的命令混淆 - 检测可疑的父子进程关系 - 检测从意外路径运行的已知 Windows 系统进程名 - 使用弱信号和强信号进行过滤 - 减少常见应用程序产生的嘈杂误报 - 计算风险评分 - 将警报划分为低、中或高 - 生成 JSON 报告 - 包含用于测试的无害可疑进程模拟器 - 使用 pytest 运行测试 - 使用 Ruff 运行 lint 检查 - 包含 GitHub Actions CI ## 工作原理 该工具遵循以下流程: ``` main.py ↓ ProcessScanner ↓ ProcessCollector ↓ RiskAnalyzer ↓ Detection Rules ↓ JsonReporter ↓ reports/process_report.json ``` 该程序仅读取进程信息并写入本地 JSON 报告。 ## 检测理念 检测器使用两种类型的信号: ``` weak = weak indicator, usually not enough alone strong = strong indicator, should generate an alert ``` 弱信号示例: ``` long command line high CPU usage high memory usage missing executable path generic suspicious name ``` 强信号示例: ``` process running from Temp process running from Downloads lookalike process name system process running from unexpected path powershell with encodedcommand command line using certutil or bitsadmin browser spawning powershell or cmd Office application spawning script interpreters ``` 分析器仅在以下情况发出警报: ``` there is at least one strong signal or multiple weak signals appear together or the total risk score is high enough ``` 这有助于减少误报,同时仍能检测到正在运行的可疑程序。 ## 项目结构 ``` suspicious-process-detector/ │ ├── main.py ├── README.md ├── requirements.txt ├── requirements-dev.txt ├── pyproject.toml ├── SECURITY.md ├── CONTRIBUTING.md │ ├── src/ │ └── suspicious_process_detector/ │ ├── __init__.py │ ├── models.py │ ├── scanner.py │ ├── process_collector.py │ ├── risk_analyzer.py │ ├── reporter.py │ │ │ └── rules/ │ ├── __init__.py │ ├── command_rules.py │ ├── directory_rules.py │ ├── name_rules.py │ └── parent_rules.py │ ├── tools/ │ └── suspicious_process_simulator.py │ ├── reports/ │ └── .gitkeep │ └── tests/ ├── __init__.py ├── test_command_rules.py ├── test_directory_rules.py ├── test_name_rules.py ├── test_parent_rules.py └── test_risk_analyzer.py ``` ## 环境要求 - Python 3.10 或更高版本 - pip 运行时依赖: ``` psutil ``` 开发依赖: ``` pytest ruff ``` ## 安装说明 克隆代码库: ``` git clone https://github.com/igors93/suspicious-process-detector.git cd suspicious-process-detector ``` 创建虚拟环境: ``` python -m venv .venv ``` 在 Windows 上激活: ``` .venv\Scripts\activate ``` 在 Linux 或 macOS 上激活: ``` source .venv/bin/activate ``` 安装运行时依赖: ``` pip install -r requirements.txt ``` 用于开发: ``` pip install -r requirements-dev.txt ``` ## 使用说明 运行扫描器: ``` python main.py ``` 将报告保存到自定义路径: ``` python main.py --output reports/my_report.json ``` 仅显示中级和高级警报: ``` python main.py --min-severity medium ``` 限制终端输出: ``` python main.py --limit 5 ``` ## 示例输出 ``` [+] Suspicious Process Detector [+] Report saved to: reports/process_report.json [+] Alerts found: 1 Top alerts: - [MEDIUM] PID=3704 NAME=python3.10.exe SCORE=4 ``` ## 报告 默认情况下,报告保存至: ``` reports/process_report.json ``` 报告包含: - 生成时间戳 - 警报总数 - 进程元数据 - 严重程度 - 风险评分 - 检测到的发现 - 发现描述 - 信号类型 发现示例: ``` { "rule_id": "CMD_001", "title": "Possible command obfuscation", "description": "Command line contains possible obfuscation keyword: encodedcommand", "severity": "medium", "score": 4, "signal": "strong" } ``` ## 检测类别 ### 目录指标 检测从常被可疑脚本或无用程序滥用的位置运行的进程。 示例: ``` /tmp /var/tmp /dev/shm /downloads /.cache /appdata/local/temp /windows/temp ``` 从这些目录运行的进程将被视为强信号。 ### 名称指标 检测可疑或常被滥用的进程名。 示例: ``` svchosts.exe chrome_update.exe system32.exe winlogon32.exe update.exe service.exe temp.exe ``` 通用名称本身可能只是弱信号,但与其他指标结合时,可能会增加风险。 ### 外观相似的进程名 检测与合法系统进程外观相似的名称。 示例: ``` svhost.exe scvhost.exe expl0rer.exe winlogin.exe ``` 外观相似的进程名被视为更强的指标,因为它们可能试图冒充合法进程。 ### 命令行指标 检测可疑的命令行模式。 示例: ``` encodedcommand frombase64string base64 invoke-webrequest curl wget certutil bitsadmin chmod +x /dev/tcp netcat ``` 这些指标对于识别可疑的脚本执行、下载行为或命令混淆非常有用。 ### 超长命令行检测 浏览器和 Electron 应用程序通常具有超长的命令行,例如: ``` chrome.exe msedge.exe Code.exe mscopilot.exe Codex.exe ``` 因此,检测器不会仅仅因为这些应用程序的命令行过长就发出警报。 超长命令行检测目前专注于敏感进程,例如: ``` powershell.exe cmd.exe wscript.exe cscript.exe mshta.exe rundll32.exe regsvr32.exe python.exe python3.10.exe bash sh ``` ### 父子进程指标 检测异常的父子进程关系。 示例: ``` chrome.exe -> powershell.exe msedge.exe -> cmd.exe winword.exe -> powershell.exe outlook.exe -> wscript.exe excel.exe -> mshta.exe ``` 这些关系并不总是恶意的,但它们是进行人工调查的有用信号。 ### 系统进程位置异常 检测从意外路径运行的已知 Windows 系统进程名。 示例: ``` svchost.exe running from Temp lsass.exe running from Downloads winlogon.exe running from AppData services.exe running outside System32 ``` 这并不能证明该进程是恶意的,但它是进行人工调查的强烈指标。 ## 风险评分 每项发现都会为进程风险评分增加分数。 评分示例: ``` Missing executable path: +1 High CPU usage: +1 High memory usage: +1 Suspicious process name: +2 Unusually long command line: +1 Possible command obfuscation: +4 Command-line download activity: +4 Suspicious shell behavior: +4 Suspicious directory: +4 Lookalike process name: +4 Suspicious parent-child relationship: +4 System process running from unexpected path: +5 ``` 严重程度: ``` 0-3 points: low 4-7 points: medium 8+ points: high ``` ## 使用无害模拟器进行测试 本代码库包含一个用于测试检测规则的无害模拟器。 该模拟器**不是恶意软件**。 它不会: - 修改文件 - 删除文件 - 下载任何内容 - 连接互联网 - 执行系统命令 - 更改系统设置 它只是通过带有看起来可疑的命令行参数保持运行,以便检测器在扫描期间能够识别它。 ### 在 Windows 上运行模拟器 在项目根目录打开终端并运行: ``` cd tools python suspicious_process_simulator.py --encodedcommand fake-test --payload AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --sleep 300 ``` 保持此终端打开。 然后在项目根目录打开另一个终端并运行: ``` python main.py --min-severity medium --limit 20 ``` 预期结果: ``` [MEDIUM] PID=... NAME=python.exe SCORE=4 ``` 或: ``` [MEDIUM] PID=... NAME=python3.10.exe SCORE=4 ``` 应该会触发警报,因为命令行包含: ``` --encodedcommand ``` 这会激活命令混淆检测规则。 ### 在 Linux 或 macOS 上运行模拟器 在项目根目录打开终端并运行: ``` cd tools python3 suspicious_process_simulator.py --encodedcommand fake-test --payload AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --sleep 300 ``` 保持此终端打开。 然后在项目根目录打开另一个终端并运行: ``` python3 main.py --min-severity medium --limit 20 ``` ## 关于模拟器的重要说明 如果你仅运行: ``` python tools/suspicious_process_simulator.py ``` 检测器可能不会发出警报。 这是因为脚本内部的默认 Python 参数不一定会出现在操作系统的进程命令行中。 要触发检测,请在命令行中直接传递看起来可疑的参数: ``` --encodedcommand fake-test ``` ## 运行测试 ``` python -m pytest ``` ## 运行 Lint ``` python -m ruff check . ``` 自动修复简单的 lint 问题: ``` python -m ruff check . --fix ``` 推荐的开发检查: ``` python -m ruff check . python -m pytest python main.py ``` ## 安全提示 生成的报告可能包含敏感的本地系统信息,例如: - 用户名 - 进程名 - 可执行文件路径 - 命令行参数 除非你事先审查并进行脱敏处理,否则请勿上传来自你个人机器的真实报告。 报告会通过 `.gitignore` 被 Git 忽略。 ## 合理使用 仅在以下环境使用此工具: - 你自己的计算机 - 实验室环境 - 你获得明确许可的系统 本项目用于防御和教育目的。 ## 局限性 本项目仅分析正在运行的进程。 它无法检测: - 磁盘上处于非活动状态的恶意软件文件 - 压缩文件 - 未在运行的脚本 - 未激活的持久化机制 - 注册表修改 - 计划任务(除非其进程正在运行) - 已安装但已停止的服务 它也不能证明某个进程是恶意的。它仅用于识别可疑指标。 ## 路线图 计划改进: - 添加基于 YAML 的自定义规则 - 添加用于重复扫描的 watch 模式 - 添加受信任的进程基线 - 添加 CSV 报告输出 - 添加 HTML 报告输出 - 添加更完善的 Windows 专属规则 - 添加更完善的 Linux 专属规则 - 在终端输出中添加严重程度说明 - 添加进程树输出 - 添加可选的本地允许列表 - 添加更安全的测试示例 ## 贡献 欢迎贡献。 适合新手的首次贡献包括: - 添加新的检测规则 - 改进测试 - 减少误报 - 改进文档 - 添加 Linux 专属规则 - 添加 Windows 专属规则 - 改进报告格式 在提交更改之前,请运行: ``` python -m ruff check . python -m pytest ``` ## 许可证 本项目基于 MIT 许可证授权。 ## 免责声明 本工具仅用于教育和防御性安全目的。 它不能证明某个进程是恶意的。警报应始终由人工进行审查。
标签:Python, 云计算, 安全规则引擎, 无后门, 规则引擎, 进程分析, 逆向工具