讨论一种基于tcp代理的SMTP防火墙和双因子认证及安全审计系统

邮箱和VPN安全,是企业安全运营的一大重点。而邮箱安全,却又常常成为企业安全的薄弱环节,攻击者经常借邮箱作为突破口,渗透企业内网。

简单地说,若没有有效的二次认证手段,VPN安全和邮箱安全是无法从根本上得到保证的。

今天讨论一种简单SMTP二次认证的实现方法。

概述

首先,SMTP服务不再直接暴露于外部不受信任的网络中,搬到内网。对内通过修改private DNS,内网主机可直接访问smtp服务器,因此,内网中所有服务均不受影响。

外部网络 <—> [SMTP防火墙] <—> 内网SMTP服务器 <–> 内网主机

外网必须通过防火墙(or 代理)来访问SMTP服务器。

代理的作用

1. 实现双因子认证

2. 主动拦截异常访问,主动报警

3. 安全审计

双因子认证功能的实现

SMTP是一个很简单的协议,考虑可以加入双因子认证的元素,只能是“用户名”、“密码”、“域名”、“端口”中的某一个。

我们考虑将这个因子附加到用户名中。

于是,用户在PC或手机上配置SMTP时,必须将用户名修改成系统提供的转换后的值,方可认证成功。而直接使用用户名,则是无法完成认证的。

举个例子,我的邮箱是[email protected],配置必须是:

Server:  smtpProxy.security.com      (代理服务器)

Port:      25                                    (TCP代理的端口号)

Username: lijiejie.188.test.py    (这里的用户名必须填入系统转换后的值)

Password: 原来的密码

这个lijiejie.188.test.py如何得来呢? 可以下发手机短信,当代理检查到用户名直接登录的情况,向用户手机上发送一个新的用户名,用户使用短信中的用户名进行认证。

如果有动态口令APP或者rsa securid,可以把动态密码附加到用户名后面。而一旦认证成功,完成一次绑定。今后的一个月中,用户都可以使用绑定的动态口令在任何外网的设备上登陆SMTP服务器。一个月之后,绑定过期,必须重新绑定新的口令。

代理检测到用户名和绑定的值不匹配,主动断开连接。

代理检查到用户名和绑定匹配,主动把用户名后面的字符串删除,再转发给内网的SMTP服务器。

双因子认证有什么好处?

1. 内网主机不需要绑定,因此,如果攻击者通过web漏洞获取到了某个邮箱的账号密码,在外网无法登入我们的SMTP服务器

2. 不改变原有SMTP协议,实施双因子认证。但缺点是这个因子实际是一个月才变化一次(One-Month-Password),而不是真正的One-Time-Password。

3. 这个绑定位于用户的PC和手机上,可以随时解绑。

一个简单的例子

这个demo是一个代理程序,它代理到applesmtp.163.com,只有在用户名后面加上.iqiyi.com,才可以完成认证。

https://gist.github.com/lijiejie/012e564ee0aae5283029

当然,这只是最基本的思路,非常不完善。

各种缺点也非常明显,本篇仅作原始的记录。

nmap小技巧[1] 探测大网络空间中的存活主机

nmap是所有安全爱好者应该熟练掌握的扫描工具,本篇介绍其在扫描大网络空间时的用法。

为什么要扫描大网络空间呢? 有这样的情形:

  1. 内网渗透   攻击者单点突破,进入内网后,需进一步扩大成果,可以先扫描整个私有网络空间,发现哪些主机是有利用价值的,例如10.1.1.1/8, 172.16.1.1/12, 192.168.1.1/16
  2. 全网扫描

扫描一个巨大的网络空间,我们最关心的是效率问题,即时间成本。 在足够迅速的前提下,宁可牺牲掉一些准确性。

扫描的基本思路是高并发地ping:

nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 -oX nmap_output.xml www.lijiejie.com/16

-sn    不扫描端口,只ping主机

-PE   通过ICMP echo判定主机是否存活

-n     不反向解析IP地址到域名

–min-hostgroup 1024    最小分组设置为1024个IP地址,当IP太多时,nmap需要分组,然后串行扫描

–min-parallelism 1024  这个参数非常关键,为了充分利用系统和网络资源,我们将探针的数目限定最小为1024

-oX nmap_output.xml    将结果以XML格式输出,文件名为nmap_output.xml

一旦扫描结束,解析XML文档即可得到哪些IP地址是存活的。

我测试扫描www.lijiejie.com/16这B段,65535个IP地址(存活10156),耗时112.03秒,如下图所示:

nmap_scan_large_networks

提示: 并发探针的数目可以根据自己的网络状况调整。