计网-网络攻击

文章目录

网络攻击分类

植入有害程序

通过在软件中植入有害程序来入侵我们的计算机,它们被统称为 僵尸网络(botnet),这些攻击者会利用僵尸网络控制并有效的对目标主机开展垃圾邮件分发分布式拒绝服务攻击

大多数有害程序都具有自我复制(self-replicating)的功能,传播性非常强,一旦它感染了一台主机,就会从这台感染的主机上寻找进入因特网的其他主机,从而感染新的主机。

有害应用程序主要分为两种:

  • 病毒是一种需要某种形式的用户交互来感染用户的计算机,比如包含了病毒的电子邮件附件。如果用户接收并打开感染病毒的电子邮件的话,就会以某种方式破坏你的计算机;
  • 而蠕虫是一种不需要用户交互就能进入计算机的恶意软件,比如你运行了一个攻击者想要攻击的应用程序,某些情况下不需要用户干预,应用程序就可能通过互联网接收恶意软件并运行,从而生成蠕虫,然后再进行扩散。

拒绝服务攻击(Denial-of-Service Dos)

另一种影响较大的网络攻击称为拒绝服务攻击(Denial-of-Service Dos),这种网络攻击使得网络、主机、服务器、基础网络设施不能常规使用。Web 服务器、电子邮件服务器、DNS 服务器都能成为 Dos 的攻击目标。大多数因特网 Dos 攻击分为以下三类

  • 弱点攻击。这涉及向一台目标主机上运行的易受攻击的应用程序或操作系统发送制作精细的报文,如果适当顺序的多个分组发送给一个易受攻击的应用程序或操作系统,该服务器可能停止运行。
  • 带宽洪泛。攻击者通过网络向主机或服务器发送大量的分组,分组数量太多使得目标接入链路变得拥塞,使得合法分组无法到达服务器。
  • 连接洪泛。和上面的带宽洪范攻击性质相似,因为 TCP 连接数量太多导致有效的 TCP 连接无法到达服务器。

嗅探分组

今天许多用户通过无线设备接入因特网。例如 WiFi 连接的计算机或者使用蜂窝因特网连接的手持设备。在带来便利的同时也会成为易受攻击的目标。在无线传输设备的附近放置一台被动的接收机,该接收机就能够得到传输的每个分组的副本!这些分组中包含了各种敏感信息,例如口令、密码等,记录每个流经分组副本的接收机被称为分组嗅探器(packet sniffer)。分组嗅探也能够应用于有线环境中,可以用 Wireshark 实验来进行模拟

IP 伪装

生成具有任意源地址、分组内容和目的地址的分组,然后将这个分组传输到互联网中。这种将虚假源地址的分组注入因特网的能力被称为 IP 哄骗(IP spoofing)。为了解决这个问题,我们需要采用 端点鉴别,它是一种使我们能够确信真正源目的地的机制。我们后面会再探讨这些机制。

以下是具体的攻击方式

什么是RST攻击?

RST 攻击也称为伪造 TCP 重置报文攻击,通过伪造 RST 报文来关闭掉一个正常的连接。
源 IP 地址伪造非常容易,不容易被伪造的是序列号,RST 攻击最重要的一点就是构造的包的序列号要落在对方的滑动窗口内,否则这个 RST 包会被忽略掉,达不到攻击的效果。

ARP 攻击

ARP 是一种非常不安全的协议
ARP 主要攻击方式分为下面这几种:

  • ARP 泛洪攻击:通过向网关发送大量 ARP 报文,导致网关无法正常响应。首先发送大量的 ARP 请求报文,然后又发送大量虚假的 ARP 响应报文,从而造成网关部分的 CPU 利用率上升难以响应正常服务请求,而且网关还会被错误的 ARP 缓存表充满导致无法更新维护正常 ARP 缓存表,消耗网络带宽资源。
  • ARP 欺骗主机攻击:很常见的一种。攻击者通过 ARP 欺骗使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。主机刷新自己的 ARP 使得在自己的ARP 缓存表中对应的 MAC 为攻击者的 MAC,这样一来其他用户要通过网关发送出去的数据流就会发往主机这里,这样就会造成用户的数据外泄。
  • 欺骗网关的攻击: 欺骗网关就是把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户韵数据.造成数据的泄露,同时用户电脑中病毒的概率也会提升。
  • 中间人攻击: 中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。
  • IP地址冲突攻击: 通过对局域网中的物理主机进行扫描,扫描出局域网中的物理主机的 MAC 地址,然后根据物理主机的 MAC 进行攻击,导致局域网内的主机产生 IP 地址冲突,影响用户的网络正常使用。

