跨站脚本攻击

跨站脚本攻击是指攻击者将具有恶意目的的数据潜入到远程用户信任的WEB页面的HTML 代码中,当该页面被浏览器下载运行时嵌入的脚本将被执行,用户页面被跳转到攻击者精心编织的其他页面,用户毫无顾及的填写各种敏感信息,殊不知已被攻击者盗取或被站点挂马控制。

XSS攻击是什么

  • XSS是跨站脚本攻击的缩写,是一种网站应用程序的安全漏洞攻击,是代码注入的一种。
  • 通常是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
  • 这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。
  • 攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

XSS攻击基本原理——代码注入

在web的世界里有各种各样的语言,于是乎对于语句的解析大家各不相同,有一些语句在一种语言里是合法的,但是在另外一种语言里是非法的。这种二义性使得黑客可以用代码注入的方式进行攻击——将恶意代码注入合法代码里隐藏起来,再诱发恶意代码,从而进行各种各样的非法活动。只要破坏跨层协议的数据/指令的构造,我们就能攻击。
历史悠久的SQL注入和XSS注入都是这种攻击方式的典范。现如今,随着参数化查询的普及,我们已经离SQL注入很远了。但是,历史同样悠久的XSS却没有远离我们。
XSS的基本实现思路很简单——比如持久型XSS通过一些正常的站内交互途径,例如发布评论,提交含有JavaScript的内容文本。这时服务器端如果没有过滤或转义掉这些脚本,作为内容发布到了页面上,其他用户访问这个页面的时候就会运行这些脚本,从而被攻击。

攻击分类举例

反射型XSS

反射性XSS,也就是被动的非持久性XSS。诱骗用户点击URL带攻击代码的链接,服务器解析后响应,在返回的响应内容中隐藏和嵌入攻击者的XSS代码,被浏览器执行,从而攻击用户。
URL可能被用户怀疑,但是可以通过短网址服务将之缩短,从而隐藏自己。

持久型XSS

也叫存储型XSS——主动提交恶意数据到服务器,攻击者在数据中嵌入代码,这样当其他用户请求后,服务器从数据库中查询数据并发给用户,用户浏览此类页面时就可能受到攻击。可以描述为:恶意用户的HTML或JS输入服务器->进入数据库->服务器响应时查询数据库->用户浏览器。

防范

记住一句至理名言——“所有用户输入都是不可信的。”(注意: 攻击代码不一定在<script></script>中)

使用XSS Filter

  • 输入过滤,对用户提交的数据进行有效性验证,仅接受指定长度范围内并符合我们期望格式的的内容提交,阻止或者忽略除此外的其他任何数据。
  • 输出转义,当需要将一个字符串输出到Web网页时,同时又不确定这个字符串中是否包括XSS特殊字符,为了确保输出内容的完整性和正确性,输出HTML属性时可以使用HTML转义编码(HTMLEncode)进行处理,输出到<script>中,可以进行JS编码。

使用 HttpOnly Cookie

将重要的cookie标记为httponly,这样的话当浏览器向Web服务器发起请求的时就会带上cookie字段,但是在js脚本中却不能访问这个cookie,这样就避免了XSS攻击利用JavaScript的document.cookie获取cookie。

困难和幸运

真正麻烦的是,在一些场合我们要允许用户输入HTML,又要过滤其中的脚本。这就要求我们对代码小心地进行转义。否则,我们可能既获取不了用户的正确输入,又被XSS攻击。
幸好,由于XSS臭名昭著历史悠久又极其危险,现代web开发框架如vue.js、react.js等,在设计的时候就考虑了XSS攻击对html插值进行了更进一步的抽象、过滤和转义,我们只要熟练正确地使用他们,就可以在大部分情况下避免XSS攻击。
同时,许多基于MVVM框架的SPA(单页应用)不需要刷新URL来控制view,这样大大防止了XSS隐患。另外,我们还可以用一些防火墙来阻止XSS的运行。

暴力破解

什么是暴力破解

暴力攻击的主要目的是通过尝试各种密码字典和穷举法查出合法的用户名和口令,所采用的字典比较庞大,比如最常使用的彩虹表有100G以上,这种字典由大量的字母、数字、符号等组合而成的,虽比较完善但这种破解用户口令的方法是很耗时的,并且可能会造成系统过载而无法响应合法的请求。另外若系统开启了帐户锁定策略,这种口令尝试攻击会关闭合法登录帐户。

暴力破解流程

暴力破解的方法

