检测结果的含义
此工具的每项检查实际查看的是什么,以及一项检测结果能告诉您什么、不能告诉您什么。
此工具的每项检查实际查看的是什么,以及一项检测结果能告诉您什么、不能告诉您什么。
结果页面上的每项检测结果都附有一行说明,以及它所依据的证据。本页是更长的版本:底层机制是什么,攻击者为什么会那样利用它,以及一项检测结果值得多大的分量。
有一点请贯穿始终地记住:这些检查相互印证,没有一项能单独构成判定。其中好几项在正当邮件中很常见,只有与其他迹象同时出现时才值得注意。
邮件是如何构成的
一封电子邮件由两部分组成:顶部的一块邮件头,然后是正文。邮件头里写明了发件人,处理过这封邮件的每台服务器都在这里盖上自己的记录,身份验证结果也记录在这里。邮件程序几乎把这些全部隐藏起来,只给您看一个名称、一个主题和正文。
此工具所做的几乎所有事情都是读取邮件头。这就是为什么它要的是原始源代码,而不是截图或转发:转发会丢失原始邮件头,并换成您自己的。
身份验证,以及为什么通过验证不代表可以放心
三种机制实际检查的是什么
SPF 回答的是:投递这封邮件的服务器,是否在获准代表该域名发送邮件的服务器列表中?这份列表由域名所有者发布。
DKIM 回答的是:这封邮件是否由持有该域名所发布密钥的人进行了加密签名,签名之后是否被改动过?签名中写明了签名的域名,也就是您会在证据中看到的 d= 值。
DMARC 把这两者与您实际看到的地址联系起来。单独来看,一个通过的 SPF 或 DKIM 结果可能属于一个与 From 行中的域名完全不同的域名,这对读者来说毫无意义。DMARC 要求对齐:通过验证的域名必须与向您显示的域名一致。
对齐的具体含义
假设一封邮件的 From 行显示 notice@bank.example.jp,并带有来自 mailer.example.net 的 DKIM 签名。签名是有效的。但为这封邮件作担保的域名并不是读者看到的域名,所以它没有对齐,DMARC 不会把这封邮件视为已针对 bank.example.jp 通过验证。
对齐可以是严格的(域名完全一致),也可以是宽松的(注册域名一致即可,所以 mail.bank.example.jp 与 bank.example.jp 是对齐的)。确定注册域名这一步需要说明一个前提,请参阅本页底部的说明。
为什么“通过”是这一页上最不值得关注的内容
这是此工具中最重要的一个概念,而它与大多数人的想法恰恰相反。
身份验证证明的是域名归谁所有,并不能证明邮件就是它所声称的那样。注册了 bank-example-support.com 的攻击者完全拥有这个域名。他们可以为它发布 SPF 记录、用 DKIM 为它签名、为它发布 DMARC 策略,只需几分钟,花费不过是域名的价格。之后他们发出的每封邮件都能完美通过验证,因为邮件关于自身的每一句陈述都是真的。它只是不是那家银行而已。
在观察到的钓鱼邮件中,这是多数情况,而不是边缘情况。其中大约一半来自攻击者注册的域名,而这些域名绝大多数都能通过 DMARC。这就是为什么此工具把“通过”只表述为“此域名与其声称的身份一致”,不说任何更让人安心的话,也是为什么在这里,仿冒域名分析和链接分析比身份验证更有分量。
验证失败仍然值得了解,因为伪造的发件人正会呈现这种形态。但邮件列表和转发服务经常且并无恶意地破坏身份验证,所以单凭失败也构不成判定。
ARC:针对转发的邮件
邮件列表改写邮件时,会破坏原来的签名。ARC 让每个跃点在转交邮件之前记录下自己看到的情况,这样后面的服务器就能知道,即使现在验证失败,之前的验证是通过的。当此工具报告某条 ARC 链未通过验证时,意思是这份记录不可信,因此无法确认邮件到达您之前发生了什么。
投递路径
什么是 Received 链
处理邮件的每台服务器都会在邮件头顶部添加一行 Received:谁发起了连接、谁接收了邮件、在什么时间。从下往上读,就是这封邮件的旅程。此工具按最新的在前的顺序显示它们,并把每两行之间的间隔标在连接它们的线上。
只有较后的跃点才可信。每台服务器只能为它亲自接受的连接作担保。在您自己的服务商所控制的第一台服务器以下的所有行,都是由您没有理由信任的机器写下的,而攻击者想编造多少行都可以。这就是为什么一个看起来古怪的早期跃点只是信号,而不是证据。
倒退的时间戳
每个跃点都按自己的时钟盖时间戳,所以小的出入很正常:时钟会有偏差。当后面的服务器记录的时间比前一台更早,而且差值超出了时钟偏差所能解释的范围时,要么某个时钟严重不准,要么部分路径是手工编写的。伪造的邮件头通常是由不在意这些算术的人一口气写出来的。
无法解释的长时间间隔
两个跃点之间相隔超过一天。邮件队列和重试确实会造成这种情况,因此它被报告为值得留意、而不是需要据此行动的事。它之所以值得一看,是因为它也可能意味着邮件是较早写好、较晚注入的,或者一段邮件头是从真实邮件中复制过来的。
公共路径中的私有地址
有些地址段只在私有网络内部有效,从互联网上无法访问。如果这样的地址出现在公共投递路径的中途,通常意味着那一行是复制或编造的,因为它所描述的连接不可能发生。
从未命名的云服务器发出
自行发送邮件的机构,通常会给邮件服务器起自己选定的名称。如果第一个跃点的名称是托管服务商自动生成的,就说明发件人在使用租来的资源而没有做配置:这对一些小型发件人来说很平常,同时也是从无人认识的地址发送邮件最便宜的方式。它只作为细节报告,从不作为判定,也从不仅仅因为主机是谁而报告。
接收服务器留下的备注
有时,处理邮件的某台服务器会记下它对连接方的疑虑:常见的是连接地址没有反向名称,而大批量发件人尤其常见这种情况。看到这类内容时,它是该服务器留下的备注,按原文引用。此工具本身不进行任何查询,只是报告邮件中已有的内容。
邮件自称来自谁
名称和地址是分别设置的
发件人由显示名称和地址组成,两者是相互独立的字段,都由发件人自己填写。大多数邮件程序,尤其是手机上的,只显示名称。所以一封邮件可以显示“账户安全团队”,而下面的地址完全是另一回事,其中却没有任何伪造。这就是为什么此工具在每封邮件上都向您显示这组信息,而不仅是在可疑的邮件上。
藏在名称里的第二个地址
同一种手法的一个特定变体:把电子邮件地址写在显示名称里面。邮件程序显示的是名称,因此您读到的是一个地址,而邮件实际上来自另一个地址。
反转文字阅读方向的字符
Unicode 中有一些控制字符,其存在是为了让阿拉伯文和希伯来文在混排文字中正确显示。把它们放进名称或文件名中,屏幕上的文字就会倒着读,而底层字符保持不变:一个名为 .exe 的文件就是这样看起来以 .jpg 结尾的。此工具从不应用这些字符,而是把它们显示为 <U+202E> 这样的可见标签,让您看清它们在哪里。
不可见字符
完全不占空间的字符,被放进名称或地址中。它们会让一个看起来与熟悉名称完全相同的名称无法与之匹配,从而使按普通文本匹配的过滤器和邮件规则失效。
仿冒域名
这项检查和链接结构检查在这里分量最重,因为与身份验证不同,攻击者很难老老实实地满足它们。
在一个名称中混用多种文字
域名可以包含世界上大多数文字系统中的字符,而有几个字母在不同文字中的写法完全相同:拉丁字母 a 与西里尔字母 а,拉丁字母 o 与希腊字母奥米克戎。把其中一个替换进一个原本普通的名称,就会得到一个在外观上完全相同、在技术上却不同的域名,而且因为还没有人拥有它,所以可以注册。
混用文字本身并不可疑,此工具也不这样看待。日文在普通词语中就混用三种文字;日文、韩文和中文域名都很正常。这项检查使用 Unicode 关于哪些组合确实会一起出现的规则,只标记不会一起出现的组合:同一个标签中拉丁字母与西里尔字母或希腊字母混用。
Punycode 不是警告信号
非 ASCII 域名以 xn-- 开头的编码形式传输。每一个正当的日文、韩文、中文和俄文域名,在传输时都是这样写的。看到它本身不说明任何问题,此工具也从不把它标记为可疑。它所做的是把解码形式和编码形式并排显示,这样如果字符确实被替换了,差别就会显而易见,而不仅仅是存在而已。
与真实域名相差一两个字符
换掉、加上或删去一个字母。用 rn 代替 m;用数字 0 代替字母 o。这些在阅读字号下很难分辨,而且注册起来毫不费力。这项比对需要一份真实品牌域名的清单作为比对对象,因此只覆盖清单上的品牌:请参阅局限说明页面。
被滥用比例异常高的域名后缀
有些后缀价格便宜、审核宽松,在钓鱼邮件中出现的频率远高于普通邮件。也有很多正当网站使用它们,所以这只是整体判断的一部分,本身不能决定任何事。
这份列表有意保持简短,某个后缀不在列表中并不说明任何问题。它只收录我们能指出公开来源的后缀,而且要跨越不止一个来源、不止一个时期进行衡量。这样的后缀数量很少,目前是 3 个。在钓鱼邮件中使用的后缀远比列表上的多,而且大多数钓鱼邮件用的本来就是 .com 这样的普通后缀。结果中对域名后缀只字未提,请理解为此工具没有意见,而不是认可。
链接
文字写的是一处,链接却通向别处
在 HTML 邮件中,您看到的文字和您将要前往的地址是分开的。让两者不一致,是钓鱼邮件最可靠的单一迹象,而且除非把鼠标悬停在链接上或阅读源代码,否则是看不出来的。此工具把两者上下叠放显示,往下看一眼就能比较。
此工具中的任何链接都不可点击。地址显示为可以复制的惰性文字。在钓鱼分析工具里放一个可以点击的钓鱼链接,是无论如何都说不过去的。
真实目标前面的 @
网址中 @ 之前的所有内容都会被浏览器忽略。https://www.bank.example.jp@evil.example/ 通向的是 evil.example。熟悉的部分放在那里,是为了让链接的开头看起来可信。
携带指令而非地址的链接
有些链接协议根本不通向页面:它们携带供浏览器运行的代码,或者把整个文档编码在链接里。普通邮件中不会有这类链接。
用数字地址代替名称
一个背后没有域名的目标。机构会在自己的网站上署名,而一个光秃秃的地址无法与任何东西核对。
重定向与编码参数
在内部携带第二个地址、把您继续转到别处的链接:您会读到的部分属于一个网站,最终到达的地方则由编写链接的人决定。查询字符串中的编码片段在普通的跟踪链接中很常见,也可以用来把地址或指令藏起来,让人一眼看不出来:它们会被报告,而不会被指控。
被安全产品改写的链接
邮件服务商和过滤服务会把链接换成自己的链接,让点击先经过它们。如果原始地址被编码在新地址中,此工具会将其解码,并显示真实目标:请据此判断,而不是依据包装链接。如果服务把原始地址保存在自己的服务器上、只留下一个引用,那就没有可解码的内容,此工具会如实说明,而不会猜测。
托管在人人信任的服务上的恶意载荷
任何人都可以在知名的文档或存储服务上放置页面,借用它的信誉。托管服务商本身从来都不是信号:正当邮件中指向正当服务的链接,就是一个指向正当服务的链接。只有当邮件同时看起来在冒充某人时,这一项才会被提出,而且即使那样,它也只是中等程度的信号。
它只限于清单上的品牌。要判断一封邮件是否在冒充某个品牌,需要那份清单,因此这项检查只能针对清单收录的品牌提出,也就是其中的 52 个品牌。冒充不在清单上的品牌、并托管在同一个服务上的邮件,在这里根本不会被提出。请参阅此工具无法检测的内容。
字符编码
声明的编码与内容不符
邮件会说明应该如何读取它的文字。当这个标签与实际字节不一致时,所有内容仍能显示,而这正是关键所在。按标签读取邮件的过滤器看到的文字,与您看到的不同,而且可以把邮件构造成让过滤器读到的版本看起来无害。
已废弃的编码
尤其有一种编码已从 Web 标准中撤销,浏览器也不再解码它。如今它几乎只作为一种写出安全过滤器不会解码的文字的手段而存在。
模仿普通字母的字符
数学字母、带圈字符和装饰字形,在人看来是普通的单词,底层却是不同的字符:单词就是这样绕过按普通拼写匹配的过滤器的。
严重程度,以及为什么没有评分
每项检测结果都带有四种严重程度之一:恶意、可疑、参考信息或未发现问题,而且每一种都是由产生它的规则指定的,而不是计算出来的。标题反映的是现有检测结果中最严重的一项。
没有数字评分,也不是有意隐瞒。它根本不存在。一个数字会暗示这项分析并不具备的精确度,还会引出一个阈值,比如“低于 30 就没问题”,而这正是让人被那封得了 28 分的邮件钓中的思路。四种有名称的严重程度,加上一句可以原样转告同事的话,对实际已知的情况要诚实得多。
这里从不使用绿色,也没有任何结果会说邮件是安全的。干净的结果意味着已运行的检查没有发现高风险内容;每个结果附带的检查范围说明会告诉您运行了哪些检查。
公开说明的近似方法:注册域名
对齐取决于知道注册域名在哪里结束:example.co.jp 是注册域名,co.jp 不是。现行 DMARC 标准通过一连串实时 DNS 查询来确定这一点。
此工具不发出任何类型的网络请求,因此无法进行这些查询。它改用 Public Suffix List:一份人们会在其下注册名称的域名后缀的维护清单,并据此推导出注册域名。
两种方法通常一致。在它们不一致的地方,这里显示的对齐结果可能比接收方邮件服务器算出的更严格或更宽松。这是一种近似方法,每个依赖它的结果都会说明这一点,而不是留给您自己去发现。这是有意的取舍:另一种做法是让工具把您邮件中的域名发送给 DNS 解析器,那样的话,“您的邮件绝不会离开您的设备”就不再成立了。