HTTP劫持和DNS劫持

HTTP劫持
1)目的: 以弹窗的形式,在客户端展示宣传性广告或者直接显示某网站的内容。
2)原理: 在客户端与目的服务器所建立的专门的数据传输通道中,监视特定数据信息,如果满足条件,就会插入精心设计的网络数据,目的是让客户端程序解释“错误”的数据,进而展示宣传性内容。
3)性质:属于“网络安全和数据加密”方面的内容。
4)核心:对HTTP通讯协议的利用。

DNS攻击?

域名劫持
域名被劫持后该怎么做?
1、立即修改域名服务商和邮箱密码,使用复杂度高的密码且经常更换;
2、删除不属于你的DNS解析,恢复DNS设置;
3、关闭域名的泛解析,进入域名管理后台就可以点击我们的域名找到带*号的域名解析,删除掉就可以了;
4、如果使用的是第三方DNS服务,应立即修改第三方DNS服务端帐户密码,锁定帐户信息,开启帐户短信邮箱类提醒;
5、看网站整体代码是否被篡改。这是解决域名劫持问题之后对自己的网站进行全面排查,从而做到完美的清除垃圾页面,保证网站的安全性;
6、收集全部被非法添加的页面并设置404,使用百度站长平台工具提交死链。因为那些网站的死链就是我们的垃圾页面,所以我们要把这些死链都解决。我们在页面举报内容处写上网站被恶意攻击就可以了;
7、如果该服务商下域名经常出现被劫持事件,可考虑更换更安全稳定的服务商。有能力的网站可自建DNS服务自主运营。

如何预防域名劫持?
  1、为域名注册商和注册用邮箱设置复杂密码且经常更换。使用单独的DNS服务,也需要对密码进行上述设置。同时注意不要在多个重要注册地使用相同的用户名和密码;
  2、将域名更新设置为锁定状态,不允许通过DNS服务商网站修改记录,使用此方法后,需要做域名解析都要通过服务商来完成,时效性较差;
  3、定期检查域名帐户信息、域名whois信息,査看事件管理器,清理Web网点中存在的可疑文件。每天site网站检查是否有预期外网页。详细检查网站索引和外链信息,有异常一定要检查清楚;
  4、加强网站的防SQL注入功能,SQL注入是利用SQL语句的特点向数据库写内容,从而获取到权限的方法;
  5、配置Web站点文件夹及文件操作权限。Windows网络操作系统中,使用超级管理员权限, 对Web站点文件及文件夹配置权限,多数设置为读权限,谨慎使用写权限,如果无法获取超级管理员权限,这样木马程序便无法生根,网站域名被劫持的可能便可以降低很多;
  6、利用事务签名对区域传送和区域更新进行数字签名;
  7、删除运行在DNS服务器上的不必要服务,如FTP;
  8、在网络外围和DNS服务器上使用防火墙服务。将访问限制在那些DNS功能需要的端口/服务上。

缓存投毒
利用控制DNS缓存服务器,把原本准备访问某网站的用户在不知不觉中带到黑客指向的其他网站上。其实现方式有多种,比如可以通过利用网民ISP端的DNS缓存服务器的漏洞进行攻击或控制,从而改变该ISP内的用户访问域名的响应结果;或者,黑客通过利用用户权威域名服务器上的漏洞,如当用户权威域名服务器同时可以被当作缓存服务器使用,黑客可以实现缓存投毒,将错误的域名纪录存入缓存中,从而使所有使用该缓存服务器的用户得到错误的DNS解析结果。