穷举法

穷举法是指根据输入密码的设定长度、选定的字符集生成可能的密码全集,进行地毯式搜索。例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此最多尝试10000次就能找到正确的密码。理论上利用这种方法可以破解任何一种密码,但随着密码复杂度增加,破解密码的时间会指数级延长。

穷举法适用于猜解随机生成的短信验证码等,因为各种随机生成密码出现的概率是一样的,不受人的记忆影响。

字典式攻击

字典式攻击是将出现频率最高的密码保存到文件中,这文件就是字典,暴破时使用字典中的这些密码去猜解。

字典式攻击适用于猜解人为设定的口令,因为人为设定受人方便记忆影响不同密码出现的概率是不一样的,12345678、password作为密码的概率比fghtsaer作为密码的概率要高得多。与穷举法相比,字典式攻击虽然损失了较小的命中率但节省了较多的时间。

彩虹表攻击

彩虹表攻击也属于字典式攻击,但它是一种高效地破解哈希算法(MD5、SHA1、SHA256/512等)的攻击方式。

网站为了增加安全性,不会直接将用户密码存储在数据库中,而是将密码进行哈希,变成一长串毫无意义的字符,并且哈希算法是不可逆的,没有解密算法可以还原成原来的密码。面对哈希后的密码,破解的方法有两个,一是用穷举法组合出所有的密码可能,然后经哈希加密算法计算,将结果与目标哈希值进行比对,但边计算边比对会耗费海量的时间;二是提前生成可能密码与对应哈希串的对照表,但是对照表将占据海量的磁盘空间,以14位字母和数字的组合密码为例,生成的密码32位哈希串的对照表将占用5.7×10^14 TB的存储空间。

彩虹表是时间空间折中的方法,其核心思想是将明文计算得到的哈希值由R函数映射回明文空间,交替计算明文和哈希值,生成哈希链,将这个链的首尾存储在表中,中间的都删掉,用的时候临时算,那么存储的空间比原来的减少了一半,而计算次数也并没有大量增多。由于在哈希链的计算过程中引入不同的R函数,将不同的R函数用不同的颜色表示,众多的哈希链就会像彩虹一样,所以叫做彩虹表。

彩虹表

使用彩虹表进行破解,普通PC也能达到每秒1000亿次以上的惊人速度。为了增加安全性,可能会多次哈希,例如MD5后再MD5一次;或者在原始密码前后补上一串字符,增加密码长度后再哈希,学名叫加盐(salt),这些算法的结果都可以加入彩虹表中。最完善的彩虹表差不多能破解出目前网上99.9%的密码。

哪些是最容易受到暴力破解的密码

许多人设置的密码都过于简单,或者使用电话号码、出生日期、亲人或宠物的名字作为密码,或者在不同网站使用相同密码,这些行为导致密码很容易被破解。

在 2020 年末,NordPass 公布了 2020 年使用率最高的 200 个密码,排名靠前的几个密码分别为 123456、123456789、password、12345678、111111、123123、12345、1234567890、1234567、000000、1234 …… ,除了纯数字,还有各种数字和字母组合,例如:qwerty、abc123 和 picture1 等。

暴力破解不会造成直接的入侵,但攻击者通过暴力破解获得了系统/用户的账号和密码,以此为后续的入侵做准备。对于个人而言,直接从用户那里窃取金钱,或者窃取其身份,身份盗用可能导致进一步的财务损失。对于企业而言,通过暴力破解可以登录Telnet服务、POP3服务和MySQL服务等,登录成功将会导致用户信息泄露、文件共享、邮件泄露或无法正常发送邮件等高危事件。

如何防御暴力破解攻击

人的层面:增强密码安全性

  • 提升密码长度和复杂度密码应由数字、大小写字母和特殊符号混合组成,且密码越长,破解密码的时间就会成指数增加,一旦密码超过了某个长度,基本上就不能用暴力破解了。例如,使用破解的服务器集群,每秒可以尝试3500亿次,这个速度破解6位密码只需要4.08秒,7位密码只需6.47分钟,8位密码需要10.24小时,9位密码需要40.53天,10位密码就需要10.55年了。
  • 在不同的地方使用不同的密码重复使用电子邮件、银行和社交媒体帐户的密码更可能导致身份被盗用。可以将网站的缩写作为密码的后缀,例如登陆QQ的密码是Hl9tysY.qq,登陆微博的密码是Hl9tysY.wb,这样每个网站都有独立的密码且不容易忘记。
  • 避免使用字典单词、数字组合、相邻键盘组合、重复的字符串。例如 password 、12345678、asdfg 、aaaa 或 123abc。
  • 避免使用名字或者非机密的个人信息(电话号码、出生日期等)作为密码,或者是亲人、孩子、宠物的名字。因为当我们单击一些网站中的“忘记密码”链接时,系统有时会要求回答一系列问题。而答案通常可以在我们的社交媒体资料中找到,从而使帐户更易被破解。
  • 定期修改密码

