网络安全
前言
- 人们常说21世纪是网络极其发达的时代,网络应用已经渗透到现代社会生活的各个方面,所以网络安全就显得由为重要。
安全的分类
- 安全隐患主要包括但不限于以下这些:
- Web安全
- 网络安全
- 无线安全
- 数据安全
- 终端安全
- 系统安全
- 企业安全
本章主要介绍网络安全
什么是网络攻击
-
要懂得如何防范网络攻击,首先我们要先知道什么是网络攻击
-
网络攻击(Cyber Attacks,也称赛博攻击)是指针对计算机信息系统、基础设施、计算机网络或个人计算机设备的,任何类型的进攻动作。对于计算机和计算机网络来说,破坏、揭露、修改、使软件或服务失去功能、在没有得到授权的情况下偷取或访问任何一计算机的数据,都会被视为于计算机和计算机网络中的攻击。
----来源百度
-
常见的网络攻击以及防范措施
SQL注入
-
SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
-
SQL注入漏洞可能会影响使用SQL数据库(如MySQL,Oracle,SQL Server或其他)的任何网站或Web应用程序。犯罪分子可能会利用它来未经授权访问用户的敏感数据:客户信息,个人数据,商业机密,知识产权等。SQL注入攻击是最古老,最流行,最危险的Web应用程序漏洞之一。
-
SQL注入攻击的分类
- 带内注入
这是典型的攻击,攻击者可以通过相同的通信通道发起攻击并获得结果。这是通过两种带内技术完成的:
基于错误的SQL注入:从显示的错误消息中获取有关数据库的信息
基于联合的SQL注入:依赖于攻击者能够将UNION ALL被盗信息的结果与合法结果连接起来。
- 这两种技术都依赖于攻击者修改应用程序发送的SQL,以及浏览器中显示的错误和返回的信息。如果应用程序开发人员或数据库开发人员无法正确地参数化他们在查询中使用的值,那么它会成功。两者都是试错法,可以检测到错误。
- 盲注入
也称为推理SQL注入,盲注入攻击不会直接从目标数据库中显示数据;相反,攻击者会仔细检查行为中的间接线索。HTTP响应中的详细信息,某些用户输入的空白网页以及数据库响应某些用户输入需要多长时间,这些都可以是线索,具体取决于攻击者的目标。他们还可以指向攻击者尝试的另一个SQL攻击途径。
- 带外注入
这种攻击有点复杂,当攻击者无法在单个直接查询 - 响应攻击中实现其目标时,攻击者可能会使用此攻击。通常,攻击者会制作SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。
二阶注入就是一种带外注入攻击。在这种情况下,攻击者将提供SQL注入,该注入将由数据库系统的单独行为存储和执行。当二级系统行为发生时(它可能类似于基于时间的作业或由其他典型管理员或用户使用数据库触发的某些事情)并且执行攻击者的SQL注入,那就是当“伸出”到系统时攻击者控制发生了。
-
如何防范SQL注入攻击
- 不要使用动态SQL
避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。
- 不要将敏感数据保留在纯文本中
加密存储在数据库中的私有/机密数据;这样可以提供了另一级保护,以防攻击者成功地排出敏感数据。
- 限制数据库权限和特权
将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。
- 避免直接向用户显示数据库错误
攻击者可以使用这些错误消息来获取有关数据库的信息。
- 对访问数据库的Web应用程序使用Web应用程序防火墙(WAF)
这为面向Web的应用程序提供了保护,它可以帮助识别SQL注入尝试;根据设置,它还可以帮助防止SQL注入尝试到达应用程序(以及数据库)。
- 定期测试与数据库交互的Web应用程序
这样做可以帮助捕获可能允许SQL注入的新错误或回归。
- 将数据库更新为最新的可用修补程序
这可以防止攻击者利用旧版本中存在的已知弱点/错误。
XSS攻击
-
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
-
XSS攻击的分类
- 反射型XSS
攻击者会通过各种方式发送包含XSS代码的链接,然后用户打开链接并输入其内容之后,服务端会返回包含XSS代码的恶意脚本,并触发。
- 存储型XSS
将XSS内容存入数据库中,只要有人访问这个网页就会触发XSS代码,多用于论坛,留言板等需要长段内容输入的地方
- DOM型XSS
实际上也属于反射型XSS,使用dom对象去处理XSS代码,攻击者将专门设计过的url发送给用户,用户打开链接,浏览器就相应其中的XSS代码,多出现在数据初始化阶段
-
如何防范XSS攻击
- 过滤输入的数据,包括各种危险符号
- 对输出的页面的数据进行相应的编码转换
CSRF攻击
-
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
-
攻击者编写非法链接,放入网站A,目标用户在访问网站A的时候,已经登录自动带上cookie,这个时候去访问攻击者写的非法链接,就能够直接使用目标用户的cookie来做一些事情
-
尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。
-
与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
-
如何防范CSRF攻击
- 验证请求的referer值
- 登录后随机产生一个token,请求的时候带上token
网页木马
-
网页木马就是表面上伪装成普通的网页文件或是将恶意的代码直接插入到正常的网页文件中,当有人访问时,网页木马就会利用对方系统或者浏览器的漏洞自动将配置好的木马的服务端下载到访问者的电脑上来自动执行。
-
如何防范网页木马
- 安装杀毒软件和配置防火墙
- 安装补丁,卸载ActiveXObject(IE插件)
- 设置较高的安全级别(有些网马只要调高IE的安全级别,或者禁用脚本,该网页木马就不起作用了。)
文件包含漏洞攻击
- 什么是文件包含
- 文件包含就是为了将写好的代码功能更好的重复使用,用文件包含函数,将写好的功能代码直接引入到另一个代码页中,这样另一个代码页就不需要在写一遍重复的功能性代码。
- 什么是动态包含
- 在使用文件包含的时候,为了更灵活的包含文件,将文件包含的名字处设置为变量,而这个变量是通过GET方式来获取的值,这样既可通过前端所输入的文件名进行包含对应的文件。
- 远程与本地包含的区别
- 本地文件包含就是通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤允许遍历目录的字符注入浏览器并执行。
- 远程文件包含就是允许攻击者包含一个远程的文件,一般是在远程服务器上预先设置好的脚本。 此漏洞是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露、拒绝服务攻击 甚至在目标服务器上执行代码。
- 本地文件包含与远程文件有着相同的原理,但前者只能包含服务器上存在的文件,而后者可以包含远程服务器上的文件。
- 文件包含漏洞原理
- 如动态包含所说,如果为了方便,采取动态包含的方式,那么恶意用户就有可能通过将值改变为恶意的文件,这样就会让后端执行恶意的文件。
- 若恶意用户构造文件名为本地的敏感信息,而后端并没有对敏感信息限制读取权限限制,则可能造成文件包含漏洞,导致任意文件读取。
- 若恶意用户构造文件名为远程的文件包含,那么这个被包含的文件为hack构造的恶意代码,而后端没有对这个代码进行检测,则可能造成恶意代码执行。
- 如何防范文件包含漏洞
- 关闭远程文件包含的配置选项allow_url_include = Off
- 无需情况下设置allow_url_include和allow_url_fopen为关闭,对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录,如open_basedir
- 尽量不使用动态包含
- 严格检查变量是否已经初始化。
- 建议假定所有输入都是可疑的,尝试对所有输入提交可能可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现…/之类的目录跳转符。
- 严格检查include类的文件包含函数中的参数是否外界可控。
- 不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
- 在发布应用程序之前测试所有已知的威胁。
目录遍历攻击
-
路径遍历攻击(也称为目录遍历)是指在访问储存在web根目录文件夹之外的文件和目录。通过操纵带有“点-斜线(…)”序列及其变化的文件或使用绝对文件路径来引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置和关键系统文件。需要注意的是,系统操作访问控制(如在微软windows操作系统上锁定或使用文件)限制了对文件的访问权限。这种攻击也称为 “点-点斜线”、“目录遍历”、“目录爬升”和“回溯”。
-
一些绕过的方式
- 加密参数传递的数据
有的网站程序传递参数后会进行base64加密(当然也会有其他加密),导致我们传递的参数无法解析,所以就无法利用目录遍历,而绕过方式也很简单,就是先对参数进行base64加密后再进行传参。如:
?page=bTByZS50eHQ=
- 编码绕过
进行传参时将参数进行编码,实现绕过,比如URL编码。?page=%6D%30%72%65%2E%74%78%74
- 目录限定绕过
有些Web应用程序是通过限定目录权限来分离的。可以使用一些特殊的符号
~
来绕过。比如提交这样的xxx.php?page=~/../boot
。就可以直接跳转到硬盘目录下。- 绕过文件后缀过滤
一些Web应用程序在读取文件前,会对提交的文件后缀进行检测,攻击者可以在文件名后放一个空字节的编码,来绕过这样的文件类型的检查。
比如:../../../../boot.ini%00.jpg
,Web应用程序使用的Api会允许字符串中包含空字符,当实际获取文件名时,则由系统的Api会直接截短,而解析为../../../../boot.ini
。
在类Unix的系统中也可以使用Url编码的换行符,例如:../../../etc/passwd%0a.jpg
如果文件系统在获取含有换行符的文件名,会截短为文件名。也可以尝试%20,例如:../../../index.php%20
- 绕过来路验证
Http Referer : HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的
在一些Web应用程序中,会有对提交参数的来路进行判断的方法,而绕过的方法可以尝试通过在网站留言或者交互的地方提交Url再点击或者直接修改Http Referer即可,这主要是原因Http Referer是由客户端浏览器发送的,服务器是无法控制的,而将此变量当作一个值得信任源是错误的。 -
防御
- 可以对提交的参数进行多次编码或者多种加密。上面的几种绕过方式进行组合使用。
CC攻击
-
攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(Challenge Collapsar)。
-
CC主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库压力就越大,被访问的频率也越高,占用的系统资源也就相当可观。
-
CC攻击的原理
CC(ChallengeCollapsar,挑战黑洞)攻击是DDoS攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求。CC根据其工具命名,攻击者使用代理机制,利用众多广泛可用的免费代理服务器发动DDoS攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。
CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。
- 如何防范CC攻击
CC攻击可以归为DDoS攻击的一种。他们之间的原理都是一样的,即发送大量的请求数据来导致服务器拒绝服务,是一种连接攻击。CC攻击又可分为代理CC攻击,和肉鸡CC攻击。代理CC攻击是黑客借助代理服务器生成指向受害主机的合法网页请求,实现DDoS,和伪装就叫:cc(Challenge Collapsar)。而肉鸡CC攻击是黑客使用CC攻击软件,控制大量肉鸡,发动攻击,相比来后者比前者更难防御。因为肉鸡可以模拟正常用户访问网站的请求。伪造成合法数据包。
一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛之类的动态网站就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的体积有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
CC攻击就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面,比如asp/php/jsp/cgi)。很多朋友问到,为什么要使用代理呢?因为代理可以有效地隐藏自己的身份,也可以绕开所有的防火墙,因为基本上所有的防火墙都会检测并发的TCP/IP连接数目,超过一定数目一定频率就会被认为是Connection-Flood。当然也可以使用肉鸡发动CC攻击。肉鸡的CC攻击效果更可观。致使服务器CPU100%,甚至死机的现象。
使用代理攻击还能很好的保持连接,这里发送了数据,代理转发给对方服务器,就可以马上断开,代理还会继续保持着和对方连接(我知道的记录是有人利用2000个代理产生了35万并发连接)。
当然,CC也可以利用这里方法对FTP、游戏端口、聊天房间等进行攻击,也可以实现TCP-FLOOD,这些都是经过测试有效的。
DOS攻击
-
DOS攻击 是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。
-
DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。
-
这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。
-
要理解dos攻击,首先要理解TCP连接的三次握手过程(Three-wayhandshake)。在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
TCP:是一个可靠的连接,也就是客户端和服务器双方必须感知对方的存在,也就是需要经历一个建立连接的过程
用三次握手建立TCP连接,连接有三个阶段
- 建立连接
- 数据传输
- 连接释放
连接的管理就是使连接的建立和释放都能正常地进行,连接阶段过程中要解决以下三个问题
- 要使每一方都能确知对方的存在
- 要允许双方协商一些参数
- 能够对运输实体分配资源
TCP连接建立过程
TCP建立连接的过程:被称为握手
① 握手过程其实是发送的TCP报文,在这里面有两个字段,SYN 和 seq
- SYN = 1:表示该报文不能携带数据,但是需要消耗一个SEQ(序号),可以想象成我们对消息编号
- seq:TCP的每个字节发送的时候,都有一个序号,主要是为了保证可靠性,比如当我服务器通过TCP报文得到了有N个字节需要接受,但是最后只接受到了N-1个,我们通过序号就知道哪个没有被接收到。
- 客户端进入SYN_SENT状态,即同步已发送
② 当服务器接受到我们的握手请求时,会回复一个确认报文
- SYN:表示不携带数据,同时消耗一个SEQ = y(这里的y是任意数字,可以是1,2,3,4)
- ACK:=1 表示这是一条确定报文
- ack:x+1,其中x是刚刚客户端发送过来的
- 服务器进入SYN_RECVD状态,即同步已收到
③ 当客户端收到确认报文的时候,客户端需要对这个确认报文进行回复
- ACK:=1,表示这是一条确认报文
- seq:= x +1,
- ack:= y+1
经过了这三次握手,两者就进入了连接状态
在上述过程中,还有一些重要的概念:
-
半连接:收到SYN包而还未收到ACK包时的连接状态称为半连接,即尚未完全完成三次握手的TCP连接。
-
半连接队列:在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包(SYN=i )开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_ RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
-
Backlog参数:表示半连接队列的最大容纳数目。
-
SYN-ACK重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息、从半连接队列中删除。注意,每次重传等待的时间不一定相同.
-
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
SYN洪水攻击属于DoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。从图4-3可看到,服务器接收到连接请求(SYN=i )将此信息加入未连接队列,并发送请求包给客户端( SYN=j,ACK=i+1 ),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN 请求。
-
如何防范DOS攻击
- 要避免系统免受DoS攻击,从前两点来看,网络管理员要积极谨慎地维护系统,确保无安全隐患和漏洞;而针对第三点的恶意攻击方式则需要安装防火墙等安全设备过滤DoS攻击,同时强烈建议网络管理员应当定期查看安全设备的日志,及时发现对系统的安全威胁行为。
- nternet支持工具就是其中的主要解决方案之一,包括SuperStack3Firewall、WebCache以及ServerLoadBalancer。不但作为安全网关设备的3ComSuperStack3防火墙在缺省预配置下可探测和防止“拒绝服务”(DoS)以及“分布式拒绝服务”(DDoS)等黑客侵袭,强有力的保护您的网络,使您免遭未经授权访问和其他来自Internet的外部威胁和侵袭;而且3ComSuperStack3ServerLoadBalancer在为多服务器提供硬件线速的4-7层负载均衡的同时,还能保护所有服务器免受“拒绝服务”(DoS)攻击;同样3ComSuperStack3WebCache在为企业提供高效的本地缓存的同时,也能保证自身免受“拒绝服务”(DoS)攻击。
-
这里只是简单做介绍,更多的防范措施请参考:DOS攻击的原理及防范
DDOS
- Distributed Denial of Service, 分布式拒绝服务攻击
传统上,攻击者所面临的主要问题是网络带宽,由于较小的网络规模和较慢的网络速度的限制,攻击者无法发出过多的请求。
虽然类似“the ping of death”的攻击类型只需要较少量的包就可以摧毁一个没有打过补丁的UNIX系统,但大多数的DoS攻击还是需要相当大的带宽的,而以个人为单位的黑客们很难使用高带宽的资源。为了克服这个缺点,DoS攻击者开发了分布式的攻击。攻击者简单利用工具集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDoS(Distributed Denial of Service)攻击。
-
攻击原理
- 分布式拒绝服务攻击原理分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布的、协同的大规模攻击方式。单一的DoS攻击一般是采用一对一方式的,它利用网络协议和操作系统的一些缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。与DoS攻击由单台主机发起攻击相比较,分布式拒绝服务攻击DDoS是借助数百、甚至数千台被入侵后安装了攻击进程的主机同时发起的集团行为。
- 一个完整的DDoS攻击体系由攻击者、主控端、代理端和攻击目标四部分组成。主控端和代理端分别用于控制和实际发起攻击,其中主控端只发布命令而不参与实际的攻击,代理端发出DDoS的实际攻击包。对于主控端和代理端的计算机,攻击者有控制权或者部分控制权.它在攻击过程中会利用各种手段隐藏自己不被别人发现。真正的攻击者一旦将攻击的命令传送到主控端,攻击者就可以关闭或离开网络.而由主控端将命令发布到各个代理主机上。这样攻击者可以逃避追踪。每一个攻击代理主机都会向目标主机发送大量的服务请求数据包,这些数据包经过伪装,无法识别它的来源,而且这些数据包所请求的服务往往要消耗大量的系统资源,造成目标主机无法为用户提供正常服务。甚至导致系统崩溃。
-
如何防范DDOS攻击
-
不但是对DDoS,而且是对于所有网络的攻击,都应该是采取尽可能周密的防御措施,同时加强对系统的检测,建立迅速有效的应对策略。应该采取的防御措施有:
-
全面综合地设计网络的安全体系,注意所使用的安全产品和网络设备。
-
提高网络管理人员的素质,关注安全信息,遵从有关安全措施,及时地升级系统,加强系统抗击攻击的能力。
-
在系统中加装防火墙系统,利用防火墙系统对所有出入的数据包进行过滤,检查边界安全规则,确保输出的包受到正确限制。
-
优化路由及网络结构。对路由器进行合理设置,降低攻击的可能性。
-
优化对外提供服务的主机,对所有在网上提供公开服务的主机都加以限制。
-
安装入侵检测工具(如NIPC、NGREP),经常扫描检查系统,解决系统的漏洞,对系统文件和应用程序进行加密,并定期检查这些文件的变化。
-
-