钓鱼邮件的投递和伪造
2019-09-16 10:04:58 Author: xz.aliyun.com(查看原文) 阅读量:482 收藏

在大型企业边界安全做的越来越好的情况下,不管是APT攻击还是红蓝对抗演练,钓鱼和水坑攻击被越来越多的应用。今天就先来说一下钓鱼这种传统而又有效的方式。
而想要进行一次成功的想要进行一次成功的钓鱼攻击,首先需要了解现在主流的邮件的安全措施。

SPF

SPF是 Sender Policy Framework 的缩写,一种以IP地址认证电子邮件发件人身份的技术。 接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回。例如:当邮件服务器收到自称发件人是[email protected]的邮件,那么到底它是不是真的gmail.com的邮件服务器发过来的呢,我们可以查询gmail.com的SPF记录,以此防止别人伪造你来发邮件。

SPF详解

DKIM

DKIM让企业可以把加密签名插入到发送的电子邮件中,然后把该签名与域名关联起来。签名随电子邮件一起传送,而不管是沿着网络上的哪条路径传送, [1] 电子邮件收件人则可以使用签名来证实邮件确实来自该企业。可确保邮件内容不被偷窥或篡改。

DMARC

DMARC(Domain-based Message Authentication, Reporting & Conformance)是txt记录中的一种,是一种基于现有的SPF和DKIM协议的可扩展电子邮件认证协议,其核心思想是邮件的发送方通过特定方式(DNS)公开表明自己会用到的发件服务器(SPF)、并对发出的邮件内容进行签名(DKIM),而邮件的接收方则检查收到的邮件是否来自发送方授权过的服务器并核对签名是否有效。对于未通过前述检查的邮件,接收方则按照发送方指定的策略进行处理,如直接投入垃圾箱或拒收。从而有效识别并拦截欺诈邮件和钓鱼邮件,保障用户个人信息安全。

要想查看一个域名是否配置了SPF,可以用nslookup或者dig查看:

nslookup -type=txt ***.com.cn
dig -t txt 163.com

未配置的是这样:

配置了的是这样


SPF可以配置为ip,也可以配置为域名


邮件为什么可以被伪造呢,最根本的原因就是SMTP协议不会验证发送者的身份,当邮件在两个不同的SMTP邮件服务器中被传输时,我们可以通过伪造来源欺骗接收者的SMTP服务器。
没有配置SPF,邮件服务器就不会去验证发件人,就可以直接进行伪造了。

没有spf的情况下

最简单的办法就是使用swaks之类的邮件伪造工具,kali中自带

swaks --to [email protected] --from [email protected] --ehlo XXX.com --body hello --header "Subject: hello"

--to <收件人邮箱>

--from <要显示的发件人邮箱>

--ehlo <伪造的邮件ehlo头>

--body <邮件正文>

--header <邮件头信息,subject为邮件标题>

也可以自己在vps上搭建邮件服务器

EwoMail是基于Linux的企业邮箱服务器:https://github.com/gyxuehu/EwoMail

或者使用第三方的邮件服务器。

邮件伪造服务:http://tool.chacuo.net/mailanonymous

没有SPF,邮件网关就不会进行拦截,收到后直接看是完全无异样,但查看邮件源文件发现from的ip非域名对应ip,但对于普通用户来说欺骗性很强。

配置了SPF的情况

配置了SPF,按照上边这种方法发送的话,通常情况下就会被直接拦截或者进了垃圾箱

这种情况就需要用一些权威的邮件服务商去发送邮件了
如sendgrid,mailgun,这些权威邮件服务商,会被大部分邮件服务商加到白名单中,这样他们的邮件就不会进到垃圾箱

SendGrid

30天试用,能免费发送40000封邮件

https://sendgrid.com
注册 SendGrid (需要验证域名所有权,但发信可以不使用这个域名),获得一个 API ,然后有多种方式发送邮件,最方便的是 Curl :

curl --request POST \
  --url https://api.sendgrid.com/v3/mail/send \
  --header "Authorization: Bearer 你的 API" \
  --header 'Content-Type: application/json' \
  --data '{"personalizations": [{"to": [{"email": "发给谁"}]}],"from": {"email": "发件人(你想伪造成谁)"},"subject": "标题","content": [{"type": "text/plain", "value": "内容"}]}'

这种方式只需要你有一台服务器,在服务器里面运行这条命令即可发送伪造邮件。但是这种方式无法自定义发件人名字,直接在对方的邮件中显示马化腾。

我的方式是使用 WordPress 插件发送。这种方式要求你有一台装有 WordPress 的服务器,安装 SendGrid 插件即可。

在配置了spf的邮箱中也可收到

mailgun

mailgun也类似,每个月可免费发送10000封邮件,可以添加1000个域名,每封邮件都有跟踪日志,简单明了的管理界面。:
https://www.mailgun.com

# Try our API. Copy & run this in your terminal.
curl -s --user 'api:key-**********' \
    https://api.mailgun.net/v3/samples.mailgun.org/messages \
    -F from='Excited User <[email protected]>' \
    -F to='[email protected]' \
    -F subject='Hello' \
    -F text='Testing some Mailgun awesomeness!'

其他同类服务
Amazon SES 免费套餐,月发送 62000 封电子邮件。

https://aws.amazon.com/cn/ses/pricing/

阿里云邮件推送服务,每个账户每日200封免费邮件。