DDoS
某攻击者能够试图向每个DNS根服务器发送大量的分组,使得大多数合法DNS请求得不到回答。
对DNS根服务器的DDoS危害很小,对*域名服务器的DDoS危害稍大,但是至今为止,还没有一个攻击已经成功地妨碍了 DNS服务.

SYN 攻击

SYN攻击利用TCP协议三次握手的原理,大量发送伪造源IP的SYN包也就是伪造第一次握手数据包,服务器每接收到一个SYN包就会为这个连接信息分配核心内存并放入半连接队列,如果短时间内接收到的SYN太多,半连接队列就会溢出,操作系统会把这个连接信息丢弃造成不能连接,当攻击的SYN包超过半连接队列的最大值时,正常的客户发送SYN数据包请求连接就会被服务器丢弃。目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

计网-网络攻击
正常流程:
计网-网络攻击
当服务端接收到客户端的 SYN 报文时,会将其加入到内核的「 SYN 队列」;

接着发送 SYN + ACK 给客户端,等待客户端回应 ACK 报文;

服务端接收到 ACK 报文后,从「 SYN 队列」移入到「 Accept 队列」;

应用通过调用 accpet() socket 接口,从「 Accept 队列」取出连接。

受到 SYN 攻击:
SYN攻击属于DoS攻击(Denial of Service 拒绝服务)的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。
如果不断受到 SYN 攻击,就会导致「 SYN 队列」里的连接无法移入Accept队列,SYN队列会被占满。
计网-网络攻击
检测SYN攻击
检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击

netstat -n -p TCP | grep SYN_RECV

如何防范?
关于SYN攻击防范技术.归纳起来,主要有两大类,一类是通过防火墙、路由器等过滤网关防护,另一类是通过加固TCP/IP协议栈防范.但必须清楚的是,SYN攻击不能完全被阻止,我们所做的是尽可能的减轻SYN攻击的危害,除非将TCP协议重新设计。

1、过滤网关防护
这里,过滤网关主要指防火墙,当然路由器也能成为过滤网关。防火墙部署在不同网络之间,防范外来非法攻击和防止保密信息外泄,它处于客户端和服务器之间,利用它来防护SYN攻击能起到很好的效果。过滤网关防护主要包括超时设置,SYN网关和SYN代理三种。

  • 网关超时设置:超时向服务器发RST包
    防火墙设置SYN转发超时参数(第二次握手后的等待时间),该参数远小于服务器的timeout时间。当客户端发送完SYN包,服务端发送确认包后(SYN+ACK),过滤网关如果在计数器到期时还未收到客户端的确认包(ACK),则往服务器发送RST包,以使服务器从SYN队列中删去该半连接。
    值得注意的是,网关超时参数设置不宜过小也不宜过大,超时参数设置过小会影响正常的通讯(客户端发来的正常的连接只是慢了一点而已,也被你干掉了),设置太大,又会影响防范SYN攻击的效果(半天不清理,SYN队列都装满了),必须根据所处的网络应用环境来设置此参数。

  • SYN网关:以客户端的名义给服务器发ACK确认包
    SYN网关收到客户端的SYN包时,直接转发给服务器;SYN网关收到服务器的SYN/ACK包后,将该包转发给客户端,同时以客户端的名义给服务器发ACK确认包。此时服务器由半连接状态进入连接状态。当客户端确认包到达时,如果有数据则转发,否则丢弃。事实上,一般服务器所能承受的连接数量比半连接数量大得多,即Accept队列容量比SYN队列大得多,所以这种方法能有效地减轻对服务器的攻击。

  • SYN代理:以服务器的名义主动回复SYN/ACK包给客户端
    当客户端SYN包到达过滤网关时,SYN代理(过滤网关)并不转发SYN包,而是以服务器的名义主动回复SYN/ACK包给客户,如果收到客户的ACK包,表明这是正常的访问,此时防火墙向服务器发送ACK包并完成三次握手。SYN代理事实上代替了服务器去处理SYN攻击,此时要求过滤网关自身具有很强的防范SYN攻击能力。

