mailoney蜜罐学习记录
2020-05-27 10:27:00 Author: xz.aliyun.com(查看原文) 阅读量:292 收藏

Mailoney是T-pot蜜罐系统中针对SMTP协议的一个蜜罐,该蜜罐中有三种工作模式,分别为open_relay,postfix_creds,schizo_open_relay。各种模式功能如下:
open_relay-只是一个通用的open relay,将收到的邮件远程主机地址,收件方,发件方和传输的数据都存到了logs/mail.log中。
postfix_creds-此模块只记录登录尝试的用户名密码,将其存放在存放在logs/credentials.log中。
schizo_open_relay-此模块记录所有内容,将收到的邮件远程主机地址,收件方,发件方和传输的数据都存到了logs/mail.log中,同时增加了对shellcode的检测和记录,若存在shellcode,则将数据存放在shellcode.log中;增加了对命令的检测和记录,若存在命令执行,则将命令存放在commands.log中。该模式还增加了hpfeeds协议,方便在集成的 T-pot系统中进行信息传输。

工作流程

Maioney通过命令行模式运行蜜罐,设定的参数如下:

> usage: mailoney.py [-h] [-i <ip address>] [-p <port>] [-s mailserver] -t
                   {open_relay,postfix_creds,schizo_open_relay}
                   [-logpath <logpath>] [-hpfserver <hpfeeds-server>]
                   [-hpfport <hpfeeds-port>] [-hpfident <hpfeeds-ident>]
                   [-hpfsecret <hpfeeds-secret>]
                   [-hpfchannelprefix <hpfeeds-channel-prefix>]

使用时必须指定-t参数确定工作模式
项目的ip和监听端口在不指定的情况下默认为0.0.0.0:25
蜜罐运行时会首先根据参数设定变量值,创建日志存放目录,根据指定的模式运行对应脚本。

接下来对几种模式进行介绍。

功能实现

open_relay

open_relay工作模式记录尝试发送的全文电子邮件,其中定义了一个OpenRelay类,并创建OpenRelay对象对SMTP进行搭建,监听,OpenRelay类继承了smtpd 中的SMTPServer类,并对该类的process_message方法进行了重写。重写的process_message方法将收到的邮件远程主机地址,收件方,发件方和传输的数据都存到了logs/mail.log中,代码如下图所示:

postfix_creds

postfix_creds模式会记录登录尝试的用户名和密码信息,并将捕获的信息存放在logs/credentials.log中。这种模式的意义在于记录攻击方的burp字典,借鉴提高真实的系统中用户名密码安全性。
服务器端服务由socket包实现,对指定的ip及端口进行监听。

EHLO命令ehlo是对helo的扩展,即extend helo,可以支持authorization,即用户认证。每次连接首先判断是否收到ehlo命令,收到该命令后才能进行认证登录。

然后判断是否收到AUTH请求,若收到该请求可以将请求的认证信息存储下来。

该模式下的AUTH认证是无法成功登陆的,因为没有设定用户信息

schizo_open_relay

schizo_open_relay模式对比open_relay模式略有变化,增加了对shellcode的检测和记录,若存在shellcode,则将数据存放在shellcode.log中,也增加了EHLO和AUTH命令。
功能变化在于对SMTPServer类和该类继承的SMTPChannel类进行了更改。

SMTPChannel类的变化

该模式中的SMTPChannel类在原有SMTPChannel类的基础上增加了smtp_EHLO,smtp_AUTH方法,使蜜罐可以接受EHLO和AUTH命令。

SMTPChannel类同时对collect_incoming_data和found_terminator方法进行了重写。collect_incoming_data方法是对接受到信息的一个预处理,若客户端传输的数据大小超过了1M,则会对数据进行缩减,删去前面1M内容,然后调用process_packet_for_shellcode方法对数据进行shellcode检测。

process_packet_for_shellcode方法中调用了pylibemu模块,该模块可以实现对shellcode的识别,其中test方法可以剖析shellcode字节并识别Windows系统调用,以及其参数和返回值等。若存在shellcode,则将数据存放在shellcode.log中。


found_terminator方法在识别客户端发出的命令并执行的同时将命令存储在commands.log中

SMTPServer类的更改

对SMTPServer类的更改则是去掉了部分的信息回显,增加了handle_close函数,用于关闭当今连接。
对SMTPServer类的继承
SchizoOpenRelay是SMTPServer类的子类,它对process_message方法进行了重写,将邮件ip,端口,发送方,接收方和传输的数据存在mail.log中。

Hpfeeds协议

如上图所示,schizo_openrelay模式使用了Hpfeeds协议, hpfeeds是一个轻量级的、需要认证的、支持任意的二进制载荷的公开协议。发布者/订阅者拥有着自己的发布/订阅频道,发布者可以通过发布频道发送消息,订阅者可以通过订阅频道接收消息,这很适合用于分布式的蜜罐网络传输数据。
当系统记录信息时,在将信息记录到本地log文件的同时会将信息通过发布频道上传到hpfeeds服务器。

对schizo_open_relay的AUTH功能进行优化,添加参数设置SMTP服务的用户名密码,用户信息建议使用常见弱密码,目的在于提升蜜罐的迷惑性。
首先增加参数设置,用户名密码默认为user/password


然后对smtp_AUTH函数进行修改


文章来源: http://xz.aliyun.com/t/7780
如有侵权请联系:admin#unsafe.sh