网络攻防
第一讲 网络攻防技术概述
1、黑客的攻击流程:
一般来说,普通黑客在对电脑进行攻击的流程是大致相同的,主要包括以下几个步骤:
第一步:获取目标(踩点)
攻击者主要通过各种网络命令收集信息,如ipconfig,whois,nslookup
第二步:扫描漏洞(扫描)
目前大多数电脑安装的是windows 操作系统。windows操作系统的稳定性和安全性随着版本的提升而得到不断的提高,但难免会出现这样或那样的安全隐患,这些安全隐患就是漏洞。黑客通过其专业的研究发现这些漏洞,并用病毒和木马通过这些漏洞攻击和破坏电脑。
第三步:试探漏洞(查点)
在了解了目标主机的漏洞和弱点后,黑客就能使用缓冲区溢出和测试用户账号和密码等,达到对其进行试探性攻击的目的。
第四步:获取和提升权限(实施攻击)
如果试探出可以利用的漏洞,那就意味着黑客获得了攻击该目标主机的初步权限,只要能登陆目标主机,那么提升权限将变得易如反掌,借助木马等程序可以更顺利的达到目的。在某些情况下,黑客在取得权限与提升权限时会采用破坏目标电脑操作系统的方法来实现。
第五步:建立后门并清理痕迹
为了达到长期控制目标主机的目的,黑客在取得管理员权限之后,会立刻在其中建立后门,这样就可以随时登陆该主机,为了避免被目标主机的管理员发现,在完成入侵之后需要清除其中的系统日志文件、应用程序日志文件和防火墙的日志文件等。清理完毕即可从目标主机中退出。
2、网络安全的基本需求
保密性、完整性、可用性、可控性、可靠性、不可抵赖性、可审查性、真实性。
3、安全的网络具有下列四个特征:
保密性、完整性、可用性、可控性
4、网络安全的定义
网络安全从其本质上来讲就是网络上的信息安全,它涉及的范围相当广。
广义的网络安全定义:凡是涉及到网络上信息的安全性,完整性,可用性,真实性和可控性的相关理论和技术都是网络信息安全所要研究的领域。
狭义的网络安全定义:指信息内容的安全性,即保护信息的秘密性、真实性和完整性,避免攻击者利用系统的安全漏洞进行窃听、冒充、诈骗、盗用等有损合法用户利益的行为,保护合法用户的利益和隐私。
本课程涉及的网络安全是指狭义的网络安全。
5、网络攻击的概念
①利用安全漏洞
②使用攻击软件或命令:使用网络命令、使用专用网络软件、自己编写攻击软件
③攻击具体内容:非法获取、修改或删除用户系统信息;在用户系统上增加垃圾、色情或有害的信息;破坏用户的系统。
6、安全漏洞简介
漏洞也叫脆弱性(Vulnerability),是计算机系统在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷和不足。
漏洞一旦被发现,就可使用这个漏洞获得计算机系统的额外权限,使攻击者能够在未授权的情况下访问或破坏系统,从而导致危害计算机系统安全。
7、网络攻击的类型
主动攻击:
拒绝服务:使遭受的资源目标不能继续正常提供服务
侵入攻击:攻击者窃取到系统的访问权并盗用资源
信息盗窃:攻击者从目标系统中偷走数据。
信息篡改:攻击者篡改信息内容。
被动攻击:
嗅探攻击:监视网络的状态、数据流动情况以及网上传输的信息。
信息收集攻击:主要指收集目标的端口信息、系统信息和可能存在的漏洞。
第二讲 网络嗅探
1、网络监听的概念
网络监听技术又叫做网络嗅探技术,顾名思义这是一种在他方未察觉的情况下捕获其通信报文或通信内容的技术。
在网络安全领域,网络监听技术对于网络攻击与防范双方都有着重要的意义,是一把双刃剑。
网络监听技术的能力范围目前只限于局域网,它是主机的一种工作模式,主机可以接收到本网段在同一条物理通道上传输的所有信息,而不管这些信息的发送方和接收方是谁。
网络管理员:分析网络情况,监测网络流量
攻击者:监听网络数据,嗅探用户敏感信息。
2、网卡的工作模式
(1)广播模式:该模式下的网卡能够接收网络中的广播信息。
(2)组播模式:该模式下的网卡能够接受组播数据。
(3)直接模式:在这种模式下,只有匹配目的MAC地址的网卡才能接收该数据帧。
(4)混杂模式:(Promiscuous Mode)在这种模式下,网卡能够接受一切接收到的数据帧,而无论其目的MAC地址是什么。
网卡的MAC地址(48位)
-通过ARP来解析MAC与IP地址的转换
-用ipconfig/ifconfig可以查看MAC地址
正常情况下,网卡应该只接收这样的包
-MAC地址与自己相匹配的数据帧(单播包)
-广播包(Broadcast)和属于自己的组播包(Multicast)
3、共享网络和交换网络
共享式网络
-通过网络的所有数据包发往每一个主机;
-最常见的是通过HUB连接起来的子网;
交换式网络
-通过交换机连接网络;
-由交换机构造一个“MAC地址-端口”映射表;
-发送包的时候,只发到特定的端口上;
-交换机的镜像端口功能
4、网络监听防御的通用策略
由于嗅探器是一种被动攻击技术,因此非常难以被发现。
完全主动的解决方案很难找到并且因网络类型而有一些差异,但我们可以先采用一些被动但却是通用的防御措施。
这主要包括采用安全的网络拓扑结构和数据加密技术两方面。
5、信息收集步骤
(1)找到初始信息 – Open source – Whois – Nslookup
(2)找到网络的地址范围 – Traceroute
(3)找到活动的机器 (嗅探) – Ping、wireshark
(4)找到开放端口和入口点 – Nmap – Nessus
(5)弄清操作系统 – Nmap
(6)弄清端口运行的服务
6、交换式网络嗅探
ARP欺骗、交换机MAC地址表溢出、MAC地址伪造。
6.1 交换式网络中的嗅探:ARP欺骗
什么是ARP?Address Resolution Protocol即地址解析协议。
ARP的作用
① IP数据包不能直接在实际网络中传输。
② IP地址在物理网络中对目标机器的寻址,必须转换为物理地址,即MAC地址。
③ ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
交换环境的网络使用交换机(Switch)连接各个网络节点 。
-交换机通过自己的ARP缓存列表来决定把数据报发送到某个端口, 这样就不是把一个数据报转发到所有端口了, 这种做法一方面大大提高了网络的性能, 另一方面也提高了安全性。
-在交换环境下, 即使网卡设置为混杂模式, 也只能监听本机的数据包, 因为交换机不会把其他节点的数据报转发给嗅探主机。
ARP 欺骗(ARP Spoofing)
ARP欺骗攻击是利用ARP协议本身的缺陷进行的一种非法攻击,目的是为了在全交换环境下实现数据监听。
通常这种攻击方式可能被病毒、木马或者有特殊目的攻击者使用。
原理:主机在实现ARP缓存表的机制中存在一个不完善的地方,当主机收到一个ARP的应答包后,它并不会去验证自己是否发送过这个ARP请求,而是直接将应答包里的MAC地址与IP对应的关系替换掉原有的ARP缓存表里的相应信息。
ARP的缺陷
-ARP建立在信任局域网内所有结点的基础上。
-优点是高效,但不安全。
-无状态的协议,不检查是否发过请求或是否是合法的应答,不只在发送请求后才接收应答。
-只要收到目标MAC是自己的ARP请求包或ARP应答包,就接受并缓存。
-这样,便为ARP欺骗提供了可能,恶意节点可以发布虚假的ARP报文从而影响网内结点的通信,甚至可以做“中间人”。
典型ARP欺骗类型之一
欺骗主机作为“中间人”,被欺骗主机的数据都经它中转,以窃取被欺骗主机间的通讯数据。
假设一网络环境中有三台主机分别为A、B、C
A- IP:192.168.10.1 MAC:AA-AA-AA-AA-AA-AA
B- IP:192.168.10.2 MAC:BB-BB-BB-BB-BB-BB
C- IP:192.168.10.3 MAC:CC-CC-CC-CC-CC-CC
B给A应答IP是192.168.10.3 MAC是BB-BB-BB-BB-BB-BB
B给C应答IP是192.168.10.1 MAC是AA-AA-AA-AA-AA-AA
B对A伪装成C,对C伪装成A,A和C都被欺骗了!
典型ARP欺骗类型之二
-截获网关数据,欺骗路由器的ARP表。
-它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常的计算机无法收到信息。
典型ARP欺骗类型之三
-伪造网关,欺骗内网计算机,造成断网。
-建立假网关,让被它欺骗的计算机向该假网关发数据,而不是发给路由器。这样无法通过正常的路由器途径上网,在计算机看来,就是上不了网,即网络掉线或断网了。
ARP攻击
ARP攻击主要是指ARP欺骗
ARP攻击也包括ARP扫描(或称请求风暴)
-即在网络中产生大量ARP请求广播包,严重占用网络带宽资源,使网络阻塞。
-ARP扫描一般为ARP攻击的前奏。
ARP攻击主要是存在于局域网中
ARP攻击一般通过木马感染计算机
ARP欺骗木马只需成功感染一台电脑,就可能导致整个局域网都无法上网,严重的甚至可能带来整个网络的瘫痪。
受到ARP攻击的计算机一般会出现的现象:
-不断弹出“本机的0-255段硬件地址与网络中的0-255段地址冲突”的对话框。
-计算机不能正常上网,出现网络中断的症状。
常见的网络嗅探工具: TcpDump、Libcap (winpcap)、Wireshark (etherenal)、Sniffer pro
嗅探器的检测
ARP广播地址探测
-在混杂模式时,网卡检测是不是广播地址只看收到包的目的以太网址的第一个八位组值,是0xff则认为是广播地址
-如果某台主机以自己的MAC地址回应,则该主机运行在混杂模式
Ping方法
-构造一个ping包给目的主机,其中包含正确的IP地址和错误的MAC地址
-如果该主机回应,则运行在混杂模式
第三讲 端口扫描
1、扫描三步曲
一个完整的网络安全扫描分为三个阶段:
第一阶段:发现目标主机或网络 (端口扫描)
第二阶段:发现目标后进一步搜集目标信息,包括操作系统类型、运行的服务以及服务软件的版本等。如果目标是一个网络,还可以进一步发现该网络的拓扑结构、路由设备以及各主机的信息 (目标信息识别)
第三阶段:根据收集到的信息判断或者进一步测试系统是否存在安全漏洞 (漏洞扫描)
2、端口扫描技术
当确定了目标主机活跃后,就可以使用端口扫描技术,发现目标主机的开放端口,包括网络协议和各种应用监听的端口。端口扫描技术主要包括以下三类:
开放扫描:会产生大量的审计数据,容易被对方发现,但其可靠性高;
TCP Connect 扫描、TCP反向ident扫描
隐蔽扫描:能有效的避免对方入侵检测系统和防火墙的检测,但这种扫描使用的数据包在通过网络时容易被丢弃从而产生错误的探测信息;
TCP SYN 扫描、TCP间接扫描
半开放扫描:隐蔽性和可靠性介于前两者之间。
TCP FIN 扫描、TCP Xmas扫描、TCP Null 扫描、TCP ftp proxy扫描、分段扫描、UDP扫描
3、目标信息识别
在找出网络上存活的系统之后,下一步就是要得到目标主机的操作系统信息和开放的服务信息。用到的技术主要有服务识别和操作系统探测(Operating System Detection)。
服务识别:通常获取服务类型的办法是根据RFC1700直接推断。但是下面几种情况可能会使这项工作变得稍微有些麻烦:
该主机将某服务故意开设到了非标准端口;
该主机开设了一个RFC1700中未定义的服务;
该主机被安置了后门程序。
所以有时候仅凭端口号来判断服务类型还是不够的,可能需要更多的信息。
操作系统探测:由于许多漏洞是和操作系统紧密相关的,因此,确定操作系统类型对于脆弱性评估工具而言也十分重要。目前用于探测操作系统的方法主要可以分为两类:利用系统的信息和利用TCP/IP堆栈指纹。而后者又有多种不同的实现方法。
表1:操作系统探测方法比较
4、漏洞检测
经过发现目标和攫取信息两个步骤以后,就可以进行漏洞检测。
漏洞检测的方法主要分为3种:直接测试(test)、推断(inference)和带凭证的测试(Test with Credentials)。
5、不同的扫描策略
对计算机进行安全扫描不仅可以从网络进行,也可以从主机进行。也就是说安全扫描有基于网络和基于主机两种策略。
基于网络的安全评估工具从入侵者的角度评估系统,这类工具叫做远程扫描器或者网络扫描器。基于主机的安全评估工具从本地系统管理员的角度评估系统,这类工具叫做本地扫描器或者系统扫描器。这两类扫描器的主要目的都是发现系统或网络潜在的安全漏洞。
(1)基于主机的脆弱性评估分析文件内容,对系统中不合适的设置、脆弱的口令以及其他存在安全问题进行检查。它具有以下特点:
运行于单个主机,扫描目标为本地主机;
扫描器的设计和实现与目标主机的操作系统相关;
扫描项目主要包括用户账号文件、组文件、系统权限、系统配置文件、关键文件、日志文件、用户口令、网络接口状态、系统服务、软件脆弱性等。
(2)基于网络的脆弱性评估通过执行一些插件或者脚本模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。它具有以下特点:
运行于单个或多个主机,扫描目标为本地主机或者单/多个远程主机;
扫描器的设计和实现与目标主机的操作系统无关;
扫描项目主要包括目标的开放端口、系统网络服务、系统信息、系统漏洞、远程服务漏洞、特洛伊木马检测、拒绝服务攻击等。
6、常用扫描工具比较
第四讲 拒绝服务攻击
1、拒绝服务攻击的概念
“拒绝服务”这个词来源于英文Denial of Service(简称DoS),它是一种简单的破坏性攻击,通常攻击者利用TCP/IP协议中的某个弱点,或者系统存在的某些漏洞,对目标系统发起大规模的进攻,致使攻击目标无法对合法的用户提供正常的服务。
简单的说,拒绝服务攻击就是让攻击目标瘫痪的一种“损人不利己”的攻击手段。
2、典型拒绝服务攻击技术
死亡之Ping(Ping of Death)、“泪滴”(teardrop)、IP欺骗DoS攻击 、UDP“洪水”、SYN“洪水”、Land攻击、Smurf攻击、Fraggle攻击、分布式反射拒绝服务攻击、电子邮件炸弹、畸形消息攻击 、Slashdot effect 、WinNuke攻击。
3、分布式拒绝服务攻击
分布式拒绝服务DDoS (Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威力。
利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
第五讲 缓冲区溢出攻击
1、缓冲区溢出概述
什么是缓冲区?它是指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型。所谓溢出,其实就是所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存区域。
两者结合进来,所谓缓冲区溢出,就是由于填充数据越界而导致原有流程的改变,黑客借此精心构造填充数据,让程序转而执行特殊的代码,最终获取控制权。
2、堆
堆(Heap),用于存储程序运行过程中动态分配的数据块。
堆的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
随着系统动态分配给进程的内存数量的增加,Heap(堆) 一般来说是向内存的高地址方向增长的。
3、栈
函数被调用的时候,栈中的压入情况如下:
4、缓冲区溢出的原理
如果在堆栈中压入的数据超过预先给堆栈分配的容量时,就会出现堆栈溢出,从而使得程序运行失败;如果发生栈溢出的是大型程序还有可能会导致系统崩溃。
5、代码植入技术
所植入的代码一般由shellcode、返回地址、填充数据这三种元素按照一定的结构和构造类型组成
5.1什么是shellcode
-是植入代码的核心组成部分,是一段能完成特殊任务的自包含的二进制代码。
-由于它最初是用来生成一个高权限的shell,因此而得名。虽然现在人们已经远远不满足于生成一个shell,但shellcode的“美名”一直延用至今。
-攻击者通过巧妙的编写和设置,利用系统的漏洞将shellcode送入系统中使其得以执行,从而获取特殊权限的执行环境,或给自己设立有特权的帐户,取得目标机器的控制权。
除了经典的利用exec()系统调用执行/bin/sh获取shell之外,下表列出了Unix/Linux系统中的shellcode经常用到的一些其它系统调用。
在linux中,为了获得一个交互式shell,一般需要执行代码execve(“/bin/sh”, “/bin/sh”, NULL);
对此代码进行编译后得到机器码。
char shellcode[] = “\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh”;
注意:不同的操作系统、不同的机器硬件产生系统调用的方法和参数传递的方法也不尽相同。
5.2 返回地址
返回地址是指shellcode的入口地址。攻击者如果希望目标程序改变其原来的执行流程,转而执行shellcode,则必须设法用shellcode的入口地址覆盖某个跳转指令。
由于所植入的代码是被复制到目标机器的缓冲区中,攻击者无法知道其进入到缓冲区后的确切地址。不过,内存的分配是有规律的,如Linux系统,当用户程序运行时,栈是从0xbfffffff开始向内存低端生长的。如果攻击者想通过改写函数返回地址的方式使程序指令发生跳转,则程序指令跳转后的指向也应该在0xbfffffff附近。
事实上,虽然不同的缓冲区溢出漏洞,其植入代码的返回地址都不同,但均处于某个较小的地址区间内。另外,为了提高覆盖函数返回地址的成功率,往往在植入代码中安排一段由重复的返回地址组成的内容。
5.3 填充数据
由于攻击者不能准确地判断shellcode的入口地址,因此为了提高shellcode的命中率,往往在shellcode的前面安排一定数量的填充数据。
填充数据必须对植入代码的功能完成没有影响,这样只要返回地址指向填充数据中的任何一个位置,均可以确保shellcode顺利执行。
填充数据还可以起到一个作用,就是当植入代码的长度够不着覆盖目标如函数返回地址时,可以通过增加填充数据的数量,使植入代码的返回地址能够覆盖函数返回地址。
6、植入代码的构造类型
所植入的代码是由黑客精心构造的,而由于缓冲区溢出自身的特性,它的结构和构造类型有一定的特性:NSR模式、RNS模式、AR模式
其中:S代表shellcode,R代表返回地址,N代表填充数据,A表示环境变量。
NSR模式
在shellcode的后面安排一定数量的返回地址,在前面安排一定数量的填充数据,这种结构称为NSR型,或前端同步型。
原理是:只要全部的N和S都处于缓冲区内,并且不覆盖RET,而使R正好覆盖存放RET的栈空间,这样只要将R的值设置为指向N区中任一位置,就必然可以成功地跳转到我们预先编写的shellcode处执行。
这是一种经典结构,适合于溢出缓冲区较大、足够放下我们的shellcode的情况。
这是一种非精确定位的方法,N元素越多成功率越大,其缺点是缓冲区必须足够大,否则shellcode放不下或者N元素数量太少都会造成失败。
RNS模式
其原理是:只要把整个缓冲区全部用大量的返回地址填满,并且保证会覆盖存放RET的栈空间,再在后面紧接N元素和shellcode,这样就可以很容易地确定返回地址R的值,并在植入代码中进行设置。
这里填充的R的数目必须能够覆盖ret,R的值必须指向大量N中的任何一个。
这种方法对大的和小的缓冲区都有效。而且RET地址较容易计算。
AR模式
又称环境变量型。这种构造类型不同于NSR型和RNS型,它必须事先将shellcode放置在环境变量中,然后将shellcode的入口地址和填充数据构成植入代码进行溢出攻击。
这种构造类型对于大、小溢出缓冲区都适合。但由于必须事先将shellcode放置到环境变量中,故其应用受到了限制,只能用于本地而不能用于远程攻击。
缓冲区溢出攻击的三步曲
从上面的分析可知,不管哪种类型的缓冲区溢出攻击,一般都存在下面三个步骤:
①构造需要执行的代码shellcode,并将其放到目标系统的内存。
②获得缓冲区的大小和定位溢出点ret的位置。
③ 控制程序跳转,改变程序流程。
7、缓冲区溢出攻击的防御技术
基于软件的防御技术:类型安全的编程语言、相对安全的函数库、修改的编译器、内核补丁、静态分析方法、动态检测方法。
基于硬件的防御技术:处理器结构方面的改进
类型安全的编程语言
安全的编程语言:Java, C#, Visual Basic,Pascal, Ada, Lisp, ML属于类型安全的编程语言。
缺点:
-性能代价。
-类型安全的编程语言自身的实现可能存在缓冲区溢出问题。
相对安全的函数库
相对安全的标准库函数:例如在使用C的标准库函数时,做如下替换
strcpy -> strncpy strcat -> strncat gets -> fgets
缺点
-使用不当仍然会造成缓冲区溢出问题。
修改的编译器
-增强边界检查能力的C/C++编译器:例如针对GNU C编译器扩展数组和指针的边界检查。Windows Visual C++ .NET的GS 选项也提供动态检测缓冲区溢出的能力。
-返回地址的完整性保护:①将堆栈上的返回地址备份到另一个内存空间;在函数执行返回指令前,将备份的返回地址重新写回堆栈。
②许多高性能超标量微处理器具有一个返回地址栈,用于指令分支预测。返回地址栈保存了返回地址的备份,可用于返回地址的完整性保护
缺点
-性能代价
-检查方法仍不完善
内核补丁
-将堆栈标志为不可执行来阻止缓冲区溢出攻击;
-将堆或者数据段标志为不可执行。
-例如Linux的内核补丁Openwall 、 RSX、 kNoX、ExecShield和PaX等实现了不可执行堆栈,并且RSX、 kNoX、ExecShield、PaX还支持不可执行堆。另外,为了抵制return-to-libc这类的攻击,PaX增加了一个特性,将函数库映射到随机的内存空间
-缺点:对于一些需要堆栈/堆/数据段为可执行状态的应用程序不合适;需要重新编译原来的程序,如果没有源代码,就不能获得这种保护。 =
静态分析方法
字典检查法
-遍历源程序查找其中使用到的不安全的库函数和系统调用。
-例如静态分析工具ITS4、RATS (Rough Auditing Tool for Security)等。其中RATS提供对C, C++, Perl, PHP以及Python语言的扫描检测。
-缺点:误报率很高,需要配合大量的人工检查工作。
程序注解法
-包括缓冲区的大小,指针是否可以为空,输入的有效约定等等。
-例如静态分析工具LCLINT、SPLINT (Secure Programming Lint)。
-缺点:依赖注释的质量
整数分析法
-将字符串形式化为一对整数,表明字符串长度(以字节数为单位)以及目前已经使用缓冲区的字节数。通过这样的形式化处理,将缓冲区溢出的检测转化为整数计算。
-例如静态分析工具BOON (Buffer Overrun detectiON)。
-缺点:仅检查C中进行字符串操作的标准库函数。检查范围很有限。
控制流程分析法
-将源程序中的每个函数抽象成语法树,然后再把语法树转换为调用图/控制流程图来检查函数参数和缓冲区的范围。
-例如静态分析工具ARCHER (ARray CHeckER)、UNO、PREfast和Coverity等。
-缺点:对于运行时才会显露的问题无法进行分析 ;存在误报的可能。
动态检测方法:输入检测方法
-向运行程序提供不同的输入,检查在这些输入条件下程序是否出现缓冲区溢出问题。不仅能检测缓冲区溢出问题,还可以检测其它内存越界问题。
-采用输入检测方法的工具有Purify、Fuzz和FIST(Fault Injection Security Tool)。
-缺点:系统性能明显降低。输入检测方法的检测效果取决于输入能否激发缓冲区溢出等安全问题的出现。
基于硬件的防御技术
64位处理器的支持
-Intel/AMD 64位处理器引入称为NX(No Execute)或者AVP(Advanced Virus Protection)的新特性,将以前的CPU合为一个状态存在的“数据页只读”和“数据页可执行”分成两个独立的状态。
-ELF64 SystemV ABI通过寄存器传递函数参数而不再放置在堆栈上,使得64位处理器不仅-可以抵制需要注入攻击代码的缓冲区溢出攻击还可以抵制return-to-libc这类的攻击。
-缺点:无法抵制“borrowed code chunks”这类的攻击。
第六讲 SQL注入攻击
1、Web安全概述
Web安全可以从以下三个方面进行考虑:
Web服务器的安全
Web客户端的安全
Web通信信道的安全
2、Web服务器的安全
针对Web服务器的攻击可以分为两类:
一是利用Web服务器的漏洞进行攻击,如IIS缓冲区溢出漏洞利用、目录遍历漏洞利用等;
二是利用网页自身的安全漏洞进行攻击,如SQL注入,跨站脚本攻击等。
针对Web服务器具体的安全威胁主要体现在以下几个方面:
-服务器程序编写不当导致的缓冲区溢出(Buffer Overflow)并由此导致远程代码执行。
-针对服务器系统的拒绝服务攻击(Denial of Service)。
-脚本程序编写不当、过滤不严格造成的数据库查询语句注入(SQL Injection),可能引起信息泄漏、文件越权下载、验证绕过、远程代码执行等。
-乐观相信用户输入、过滤不严导致跨站脚本攻击(XSS,Cross Site Script),在欺骗管理员的前提下,通过精心设计的脚本获得服务端Shell。
3、Web客户端的安全
Web应用的迅速普及,客户端交互能力获得了极为充分的发挥,客户端的安全也成为Web安全的焦点问题。
Java Applet、ActiveX、Cookie等技术大量被使用,当用户使用浏览器查看、编辑网络内容时,采用了这些技术的应用程序会自动下载并在客户机上运行,如果这些程序被恶意使用,可以窃取、改变或删除客户机上的信息。
浏览网页所使用的浏览器存在众多已知或者未知的漏洞,攻击者可以写一个利用某个漏洞的网页,并挂上木马,当用户访问了这个网页之后,就中了木马。这就是网页木马,简称网马。
同时,跨站脚本攻击(XSS)对于客户端的安全威胁同样无法忽视,利用XSS的Web蠕虫已经在网络中肆虐过。
4、Web通信信道的安全
和其他的Internet应用一样,Web信道同样面临着网络嗅探(Sniffer)和以拥塞信道、耗费资源为目的的拒绝服务攻击(Denial of Service)的威胁。
5、OWASP Top 10
A1-注入
A2-失效的身份认证和会话管理
A3-跨站脚本
A4-不安全的直接对象引用
A5-安全配置错误
A6-敏感数据暴露
A7-功能级别访问控制缺失
A8-跨站请求伪造
A9-使用已知易受攻击组件
A10-未验证的重定向和转发
6、SQL注入原理
程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。
攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
受影响的系统:对输入的参数不进行检查和过滤的系统。
7、SQL注入
判断注入点 index.php?id=1 and 1=1
判断列数 index.php?id=1 order by 10
判断显错点 index.php?id=1 union select 1, 2, 3
获取数据库名 index.php?id=1 union select 1, database(), 3
获取表名
获取列名
获取数据
8、什么是XSS攻击
XSS是跨站脚本攻击(Cross Site Script) 。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该网页时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
本来跨站脚本攻击(Cross Site Scripting)应该缩写为CSS,但这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。因此人们将跨站脚本攻击缩写为XSS。
9、Web服务器指纹识别
Http指纹识别的原理:记录不同服务器对Http协议执行中的微小差别进行识别。
Http指纹识别比TCP/IP堆栈指纹识别复杂许多,理由是定制Http服务器的配置文件、增加插件或组件使得更改Http的响应信息变的很容易,这样使得识别变的困难;然而定制TCP/IP堆栈的行为需要对核心层进行修改,所以就容易识别。
10、Web盗窃
HTTP指纹识别是为了判断服务器的版本,从而找到服务器的漏洞。
而Web盗窃的目的是通过对各个网页页面源码的详细分析,找出可能存在于代码、注释或者设计中的关键缺陷和脆弱点,以此来确定攻击的突破点。
盗窃web服务器的两种方法:逐页手工扫描和自动扫描。
11、欺骗攻击
(1)ARP欺骗网页劫持
(2)DNS欺骗网站重定向
(3)网络钓鱼
ARP欺骗原理
原理:主机在实现ARP缓存表的机制中存在一个不完善的地方,当主机收到一个ARP的应答包后,它并不会去验证自己是否发送过这个ARP请求,而是直接将应答包里的MAC地址与IP对应的关系替换掉原有的ARP缓存表里的相应信息。
ARP欺骗攻击的防范
① MAC地址绑定,使网络中每一台计算机的IP地址与硬件地址一一对应,不可更改。
② 使用静态ARP缓存,用手工方法更新缓存中的记录,使ARP欺骗无法进行。
③ 使用ARP服务器,通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。
④ 使用ARP欺骗防护软件,如ARP防火墙。
⑤ 发现正在进行ARP欺骗的主机并将其隔离。
DNS欺骗的原理及实现步骤
当客户主机向本地DNS服务器查询域名的时候,如果服务器的缓存中已经有相应记录,DNS服务器就不会再向其他服务器进行查询,而是直接将这条记录返回给用户。
而入侵者欲实现DNS欺骗,关键的一个条件就是在DNS服务器的本地Cache中缓存一条伪造的解析记录。
在上面的例子中,假如dhs.com域DNS服务器返回的是经过黑客篡改的信息,比如将www.dhs.com指向另一个IP地址5.6.7.8,nipc.com域DNS服务器将会接受这个结果,并将错误的信息存储在本地Cache中。以后在这条记录被缓存的生存期内,再向nipc.com域DNS服务器发送的对www.dhs.com的域名解析请求,所得到的IP地址都将是被篡改过的。
网络钓鱼
网络钓鱼是一种电子信息欺骗,攻击者创造了一个完整的令人信服的Web世界,但实际上它却是一个虚假的复制。
虚假的Web看起来十分逼真,它拥有相同的网页和链接。然而攻击者控制着这个虚假的Web站点,这样受害者的浏览器和Web之间的所有网络通信就完全被攻击者截获。
12、网页验证码
验证码技术属于人机区分问题,这在英文中称为CAPTCHA,它是是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。
验证码技术的主要思想是必须通过人为参与完成信息提交过程,并且对验证码字体和背景做了相关处理。
基于验证码的表单提交流程
为了防止攻击者利用程序自动注册、登录、发帖,验证码技术日益得到广泛的应用。
基于验证码的表单提交流程如图所示。
验证码的类型
当前互联网上较为常见的验证码主要有以下几种:
-文本验证码:在网页上以文本形式呈现给用户;
-手机验证码:用户在网页上提交自己的手机号码,系统以短信形式将验证码发送到用户手机上;
-邮件验证码:用户在网页上提交自己的电子邮箱,系统以e-mail形式将验证码发送到用户的邮箱中;
-图片验证码:又称“验证水印”,在网页上以图片形式呈现给用户。
第七讲 文件上传攻击
1、什么是文件上传漏洞
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
文件上传绕过方法
防御方法
1. 使用白名单限制文件上传的类型。
2. 对上传文件进行随机重命名。
3. 限制文件扩展名不允许用户自定义。
4. 对文件上传的文件夹进行权限限制,去掉脚本的执行权限。
5. 对文件的内容进行恶意代码的检测。
第八讲 文件包含攻击
1、什么是文件包含漏洞
文件包含是指网页服务器执行脚本文件时,可以通过一些包含函数加载另一个文件中的代码来解析执行,从而为网页开发者节省大量的时间。
-例子:创建一个供所有网页引用的标准页眉页脚或菜单文件,当网页页眉或菜单需要更新时,只需要在网页上更新一句有包含文件的代码即可。
程序员一般会把重复使用的函数写到单个文件中,需要使用该函数时直接调用,而无需再次编写。
由于程序员未对文件包含函数的包含文件参数进行严格的验证和过滤,而导致的用户可以控制参数,进一步可能包含非预期文件。如果包含的文件中存在恶意代码,可以是木马,病毒,恶意脚本或者WebShell等,无论文件是什么后缀,文件内的恶意代码都会被解析执行。
防御方法
1. 使用白名单限制文件包含的参数。
2. 修改配置文件将open_basedir的值设置为固定的可包含文件目录。
open_basedir=/var/www/html
3. 检查allow_url_include 的修改。
第九讲 命令执行攻击
1、什么是命令执行漏洞
Web应用程序的某些功能需要调用一些可以执行系统命令的函数时,如果函数或者函数的参数能被用户控制,就能将恶意命令拼接到正常的命令中,从而随意地执行系统命令,实现getshell。
命令执行漏洞是高危漏洞之一。
防御方法
1. php配置文件里禁用敏感函数。(导致可用函数不足)
2. 使用过滤函数escapeshellarg处理shell命令里使用的参数。(导致可用命令不足)
2、中间件攻击
Web应用的体系架构:
IIS简介
IIS是由微软公司提供的基于运行microsoft windows的互联网基本服务。
ASP = llS+Access
ASPX = lIS+ MSSQL
IIS漏洞-PUT上传漏洞
产生原因:
-Web服务扩展,webDAV功能开启
-网站主目录允许写入
攻击
-利用IIS的PUT上传一个一句话木马txt文件到主目录
-利用MOVE命令把txt内容覆盖到主目录里原本就有的asp文件里。
第十讲 三大防御系统
1、什么是PKI
PKI(Public-key infrastructure):创建、管理、存储、发布和撤消基于公钥密码系统的数字证书所需要的硬件、软件、人和过程的集合。
基于非对称密钥系统的一套安全体系
基于数字证书的身份验证
基于对称密钥的数据保护
该体系建立在统一的安全认证和规范基础上。
PKI从技术上解决网上身份认证、信息完整性、抗抵赖等安全问题。
为网络应用提供保证。
2、防火墙的分类
包过滤防火墙、代理型防火墙、电路级网关、混和型防火墙。
3、防火墙的配置方案
最简单的防火墙配置,就是直接在内部网和外部网之间加装一个包过滤路由器或者应用网关。为更好地实现网络安全,有时还要将几种防火墙技术组合起来构建防火墙系统。
目前比较流行的有以下三种防火墙配置方案。
① 双宿主机模式 ②屏蔽主机模式 ③屏蔽子网模式
4、入侵检测系统概述
入侵检测系统的组成主要有采集模块、分析模块和管理模块。
-采集模块主要用来搜集数据,供入侵检测系统进行分析;
-分析模块完成对数据的解析,给出怀疑值或作出判断;
-管理模块主要功能是作决策和响应。
-为了更好地完成入侵检测系统的功能,系统一般还有数据预处理模块、通信模块、响应模块和数据存储模块等。
根据数据来源的不同,入侵检测系统常被分为基于网络的入侵检测系统和基于主机的入侵检测系统。