网络攻防技术课程笔记
用于复习的笔记,开卷考试恰好用上嘞~
学习网络攻防等技术实践过程中应注意的问题
- 行为符合国家的法律法规
- 行为符合学校的相关规定
- 最好在和校园网/互联网逻辑隔离(虚拟机上)、物理隔离的环境下实验
- 不要将自己做的项目发布到互联网
- 为第三方安全评估时,签合同
网络安全概述
常见的网络安全事件
- 信息泄露
- 网络攻击
- 勒索病毒
- 暗网
- 恶意软件
- 钓鱼攻击
什么是黑客?
黑客是英文 hacker 的翻译,本意是指热衷于计算机技术、水平高超的电脑专家和程序设计人员。而现在,因对待系统、网络和软件中安全漏洞的态度不同将其分为两类:一类黑客会找出弥补这些漏洞;另一类黑客则在找出安全漏洞之后,为了现示自己的本领和成就,对别人的电脑大肆进行恶意破坏。总的来说,对于“黑客”一词,一般有以下几种意义:
- 对某领域的编程语言有足够的了解,可以编写出有价值的程序的
- 恶意(通常是非法的)试图破解或破坏某个程序、系统及安全密码的人。这个意义常常对那些符合第一种意义的黑客造成严重困扰,通常媒体将这类人称为“骇客(cracker)”或者“黑赗黑客”
- 通过知识或直觉而对某段程序做出好的修改,并完善该程序用途的人
- 试图通过漏洞破解系统或网络,以提醒创造者的人,这种人称作“白帽黑客”或“红客”。这样的人大多是电脑安全公司的雇员,它们是在完全合法的情况下攻击系统漏洞或网络。
黑客的起源可以追述到20世纪50年代
20世纪50年代,麻省理工学院的实验室中,主要目的是解决各种电脑难题。
20世纪60年代,是指善于独立思考且奉公守法的电脑爱好者,他们利用分时技术允许多个用户同时执行多道程序,扩大 了电脑及网络的使用范围。
20世纪70年代,70年代后,在的技术支持下,发明并生产了个人电脑,打破了以往电脑技术只掌握在少数人手里的局面,并提出了电脑为大众所用的观点。通常也把这一时代 的黑客看成是电脑史上的英雄,同时,一些黑客也发明了一些侵入电脑系统的基本口令和技巧,如后门,木马。
20世纪80年代,80年代的软件工程师就是黑客的代表,这一代黑客为个人电脑编写出了各种应用软件。而就在此时,随着各种大型数据库的建立(而这些信息不能被公开使用),黑客开始分化,一部分黑客通过自己的技术为信息共享而奋斗,另一部分黑客则开始频繁的入侵各大电脑网络。
20世纪90年代到今,现在的黑客种类很多,具有代表性的有如下几类:善意的以发现计算机系统漏洞为乐趣的“电脑黑客”(Hacker);玩世不恭好恶作剧的“电脑黑客”(Cyberbunk);纯粹以私利为目的,任意篡改数据,非法获取信息的“电脑黑客”(Cracker)。
中国黑客的现状
-
良莠不齐:国内的黑客组织较多,很多人以一些简单程序迷惑不知情的网民,甚至打着黑客的旗号招摇撞骗,而真正为网络技术服务的很少。
-
普遍具有违法犯罪行为:大部分黑客都通过病毒和木马对网络中的电脑进行攻击,通过偷盗账号或密码破坏网络中的电脑,甚至进行各种经济犯罪,严重地制约了电子商务和网络支付等交易类市场的发展。
-
缺乏社会责任感:不少黑客攻击网络的目的在于炫耀个人的技术实力,没有意识到自己身上肩负的社会责任与时代使命,缺乏危机意识,甚至为违法犯罪分子所利用。
-
积极作用较少:从另一方面说,黑客攻击对网络安全起到了技术促进的作用,没有黑客,就没有现在的网络安全技术。同时,一批黑客高手已转变为网络安全专家,研发出众多安全技术和安全软件,对我国电脑或网络的发展做出了贡献。
黑客的未来
- 明确目标:黑客应首先明确自身的目标,以及黑客存在的价值观念,把维护国家和人民利益作为最高准则,建立起维护国家网络安全阵线,大量培养信息后备人才,并激发人民的参与热情。
- 建立并完善制度:对于黑客组织来说,就绪合活动规则,建立一套现代条件下的“黑客制度”。
- 与犯罪行为明确划清界限:黑客组织需要严厉打击犯罪行为。
黑客守则
- 不入侵或破坏政府机关的主机
- 不破坏他人的文件或数据
- 不轻易将自己攻击的站点告诉其他人
- 不要使用真名
- 不在电话中谈论关于黑客的任何事情、不在网络上谈论关于黑客的任何事情
- 除非经过允许,不入侵或攻击各种正常网站的主机
- 不修改他人电脑中的系统文件,如果目的是为了要进入系统而修改它,请在达到目的将其还原
- 不恶意破坏任何的系统
- 不将已破解的账户公开
- 入侵期间,不随意离开电脑
- 不得删除或修改已入侵电脑的账号
- 阅读所有有关系统安全或系统漏洞的文件
- 不修改系统文件,如果为了隐藏自己的侵入而作的修改不在此限,但仍需维持原来系统的安全性,不得因得到系统的控制权而破坏原有的安全性
黑客的攻击流程
- 攻击准备阶段
- 攻击的实施阶段
- 攻击的善后阶段
一般来说,普通黑客在对电脑进行攻击的流程是大致相同的,主要包括以下5个步骤:
第一步:获取目标(踩点)
攻击者主要通过各种网络命令收集信息,如ipconfig,whois,nslookup
第二步:扫描漏洞(扫描)
目前大多数电脑安装的是windows 操作系统。windows操作系统的稳定性和安全性随着版本的提升而得到不断的提高,但难免会出现这样或那样的安全隐患,这些安全隐患就是漏洞。黑客通过其专业的研究发现这些漏洞,并用病毒和木马通过这些漏洞攻击和破坏电脑。
第三步:试探漏洞(查点)
在了解了目标主机的漏洞和弱点后,黑客就能使用缓冲区溢出和测试用户账号和密码等,达到对其进行试探性攻击的目的。
第四步:获取和提升权限(实施攻击)
如果试探出可以利用的漏洞,那就意味着黑客获得了攻击该目标主机的初步权限,只要能登陆目标主机,那么提升权限将变得易如反掌,借助木马等程序可以更顺利的达到目的。在某些情况下,黑客在取得权限与提升权限时会采用破坏目标电脑操作系统的方法来实现。
第五步:建立后门并清理痕迹
为了达到长期控制目标主机的目的,黑客在取得管理员权限之后,会立刻在其中建立后门,这样就可以随时登陆该主机,为了避免被目标主机的管理员发现,在完成入侵之后需要清除其中的系统日志文件、应用程序日志文件和防火墙的日志文件等。清理完毕即可从目标主机中退出。
黑客所需的理论知识
黑客攻击是一项技术活,所以,一些基本的技能和理论是首先应该学习和掌握的,如系统和编程的基础知识、文件传输与隐藏技术、计算机网络技术、攻击隐藏技术等。
社会工程学攻击
社会工程学:通过对受害者心理弱点、本能反应、好奇心、信任与贪婪等心理陷阱进行获取利益的手法。
法律风险
网络安全等级保护2.0、《中华人民共和国网络安全法》、《关键信息基础设施安全保护条例》、《个人信息保护法》、《数据安全法》
网络身份安全
81%网络安全事件通过窃取网络身份实现
-
身份造假、拒认、假冒(真实性—多重验证、风控模型、防钓鱼)
-
盗窃(机密性—防钓鱼、防撞库、防拖库、防爆破)
-
泄露(机密性–数据泄露防护DLP – Data Leakage Prevention)
-
其他未授权行为
How to avoid them?
不轻信、强口令、定期更换口令、不重用密码、密码管理器
2013年开始,每年5月的第一个星期四——世界密码日
撞库
撞库是一种黑客攻击方式,它涉及黑客通过收集互联网上已泄露的用户名和密码信息,生成对应的字典表,然后利用这些信息批量尝试登录其他网站,以获取一系列可以登录的账号和密码
分布式集体并行撞库
- 同时并行攻击同一个网站的多个账号
- 公开获取或非法购买被泄露的大量的账号/密码对
- 一个节点只(用一对账号密码)攻击一次,不会被限频
- 从多个代理/僵尸网络节点同时并行发起登录请求
- 辅助自动工具(如OCR)通过图灵测试
- 1-2%的成功率
What is 管理员/特权账户?
网络安全的基本需求
可靠性、可用性、保密性、完整性、不可抵赖性、可控性、可审查性、真实性
安全漏洞
漏洞也叫脆弱性(Vulnerability),是计算机系统在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷和不足。
漏洞一旦被发现,就可使用这个漏洞获得计算机系统的额外权限,使攻击者能够在未授权的情况下访问或破坏系统,从而导致危害计算机系统安全。
嗅探(网络监听)
信息收集步骤
- 找到初始信息
- Open source
- Whois
- Nslookup
- 找到网络的地址范围
- Traceroute
- 找到活动的机器 (嗅探)
- Ping、wireshark
- 找到开放端口和入口点
- Nmap
- Nessus
- 弄清操作系统
- Nmap
- 弄清端口运行的服务
网络监听的概念
-
网络嗅探是指利用计算机的网络接口截获目的地为其他计算机的数据报文的一种技术。
-
在网络安全领域,网络监听技术对于网络攻击与防范双方都有着重要的意义,是一把双刃剑。
-
网络监听技术的能力范围目前只限于局域网,它是主机的一种工作模式,主机可以接收到本网段在同一条物理通道上传输的所有信息,而不管这些信息的发送方和接收方是谁。
-
网络嗅探工作在网络的底层,把网络传输的全部数据记录下来。
为什么要嗅探
-
网络管理员:分析网络情况,监测网络流量。
-
攻击者:监听网络数据,嗅探用户敏感信息。
网卡的工作模式
网卡的 MAC 地址(48位),通过 ARP 协议来解析 MAC 与 IP 地址的转换,用 ipconfig/ifconfig 可以查看 MAC 地址。
注: ARP 协议:将网络层的IP地址解析为数据链路层的 MAC 地址
- 广播模式:该模式下的网卡能够接收网络中的广播信息。
- 组播模式:该模式下的网卡能够接受组播数据。
- 直接模式:在这种模式下,只有匹配目的 MAC 地址的网卡才能接收该数据帧。
- 混杂模式(Promiscuous Mode):在这种模式下,网卡能够接受一切接收到的数据帧,而无论其目的 MAC 地址是什么。 其他三种统称为非混杂模式。
共享网络和交换网络
-
共享式网络
- 通过网络的所有数据包发往每一个主机;
- 最常见的是通过HUB连接起来的子网;
- 共享式网络嗅探:合法的网络接口可以响应两种数据帧
-
交换式网络
-
通过交换机连接网络;
-
由交换机构造一个“MAC地址-端口”映射表;
-
发送包的时候,只发到特定的端口上;
-
交换机的镜像端口功能(当配置了端口镜像后,从镜像端口流经的所有报文或匹配特定流分类规则的报文将被复制到观察端口。)
-
交换式网络嗅探:
-
ARP 欺骗:ARP欺骗的运作原理是攻击者发送伪造的的 ARP 数据包到网络上,尤其是送到网关上,使交换机更新ARP缓存列表,目的是让送至特定IP地址的流量被错误地重定向到攻击者所控制的地方。而被嗅探主机收不到任何的数据包,为了使得能够正常的截获数据报,嗅探主机除了充当嗅探的身份之外,还要充当中间人的身份(转发给被嗅探主机)。
Exp1. 假设一网络环境中有三台主机分别为 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都被欺骗了!
Exp2. 截获网关数据,欺骗路由器的ARP表。它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常的计算机无法收到信息。
Exp3. 伪造网关,欺骗内网计算机,造成断网。建立假网关,让被它欺骗的计算机向该假网关发数据,而不是发给路由器。这样无法通过正常的路由器途径上网,在计算机看来,就是上不了网,即网络掉线或断网了。
-
-
交换机 MAC 地址表溢出:交换机MAC地址表溢出攻击,也称为MAC泛洪攻击,是一种通过向局域网内发送大量伪造MAC地址的数据包,意图占满局域网内交换机的MAC地址转发表的攻击方式。由于交换机MAC地址表通常具有一定的空间限制,当MAC地址表被占满后,就无法学习到新的MAC地址,导致交换机无法正确转发数据包,从而破坏局域网的可用性。
-
MAC 地址伪造:攻击者通过发送含有特定源MAC地址的数据包,利用交换机的转发特性和MAC地址学习特性,让交换机误认为自己是网络中的另一台机器,从而将本来属于该台机器的数据包转发给攻击者。(隐蔽性好)
-
-
ARP 攻击(另见 Web安全章节)
- ARP攻击主要是指ARP欺骗
- ARP攻击也包括ARP扫描(或称请求风暴),即在网络中产生大量ARP请求广播包,严重占用网络带宽资源,使网络阻塞。
- ARP扫描一般为ARP攻击的前奏。
- ARP攻击主要是存在于局域网中
- ARP攻击一般通过木马感染计算机
- 特点:ARP欺骗木马只需成功感染一台电脑,就可能导致整个局域网都无法上网,严重的甚至可能带来整个网络的瘫痪。
- 特征:
- 不断弹出“本机的0-255段硬件地址与网络中的0-255段地址冲突”的对话框。
- 计算机不能正常上网,出现网络中断的症状。
网络监听防御的通用策略
-
由于嗅探器是一种被动攻击技术,因此非常难以被发现。
嗅探器检测:
- Ping方法:构造一个ping包给目的主机,其中包含正确的IP地址和错误的MAC地址。如果目标主机以错误的MAC地址回应了这个Ping请求,这表明它接收了并非直接发送给它的数据包,因此它可能运行在混杂模式。
- ARP广播地址探测:发送一个ARP请求,其中包含一个广播MAC地址(0xFF:FF:FF:FF:FF:FF)和一个特定的IP地址。 正常情况下,只有拥有该IP地址的主机应该响应这个ARP请求。 如果有主机以自己的MAC地址(非广播地址)响应了这个ARP请求,那么这台主机很可能运行在混杂模式,因为它接收并响应了并非直接发送给它的数据包。
-
完全主动的解决方案很难找到并且因网络类型而有一些差异,但我们可以先采用一些被动但却是通用的防御措施。
-
这主要包括采用安全的网络拓扑结构和数据加密技术两方面。
常见的网络嗅探工具(实验用)
- TcpDump
- Libcap (winpcap)
- Wireshark (etherenal)
- Sniffer pro
漏洞扫描
扫描三步曲
一个完整的网络安全扫描分为三个阶段:
- 第一阶段:发现目标主机或网络 (端口扫描)
- 第二阶段:发现目标后进一步搜集目标信息,包括操作系统类型、运行的服务以及服务软件的版本等。如果目标是一个网络,还可以进一步发现该网络的拓扑结构、路由设备以及各主机的信息 (目标信息识别)
- 第三阶段:根据收集到的信息判断或者进一步测试系统是否存在安全漏洞 (漏洞扫描)
端口扫描技术
当确定了目标主机活跃后,就可以使用端口扫描技术,发现目标主机的开放端口,包括网络协议和各种应用监听的端口。
-
目的是判断目标主机的操作系统以及开放了哪些服务。
-
端口是由计算机的通信协议定义的。 计算机之间的通信,归根结底是进程间的通信,而端口则与进程相对应。
-
端口分类:
端口扫描技术主要包括以下三类:
- 开放扫描:会产生大量的审计数据,容易被对方发现,但其可靠性高;
- 隐蔽扫描:能有效的避免对方入侵检测系统和防火墙的检测,但这种扫描使用的数据包在通过网络时容易被丢弃从而产生错误的探测信息;
- 半开放扫描:隐蔽性和可靠性介于前两者之间。
开放扫描技术
-
TCP Connect 扫描
-
TCP反向ident扫描
半开放扫描技术
-
TCP SYN 扫描
-
TCP间接扫描
隐蔽扫描技术
- TCP FIN 扫描
- TCP Xmas扫描
- TCP Null 扫描
- TCP ftp proxy扫描
- 分段扫描
- UDP扫描
扫描
在找出网络上存活的系统之后,下一步就是要得到目标主机的操作系统信息和开放的服务信息。用到的技术主要有服务识别和操作系统探测(Operating System Detection)。
-
服务识别:通常获取服务类型的办法是根据 RFC1700 直接推断。但是下面几种情况可能会使这项工作变得稍微有些麻烦:
-
该主机将某服务故意开设到了非标准端口;
-
该主机开设了一个RFC1700中未定义的服务;
-
该主机被安置了后门程序。
所以有时候仅凭端口号来判断服务类型还是不够的,可能需要更多的信息。
-
-
操作系统探测:由于许多漏洞是和操作系统紧密相关的,因此,确定操作系统类型对于脆弱性评估工具而言也十分重要。目前用于探测操作系统的方法主要可以分为两类:利用系统的信息和利用TCP/IP堆栈指纹。而后者又有多种不同的实现方法。
操作系统识别
为什么要操作系统辨识?
- 许多漏洞是系统相关的,而且往往与相应的版本对应;
- 从操作系统或者应用系统的具体实现中发掘出来的攻击手段都需要辨识系统;
- 操作系统的信息还可以与其他信息结合起来,比如漏洞库,或者社会诈骗(社会工程,social engineering)
如何辨识一个操作系统
-
一些端口服务的提示信息,例如,telnet、http、ftp等服务的提示信息
- TCP/IP 栈指纹
- DNS 泄漏出 OS 系统
主动栈指纹识别方法
-
给一个开放的端口发送 FIN 包,有些操作系统有回应,有的没有回应
-
对于非正常数据包的反应;比如,发送一个包含未定义TCP标记的数据包
-
根据 TCP 连接的序列号风格;寻找初始序列号之间的规律
-
ACK值;有些系统会发送回所确认的 TCP 分组的序列号,有些会发回序列号加1
-
TCP初始化窗口;有些操作系统会使用一些固定的窗口大小
-
DF位(Don’t Fragment bit );某些操作系统会设置IP头的DF位来改善性能
操作系统探测方法比较
什么是漏洞?
漏洞源自“vulnerability”(脆弱性)。一般认为,漏洞是指硬件、软件或策略上存在的的安全缺陷,从而使得攻击者能够在未授权的情况下访问、控制系统。
漏洞的危害
- 系统的完整性(integrity)
- 攻击者可以利用系统弱点入侵系统,对系统数据进行非法篡改,达到破坏数据完整性的目的。
- 系统的可用性(availability)
- 攻击者利用系统弱点破坏系统或者网络的正常运行,导致信息或网络服务不可用,合法用户的正常服务要求得不到满足。
- 系统的机密性(confidentiality)
- 攻击者利用系统弱点给非授权的个人和实体泄漏受保护信息。有些时候,机密性和完整性是交叠的。
- 系统的可控性(controllability)
- 攻击者利用系统弱点对授权机构控制信息的完整控制权造成危害。
- 系统的可靠性(reliability)
- 攻击者利用系统弱点对用户认可的质量特性(信息传递的迅速性、准确性以及连续地转移等)造成危害。
为什么要进行漏洞扫描?
漏洞扫描帮助网管人员了解网络安全状况、对资产进行风险评估的依据、是安全配置的第一步、提供向领导上报数据依据。
漏洞出现原因
- 设计上的缺陷
- 操作系统的弱点
- 软件的错误、缺陷和漏洞
- 数据库的弱点
- 网络安全产品的弱点
- 用户的管理的疏忽
漏洞库
漏洞太多了;需要用户了解漏洞的详细信息,告知如何防范,如何打补丁;漏洞数据库就是让用户更详细地了解漏洞,统一标准,方便查询。
常见的漏洞库有:CVE漏洞库、BugTraq漏洞数据库、ICAT漏洞数据库、CERT/CC漏洞信息数据库、X-Force漏洞信息库等
常见的开源漏洞扫描器有:XssPy、w3af、Nikto、Wfuzz、OWASP ZAP、Wapiti、Vega、SQLmap、WebScarab
常用扫描工具比较
漏洞检测
经过发现目标和攫取信息两个步骤以后,就可以进行漏洞检测。漏洞检测的方法主要分为3种:直接测试(test)、推断(inference)和带凭证的测试(Test with Credentials)。
不同的扫描策略
对计算机进行安全扫描不仅可以从网络进行,也可以从主机进行。也就是说安全扫描有基于网络和基于主机两种策略。这两类扫描器的主要目的都是发现系统或网络潜在的安全漏洞。
-
基于网络的安全评估工具从入侵者的角度评估系统,这类工具叫做远程扫描器或者网络扫描器。
-
基于网络的脆弱性评估通过执行一些插件或者脚本模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。它具有以下特点:
a. 运行于单个或多个主机,扫描目标为本地主机或者单/多个远程主机;
b. 扫描器的设计和实现与目标主机的操作系统无关;
c. 扫描项目主要包括目标的开放端口、系统网络服务、系统信息、系统漏洞、远程服务漏洞、特洛伊木马检测、拒绝服务攻击等。
-
-
基于主机的安全评估工具从本地系统管理员的角度评估系统,这类工具叫做本地扫描器或者系统扫描器。
-
基于主机的脆弱性评估分析文件内容,对系统中不合适的设置、脆弱的口令以及其他存在安全问题进行检查。它具有以下特点:
a. 运行于单个主机,扫描目标为本地主机;
b. 扫描器的设计和实现与目标主机的操作系统相关;
c. 扫描项目主要包括用户账号文件、组文件、系统权限、系统配置文件、关键文件、日志文件、用户口令、网络接口状态、系统服务、软件脆弱性等。
-
优缺点:
-
基于主机的脆弱性评估可以更准确地定位系统的问题,发现系统的漏洞;然而缺点是平台相关、升级复杂,而且扫描效率较低(一次只能扫描一台主机)。
-
基于网络的脆弱性评估从入侵者的角度进行检测,能够发现系统中最危险、最可能被入侵者渗透的漏洞,扫描效率更高,而且由于与目标平台无关,通用性强,安装简单;缺点是不能检查不恰当的本地安全策略,另外也可能影响网络性能。
拒绝服务攻击 DoS
定义:“拒绝服务”这个词来源于英文Denial of Service(简称DoS),它是一种简单的破坏性攻击,通常攻击者利用 TCP/IP 协议中的某个弱点,或者系统存在的某些漏洞,对目标系统发起大规模的进攻,致使攻击目标无法对合法的用户提供正常的服务。攻击目标可以是主机、网络。
- 服务器端:攻击目标是特定的服务器,使之不能提供正常服务,如Web服务器
- 客户端:使之不能正常的使用某种服务,比如游戏中踢人、聊天室中踢人、电子邮件黑名单、防火墙黑名单
简单的说,拒绝服务攻击就是让攻击目标瘫痪的一种“损人不利己”的攻击手段。
特点:易实施、多样性、大流量、分布式、资源多、IP伪造、危害大,难恢复、基础设施成为目标
拒绝服务的形式粗略来看,分为三种:消耗有限的物理资源、修改配置信息造成DoS、物理部件的移除或破坏;
典型拒绝服务攻击技术 学习PPT下载
- 死亡之Ping(Ping of Death)
- “泪滴”(teardrop)
- IP欺骗DoS攻击
- UDP“洪水”
- SYN“洪水”
- Land攻击
- Smurf攻击
- Fraggle攻击
- 分布式反射拒绝服务攻击
- 电子邮件炸弹
- 畸形消息攻击
- Slashdot effect
- WinNuke 攻击
分布式拒绝服务攻击(DDoS)
- 分布式拒绝服务DDoS(Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动 DoS 攻击,从而成倍地提高拒绝服务攻击的威力。
- 利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
僵尸网络
僵尸网络(Botnet),是指采用一种或多种传播手段,使大量主机感染僵尸程序 (bot程序),从而在控制者和被感染主机之间通过命令和控制体系所形成的一个一对多控制的网络。
DDoS示例:
传统DDOS防护方法
一、对网络边界进行硬化
阻断ICMP和UDP:早期的DOS攻击技术几乎都是利用这两个协议里的漏洞来达到其目的的。因为这两个协议现在已不常用了,所以推荐在网络边界对它们做出限制。
对外来数据包进行过滤:意味着阻断明显非法的外来通信如源IP地址属于私用或保留范围的数据包,这样的数据包不应该出现在公共网络上。
对外数据包进行过滤:只允许源IP地址是你站点上的合法IP地址的数据包发往因特网,其他源IP地址的数据包都不允许离开你的网络。
对访问量进行限制:对访问量作出限制可以有效地销弱Dos攻击的效果。
安排一条“下水道”:可以对非法地址进行过滤的同时追踪它们的真正源头。这一机制的基本思路是:通过配置一个诱饵路由器并把路由终点设置为一个“陷阱”地址,就可以把任何类型的恶意通信全部送到那个“陷阱”里去。
二、对服务器进行硬化
及时打好补丁:这是比较常识性办法。
系统级SYN保护措施:绝大数现代的操作系统都已经具备了“SYN洪水”监测和预防功能。
部分操作系统的系统级防DoS配置:某些操作系统可以配置成丢弃广播的ICMP ECHO 数据包,这种数据包可以发动Smurf或Fraggle风格的攻击。
Dos攻击测试:对你们直接面向因特网的系统进行包括Dos在内的各种攻击测试。借助于模拟类似负载的办法进行 Dos 攻击测试,RadView 公司的 WebLOAO 软件是这个领域的好工具之一。
三、对Dos通信流进行过滤或重定向
对 DoS 通信流进行过滤或重定向是一种传统的 DoS 防御技术。虽说使用了假造源地址的 DDoS 攻击技术已经让这种防御技术的效力打了不小的折扣,但许多企业仍在把阻断来自攻击方IP地址的通信作为他们防御 DoS 攻击的主要手段。阻断某个源地址可以百分之百地化解来自那个地址的 DoS 攻击。
四、与ISP合作追查攻击来源
如果站点遭到攻击,应该尽快 与ISP 的网络运行中心取得联系。追查出攻击活动的始作俑者可能非常空难,但并不是不可能。请 ISP 帮你过滤掉源自它们网络的 DoS 通信绝对是釜底抽薪的最佳办法。
缓冲区溢出攻击
缓冲区溢出概述
什么是缓冲区?它是指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型。
所谓溢出,其实就是所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存区域。
两者结合进来,所谓缓冲区溢出,就是由于填充数据越界而导致原有流程的改变,黑客借此精心构造填充数据,让程序转而执行特殊的代码,最终获取控制权
堆
- 堆(Heap),用于存储程序运行过程中动态分配的数据块。
-
堆的大小并不固定,可动态扩张或缩减。当进程调用 malloc 等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
- 随着系统动态分配给进程的内存数量的增加,Heap(堆) 一般来说是向内存的高地址方向增长的。
栈
函数被调用的时候,栈中的压入情况如下:
缓冲区溢出的原理
如果在堆栈中压入的数据超过预先给堆栈分配的容量时,就会出现堆栈溢出,从而使得程序运行失败;如果发生栈溢出的是大型程序还有可能会导致系统崩溃。
代码植入技术
-
所植入的代码一般由shellcode、返回地址、填充数据这三种元素按照一定的结构和构造类型组成
-
什么是shellcode
- 是植入代码的核心组成部分,是一段能完成特殊任务的自包含的二进制代码。
- 由于它最初是用来生成一个高权限的shell,因此而得名。虽然现在人们已经远远不满足于生成一个shell,但shellcode的“美名”一直延用至今。
- 攻击者通过巧妙的编写和设置,利用系统的漏洞将shellcode送入系统中使其得以执行,从而获取特殊权限的执行环境,或给自己设立有特权的帐户,取得目标机器的控制权。
shellcode
除了经典的利用 exec() 系统调用执行 /bin/sh 获取 shell 之外,下表列出了Unix/Linux系统中的shellcode经常用到的一些其它系统调用。
系统调用的函数名称 | 完成的功能 |
---|---|
open() |
读文件 |
open(),create(),link(),unlink() |
写文件 |
fork() |
创建进程 |
system(),popen() |
执行程序 |
socket(),connect(),send() |
访问网络 |
chmod(),chown() |
改变文件属性 |
setuid(),getuid() |
改变权限限制 |
-
在linux中,为了获得一个交互式 shell,一般需要执行代码 execve(“/bin/sh”, “/bin/sh”, NULL);
-
对此代码进行编译后得到机器码。
1
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”;
- 注意:不同的操作系统、不同的机器硬件产生系统调用的方法和参数传递的方法也不尽相同。
返回地址
-
返回地址是指shellcode的入口地址。攻击者如果希望目标程序改变其原来的执行流程,转而执行shellcode,则必须设法用shellcode的入口地址覆盖某个跳转指令。
-
由于所植入的代码是被复制到目标机器的缓冲区中,攻击者无法知道其进入到缓冲区后的确切地址。不过,内存的分配是有规律的,如Linux系统,当用户程序运行时,栈是从0xbfffffff开始向内存低端生长的。如果攻击者想通过改写函数返回地址的方式使程序指令发生跳转,则程序指令跳转后的指向也应该在0xbfffffff附近。
-
事实上,虽然不同的缓冲区溢出漏洞,其植入代码的返回地址都不同,但均处于某个较小的地址区间内。另外,为了提高覆盖函数返回地址的成功率,往往在植入代码中安排一段由重复的返回地址组成的内容。
填充数据
-
由于攻击者不能准确地判断 shellcode 的入口地址,因此为了提高 shellcode 的命中率,往往在 shellcode 的前面安排一定数量的填充数据。
-
填充数据必须对植入代码的功能完成没有影响,这样只要返回地址指向填充数据中的任何一个位置,均可以确保shellcode顺利执行。
-
填充数据还可以起到一个作用,就是当植入代码的长度够不着覆盖目标如函数返回地址时,可以通过增加填充数据的数量,使植入代码的返回地址能够覆盖函数返回地址。
-
对于Intel CPU来说,填充数据实质上是一种单字节指令,使用得最多的是空操作指令NOP,其值为0x90,该指令什么也不做,仅跳过一个CPU周期。除此之外,还有其他的单字节指令可以作为填充数据使用,如调整计算结果的AAA和AAS、操作标志位的CLC和CLD等。
-
在植入代码中,往往安排比较长甚至几百上千的填充数据,而一个有效的指令长度实际最大也不过10字节左右,因此,也可以根据这一特点来判断是否发生了缓冲区溢出攻击。
植入代码的构造类型
所植入的代码是由黑客精心构造的,而由于缓冲区溢出自身的特性,它的结构和构造类型有一定的特性。
-
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模式
AR模式又称环境变量型。这种构造类型不同于NSR型和RNS型,它必须事先将shellcode放置在环境变量中,然后将shellcode的入口地址和填充数据构成植入代码进行溢出攻击。
这种构造类型对于大、小溢出缓冲区都适合。但由于必须事先将shellcode放置到环境变量中,故其应用受到了限制,只能用于本地而不能用于远程攻击。
缓冲区溢出攻击的三步曲
从上面的分析可知,不管哪种类型的缓冲区溢出攻击,一般都存在下面三个步骤:
- 构造需要执行的代码shellcode,并将其放到目标系统的内存。
- 获得缓冲区的大小和定位溢出点ret的位置。
- 控制程序跳转,改变程序流程。
缓冲区溢出攻击的防御技术
- 基于软件的防御技术
- 使用类型安全的编程语言:Java, C#, Visual Basic,Pascal, Ada, Lisp, ML属于类型安全的编程语言;缺点:可能以性能代价、类型安全的编程语言自身的实现可能存在缓冲区溢出问题。
- 使用相对安全的函数库:使用C的标准库函数时 strcpy -> strncpy;strcat -> strncat;gets -> fgets;使用不当仍然会造成缓冲区溢出问题
- 使用修改的编译器:增强边界检查能力的C/C++编译器,提供返回地址的完整性保护等,缺点:性能代价、检查方法仍不完善
- 内核补丁:将堆、栈标志为不可执行来阻止缓冲区溢出攻击;将堆或者数据段标志为不可执行。例如Linux的内核补丁Openwall 、 RSX、 kNoX、ExecShield和PaX等实现了不可执行堆栈,并且RSX、 kNoX、ExecShield、PaX还支持不可执行堆。另外,为了抵制return-to-libc这类的攻击,PaX增加了一个特性,将函数库映射到随机的内存空间。缺点:对于一些需要堆栈/堆/数据段为可执行状态的应用程序不合适;需要重新编译原来的程序,如果没有源代码,就不能获得这种保护
- 静态分析方法:字典检查法、程序注解法、整数分析法、控制流程分析法
- 动态检测方法:Canary-based 检测方法、输入检测方法
- 基于硬件的防御技术
- 处理器结构方面的改进
- “数据页只读”和“数据页可执行”分成两个独立的状态(Intel/AMD 64位处理器引入称为NX(No Execute)或者AVP(Advanced Virus Protection)的新特性)
- ELF64 SystemV ABI通过寄存器传递函数参数而不再放置在堆栈上,使得64位处理器不仅可以抵制需要注入攻击代码的缓冲区溢出攻击还可以抵制return-to-libc这类的攻击。
- 处理器结构方面的改进
Web应用安全攻击
Web安全可以从以下三个方面进行考虑:Web服务器的安全、Web客户端的安全和Web通信信道的安全。
针对Web服务器的攻击可以分为两类:
- 一是利用Web服务器的漏洞进行攻击,如IIS缓冲区溢出漏洞利用、目录遍历漏洞利用等;
- 二是利用网页自身的安全漏洞进行攻击,如SQL注入,跨站脚本攻击等。
OWASP Top 10 简介(开放式Web应用安全项目)
-
A1: 注入 注入攻击,如SQL注入,可以允许攻击者修改或破坏数据库数据。
-
A2: 失效的身份认证和会话管理 不充分的身份验证和会话管理可能导致未经授权的访问和会话劫持。
-
A3: 跨站脚本(XSS) 攻击者在网页中注入恶意脚本,从而在其他用户的浏览器上执行。
-
A4: 不安全的直接对象引用 应用程序暴露文件和数据库记录的直接链接,可能导致数据泄露。
-
A5: 安全配置错误 不正确的配置可能导致安全漏洞,如未加密的敏感数据传输。
-
A6: 敏感数据暴露 敏感信息(如密码、信用卡号)未加密存储或传输。
-
A7: 功能级别访问控制缺失 应用程序未能正确实施访问控制,导致未授权访问。
-
A8: 跨站请求伪造(CSRF) 攻击者诱使用户执行他们无意进行的操作,如银行转账。
-
A9: 使用已知易受攻击组件 使用已知漏洞的库或框架,增加了被攻击的风险。
-
A10: 未验证的重定向和转发 应用程序未能正确验证重定向和转发,可能导致开放重定向攻击。
SQL注入原理
-
程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。
-
攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
-
受影响的系统:对输入的参数不进行检查和过滤的系统。
SQL注入
-
判断注入点
-
通过添加 and 1=1 到URL的查询参数中,如果应用程序的响应没有变化,这可能表明存在注入点。例如:
1
http://www.xxx.com/index.php?id=1 and 1=1
-
-
判断列数
-
使用 order by 子句来确定查询结果的列数。例如:
1
http://www.xxx.com/index.php?id=1 order by 1
-
逐渐增加数字,直到应用程序的响应时间显著增加,这表明你已经到达了最后一列。
-
-
判断显错点
-
通过使用 union select 语句来查看数据库是否显示错误信息。例如:
1
http://www.xxx.com/index.php?id=1 union select 1, 2, 3
-
如果数据库显示错误信息,这可能表明存在显错点,攻击者可以利用这些信息来进一步攻击。
-
-
获取数据库名
-
使用 database() 函数来获取当前数据库的名称。例如:
1
http://www.xxx.com/index.php?id=1 union select 1, database(), 3
-
-
获取表名
-
使用 show tables 语句来获取数据库中的表名。例如:
1
http://www.xxx.com/index.php?id=1 union select 1, (select table_name from information_schema.tables where table_schema=database() limit 0,1), 3
-
-
获取列名
-
使用 show columns from [表名] 语句来获取指定表的列名。例如:
1
http://www.xxx.com/index.php?id=1 union select 1, (select column_name from information_schema.columns where table_name='users' limit 0,1), 3
-
-
获取数据
-
一旦知道了表名和列名,就可以使用select语句来获取数据。例如:
1
http://www.xxx.com/index.php?id=1 union select 1, username, password from users
-
工具 Pangolin(穿山甲)
XSS攻击
XSS是跨站脚本攻击(Cross Site Script)。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该网页时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。本来跨站脚本攻击应该缩写为CSS,但这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。因此人们将跨站脚本攻击缩写为XSS。
- html或htm,是一种静态的页面格式,不需要服务器解析脚本。直接由浏览器解析。不依赖数据库,安全,不存在SQL注入漏洞;
- 动态网页:asp、php、jsp等,由相应的脚本引擎解析执行,根据指令生成静态网页。存在安全风险,可能存在SQL注入漏洞;
最简单的SQL注入实例
假设一个网页的后台入口处需要验证用户名和密码,验证程序的SQL语句是这样写:
Select * from admin where user=‘TxtBox1.txt’ and pass=‘TxtBox2.txt’
如果用户填写的用户名和密码都是: ‘abc’ or ‘1’=‘1’
那么将导致SQL语句是:Select * from admin where user=‘abc’ or ‘1’=‘1’ and pass=‘abc’ or ‘1’=‘1’
这条语句是永真式,那么攻击者就成功登陆了后台。这就是最简单的SQL注入方式。
常见的SQL注入漏洞利用方式
- SQL注入函数 攻击者利用SQL注入漏洞来执行任意的SQL函数,如sleep()、benchmark()、updatexml()等,以达到延迟响应、获取数据库信息或绕过安全限制的目的 。
- SQL注释 SQL注释注入是一种技术,攻击者通过在SQL语句中插入注释符号(如 – 或 /* */),来使SQL语句的一部分被注释掉,从而绕过简单的安全检查 。
- union联合查询
UNION注入是一种SQL注入技术,攻击者通过在原有的查询语句后添加一个或多个UNION 查询,将不同的查询结果合并在一起返回给用户。这通常需要页面有数据回显,且查询字段数前后一致 。例如,如果原查询是
SELECT Name, Phone FROM Users WHERE Id=1
,攻击者可能会添加UNION SELECT creditCardNumber,1 FROM CreditCardTable
来获取信用卡号码 。
SQL注入点分类
-
数据类型:数字型、字符型
-
返回结果:报错型、盲注型
SQL注入防范
增加sql函数过滤,禁用 union,database,user 等。
Web服务器指纹识别
- Http指纹识别的原理:记录不同服务器对Http协议执行中的微小差别进行识别。
- Http指纹识别比TCP/IP堆栈指纹识别复杂许多,理由是定制Http服务器的配置文件、增加插件或组件使得更改Http的响应信息变的很容易,这样使得识别变的困难;然而定制TCP/IP堆栈的行为需要对核心层进行修改,所以就容易识别。
Web盗窃
HTTP指纹识别是为了判断服务器的版本,从而找到服务器的漏洞。而Web盗窃的目的是通过对各个网页页面源码的详细分析,找出可能存在于代码、注释或者设计中的关键缺陷和脆弱点,以此来确定攻击的突破点。
盗窃web服务器的两种方法:逐页手工扫描和自动扫描。
欺骗攻击
- ARP欺骗网页劫持
- DNS欺骗网站重定向
- 网络钓鱼
ARP欺骗(另见嗅探章节)
-
ARP欺骗攻击是利用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中缓存一条伪造的解析记录。
网络钓鱼
- 网络钓鱼是一种电子信息欺骗,攻击者创造了一个完整的令人信服的Web世界,但实际上它却是一个虚假的复制。
- 虚假的Web看起来十分逼真,它拥有相同的网页和链接。然而攻击者控制着这个虚假的Web站点,这样受害者的浏览器和Web之间的所有网络通信就完全被攻击者截获。
- 例如:
- 假网站 www.icbc.com.cn –> www.1cbc.com.cn;相似网页、链接、图像;
- 二维码钓鱼;
- 网络身份欺诈;
- 反钓鱼:
- 间接方法:检测、过滤垃圾邮件、恶意软件、木马;网站信誉度排名;基于认证的方法:网页认证、邮件认证、双重认证
- 直接检测钓鱼:域名黑白名单、网址数据挖掘、基于网页内容及搜索引擎、主动及基于视觉的方法、寻找被假冒的目标网站、检测基于Unicode的欺诈
网页验证码
验证码技术属于人机区分问题,这在英文中称为 CAPTCHA,它是是Completely Automated Public Turing Test to Tell Computers and Humans Apart(全自动区分计算机和人类的图灵测试)的简称。
验证码技术的主要思想是必须通过人为参与完成信息提交过程,并且对验证码字体和背景做了相关处理。
验证码的类型
- 文本验证码:在网页上以文本形式呈现给用户;
- 手机验证码:用户在网页上提交自己的手机号码,系统以短信形式将验证码发送到用户手机上;
- 邮件验证码:用户在网页上提交自己的电子邮箱,系统以e-mail形式将验证码发送到用户的邮箱中;
- 图片验证码:又称“验证水印”,在网页上以图片形式呈现给用户。
基于验证码的表单提交流程
为了防止攻击者利用程序自动注册、登录、发帖,验证码技术日益得到广泛的应用。
基于验证码的表单提交流程:
文件上传攻击
文件上传漏洞简介
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者 WebShell 等。 可参考学习的另一个博客笔记
这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
文件上传绕过方法
- 前端JS绕过
- 文件名过滤绕过
- 文件名大小写绕过黑名单检查
- 名单列表绕过:用黑名单里没有的名单进行绕过,例如 php3、php5、cdx、asa 等
- Content-Type过滤绕过
文件上传漏洞防御
- 使用白名单限制文件上传的类型。
- 对上传文件进行随机重命名。
- 限制文件扩展名不允许用户自定义。
- 对文件上传的文件夹进行权限限制,去掉脚本的执行权限。
- 对文件的内容进行恶意代码的检测。
文件包含攻击
文件包含漏洞
-
文件包含是指网页服务器执行脚本文件时,可以通过一些包含函数加载另一个文件中的代码来解析执行,从而为网页开发者节省大量的时间。
- Exp. 创建一个供所有网页引用的标准页眉页脚或菜单文件,当网页页眉或菜单需要更新时,只需要在网页上更新一句有包含文件的代码即可。
-
程序员一般会把重复使用的函数写到单个文件中,需要使用该函数时直接调用,而无需再次编写。
-
由于程序员未对文件包含函数的包含文件参数进行严格的验证和过滤,而导致的用户可以控制参数,进一步可能包含非预期文件。如果包含的文件中存在恶意代码,可以是木马,病毒,恶意脚本或者 WebShell 等,无论文件是什么后缀,文件内的恶意代码都会被解析执行。
Scene
1
2
3
4
5
6
7
8
9
10
11
12
13
# 在一个网站中,存在三个网页文件
# Index.php, LFI.php, phpinfo.php
# index存在文件包含功能
<?php
$filename=$_GET['page'];
include($filename);
?>
<?php
echo "hello, world";
?>
<?php
phpinfo();
?>
正常情况
文件包含恶意文件
- page 参数是可控的,例如我们可以把 phpinfo.php 修改成 phpinfo.jpg
Burp Suite 工具
Burp Suite是一款广泛使用的网络安全测试工具,主要用于Web应用程序的安全测试。它由PortSwigger公司开发,提供了一系列功能,包括:
- 代理:可以拦截和修改HTTP/S请求和响应,帮助安全测试人员分析和测试Web应用的行为。
- 扫描器:自动扫描Web应用程序中的常见安全漏洞,如SQL注入、跨站脚本(XSS)等。
- 爬虫:自动爬取Web应用,发现隐藏的页面和功能。
- Intruder:用于进行自动化攻击,如暴力破解和参数篡改。
- Repeater:可以手动修改和重发HTTP请求,便于测试特定的请求。
中国菜刀工具
中国菜刀(China Chopper)是一款常见的Web木马工具,主要用于攻击和控制Web服务器。它的功能包括:
- 远程控制:攻击者可以通过菜刀对被攻陷的服务器进行远程控制,执行命令、上传/下载文件等。
- Web Shell:菜刀通常以Web Shell的形式存在,允许攻击者通过Web界面与服务器进行交互。
- 信息收集:可以收集服务器的敏感信息,如数据库信息、文件结构等。
中国菜刀通常被黑客用于非法入侵和攻击,属于网络攻击工具,使用它进行未授权的操作是违法的。
文件包含攻击的防御方法
-
使用白名单限制文件包含的参数。
-
修改配置文件将open_basedir的值设置为固定的可包含文件目录。
open_basedir=/var/www/html
-
检查allow_url_include 的修改。
……
命令执行攻击
命令执行漏洞
-
Web应用程序的某些功能需要调用一些可以执行系统命令的函数时,如果函数或者函数的参数能被用户控制,就能将恶意命令拼接到正常的命令中,从而随意地执行系统命令,实现getshell。
-
命令执行漏洞是高危漏洞之一。
防御方法
- php 配置文件里禁用敏感函数。(导致可用函数不足)
- 使用过滤函数 escapeshellarg 处理 shell 命令里使用的参数。(导致可用命令不足)
1
2
3
4
<?php
$ip = $_GET['ip'];
system("ping -c 3 ".escapeshellarg($ip));
?>
中间件攻击
中间件攻击(Man-in-the-Middle,简称MITM)是一种网络攻击手段,攻击者通过各种手段插入到通信双方之间,窃听、篡改或伪造通信内容,进而实现攻击目的。
什么是中间件?
中间件是一种独立的系统软件服务程序,分布式应用软件系统中各个软件组件之间的连接器。它使用系统软件和硬件,来为应用软件提供运行和管理时所需的网络服务。常见的中间件有:
- Web服务器: Apache, Nginx, IIS等
- 应用服务器: Tomcat, JBoss, WebLogic等
- 数据库服务器: MySQL, Oracle, SQL Server等
中间件攻击的常见形式
- SQL注入: 通过构造特殊的SQL语句,攻击者可以读取、修改或删除数据库中的数据。
- 跨站脚本攻击(XSS): 攻击者将恶意脚本注入到网页中,当用户访问该页面时,恶意脚本就会执行。
- 远程代码执行(RCE): 攻击者可以通过漏洞执行任意代码,获得服务器的控制权。
- 目录遍历: 攻击者可以访问服务器上的任意文件或目录。
- 文件上传漏洞: 攻击者可以上传恶意文件,如WebShell,从而获取服务器的控制权。
- 配置错误: 中间件的错误配置,如弱口令、开放不必要的端口等,也会导致攻击。
中间件攻击的危害包括:
- 数据泄露:攻击者可以截获敏感信息,如密码、信用卡号等。
- 身份盗窃:攻击者可以伪造用户的身份,进行恶意活动。
- 财务损失:攻击者可以通过伪造的交易,导致用户财务损失。
- 系统控制: 攻击者可以控制服务器,进行进一步的攻击或破坏。
- 拒绝服务: 攻击者可以通过消耗系统资源,导致系统无法正常服务。
防御中间件攻击的方法包括:
- 使用安全的通信协议:如HTTPS、SFTP等。
- 验证服务器身份:通过检查SSL证书等方式,确保连接到正确的服务器。
- 输入验证: 对用户输入进行严格的过滤和验证,防止注入攻击。
- 使用加密技术:如VPN、加密邮件等。
- 及时更新: 及时更新中间件和相关组件的补丁,修复已知的漏洞。
- 提高安全意识:用户应注意网络安全,避免连接到可疑的Wi-Fi热点或访问可疑的网站。
案例
- IIS漏洞-PUT上传漏洞
- IIS是由微软公司提供的基于运行microsoft windows的互联网基本服务。
- 产生原因
- Web服务扩展,webDAV功能开启
- 网站主目录允许写入
- 攻击:
- 利用 IIS 的 PUT 上传一个一句话木马 txt 文件到主目录
- 利用MOVE命令把txt内容覆盖到主目录里原本就有的asp文件里
- Jboss漏洞-弱口令
- Jboss 是基于 J2EE 的开源应用服务器。广泛用于 JSP 网站的部署
- JbossWeb console 控制台如果存在弱口令,攻击者可以通过弱口令进入后台,通过部署 Jboss 的WAR包,上传木马
- 攻击”
- 通过弱口令进入 jboss deployment 部署后台
- 找到 addURL
- 上传带有木马的 WAR 网站包(exp. cmd.jsp 为一句话木马文件)
- Tomcat弱口令
- 与 Jboss 一样,Tomcat存在后台管理功能,如果存在弱口令,攻击者就可以通过弱口令进入后台,通过部署 WAR 包功能上传木马。
验证码技术攻击
基于表单自动提交的HTTP攻击:根据HTTP协议,攻击者可以编写程序模拟表单提交的方式,将非正常的数据向网站服务器自动、快速提交,这就构成了基本的基于表单自动提交的HTTP攻击。
没有验证码后果:
- 攻击者可以在短时间内注册大量的Web服务账户。(注册机?)
- 攻击者可以通过反复登录来暴力破解用户密码,导致用户隐私信息的泄漏;
- 攻击者可以在论坛中迅速发表成千上万的垃圾帖子,严重影响系统性能,甚至导致服务器崩溃;
- 攻击者可对系统实施SQL注入或其它脚本攻击,从而窃取管理员密码,查看、修改服务器本地文件,对系统安全造成极大威胁。
👉 对验证码的要求:用户可以收到并了解验证码且攻击者的自动程序无法了解验证码。
攻击方式
- OCR(光学字符识别)攻击:攻击者使用OCR技术识别验证码中的字符,从而自动填写验证码。
- 机器学习攻击:攻击者使用机器学习算法训练模型,识别验证码中的模式,从而破解验证码。
- 人工智能攻击:攻击者使用人工智能技术,模拟人类行为,识别验证码中的字符或模式。
- 验证码代理攻击:攻击者使用代理服务器或VPN,绕过验证码系统的IP限制,从而实现验证码的重复使用。
- 验证码重放攻击:攻击者记录验证码的音频或视频,然后重放给验证码系统,从而绕过验证码的验证。
防御
PKI(Public-key infrastructure)
X.509 定义 PKI 为:创建、管理、存储、发布和撤消基于公钥密码系统的数字证书所需要的硬件、软件、人和过程的集合。
- 基于非对称密钥系统的一套安全体系
- 基于数字证书的身份验证
- 基于对称密钥的数据保护
- 该体系建立在统一的安全认证和规范基础上
- PKI从技术上解决网上身份认证、信息完整性、抗抵赖等安全问题
- 为网络应用提供保证
证书(certificate),有时候简称为 cert
- PKI 适用于异构环境中,所以证书的格式在所使用的范围内必须统一
- 证书是一个机构颁发给一个安全个体的证明,所以证书的权威性取决于该机构的权威性
- 一个证书中,最重要的信息是个体名字、个体的公钥、机构的签名、算法和用途
- 签名证书和加密证书分开
- 最常用的证书格式为 X.509 v3
X.509证书格式
证书包括了:证书的版本信息、证书的序列号(在CA内部唯一)、证书所使用的签名算法、证书的发行机构名称(一般采用X.509格式)、证书的有效期(一般采用UTC时间格式)、证书所有人的名称、证书所有人的公钥信息(算法、参数、密钥)、证书发行者的签名
SET协议
SET(Secure Electronic Transaction,安全电子交易)是由Visa和MasterCard等公司在1996年联合开发的一种用于保障电子商务交易安全的协议。SET协议利用了公钥基础设施(PKI)来提供安全的支付环境,确保在线交易的保密性、完整性和真实性。
SET的主要特点和功能
- 保密性:使用加密技术保护交易数据,确保只有授权方能够访问和解读信息。
- 完整性:通过数字签名和哈希函数,确保交易数据在传输过程中不被篡改。
- 认证:利用数字证书验证交易各方的身份,确保交易的合法性和可靠性。
- 不可否认性:通过数字签名,确保交易各方不能否认自己进行的交易操作。
SET的工作流程
- 商户注册:商户向支付网关注册,并获得商户证书。
- 客户注册:客户向发卡银行注册,并获得客户证书。
- 订单发送:客户在商户网站上选择商品并下订单,订单信息被加密并发送给商户。
- 支付授权:商户将订单信息和支付请求发送给支付网关,支付网关验证客户和商户的证书,并向发卡银行请求支付授权。
- 支付确认:发卡银行验证客户的账户信息,并返回支付授权结果给支付网关。
- 交易完成:支付网关将支付结果通知商户,商户完成订单处理并通知客户。
SET的优点
- 高安全性:利用PKI技术,确保交易的各个环节都受到保护。
- 标准化:作为一种标准协议,SET被多个支付机构和商户广泛接受和使用。
- 多方认证:通过多方认证机制,确保交易各方的身份真实性。
SET的缺点
- 复杂性:SET协议较为复杂,实施和维护成本较高。
- 性能问题:由于涉及多次加密和解密操作,可能会影响交易的处理速度。
尽管SET协议在安全性方面有显著优势,但由于其复杂性和实施成本较高,未能广泛普及。近年来,其他支付安全协议和技术(如3D Secure、SSL/TLS等)逐渐成为主流。
防火墙
防火墙的基本原理
- 防火墙是位于两个(或多个)网络间实施网间访问控制的一组组件的集合
- 它满足以下条件
- 内部和外部之间的所有网络数据流必须经过防火墙
- 只有符合安全政策的数据流才能通过防火墙
- 防火墙自身对渗透(penetration)是免疫的
防火墙的分类
- 按技术分类:
- 包过滤防火墙(又可以分为静态、动态包过滤防火墙)
- 代理型防火墙
- 电路级网关
- 混和型防火墙
- 按照使用对象分类可分为个人防火墙和企业防火墙
- 个人防火墙一般以软件服务的形式实现,它为个人计算机提供简单的防火墙功能。个人防火墙可能会随操作系统附带,价格较低。
- 企业防火墙指的是隔离在本地网络与外界网络之间的一道防御系统。企业防火墙可以使企业内部局域网(LAN)网络与Internet之间或者与其他外部网络互相隔离、限制网络互访用来保护内部网络。实现形式:软件、硬件。
防火墙的配置方案
-
最简单的防火墙配置,就是直接在内部网和外部网之间加装一个包过滤路由器或者应用网关。为更好地实现网络安全,有时还要将几种防火墙技术组合起来构建防火墙系统。
-
目前比较流行的有以下三种防火墙配置方案:
-
双宿主机模式
双宿主主机通过用户直接登录到双宿主主机上来提供服务,从而需要在双宿主主机上开许多帐号,这是很危险的:
a. 用户帐号的存在会给入侵者提供相对容易的入侵通道,每一个帐号通常有一个可重复使用口令(即通常用的口令,和一次性口令相对),这样很容易被入侵者破解。破解密码可用的方法很多,有字典破解、强行搜索或通过网络窃听来获得。
b. 如果双宿主主机上有很多帐号,管理员维护起来是很费劲的。
c. 支持用户帐号会降低机器本身的稳定性和可靠性。
d. 因为用户的行为是不可预知的,如双宿主主机上有很多用户帐户,这会给入侵检测带来很大的麻烦。
-
屏蔽主机模式
在这种模式下,一个包过滤路由器连接外部网络,堡垒主机安装在内部网络上:
-
屏蔽子网模式
采用了屏蔽子网体系结构的堡垒主机不易被入侵者控制,万一堡垒主机被控制,入侵者仍然不能直接侵袭内部网络,内部网络仍受到内部过滤路由器的保护。在这一配置中,即使堡垒主机被入侵者控制,内部网仍受到内部包过滤路由器的保护。这种结构的防火墙安全性能高,具有很强的抗攻击能力,但需要的设备多,造价高。
-
入侵检测系统
入侵检测的概念
入侵检测通过从计算机网络或计算机系统的关键点收集信息并进行分析,从中发现网络或系统中是否有违反安全策略的行为和被攻击的迹象。入侵检测的内容:试图闯入、成功闯入、冒充其他用户、违反安全策略、合法用户的泄漏、独占资源以及恶意使用。
入侵检测系统(IDS):入侵检测的软件与硬件的组合,是防火墙的合理补充,是防火墙之后的第二道安全闸门。
入侵检测系统的组成主要有采集模块、分析模块和管理模块。
- 采集模块主要用来搜集数据,供入侵检测系统进行分析;
- 分析模块完成对数据的解析,给出怀疑值或作出判断;
- 管理模块主要功能是作决策和响应。
- 为了更好地完成入侵检测系统的功能,系统一般还有数据预处理模块、通信模块、响应模块和数据存储模块等。
根据数据来源的不同,入侵检测系统常被分为基于网络的入侵检测系统和基于主机的入侵检测系统。
基于网络的入侵检测(NIDS)
数据来源于网络上的数据流,基于网络的入侵检测能够截获网络中的数据包,提取其特征并与知识库中已知的攻击签名相比较,从而达到检测的目的。
-
优点是侦测速度快、隐蔽性好,不容易受到攻击、对主机资源消耗少;
-
缺点是有些攻击是由服务器的键盘发出的,不经过网络,因而无法识别,误报率较高。
基于主机的入侵检测系统(HIDS)
数据来源于主机系统,通常是系统日志和审计记录。基于主机的入侵检测系统通过对系统日志和审计记录的不断监控和分析来发现攻击后的误操作。
- 优点是针对不同操作系统捕获应用层入侵,误报少;
- 缺点是依赖于主机及其审计子系统,实时性差。
分布式入侵检测系统(DIDS)
同时采用上述两种数据来源,能够同时分析来自主机系统审计日志和网络数据流的入侵检测系统,一般为分布式结构, 由多个部件组成。
分布式入侵检测系统可以从多个主机获取数据也可以从网络传输取得数据,克服了单一的HIDS、NIDS的不足。
探测器
-
由过滤器、网络接口引擎器以及过滤规则决策器组成。
-
功能:按一定规则从网络获取与安全事件相关的数据包,传递至分析引擎器进行安全分析判断。
分析引擎器
- 将由探测器上接收到的包结合网络安全数据库进行分析。
- 将分析结果传递给配置构造器。
- 分析引擎器是它的一个重要部件,用来分析网络数据中的异常现象或可疑迹象,并提取出异常标志。分析引擎器的分析和判断决定了具有什么样特征的网络数据流是非正常的网络行为。
安全配置构造器
根据分析引擎器结果构造出探测所需的配置规则。
入侵检测的设计准则
设计准则:
- 其配置结束后可以自我运行。
- 工作时必须时刻保持积极的工作状态且自身不易被攻击。
- 能够识别系统不常见的行为,每一个入侵检测系统都会遗漏一些异常行为,不过一个好的系统能够尽可能多得发现入侵行为。
- 系统运行要尽可能减少对正常工作的影响。
- 系统必须可控,可调试。
入侵检测的检测机理
入侵检测系统的检测机制一般可以分为三种:基于异常的检测机制,基于特征的检测机制,以及两者混合的检测机制。
-
基于异常的检测机制
基于异常的检测,通过将系统或用户行为与正常行为进行比较来判别是否为入侵行为,通常会首先给出一个系统正常行为的特征列表,即“白名单”列表。然后将系统或用户行为特征和“白名单”中的行为特征进行比较,如果匹配,则判定系统或用户的行为是正常行为,否则,判定系统或用户的行为是入侵行为。
基于异常的检测,通过将系统或用户行为与正常行为进行比较来判别是否为入侵行为,通常会首先给出一个系统正常行为的特征列表,即“白名单”列表。然后将系统或用户行为特征和“白名单”中的行为特征进行比较,如果匹配,则判定系统或用户的行为是正常行为,否则,判定系统或用户的行为是入侵行为。
-
基于特征的检测机制
不同于异常检测,特征检测假定每个入侵行为都能够用一个独特的模式或特征所代表,因此在系统中建立异常行为的特征库,然后将系统或用户的行为与特征库进行比较。若特征相互匹配,则判定系统或用户的行为是入侵行为,若不能匹配,则判定系统或用户行为是正常行为。
-
基于上述两者混合的检测机制
- 使用结合上述两种方法的分布式方法来检测分布式的攻击,关键技术为检测信息的协同处理。
- 解决异构系统及大规模网络的入侵检测,发展分布式入侵检测技术与通用入侵检测架构。
其他防御技术
-
入侵检测系统
-
虚拟专用网VPN技术
-
虚拟专用网(Virtual Private Network 简称 VPN)是利用接入服务器、路由器及 VPN 专用设备、采用隧道技术以及加密、身份认证等方法,在公用的广域网(包括 Internet、公用电话网、帧中继网及 ATM 等)上构建专用网络的技术,在虚拟网上数据通过安全的“加密隧道”在公众网络上传播。
- 对用户来讲,公众网络起到了“虚拟专用”的效果,用户觉察不到他在利用公用网获得专用网的服务。通过VPN,网络对每个使用者都是“专用”的。
- 远程访问虚拟专用网
- 远程访问虚拟专用网通过公用网络与企业的 Intranet 和因特网建立私有的网络连接。利用了二层网络隧道技术在公用网络上建立了 VPN 隧道来传输私有网络数据。
- 远程访问虚拟专用网的结构有两种类型:一种是用户发起的 VPN 连接;另一种是接入服务器发起的 VPN 连接。
- 企业内部虚拟网
- 企业扩展虚拟专用网
- 安全隧道技术:隧道是一种通过因特网在网络之间传递数据的方式。通过将待传输的原始信息经过加密和协议封装处理后再嵌套装入另一种协议的数据包送入网络中,像普通数据包一样进行传输。到达另一端后被解包。VPN 中,一种是端到端的隧道,主要实现个人主机之间的连接,端设备必须完成隧道的建立,对端到端的数据进行加密和解密;另一种是节点到节点的隧道,主要用于连接不同地点的 LAN,数据到达 LAN 边缘 VPN设备时被加密并传送到隧道的另一端,在那里被解密并送入相连的 LAN。
- 加密技术:使用的加密算法可以是对称密钥算法,也可以是公共密钥算法
- 用户身份认证技术
- 访问控制技术
- VPN涉及三种协议:乘客协议——被封装的协议,如 PPP、SLIP;封装协议——也称为隧道协议,用于隧道的建立、维持和断开,如第2层隧道协议 PPTP(Point to Point Tunneling Protocol)、L2TP(Layer2 Tunneling Protocol),第2层隧道协议IPSec等;承载协议——承载经过封装后的数据包的协议,如 IP 和 ATM 等
-
-
日志与审计
-
蜜罐技术与取证
网络攻击溯源
追踪溯源技术大体可分为定位伪造地址的IP追踪技术、跳板攻击溯源技术和针对匿名通信系统的追踪溯源技术三类。
- IP追踪技术可追踪采用伪造地址的数据包的真实发送者,分为反应式追踪和主动式追踪两大类。攻击者常常采用采用伪造的IP地址对目标发起攻击,给攻击源追踪制造了极大难度。
- 针对跳板攻击溯源技术
-
网络攻击者为隐藏身份和防止源追踪的另一个常用手段是使用跳板:通过使用事先控制的一系列中间节点对目标实施攻击,致使追踪者跟踪到的是最后一个跳板,而难以追溯到攻击者本身。
-
为更有效地躲避追踪,攻击者还往往在跳板处主动对其产生的交互流量进行加密、包重组(Repacketization)和添加时间扰乱(Timing Perturbation)与垃圾包(Chaff Packet)等干扰。
-
为追溯和定位跳板链后的真正攻击源,按照溯源时所用信息源的不同,跳板攻击溯源技术可分为基于主机的溯源方法和基于网络的溯源方法。
-
基于主机的溯源方法主要有分布式入侵检测系统(DIDS)、呼叫识别系统(CIS)、Caller ID和会话令牌协议(STOP)。
a. DIDS是一种监控网络中多个主机的安全系统。它通过在多个主机上部署传感器来收集安全相关的数据,并将这些数据汇总到中央分析器中,以便进行更深入的分析和更快的响应。DIDS能够检测到针对单独主机的入侵,同时也可以检测到针对整个网络上的主机的入侵 。
b. CIS使用分布模型来代替DIDS的中心控制机制,登陆录链上的每一台主机都保存着相关记录。当用户由第n-1台主机登陆录第n台主机时,第n台主机会请求第n-1台主机关于该用户的登陆录链的相关记录,在理想情况下会依此追溯到最初的主机。然后第n台主机会查询第1至n-1台主机上有关此登陆录链的相关信息。只有所有查询到的信息能够匹配,才允许其登陆录第n台主机。
c. 类似于电话系统中的来电显示,网络中的Caller ID可以提供网络连接的源信息。如果某个攻击者通过一系列的跳板侵入了一台主机,那么,Caller ID将利用相同的攻击策略沿攻击路径相反方向回溯攻击,直至定位攻击源。
d. STOP协议通过在网络会话中使用令牌来增强安全性。STOP服务器应下游主机请求,通过带外连接保存用户级和应用级数据,这些数据用于取证调查之用。请求可递归传递给上游主机,以此实现追踪跳板链的功能。
-
基于网络的溯源方法一般依据网络连接的属性进行溯源,主要有基于偏差(Deviation)的方法、基于网络的反应式方法和流关联技术等。
a. 基于偏差的方法使用两个TCP连接序列号的最小平均差别来确定两个连接是否关联,偏差既考虑了时间特征又考虑了TCP序列号,与TCP负载无关,但无法直接用于加密或压缩的连接。
b. 基于网络的反应式方法对数据包处理时是主动干预的, 从而动态地控制哪些连接何时何地怎样被关联,因此需要比被动方法更少的资源,典型代表是入侵识别和隔离协议IDIP。
c. 流关联技术通过分析网络流量的流向和特征来关联不同的网络活动。这可以帮助识别和追踪跨多个网络点的复杂攻击。例如,通过分析数据包的时间戳、大小和目的地,可以确定它们是否属于同一次攻击的一部分。分为主动和被动。
-
-
-
针对匿名通信系统的追踪溯源技术
匿名通信系统 如Onion Routing、Tor、Tarzan、MorphMix 和 Crowds 等
- 协议脆弱性攻击
- 流量分析攻击
网络安全模型
APPDRR模型就是动态安全模型的代表,隐含了网络安全的相对性和动态螺旋上升的过程。
- 该模型由6个英文单词的首字符组成:风险评估(Assessment)、安全策略(Policy)、系统防护(Protection)、安全检测(Detection)、安全响应(Reaction)和灾难恢复(Restoration)。
通过这六个环节的循环流动,网络安全逐渐地得以完善和提高,从而达到网络的安全目标。
本课程实验
- Wireshark嗅探工具使用
- Nmap扫描工具使用
- 拒绝服务攻击实验
- 缓冲区溢出攻击实验
- 欺骗攻击实验
- WEB应用攻击实验