2、加固tcp/ip协议栈
防范SYN攻击的另一项主要技术是调整tcp/ip协议栈,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等。tcp/ip协议栈的调整可能会引起某些功能的受限,管理员应该在进行充分了解和测试的前提下进行此项工作。

  • SynAttackProtect机制

为防范SYN攻击,win2000系统的tcp/ip协议栈内嵌了SynAttackProtect机制,Win2003系统也采用此机制。SynAttackProtect机制是通过关闭某些socket选项,增加额外的连接指示和减少超时时间,使系统能处理更多的SYN连接,以达到防范SYN攻击的目的。
当SynAttackProtect值(如无特别说明,本文提到的注册表键值都为十六进制)为0或不设置时,系统不受SynAttackProtect保护。
当SynAttackProtect值为1时,系统通过减少重传次数和延迟未连接时路由缓冲项(route cache entry)防范SYN攻击。
当SynAttackProtect值为2时(Microsoft推荐使用此值),系统不仅使用backlog队列,还使用附加的半连接指示,以此来处理更多的SYN连接,使用此键值时,tcp/ip的TCPInitialRTT、window size和可滑动窗囗将被禁止。
我们应该知道,平时,系统是不启用SynAttackProtect机制的,仅在检测到SYN攻击时,才启用,并调整tcp/ip协议栈。
那么系统是如何检测SYN攻击发生的呢?
事实上,系统根据TcpMaxHalfOpen,TcpMaxHalfOpenRetried 和TcpMaxPortsExhausted三个参数判断是否遭受SYN攻击。

  • TcpMaxHalfOpen 表示能同时处理的最大半连接数,如果超过此值,系统认为正处于SYN攻击中。

  • TcpMaxHalfOpenRetried定义了保存在backlog队列且重传过的半连接数,如果超过此值,系统自动启动SynAttackProtect机制。Win2000 server默认值为80,Win2000 Advanced server为400。

  • SYN cookies技术
    SYN cookies技术中,当半连接队列满时,SYNcookies并不丢弃SYN请求,而是通过加密技术来标识半连接状态。

在SYN cookies中,服务器的初始序列号是通过对客户端IP地址、客户端端囗、服务器IP地址和服务器端囗以及其他一些安全数值等要素进行hash运算,加密得到的,称之为cookie
计网-网络攻击
当服务器遭受SYN攻击使得backlog队列满时 ,服务器并不拒绝新的SYN请求,而是回复cookie给客户端, 如果收到客户端的ACK包,服务器将客户端的ACK序列号减去1得到cookie比较值,并将上述要素进行一次hash运算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此时并不用查看此连接是否属于backlog队列)。不相等则丢弃。

  • 增加最大半连接数
    大量的SYN请求导致未连接队列被塞满,使正常的TCP连接无法顺利完成三次握手,通过增大未连接队列空间可以缓解这种压力。当然backlog队列需要占用大量的内存资源,不能被无限的扩大。

  • 缩短超时时间
    上文提到,通过增大backlog队列能防范SYN攻击;另外减少超时时间也使系统能处理更多的SYN请求。我们知道,timeout超时时间,也即半连接存活时间,是系统所有重传次数等待的超时时间总和,这个值越大,半连接数占用backlog队列的时间就越长,系统能处理的SYN请求就越少。为缩短超时时间,可以通过缩短重传超时时间(一般是第一次重传超时时间)和减少重传次数来实现。

CSRF

Cross-site request forgery 跨站请求伪造

CSRF的攻击原理

计网-网络攻击
从上图可以看出,要完成一次CSRF攻击,受害者必须满足两个必要的条件:

  • 登录受信任网站A,并在本地生成Cookie。(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站A的api接口时,会提示你登录)
  • 在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)。

如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击?
是的,确实如此,但你不能保证以下情况不会发生:
1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了…)
3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

CSRF如何防御

方法一、Token 验证:(用的最多)

(1)服务器发送给客户端一个token;

(2)客户端提交的表单中带着这个token。

(3)如果这个 token 不合法,那么服务器拒绝这个请求。