系统层面:做好密码防暴力破解设计

系统设计时考虑以下几个方面:

  • 锁定策略:输错密码几次就锁定一段时间。
  • 验证码技术:要求用户完成简单的任务才能登录到系统,用户可以轻松完成,但暴力工具无法完成。例如图形验证码、短信等。
  • 密码复杂度限制:强制用户设置长而复杂的密码,并强制定期更改密码。
  • 双因子认证:结合两种不同的认证因素对用户进行认证的方法。例如密码、身份证、安全令牌、指纹、面部识别、地理信息等。

应用层拒绝服务攻击

一、DDOS简介

DDOS又称为分布式拒绝服务,全称是Distributed Denial of Service。DDOS本质是利用合理的请求造成资源过载,导致服务不可用。比如一个停车场总共有100个车位,当100个车位都停满车后,再有车想要停进来,就必须等已有的车先出去才行。如果已有的车一直不出去,那么停车场的入口就会排起长队,停车场的负荷过载,不能正常工作了,这种情况就是“拒绝服务”。

我们的系统就好比是停车场,系统中的资源就是车位。资源是有限的,而服务必须一直提供下去。如果资源都已经被占用了,那么服务也将过载,导致系统停止新的响应。

分布式拒绝服务攻击,将正常请求放大了若干倍,通过若干个网络节点同时发起攻击,以达成规模效应。这些网络节点往往是黑客们所控制的“肉鸡”,数量达到一定规模后,就形成了一个“僵尸网络”。大型的僵尸网络,甚至达到了数万、数十万台的规模。如此规模的僵尸网络发起的DDOS攻击,几乎是不可阻挡的。

常见的DDOS攻击有 :

SYN flood(半开放攻击) UDP Flood ICMP Flood

查看更多

二、应用层DDOS

应用层DDOS,不同于网络层DDOS,由于发生在应用层,因此TCP三次握手已经完成,连接已经建立,所以发起攻击的IP地址也都是真实的。但应用层 DDOS有时甚至比网络层DDOS 攻击更为可怕,因为今天几乎所有的商业Anti-DDOS设备,只在对抗网络层DDOS时效果较好,而对应用层 DDOS攻击却缺乏有效的对抗手段。

1、CC攻击

“CC攻击”的前身是一个叫fatboy的攻击程序,当时黑客为了挑战绿盟的一款反 DDOS设备开发了它。绿盟是中国著名的安全公司之一,它有一款叫“黑洞(Collapasar)”的反 DDOS设备,能够有效地清洗SYN Flood等有害流量。而黑客则挑衅式地将fatboy 所实现的攻击方式命名为:Challenge Collapasar(简称CC),意指在黑洞的防御下,仍然能有效完成拒绝服务攻击。

CC攻击的原理非常简单,就是对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务端资源的目的。在 Web应用中,查询数据库、读/写硬盘文件等操作,相对都会消耗比较多的资源。在百度百科中有一个很典型的例子:

2、限制请求频率

最常见的针对应用层DDOS攻击的防御措施,是在应用中针对每个“客户端”做一个请求频率的限制。比如下面这段代码:

这段代码就是针对应用层DDOS攻击的一个简单防御。它的思路很简单,通过IP地址与Cookie定位一个客户端,如果客户端的请求在一定时间内过于频繁,则对之后来自该客户端的所有请求都重定向到一个出错页面。

从架构上看,这段代码需要放在业务逻辑之前,才能起到保护后端应用的目的,可以看做是一个“基层”的安全模块。

3、道高一尺魔高一丈

然而这种防御方法并不完美,因为它在客户端的判断依据上并不是永远可靠的。这个方案中有两个因素用以定位一个客户端:一个是P地址,另一个是Cookie。但用户的IP地址可能会发生改变,而Cookie又可能会被清空,如果IP地址和Cookie同时都发生了变化,那么就无法再定位到同一个客户端了。