https://www.aliyun.com/product/directmail?spm=5176.8064714.321187.pricedetail1111.MpRlp1

SendCloud 搜狐旗下付费服务

https://sendcloud.sohu.com

MandRill 付费服务

https://www.mandrill.com/pricing/

Postmark 免费试用

https://postmarkapp.com/pricing

提高送达成功率的小技巧:

  • 适当控制发信的频率,如果短时间内向同一个邮箱地址发信,也会容易被标记为垃圾邮件。最好向同一邮箱发信间隔在2-5天
  • 将较大的收件人列表分割成若干个小的,分时间段发送
  • 使用变量,一般来说,邮件服务器多次收到来自同一个邮件IP地址的相同内容邮件,很容易就被判定为垃圾邮件。在进行邮件编辑时,多采用变量设置,像公司名、收件人,可以进行变量添加,避免邮件内容完全一致

修改昵称伪造发件人

如果拿权威的邮件服务商发送依旧被拦截,可以尝试一种绝对不会被拦截发信的方式,但基本只对通过手机查看邮件的收件人有效。

修改发件人昵称为伪造对象的以及邮箱地址。

如果受害者通过手机查看邮件那么有极大的几率会认为此邮件为正常邮件。


钓鱼邮件通常有两大类,一种是链接钓鱼邮件,通常是想各种办法让目标打开网站,输入密码。另一种是附件钓鱼邮件,但不管哪一类,都需要一个好的文案来让目标点击或者下载。

一封成功的钓鱼邮件,一个好的文案是必须的,一个让人看了后可能会去点的文案,需要具备以下几个要素:

  • 重要性

首先得让体现出来邮件的重要性,来驱使目标去查看邮件。

  • 合理性

其次文案得基本合理,这个就需要结合目标的身份,日常习惯,所在公司的情况及业务进行综合考量,来编写出一个合理的文案。

  • 紧迫性

最后文案最好有一些紧迫性,来促使目标尽快的去按照文案引导,进行点击、输入等操作。

下边是一些链接钓鱼案例:

账号被异常登录

账号密码过期

系统更新,迁移


领取礼品

链接钓鱼时候的一些技巧

有了文案,怎么能让邮件看起来真实性更高呢?
最简单的就是用超链接,把元素内容改成想要仿冒的域名,在邮箱页面上,就会直接显示元素的内容,如下图所示:

<a href="http://www.eval.me">www.aliyun.com</a>


但这种点击完之后,跳转浏览器的时候就会显示真实的域名,所以,要想让钓鱼的成功率更高一些,就需要对域名做一些处理。比如申请一些和目标域名比较相似的域名,比如用0代替o,用1代替l,用vv代替w等等,这就需要发挥你的想象来寻找相似的域名:

http://www.taoba0.com/
http://www.a1iyun.com

如果找不到这样形似的域名或者这种域名比较贵的情况下,可以尝试一些更骚的操作。。

比如币安“惊魂夜”钓鱼的案例:

用户收到的钓鱼网站链接:

真正的官网链接:

攻击者的域名为

www.biṇaṇce.com

图中用于替换字母n的字符为:ṇ
Unicode编码为:U+1E47

真正的字母n的Unicode编码为:
U+006E,攻击者上演了一出障眼法骗过了那些受害者。

这样的域名是怎么注册的呢?在了解怎么注册一个这样的域名前,需要先了解什么是国际域名(Internationalized domain name, IDN)。
IDN是指在域名中包含至少一个特殊语言字母的域名,特殊语言包括中文、法文、拉丁文等。在DNS系统工作中,这种域名会被编码成ASCII字符串,并通过Punycode进行翻译。

Punycode是一个根据RFC 3492标准而制定的编码系统,主要用于把域名从地方语言所采用的Unicode编码转换成为可用於DNS系统的编码。

目前,因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中文域名解析,所有中文域名的解析都需要转成punycode码,然后由DNS解析punycode码。其实目前所说的各种主流浏览器都完美支持IDN域名,浏览器里面会自动对IDN域名进行Punycode转码,而地址栏依旧显示的是原始输入的IDN域名。

所以,要想注册“币安”的这个域名:

www.biṇaṇce.com

其实只需要注册他经过punycode转码后的域名:

www.xn--biace-4l1bb.com

然后让目标访问www.biṇaṇce.com,在地址栏中就很难被发现。

我遍历了unicode表,找了一些字母形似的unicode,可利用此表来注册一些钓鱼域名

仿冒的阿里云

www.аlіyun.com

0x456 і
0x430 а

经punycode转码:www.xn--lyun-43d3u.com

punycode在线转换工具:http://tools.jb51.net/punycode/index.php

https证书

最后要说一点,就是https证书,前边仿冒的再像,但如果浏览器上直接出现了不安全警告或者红斜杠,也很容易引起目标的警惕。所以在条件允许的情况下,尽量做戏做全套,现在普通的https证书也是很便宜的。证书的具体申请使用就不在这细说了,百度一下,全都知道。

今儿说了钓鱼邮件中通过链接钓鱼的方式,下次再说说通过钓鱼邮件中的附件进行攻击的方法。还是安全圈的老话,未知攻焉知防,讲常见钓鱼的方式,也是为了帮助大家更好的识别钓鱼邮件,切勿把以上内容用到恶意攻击等非法行动中。


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