常见的攻击类型及防范
转载请注明出处:
最近在做安全整改,通过在做安全整改的过程中,对安全有了更深得认识,便将常见的攻击及防范整理如下:
拒绝服务攻击DoS(Denial of Service) :使系统过于忙碌而不能执行有用的业务并且占尽关键系统资源。它是基于这样的思想:用数据包淹没本地系统,
以打扰或严重阻止捆绑本地的服务响应外来合法的请求,甚至使本地系统崩溃。实现Dos攻击,常见的方式有:TCP SYN泛洪(SYN Flood),ping泛洪(ping-Flood),
UDP泛洪(UDP-Flood),分片炸弹(fragmentation bombs),缓冲区溢出(buffer overflow)和ICMP路由重定向炸弹(ICMP routeing redirect bomb)。
TCP SYN泛洪是利用TCP建立连接时需要进行三次握手的过程,并结合IP源地址欺骗实现的。 攻击者将其自身的源地址伪装成一个私有地址向本地系统的
TCP服务发起连接请求,本地TCP服务回复一个SYN-ACK作为响应,然而该响应发往的地址并非攻击者的地址(真实地址),而是攻击者伪装的私有地址。
由于该私有地址是不存在的于本地服务器所在的网络的,所有本地系统将收不到RST消息(以结束这个半打开连接)。本地TCP服务接下来要等待接收一个ACK回应,
但是该回应永远不会到来,该半打开连接会保持打开状态直至连接尝试超时,因此有限的连接资源被消耗了。攻击者连接请求的到来比TCP超时释放资源更快,
利用一次又一次的连接请求淹没本地连接资源(如通过listen()创建的大小有限的连接队列等),以致本地服务无法接收更多的连接请求。
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,
从而达到恶意的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。
实施XSS攻击需要具备两个条件:
1.需要向web页面注入恶意代码;
2.这些恶意代码能够被浏览器成功的执行。
解决方法:
-
在表单提交或者url参数传递前,对需要的参数进行过滤,
-
过滤用户输入的 及检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出
所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容
直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
很多场景在写数据库sql的时候,都会编写动态sql,以适配不同的场景。动态sql的传参会根据外部传入的参数进行sql的拼接。若攻击这外部传参或表单提交时提交sql语句,
则拼接的时候就会直接拼到sql的一部分,且会执行。
如java 中 mybatis 动态拼写sql 时,#{}和 ${}的区别:
1.# 将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
如:where username= #{username},如果传入的值是111,那么解析成sql时的值为where username = “111”,如果传入的值是id,则解析成的sql 为where username = “id”;
2、$将传入的数据直接显示生成在sql中。
如:where username= ${username},如果传入的值是111,那么解析成sql是的值为 where username = 111;
如果传入的值是;drop table user;,则解析成的sql为:select * from user where username=;drop table user; 3、#方式能够很大程度防止sql注入,$方式无法防止Sql注入。
数据被传递至应用程序并作为正则表达式使用。可能导致线程过度使用 CPU 资源,从而导致拒绝服务攻击。
下述代码java中字符串的split, replaceAll均支持正则的方式, 导致CPU挂起.
final String input = "0000000000000000000000000000000000000000000000"; long startTime = System.currentTimeMillis(); System.out.println(input.split("(0*)*A")); System.out.println("耗时:" + (System.currentTimeMillis() - startTime) + "ms");
-
-
因此,匹配器逐步回退,并尝试所有的组合以找出匹配符号。它最终将返回(没有匹配的结果),但是该过程的复杂性是指数型的(输入中添加一个字符加倍了运行时间)
-
参考文章:
重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,
破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,
之后再把它重新发给认证服务器。重放攻击在任何网络通过程中都可能发生,是计算机世界黑客常用的攻击方式之一。
解决方案:
a. 基于timestamp防止重放攻击
b. 基于nonce值得防重放攻击
c .基于timstamp和nonce值防止重放攻击
d. 使用证书(公钥与私钥),timestamp 与nonce值进行防重放与防篡改
可参考这篇博客: https://www.cnblogs.com/zjdxr-up/p/14488681.html
XPath 即为 XML 路径语言,是 W3C XSLT 标准的主要元素,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言。
XPath 基于 XML 的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力,可用来在 XML 文档中对元素和属性进行遍历。
XPath注入攻击是指利用XPath解析器的松散输入和容错特性,能够在URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。
XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知识的情况下,通过XPath查询得到一个XML文档的完整内容。
XPath注入攻击利用两种技术,即XPath扫描和 XPath查询布尔化。通过该攻击,攻击者可以控制用来进行XPath查询的XML数据库。这种攻击可以
有效地对付使用XPath查询(和XML数据库) 来执行身份验证、查找或者其它操作。XPath注入攻击同SQL注入攻击类似
存在以下危害:
-
在URL及表单中提交恶意XPath代码,可获取到权限限制数据的访问权,并可修改这些数据
- 可通过此类漏洞查询获取到系统内部完整的XML文档内容。
- 逻辑以及认证被绕过,它不像数据库那样有各种权限,xml没有各种权限的概念,正因为没有权限概念,因此利用xpath构造查询的时候整个数据库都会被用户读取。
- 绕过验证,信息泄露
-
CSRF全称为跨站请求伪造(Cross-site request forgery),是一种网络攻击方式 。 CSRF攻击原理利用网站对于用户网页浏览器的信任,
挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作
CSRF攻击原理及过程如下:
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
-
用户未退出网站A之前,在同一浏览器中,打开一个攻击者添加的诱导页面连接网站B,并诱导访问;
-
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
-
攻击防护:
-
验证HTTP Referer字段: http 请求头中有referer的字段,其表示 HTTP 请求的来源地址 。服务端只解析制定网站的referer,其余网站则不进行请求。
-
token校验: Token要求不能重复,需要含有时间戳信息、签名信息。 使用特定的算法对 请求信息加密,服务端进行解密校验请求的合法性。
参考:https://blog.csdn.net/weixin_39922749/article/details/111207965
概念: 服务端请求伪造(Server-Side Request Forgery),指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送
一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。
原理 : SSRF的实质是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。一般情况下, SSRF攻击的目标是外网无法访问的内部系统,
黑客可以利用SSRF漏洞获取内部系统的一些信息(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。