我知道只用一个浏览器就可以收发邮件的便利性,但是由于某些安全隐患问题,我建议收发邮件,最好还是使用一个客户端,而不要直接使用浏览器,不要将所有邮件都保存在服务器里。

这里说的是收发邮件,WebMail还是有其不可替代性,比如你除了收发邮件,你可能还要召回,你要查看登陆日志等等,还是需要经常性定期登陆WebMail。

我最近在折腾反钓鱼邮件演练。

这让我有机会来研究了邮件系统的安全问题,我前面多篇文章也提到了一些。在《继续说IPv6、HTTPS、HTTP/2,系列完结吧》里面我提到了某个邮件系统的:

  • IPv6未协助推广问题
  • 密码反暴力破解设计问题
  • 认证信息放到URL问题
  • API无独立绑定端口问题

在《高校邮件系统配置相关》,我提到

  • 将邮件系统部署展开
  • TLS问题

在这篇文章,我会继续提到

  • 历史XSS问题
  • 站外链接安全性问题
  • 内嵌图片隐私泄露问题
  • SSRF导致内网信息泄露问题
  • 默认配置不安全问题
  • UI列表安全信息展示不够问题
  • 会话折叠逻辑错误导致安全问题
  • 邮件系统网盘化的问题
  • 轻量级OTP的问题
  • RLO附件直接拒绝问题

以上问题不针对哪个具体的WebMail。Web UI要打开一个邮件,他其实要考虑非常多的安全问题,而有些手段的处理,导致会出现新的安全问题,我没有测试市面上其他的WebMail,只是对我经常使用的某个系统某个特定版本做了测试。以下我叫Isaac系统。

让我疑惑的是,有些公司很早就号称开始重视安全了,为什么有些问题还是这么low?

邮件本身没有那么安全

我以前说过,因为协议太古老,包袱太重,因为缺少端到端加密,所以邮件的私密性其实没有那么高。你的邮件实际上要明文过非常多的安全设备。邮件门事件,很普通的。

接着到验证问题,因为邮件地址不是一个强认证的体系,因为某些原因,你无法知道你收到的邮件就是谁发出的,就如同在生活中收到一封平邮,实际上也是很难知道这封平邮是否一定由他所宣称的人发出。

这封平邮是否被拆包又重新封包?以前你可能还可以认字迹,现在快递面单都是电子打印的。

你在快递公司查到的中转信息一定就是正确的么?以前发生过,异地上线,宣称从国外直发,实际上只是从国内某个地方发出。

SPF,比如你的主域名mail.example.com设置了严格的SPF,但是没有人会对所有子域名设置SPF,所以Mallory@maill.example.com的邮件会大概率不被放入垃圾邮件。

你能对谁说:我家的门牌号不想再收到快递了?因为别人给你发块砖头,不需要通过什么认证。

所以,对于邮件系统,有时候不能苛求太多。

敌人太狡猾,队友得给力

邮件系统,他应该有哪些过得去的安全能力?

这个涉及到,卖了一个平台给你,哪些安全能力算是必备,或者增值服务?

如果精力都放在补习班上,那很明显,课堂的教育质量可能就会下滑。

增值服务就会碰到厂商绑定问题,我们的很多系统其实都有这个问题。安全有木桶理论,也有天花板理论。一个运维公司的安全能力,就是你的天花板。有时候因为技术人员确实能力就是那样。有些是,技术人员其实有能力,但是不上心。

站外链接安全性问题

关于站外链接安全性问题,微信公众号和淘宝的做法是,我就没有站外链接。知乎等的做法是,跳出去我要你确认。Chrome新版也有更好的网络钓鱼检测技术。而邮件,我知道有些公司可以做到点击链接后使用增值服务进行保护。

内嵌图片隐私泄露问题

前段时间互联网邮件提供商暴露了邮件内容修改到系统的UI,在Isaac系统里,使用iframe隔离邮件内容和系统UI,可以在一定程度规避这个问题。

如果是客户端比如Outlook,对于图片,会先显示一个X,提示“为了帮助保护您的隐私,Outlook禁止自动下载该邮件中的某些图片。”。

邮件客户端和Office等会对互联网文件有防护配置,比如Outlook的“信任中心”,或者Word会在“受保护的视图”打开来自互联网的文件。

但是Isaac系统对图片的下载没有保护,默认就会下载,无配置项。

为了安全,在下载时,Isaac系统使用了func=user:proxyGet让服务器来帮你获取,这个屏蔽了你的IP地址的泄露,但是神奇的是,proxyGet好像会将客户端的agent信息发送给远程地址。

SSRF导致内网信息泄露问题

因为Isaac系统会帮你去取邮件,所以就会导致SSRF内网信息泄露问题。Isaac系统,你可以试着打开内嵌图片URL,然后就可以随意更改URL,不会有是否邮件内链接验证,不会有任何验证(或者有预防SSRF问题但是我们没有配置)。也就是,如果你的Isaac系统在内网,你可以构造URL获取到内网的图片地址。

我测试了,要获取HTML和PDF等文件,会有FA_DISALLOWED_CONTENT防护。

你也可以构造让邮件系统去获取一下某个威胁IP地址,你的安全设备就会被告警淹没,有可能直接干掉Isaac系统对外访问权限。

然后这样子,你也很难将独立部署的Web模块服务器限制对外访问。

UI的问题

以Isaac系统为例,邮件列表是这样子的:

在这个列表里,第一封邮件显示类似admin@example.com的内容,其实只是个可以随意修改的“名字”而已。

当打开这个列表后:

上面这张图,右边的那个向下的箭头,是一切安全的来源。

点击过后,你才会真正看到这封邮件来自恶意用户。

然而这个非常重要的显示功能没有配置项,toggle是记录在Cookie里的,默认是关闭的。

会话折叠逻辑错误导致安全问题

邮件显示可以以“会话模式”来显示,很早以前应该是Gmail,在一个界面折叠跟某个用户关于某个主题的所有往来,确实有些方便的地方,但是如何把一些邮件分组成会话,Isaac系统犯了错误。

比如上面这张图片,第一封是正常的通知,接下来3封都是钓鱼邮件,第二封是两个@,第三封和第四封的@其实是全角的@,睁大眼睛!(因为我做了白名单,直接绕过安全网关,是否安全网关会拦截我不确认),但是Isaac系统错误得将这些认为是同一个会话。导致“垃圾邮件”跟“系统认证可信来源”邮件混淆在一起。 。

我也测试了Outlook客户端,在“查找相关项”里,Outlook不会做全匹配,也是会将标点符号过滤掉再来显示。

邮件网盘化带来的问题

很多人使用WebMail是因为有多台电脑,为了在多个地方登陆可以看到完整的历史邮件,这导致邮件系统网盘化。这会带来一个非常大的问题,一旦邮件密码泄露,几万封敏感邮件一次性就泄露了。

如果是一个网盘,为了安全,可能需要双因素认证,或者客户端应用认证,需要提供能力让用户自行备份网盘数据,如果邮件系统要支持网盘化,得考虑匹配网盘功能的能力。又因为SMTP、POP等服务没法双因素认证,所以得有某种机制可以关闭这些服务。Isaac系统有“客户端专用密码,仅在生成时可见。”,可能可以实现这个目的。

当然,正确的做法应当是,不使用WebMail,使用客户端下载邮件,定期删除邮件,然后将客户端文件放到网盘共享。

安全中心

《每个业务系统都应当有一个安全中心》。Isaac系统暂时无。在安全中心应当有什么内容?

我一般推荐定期使用客户端删除过期邮件,但是你如果在Issac系统上配置了“邮件自动保存到 已发送 、SMTP发信后保存到 已发送”(为了召回,当然,Isaac系统支持从已发送列表召回),是无法自动删除的。所以不应当配置。

展示自动转发配置。

Isaac系统的登陆查询功能略为简陋,只是全部列出,无法做过滤,比如过滤已知IP,登陆方式等等。

Issac系统为了推广自己的App,不使用轻量级的双因素认证OTP。