如何让IP地址发生变化呢?使用“代理服务器”是一个常见的做法。在实际的攻击中,大量使用代理服务器或傀儡机来隐藏攻击者的真实P地址,已经成为一种成熟的攻击模式。攻击者使用这些方法可不断地变换地址,就可以绕过服务器对单个P地址请求频率的限制了。(代理猎手是一个常用的搜索代理服务器的工具。)

攻击者使用的这些混淆信息的手段,都给对抗应用层 DDOS攻击带来了很大的困难。那么到底如何解决这个问题呢?应用层 DDOS攻击并非一个无法解决的难题,一般来说,我们可以从以下几个方面着手 :

  1. 首先,应用代码要做好性能优化。合理地使用memcache就是一个很好的优化方案,将数据库的压力尽可能转移到内存中。此外还需要及时地释放资源,比如及时关闭数据库连接,减少空连接等消耗。
  2. 其次,在网络架构上做好优化。善于利用负载均衡分流,避免用户流量集中在单台服务器上。同时可以充分利用好CDN和镜像站点的分流作用,缓解主站的压力。
  3. 最后,也是最重要的一点,实现一些对抗手段,比如限制每个IP地址的请求频率。

三、验证码的那些事儿

验证码是互联网中常用的技术之一,它的英文简称是CAPTCHA (Completely AutomatedPublic Turing Test to Tell Computers and Humans Apart,全自动区分计算机和人类的图灵测试)。

CAPTCHA发明的初衷,是为了识别人与机器。但验证码如果设计得过于复杂,那么人也很难辨识出来,所以验证码是一把双刃剑。

有验证码,就会有验证码破解技术。除了直接利用图像相关算法识别验证码外,还可以利用Web 实现上可能存在的漏洞破解验证码。

因为验证码的验证过程,是比对用户提交的明文和服务器端Session里保存的验证码明文是否一致。所以曾经有验证码系统出现过这样的漏洞:因为验证码消耗掉后SessionlD未更新,

导致使用原有的SessionID可以一直重复提交同一个验证码。

在SessionID未失效前,可以一直重复发送这个包,而不必担心验证码的问题。形成这个问题的伪代码类似于:

如果要修补也很简单:

还有的验证码实现方式,是提前将所有的验证码图片生成好,以哈希过的字符串作为验证码图片的文件名。在使用验证码时,则直接从图片服务器返回已经生成好的验证码,这种设计原本的想法是为了提高性能。

但这种一一对应的验证码文件名会存在一个缺陷:攻击者可以事先采用枚举的方式,遍历所有的验证码图片,并建立验证码到明文之间的一一对应关系,从而形成一张“彩虹表”,这也会导致验证码形同虚设。修补的方式是验证码的文件名需要随机化,满足“不可预测性”原则

四、防御应用层DDOS

验证码的核心思想是识别人与机器,那么顺着这个思路,在人机识别方面,我们是否还能再做一些事情呢?答案是肯定的。

在一般情况下,服务器端应用可以通过判断HTTP头中的User-Agent 字段来识别客户端。但从安全性来看这种方法并不可靠,因为HTTP头中的User-Agent 是可以被客户端篡改的,所以不能信任。

一种比较可靠的方法是让客户端解析一段JavaScript,并给出正确的运行结果。因为大部分的自动化脚本都是直接构造HTTP包完成的,并非在一个浏览器环境中发起的请求。因此一段需要计算的JavaScript,可以判断出客户端到底是不是浏览器。类似的,发送一个flash 让客户端解析,也可以起到同样的作用。但需要注意的是,这种方法并不是万能的,有的自动化脚本是内嵌在浏览器中的“内挂”,就无法检测出来了。

除了人机识别外,还可以在Web Server 这一层做些防御,其好处是请求尚未到达后端的应用程序里,因此可以起到一个保护的作用。

在Apache 的配置文件中,有一些参数可以缓解DDOS攻击。比如调小Timeout、KeepAliveTimeout值,增加MaxClients 值。但需要注意的是,这些参数的调整可能会影响到正常应用,因此需要视实际情况而定。在Apache的官方文档中对此给出了一些指导

Apache提供的模块接口为我们扩展Apache、设计防御措施提供了可能。目前已经有一些开源的Module全部或部分实现了针对应用层 DDOS攻击的保护。

“mod_qos”是Apache的一个 Module,它可以帮助缓解应用层DDOS攻击。比如 mod_qos的下面这些配置就非常有价值。

