共计 4321 个字符,预计需要花费 11 分钟才能阅读完成。
概要介绍
mmpi,是一款应用 python 实现的开源邮件疾速检测工具库,基于 community 框架设计开发。mmpi 反对对邮件头、邮件注释、邮件附件的解析检测,并输入 json 检测报告。
代码我的项目地址:mmpi
pypi 我的项目地址:pypi
mmpi,邮件疾速检测工具库检测逻辑:
反对解析提取邮件头数据,包含收件人、发件人的姓名和邮箱,邮件主题,邮件发送工夫,以及邮件原始发送 IP。通过检测发件人邮箱和邮件原始发送 IP,实现对邮件头的检测。
反对对邮件注释的解析检测,提取 text 和 html 格局的邮件注释,对 text 邮件注释进行关键字匹配,对 html 邮件注释进行解析剖析检测,实现探针邮件检测、钓鱼邮件检测、垃圾邮件检测等其余检测。
反对对邮件附件等解析检测
ole 文件格式:如 doc、xls 等,提取其中的 vba 宏代码、模板注入链接
zip 文件格式:提取压缩文件列表,统计文件名、文件格式等
rtf 文件格式:解析内嵌 ole 对象等
其余文件格式:如 PE 可执行文件
检测形式包含
根底信息规定检测形式
yara 规定检测形式
实用前提
mmpi 的剖析断定检测前提:邮件系统环境。脱离邮件环境上下文,检测规定的根据就不牢靠了。
应用形式
- 装置
$ pip install mmpi
备注:windows 装置 yara-python,点击这里下载
- 命令执行
$ mmpi-run $email_path
- 疾速开始
from mmpi import mmpi
def main():
emp = mmpi()
emp.parse('test.eml')
report = emp.get_report()
print(report)
if __name__ == "__main__":
main()
- 输入格局
{
// 固定字段
"headers": [],
"body": [],
"attachments": [],
"signatures": []
// 动静字段
"vba": [],
"rtf": [],
......
}
工具阐明
mmpi 齐全基于 python 开发,应用 python 原生 email、html、zip 库进行解析,基于 oletools 做定制化批改,反对对 office 文档和 rtf 文档的解析,再联合 yara 实现对其余文件的检测。
我的项目代码构造
.
├── mmpi
│ ├── common
│ ├── core
│ ├── data
│ │ ├── signatures
│ │ │ ├── eml
│ │ │ ├── html
│ │ │ ├── ole
│ │ │ ├── other
│ │ │ ├── rtf
│ │ │ └── zip
│ │ ├── white
│ │ └── yara
│ │ ├── exe
│ │ ├── pdf
│ │ └── vba
│ └── processing
└── tests
└── samples
mmpi/common:根底模块,实现根本流程性能
mmpi/core:外围调度模块,实现插件的加载及相干模块的初始化
mmpi/data:外围检测模块,实现根本检测规定及 yara 检测规定
mmpi/processing:外围解析模块,实现 eml、html、zip 等文件格式的解析
tests:测试模块
检测规定示例阐明
- PE 文件假装文档类检测
检测规定:压缩包中文件名以.exe 结尾,并且两头插入 20 个以上空格的
class PEFakeDocument(Signature):
authors = ["ddvv"]
sig_type = 'zip'
name = "pe_fake_document"
severity = 9
description = "PE File Fake Document"
def on_complete(self):
results = self.get_results()
for result in results:
if result.get('type', '') == self.sig_type:
infos = result.get('value', {}).get('infos', [])
for info in infos:
file_type = info.get('type')
file_name = info.get('name')
space_count = file_name.count(' ')
if 'exe' == file_type and space_count > 20:
self.mark(type="zip", tag=self.name, data=info.get('name'))
return self.has_marks()
return None
- DLL 劫持检测
检测规定:压缩包中同时存在 exe 和 dll 文件
class DLLHijacking(Signature):
authors = ["ddvv"]
sig_type = 'zip'
name = "dll_hijacking"
severity = 9
description = "DLL Hijacking"
def on_complete(self):
results = self.get_results()
for result in results:
if result.get('type', '') == self.sig_type:
infos = result.get('value', {}).get('infos', [])
file_types = [info.get('type') for info in infos]
if set(['exe', 'dll']).issubset(file_types):
self.mark(type="zip", tag=self.name)
return self.has_marks()
return None
- RTF 破绽利用检测
检测规定:RTF 文档中存在 OLE 对象,并且 class_name 是 OLE2Link 或者以 equation 结尾
class RTFExploitDetected(Signature):
authors = ["ddvv"]
sig_type = 'rtf'
name = "rtf_exploit_detected"
severity = 9
description = "RTF Exploit Detected"
def on_complete(self):
results = self.get_results()
for result in results:
if result.get('type', '') == self.sig_type:
infos = result.get('value', {}).get('infos', [])
for info in infos:
if info.get('is_ole', False):
class_name = info.get('class_name', '')
if class_name == 'OLE2Link' or class_name.lower().startswith('equation'):
self.mark(type="rtf", tag=self.name)
return self.has_marks()
return None
后果示例
后果阐明:邮件蕴含破绽利用的 RTF 文档,属于歹意邮件。
包含收发件人信息、主题信息、发送工夫,邮件注释,以及附件信息。
vba 和 rtf 字段为附件检测根本信息。
signatures 字段阐明命中规定。
{
"headers": [
{
"From": [
{"name": "Mohd Mukhriz Ramli (MLNG/GNE)",
"addr": "info@vm1599159.3ssd.had.wf"
}
],
"To": [
{"name": "","addr":""}
],
"Subject": "Re: Proforma Invoice",
"Date": "2020-11-24 12:37:38 UTC+01:00",
"X-Originating-IP": []}
],
"body": [
{
"type": "text",
"content": "\nDEAR SIR, \n\nPLEASE SIGN THE PROFORMA INVOICE SO THAT I CAN PAY AS SOON AS POSSIBLE.\n\nATTACHED IS THE PROFORMA INVOICE,\n\nPLEASE REPLY QUICKLY, \n\nTHANKS & REGARDS' \n\nRAJASHEKAR \n\n Dubai I Kuwait I Saudi Arabia I India I Egypt \nKuwait: +965 22261501 \nSaudi Arabia: +966 920033029 \nUAE: +971 42431343 \nEmail ID: help@rehlat.co [1]m\n \n\nLinks:\n------\n[1]\nhttps://deref-mail.com/mail/client/OV1N7sILlK8/dereferrer/?redirectUrl=https%3A%2F%2Fe.mail.ru%2Fcompose%2F%3Fmailto%3Dmailto%253ahelp%40rehlat.com"
}
],
"attachments": [
{
"type": "doc",
"filename": "Proforma Invoice.doc",
"filesize": 1826535,
"md5": "558c4aa596b0c4259182253a86b35e8c",
"sha1": "63982d410879c09ca090a64873bc582fcc7d802b"
}
],
"vba": [],
"rtf": [
{
"is_ole": true,
"format_id": 2,
"format_type": "Embedded",
"class_name": "EQUATion.3",
"data_size": 912305,
"md5": "a5cee525de80eb537cfea247271ad714"
}
],
"signatures": [
{
"name": "rtf_suspicious_detected",
"description": "RTF Suspicious Detected",
"severity": 3,
"marks": [
{
"type": "rtf",
"tag": "rtf_suspicious_detected"
}
],
"markcount": 1
},
{
"name": "rtf_exploit_detected",
"description": "RTF Exploit Detected",
"severity": 9,
"marks": [
{
"type": "rtf",
"tag": "rtf_exploit_detected"
}
],
"markcount": 1
}
]
}
以上就是本次分享的全部内容,当初想要学习编程的小伙伴欢送关注 Python 技术大本营,获取更多技能与教程。