在网络中,比较常见的攻击形式主要分为四种,分别是中断、截获、修改和伪造。
中断是以可用性作为攻击目标,它毁坏系统资源,使网络不可用。
特点:简单粗暴,成本低,见效快
常见的中断攻击:DDoS攻击
DDoS意思为“分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务。
此类攻击有时称为第 7 层 DDoS 攻击(指 OSI 模型第 7 层),其目标是耗尽目标资源。
攻击目标是生成网页并传输网页响应 HTTP 请求的服务器层。在客户端执行一项 HTTP 请求的计算成本比较低,但目标服务器做出响应却可能非常昂贵,因为服务器通常必须加载多个文件并运行数据库查询才能创建网页。
第 7 层攻击很难防御,因为难以区分恶意流量和合法流量。
HTTP 洪水攻击类似于同时在大量不同计算机的 Web 浏览器中一次又一次地按下刷新 ——大量 HTTP 请求涌向服务器,导致拒绝服务。
协议攻击也称为状态耗尽攻击,这类攻击会过度消耗服务器资源和/或防火墙和负载平衡器之类的网络设备资源,从而导致服务中断。
了解Linux内核中SYN队列和Accept队列是如何工作的:
- 当服务端接收到客户端的 SYN 报文时,会将其加入到内核的「 SYN 队列」;
- 接着发送 SYN + ACK 给客户端,等待客户端回应 ACK 报文;
- 服务端接收到 ACK 报文后,从「 SYN 队列」移除放入到「 Accept 队列」;
- 应用通过调用
accpet()
socket 接口,从「 Accept 队列」取出的连接。
攻击者短时间内伪造不同IP地址的SYN报文,服务端接受到SYN报文以后,会进入SYN_RCVD状态,并且将报文加入SYN队列,并且服务器回应的SYN+ACK报文并不会得到确认。就会导致占满SYN队列,导致服务端不能正常提供服务。
防御方式:1、启用syn cookie模式
此类攻击试图通过消耗目标与较大的互联网之间的所有可用带宽来造成拥塞。攻击运用某种放大攻击或其他生成大量流量的手段(如僵尸网络请求),向目标发送大量数据。
DNS 放大就好比有人打电话给餐馆说“每道菜都订一份,请给我回电话复述整个订单”,而提供的回电号码实际上属于受害者。几乎不费吹灰之力,就能产生很长的响应并发送给受害者。
利用伪造的 IP 地址(受害者的 IP 地址)向开放式 DNS 服务器发出请求后,目标 IP 地址将收到服务器发回的响应。
创建黑洞路由,并将流量汇入该路由。在最简单的形式下,当在没有特定限制条件的情况下实施黑洞过滤时,合法网络流量和恶意网络流量都将路由到空路由或黑洞,并从网络中丢弃。
限制服务器在某个时间段接收的请求数量也是防护拒绝服务攻击的一种方法。
如果您的目的是保护 web 服务器,反向代理将防止攻击者识别您的服务器 IP 地址并将其作为目标。这样 一来,攻击者将只能以反向代理为目标,从而保护了您的服务器。
截获是以保密性作为攻击目标,非授权用户通过某种手段获得对系统资源的访问。
跨站脚本攻击。是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
反射型XXS攻击:
反射型XSS漏洞常见于通过URL传递参数的功能,如网站搜索,跳转等。由于需要用户主动打开恶意的URL才能生效,攻击者往往会结合多种手段诱导用户点击。
防御反射型XSS攻击:
- 对输入检查
对请求参数进行检查,一旦发现可疑的特殊字符就拒绝请求。需要注意的是用户可以绕过浏览器的检查,直接通过Postman等工具进行请求,所以这个检查最好前后端都做。 - 对输出进行转义再显示
通过上面的介绍可以看出,反射型XSS攻击要进行攻击的话需要在前端页面进行显示。所以在输出数据之前对潜在的威胁的字符进行编码、转义也是防御XSS攻击十分有效的措施。比如下面的方式。
存储型XXS攻击:
恶意脚本永久存储在目标服务器上。当浏览器请求数据时,脚本从服务器传回并执行。存储型XSS攻击的原因仍然是没有做好数据过滤:前端提交数据至服务器端时,没有做好过滤;服务端在按受到数据时,在存储之前,没有做过滤;前端从服务器端请求到数据,没有过滤输出。
比较常见的场景是,黑客写下一篇包含有恶意JavaScript代码的博客文章,文章发表后,所有访问该博客的用户,都会在他们的浏览器中执行这段恶意js代码。
防御手段:
1、服务器接收到数据,在存储到数据库之前,进行转义和过滤危险字符;
2、前端接收到服务器传递过来的数据,在展示到页面前,先进行转义/过滤;
DOM型XXS攻击:
DOM型XSS攻击,实际上就是前端javascript代码不够严谨,把不可信的内容插入到了页面。
防御手段:对输入(和URL参数)进行过滤,对输出进行编码
了解什么是arp?
同一个局域网内:
假设用一个局域网中主机A希望发送数据报给主机B,主机A首先检查自己维护的ARP表,看是否存在B的MAC地址。假设B的MAC地址不在A的ARP映射表中。则主机A首先广播ARP查询分组,其中包含B的IP地址。其余主机发现查询的不是本机的MAC地址时不会进行回应。只有主机B在收到ARP查询分组后返回B的MAC地址给主机A即将包含B的MAC地址的帧发送给主机A。
不同局域网内:
本质是路由器代理PC, 在不同的子网中, 必定会有一个路由器进行连接,路由器具有代理ARP的功能.
- PC1 发出寻找PC3硬件地址的 ARP 请求
- 路由器接收到 ARP请求, 根据IP发现某个子网的请求, 则返回自己的硬件地址. 若不是,则根据IP地址转发.
- PC1 接收到 “认为” 是PC3的硬件地址, 实际是路由器的硬件地址.
- PC1 开始发送数据给PC3, 但是数据链路层封装的目标硬件地址是路由器的.
- 路由器接收到数据包,发现是给自己的数据, 因此分析IP头. 发现是给PC3的, 于是重新封装该数据包, 把真正的PC3的硬件地址封装进去. 发送给PC3.
- PC3 接收到 PC1 发送的数据包.
到底什么是arp攻击?
假设有一个坏蛋连到网络中来,他可能是一个外部来的黑客,也可能是一个内鬼(电脑病毒)。他进来后开始监听网络中的 ARP 流量。由于 ARP 地址解析请求是通过广播发送的,所有参与者都可以收到,黑客也不例外。以 PC 解析网关 192.168.50.1 的 MAC 地址为例:
黑客嗅探到 ARP 请求之后,假扮成网关,伪造 ARP 应答来欺骗 PC 。PC 收到 ARP 应答后,将结果保存在 ARP 缓存中。由于缺乏校验机制,很容易上黑客的当。
一旦受害者的 ARP 缓存表被黑客做了手脚,便只能任人宰割了。以 PC 为例,去往外部网络的 IP 包,原本是通过网关来转发的,现在被劫持到黑客那去。
造成的危害:影响网络速率,窃取敏感信息
如何防御:
a) 尽量采用https访问
b) DAI策略
①保证电脑不接收欺骗包
②保证电脑收到欺骗包之后不相信
DAI(Dynamic ARP Inspection)- 动态ARP检测:
①交换机记录每个接口对应的IP地址和MAC,即port<->mac<->ip,生成DAI检测表
②交换机检测每个接口发送过来的ARP回应包,根据DAI表判断是否违规,若违规则丢弃此数据包并对接口进行惩罚。
互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址而达到无法访问目标网站的目的。
修改是以完整性作为攻击目标,非授权用户不仅获得访问而且对数据进行修改。
伪造是以完整性作为攻击目标,非授权用户将伪造的数据插入到正常传输的数据中。
跨站请求伪造。攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
XSS是利用合法用户发起请求(向网站注入js代码),而CSRF是伪造成合法用户发起请求。
如何防御:
- Referer Check(请求来源检查)
- 对敏感信息的操作增加安全的token
- 对敏感信息的操作增加安全的验证码
- 对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。
原理:
首先了解log4j的lookup机制,顾名思义就是查找、搜索的意思,那在log4j2中,就是允许在输出日志的时候,通过某种方式去查找要输出的内容。
JNDI即Java Naming and Directory Interface
(JAVA命名和目录接口),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。
有一个类似于字典的数据源,你可以通过JNDI接口,传一个name进去,就能获取到对象了。
LDAP协议
LDAP称为轻量级目录访问协议,既是一种服务,也是一种协议,是JNDI的一种底层实现,主要功能是提供命名关键字到对象的映射目录,开发人员可以通过输入名称,获取到对象的内容。
有一个类似于字典的数据源,你可以通过LDAP协议,传一个name进去,就能获取到数据。
RMI协议
JAVA的一种远程接口调用协议,在TCP协议上传递可序列化的Java对象,即可以实现调用远程方法和调用本地方法一样简单。
整个攻击链路:攻击者在漏洞点注入表达式---->然后log4j2支持lookup()方法---->log4j2支持JNDI---->ldap/rmi 远程加载攻击者服务器上的class文件构建对象(LDAP/RMI中有个命名引用功能)---->寻找本地的恶意代码并执行。