Web攻击及防御

Web攻击(WebAttack)针对用户上网行为,网站服务器等设备进行攻击行为,植入恶意代码,修改网站权限,获取网站用户隐私信息等,Web应用程序的安全是任何Web业务重要组成部分,确保Web应用程序安全十分重要,即使是很小的代码 bug 也可能导致隐私信息泄露,站点安全就是为保护站点不受未授权的访问、使用、修改和破坏而采取的行为或实践

XSS跨站脚本攻击 (Cross Site Scripting)

xss攻击跨站脚本攻击,在表单中提交含有可执行的javascript内容文本,如服务器端没有进行过滤或转义防御机制,脚本传到网站站点上,如果有其他用户访问站点,浏览器会执行脚本,导致被攻击,获取用户的cookie等重要信息
这个攻击方式很常见,但是大部分XSS攻击并不高端,基本为业余人士使用已有脚本进行攻击
这个攻击方式用于针对网站用户,并不是Web应用程序本身,攻击者在有漏洞的网站站点内注入代码,网站站点访问者执行代码,XSS攻击可入侵用户账户,激活木马程序,修改网站内容,诱骗用户暴露私人信息
设置Web防火墙(WAF)可以保护网站站点不受XSS攻击,对网站恶意请求进行过滤并阻止访问站点

XSS允许攻击者将恶意代码植入并提供给其他用户使用的Web界面
XSS涉及:攻击者,客户端,Web应用程序

XSS攻击目标

1.盗取存储在客户端的Cookie或网站用于识别客户端身份的敏感信息
通过恶意javascript脚本获取Cookie,通过Ajax和CORS功能将数据发送给恶意服务器,恶意服务器拿到用户Cookie 后,可进行模拟用户登录,进行账户操作。
2.监听用户行为
通过恶意javascript脚本,监听用户事件,获取登陆键入字符串获取用户信息。
3.更改DOM结构
根据URL传递参数的关键字,进行XSS构造,传输给服务器端,如果不做过滤处理,恶意代码将被执行

XSS攻击类型

存储型 XSS

攻击者将恶意代码提交到目标网站数据库中,用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器用户浏览器接收到响应后解析执行,其中的恶意代码也将被执行,恶意代码窃取用户数据发送到攻击者服务器,或冒充用户行为,调用目标网站接口执行攻击者指定操作

持久型 XSS 漏洞,将内容通过正常功能提交进入数据库持久保存,端页面获得后端从数据库中读出的注入代码时,将其渲染执行

攻击流程:
将恶意代码提交到目标网站数据库中

用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器

用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行

恶意代码窃取用户数据发送到攻击者网站,冒充用户行为,调用目标网站接口执行攻击者指定操作


攻击成功需要满足以下条件
POST 请求提交表单后端不做转义直接入库

后端从数据库中取出数据不做转义直接输出前端

前端拿到后端数据不做转义直接渲染DOM
攻击位置

存在于 Form 表单提交等交互功能,文章留言,提交文本信息,带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等

存储型XSS防御
后端需对提交的数据进行过滤

前端对script标签,特殊字符替换成HTML编码

代码和数据分隔

渲染过程
浏览器加载静态 HTML,HTML 中不包含任何与业务相关的数据
浏览器执行 HTML 中的 JavaScript
JavaScript 通过 Ajax 加载业务数据,调用 DOM API 更新到页面上

在纯前端渲染中,会明确的告诉浏览器,要设置的内容是文本(.innerText),还是属性(.setAttribute),还是样式(.style)等。浏览器不会被轻易被欺骗,执行预期外的代码

纯前端渲染还需注意避免 DOM 型 XSS 漏洞(onload 事件和 href 中的 javascript:xxx 等)

在很多内部、管理系统中,采用纯前端渲染非常合理。对于性能要求高,或有 SEO 需求的页面,仍要面对拼接 HTML 的问题

反射型 XSS

攻击者构造特殊URL,URL中包含恶意代码,用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。用户浏览器接收到响应后解析执行,其中恶意代码也将被执行,恶意代码窃取用户数据并发送到攻击者的服务器,或冒充用户行为,调用目标网站接口执行攻击者指定操作

攻击者向用户发送恶意构造Web的URL

用户点击查看URL时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器

用户获取到具有漏洞的HTML页面显示在本地浏览器中,恶意代码被执行

