Python邮件检测工具mmpi使用指南:解析、检测与规则配置

Oliver
Oliver
发布时间:2026-10-14| 5人浏览过
原创

本文详细介绍基于Python开发的开源邮件快速检测工具mmpi。该工具支持对邮件头、正文及附件(如OLE、ZIP、RTF等)的深度解析,结合YARA规则实现钓鱼、垃圾及恶意邮件检测。文章涵盖安装方法、命令行与API调用示例、代码结构解析及典型检测规则配置,帮助安全人员高效构建邮件安全检测流程。

概要介绍

mmpi是一款基于Python语言开发的开源邮件快速检测工具库,其架构设计灵感来源于community框架。该工具具备对邮件头部信息、邮件正文内容以及邮件附件进行解析与检测的能力,并最终生成结构化的JSON格式检测报告,便于后续自动化处理与分析。

mmpi的源代码托管于GitHub,项目地址为:https://github.com/a232319779/mmpi。同时,该工具已发布至PyPI仓库,可通过pip直接安装,项目地址为:https://pypi.org/project/mmpi/。

mmpi作为邮件快速检测工具库,其核心检测逻辑主要涵盖以下几个方面:

  • 首先,工具支持解析并提取邮件头部数据,包括发件人与收件人的姓名及邮箱地址、邮件主题、发送时间戳以及原始发送IP地址。通过对发件人邮箱与原始发送IP的交叉比对与分析,实现对邮件头部信息的完整性与真实性检测。
  • 其次,mmpi支持对邮件正文内容的解析与检测。它能够提取纯文本(text)和超文本标记语言(html)格式的邮件正文。对于纯文本正文,工具执行关键字匹配;对于HTML正文,则进行解析分析,以此实现探针邮件、钓鱼邮件及垃圾邮件等多种类型的检测。
  • 此外,mmpi还支持对邮件附件进行解析与检测,以识别潜在的安全威胁。

针对不同格式的附件,mmpi采取特定的解析策略: 对于OLE文件格式(如.doc、.xls等Office文档),工具会提取其中嵌入的VBA宏代码及模板注入链接。 对于ZIP文件格式,工具会提取压缩文件列表,并统计文件名、文件格式等元数据。 对于RTF文件格式,工具会解析其中嵌入的OLE对象。 对于其他文件格式(如PE可执行文件),工具也会进行相应的检测处理。

  • 在检测方式上,mmpi主要采用以下两种机制:

一是基础信息规则检测,二是基于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能够实现对其他类型文件的灵活检测,展现了其强大的扩展性与适应性。

项目代码结构


.
├── 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文件时,触发此规则,提示可能存在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'开头时,触发此规则,提示可能存在RTF漏洞利用。


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 邮件检测工具mmpi的使用的详细内容,更多关于python mmpi库实现邮件检测的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。