DDOS、CC、sql注入,跨站攻击防御方法
web安全常见攻击解读--DDos、cc、sql注入、xss、CSRF
一,DDos
https://www.cnblogs.com/sochishun/p/7081739.html#4111858
http://nic.swu.edu.cn/s/nic/thyt/20180604/2555404.html
1.1 DDos介绍
DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”。分布式拒绝服务攻击发起后,攻击网络包就会从很多DOS攻击源(俗称肉鸡)犹如洪水般涌向受害主机,从而把合法用户的网络包淹没,导致合法用户无法正常访问服务器的网络资源,因此拒绝服务攻击又被称之为“洪水攻击”,常见的DDOS攻击手段有SYN Flood、UDP Flood、ICMP Flood、HTTP Flood、NTP Flood、Connections Flood、Script Flood、DNS Query Flood等。
什么是DDoS攻击?
让我们来举个例子,假设你开了一家店,生意还不错。
此时隔壁家生意萧条的店主盯上了你。
于是他雇佣来了一群闹事者上门,装成要买东西的顾客。
你完全应接不暇,而且他们老找你问这问那,东看西看,就是不买东西,还赖着不走!
而真正的顾客连进店的地方都没有了!这就是所谓的DDoS攻击——
一群“恶意访问”、“堵店门”、“占空间”、还“调戏店员”的非法流量。
1.2 DDos常用攻击方式
1.2.1. SYN Flood:
利用TCP协议的原理,这种攻击方法是经典最有效的DDOS方法,可通杀各种系统的网络服务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK 包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务。
TCP通道在建立以前,需要三次握手:
a. 客户端发送一个包含SYN标志的TCP报文, 同步报文指明客户端所需要的端口号和TCP连接的初始序列号
b. 服务器收到SYN报文之后,返回一个SYN+ ACK报文,表示客户端请求被接受,TCP初始序列号加1
c.客户端也返回一个确认报文ACK给服务器,同样TCP序列号加1
d. 如果服务器端没有收到客户端的确认报文ACK,则处于等待状态,将该客户IP加入等待队列,然后轮训发送SYN+ACK报文
所以攻击者可以通过伪造大量的TCP握手请求,耗尽服务器端的资源。
1.2.2. HTTP Flood:俗称cc攻击
针对系统的每个Web页面,或者资源,或者Rest API,用大量肉鸡,发送大量http request。这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQLServer、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。缺点是对付只有静态页面的网站效果会大打折扣。
1.2.3. 慢速攻击:
Http协议中规定,HttpRequest以\r\n\r\n结尾来表示客户端发送结束。攻击者打开一个Http 1.1的连接,将Connection设置为Keep-Alive, 保持和服务器的TCP长连接。然后始终不发送\r\n\r\n, 每隔几分钟写入一些无意义的数据流, 拖死机器。
1.2.4. P2P攻击:
每当网络上出现一个热门事件,比如XX门, 精心制作一个种子, 里面包含正确的文件下载, 同时也包括攻击目标服务器的IP。这样,当很多人下载的时候, 会无意中发起对目标服务器的TCP连接。
1.2.5. NTP Flood:
NTP是标准的基于UDP协议传输的网络时间同步协议,由于UDP协议的无连接性,方便伪造源地址。攻击者使用特殊的数据包,也就是IP地址指向作为反射器的服务器,源IP地址被伪造成攻击目标的IP,反射器接收到数据包时就被骗了,会将响应数据发送给被攻击目标,耗尽目标网络的带宽资源。一般的NTP服务器都有很大的带宽,攻击者可能只需要1Mbps的上传带宽欺骗NTP服务器,就可给目标服务器带来几百上千Mbps的攻击流量。因此,“问-答”方式的协议都可以被反射型攻击利用,将质询数据包的地址伪造为攻击目标地址,应答的数据包就会都被发送至目标,一旦协议具有递归效果,流量就被显著放大了,堪称一种“借刀杀人”的流量型攻击。
1.3 DDos攻击类型判断
DDOS攻击现象判定方法
1.3.1.SYN类攻击判断:
A.CPU占用很高;
B.网络连接状态:netstat –na,若观察到大量的SYN_RECEIVED的连接状态;
C.网线插上后,服务器立即凝固无法操作,拔出后有时可以恢复,有时候需要重新启动机器才可恢复。
1.3.2.CC类攻击判断:
A.网站出现service unavailable提示;
B.CPU占用率很高;
C.网络连接状态:netstat –na,若观察到大量的ESTABLISHED的连接状态 单个IP高达几十条甚至上百条;
D.用户无法访问网站页面或打开过程非常缓慢,软重启后短期内恢复正常,几分钟后又无法访问。
1.3.3.UDP类攻击判断:
A.观察网卡状况 每秒接受大量的数据包;
B.网络状态:netstat –na TCP信息正常。
1.3.4.TCP洪水攻击判断:
A.CPU占用很高;
B.netstat –na,若观察到大量的ESTABLISHED的连接状态 单个IP高达几十条甚至上百条
1.4 DDoS攻击防御方法:
1.4.1. 过滤不必要的服务和端口:
可以使用Inexpress、Express、Forwarding等工具来过滤不必要的服务和端口,即在路由器上过滤假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以针对封包Source IP和Routing Table做比较,并加以过滤。只开放服务端口成为目前很多服务器的流行做法,例如WWW服务器那么只开放80而将其他所有端口关闭或在防火墙上做阻止策略。
1.4.2. 异常流量的清洗:
通过DDOS硬件防火墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。单台负载每秒可防御800-927万个syn攻击包。
1.3. 分布式集群防御:
这是目前网络安全界防御大规模DDOS攻击的最有效办法。分布式集群防御的特点是在每个节点服务器配置多个IP地址(负载均衡),并且每个节点能承受不低于10G的DDOS攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态。
4. 高防智能DNS解析:
高智能DNS解析系统与DDOS防御系统的完美结合,为企业提供对抗新兴安全威胁的超级检测功能。智能根据用户的上网路线将DNS解析请求解析到用户所属网络的服务器。
5. 接入云高防及使用CDN加速
二,CC攻击
2.1 CC攻击介绍
CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,前身名为Fatboy攻击,也是一种常见的网站攻击方法。攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。相比其它的DDOS攻击CC似乎更有技术含量一些。这种攻击你见不到真实源IP,见不到特别大的异常流量,但造成服务器无法进行正常连接。最让站长们忧虑的是这种攻击技术含量低,利用更换IP代理工具和一些IP代理一个初、中级的电脑水平的用户就能够实施攻击。
2.2 CC攻击防御方法
1. 利用Session做访问计数器:
利用Session针对每个IP做页面访问计数器或文件下载计数器,防止用户对某个页面频繁刷新导致数据库频繁读取或频繁下载某个文件而产生大额流量。文件下载不要直接使用下载地址,才能在服务端代码中做CC攻击的过滤处理
2. 把网站做成静态页面:
大量事实证明,把网站尽可能做成静态页面,不仅能大大提高抗攻击能力,而且还给骇客入侵带来不少麻烦,至少到现在为止关于HTML的溢出还没出现,门户网站主要都是静态页面若你非需要动态脚本调用,那就把它弄到另外一台单独主机去,免的遭受攻击时连累主服务器。
3. 增强操作系统的TCP/IP栈
linux系统级别安全防御,开启后可能用影响服务器负载性能,具有两面性。
4. 在存在多站的服务器上,严格限制每一个站允许的IP连接数和CPU使用时间,这是一个很有效的方法。
CC的防御要从代码做起,其实一个好的页面代码都应该注意这些东西,还有SQL注入,不光是一个入侵工具,更是一个DDOS缺口,设置访问数据库请求都必须一个随机参数在Session里面,全是静态页面,攻击就会没有效果。代码层的防御需要从点点滴滴做起,一个脚本代码的错误,可能带来的是整个站的影响,甚至是整个服务器的影响!
5. 服务器前端加CDN中转
(免费的有百度云加速、360网站卫士、青牛云,又拍云等),如果资金充裕的话,可以购买高防的盾机,用于隐藏服务器真实IP,域名解析使用CDN的IP,所有解析的子域名都使用CDN的IP地址。此外,服务器上部署的其他域名也不能使用真实IP解析,全部都使用CDN来解析。 另外,防止服务器对外传送信息泄漏IP地址,最常见的情况是,服务器不要使用发送邮件功能,因为邮件头会泄漏服务器的IP地址。如果非要发送邮件,可以通过第三方代理(例如sendcloud)发送,这样对外显示的IP是代理的IP地址。总之,只要服务器的真实IP不泄露,10G以下小流量DDOS的预防花不了多少钱,免费的CDN就可以应付得了。如果攻击流量超过20G,那么免费的CDN可能就顶不住了,需要购买一个高防的盾机来应付了,而服务器的真实IP同样需要隐藏。
三,sql注入
https://baijiahao.baidu.com/s?id=1629045600845343519&wfr=spider&for=pc
https://www.cnblogs.com/binyao/p/4900393.html
3.1 sql注入介绍
什么是SQL注入式攻击
所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
3.2 sql注入攻击类型
1 带内注入:
这是典型的攻击,攻击者可以通过相同的通信通道发起攻击并获得结果。这是通过两种带内技术完成的:
● 基于错误的SQL注入:从显示的错误消息中获取有关数据库的信息
● 基于联合的SQL注入:依赖于攻击者能够将UNION ALL被盗信息的结果与合法结果连接起来。
这两种技术都依赖于攻击者修改应用程序发送的SQL,以及浏览器中显示的错误和返回的信息。
如果应用程序开发人员或数据库开发人员无法正确地参数化他们在查询中使用的值,那么它会成功。两者都是试错法,可以检测到错误。
2 盲注入:
也称为推理SQL注入,盲注入攻击不会直接从目标数据库中显示数据;相反,攻击者会仔细检查行为中的间接线索。HTTP响应中的详细信息,某些用户输入的空白网页以及数据库响应某些用户输入需要多长时间,这些都可以是线索,具体取决于攻击者的目标。
3 带外注入:
这种攻击有点复杂,当攻击者无法在单个直接查询 - 响应攻击中实现其目标时,攻击者可能会使用此攻击。通常,攻击者会制作SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。二阶注入就是一种带外注入攻击。在这种情况下,攻击者将提供SQL注入,该注入将由数据库系统的单独行为存储和执行。当二级系统行为发生时(它可能类似于基于时间的作业或由其他典型管理员或用户使用数据库触发的某些事情)并且执行攻击者的SQL注入,那就是当“伸出”到系统时攻击者控制发生了。
3.3 防御sql注入
1,不使用动态sql
2,将用户登录名称、密码等敏感数据加密保存
3,严格限制数据库用户权限
4,避免直接向用户显示数据库错误
5,检查用户输入的合法性
四 xss跨站攻击
https://www.cnblogs.com/firstdream/p/7760490.html
4.1 xss介绍
跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、偷取密码、传播恶意代码等攻击行为。恶意的攻击者将对客户端有危害的代码放到服务器上作为一个网页内容, 使得其他网站用户在观看此网页时,这些代码注入到了用户的浏览器中执行,使用户受到攻击。一般而言,利用跨站脚本攻击,攻击者可窃会话COOKIE从而窃取网站用户的隐私,包括密码。XSS攻击使用到的技术主要为HTML和Javascript,也包括VBScript和ActionScript等。XSS攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站用户受到攻击,导致用户帐号被窃取,从而对网站也产生了较严重的危害。
4.2 xss漏洞修复
一:避免XSS的方法之一主要是将用户所提供的内容输入输出进行过滤 ,可以利用下面这些函数对出现xss漏洞的参数进行过滤
1.PHP的htmlentities()或是htmlspecialchars()
2.Python的cgi.escape()
3.ASP的Server.HTMLEncode()
4.ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
5.Java的xssprotect(Open Source Library)
6.Node.js的node-validator
二:使用开源的漏洞修复插件。
五 CSRF跨站请求伪造
https://www.jianshu.com/p/67408d73c66d
5.1 CSRF介绍
CSRF攻击的全称是跨站请求伪造( cross site request forgery),是一种对网站的恶意利用,尽管听起来跟XSS跨站脚本攻击有点相似,但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。你可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。 CRSF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等,甚至盗取你的账号
5.2 CSRF攻击原理过程
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。
网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
5.3 CSRF防御
1、尽量使用POST,限制GET
GET接口太容易被拿来做CSRF攻击,接口最好限制为POST使用,GET则无效,降低攻击风险。当然POST并不是万无一失,攻击者只要构造一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。
2、将cookie设置为HttpOnly
CRSF攻击很大程度上是利用了浏览器的cookie,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设置“HttpOnly”属性,这样通过程序(如JavaScript脚本、Applet等)就无法读取到cookie信息,避免了攻击者伪造cookie的情况出现。在Java的Servlet的API中设置cookie为HttpOnly的代码如:response.setHeader( "Set-Cookie", "cookiename=cookievalue;HttpOnly")
3、增加token
CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于cookie中,因此攻击者可以在不知道用户验证信息的情况下直接利用用户的cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于cookie之中系统开发人员可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端进行token校验,如果请求中没有token或者token内容不正确,则认为是CSRF攻击而拒绝该请求。
4、验证 HTTP Referer 字段
根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站