常见网络攻击与防御总结
常见网络攻击与防御
1.2.2 Refer Check(添加Referer识别)
1.2.3 Anti CSRF Token(添加token验证)
1、CSRF攻击与防御
1.1 什么是CSRF
CSRF全名是Cross Site Request Forgery,翻译过来,即跨站请求伪造。那它是如何伪造的呢?案例如下:
假如用户登录了a网站http://www.a.com
,网站有一个get请求 xxx/delete?id=1
用于删除用户个人信息。 这时候弹出一个引人入胜的广告被用户点击,或者用户突然有更重要的访问其他网站的需求而直接开了一个tab,暂停了a网站的访问。以上等原因用户来到了b网站(也可能是钓鱼网站) http://www.b.com
。 b网站内已经藏好了一张不可见的图片 <img src="xxx/delete?id=1" />
; 等用户返回a网站时,发现自己的个人信息不见了!
没错,就是这个看不见的图片,发送了删除个人信息的请求到a服务器,而a服务器又缺少相应的防御措施,引起了灾难。类似的场景也可能是用户的财产损失、账号注销……等等,倘若该链接通过消息或发帖接口发送给好友或公共平台,好友或平台用户查看到后,攻击就会像病毒一样散播开来(参照百度曾经的CSRF Worm)。
http是无状态的,即不会区分哪个用户、哪个请求,不会记录请求状态。所以才会有session、cookie用以区分用户和校验身份。这一步通过了,请求就认为是合法的了。所以说我们只要拿到了这个身份凭证(session、cookie),就可以进行伪造发起CSRF攻击。
1.2 防御CSRF攻击
1.2.1 验证码
http是无状态的,即不会区分哪个用户、哪个请求,不会记录请求状态。所以才会有session、cookie用以区分用户和校验身份。这一步通过了,请求就认为是合法的了。所以说我们只要拿到了这个身份凭证(session、cookie),
1.2.2 Refer Check(添加Referer识别)
如果一个请求来自域www.a.com,那么服务器验证客户端的请求来源时,HTTP请求头的Referer字段值就是www.a.com。这一步需要服务端来实现。问题在于,服务器不是什么时候都能取到Referer,甚至一些情况下是不发送Referer的。
1.2.3 Anti CSRF Token(添加token验证)
CSRF 的本质是所有被伪造攻击的请求的参数都是可被猜测到的。那我们在请求参数里加上随机生成的token,攻击成本将瞬间扩大。token必须满足不可预测,假如我们随机产生的token是一个8位数字,那攻击者暴力**是分分钟的事。token必须同时满足保密性和随机性。
2、sql注入攻击
2.1 什么是sql注入攻击
Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
2.2 sql注入产生原因及威胁
当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。原因小结如下:
(1)WEB开发人员无法保证所有的输入都已经过滤;
(2)攻击者利用发送给SQL服务器的输入参数构造可执行的SQL代码(可加入到get请求、post请求、http头信息、cookie中)
(3)数据库未做相应的安全配置。
Sql 注入带来的威胁主要有如下几种方式:
1. 猜测数据库名,备份数据库;
2. 猜解字段名称;
3. 遍历系统的目录结构,分析结构并发现WEB虚拟目录,植入木马;
4. 查询当前用户的数据库权限;
5. 设置新的数据库帐户提权得到数据库管理员账户权限;
6. 利用存储过程获取操作系统管理员账户;
7. 客户端脚本攻击:通过正常的输入提交方式将恶意脚本提交到数据库中,当其他用户浏览此内容时就会受到恶意脚本的攻击;
8. 客户端脚本攻击:通过SQL注入方式将恶意脚本提交到数据库中,直接使用SQL语法UPDATE数据库,并将注入SQL经过“HEX编码”,然后通过exec执行“动态”SQL的特性运行脚本。
2.3 防御sql注入攻击
(1)永远不要信任客户端提交的数据,一定要对客户端提交的数据进行校验,校验可以考虑数据类型,字符长度或者正则表达式等方式。
(2)对客户端提交的数据进行转义,例如将" ' "转义为" ' "。
(3)采用预编译绑定变量的SQL语句而不是直接拼接SQL语句。
(4)避免在生产环境中,直接输出错误信息,因为这些错误信息有可能被攻击者利用。
(5)严格执行数据库账号权限管理。
(6)对用户敏感信息特别是密码做严格加密处理。
3、XSS攻击
3.1 什么是XSS攻击
XSS攻击的全称是跨站脚本攻击(Cross Site Scripting),为不跟层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。跨站脚本攻击也就是在网站里嵌入恶意脚本程序,当用户打开网站时,窃取Cookie,盗取信息。
3.2 XSS的攻击方式
(1)URI参数传递
(2)表单提交参数
3.3 如何防御XSS攻击
(1)继承HttpServletRequestWrapper,然后重写(@Override)getParameter()、getHeader()等等方法。
(2)文件上传不走HttpServletRequestWrapper,需要继承CommonsMultipartResolver,重写方法。
4、DDos攻击
4.1 什么是DDos攻击
DDos(Distributed Denial of Service),即分布式拒绝服务攻击,DDos攻击是基于Dos发展来的。什么是Dos呢?首先简单介绍一下Dos,Dos就是利用信任的客户端向服务端频繁发送请求,从而达到服务器处理不过来,请求超时。所以Dos其实就是一对一的,在邮件设施还不太好的情况是有效的,对于性能极佳的服务器压根不管用了,所以就有了DDos,分布式拒绝服务攻击。
DDos攻击过程是分布式的,首先黑客可能会通过程序控制大量的计算机,然后通过这个计算机群在同一个时间,发送大量的请求到目标服务器,从而达到服务器处理不过来,请求超时的情况。
4.2 DDos攻击的常用方式
4.2.1 攻击带宽
跟交通堵塞情况一样,大家都应该清楚:当网络数据包的数量达到或者超过上限时,会出现网络拥堵、响应缓慢的情况。DDoS 就是利用这个原理,发送大量网络数据包,占满被攻击目标的全部带宽,从而造成正常请求失效,达到拒绝服务的目的。
攻击者可以使用 ICMP 洪水攻击(即发送大量 ICMP 相关报文)、或者 UDP 洪水攻击(即发送用户数据报协议的大包或小包),使用伪造源 IP 地址方式进行隐匿,并对网络造成拥堵和服务器响应速度变慢等影响。
但是,这种直接方式通常依靠受控主机本身的网络性能,所以效果不是很好,还容易被查到攻击源头。于是反射攻击就出现,攻击者使用特殊的数据包,即 IP 地址指向作为反射器的服务器,源 IP 地址被伪造成攻击目标的 IP,反射器接收到数据包的时候就被骗了,会将响应数据发送给被攻击目标,然后就会耗尽目标网络的带宽资源。
4.2.2 攻击系统
创建 TCP 连接需要客户端与服务器进行三次交互,也就是常说的“三次握手”。这个信息通常被保存在连接表结构中,但是表的大小有限,所以当超过存储量,服务器就无法创建新的 TCP 连接。
攻击者利用这一点,用受控主机建立大量恶意的 TCP 连接,占满被攻击目标的连接表,使其无法接受新的 TCP 连接请求。如果攻击者发送了大量的 TCP SYN 报文,让服务器在短时间内产生大量的半开连接,连接表也会被很快占满,导致无法建立新的 TCP 连接,这个方式是 SYN 洪水攻击,很多攻击者都比较常用。
4.2.3 攻击应用
由于 DNS 和 Web 服务的广泛性和重要性,这两种服务就成为消耗应用资源的分布式拒绝服务攻击的主要目标。比如,向 DNS 服务器发送大量查询请求,从而达到拒绝服务的效果,如果每一个 DNS 解析请求所查询的域名都是不同的,那么就有效避开服务器缓存的解析记录,达到更好的资源消耗效果。当 DNS 服务的可用性受到威胁,互联网上大量的设备都会受到影响而无法正常使用,这个过程即DNS Query Flood攻击。攻击的过程为:
(1)通过程序控制,向目标服务器的DNS服务器,发送大量的域名解析请求,不过这些域名基本是随机生成的,比如改下端口什么的。
(2)DNS服务器接收到域名之后,先去缓存里查找是否有这个域名,然后发现没有,之后,DNS服务器就会向上层的DNS服务器递归查询了,指导向上查询了全球13台根DNS服务器。这时候肯定会出现域名解析超时的情况。
近些年,Web 技术发展非常迅速,如果攻击者利用大量的受控主机不断地向 Web 服务器恶意发送大量 HTTP 请求,要求 Web 服务器处理,就会完全占用服务器资源,让正常用户的 Web 访问请求得不到处理,导致拒绝服务。一旦 Web 服务受到这种攻击,就会对其承载的业务造成致命的影响。
4.2.4 混合攻击
随着僵尸网络向小型化的趋势发展,为降低攻击成本,有效隐藏攻击源,躲避安全设备,同时保证攻击效果,针对应用层的小流量慢速攻击已经逐步发展壮大起来。因此,从另一个角度来说,DDoS 攻击方面目前主要是两个方面:一是 UDP 及反射式大流量高速攻击,二是多协议小流量及慢速攻击。
4.3 DDos的防御
DDos的防御主要有以下方面:
4.3.1 设置高性能设备
要保证网络设备不能成为瓶颈,因此选择路由器、交换机、硬件防火墙等设备时要尽量选用知名度高、口碑好的产品。并且,假如和网络提供商有特殊关系或协议的话就更好了,当大量攻击发生时请他们在网络接点处做一下流量限制来对抗某些种类的 DDoS 攻击是非常有效的。
4.3.2. 带宽得保证
网络带宽直接决定了能抗受攻击的能力,假若仅仅只有 10M 带宽的话,无论采取什么措施都很难对抗现在的 SYN Flood 攻击。所以,最好选择 100M 的共享带宽,当然是挂在 1000M 的主干上了。
4.3.3 不要忘记升级
在有网络带宽保证的前提下,请尽量提升硬件配置,要有效对抗每秒 10 万个 SYN 攻击包。而且最好可以进行优化资源使用,提高 web server 的负载能力。
4.3.4 异常流量的清洗
通过 DDoS 硬件防火墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。
4.3.5 考虑把网站做成静态页面
将网站尽可能做成静态页面,不仅能大大提高抗攻击能力,而且还给黑客入侵带来不少麻烦,最好在需要调用数据库的脚本中,拒绝使用代理的访问,经验表明,使用代理访问你网站的 80% 属于恶意行为。
4.3.6. 分布式集群防御
这是目前网络安全界防御大规模 DDoS 攻击的一种有效办法。分布式集群防御的特点是在每个节点服务器配置多个 IP 地址,并且每个节点能承受不低于 10G 的 DDoS 攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。
5、中间人攻击(MiTM)
5.1 什么是中间人攻击
(1)中间人攻击的定义:
中间人攻击是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
简单来说,攻击者在请求和响应传输途中,拦截并篡改内容。对于 HTTP 来说,由于设计的简单,不需要太多步骤就可以进行监听和修改报文;在这里主要是针对 HTTPS,HTTPS 使用了 SSL 加密协议,是一种非常安全的机制,目前并没有方法直接对这个协议进行攻击,一般都是在建立 SSL 连接时,利用中间人获取到 CA证书、非对称加密的公钥、对称加密的**;有了这些条件,就可以对请求和响应进行拦截和篡改。
(2)中间人攻击需要截获请求响应
对于中间人攻击,有一个前提就是:需要截获到客户端与服务器通信的线路。抓包工具一般都是用户主动将其设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。对于其它工具则是利用 DNS欺骗、ARP投毒、劫持网关等手段,将客户端的请求重定向到攻击者的机器,以便进行网络抓包。
5.2 SSL证书欺骗攻击
(1)SSL 证书欺骗攻击流程大概如下:
- 截获客户端与服务器通信的通道
- 然后在 SSL 建立连接的时候,进行中间人攻击
- 将自己伪装成客户端,获取到服务器真实有效的 CA 证书(非对称加密的公钥)
- 将自己伪装成服务器,获取到客服端的之后通信的**(对称加密的**)
- 有了证书和**就可以监听之后通信的内容了
图示如下:
(2)这个避免方法就是:
- 客户端不要轻易信任证书;
- App 可以提前预埋证书在本地。
5.3 MiTM的几种方式
5.3.1 嗅探
嗅探或数据包嗅探是一种用于捕获流进和流出系统/网络的数据包的技术。网络中的数据包嗅探就好像电话中的监听。记住,如果使用正确,数据包嗅探是合法的;许多公司出于“安全目的”都会使用它。
5.3.2 数据包注入
在这种技术中,攻击者会将恶意数据包注入常规数据中。这样用户便不会注意到文件/恶意软件,因为它们是合法通讯流的一部分。在中间人攻击和拒绝式攻击中,这些文件是很常见的。
5.3.3 会话劫持
你曾经遇到过“会话超时”错误吗?如果你进行过网上支付或填写过一个表格,你应该知道它们。在你登录进你的银行账户和退出登录这一段期间便称为一个会话。这些会话通常都是黑客的攻击目标,因为它们包含潜在的重要信息。在大多数案例中,黑客会潜伏在会话中,并最终控制它。这些攻击的执行方式有多种。
5.3.4 SSL 剥离攻击
SSL剥离或SSL降级攻击是MiTM攻击的一种十分罕见的方式,但是也是最危险的一种。众所周知,SSL/TLS证书通过加密保护着我们的通讯安全。在SSL剥离攻击中,攻击者使SSL/TLS连接剥落,随之协议便从安全的HTTPS变成了不安全的HTTP,从而截获用户的传输内容。
SSL 剥离就是将客户端的 HTTPS 请求降级成 HTTP 请求,阻止 HTTP 请求重定向成 HTTPS ,流程图如下:
5.4 小结
中间人攻击主要是伪装身份,然后截取通信的内容,对于 HTTP 是可以很轻松的截获;但是对于 HTTPS,主要是在建立 SSL 连接的时候,骗取到证书和**。防御中间人攻击主要手段有客户端不要轻易信任证书和App 可以提前预埋证书在本地。
6 HSTS简介
6.1 什么是HSTS
HSTS(HTTP Strict Transport Security) 是一种Web安全协议,它的作用是在本地强制客户端(如浏览器)使用HTTPS与服务器创建连接。服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议响应头中包含STS(Strict-Transport-Security)字段。
6.2 HSTS能解决的问题
HSTS主要针对以下三个威胁:
- 用户书签中的链接或者手动输入的地址是example.com,然后浏览器以HTTP方式访问。这种方式可能遭遇中间人劫持;
- HTTPS页面的链接无意中包含HTTP,这个HTTP页面可能被中间人劫持;
- 在传输过程中可能会被拦截流量,而浏览器显示证书错误链接不安全时用户可能点击继续访问不安全的链接。
HSTS针对以上三个威胁的解决方案:
- 支持HSTS的浏览器直接内部重定向,用HTTPS取代HTTP访问目标域名;
- 第二点同上;
- 在证书错误的时候没有目标页的链接入口,用户不能忽略浏览器警告继续访问网站。
如前所述,若没有使用HSTS,虽然会出现安全警告,但是仍可选择继续不安全的连接。而如果使用了HSTS,则无法继续不安全的链接。
声明:本文部分内容整理来源于网络,仅做个人学习使用!侵删~
本文部分内容参考链接:
(1)https://juejin.im/post/6844904071938342925
(2)https://www.infoq.cn/article/miG6Xf0i3cfl1XH3iQcp
(3)https://www.jianshu.com/p/a4d719bdf7ce
(4)https://blog.csdn.net/u014427391/article/details/80384317