mod_qos 从思路上仍然是限制单个IP地址的访问频率,因此在面对单个IP地址或者IP地址较少的情况下,比较有用。但是前文曾经提到,如果攻击者使用了代理服务器、傀儡机进行攻击,该如何有效地保护网站呢?

Yahoo为我们提供了一个解决思路。因为发起应用层 DDOS攻击的IP地址都是真实的,所以在实际情况中,攻击者的IP地址其实也不可能无限制增长。假设攻击者有1000个IP地址发起攻击,如果请求了10000 次,则平均每个IP地址请求同一页面达到10次,攻击如果持续下去,单个IP地址的请求也将变多,但无论如何变,都是在这1000个IP地址的范围内做轮询。

为此 Yahoo实现了一套算法,根据IP地址和Cookie等信息,可以计算客户端的请求频率并进行拦截。Yahoo 设计的这套系统也是为Web Server开发的一个模块,但在整体架构上会有一台master服务器集中计算所有IP地址的请求频率,并同步策略到每台 WebServer 上

五、资源耗尽攻击

1、Slowloris攻击

Slowloris是在2009年由著名的Web安全专家RSnake提出的一种攻击方法,其原理是以极低的速度往服务器发送HTTP请求。由于 Web Server对于并发的连接数都有一定的上限,因此若是恶意地占用住这些连接不释放,那么Web Server的所有连接都将被恶意连接占用,从而无法接受新的请求,导致拒绝服务。

要保持住这个连接,RSnake构造了一个畸形的HTTP请求,准确地说,是一个不完整的HTTP请求。

GET / HTTP/1.i\r\n
Host: host\r\n
User-Agent: Mozilla/4.0 (compatible;MSIE 7.0; Windows NT 5.1;Trident/4.0;.NET CLR1.1.4322;.NET CLR 2.0.50313;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729;MSoffice 12)\r\n
Content-Length: 42\r\n 

在正常的HTTP包头中,是以两个CLRF表示HTTP Headers部分结束的

content-Length: 42\r\n\r\n 

由于web Server 只收到了一个\r\n,因此将认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求。此时客户端再发送任意HTTP头,保持住连接即可。

x-a: b\r\n 

当构造多个连接后,服务器的连接数很快就会达到上限。

此类拒绝服务攻击的本质,实际上是对有限资源的无限制滥用

在 Slowloris 案例中,“有限”的资源是 Web Server 的连接数。这是一个有上限的值,比如在Apache中这个值由MaxClients定义。如果恶意客户端可以无限制地将连接数占满,就完成了对有限资源的恶意消耗,导致拒绝服务。

2、HTTP POST DOS

在发送HTTP POST包时,指定一个非常大的Content-Length值,然后以很低的速度发包,比如 10~100s发一个字节,保持住这个连接不断开。这样当客户端连接数多了以后,占用住了Web Server的所有可用连接,从而导致 DOS。POC 如下图所示:

var number_of_connections = 256;
var sockets=new Array();for(var i=0;i <number_of_connections;i++)
{var s= new TSocket("tcp");sockets[i] = s;s.host = "acuart";s.port = 80;s.Timeout = 0;if(s.connect()){Trace(i + " Connected");Sent = s.Send("POST /aaaaaaaaaaa HTTP/1.1\r\n"+"Host: acuart\r\n" + "Connection: krrp-alive\r\n" + "Content-Length: 100000000\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "Accept: *.*\r\n" + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" +"acunetix");if(Sent<=0) Trace("Error sending");else Trace(i+" Sent data");}
}while(1){for(var i=0;i<number_of_connections;i++){sockets[i].Send("z");}sleep(1000);trace(".");}

成功实施攻击后会留下如下错误日志(Apache):

由此可知,这种攻击的本质也是针对Apache 的 MaxClients限制的

要解决此类问题,可以使用Web应用防火墙,或者一个定制的Web Server 安全模块。由以上两个例子我们很自然地联想到,凡是资源有“限制”的地方,都可能发生资源滥用,从而导致拒绝服务,也就是一种“资源耗尽攻击”。

出于可用性和物理条件的限制,内存、进程数、存储空间等资源都不可能无限制地增长,因此如果未对不可信任的资源使用者进行配额的限制,就有可能造成拒绝服务。内存泄漏是程序员经常需要解决的一种 bug,而在安全领域中,内存泄漏则被认为是一种能够造成拒绝服务攻击的方式

3、Server Limit DOS

Cookie也能造成一种拒绝服务,笔者称之为Server Limit DOS,并曾在笔者的博客文章°中描述过这种攻击。

