网络攻击

Dos/DDos (Dos与DDoS区别就是DDos 是它的增强版,是分布式的攻击,难于追踪和限制)

攻击原理
  利用合理的服务请求占用过多的服务资源,从而使合法用户无法得到服务响应的网络攻击行为,dds --> 拒绝服务攻击。
种类
  攻击包含 SYN Flood、ACK Flood、UDP Flood、HTTP Flood、CC攻击等多种类型的攻击。
特点
  使攻击方式出现了没有规律的情况,而且在进行攻击时,通常使用的也是常见的协议和服务,这样只是从协议和服务的类型上是很难对攻击进行区分。进行攻击时,
  数据包都经过伪装,源 IP 地址也是伪造的,致使很难对攻击进行地址确定,查找起来极其困难。
现象
  流量的突然增大,监控显示大量的YN_RECEIVED、TIME_WAIT、FIN_WAIT_1

排查定位:
  查看负载后端对应的服务器
  登录后端服务器,查看是那个进程占用流量最高(iftop -n)
  登录后端服务器,查看当前连接情况(netstat -na)
  如果发现有大量的SYN_RECEIVED、TIME_WAIT、FIN_WAIT_1等状态存在,而ESTABLISHED很少,则可判定肯定是遭受了资源耗尽DDoS
    分析常规访问日志,查看访问量最高的十个ip和次数(用awk sed等)
  如果没有日志,尝试抓包,看一下访问http的请求内容 tcpdump -s 0 -A ‘tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420’,或者从网络设备查看一下访问排名。
解决方案
  将对应的ip/网段根据防火墙限制掉
防御监控
  流量/tcp 状态


暴力破解密码

 

原理
暴力破解攻击是指攻击者通过系统地组合所有可能性(例如登录时用到的账户名、密码),尝试所有的可能性破解用户的账户名、密码等敏感信息。攻击者会经常使用自动化脚本组合出正确的用户名和密码。
现象
在web(应用程序)日志上,你会经常发现有很多的登录失败条目,而且这些条目的IP地址通常还是同个IP地址。有时你又会发现不同的IP地址会使用同一个账户、不同的密码进行登录。
大量的暴力破解请求会导致服务器日志中出现大量异常记录,从中你会发现一些奇怪的进站前链接(referring urls),比如:http://user:password@website.com/login.html。
解决措施
防火墙对ip 限制
更改为复杂的更高的密码
防御监控
日志收集,监控

木马病毒和恶意软件

原理:
现象:
服务器数据丢失,无法提供服务
入侵方式:邮件、login 后门
解决方案
重做系统,关闭后门
防御监控
关闭各种后门,对一些服务软件进行安全优化例如tomcat

 

sql 注入

 

原理
SQL 注入漏洞存在的原因,就是拼接 SQL 参数,也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致了SQL 注入漏洞。例如一个web 查询系统,页面需要输入
查询条件:name ,后台把name 值作为参数执行sql 语句 select * from tab1 where name='页面输入name值',但是如果不按套路输入参数,输入的是kobe;drop table tb2,
后台程序就会执行语句:select * from tab1 where name='kobe';drop table tb2; 删除了表tb2 ,这就是sql 注入。
sql 注入的原因
sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量。
但是更深层次的原因是,将用户输入的字符串,当成了 “sql语句” 来执行。
比如上面的 String sql = "select id,no from user where id=" + id;
我们希望用户输入的 id 的值,仅仅作为一个字符串字面值,传入数据库执行,但是当输入了: 2 or 1=1 时,其中的 or 1=1 并没有作为 where id= 的字面值,而是作为了 sql语句 来执行的。所以其本质是将用户的输入的数据,作为了命令来执行。

sql注入的防御
采用sql语句预编译和绑定变量,是防御sql注入的最佳方法(实际项目都采用各种框架,比如python的orm ,ibatis, hibernate,mybatis等。他们一般也默认就是sql预编译的。对于ibatis/mybatis,如果使用的是 #{name}形式的,那么就是sql预编译,使用 ${name} 就不是sql预编译的。)
其原因就是:采用了PreparedStatement,就会将sql语句:"select id, no from user where id=?" 预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,
生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的 语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,
比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行, 必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数。所以sql语句预编译可以防御sql注入。
注:
不是所有场景都能够采用 sql语句预编译,有一些场景必须的采用 字符串拼接的方式,此时,我们严格检查参数的数据类型,还有可以使用一些安全函数,来方式sql注入。
比如 String sql = "select id,no from user where id=" + id;
在接收到用户输入的参数时,我们就严格检查 id,只能是int型。复杂情况可以使用正则表达式来判断。这样也是可以防止sql注入的。
安全函数的使用

 

DNS高速缓存污染

概览:由于DNS服务器与其他名称服务器交换信息的时候并不进行身份验证,这就使得黑客可以将不正确的信息掺进来并把用户引向黑客自己的主机。
防御:在防火墙上过滤入站的DNS更新,外部DNS服务器不应能更改你的内部服务器对内部机器的认识。

posted @ 2019-08-08 12:15  fanggege  阅读(596)  评论(0编辑  收藏  举报