赞
踩
Web攻击(WebAttack)针对用户上网行为,网站服务器等设备进行攻击行为,植入恶意代码,修改网站权限,获取网站用户隐私信息等,Web应用程序的安全是任何Web业务重要组成部分,确保Web应用程序安全十分重要,即使是很小的代码 bug 也可能导致隐私信息泄露,站点安全就是为保护站点不受未授权的访问、使用、修改和破坏而采取的行为或实践
xss攻击跨站脚本攻击,在表单中提交含有可执行的javascript内容文本,如服务器端没有进行过滤或转义防御机制,脚本传到网站站点上,如果有其他用户访问站点,浏览器会执行脚本,导致被攻击,获取用户的cookie等重要信息
这个攻击方式很常见,但是大部分XSS攻击并不高端,基本为业余人士使用已有脚本进行攻击
这个攻击方式用于针对网站用户,并不是Web应用程序本身,攻击者在有漏洞的网站站点内注入代码,网站站点访问者执行代码,XSS攻击可入侵用户账户,激活木马程序,修改网站内容,诱骗用户暴露私人信息
设置Web防火墙(WAF)可以保护网站站点不受XSS攻击,对网站恶意请求进行过滤并阻止访问站点
XSS允许攻击者将恶意代码植入并提供给其他用户使用的Web界面
XSS涉及:攻击者,客户端,Web应用程序
1.盗取存储在客户端的Cookie或网站用于识别客户端身份的敏感信息
通过恶意javascript脚本获取Cookie,通过Ajax和CORS功能将数据发送给恶意服务器,恶意服务器拿到用户Cookie 后,可进行模拟用户登录,进行账户操作。
2.监听用户行为
通过恶意javascript脚本,监听用户事件,获取登陆键入字符串获取用户信息。
3.更改DOM结构
根据URL传递参数的关键字,进行XSS构造,传输给服务器端,如果不做过滤处理,恶意代码将被执行
攻击者将恶意代码提交到目标网站数据库中,用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器用户浏览器接收到响应后解析执行,其中的恶意代码也将被执行,恶意代码窃取用户数据发送到攻击者服务器,或冒充用户行为,调用目标网站接口执行攻击者指定操作
持久型 XSS 漏洞,将内容通过正常功能提交进入数据库持久保存,端页面获得后端从数据库中读出的注入代码时,将其渲染执行
攻击流程:
将恶意代码提交到目标网站数据库中
用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器
用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
恶意代码窃取用户数据发送到攻击者网站,冒充用户行为,调用目标网站接口执行攻击者指定操作
攻击成功需要满足以下条件
POST 请求提交表单后端不做转义直接入库
后端从数据库中取出数据不做转义直接输出前端
前端拿到后端数据不做转义直接渲染DOM
存在于 Form 表单提交等交互功能,文章留言,提交文本信息,带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等
后端需对提交的数据进行过滤
前端对script标签,特殊字符替换成HTML编码
代码和数据分隔
渲染过程
浏览器加载静态 HTML,HTML 中不包含任何与业务相关的数据
浏览器执行 HTML 中的 JavaScript
JavaScript 通过 Ajax 加载业务数据,调用 DOM API 更新到页面上
在纯前端渲染中,会明确的告诉浏览器,要设置的内容是文本(.innerText),还是属性(.setAttribute),还是样式(.style)等。浏览器不会被轻易被欺骗,执行预期外的代码
纯前端渲染还需注意避免 DOM 型 XSS 漏洞(onload 事件和 href 中的 javascript:xxx 等)
在很多内部、管理系统中,采用纯前端渲染非常合理。对于性能要求高,或有 SEO 需求的页面,仍要面对拼接 HTML 的问题
攻击者构造特殊URL,URL中包含恶意代码,用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。用户浏览器接收到响应后解析执行,其中恶意代码也将被执行,恶意代码窃取用户数据并发送到攻击者的服务器,或冒充用户行为,调用目标网站接口执行攻击者指定操作
攻击者向用户发送恶意构造Web的URL
用户点击查看URL时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器
用户获取到具有漏洞的HTML页面显示在本地浏览器中,恶意代码被执行
漏洞HTML页面执行恶意脚本,盗取用户信息发送给攻击者,篡改用户获取的数据,冒充用户行为,调用目标网站接口执行指定操作
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, '<')
str = str.replace(/>/g, '>')
str = str.replace(/"/g, '&quto;')
str = str.replace(/'/g, ''')
str = str.replace(/`/g, '`')
str = str.replace(/\//g, '/')
return str
}
#PHP字符串转义
存储型 XSS 恶意代码存在数据库,反射型 XSS 的恶意代码存在 URL
提交的代码会存储在服务器端,下次请求目标页面时不用再提交XSS代码,每一个访问特定网页的用户都会被攻击
通过 URL 传递参数的功能,如网站搜索、跳转等。
需要用户主动打开恶意 URL 生效,往往会结合多种手段诱导用户进行访问
POST 传递模式也可触发反射型 XSS,触发条件比较苛刻(需构造表单提交页面,引导用户访问),非常少见
攻击者构造特殊URL,包含恶意代码,用户打开具有恶意代码的 URL,用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中恶意代码执行,恶意代码窃取用户数据并发送到攻击者的服务器,或冒充用户行为,调用目标网站接口执行攻击者指定的操作。
DOM 型 XSS 攻击,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,其他两种 XSS 属于服务端安全漏洞
使用 .innerHTML、.outerHTML、document.write() ,不要把不可信数据作为 HTML 插到页面上,使用 .textContent、.setAttribute() 等
Http Only cookie
Web应用程序在设置cookie时,将其属性设为HttpOnly,可以避免该网页的cookie被客户端恶意JavaScript窃取
对产品输入要求格式严谨检查过滤
存储型和反射型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 攻击,针对攻击方式进行防御。
https://blog.csdn.net/weixin_52084568/article/details/118872768
CSRF攻击即跨站域请求伪造,攻击者诱导用户进入第三方网站,向被攻击网站发送跨站请求
利用受害者在被攻击网站获取的注册凭证,绕过后台用户验证,冒充用户对被攻击的网站执行操作
某人在浏览银行网站时,没有关掉银行网站,又访问了携带CSRF攻击的B网站,而这时B网站通过对银行服务器发送转账请求,并携带银行网站的Cookie,在参数上把账号上的钱转到B网站所有人的账户上,这时url得到响应,钱就丢了。
通过构造自动提交表单发送POST请求
通过标签构造,但需要用户进行点击触发
攻击发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。
攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,而不是直接窃取数据。
整个过程攻击者获取不到受害者的登录凭证,仅是“冒用”。
图片URL、超链接、CORS、Form提交等
部分请求方式可直接嵌入在第三方论坛、文章中
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验证
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 请求
HTTP Referer是header的一部分,浏览器向web服务器发送请求时,会带上Referer信息告诉服务器从哪个页面链接过来,服务器获得信息用于处理。通过检查请求来源防御CSRF攻击。正常请求的referer具有一定规律,在提交表单的referer必定是在该页面发起的请求。通过检查referer的值是不是这个页面,判断是不是CSRF攻击
某些情况下从https跳转到http,浏览器处于安全考虑,不发送referer,服务器无法进行check,若该网站同域的其他网站有XSS漏洞,可在其他网站注入恶意脚本,受害者进入同域的网址,也会遭受攻击。无法完全依赖Referer Check作为防御CSRF的主要手段。但可以通过Referer Check监控CSRF攻击的发生
对 Cookie 设置 SameSite 属性。Cookie 不随着跨域请求发送,很大程度减少 CSRF 攻击,目前并不是所有浏览器都兼容
加入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记录,引导用户流量到缓存服务器
302跳转的方式::监控网络出口流量,分析哪些内容可以进行劫持处理,对劫持的内存发起302跳转回复,引导用户获取内容
http明文传输,运营商会修改你的http响应内容
DNS劫持违法,很少有DNS劫持,http劫持依然非常盛行。
全站HTTPS,将HTTP加密,使得运营商无法获取明文,无法劫持响应内容
X-Frame-Options HTTP响应头用来给浏览器指示允许一个页面能否在、、中展现的标记
三个可选的值
DENY:浏览器会拒绝页面加载任何frame页面(相同域名页面也不允许)
SAMEORIGIN:允许加载frame页面,frame页面地址只能为同源域名下页面
ALLOW-FROM:加载指定来源frame页面(可定义frame页面地址)缺陷是chrome、Safari不支持ALLOW-FROM语法
网站开发人员可通过认证码识别用户,确定用户的点击命令执行相应操作。是识别用户的方法中最有效的方法
在网站上广泛存在的发帖认证码,要求用户输入图形中的字符,输入某些图形的特征等
使用 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中运行JavaScirpt脚本、Flash插件、弹出对话框等,可能会破坏前端用户体验。frame本身不受控制,如果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检测工具等
存在很多别的攻击手段:
Https 也存在风险(强制让HTTPS降级回HTTP,从而继续进行中间人攻击)
本地存储数据泄露(尽可能不在前端存储任何敏感、机密的数据)
cdn劫持(攻击者劫持了CDN,或者对CDN中的资源进行了污染)
注入漏洞是网站最高风险漏洞。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攻击使用大量请求数据压垮目标Web服务器,让其他访客无法访问网站。僵尸网络通常能利用感染的计算机从全球各地协同发送大量请求
DDoS攻击常与其他攻击方法搭配使用;利用DDoS攻击吸引安全系统火力,暗中利用漏洞入侵系统
保护网站免遭DDoS攻击侵害,需通过内容分发网络(CDN)、负载均衡器和可扩展资源缓解高峰流量。需部署Web应用防火墙(WAF),防止DDoS攻击隐蔽注入攻击或跨站脚本等其他网络攻击方法。用户的任何信息都不会传输到文件系统API。
潜在的攻击行为,不具备直接破坏行为,通常是发动真正攻击前的网络探测行为。
IP地址扫描攻击、端口扫描攻击。
防火墙上开启目的 IP 或目的端口检测功能,收到同种报文目的 IP 或目的端口改变一次则计数加一,数值达到一定范围则源主机加入黑名单。
发送大量有缺陷的报文,造成主机或服务器在处理报文时系统崩溃。
LAND攻击,Smurf 攻击。
启用畸形报文攻击防范功能,对收到的畸形报文丢弃处理。
使用正常的报文对系统或网络进行攻击, 导致系统崩溃、网络中断,或者用于刺探网络结构。
超大ICMP 报文攻击、ICMP不可达报文攻击。
主机对不同控制报文不予处理,
对收到的 ICMP 重定向和不可达报文直接丢弃。
常见的DDoS攻击,利用TCP协议实现的缺陷。通过向网络服务所在端口发送大量伪造源地址攻击报文,造成目标服务器中的半开连接队列被占满,阻止其他合法用户进行访问
TCP建立连接,需进行三次握手,通信双方最少经过3次成功信息交换才能进入连接全开状态(Full-Open)。
攻击者向目标服务器发送大量SYN数据包,使用欺骗性的IP地址
服务器响应每个连接请求,留下开放端口准备接收响应
服务器等待从未到达的最终ACK数据包时,攻击者继续发送更多SYN数据包。每个新的SYN数据包的到达导致服务器暂时维持新的开放端口连接一段时间,一旦所有可用端口被使用,服务器就无法正常工作。
当服务器断开连接但连接另一端的机器没有连接时,连接被认为是半开的。在这种类型的DDoS攻击中,目标服务器不断离开打开的连接,等待每个连接超时,然后端口再次可用。
发送 ICMP 应答请求,请求包目标地址设置为受害网络的广播地址,该网络的所有主机都对此 ICMP 应答请求作出答复,导致网络阻塞
高级Smurf攻击,用于攻击目标主机。将 ICMP 应答请求包源地址改为受害主机的地址
攻击报文的发送需要一定流量和持续时间,才能构成攻击,网络的主机越多,攻击的效果越明显。
流量型DDoS攻击,常见情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。UDP协议是一种无连接的服务,在UDP Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包。
针对存在ASP、JSP、PHP、CGI等脚本程序,特征是和服务器建立正常的TCP连接,不断向脚本程序提交查询、列表等大量耗费数据库资源的调用。特点是可绕过普通防火墙防护,可通过Proxy代理实施攻击,缺点是攻击静态页面网站效果不佳,暴露攻击者lP地址。
向被攻击的服务器发送大量域名解析请求,请求解析的域名是随机生成或是根本不存在的域名。域名解析过程给服务器带来很大负载,每秒域名解析请求超过一定数量,造成DNS服务器解析域名超时
典型的利用小流量冲击大带宽网络服务攻击方式,原理是利用真实IP地址向服务器发起大量连接。建立连接后长时间不释放,占用服务器资源,造成服务器残余连接(WAIT状态)过多,效率降低,资源耗尽,无法响应其他客户所发起的链接。
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 ,设置应用程序的最大文件描述符数
不要求识别漏洞本身,第一种情况是,获得关于即将到来的安全更新的信息,在更新上线前分析漏洞的位置。第二种情况是,获取补丁信息,攻击尚未更新系统的用户。这两种情况下,系统安全都会遭到破坏
新版本发布后及时更新
查找软件、操作系统或网络中编程错误和安全漏洞。攻击者可以使用同样的技术寻找网站或服务器上的漏洞。
向应用输入大量随机数据(模糊)让应用崩溃。用模糊测试工具发现应用弱点。
保持更新安全设置和其他应用,在安全补丁发布后不更新就会遭遇利用漏洞的情况
通过伪造源地址获得信任,窃取网络信息或破坏系统通信。
URPF(单播逆向路径转发)
防止基于源 IP 地址欺骗的攻击行为,针对伪 造源 IP 地址的 DoS 攻击。工作模式两种,严格模式和松散模式,严格模式下,收到的 IP 报文,检测源地址路由表,去往源的出入接口是否一致;松散模式下只检测路由表中是否有源地址的表项。
IPSG(IP 源防护)
基于绑定表(DHCP 动态和静态绑定表)对 IP 报文进行匹配检查。在转发 IP 报文时,将此 IP 报文中的源 IP、源 MAC、端口、VLAN 信息和绑定表的信息进行比较,如果信息匹配,表明是合法用户,允许报文正常转发,否则认为是攻击报文,丢弃该 IP 报文。
发送目的主机已接收过的数据, 欺骗系统, 用于身份认证过程, 破坏认证正确性
操作是接口调试中常用手段(针对同一请求地址重复请求),操作可跳过认证信息生成过程, 直接重复发起多次有效请求
添加签名,加密等手段(防止请求数据被篡改)并不能解决重放攻击,攻击者已经获取正确请求数据,常规只利用请求数据进行重复性的访问
添加时间戳: 优点是不用额外保存其他信息. 缺点是认证双方需要准确时间同步, 同步越好, 受攻击可能性越小。 当系统庞大, 跨越区域较广时, 做到精确时间同步并不容易
添加随机字符: 优点是认证双方不需要时间同步,双方记住使用过的随机字符, 如发现报文中有以前使用过的随机字符, 认为是重放攻击. 缺点是需要额外保存使用过的随机字符, 若记录的时间段较长, 保存和查询的开销较大
添加流水号: 双方在报文中添加一个逐步递增的整数, 只要接收到一个不连续的流水号报文(太大或太小), 就认定重放威胁. 优点是不需要时间同步, 保存信息量比随机数小. 缺点是报文解密成功, 就可以获得流水号, 每次将流水号递增欺骗认证端。结合使用, 时间戳有效期内判断随机数是否已存在, 有效期外则直接丢弃。
在浏览器中停用JS,防止客户端校验,从而进行某些操作。
隐藏敏感信息
对敏感信息进行加密
session 定期失效
通过URL参数的修改达到访问他人页面
使用链接访问商城上的订单链接
https:/***.***.com/****/****?IDcard=110110
如果网站没有进行相关权限验证,也可通过链接访问其他订单
https:/***.***.com/****/****?IDcard=任意ID
造成其他人隐私泄露
添加权限系统,访问时添加相应校验
加密存储敏感信息
不使用md5加密
图片上传时,上传并不是图片的文件,上传可远程执行的的脚本,可以远程执行脚本对服务器进行攻击
限制文件上传类型
使用第三方文件托管等
使用安全的https版本
敏感信息使用https传输
非敏感信息使用http传输
用于钓鱼,黑客在存在漏洞的网址后添加跳转参数,并且把参数转码,把链接发送给用户,诱导用户点击,这时候用户看到链接的最前面是熟悉的网址,会点击进去,从而是用户的点击发生重定向到非法网站。
添加跳转白名单
跳转前提示用户即将发生跳转到其他可疑网页。
在win系统中向被攻击网站上传 abc.asp;.jsp文件,系统识别为jsp文件,传送到服务器时,系统上面会识别为 asp 文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。