Web Server对 HTTP包头都有长度限制,以Apache举例,默认是8192字节。也就是说,Apache所能接受的最大HTTP包头大小为8192字节(这里指的是 Request Header,如果是Request Body,则默认的大小限制是2GB)。如果客户端发送的HTTP包头超过这个大小,服务器就会返回一个4xx错误,提示信息为:

假如攻击者通过XSS攻击,恶意地往客户端写入了一个超长的Cookie,则该客户端在清空Cookie之前,将无法再访问该Cookie所在域的任何页面。这是因为Cookie也是放在HTTP包头里发送的,而 Web Server 默认会认为这是一个超长的非正常请求,从而导致“客户端”的拒绝服务。

比如以下 POC代码:

<script language="javascript">
alert(document.cookie);
var metastr ="AAAAAAAAAA";1/10 Avar str-"";
while (str.length<4000){
str += metastr;
)
alert(str.length);document.cookie = "evi13=”十")<script l>alert(xss)(<\/script\>”+ " ;expires=Thu,18-Apr-2019 08:37:43GMT;”;
document.cookie = "evill=" + str +";expires=Thu,18-Apr-2019 08:37:43 GMT;";document.cookie = "evi12=" + str +";expires=Thu,18-Apr-2019 08:37:43 GMT;" ;
alert (document.cookie);
/script>

将向客户端写入一个超长的Cookie。

要解决此问题,需要调整Apache配置参数LimitRequestFieldSize1,这个参数设置为О时,对HTTP包头的大小没有限制。

通过以上几种攻击的介绍,我们了解到“拒绝服务攻击”的本质实际上就是一种“资源耗尽攻击”,因此在设计系统时,需要考虑到各种可能出现的场景,避免出现“有限资源”被恶意滥用的情况,这对安全设计提出了更高的要求。

总结:应用层拒绝服务攻击是传统的网络拒绝服务攻击的一种延伸,其本质也是对有限资源的无限制滥用所造成的。所以,解决这个问题的核心思路就是限制每个不可信任的资源使用者的配额

三、邮件伪造漏洞

首先,如何验证邮件伪造?

解决对邮件伪造的疑惑,这里有一个在线的测试网站:Emkei's Anonymous Mailer 。可以尝试使用这个网站测试发送一封邮件给自己。

例如:检测说a.com存在邮件伪造漏洞。那么我们可以尝试使用admin@a.com作为发件人,给一个自己的邮箱,例如我的admin(at)xzbzq(dot)com发送一封测试邮件。内容随意填写,不到一分钟你应该就能收到邮件了,也有可能会在垃圾邮件里。注意,请勿用于非法用途。

第二,有什么危害?

可以想见如果有一个a.com的用户,在收到admin@a.com 的邮件后,用户很可能就相信这就是管理员(admin)发来的邮件。因此,用户很可能会毫不犹豫地点开邮件中的链接、下载并打开其中的附件。这个时候,作为一个a.com的用户,就很可能被攻击控制了。如果用户是管理员,那么可能服务器权限也会沦落他人之手。

另外一种危害方式,一个垃圾邮件生产者可以伪造海量的a.com域名的邮件来散播木马、病毒、钓鱼页面,色情、暴力、恐怖的信息,等等。其危害是不可预测的。

第三,如何防止邮件伪造?

答案是:Sender PolicyFramework (SPF) 发信者策略

1. SPF是什么呢?

简单来说就是人们设计的一套可以杜绝邮件伪造的机制,只要遵照他们设计的方法来配置自己域名的DNS解析,就可以杜绝邮件伪造。

关于SPF的一切,你可以在这个网站(英文)上获得:http://www.openspf.org

SPF 的原理是这样的,伪造这虽然能伪造你的域名,但是却不能控制你的域名的DNS解析记录。因为只有拥有域名账户权限,才能更改解析记录。你的域名解析到的ip是1.1.1.1,而伪造者的ip是2.2.2.2。如果能做一个声明,告诉邮件接收者,我的域名发的邮件ip都是1.1.1.1,其他的都是假的,可以抛弃掉,那么就可以杜绝邮件伪造了。SPF就是这样的一个协议,你可以按照SPF的格式发出声明,邮件服务器按照SPF解读你的声明。这样的一次沟通,就可以解决邮件伪造问题了。

2. 如何使用SPF?

首先,登录你的域名提供商的管理页面,这个页面就是通常是用来设置域名解析ip地址的地方。

例如上述例子,可以这样声明,在域名的解析记录里添加一条txt记录,

二级域名:空或@ txt记录值为:v=spf1 ip4:1.1.1.1 -all

这样,就设置了你的邮件只能是从1.1.1.1这个ip发出的。其中txt记录的意义:

v=spf1 #版本号声明; ip4:x.x.x.x #指定ip地址; -all #对其余的标记为无效(FAIL)

当然这样设置有些问题就是你的域名可能需要变化的ip地址,或扩增多个ip,这时候就可以用其他方式,更改中间的部分(ip4对应位置):

二级域名:空或@ txt记录值为:v=spf1 include:spf1.a.com include:spf2.a.com -all

再设置一个spf1.a.com的txt解析记录,内容为:

二级域名:spf1 txt记录值为:v=spf1 ip4:1.1.1.0/24 ip4:1.2.3.4 -all

其中include的意思是使用其后的地址的SPF记录。而ip4:1.1.1.0/24则是使用一个段。设置spf2.a.com与此类似。这样就可以使用更多的地址作为合法地址。也可以include多层,但常见的一般最多三层已经够用,最后一层要指定到具体的ip或域名。

其他如:v=spf1 a mx ip4:x.x.x.x -all 使用a记录,mx解析记录和指定的ip作为合法地址。

3.更多

关于剩余检查项all前面的“-”符号,参见下表:

"+" Pass(通过) "-" Fail(拒绝) "~" Soft Fail(软拒绝) "?" Neutral(中立)

建议使用“-all”来拒绝陌生地址的邮件。当使用“~all”时,一般会将邮件标记为垃圾邮件。但是由于有时人们还是会翻查垃圾邮件(甚至有时官方都会建议去检查垃圾邮件),因此这样处理并不安全。所以如无特殊需求,建议使用“-all”来拒绝。

禁用所有邮件服务:

v=spf1 -all

详细语法说明(英文):

http://www.openspf.org/SPF_Record_Syntax

http://www.openspf.org/RFC_4408

记一次漏洞-任意邮件伪造检测 – 纯七博客

绕过

SPF解析不当

  • 语法错误将导致SPF记录完全失效,https://www.kitterman.com/spf/validate.html 网站输入域名和SPF记录,可以检查SPF记录是否正确(SPF记录本质上是一个DNS记录,所以并不是修改之后立即生效的,通常需要几个小时的时间)
  • 允许IP段过大,只要攻击者拿下一台网段内的机器即可绕过
  • ~all 软拒绝,会接受来信,但可能被标记为垃圾邮件(outlook 邮箱可以接收邮件,qq 邮箱不接收,163 邮箱标记为垃圾邮件)SPF记录设置硬拒绝,就会有大量的邮件被丢弃或者隔离,影响办公效率,为了减少业务影响,有些管理员采用软拒绝的策略,但也会在一定程度上造成安全风险

SPF配置不当

  • 域名增加了SPF记录,但是邮件服务器不支持SPF检查或邮件网关未开启SPF检测,无法验证邮件来源。这种情况下,我们声明了自己是谁,但却无法验证对方是谁,SPF检测无效,可伪造任意用户发送到你的域名邮箱里
  • SPF解析在公网DNS,邮件服务器配置内部DNS,内部DNS无法进行SPF解析,从而导致绕过,可从公网伪造任意用户发送邮件
  • 攻击者在公司内网,内网SMTP服务器开启匿名邮件发送或者在信任服务器IP段,就可以使用任意用户发送邮件

高权限用户绕过

  • Exchange 邮箱系统,拥有 Domain admin 权限的域用户,可以通过 outlook 直接指定发件人,伪造任意发件人发送邮件并且邮件头不会显示真实IP,但是这条没有什么实际意义,已经拥有 Domain admin 权限就没必要进行邮件伪造了

邮件客户端内容解析差异

From 字段特殊字符填充绕过

渗透测试的介绍和防范相关推荐

  1. 1.渗透测试学习——介绍

    渗透测试介绍 安全问题的根源 分层思想的优劣 网络.软件开发分层好处是把大的复杂的问题简化,层与层之间制定标准接口,通过接口完成信息的交换,最后整个系统可以正常工作. 只追求功能实现 最大的安全威胁是 ...

  2. 自动化渗透测试工具介绍

    一. 渗透测试"三板斧" 1.信息搜集--全面了解系统 网络信息:DNS IP 端口 服务器信息:操作系统 版本 服务 中间件 :版本 WEB系统信息:使用技术 部署系统 数据库 ...

  3. 常用的渗透测试工具介绍

    渗透测试涵盖了广泛的内容,所以渗透测试工具也是多种多样的.渗透测试工具可根据不同的功能分为以下四类: (1)网络渗透测试工具. 如其名称所示,网络渗透测试工具是一种可以测试连接到网络的主机/系统的工具 ...

  4. 渗透测试-DVWA介绍

    日志八 DVWA File inclusion LOW 一种本地文件,直接在磁盘里创建一个文件page=路径 另一种用远程文件url,PHP study重启一下服务,刷新一下网页,page=http: ...

  5. 渗透测试RECON-NG介绍

    工具介绍: 全特性的web侦察框架 基于python开发 Web信息搜索框架 命令格式与msf一致 基于python开发 使用方法 模块 数据库 报告 全局选项 UESR-AGENT(用户信息) Pr ...

  6. 【愚公系列】2023年05月 网络安全高级班 077.Kali LinuxMetasploit渗透测试(Metasploit介绍)

    文章目录 一.Metasploit介绍 1.什么是Metasploit 2.Metasploit的组成 3.Metasploit的基本使用流程 二.基本渗透测试流程 1.攻击流程 2.渗透测试工具介绍 ...

  7. 渗透测试实战指南笔记

    第二章 2.1 在Linux系统中安装LANMP LANMP是Linux下Apache.Nginx.MySQL和PHP的应用环境,本节演示的是WDLinux的一款集成的安装包. 首先,下载需要的安装包 ...

  8. Web安全防攻(渗透测试)

    第二章 2.1 在Linux系统中安装LANMP LANMP是Linux下Apache.Nginx.MySQL和PHP的应用环境,本节演示的是WDLinux的一款集成的安装包. 首先,下载需要的安装包 ...

  9. 渗透测试 ( 3 ) --- Metasploit Framework ( MSF )

    白嫖 :https://zhuanlan.zhihu.com/p/449836479 :http://t.zoukankan.com/hxlinux-p-15787814.html :https:// ...

  10. Metasploit 渗透测试框架的基本使用(扩展:利用永恒之蓝漏洞攻击WIN7靶机)

    1.Metasploit 渗透测试框架介绍 1.基础库:metasploit 基础库文件位于源码根目录路径下的 libraries 目录中,包括Rex,framework-core 和 framewo ...

最新文章

  1. 鹅厂2020暑期实习第二次一面
  2. 使用FFmpeg命令行进行UDP、RTP推流(H264、TS),ffplay接收
  3. c语言结构体的位操作,C语言之路---结构体、位运算及预处理命令
  4. SAP S/4HANA Cloud SDK 入门介绍
  5. 把python37添加到环境变量配置_关于在win 10上成功创建一个Django项目时遇到django-admin的手动配置环境变量问题。...
  6. html选择器_css的9个常用选择器
  7. Eclipse3.2下JFace和SWT工程环境配置方法
  8. python从其他文件导入模块_Python模块可以使用其他文件的导入吗?
  9. 第一章节 初始类和对象
  10. Python 模块之_os模块_os是与操作系统交互的接口
  11. 开发者必装的软件工具总结
  12. 【参赛作品19】【openGauss】gsql客户端工具(二)gsql客户端工具之Data Studio客户端工具
  13. 一个开关电源PCB Layout设计流程
  14. MySql desc 的三种用法
  15. TabLayout自定义Indicator
  16. java excel 筛选_Java 在Excel中设置筛选器
  17. 计算机基础教学质量分析报告,张丹菲信息技术质量分析报告1
  18. 第十六讲:完美主义身心健康 第十七讲:身心健康:运动与冥想 第十八讲:睡眠,触摸和爱情的重要性
  19. 人机混合智能在博弈领域的发展
  20. HTTP 、HTTPS

热门文章

  1. 信息加密技术——对称密码体制
  2. 计算机多媒体设备维护维修,学校多媒体教学设备的故障检修
  3. python速成_速成python
  4. do vis是什么意思_duck不必什么梗?李佳琦放过鸭子吧表情包
  5. Scrapy中Spiders的用法
  6. 湖南启动CCTV《星光达人秀》 《宾导会客厅》全球直播发布
  7. 实现一个javascript手势库 -- base-gesture.js
  8. 【科普】Scrum——从橄榄球争球到敏捷开发
  9. ubuntu14.04安装360随身wifi 2代
  10. 苹果手机上网速度慢_是什么原因导致手机网速慢!