概要介绍
mmpi,是一款使用python实现的开源邮件快速检测工具库,基于community框架设计开发。mmpi支持对邮件头、邮件正文、邮件附件的解析检测,并输出json检测报告。
mmpi,代码项目地址:https://github.com/a232319779/mmpi,pypi项目地址https://pypi.org/project/mmpi/
mmpi,邮件快速检测工具库检测逻辑:
- 支持解析提取邮件头数据,包括收件人、发件人的姓名和邮箱,邮件主题,邮件发送时间,以及邮件原始发送IP。通过检测发件人邮箱和邮件原始发送IP,实现对邮件头的检测。
- 支持对邮件正文的解析检测,提取text和html格式的邮件正文,对text邮件正文进行关键字匹配,对html邮件正文进行解析分析检测,实现探针邮件检测、钓鱼邮件检测、垃圾邮件检测等其他检测。
- 支持对邮件附件等解析检测
ole文件格式:如doc、xls等,提取其中的vba宏代码、模板注入链接
zip文件格式:提取压缩文件列表,统计文件名、文件格式等
rtf文件格式:解析内嵌ole对象等
其他文件格式:如PE可执行文件
- 检测方式包括
基础信息规则检测方式
yara规则检测方式
适用前提
mmpi的分析判定检测前提:邮件系统环境。脱离邮件环境上下文,检测规则的依据就不可靠了。
使用方式
1. 安装
$ pip install mmpi
备注:windows安装yara-python,可以从这里下载
2. 命令执行
$ mmpi-run $email_path
3. 快速开始
from mmpi import mmpi def main(): emp = mmpi() emp.parse('test.eml') report = emp.get_report() print(report) if __name__ == "__main__": main()
4. 输出格式
{ // 固定字段 "headers": [], "body": [], "attachments": [], "signatures": [] // 动态字段 "vba": [], "rtf": [], }
工具特色
mmpi完全基于python开发,使用python原生email、html、zip库进行解析,基于oletool做定制化修改,支持对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:测试模块
检测规则示例说明
1. 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
2. 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
3. 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/" } ], "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 邮件检测工具mmpi的使用的详细内容,更多关于python mmpi库实现邮件检测的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】