Ajayjethi/Malware_Final
GitHub: Ajayjethi/Malware_Final
基于随机森林机器学习算法的Windows PE文件恶意软件检测系统,通过Web仪表盘提供实时静态分析与可视化功能。
Stars: 0 | Forks: 0
# 恶意软件检测器 🛡️
https://detect-malware-aj.streamlit.app/
一个强大的基于机器学习的恶意软件检测系统,通过分析 Windows 便携式可执行文件(PE)来识别潜在的安全威胁。
## 🚀 核心功能
- **高级 ML 检测**:使用经过调优的随机森林分类器进行高精度识别。
- **深度 PE 分析**:提取并分析 PE 头、节和资源中的 50 多个特征。
- **交互式 Web 界面**:使用 Streamlit 构建,提供现代且易于使用的用户体验。
- **实时可视化**:通过动态图表展示特征比较和模型性能。
- **系统文件保护**:专门针对 Windows 系统文件进行处理,以减少误报。
- **详细洞察**:查看对检测贡献最大的前 10 个重要特征。
## 📊 项目统计
- **主要语言**:Python (98.5%)
- **样式**:CSS/HTML (1.0%)
- **配置**:TOML/Markdown (0.5%)
## 🛠️ 使用的主要技术
- **机器学习**:`scikit-learn` (随机森林分类器)
- **数据处理**:`pandas`、`numpy`
- **PE 文件分析**:`pefile`
- **Web 仪表盘**:`Streamlit`
- **可视化**:`matplotlib`、`seaborn`
## 📁 项目结构
```
Malware_Final/
├── app.py # Streamlit frontend and dashboard logic
├── model.py # Core ML logic (feature extraction & classification)
├── data.csv # Training dataset (50MB+ PE file metadata)
├── requirements.txt # Project dependencies
├── .gitignore # Git exclusion rules
├── samples/ # Test samples (Executables, DLLs, Drivers)
└── README.md # Project documentation
```
## 🛠️ 工作原理
### 系统工作流
```
graph TD
A[User Uploads PE File] --> B{Model Trained?}
B -- No --> C[Upload data.csv & Train Model]
C --> D[Random Forest Classifier]
B -- Yes --> E[Feature Extraction]
D --> E
E --> F[Extract Header, Section, Resource Data]
F --> G[Predict using Trained Model]
G --> H{Legitimate or Malicious?}
H -- Legitimate --> I[Display Success Result]
H -- Malicious --> J[Display Threat Alert]
I --> K[Show Feature Visualization]
J --> K
```
### 1. 特征提取 ([model.py](file:///D:/old%20vol%20d/pbl/Malware_Final/model.py))
系统使用 `pefile` 库解析可执行文件并提取:
- **头信息**:机器类型、特征、入口点等。
- **节分析**:节数量、熵(随机性)以及原始/虚拟大小。
- **导入与资源**:DLL 数量、序号导入以及资源熵。
### 2. 机器学习模型
```
flowchart LR
Data[Input Data] --> Val[Validation]
Val --> Split[Train/Test Split]
Split --> RF[Random Forest]
subgraph Forest [Random Forest Ensemble]
RF --> T1[Tree 1]
RF --> T2[Tree 2]
RF --> Tn[Tree 200]
end
Forest --> Vote[Majority Voting]
Vote --> Result[Final Classification]
```
- **算法**:包含 200 个评估器的随机森林分类器。
- **类别平衡**:使用 `class_weight='balanced'` 来处理恶意软件与合法软件比例不均的数据集。
- **验证**:如果训练集出现偏差,会执行自动数据验证和合成平衡。
### 3. Web 仪表盘 ([app.py](file:///D:/old%20vol%20d/pbl/Malware_Final/app.py))
- **训练**:上传您的数据集并实时训练模型。
- **分析**:拖放 `.exe`、`.dll` 或 `.sys` 文件即可进行即时扫描。
- **可视化**:比较图表展示了您的文件与典型恶意及合法模式的匹配情况。
## 💻 代码亮点
### PE 特征提取
检测的核心在于我们如何使用 `pefile` 从二进制文件中提取特征。
```
def extract_features(self, file_path):
pe = pefile.PE(file_path)
features = {}
# Extracting Header Information
features['Machine'] = pe.FILE_HEADER.Machine
features['Characteristics'] = pe.FILE_HEADER.Characteristics
# Extracting Section Entropy (Measures randomness/encryption)
sections = pe.sections
section_entropies = [section.get_entropy() for section in sections]
features['SectionsMeanEntropy'] = np.mean(section_entropies)
# Extracting Import Counts
features['ImportsNb'] = sum(len(imp.imports) for imp in pe.DIRECTORY_ENTRY_IMPORT)
return features
```
* **重要性**:恶意软件经常使用加壳或加密,这会导致极高的 **熵(Entropy)**。通过分析这些模式,模型可以“看穿”代码混淆。
### 智能预测
我们不仅仅依赖于简单的 0 或 1 判断。模型针对系统文件使用了置信度阈值和特殊规则。
```
def predict_file(self, file_path):
probabilities = self.model.predict_proba(features_df)[0]
confidence = max(probabilities)
# Special handling for Windows System Files to avoid False Positives
is_system_file = 'system32' in file_path.lower()
if is_system_file:
# Require 85% confidence to flag a system file as malicious
if probabilities[0] > 0.85:
return 'Malicious', confidence
else:
return ('Malicious' if probabilities[0] > probabilities[1] else 'Legitimate'), confidence
```
* **重要性**:合法的 Windows 文件因为执行底层操作,通常看起来很可疑。此逻辑确保了极高的可靠性。
## 📥 安装说明
1. **克隆仓库**:
git clone https://github.com/Devil0416/Malware_Final.git
cd Malware_Final
2. **安装依赖**:
pip install -r requirements.txt
## 🎮 使用方法
1. **启动应用**:
streamlit run app.py
2. **训练模型**:
- 在侧边栏中上传提供的 `data.csv` 文件。
- 点击“Train Model”并等待准确率指标显示。
3. **分析文件**:
- 上传任何 PE 文件(例如 `samples/` 文件夹中的文件)。
- 点击“Analyze Files”以查看检测结果和置信水平。
## 🛡️ 环境要求
- Python 3.8+
- Scikit-learn (ML 框架)
- Pandas & Numpy (数据处理)
- Streamlit (Web UI)
- Matplotlib & Seaborn (可视化)
- Pefile (PE 解析)
## 🧠 现代恶意软件检测原理
最好的现代恶意软件检测系统并不依赖于单一方法。由于恶意软件不断演变,变得越来越隐蔽和复杂,顶级的网络安全工具采用了“多层”(或纵深防御)架构。
### 1. 高级特征码与启发式分析
- **特征码匹配**:这是最基础的防线。它将文件哈希值与一个包含已知恶意软件且不断更新的庞大数据库进行比对。虽然它无法捕获全新的威胁,但它能以近乎完美的准确率和极低的系统开销瞬间清除已知威胁。
- **启发式分析**:与寻找精确匹配不同,启发式分析通过检查代码结构来寻找可疑特征或违规行为。这有助于捕获试图绕过传统特征码扫描器的已知威胁的轻微变种(多态恶意软件)。
### 2. 行为监控
行为分析不仅仅关注文件本身的静态特征,而是监视文件在执行期间的行为。如果一个看似正常的应用程序突然尝试加密您的文档、修改系统注册表或在未经授权的情况下提升其权限,行为引擎将实时标记并终止该进程。
### 3. 机器学习与深度学习
顶级系统在包含良性文件和恶意文件的庞大数据集上训练机器学习模型。通过分析数千个不同的数据点,这些预测性 AI 模型可以根据未知文件的属性对其进行分类。这对于捕获没有现有特征码的“零日漏洞”(全新)威胁至关重要。
### 4. 沙盒(动态分析)
当检测系统遇到高度可疑但尚未验证的文件时,会在沙盒(一个安全、隔离的虚拟环境)中将其引爆。系统在不危及真实主机安全的情况下观察文件的行为(例如,检查它是否释放隐藏的有效载荷或连接到命令控制服务器)。
### 5. 基于云的威胁情报
最好的工具通常接入了全球威胁情报网络。如果在世界某处的计算机上检测到了新的恶意软件变种,相关的失陷指标(恶意的 IP、域名和文件哈希)将被立即上传至云端并推送出去,从而主动为全球所有其他用户拦截该威胁。
### 6. 端点检测与响应 (EDR)
标准的防病毒软件只能拦截已知的威胁。EDR 则更进一步,通过持续记录系统活动和端点遥测数据。如果某个感染成功绕过了初始防御,EDR 能够提供所发生事件的精确取证线索,并允许进行自动化遏制——例如,立即将受感染设备与网络其余部分隔离,以防止恶意软件扩散。
归根结底,传统的防病毒软件只是在向后看(针对已经被发现的威胁)。而最优秀的现代检测系统则是向前看的,它们结合这些分层技术来检测恶意意图,并在造成任何实际运营损害之前消除威胁。
## ⚖️ 许可证
该项目基于 MIT 许可证授权 - 详见 LICENSE 文件。
标签:AMSI绕过, Apex, Conpot, DNS 反向解析, Kubernetes, LSASS转储, matplotlib, numpy, pandas, pefile, PE文件分析, Python, scikit-learn, seaborn, Streamlit, Web仪表盘, Windows安全, 二进制分析, 云安全监控, 云安全运维, 威胁检测, 实时可视化, 数据科学, 无后门, 机器学习, 深度文件分析, 特征提取, 系统文件保护, 网络信息收集, 网络安全, 访问控制, 资源验证, 逆向工具, 随机森林分类器, 隐私保护, 静态分析