方法二:隐藏令牌:

把 token 隐藏在 http 的 head头中。

方法二和方法一有点像,本质上没有太大区别,只是使用方式上有区别。

方法三、Referer 验证:

Referer 指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截。
未完待续

XSS

XSS : Cross Site Scripting 跨站脚本攻击。
XSS的重点不在于跨站点,而在于脚本的执行。

XSS的原理是:
恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。

XSS攻击分类:
反射型、存储型、及 DOM-based型。
反射性和DOM-baseed型可以归类为非持久性XSS攻击。
存储型可以归类为持久性XSS攻击。

反射型XSS

反射性XSS的原理是:
反射性xss一般指攻击者通过特定的方式来诱惑受害者去访问一个包含恶意代码的URL。当受害者点击恶意链接url的时候,恶意代码会直接在受害者的主机上的浏览器执行。

为什么叫反射型XSS呢?
那是因为这种攻击方式的注入代码是从目标服务器通过错误信息,搜索结果等方式反射回来的,
为什么又叫非持久性XSS呢?
那是因为这种攻击方式只有一次性。

反射型XSS的攻击步骤如下:

  1. 攻击者在url后面的参数中加入恶意攻击代码。
  2. 当用户打开带有恶意代码的URL的时候,网站服务端将恶意代码从URL中取出,拼接在html中并且返回给浏览器端。
  3. 用户浏览器接收到响应后执行解析,其中的恶意代码也会被执行到。
  4. 攻击者通过恶意代码来窃取到用户数据并发送到攻击者的网站。攻击者会获取到比如cookie等信息,然后使用该信息来冒充合法用户
    的行为,调用目标网站接口执行攻击等操作。

举例:
攻击者通过电子邮件等方式将包含注入脚本的恶意链接发送给受害者,当受害者点击该链接的时候,注入脚本被传输到目标服务器上,然后服务器将注入脚本 "反射"到受害者的浏览器上,从而浏览器就执行了该脚本。

存储型XSS

存储型XSS的原理是:
主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。

比如我现在做了一个博客网站,然后攻击者在上面发布了一篇文章, 如果我没有对该文章进行任何处理的话,直接存入到数据库中,那么下一次当其他用户访问该文章的时候,服务器会从数据库中读取后然后响应给客户端,那么浏览器就会执行这段脚本,然后攻击者就会获取到用户的cookie,然后会把cookie发送到攻击者的服务器上了。

因此存储型XSS的攻击步骤如下:

  1. 攻击者将恶意代码提交到目标网站数据库中。
  2. 用户打开目标网站时,网站服务器将恶意代码从数据库中取出,然后拼接到html中返回给浏览器中。
  3. 用户浏览器接收到响应后解析执行,那么其中的恶意代码也会被执行。
  4. 那么恶意代码执行后,就能获取到用户数据,比如上面的cookie等信息,那么把该cookie发送到攻击者网站中,那么攻击者拿到该
    cookie然后会冒充该用户的行为,调用目标网站接口等违法操作。

如何防范?

  1. 后端需要对提交的数据进行过滤。
  2. 前端也可以做一下处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。

DOM-based型XSS

我们客户端的js可以对页面dom节点进行动态的操作,比如插入、修改页面的内容。比如说客户端从URL中提取数据并且在本地执行、如果用户在客户端输入的数据包含了恶意的js脚本的话,但是这些脚本又没有做任何过滤处理的话,那么我们的应用程序就有可能受到DOM-based XSS的攻击。因此DOM型XSS的攻击步骤如下:

  1. 攻击者构造出特殊的URL、在其中可能包含恶意代码。
  2. 用户打开带有恶意代码的URL。
  3. 用户浏览器收到响应后解析执行。前端使用js取出url中的恶意代码并执行。
  4. 执行时,恶意代码窃取用户数据并发送到攻击者的网站中,那么攻击者网站拿到这些数据去冒充用户的行为操作。调用目标网站接口
    执行攻击者一些操作。
    未完待续
上一篇:TCP协议中的三次握手和四次挥手


下一篇:部分地区无法访问网站