漏洞HTML页面执行恶意脚本,盗取用户信息发送给攻击者,篡改用户获取的数据,冒充用户行为,调用目标网站接口执行指定操作
反射型XSS防御
Web 页面渲染的所有内容或渲染的数据必须来自于服务端。

不要从 URL,document.referrer,document.forms 等 DOM API 中获取数据直接渲染

不使用 eval, new Function(),document.write(),document.writeln(),window.setInterval(),window.setTimeout(),innerHTML,document.createElement() 等可执行字符串

必须对涉及 DOM 渲染方法传入字符串参数做 escape 转义

前端渲染时对任何字段做 escape 转义编码
function escape(str) {
  str = str.replace(/&/g, '&')
  str = str.replace(/</g, '&lt;')
  str = str.replace(/>/g, '&gt;')
  str = str.replace(/"/g, '&quto;')
  str = str.replace(/'/g, '&#39;')
  str = str.replace(/`/g, '&#96;')
  str = str.replace(/\//g, '&#x2F;')
  return str
}
#PHP字符串转义
反射型 XSS 与存储型 XSS 的区别:

存储型 XSS 恶意代码存在数据库,反射型 XSS 的恶意代码存在 URL

提交的代码会存储在服务器端,下次请求目标页面时不用再提交XSS代码,每一个访问特定网页的用户都会被攻击

攻击位置

通过 URL 传递参数的功能,如网站搜索、跳转等。

需要用户主动打开恶意 URL 生效,往往会结合多种手段诱导用户进行访问

POST 传递模式也可触发反射型 XSS,触发条件比较苛刻(需构造表单提交页面,引导用户访问),非常少见

DOM 型 XSS

攻击者构造特殊URL,包含恶意代码,用户打开具有恶意代码的 URL,用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中恶意代码执行,恶意代码窃取用户数据并发送到攻击者的服务器,或冒充用户行为,调用目标网站接口执行攻击者指定的操作。

DOM 型 XSS 与前两种 XSS 区别

DOM 型 XSS 攻击,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,其他两种 XSS 属于服务端安全漏洞

DOM型XSS防御
使用 .innerHTML、.outerHTML、document.write() ,不要把不可信数据作为 HTML 插到页面上,使用 .textContent、.setAttribute() 等

Http Only cookie

Web应用程序在设置cookie时,将其属性设为HttpOnly,可以避免该网页的cookie被客户端恶意JavaScript窃取

对产品输入要求格式严谨检查过滤 

XSS防御

攻击者提交恶意代码
解决方案

存储型和反射型XSS都是由于服务器没严格检测用户输入数据,不能相信用户的任何输入。通过给用户输入做过滤,对比较敏感的字符进行过滤处理,浏览器的DOM解析器就不会运行恶意代码

对于基于DOM的XSS攻击,使用HTTPS进行传输html,可避免中间人更改html文件

利用 CSP,严格实施CSP操作

使用 HttpOnly 属性,避免js脚本操作cookie,即使页面被注入了恶意 JavaScript 脚本,也无法获取到设置了 HttpOnly 的数据。所以重要数据要进行设置 HttpOnly 标志。

CSP( Content-Security-Policy)
建立白名单,明确告诉浏览器哪些外部资源可以加载和执行
只需配置规则,拦截由浏览器实现

开启 CSP
设置 HTTP Header 中的 Content-Security-Policy

设置 meta 标签的方式

Content-Security-Policy: default-src 'self'
#只允许加载本站资源
Content-Security-Policy: img-src https://*
#只允许加载 HTTPS 协议图片
Content-Security-Policy: child-src 'none'
#允许加载任何来源框架
浏览器执行恶意代码
解决方案

利用 CSP,严格实施CSP操作

限制加载其他域下的资源文件,虽然插入JavaScript 文件,JavaScript 文件也无法被加载

禁止向第三方域提交数据,用户数据不会外泄

禁止执行内联脚本和未授权的脚本,提供上报机制,可发现 XSS 攻击,针对攻击方式进行防御。

XSS-LAB通关笔记
https://blog.csdn.net/weixin_52084568/article/details/118872768

CSRF跨站请求伪造(Cross-site request forgery)

CSRF攻击即跨站域请求伪造,攻击者诱导用户进入第三方网站,向被攻击网站发送跨站请求
利用受害者在被攻击网站获取的注册凭证,绕过后台用户验证,冒充用户对被攻击的网站执行操作

典型CSRF攻击流程

某人在浏览银行网站时,没有关掉银行网站,又访问了携带CSRF攻击的B网站,而这时B网站通过对银行服务器发送转账请求,并携带银行网站的Cookie,在参数上把账号上的钱转到B网站所有人的账户上,这时url得到响应,钱就丢了。

通过构造自动提交表单发送POST请求
通过标签构造,但需要用户进行点击触发

CSRF特点

攻击发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。
攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,而不是直接窃取数据。
整个过程攻击者获取不到受害者的登录凭证,仅是“冒用”。

跨站请求方式

图片URL、超链接、CORS、Form提交等
部分请求方式可直接嵌入在第三方论坛、文章中

CSRF的预防

CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强网站针对CSRF防护能力提升安全性

解决方案

1.阻止不明外域访问

2.同源检测

3.Samesite Cookie

4.提交要求附加本域才能获取的信息

5.CSRF Token

用户打开页面的时候,服务器给用户生成Token, 对于GET请求,Token将附在请求地址之后。 对于 POST 请求,form 的最后添加<input type=”hidden” name=”token” value=”tokenvalue”/>
当用户从客户端获得Token,提交给服务器时,服务器判断Token有效性

6.双重Cookie验证

CSRF防御细节

1、敏感请求使用验证码

2、验证HTTP Referer字段。Referer字段记录了HTTP请求的来源地址,从银行网站发出的请求会带有银行网站地址,从携带CSRF地址发出的请求会携带B网站地址,只需在每个敏感请求验证Referer值,如果是来自A网站的通过,否则不通过。这种方法把安全寄托于浏览器,并不安全,在浏览器上,有时可以通过篡改 Referer 进行CSRF攻击。在某些用户禁用Referer的情况下,服务器会一直拒绝客户请求。

3、在请求地址中添加token 并验证。用户登录后,产生token 放入session,每次请求时把token从session中取出,以参数的形式加入请求,在服务器端建立拦截器验证token,验证成功则通过,否则拒绝。这种方法也是有安全问题,某些网站支持用户发表链接的,攻击者在该网站发布自己个人网站地址,系统也会为这个地址后加上token,攻击者可以在自己的网站上获得这个token参数,发动CSRF攻击。

4、在HTTP头中自定义属性token 并验证。把token作为自定义属性放在HTTP的头中,封装XMLHttpRequest可以一次性给所有请求加上token 属性。token就不会暴露在浏览器地址中。

 	5、不让第三方网站访问到用户 Cookie

	6、显示验证方式:添加验证码、密码

 7、涉及数据修改操作严格使用 post 请求
Referer Check

HTTP Referer是header的一部分,浏览器向web服务器发送请求时,会带上Referer信息告诉服务器从哪个页面链接过来,服务器获得信息用于处理。通过检查请求来源防御CSRF攻击。正常请求的referer具有一定规律,在提交表单的referer必定是在该页面发起的请求。通过检查referer的值是不是这个页面,判断是不是CSRF攻击

某些情况下从https跳转到http,浏览器处于安全考虑,不发送referer,服务器无法进行check,若该网站同域的其他网站有XSS漏洞,可在其他网站注入恶意脚本,受害者进入同域的网址,也会遭受攻击。无法完全依赖Referer Check作为防御CSRF的主要手段。但可以通过Referer Check监控CSRF攻击的发生

SameSite

对 Cookie 设置 SameSite 属性。Cookie 不随着跨域请求发送,很大程度减少 CSRF 攻击,目前并不是所有浏览器都兼容

Anti CSRF Token

加入Anti-CSRF-Token,发送请求时在HTTP 请求中以参数形式加入随机产生的token,在服务器建立拦截器验证token。服务器读取浏览器当前域cookie中的token,进行校验该请求当中的token和cookie当中的token值是否都存在且相等,才认为合法请求。否则认为请求违法,拒绝服务

相比Referer安全很多,token在用户登陆后产生存放于session或cookie中,在每次请求时服务器把token从session或cookie中拿出,与请求的token 比对。无法构造完整URL实施CSRF攻击。在处理多个页面共存问题时,某个页面消耗掉token后,其他页面的表单保存的还是被消耗掉的token,其他页面的表单提交时会出现token错误

验证码

应用程序和用户进行交互过程中,特别是交易步骤,强制用户输入验证码,才能完成最终请求。验证码够很好地遏制CSRF攻击。增加验证码降低了用户体验,网站不能给所有操作都加上验证码。所以验证码只能作为辅助手段,在关键业务点设置验证

点击劫持攻击

视觉欺骗攻击手段。将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,将 iframe 设置透明,在页面中透出按钮诱导用户点击。使用透明的、不可见的iframe,覆盖在网页上,诱使用户在网页上进行操作,用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面位置,诱使用户恰好点击在iframe页面的一些功能性按钮上

网络劫持分为两种

DNS劫持: (强制跳转属于dns劫持)

DNS强制解析: 修改运营商本地DNS记录,引导用户流量到缓存服务器
302跳转的方式::监控网络出口流量,分析哪些内容可以进行劫持处理,对劫持的内存发起302跳转回复,引导用户获取内容

HTTP劫持:一直有广告

http明文传输,运营商会修改你的http响应内容

点击劫持攻击防御

DNS劫持违法,很少有DNS劫持,http劫持依然非常盛行。
全站HTTPS,将HTTP加密,使得运营商无法获取明文,无法劫持响应内容

X-Frame-Options浏览器机制

X-Frame-Options HTTP响应头用来给浏览器指示允许一个页面能否在、、中展现的标记

三个可选的值
DENY:浏览器会拒绝页面加载任何frame页面(相同域名页面也不允许)
SAMEORIGIN:允许加载frame页面,frame页面地址只能为同源域名下页面
ALLOW-FROM:加载指定来源frame页面(可定义frame页面地址)缺陷是chrome、Safari不支持ALLOW-FROM语法

使用认证码认证用户

网站开发人员可通过认证码识别用户,确定用户的点击命令执行相应操作。是识别用户的方法中最有效的方法

在网站上广泛存在的发帖认证码,要求用户输入图形中的字符,输入某些图形的特征等

使用 FrameBusting 代码

使用 JavaScript 脚本阻止恶意网站载入网页。检测到网页被非法网页载入,执行自动跳转功能。用户浏览器禁用JavaScript脚本,FrameBusting代码也无法正常运行。所以,只能提供部分保障功能。

<head>
  <style id="click-jack">
    html {
      display: none !important;
    }
  </style>
</head>
<body>
  <script>
    if (self == top) {
      var style = document.getElementById('click-jack')
      document.body.removeChild(style)
    } else {
      top.location = self.location
    }
  </script>
</body>
#通过 iframe 方式加载页面时,攻击者网页不显示所有内容

iframe风险

内容由第三方提供,默认不受控制,可在iframe中运行JavaScirpt脚本、Flash插件、弹出对话框等,可能会破坏前端用户体验。frame本身不受控制,如果iframe中域名因为过期被恶意攻击者抢注,或第三方被攻破,iframe中的内容被替换掉,从而利用用户浏览器中的安全漏洞下载安装木马、恶意勒索软件等

iframe防御

sandbox安全属性,可对iframe行为进行各种限制,在 iframe 元素中添加关键词即可,sandbox提供丰富的配置参数,可进行细粒度控制。

典型的参数

allow-forms
#允许iframe中提交form表单

allow-popup
#允许iframe中弹出窗口或标签页
#window.open(),showModalDialog(),target=”_blank”等

allow-scripts
#允许iframe中执行JavaScript

allow-same-origin
#允许iframe中网页开启同源策略

如果只是添加上属性但保持属性值为空,那么浏览器将会对 iframe 实施最严厉调控限制

不安全的第三方依赖

使用很多第三方依赖,不论代码安全性多高,如果这些来自第三方的代码有安全漏洞,依然容易遭受攻击
jQuery已经存在多个已知安全漏洞,Node.js也有一些已知的安全漏洞。

第三方依赖包防御

手动检查第三方代码,工作量大,应用依赖的组件数量众多,手工检查耗时,使用自动化工具,NSP(Node Security Platform),Snyk、sonarQubej检测工具等

VUE对前端安全的处理:VUE的安全措施

存在很多别的攻击手段:

Https 也存在风险(强制让HTTPS降级回HTTP,从而继续进行中间人攻击)

本地存储数据泄露(尽可能不在前端存储任何敏感、机密的数据)

cdn劫持(攻击者劫持了CDN,或者对CDN中的资源进行了污染)

SQL注入

注入漏洞是网站最高风险漏洞。SQL注入方法是最常用的注入手法。
注入攻击方法直接针对网站和服务器的数据库。执行SQL语句时,攻击者注入一段能够显示隐藏数据和用户输入的代码,获得数据修改权限,全面俘入侵应用程序
注入攻击,攻击者提交表单时,在表单上面填写相关sql语句,系统把这些字段当成普通变量发送给服务器端进行sql查询,填写的sql会拼接在系统sql语句上,进行数据库的操作。
保护网站不受注入攻击危害,主要在代码库的构建。缓解SQL注入风险的首选方法是采用参数化语句,使用第三方身份验证工作流外包数据库防护

Sql 注入攻击,通过将恶意的 Sql查询或添加语句插入应用的输入参数中,在后台 Sql服务器上解析执行进行的攻击

<form action="/login" method="POST">
    Username: <input type="text" name="username" />
    Password: <input type="password" name="password" />
    <input type="submit" value="登陆" />
</form>

系统处理的sql语句时变为

username:=r.Form.Get("username")
password:=r.Form.Get("password")
sql:="SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"'"

攻击者输入用户名如下,密码为任意值的情况下

用户名' or 'User' = 'User' --

系统的ql语句会变成

SELECT * FROM user WHERE username='myuser' or 'foo' = 'foo' --'' AND password='xxx'

攻击者成功登陆MYSQL

解决方案

1.确认每种数据的类型,数字,数据库则必须使用int类型存储

2.过滤参数中含有数据库关键词,表单过滤,验证表单提交合法性,特殊字符进行转义处理

3.规定数据长度

4.严格限制数据库权限,数据库权限最小化

5.避免直接响应sql异常信息,sql发生异常后,自定义异常进行响应

6.对访问数据库的Web应用程序使用WAF
  
7.查询语句使用数据库提供的参数化查询接口,不直接拼接SQL

标题网络钓鱼

网络钓鱼是没有直接针对网站的攻击方法,网络钓鱼破坏系统的完整性。网络钓鱼是最常见的社会工程网络犯罪。

网络钓鱼攻击用到的标准工具就是电子邮件。攻击者通常会伪装成其他人,诱骗受害者给出敏感信息或执行银行转账。涉及假冒电子邮件地址、貌似真实的网站和极具说服力语言的高端攻击。

缓解网络钓鱼骗局风险最有效的办法,终于源头还是人,增强辨识能力。保持警惕,检查发送者电子邮件地址是否合法,邮件内容是否正常,请求是否合理

使用未知代码或第三方代码

尽管不直接对网站攻击,使用由第三方创建未经验证得到代码,也会导致严重的安全漏洞。
代码或应用的原始创建者可能在代码中隐藏恶意字符串,或无意留下后门。一旦恶意代码引入网站,会面临恶意字符串执行或后门利用的风险。其后果可从单纯的数据传输直到网站管理权限陷落
避免围绕潜在数据泄露的风险,开发人员分析并审计代码的有效性。确保所用插件及时更新,定期接收安全补丁

暴力破解攻击

暴力破解是获取Web应用登录信息最直接的方式。也是非常容易防御的攻击,从用户加以防御最为方便。
暴力破解攻击中,攻击者猜解用户名和密码,登录用户账户。即使采用多台计算机,除非密码简单明显,否则破解过程需耗费时间。
保护登录信息的办法,创建强密码,使用双因子身份验证。作为网站拥有者,可要求用户同时设置强密码和2FA

中间人攻击

利用中间人类型的攻击收集信息,通常是敏感信息。数据在双方之间传输时遭到恶意黑客拦截,数据未加密,攻击者就能轻易读取个人信息、登录信息或其他敏感信息。

攻击原理

攻击者位于客户端和服务器中间,对客户端,攻击者假冒为服务器,对服务器,攻击者假冒为客户端。

解决方法

针对 ARP 欺骗攻击,采用 DAI(动态 ARP 检测),设备收到 ARP 报文时,将 ARP 报文对应的源 IP、源 MAC、VLAN 以及接口信息和 DHCP Snooping 绑定表信息比较,信息匹配,说明发送该 ARP 报文的用户是合法用户,允许此 用户的 ARP 报文通过,否则认定是攻击,丢弃 ARP 报文。

在网站上安装安全套接字层(SSL)有效预防中间人攻击风险。SSL证书加密各方间传输的信息,攻击者即使拦截到了也无法轻易破解

路径(目录)遍历

路径遍历攻击针对Web root文件夹,访问目标文件夹外部未授权文件或目录。将移动模式注入服务器目录,向上爬升。路径遍历攻击能够获得网站访问权,配置文件、数据库和同一实体服务器上其他网站和文件。

网站能否抵御路径遍历攻击取决于输入过滤程度。保证用户输入安全,并且不能从服务器恢复用户输入内容。创建代码库

分布式拒绝服务(DDoS)

DDoS攻击不能突破安全措施,会令网站暂时或永久掉线。
DDoS攻击使用大量请求数据压垮目标Web服务器,让其他访客无法访问网站。僵尸网络通常能利用感染的计算机从全球各地协同发送大量请求
DDoS攻击常与其他攻击方法搭配使用;利用DDoS攻击吸引安全系统火力,暗中利用漏洞入侵系统
保护网站免遭DDoS攻击侵害,需通过内容分发网络(CDN)、负载均衡器和可扩展资源缓解高峰流量。需部署Web应用防火墙(WAF),防止DDoS攻击隐蔽注入攻击或跨站脚本等其他网络攻击方法。用户的任何信息都不会传输到文件系统API。

扫描探测攻击

攻击原理

潜在的攻击行为,不具备直接破坏行为,通常是发动真正攻击前的网络探测行为。

IP地址扫描攻击、端口扫描攻击。

解决方案:

防火墙上开启目的 IP 或目的端口检测功能,收到同种报文目的 IP 或目的端口改变一次则计数加一,数值达到一定范围则源主机加入黑名单。

畸形报文攻击

攻击原理

发送大量有缺陷的报文,造成主机或服务器在处理报文时系统崩溃。

LAND攻击,Smurf 攻击。

解决方案

启用畸形报文攻击防范功能,对收到的畸形报文丢弃处理。

特殊控制报文攻击

攻击原理

使用正常的报文对系统或网络进行攻击, 导致系统崩溃、网络中断,或者用于刺探网络结构。

超大ICMP 报文攻击、ICMP不可达报文攻击。

解决方案

主机对不同控制报文不予处理,
对收到的 ICMP 重定向和不可达报文直接丢弃。

SYN Flood攻击

常见的DDoS攻击,利用TCP协议实现的缺陷。通过向网络服务所在端口发送大量伪造源地址攻击报文,造成目标服务器中的半开连接队列被占满,阻止其他合法用户进行访问

攻击原理

TCP建立连接,需进行三次握手,通信双方最少经过3次成功信息交换才能进入连接全开状态(Full-Open)。

攻击者向目标服务器发送大量SYN数据包,使用欺骗性的IP地址
服务器响应每个连接请求,留下开放端口准备接收响应
服务器等待从未到达的最终ACK数据包时,攻击者继续发送更多SYN数据包。每个新的SYN数据包的到达导致服务器暂时维持新的开放端口连接一段时间,一旦所有可用端口被使用,服务器就无法正常工作。

当服务器断开连接但连接另一端的机器没有连接时,连接被认为是半开的。在这种类型的DDoS攻击中,目标服务器不断离开打开的连接,等待每个连接超时,然后端口再次可用。

Smurf 攻击原理

攻击原理

发送 ICMP 应答请求,请求包目标地址设置为受害网络的广播地址,该网络的所有主机都对此 ICMP 应答请求作出答复,导致网络阻塞
高级Smurf攻击,用于攻击目标主机。将 ICMP 应答请求包源地址改为受害主机的地址
攻击报文的发送需要一定流量和持续时间,才能构成攻击,网络的主机越多,攻击的效果越明显。

UDP Flood攻击

流量型DDoS攻击,常见情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。UDP协议是一种无连接的服务,在UDP Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包。

HTTP Get攻击

攻击原理

针对存在ASP、JSP、PHP、CGI等脚本程序,特征是和服务器建立正常的TCP连接,不断向脚本程序提交查询、列表等大量耗费数据库资源的调用。特点是可绕过普通防火墙防护,可通过Proxy代理实施攻击,缺点是攻击静态页面网站效果不佳,暴露攻击者lP地址。

UDP DNS Query Flood攻击

攻击原理

向被攻击的服务器发送大量域名解析请求,请求解析的域名是随机生成或是根本不存在的域名。域名解析过程给服务器带来很大负载,每秒域名解析请求超过一定数量,造成DNS服务器解析域名超时

Connection Flood攻击

攻击原理

典型的利用小流量冲击大带宽网络服务攻击方式,原理是利用真实IP地址向服务器发起大量连接。建立连接后长时间不释放,占用服务器资源,造成服务器残余连接(WAIT状态)过多,效率降低,资源耗尽,无法响应其他客户所发起的链接。

DDOS 的防范

Linux 自带防火墙防范攻击

DDOS SYN Flood 攻击为例,可通过系统自带iptables 防火墙进行防护。

第一种方式是禁止攻击来源IP,通常攻击源不只一个IP,防护效果较弱。
第二钟方式是限制syn并发次数及同一个IP 新建连接数的数量。

$ iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
#限制syn并发数为每秒 1 次

$ iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 10 -j REJECT
#限制IP 60秒新建立连接数为 10

如果攻击源多,很难阻挡。SYN Flood 导致SYN_RECV 状态的连接急剧增大,可通过调整半连接容量大小

sysctl -w net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_max_syn_backlog = 1024

每个SYN_RECV 如果失败,内核会自动重试,默认5次

sysctl -w net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_synack_retries = 1

TCP SYN Cookies 是一种专门防御 SYN Flood 的方法,基于连接信息(包括源地址、源端口、目的地址、目的端口等)以及加密种子(如系统启动时间),计算哈希值(SHA1),称为 cookie。
cookie 被用作序列号,应答 SYN+ACK 包,释放连接状态。客户端发送完三次握手最后一次 ACK 后,服务器再次计算哈希值,确认是返回 SYN+ACK 的返回包,才会进入 TCP 的连接状态。开启 SYN Cookies 后,可不维护半开连接状态,没有半连接数的限制。
开启 TCP syncookies 后,内核选项 net.ipv4.tcp_max_syn_backlog 无效。

sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1
#开启内核选项 net.ipv4.tcp_max_syn_backlog 

优化网络相关的内核参数
遭遇攻击时,请求数较大,最大量处于TIME. WAIT状态的连接。

linux查看tcp的状态命令

netstat -nat
#查看TCP状态数量
lsof -i:port 
#检测打开套接字状况
sar -n SOCK 
#查看tcp创建连接数
tcpdump -iany tcp port 8080 
#对tcp端口8080抓包
TCP状态及描述

状态							描述
LISTEN							等待来自远程TCP应用程序的请求
SYN_SENT						发送连接请求后等待来自远程端点的确认。TCP第一次握手后客户端所处的状态
SYN-RECEIVED					该端点已经接收到连接请求并发送确认。该端点正在等待最终确认。TCP第二次握手后服务端所处的状态
ESTABLISHED						代表连接已经建立起来了。这是连接数据传输阶段的正常状态
FIN_WAIT_1						等待来自远程TCP的终止连接请求或终止请求的确认
FIN_WAIT_2						在此端点发送终止连接请求后,等待来自远程TCP的连接终止请求
CLOSE_WAIT						该端点已经收到来自远程端点的关闭请求,此TCP正在等待本地应用程序的连接终止请求
CLOSING	等待来自远程TCP的连接终止请求确认
LAST_ACK						等待先前发送到远程TCP的连接终止请求的确认
TIME_WAIT						等待足够的时间来确保远程TCP接收到其连接终止请求的确认

占用大量内存和端口资源。可以优化与TIME_ WAIT状态相关内核选项

#增大处于 TIME_WAIT 状态的连接数量 
net.ipv4.tcp_max_tw_buckets 
#并增大连接跟踪表的大小 
net.netfilter.nf_conntrack_max
减小net.ipv4.tcp_fin_timeout 和net.netfilter.nf_conntrack_tcp_timeout_time_wait 
#让系统尽快释放它们所占用的资源
#开启端口复用 
net.ipv4.tcp_tw_reuse
#TIME_WAIT 状态占用的端口,还能用到新建连接中
#增大本地端口的范围 
net.ipv4.ip_local_port_range
#可以支持更多连接,提高整体的并发能力
#增加最大文件描述符的数量
使用fs.nr_open 和 fs.file-max 
#分别增大进程和系统最大文件描述符数
在应用程序的 systemd 配置文件中,配置 LimitNOFILE ,设置应用程序的最大文件描述符数

零日攻击

不要求识别漏洞本身,第一种情况是,获得关于即将到来的安全更新的信息,在更新上线前分析漏洞的位置。第二种情况是,获取补丁信息,攻击尚未更新系统的用户。这两种情况下,系统安全都会遭到破坏

防御方法

新版本发布后及时更新

模糊测试

查找软件、操作系统或网络中编程错误和安全漏洞。攻击者可以使用同样的技术寻找网站或服务器上的漏洞。

向应用输入大量随机数据(模糊)让应用崩溃。用模糊测试工具发现应用弱点。

防御方法

保持更新安全设置和其他应用,在安全补丁发布后不更新就会遭遇利用漏洞的情况

源 IP 地址欺骗攻击

攻击原理

通过伪造源地址获得信任,窃取网络信息或破坏系统通信。

解决方法

URPF(单播逆向路径转发)

防止基于源 IP 地址欺骗的攻击行为,针对伪 造源 IP 地址的 DoS 攻击。工作模式两种,严格模式和松散模式,严格模式下,收到的 IP 报文,检测源地址路由表,去往源的出入接口是否一致;松散模式下只检测路由表中是否有源地址的表项。

IPSG(IP 源防护)

基于绑定表(DHCP 动态和静态绑定表)对 IP 报文进行匹配检查。在转发 IP 报文时,将此 IP 报文中的源 IP、源 MAC、端口、VLAN 信息和绑定表的信息进行比较,如果信息匹配,表明是合法用户,允许报文正常转发,否则认为是攻击报文,丢弃该 IP 报文。

重放攻击(Replay Attacks)

发送目的主机已接收过的数据, 欺骗系统, 用于身份认证过程, 破坏认证正确性

操作是接口调试中常用手段(针对同一请求地址重复请求),操作可跳过认证信息生成过程, 直接重复发起多次有效请求

添加签名,加密等手段(防止请求数据被篡改)并不能解决重放攻击,攻击者已经获取正确请求数据,常规只利用请求数据进行重复性的访问

解决方案

添加时间戳: 优点是不用额外保存其他信息. 缺点是认证双方需要准确时间同步, 同步越好, 受攻击可能性越小。 当系统庞大, 跨越区域较广时, 做到精确时间同步并不容易

添加随机字符: 优点是认证双方不需要时间同步,双方记住使用过的随机字符, 如发现报文中有以前使用过的随机字符, 认为是重放攻击. 缺点是需要额外保存使用过的随机字符, 若记录的时间段较长, 保存和查询的开销较大

添加流水号: 双方在报文中添加一个逐步递增的整数, 只要接收到一个不连续的流水号报文(太大或太小), 就认定重放威胁. 优点是不需要时间同步, 保存信息量比随机数小. 缺点是报文解密成功, 就可以获得流水号, 每次将流水号递增欺骗认证端。结合使用, 时间戳有效期内判断随机数是否已存在, 有效期外则直接丢弃。

身份认证和会话

攻击方式

在浏览器中停用JS,防止客户端校验,从而进行某些操作。

防御方式

隐藏敏感信息

对敏感信息进行加密

session 定期失效

权限与访问控制

攻击方式

通过URL参数的修改达到访问他人页面
使用链接访问商城上的订单链接

https:/***.***.com/****/****?IDcard=110110

如果网站没有进行相关权限验证,也可通过链接访问其他订单

https:/***.***.com/****/****?IDcard=任意ID

造成其他人隐私泄露

防御方式

添加权限系统,访问时添加相应校验

不安全加密存储

防御手段

加密存储敏感信息

不使用md5加密

上传漏洞

攻击原理

图片上传时,上传并不是图片的文件,上传可远程执行的的脚本,可以远程执行脚本对服务器进行攻击

防御手段

限制文件上传类型

使用第三方文件托管等

传输层未加密

防御手段

使用安全的https版本

敏感信息使用https传输

非敏感信息使用http传输

未验证的重定向和转发

攻击原理

用于钓鱼,黑客在存在漏洞的网址后添加跳转参数,并且把参数转码,把链接发送给用户,诱导用户点击,这时候用户看到链接的最前面是熟悉的网址,会点击进去,从而是用户的点击发生重定向到非法网站。

防御手段

添加跳转白名单

跳转前提示用户即将发生跳转到其他可疑网页。

WebShell

攻击原理

在win系统中向被攻击网站上传 abc.asp;.jsp文件,系统识别为jsp文件,传送到服务器时,系统上面会识别为 asp 文件

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴龙振翅飞翔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值