邮件系统作为一种有效的内外部工作沟通平台,在企业内得到广泛使用。同时,广告邮件、垃圾邮件、钓鱼邮件等问题就成了企业邮件安全头号难题。所以我们的企业安全人员以往更多关注反垃圾邮件,向对数据保密,反钓鱼方向演进。
然而,从Email诞生到今天,SMTP协议没有根本性变化。这对攻击者而言是一个利好消息。因此,邮件成为了突破一家企业边界,发起网络攻击和信息窃取非常好的入口。我们看到,近年来随着技术水平的提升和利益的趋动,APT攻击、勒索软件开始流行起来。从美国大选,希拉里邮箱被黑客攻破到每一个人都遇到的Locky,Wannercry 勒索软件通过钓鱼邮件方式大量传播,很多企业用户中招导致文档被加密都有从侧面印证这一点。本文从作者从企业建设和个人日常邮件使用两个层面,既为企业邮件安全建设提出建议,也为个人日常邮件使用提供一些技巧,帮助企业减少邮件方面所面临的困扰。
0x01企业建设
服务器通用安全防护
大多邮件服务器同大多数企业自建立系统一样,很多客户的邮件也都有对外的WEB端,因此,对外发布后都有WEB应用系统所面临的攻击邮件系统都有可能遇到。如 anymacro邮件系统SQL注入:anymacro是国内较流行的一家企业级邮箱系统,客户主要为教育/政府机构。注入点存在的位置:https://mail.xxx.com/down.php?netdisk=1
因此,在基础防护这部分,建议企业在邮件系统防护过程中部署NF,IPS,WAF等安全防护设备,以保护邮件服务器的基础环境安全。
邮件服务器特有威胁防护
1、发件人身份伪造防护
除了互联网或WEB业务通用的安全问题外,邮件还有其自身的一些性安全隐患,最为常见的是邮件发件人身份伪造。
邮件发件身份伪造攻击是指攻击者冒充、伪造或篡改真实的用户地址来发送邮件,以达到迷惑被攻击者,实现钓鱼或其他目的。也是近年来攻击者使用邮件进行攻击最为常用的方式。究其根本原因是SMTP协议本身的缺陷^1引起的。STMP协议被设计和制作时,鉴于历史原因,并没有考虑到身份认证等安全性问题。使用SMTP进行邮件发送时,其实是不需要进行发送者身份认证的,这可能和各位感受到的情况不一样,我们发送邮件时都需要登录呀,其实,这是邮件服务商来实现的,而并不是SMTP协议所必须的。鉴于这种缺陷,邮件发送人往往可以冒充他人的身份进行邮件发送。常见的防护方法有发件人策略框架(SPF)和域名密钥识别邮件(DKIM)两种,下面分别描述。
2、SPF防邮件伪造
SPF(Sender Policy Framework) 是一种以IP地址认证电子邮件发件人身份的技术。其工作流程如下:
当企业定义了邮件域名的SPF记录之后,邮件接收方会在收到你的邮件后,首先检查域名对应的SPF记录(图中2步),来确定发送者的IP地址是否包含在SPF记录里(图中3步),从而判断邮件的真实发送源。如果发件IP存在于SPF记录中,就认为是一封正确的邮件(图中5步),否则会被认为是一封伪造的邮件进行退回或丢弃处理(图中6步)。SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。设置正确的 SPF 记录可以提高邮件系统发送外域邮件的成功率,也可以一定程度上防止别人假冒你的域名发邮件。
(1)设置SPF记录
SPF 是通过「SPF 记录」和「TXT 记录」来检查的。使用 TXT 记录主要是兼容性的考量:一部分老的 DNS 服务器有可能不支持 SPF 记录,因此只能拿 TXT 记录来代替;OpenSPF 建议在这段过渡时期,SPF 记录和 TXT 记录都要添加,SPF 记和 TXT 记录因此也是非常相近的。以阿里云图形化配置为例:
(2)记录类型:选择TXT;
主机记录:一般是指子域名的前缀(如需为子域名为 mail.dns-example.com 添加 TXT 记录, 主机记录输入mail;如需为dns-example.com添加TXT记录,主机记录输入@),常见的作法是输入@为dns-example.com添加SPF记录;
解析线路:默认为必选项,未设置会导致部分用户无法解析;
记录值:最典型的 SPF 格式的 TXT 记录例子为“v=spf1 a mx ~all”,表示只有这个域名的 A 记录和 MX 记录中的 IP 地址有权限使用这个域名发送邮件。也要以使用IP来进行设置,格式如下:
代码语言:javascript复制v=spf1 ip4:192.0.2.128 ip4:198.51.100.128 ip4:203.0.113.0/24 ip6:2001:db8::/32 ?all
如果要让其他域名或其他公司的邮件系统可为代发邮件,可以加入其他域名,对应的IP或对应公司spf记录中的值,格式如下:
代码语言:javascript复制v=spf1 include:spf-a.mail.qq.com include:spf-b.mail.qq.com include:spf-c.mail.qq.com include:spf-d.mail.qq.com include:spf-e.mail.qq.com include:spf-f.mail.qq.com -all
TTL:为缓存时间,数值越小,修改记录各地生效时间越快,默认为10分钟。如果是使用的自建服务器,修改对应的配置文件即可,以BIND9为例^2,配置语法如下:
代码语言:javascript复制qq.com. 3600 IN TXT "v=spf1 include:spf-a.mail.qq.com include:spf-b.mail.qq.com include:spf-c.mail.qq.com include:spf-d.mail.qq.com include:spf-e.mail.qq.com include:spf-f.mail.qq.com -all" /*引用spf对应域名*/
spf-a.mail.qq.com. 3600 IN TXT "v=spf1 ip4:203.205.251.0/24 ip4:103.7.29.0/24 ip4:59.36.129.0/24 ip4:113.108.23.0/24 ip4:113.108.11.0/24 ip4:119.147.193.0/24 ip4:119.147.194.0/24 ip4:59.78.209.0/24 -all" /*定义SPF域名所对应的IP*/
spf-b.mail.qq.com. 3600 IN TXT "v=spf1 补充为对应的A或AAAA记录" /*定义SPF域名所对应的IP*/
... /*定义SPF域名所对应的IP*/
3、DKIM(DomainKeysIdentified Mail)防邮件做伪造
域名密钥识别邮件(DKIM)是一种防范电子邮件欺诈的验证技术。其 使用一对密钥(一个私钥和一个公钥)来验证邮件内容是否被篡改或伪造,主要通过以下步骤来实现。
1、将与邮件服务器匹配的公钥添加到邮件域名系统 (DNS) 记录中,通常通过TXT记录来实现。 2、发件服务器使用私钥对所有外发的邮件中添加加密标头。 3、收件方电子邮件服务器从DNS记录中获取公钥,并使用此公钥解密邮件标头,来验证邮件来源。
其工作原理及流程如下图:
(1)配置DKIM
DKIM的设置比较简单,从其工作原理来看,只需要如下3点即可:
为您的网域生成域名密钥。生成密钥时有两点需要注意,如你使用的DNS的txt记录为256位,DKIM密钥长度要选择1024位,如果没有此限制,则可以选择2048位密钥。如果注册商支持 2048 位的密钥,我们建议您使用该长度的密钥。如果您先使用 1024 位密钥,后期切换到 2048 位密钥,也不会有任何影响。可以使用 openssl 工具生成一对公钥和密钥,Windows 和 Linux 都可以操作,请自行搜索方法;或者在http://dkimcore.org/tools/网站在线生成。
向网域的 DNS 记录添加公钥。电子邮件服务器可使用此密钥读取邮件 DKIM 标头。
开启 DKIM 签名功能以开始将 DKIM 签名添加到所有外发邮件中。
(2)配置DKIM操作示例
具体操作步骤根据邮件服务商的不同而略有不同,以下以Winmail为例进行说明^3:第1步,在”反垃圾设置”/“SMTP设置”下, 选择”启用 DKIM (DomainKeys Identified Mail) 检查”。
第2步:Winmail 里设置域名发件使用 DKIM 数字签名在要设置的域名 abc.com 属性的 DKIM 标签里点击”生成私钥”
“选择器”一定要有,默认是: mail,可以自己设置,完整拷贝上面的 “TXT 记录”,例如:
代码语言:javascript复制mail._domainkey.abc.com TXT k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQ...
Winmail 会从私钥自动生成公钥进而生成 TXT 记录值,所以只输入私钥就可以了。第三步. 在域名服务商域名解析系统里增加一条 TXT 记录,例如:
代码语言:javascript复制记录类型 主机记录 记录值
TXT mail._domainkey k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQ...
增加 TXT 记录后,需要一段时间(10分钟-24小时)才能生效,可以使用命令行查询:
代码语言:javascript复制nslookup -q=txt mail._domainkey.abc.com
如果已经生效,会显示:
代码语言:javascript复制mail._domainkey.abc.com text = "k=rsa; p=MIGfMA0GCSqGSIb3...
第四步.如果 Winmail 里有多域名,DKIM 要生成不同的密钥分别设置,也可以有的设置有的不设置第五步接收邮件测试,确认 DKIM 检查生效可以使用 qq 邮箱发进来一封邮件,查看 Winmail 里的 smtp 日志,会有出现 DKIM verifying enabled 或 启用 DKIM 验证 字样。第六步发送邮件测试,确认每封邮件信头里存在 DKIM 数字签名字串发一封邮件到内部邮箱,发给自己也可以,查看 Winmail 里的 smtp 日志,会有出现 DKIM signing enabled、启用 DKIM 签名 字样。在 Webmail 里查看这封邮件,选择”更多”-“邮件源码”,在邮件头里会出现一段如下文字:
代码语言:javascript复制DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=abc.com; s=mail; t=1458090487; h=Date:From:To:
Reply-To:Subject:Message-ID:Content-Type:MIME-Version; bh=RBrzM2
ccFCYSkSJUKwSj5FQ/IQj6UrOI1/ rZiw0 aI=; b=Esn3j84HzzVC VbRgf/i7N
...
SWtPgVyJx91CJKFGbVaFI=
外发一封邮件到外网邮箱,查看 Winmail 里的 smtp 日志,会有出现 DKIM signing enabled、启用 DKIM 签名 字样。如果是发到 qq.com, 在 QQ Webmail 打开这封邮件,选择
“显示邮件原文”,在邮件头里会出现一段如下文字:
代码语言:javascript复制DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=abc.com; s=mail; t=1458091059; h=Date:From:To:
Reply-To:Subject:Message-ID:Content-Type:MIME-Version; bh=JtLpkA
GBbI9j6KEs01UI/CKmX5rvvrJ6O9QcCgb5i1I=; b=J5xXBMdm8Q5Y66orv Skoq
...
cT/oVvXPMvEbi mJwoqbM=
4、基于域的消息认证,报告和一致性(DMARC)
那在配置了SPF和DKIM后,如何让外界得知旗下域名的电子邮件提供何种方式认证身份?是使用SPF,DKIM,还是两者都使用?如果寄件者身份未能得到百分之百确认,收件者可以如何处理邮件?是放进垃圾箱,还是直接回绝?有没有一种机制可以让邮件管理员了解此时此此刻是否有第三者正在伪冒其网域身份发送电子邮呢?带着这些问题,我们了解一下DMARC。基于域的消息认证,报告和一致性(DMARC,Domain-based Message Authentication, Reporting and Conformance)是一套以 SPF防邮件伪造DKIM(DomainKeysIdentified Mail)防邮件做伪造为基础的电子邮件认证机制,可以检测及防止伪冒身份、对付网络钓鱼或垃圾电邮。^4邮件管理员可以通过在网域的 DNS 记录中添加 DMARC 政策,从而启用基于网域的消息认证、报告和一致性 (DMARC) 验证机制。该策略同样使用采用 DNS TXT 记录形式,指定您的网域如何处理可疑电子邮件。DMARC 政策支持三种处理可疑电子邮件的方式:
不对邮件采取任何操作,仅将其记录在每日报告中。 将邮件标记为垃圾邮件。Gmail 会将这些邮件放入收件人的垃圾邮件文件夹。 通知接收邮件的服务器拒绝邮件。这也会导致 SMTP 将邮件退回给发件人。
DMARC TXT 记录值:
标记名称 | 是否必需 | 说明和值 |
---|---|---|
v | 必需 | 协议版本。必须为 DMARC1 |
p | 必需 | 指定网域处理可疑邮件的方式:none:不对邮件采取任何操作。将可疑邮件记录在每日报告中。quarantine:将邮件标记为垃圾邮件,并将其移至收件人的垃圾邮件文件夹。收件人可以通过查看其垃圾邮件查看邮件。reject:通知接收邮件的服务器拒绝邮件。发生这种情况时,接收邮件的服务器应该会向发送邮件的服务器发送退件通知。 |
pct | 可选 | 设置要对百分之多少的可疑邮件应用 DMARC 政策。可疑邮件是指未通过 DMARC 检查的邮件。必须是 1 到 100 之间的整数。默认值为 100。 |
rua | 可选 | 用于接收有关您网域的 DMARC 活动报告的电子邮件地址。请使用您自己的电子邮件地址或创建新的电子邮件地址来接收报告。电子邮件地址必须包含 mailto:,例如:mailto:dmarc-reports@abc.com |
sp | 可选 | 为主网域中子网域发送的邮件设置政策。如果您想为子网域指定不同的 DMARC 政策,请使用此选项。none:不对邮件采取任何操作。将可疑邮件记录在每日报告中。quarantine:将邮件标记为垃圾邮件,并保留邮件以进行后续处理。*reject:指示接收邮件的服务器拒绝邮件。 |
adkim | 可选 | 设置 DKIM 匹配模式。该模式会指定邮件信息与 DKIM 签名应有的匹配程度。s:严格。发件人域名必须与 DKIM 邮件标头中对应的 d=name 完全匹配。r:宽松(默认设置)。允许部分匹配。接受 DKIM 邮件标头中 d=domain 的任何有效子网域。 |
aspf | 可选 | 设置 SPF 匹配模式 (ASPF)。该模式会指定邮件信息与 SPF 签名应有的匹配程度。s:严格。邮件的 from: 标头必须与 SMTP MAIL FROM 命令中的 domain.name 完全匹配 r:宽松(默认设置)。允许部分匹配。接受 d=domain 的任何有效子网域。 |
DMARC 政策示例:
针对未通过 DMARC 检查的邮件执行的操作 | TXT 记录内容 |
---|---|
对未通过 DMARC 检查的邮件不执行任何操作。通过电子邮件将每日报告发送到 dmarc@qq.com。 | v=DMARC1; p=none; rua=mailto:dmarc@qq.com |
对于未通过 DMARC 检查的邮件,将其中的 5% 放入收件人的垃圾邮件文件夹。通过电子邮件将每日报告发送到 dmarc@qq.com。 | v=DMARC1; p=quarantine; pct=5; rua=mailto:dmarc@qq.com |
拒绝所有未通过 DMARC 检查的邮件。将每日报告发送到以下两个地址:postmaster@qq.com 和 dmarc@qq.com。SMTP 将未通过检查的邮件退回给发件人。 | v=DMARC1; p=reject; rua=mailto:postmaster@qq.com, mailto:dmarc@qq.com |
注:要将报告发送到多个电子邮件地址,请使用英文逗号分隔电子邮件地址。
添加 TXT 记录以启用 DMARC
在_dmarc处添加一条 DNS 记录
TXT record name(TXT 记录名称):在 DNS 主机名下方的第一个字段中输入:
代码语言:javascript复制_dmarc.abc.com
TXT record value(TXT 记录值):在第二个字段中输入指定您的 DMARC 政策的值,例如:
代码语言:javascript复制v=DMARC1; p=reject; rua=mailto:postmaster@qq.com, mailto:dmarc@qq.com
注:以上解析将实现“拒绝所有未通过 DMARC 检查的邮件。将每日报告发送到以下两个地址:postmaster@qq.com 和 dmarc@qq.com。SMTP 将未通过检查的邮件退回给发件人”政策。
小结
对大部分企业来讲,通过以上步骤的加固和优化,可以大幅度提升企业邮件安全性,有效防止被伪造,即便是被伪造,由于以上配置的成功引用可以让大部分伪造邮件退回或当作垃圾邮件处理,强烈自建邮箱系统的用户通过以上配置加强邮件系统。另外,如果你的邮箱配置了SPF或DKIM后,大部分公网邮箱也会将您企业邮箱的信任程度提升,这将有助于提高邮箱发信成功率。
企业邮件系统配置
第一部分主要向大家介绍了邮件系统所面临的一些技术漏洞和所需要采取的措施,这部分将从邮件系统配置和使用方面来帮助企业进行邮件系统加固。这里的配置主要是加强邮件日常使用的安全性,降低用户在日常使用过程中信息泄露风险或是在密码泄露后,尽可能地将损失降至最低。
1、收发信密码独立设置
攻击者对于日常邮件系统的攻击,最主要的是针对邮件密码的攻击。通过获得邮箱密码来进行信息窃取或者以被攻击邮箱为工具进行其他攻击。建议企业在日常的邮件设置中,将收件密码和发件密码独立设置。此时,如果收件密码泄露后,攻击者并不能使用该邮箱进行发件操作,进行钓鱼邮件发送或病毒木马投递,有效保护邮件和其他通讯录成员的安全。
2、收件密码采用双因素认证
前面说到,日常邮件使用过程中,邮件登录密码(通常是收信密码)比较容易被攻击者拿到。建议企业将收发信密码独立后,对于收信密码进行双因子强认证,尽可能降低密码泄露的风险。同时,由于SMTP协议的局限性,收信密码攻击者可以通过相关工具进行暴力破解。如果有员工使用了弱口令,则很容易被攻击者拿下。这里多说一下,很多企业认为自己的WEB邮箱有验证码等方式,可以防止暴力破解,其实这种限制仅在WEB层面有效,如果攻击者直接使用SMTP协议认证工具进行暴力破解或密码猜测,就直接绕过了WEB层的验证码。
3、配置防猜解防攻击
上面说过,基于SMTP协议本身的局限性,登录密码很有可能被暴力破解,虽然大多数邮件系统自带的防猜解并不能抵御所有的暴力猜解,但在此仍建议企业开户此类防护手段。例如限定每分钟或一段时间内每个IP可以登录失败的次数,限定每分钟或一段时间内每个邮箱账户登录失败的次数,限定每分钟或一段时间内每个用户SMTP认证次数等等。
4、关闭非SSL服务及不安全的 SSL,TLS 版本且关闭 R**
使用SSL加密可以有效防止中间人攻击,以及对邮件和监听和篡改。并且为了加密保护的有效性,请关闭不安全的SSL,TLS版本,且关闭R。如果开启了WEB服务,请在WEB服务处关闭对应的不安全SSL和TLS版本及R。
5、限制分配群发权限或限制用户单日可发邮件数目上限
攻击者通常拿到一个邮箱登录权限后,并不满足于当前邮箱中的内容。会通过该邮箱进行战果扩大,常见的作法是通过群发邮件来进行向企业其他员工发送钓鱼邮件,获得更多的邮箱登录权限。如果是其他反动组织,也会用此邮箱进行反动内容的群发。由于互联网邮箱邮件在发送数目,实名等方面的问题,所以邮件发送无上限的企业邮箱通是这类组织进行反动内容宣传的首选。因此,建议企业在为同工开通群发权限时,谨慎设计,例如收件人超过10人时,可以提示请减少发件人或分批发送。对于工作中确实有群有需要的员工,可以进行单独的权限设定,也可以以建立特殊邮件组的方式规避群发的使用。同时,企业需要定期清理不使用的群发权限。在我从业10年的经历中,群发功能也就使用过一次,可以推而广之,很多企业的员工,群发权限并不必要。另外,对于一个邮箱单日可以发送的邮件数目上限也建议进行限定,以提高攻击成本。
6、定期对邮件进行归档
定期对邮件进行归档,可以防止攻击者拿到收件密码后,过多的收取邮件内容。如果以年为单位进行归档。攻击者就算拿到收件密码,也仅能收取当年度的邮件,这样就可以有效控制数据的泄露范围。如果归档时间更短,则泄密范围就会更小。建议以180天为归档周期,因为企业很少有员工半年不收一次邮件。
7、进阶1:部署沙箱等产品对邮件附件进行深度检测
企业通过部署邮件网关,可以反垃圾、防病毒、防钓鱼等,但实际工作中还是会有放进来的情况,我们建议有条件的企业,将邮件网关投递到企业邮件服务器的流量丢到沙箱进行分析,如果前面网关没拦截而沙箱有发现问题,可以针对性的在邮件网关进行加强,如此查漏补缺不断改进,安全能力肯定也会越来越强。
8、进阶2:将沙箱情报对接实现安全运营
不管是前面的沙箱发现病毒,邮件管理员主动采取措施处理,还是员工中毒后管理员被动着手处理,都已经无法满足现有企业对于信息安全日常小时化应急响应的需求。目前,比较热的概念是将沙箱,情报,本地安全设备进行连动,共同协同实现邮件安全实时防护,工作流程如下。
每一份邮件接收,自动进行本地和云端情报判定,对于恶意邮件进行处理,并根据是否有用户点击或安装,对具体的终端进行针对性防护或隔离。从这个场景图可以看出企业在建设企业安全运营平台的价值,对于平台建设而言,不一定要高大上,多美观酷炫,能够结合企业目前实际安全现状,针对性的解决企业安全所面临的问题即为有用的平台。而且,平台建设也不一定要大而全,符合自己的场景的小而美的平台有时候更有价值。
0x02 个人邮件使用
使用客户端收取邮件
个人在邮件使用过程中,尽可能的使用客户端收取邮件。通过客户端收取邮件后邮件大部分多保留在本地,为加密存储提供便利。另外,我们也要看到很多企业的邮件就没有WEB界面,如果站在企业安全的角度讲,可以减少企业的被攻击面。
将邮件存放在加密盘
很多时间邮件内容的泄露大多是本地计算机出问题导致的,如电脑被盗或遗失。攻击者通过简单的操作就可以读取硬盘中的内容。因此建议员工将邮件及其附件都存放在加密盘中,以防止硬盘内容的未授权读取。
邮件内容不要保存副本在服务器
如果使用outlook邮件客户端,请选择不要保存副本在服务器。因为保存副本在服务器,如果企业没有进行过邮件归档,攻击者拿到收信密码后,可以收取你在服务器上保存的所有邮件。从而造成邮件内容泄密,这一点非常重要。
对邮件内容进行核实
虽然前面讲了各种手段进行邮件内容防伪造,但仍然没有办法完全杜绝邮件内容的伪造。如果收件人没有技术能力进行邮件内容及发件人的核实,建议发件人通过其他联系方式联系发件人以核实邮件内容,确保邮件内容的真实性,避免上当。在信息对抗日益激烈的今天,学会怀疑和多渠道确认是很有效的一种反诈骗技艺。
其他
对于像弱口令,所有系统使用通用密码这类问题并不是邮件系统的独有问题,是个人在使用信息系统时必须 的安全意识,这里就不再赘述。
最重要的一点
通过以上技术仍然不能规避所有的邮件伪造,例如A公司的域www.a.com根本就没有邮件服务器,攻击者假装A公司给A公司的客户发送邮件时,以上所有的技术手段来讲都是无效的。因此,对于可疑邮件内容进行其他渠道的确认,如电话、微信、客服等进行二次内容核实是非常必要的,也是最有效的防止钓鱼的方式。
*本文原创作者:张海仓,本文属于FreeBuf原创奖励计划,未经许可禁止转载