JTangming / blog

My repository on GitHub.
Other
53 stars 0 forks source link

Web 安全之攻防总结 #21

Open JTangming opened 5 years ago

JTangming commented 5 years ago

以下基于常见的攻击方式入手,对攻防方式和策略做一些总结。

CSRF

CSRF(Cross Site Request Forgery),即跨站请求伪造,是常见的 Web 攻击之一,攻击过程示例图如下: csrf

CSRF 利用用户已登录的身份,在当前用户毫不知情的情况下完成非法操作,通过上图总结攻击原理如下:

举个例子方便理解,用户登陆某银行网站,以 Get 请求的方式完成转账,攻击者可构造另一危险链接 B,并把该链接通过一定方式诱骗受害者用户点击。受害者用户若在浏览器打开此链接,会将之前登陆后的 cookie 信息一起发送给银行网站,服务器在接收到该请求后,确认 cookie 信息无误则完成该请求操作,造成攻击行为完成。

攻击者可以构造 CGI 的每一个参数,伪造请求,这也是存在 CSRF 漏洞的最本质原因。

CSRF 防御方式

1、验证码,在一些关键的节点操作加上验证码,但是该种方式一定程度上会降低用户体验 2、Referer Check,通过 Http header 的 referer 鉴定请求来源。但在某些情况下如从 https 跳转到 http,浏览器基于安全考虑,不会发送 referer,服务器就无法进行 check,所以这种方式不是 CSRF 的主要防御手段。 3、SameSite,可以对 Cookie 设置 SameSite 属性,但并不是所有浏览器都支持的。 4、Anti CSRF Token,比较完善的解决方案是加入 Anti-CSRF-Token。即发送请求时在 Http 请求中加入 token,并在服务器建立一个拦截器来验证 token。服务器读取浏览器当前域 cookie 中的 token 值,然后进行校验,即该请求中的 token 和 cookie 中的 token 值是否都存在且相等,才认为这是合法的请求,否则拒绝该次服务。

总结一下就是:

XSS 攻击

XSS(Cross Site Scripting),跨站脚本攻击。恶意攻击者往 Web 页面里注入恶意 Script 代码,当用户浏览这些网页时,就会执行其中的恶意代码,可造成对用户 cookie 信息盗取、会话劫持等各种攻击。

XSS 的攻击原理是往 Web 页面里插入可执行网页脚本代码,当用户浏览该页之时,嵌入其中的脚本代码会被执行,从而可以达到盗取用户信息或其他侵犯用户安全隐私的目的。有可能造成以下影响:

1、非持久型 XSS

非持久型 XSS 漏洞,一般是通过给在 URL 参数中添加恶意脚本,当 URL 链接被打开后,特有的恶意代码参数被 HTML 解析、执行。

非持久型 XSS 漏洞攻击有以下几点特征:

预防非持久型 XSS 攻击,可以采取如下措施:

2、持久型 XSS

该种攻击一般存在于 Form 表单交互的提交,如文章留言,提交文本信息等。即将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。

与 1 中非持久型注入不一样,其来源是之前非法提交的存储在数据库中的数据,持久型 XSS 攻击不需要诱骗点击,黑客只需要在提交表单的地方完成注入即可。

防御手段如下:

SQL 注入攻击

SQL 注入即攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。

攻击原理

攻击者将 SQL 命令插入到 Web 表单提交或在表单输入特殊字符,最终达到欺骗服务器执行恶意的 SQL命令。一次 SQL 攻击大致过程是:获取用户请求参数,拼接到代码当中,SQL语句按照我们构造参数的语义执行成功。SQL 注入可能是因为:

如何防御

DoS 攻击

DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为 DoS 攻击。其目的是使计算机或网络无法提供正常的服务,最常见的 DoS 攻击有计算机网络带宽攻击和连通性攻击。

为了进一步认识 DoS 攻击,需要了解 TCP 三次握手及数据段互换的过程,具体参考下图: dos-1

在 DoS 攻击中,攻击者通过伪造 ACK 数据包,希望 Server 重传某些数据包,Server 根据 TCP 重传机制,进行数据重传。攻击者通过发送大量的半连接请求,耗费 CPU 和内存资源,实现方式如下图: dos-2

Web 服务器在未收到客户端的确认包时,会重发请求包一直到链接超时,才将此条目从未连接队列删除。攻击者再配合IP欺骗,SYN 攻击会达到很好的效果。通常攻击者在短时间内伪造大量不存在的 IP 地址,向服务器不断地发送 SYN 包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的 SYN 包将长时间占用未连接队列,正常的 SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

SYN 攻击的问题就出在 TCP 连接的三次握手中,假设一个用户向服务器发送了 SYN 报文后突然死机或掉线,那么服务器在发出 SYN+ACK 应答报文后是无法收到客户端的 ACK 报文的,从而导致第三次握手无法完成。在这种情况下服务器端一般会重试,即再次发送 SYN+ACK给 客户端,并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为 SYN Timeout,一般来说这个时间是分钟的数量级,大约为30秒到2分钟。但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源,即数以万计的半连接,将会对服务器的CPU和内存造成极大的消耗。

对于该类问题,可以做如下防范:

一般来说,第三种方法在防范该类问题上表现更佳。同时可以在Web服务器端采用分布式组网、负载均衡、提升系统容量等可靠性措施,增强总体服务能力。

JTangming commented 5 years ago

更多了解: