20159313网络攻击与防范第九周学习总结
网络攻防课本第九章总结#
1.恶意代码定义##
恶意代码指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。首先恶意代码是一组指令集,恶意代码的实现方式可以多种多样,如二进制执行文件、脚本语言代码、宏代码,或是寄生在其他代码或启动扇区中的一段指令流。其次,恶意代码的执行目标是由编写者所决定的,满足他们心理上或利益上的一些需求。典型的攻击目标包括但不局限于:单纯的技术炫耀,或恶作剧、远程控制被攻击主机,使之能为攻击者的傀儡主机,满足其实施跳板攻击或进一步传播恶意代码的需要、窃取私人信息或机密信息、窃取计算、存储、带宽资源、拒绝服务、进行破坏活动。
2.恶意代码类型##
恶意代码可以根据其执行方式、传播方式和对攻击目标的影响分为计算机病毒、蠕虫、恶意移动代码、特洛伊木马、后门、僵尸程序、内核套件等。计算机病毒是最早出现的恶意代码类型。计算机病毒:一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。蠕虫:是一类自主运行的恶意代码,并不需要将自身嵌入到其他宿主程序中。恶意移动代码:属于移动代码的范畴,移动代码是指可以从远程主机下载并在本地执行的轻量级程序。后门:一类能够绕开正常的安全控制机制,从而为攻击者提供访问途经的一类恶意代码。特洛伊木马:一类伪装成有用的软件,但隐藏其恶意目标的恶意代码。僵尸网络:攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的攻击网络。僵尸程序:用于构建僵尸网络以形成一对多控制攻击平台的恶意代码形态。内核套件:在用户态通过替换或修改系统关键可执行文件,或者在内核态通过控制操作系统内核,用以获取并保持最高控制权的一类恶意代码,又分为用户态Rootkit和内核态Rootkit两种。
3.恶意代码的命名规则与分类体系##
反病毒业界普遍采用“三元组命名”规则来对所发现的恶意代码新样本来进行命名,这里的“三元组”是指恶意代码的类型、家族名称和变种号,一般形式为:[恶意代码类型.]恶意代码家族名称[变种号]。
4.恶意代码的发展趋势##
①恶意代码的复杂度和破坏力不断增强②恶意代码技术的创新越来越频繁③关注重点从计算机病毒转移到蠕虫和内核级的攻击工具。
5.计算机病毒##
计算机病毒的概念在1983年由Fred Cohen首次提出。我国对计算机病毒的具有法规效力的定义:计算机病毒是指编制或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码。
6.计算机病毒基本特性##
(1)感染性(2)潜伏性(3)可触发性(4)破坏性(5)衍生性。
7.计算机病毒的感染及引导机制##
计算机病毒需要将自身嵌入到一个宿主程序上才能运行,而感染的方式也决定了计算机病毒如何从宿主程序上被引导运行的方式,因此计算机病毒的感染和引导机制是紧密相关的。计算机病毒潜在的感染目标可分为可执行文件(三种对可执行文件的感染方式包括前缀感染机制、后缀感染机制和插入感染机制)、引导扇区和支持宏指令的数据文件三大类。
8.计算机病毒的传播机制##
计算机病毒的传播渠道包括移动存储、电子邮件及下载、共享目录等。
9.网络蠕虫##
一种通过网络自主传播的恶意代码。从定义本质分析,网络蠕虫是一种可以自我复制的代码,并且通过网络传播,通常无须人为干预就能传播。蠕虫正是因为具有快速主动传播的定义特性,因而能够对整个互联网造成瘫痪性的危害后果,也被称为“互联网时代的瘟疫”。1988年11月的Morris蠕虫由于其广泛的知名度和影响力,被誉为“第一个互联网蠕虫”。SQL Slammer蠕虫是有史以来传播速度最快的网络蠕虫。
10.网络蠕虫的基本特性##
网络蠕虫的定义特性在于通过网络的自主传播,如果一个代码不通过网络传播,那么它就不是蠕虫。
11.网络蠕虫的组成结构##
蠕虫的内部组件类似于导弹这种战争武器中的一些部件,弹头用来穿透目标,传播引擎驱动导弹飞向它的目标,目标选择算法和扫描引擎很像导弹中的小型回转仪,可以引导导弹发现和指向它的目标,有效载荷仓中则携带了执行真正破坏性攻击的恶性材料。
12.蠕虫获取目标系统访问权最常用的技术如下##
(1)缓冲区溢出攻击(2)文件共享攻击(3)利用电子邮件传播(4)利用其他普遍错误配置。
13.传播引擎##
传播引擎通常利用的网络传输机制包括文件传输协议FTP、小文件传输协议TFTP、超文本传输协议HTTP、服务信息块协议SMB以及原始SOCKET套接字等。
14.蠕虫可以选择如下所列的多种不同目标选择算法##
电子邮件地址、主机列表、被信任的系统、网络邻居主机、域名服务、通过特定规则任意选择IP目标地址。
15.有效载荷##
蠕虫的有效载荷就是附加的攻击代码。蠕虫常常携带的有效载荷包括如下:植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂的计算。
16.后门与木马##
从定义特性上分析,后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图通过访问通道;而木马是指一类看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
17.后门工具能够为攻击者提供多种不同类型的访问通道包括##
(1)本地权限提升和本地账号(2)单个命令的远程执行(3)远程命令行解释器访问(4)远程控制GUI(5)无端口后门。后门工具往往都利用了系统的自启动功能,将自身加入到系统重启机制中。在Windows平台中,后门工具可以利用自启动文件夹、注册表自启动项及预定计划任务这三种主要方法来达到自启动的效果。
18.特洛伊木马##
特洛伊木马的命名起源于《荷马史诗》中描述的特洛伊战争。特洛伊木马程序可以用于以下目的:(1)欺骗用户或系统管理员安装特洛伊木马程序,这样木马程序就通过毫无戒备的用户进入到计算机系统中;(2)隐藏在计算机的正常程序中,将自己伪装成看起来属于该系统,使得用户和管理员不会察觉到它的存在,通常与后门工具结合,成为木马后门。命名伪装常用的攻击技巧有混淆文件扩展名,模仿Windows系统文件或服务命名等。攻击软件发布站点可以使得攻击者能够将官方站点上的软件进行木马化,从而使下载者都安装一个植入了恶意代码的版本,能够对成千上万甚至是数百万的用户构成威胁。代码下毒是指攻击者在软件厂商的开发和测试软件的过程中植入一些与软件功能无关的程序逻辑,甚至于恶意代码。
19.僵尸程序与僵尸网络##
僵尸网络是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。僵尸网络区别于其他攻击方式的基本特性是使用一对多的命令与控制机制,另外,僵尸网络还具有恶意性和网络传播性。
20.僵尸网络的功能结构##
最早出现的IRC僵尸网络由僵尸网络控制器和僵尸程序两部分组成。僵尸程序的功能组成结构可以分为主体功能模块和辅助功能模块,主体功能模块包括实现僵尸网络定义特性的命令与控制模块和实现网络传播特性的传播模块,而包含辅助功能模块(由信息窃取模块、主机控制模块、下载更新模块和防分析检测模块构成)的僵尸程序则具有更强大的攻击功能和更好的生存能力。主体功能模块中的命令与控制模块是整个僵尸程序的核心。僵尸程序可以按照传播策略分为自动传播型僵尸程序和受控传播型僵尸程序两大类,而僵尸程序的传播方式包括通过远程攻击软件漏洞传播、扫描NetBIOS弱密码传播、扫描恶意代码留下的后门进行传播、通过发送邮件病毒传播、通过文件系统共享传播等。辅助功能模块是对僵尸程序除主题功能外其他功能的归纳,主要包括信息窃取、僵尸主机控制、下载与更新和躲避检测与对抗分析等功能模块。
21.僵尸程序的命令与控制机制##
僵尸网络的基本特性是使用一对多的命令与控制机制,因此,理解命令与控制机制的实现是深入了解僵尸网络机理的必要前提。当前主流使用的僵尸网络命令与控制机制包括:基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制和基于P2P协议的命令与控制机制这三大类。IRC网络中最为普遍使用的一种通信方式是群聊方式。基于IRC协议,攻击者向受控僵尸程序发布命令的方法有三种:设置频道主题命令,使用频道或单个僵尸程序发送PRIVMSG消息,通过NOTICE消息发送命令。IRC僵尸网络中发送的命令按照僵尸程序对应实现的功能模块可以分为僵尸网络控制命令、扩散传播命令、信息窃取命令、主机控制命令和下载与更新命令。其中主机控制命令还可以细分为发动DDoS攻击、架设服务、发送垃圾邮件、单击欺诈等。使用HTTP协议构建僵尸网络命令与控制机制的优势有两方面:首先,使用HTTP协议构建控制信道可以让僵尸网络控制流量湮没在大量的互联网Web通信中,从而使得基于HTTP协议的僵尸网络活动更难被检测;另外,使用HTTP协议构建控制信道一般都可以绕过防火墙。基于IRC协议和HTTP协议的命令与控制机制均具有集中控制点,这使得这种基于客户端-服务器架构的僵尸网络容易被跟踪、检测和反制。
22.Rootkit##
Rootkit的定义是一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。Rootkit需要由众多的功能组件所组成,包括替换操作系统软件用于隐藏自身的恶意程序,实现隐藏性后门访问的后门程序,还有各种辅助工具,这些工具允许攻击者调整那些被替换程序的特征,另外,正是由于Rootkit通常是一个恶意程序工具包,因此被命名为“Root”+“kit”,即用来获得Root后门访问的kit工具包。根据操作系统的分层,Rootkit可以运行在两个不同的层次上,即用户模式和内核模式。
23.大部分UNIX用户模式Rootkit中集成的工具可以被分为如下五种不同的类型##
提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、另外一些零散的工具、安装脚本。Windows为了支持第三方工具扩展Windows的内置功能特性,提供了一些开发接口。Windows使用了WFP机制来防止操作系统关键文件被修改或替换。用户模式Rookit还可以使用DLL注入和API挂钩技术把恶意代码直接加入运行程序的内存空间中。
24.攻击者之所以选择对内核动手具有以下几方面原因##
首先,由于内核作为操作系统的核心,能够获取更为全面更加真实的底层信息,并对系统有着全面的控制能力,这有助于提升Rootkit的后门控制;其次,一旦控制内核之后,可以通过修改内核使得内核对上层正常程序的信息查询和请求时,返回已经隐藏攻击者信息的虚假情报,这使得用户和管理员即便使用外部的可信应用软件,也无法找出攻击者植入的后门,使用文件完整性检测工具也难以发现被修改的操作系统文件;最后,控制内核有助于Rootkit利用内核权限对抗一些反病毒软件,甚至可以在反病毒软件检测出Rootkit之前就使之无效化。
25.大多数内核模式Rootkit采用如下技术手段##
文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。Linux操作系统中利用LKM机制实现的内核模式Rootkit有Adore、Adore-ng、KIS等。在Windows操作系统内核中实现Rootkit也拥有多种技术方法,包括:利用恶意设备驱动程序、修改内存中当前运行的内核、覆盖硬盘上的内核镜像、在虚拟系统中配置一个内核来愚弄用户以及试图在内核级运行用户模式代码。
26.恶意代码分析技术概述##
代码分析,或称程序分析,是按需求使用一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。程序分析技术在程序理解、程序测试、程序优化和程序重构等方面都有着重要的作用。恶意代码的分析与针对良性代码和软件的程序分析都可以采用通用的代码分析技术来作为基础,主要包括静态分析和动态分析方法,来对代码进行逆向工程来确定其功能。
27.与分析良性代码相比,分析恶意代码的主要差别在于##
①你通常不能提前知道恶意代码的目的是什么,你需要像侦探一样找出恶意代码里隐藏的真相②恶意代码具有恶意的攻击目的,会对所运行的环境进行恶意的破坏,因此在恶意代码分析时需要一个受控、可恢复的环境③恶意代码分析在绝大多数情况下不会拥有待分析程序的源代码,因而需涉及二进制代码分析,其难度要比源码分析要高很多。④恶意代码目前都会引入大量各种各样的对抗分析技术,对恶意代码分析带来了很多困难和挑战。恶意代码分析的技术方法主要包括静态分析和动态分析两大类。
28.基于虚拟化构建恶意代码分析环境##
虚拟化技术可以让实验环境能够按需启动恶意代码的运行平台虚拟机镜像,并支持快速地运行镜像设置和恢复,这将大大提升资源的利用效率,以及恶意代码分析的效率。在进行恶意代码分析时,一定要保证这台包含分析环境的宿主计算机不要连接业务网络和互联网。
29.用于研究的恶意代码自动分析环境##
在恶意代码分析网段中,包括了系统主要的四类恶意代码自动化分析组件,分别为静态分析机、动态分析机、网络分析机和综合分析机。
30.恶意代码静态分析技术##
利用静态分析方法,能够对恶意代码的特性和目的有一个大体的了解,甚至能够识别出恶意代码的各个组成部分;然而利用动态分析,实际上是激活一个受控分析实验环境中的代码,当一个代码在实际系统中运行时,我们能够更加迅速地了解其行为。恶意代码静态分析的主要技术手段,具体包括反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别与代码脱壳等。进行恶意代码分析最直接的方法是使用现成的反病毒软件来扫描待分析的样本,以确定反病毒软件是否能够识别该样本,以及所识别的类型、家族、变种等信息。在面对一个未知的恶意代码样本文件时,第一步要做的工作就是对它的文件格式进行识别。在Windows平台上,二进制可执行文件EXE和DLL都是以PE文件格式组织的,而在Linux平台上,可执行文件格式则是ELF。在提取的字符串中,可能获得的用信息内容包括如下:恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关的URL信息E-mail地址、包含库文件和函数调用。在类UNIX平台上进行字符串提取的命令工具是strings。利用Strip工具来删除所有不可执行的标记性信息
31.反汇编与反编译##
反汇编与反编译是对二进制程序编译链接的逆过程,反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程,而反编译则更进一步,期望将汇编代码再进一步还原成高级编程语言形式的源代码。常用的反汇编软件有IDA Pro、Ollydbg、W32Dasm、VC++等。反编译工具则是通常针对不同高级编程语言进行单独设计和实现的。
32.代码与逻辑分析##
函数调用关系图定义为一个表示计算机程序中例程之间调用关系的有向图,每个节点表示程序内的函数,而有向边表示有向边源节点函数的调用。程序控制流图CFG是对程序代码执行过程全部路径的一种图形化表示方法。
33.加壳识别与代码脱壳##
恶意代码通常使用的加壳混淆机制包括加密、多样性、多态和变形等,加密机制一般采用固定的代码加密器来对二进制程序进行处理,而在混淆代码中一般会包含一个固定格式的解密器。加密##、多态和变形等恶意代码混淆技术通常是以恶意代码加壳的方式进行实施的。加壳工具根据所使用的技术不同,又分为压缩壳、加密壳、多态壳、变形壳和伪装壳等。
34.恶意代码动态分析技术##
恶意代码动态分析的主要技术手段具体包括快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试等。快照比对是监控恶意代码动态运行行为最简单的方法,进行快照比对的工具软件包括RegSnap、完美卸载等。
35.系统动态行为监控方法##
系统动态行为监控是目前恶意代码动态行为分析中最为核心和常用的技术步骤,针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示。系统动态行为监控通常基于行为通知机制或者API劫持技术实现。根据所监控的行为类别,系统动态行为监控软件包括如下几类:(1)文件行为监控软件(2)进程行为监控软件(3)注册表监控软件(4)本地网络栈行为监控软件。
36.网络协议栈监控方法##
对于恶意代码的网络行为,除了从恶意代码运行平台本地的网络协议栈进行监控之外,更为全面有效的监控视图是从本地网络上其他一台主机来进行。恶意代码的有些网络行为只有在分析环境符合特定条件下才能够被触发;特定的IRC僵尸程序只有连接到有效地IRC控制服务器上,并接受控制者指令后,才会实施相应的攻击动作。对于这些特定条件才能触发的网络行为,一种解决思路是使用静态分析方法对相应关注的代码段进行细致审查,理解代码中蕴含的网络行为;另一种解决思路是通过构建一个模拟网络,来包含大部分恶意代码通常所使用的网络服务和环境。
37.沙箱技术##
沙箱技术提供了受限制的执行环境,使得在沙箱中运行的代码不能够修改用户系统,从而提供了一个用于运行不可信任程序的安全环境。
38.动态调试技术##
动态调试是在程序运行时刻对它的执行过程进行调试的技术过程,恶意代码的执行过程取决于其类型。恶意代码的一个特点是运行得非常快,只能在所有活动发生以后逐个来分析记录下来的行为。而动态调试器能够以单步模式来调试恶意代码,能够一行代码接着一行代码,一个函数调用接着一个函数调用地进行恶意代码行为分析的过程,并也可以中断或者快进程序运行流程,观察恶意代码中发生的一切。
网络攻防课本第十章总结#
1.软件安全概述##
攻击者能够轻易地对系统和网络实施攻击,很大程度上是因为安全漏洞在软件中的大规模存在,攻击者可以利用这些漏洞来违背系统和网络的安全属性。大多数成功攻击都是利用和破解已公布但未被修改的软件安全漏洞或不安全的软件配置。
2.软件安全漏洞威胁##
软件自从诞生之日起,就和bug形影不离,而其中可以被攻击者利用并导致危害的安全缺陷被称为软件安全漏洞。安全漏洞的范畴则不限于软件安全漏洞,还包括硬件、个人与组织管理中存在的、能够被攻击者利用来破坏安全策略的弱点。软件安全漏洞被定义为在软件的需求规范、开发阶段和配置过程中引入的缺陷实例,其执行会违反安全策略。
3.安全漏洞##
在系统安全流程、设计、实现或内部控制中所存在的缺陷或弱点,能够被攻击者所利用并导致安全侵害或对系统安全策略的违反,包括三个基本元素:系统的脆弱性或缺陷攻击者对缺陷的可访问性,以及攻击者对缺陷的可利用性。
4.软件安全困境三要素##
复杂性、可扩展性、连通性。源代码行数是目前衡量软件规模的一个重要度量指标。每千行代码中的bug数量会在5~50个之间。正是现代可扩展软件本身的特性使得安全保证更加困难,首先,很难阻止攻击者和恶意代码以不可预测的扩展方式来入侵软件和系统,其次,分许可扩展性软件的安全性要比分析一个完全不能被更改的软件要困难得多。
5.软件安全漏洞类型##
MITRE是软件安全漏洞标准目录CVE的维护机构。软件安全漏洞类型从技术上主要包括如下几类:内存安全违规类(是在软件开发过程中在处理RAM内存访问时所引入的安全缺陷,主要出现在C/C++等编程语言所编写的软件程序中,JAVA等更现代的编程语言则通过禁用指针计算与转换,实施内存垃圾跟踪与收集等机制能够有效解决此类安全漏洞。不安全指针是指在计算机程序中存在的并没有指向适当类型对象的非法指针)、输入验证类(是指软件程序在对用户输入进行数据验证存在的错误,没有保证输入数据的正确性、合法性和安全性,从而导致可能被恶意攻击与利用输入验证类安全漏洞根据输入位置、恶意输入内容被软件程序的使用方式不同,又包含格式化字符串、SQL注入、代码注入、远程文件包含、目录遍历、XSS、HTTP Header注入、HTTP响应分割错误等多种安全漏洞技术形式)、竞争条件类(是指处理进程的输出或者结果无法预测,并依赖于其他进程事件发生的次序或时间时,所导致的错误)、权限混淆与提升类(是指计算机程序由于自身编程疏忽或被第三方欺骗,从而滥用其权限,或赋予第三方不该给予的权限。权限混淆与提升类漏洞的具体技术形式主要有Web应用程序中的跨站请求伪造、Clickjacking、FTP反弹攻击、权限提升、越狱等。越狱是指在类UNIX系统中破解chroot和jail机制,从而访问系统管理员通过chroot设置限制目录之外的文件系统内容的一种技术)。
6.缓冲区溢出的基本概念##
缓冲区溢出是计算机程序中存在的一类内存安全违规类漏洞,在计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致外溢数据覆盖了相邻内存空间的合法数据,从而改变程序执行流程破坏系统运行完整性,通常多见于C/C++语言程序中的memcpy()、strcpy()等内存与字符串复制函数的引用位置。缓冲区溢出攻击发生的根本原因,可以认为是现代计算机系统的基础构架——冯诺伊曼体系存在本质的安全缺陷,即采用了“存储程序”的原理,计算机程序的数据和指令都在同一内存中进行存储,而没有严格的分离。
7.编译器与调试器的使用##
使用C/C++等高级编程语言编写的源码,需要通过编译器和连接器才能生成可直接在操作系统平台上运行的可执行程序代码。而调试器则是程序开发人员在运行时刻调试与分析程序行为的基本工具。对于通常使用的C/C++编程语言,最著名的编译与连接器是GCC,开源的GUN Ansi C/C++编译器,GCC最基本的用法是执行“gcc –c test.c”命令进行源码编译,生成test.o,然后执行“gcc –o test test.o”进行连接,生成test可执行程序,可以使用“gcc test.c –o test”同时完成编译和连接过程。对于处理多个源码文件、包含头文件、引用库文件等多种情况,程序开发人员通常编写或自动生成Makefile,来控制GCC的编译和连接过程。类UNIX平台上进行程序的调试经常使用GDB调试器,GDB调试器提供程序断点管理、执行控制、信息查看等多种类型的功能指令。
8.汇编语言基础知识##
汇编语言,尤其是IA32构架下的汇编语言,是理解软件安全漏洞机理,掌握软件渗透攻击代码技术的底层基础。从应用的角度一般将寄存器分为4类,即通用寄存器、段寄存器、控制寄存器和其他寄存器。通用寄存器主要用于普通的算术运算,保存数据、地址、偏移量、计数值等。。段寄存器在IA32构架中是16位的,一般用作段基址寄存器。控制寄存器用来控制处理器的执行流程。其他寄存器中值得关注的是“扩展标志”eflags寄存器,由不同的标志位组成,用于保存指令执行后的状态和控制指令执行流程的标志信息。在IA32构架汇编语言中,又分为Intel和AT&T两种具有很多差异的汇编格式。在类UNIX平台下,通常使用AT&T汇编格式,而在DOS/Windows平台下,则主要使用Intel汇编格式。
9.进程内存管理##
程序在执行时,系统在内存中会为程序创建一个虚拟的内存地址空间,在32位机上即4GB的空间大小,用于映射物理内存,并保存程序的指令和数据。Linux的集成内存空间3GB以下为用户态空间,3GB-4GB为内核态空间,操作系统将可执行程序加载到新创建的内存空间中,程序一般包含.text、.bss和.data三种类型的段。Windows操作系统的进程内存空间2GB-4GB为内核态地址空间,用于映射Windows内核代码和一些核心态DLL,并用于存储一些内核态对象,0GB-2GB为用户态地址空间。
10.函数调用过程##
栈结构与函数调用过程的底层细节是理解栈溢出攻击的重要基础,因为栈溢出攻击就是针对函数调用过程中返回地址在栈中的存储位置,进行缓冲区溢出,从而改写返回地址,达到让处理器指令寄存器跳转至攻击者指定位置执行恶意代码的目的。栈是一种最基本的LIFO后进先出抽象数据结构,主要被用于实现程序中的函数或过程调用,在栈中会保存函数的调用参数、返回地址、调用者栈基址、函数本地局部变量等数据。在IA32构架寄存器中,两个与栈密切相关的寄存器为ebp和esp,分别保存当前运行函数的栈底地址和栈顶地址,而两个密切相关的指令为push和pop,分别是将数据压入栈,及将栈顶数据弹出至特定寄存器。程序进行函数调用的过程有如下三个步骤:①调用②序言③返回。
11.缓冲区溢出攻击原理##
缓冲区溢出漏洞根据缓冲区在进程内存空间中的位置不同,又分为栈溢出、堆溢出和内核溢出这三种具体技术形态。Linux系统可能会采取对抗缓冲区溢出的防范措施,因此,我们需要把这些措施取消后,才能重现基础的缓冲区溢出过程:①取消“栈上数据不可执行”保护:echo 0 > /proc/sys/kerne/exec-shield②取消“地址空间随机化”保护:echo 0 > /proc/sys/kernel/randomize_va_space③编译时取消“/GS”保护:加上gcc编译选项 –fno-stack-protecto。缓冲区溢出安全漏洞的根本问题在于用户输入可控制的缓冲区操作缺乏对目标缓冲区的边界安全保护,这其中包含两个要素,首先是程序中存在着缺乏边界安全保护的缓冲区操作,其次是这个缓冲区操作必须是用户输入可以控制的,也就是说用户的输入可以直接或者间接地影响到这个不安全的缓冲区操作函数。
12.Linux平台栈溢出攻击技术##
Linux平台中的栈溢出攻击按照攻击数据的构造方式不同,主要有NSR、RNS和RS三种模式。在Linux平台中,本地栈溢出攻击,即渗透攻击代码的攻击目标对象是本地的漏洞程序,可以用于特权提升
13.NSR模式##
NSR模式主要适用于被溢出的缓冲区变量比较大,足以容纳Shellcode的情况,其攻击数据从低地址到高地址的构造方式是一堆Nop指令之后填充Shellcode,再加上一些期望覆盖RET返回地址的跳转地址,从而构成了NSR攻击数据缓冲区。
14.RNS模式##
一般用于被溢出的变量比较小,不足于容纳Shellcode的情况。攻击数据从低地址到高地址的构造方式是首先填充一些期望覆盖RET返回地址的跳转地址,然后是一堆Nop指令填充出“着陆区”,最后再是Shellcode。
15.RS模式##
在这种模式下能够精确地定位出Shellcode在目标漏洞程序进程空间中的起始地址,因此也就无需引入Nop空指令构建“着陆区”。这种模式是将Shellcode放置在目标漏洞程序执行时的环境变量中,由于环境变量是位于Linux进程空间的栈底位置,因而不会受到各种变量内存分配与对齐因素的影响,其位置是固定的。可以通过如下公式进行计算:ret=0xc0000000-sizeof(void*)-sizeof(FILENAME)-sizeof(Shellcode)。
16. Linux平台上的远程栈溢出与本地栈溢出##
Linux平台上的远程栈溢出攻击的原理与本地栈溢出是一样的,区别在于用户输入传递的途径不同,以及Shellcode的编写方式不同。本地栈溢出的用户输入途径主要为argv命令行输入、文件输入等,而远程栈溢出攻击的用户输入传递途径则是通过网络,存在远程栈溢出漏洞往往是一些网络服务进程或网络应用程序。NSR和RNS模式也都适用于远程栈溢出,使用场景也主要取决于被溢出的目标缓冲区大小是否足够容纳Shellcode。
17:Linux平台的Shellcode实现技术##
Shellcode是一段机器指令,对于我们通常接触的IA32构架平台,Shellcode就是符合Intel 32位指令规范的一串CPU指令,被用于溢出之后改变系统正常流程,转而执行Shellcode以完成渗透测试者的攻击目的,通常是为他提供一个访问系统的本地或远程命令行访问。在Linux操作系统中,程序通过“int 0x80”软中断来执行系统调用,而在Windows操作系统中,则通过核心DLL中提供的API接口来完成系统调用。
18.Linux本地Shellcode实现机制##
Linux系统本地Shellcode通常提供的功能就是为攻击者启动一个命令行Shell。在获得汇编语言实现的Shellcode之后,我们可以通过查找Intel opcode指令参考手册,即可获得opcode二进制指令形式的Shellcode。
19.Linux系统中一个最简单的本地Shellcode的产生过程,即Shellcode的通用方法##
①先用高级编程语言,通常用C,来编写Shellcode程序②编译并反汇编调试这个Shellcode程序③从编译语言代码级别分析程序执行流程④整理生成的汇编代码,尽量减小它的体积并使它可注入,并通过嵌入C语言进行运行测试和调试⑤提取汇编代码所对应的opcode二进制指令,创建Shellcode指令数组。在Linux本地Shellcode中,往往还会在运行execve()启动shell之前,调用setreuid(0)将程序运行权限提升至Root用户,这样才能利用本地溢出攻击来提升权限,在执行execve()函数之后还需要执行exit()函数,从而在溢出攻击之后能够使程序正常退出。
20.Linux远程Shellcode实现机制##
通过执行一系列的系统调用来完成指定的功能。实现方法步骤也是首先给出高级语言的功能代码实现,然后通过反汇编调试编译后的二进制程序,特权、优化和整理所获得的汇编代码,并最终产生opcode二进制指令代码。Linux远程Shellcode需要让攻击目标程序创建socket监听指定的端口等待客户端连接,启动一个命令行Shell,并将命令行的输入输出与socket绑定,这样攻击者就可以通过socket客户端连接目标程序所在初级的开放端口,与服务端socket建立起通信通道,并获得Shell。在Linux系统中,dup2()函数能够将标准输入输出与socket的网络通信通道进行绑定,使得socket的远程输入连接至命令行标准输入,将命令行标准输出连接至远程网络输出,因而完成远程Shell的功能。
21.Windows操作系统平台在很多方面与Linux操作系统具有显著不同的实现机制与成功攻击应用程序中栈溢出漏洞密切相关的主要有如下三点##
①对程序运行中废弃栈的处理方式差异②进程内存空间的布局差异(Linux进程内存空间中栈指针在0x0000000之下,即一般栈中变量的位置都在0xbfff地址附近,在这些地址中没有空字节。Windows平台的栈位置处于ox00FFFFFF以下的用户内存空间,一般为0x0012地址附近,er这些内存地址的首字节均为0x00空字节)③系统功能调用的实现方式差异(Linux系统中通过“int80”中断处理来调用系统功能,而Windows系统则是通过操作系统中更为复杂的API及内核处理例程调用链来完成系统功能调用,对应用程序直接可见的是应用层中如Kernel32.dll、User32.dll等系统动态链接库中导出的一些系统API接口函数)。
22.Windows平台Shellcode实现技术##
由于Windows操作系统并不提供直接的系统调用,而是提供一系列的API接口函数,因此Windows平台上的Shellcode实现较Linux系统具有一些差异,编写也更难一些。
23.Windows本地Shellcode##
在Windows平台上,典型的本地Shellcode同样也是启动一个命令行Shell,即“command.com”或Windows32的系统API中提供了system()函数调用,可以用于启动指定程序或运行特定命令,在调用system(“command.com”)之后即可启动命令行程序。编写Shellcode最简单的方式就是使用硬编码的函数地址,比如system()函数在Windows XP特定版本的目标程序内存空间中的加载地址为0x77bf93c7,那么我们就可以在Shellcode中使用“Call 0x77bf93c7”指令,让EIP指令寄存器跳转至硬编码的函数入口地址执行。System()函数是由msvcrt.dll动态链接库所导出的API函数,而攻击目标并不一定加载了该DLL,为了确保Shellcode能够正确地调用所需函数,一般需要将所需函数的动态链接库装载至目标程序内存中,然后再查询获得该函数的加载地址。
24.Windows远程Shellcode##
大致过程如下:①创建一个服务器端socket,并在指定的端口上监听②通过accept()接受客户端的网络连接③创建子程序,运行“cmd.exe”,启动命令行④创建两个管道,命令管道将服务器端socket接收(recv)到的客户端通过网络输入的执行命令,连接至cmd.exe的标准输入;然后输出管道将cmd.exe的标准输出连接至服务器端socket的发送(send),通过网络将运行结果反馈给客户端。
25.堆溢出攻击##
一个典型的Linux程序在其进程内存空间中通常有如下一些数据区:包含已初始化全局函数的.data段、包含未经初始化数据的.bss段、运行时刻动态分配内存的数据区heap等。而这些内存数据区有着共同的特点,即数据分配与增长方向是从低地址向高地址,而非栈从高地址向低地址的增长方向。因此,在.data、.bss和heap中缓冲区溢出的情形,都被称为堆溢出。堆溢出之所以较栈溢出具有更高的难度,更重要的原因在于堆中没有可以直接覆盖并修改指针寄存器指针的返回地址,因此往往需要利用在堆中一些会影响程序执行流程的关键变量,如函数指针、C++类对象中的虚函数表。或者挖掘出堆中进行数据操作时可能存在的向指定内存地址改写内容的漏洞机会。
26.缓冲区溢出攻击的防御技术##
①尝试杜绝溢出的防御技术(解决缓冲区溢出攻击最根本的办法是编写正确的、不存在缓冲区溢出安全漏洞的软件代码)②允许溢出但不让程序改变执行流程的防御技术③无法让攻击代码执行的防御技术。
kali视频第36~38集总结#
kali视频第36集Kali压力测试工具总结##
压力测试通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能够提供的最大的服务级别的测试。通俗地讲,压力测试是为了测试应用程序的性能会变得不可接受。
Kali下压力测试工具包含VoIP压力测试、Web压力测试、网络压力测试及无线压力测试。
1、Voip压力测试工具###
包括iaxflood和inviteflood
2、web压力测试工具###
THC-SSL-DOS
借助THC-SSL-DOS攻击工具,任何人都可以把提供SSL安全连接的网站攻击下线,这种攻击方法称为SSL拒绝服务攻击(SSL-DOS)。德国黑客组织发布THC SSL DOS,利用SSL中已知的弱点,迅速耗费服务器资源,与传统DDoS工具不同的是,它不需要任何带宽,只需要一台执行单一攻击的电脑。
漏洞存在于协议的renegotiation过程中,renegotiation被用于浏览器到服务器之间的验证。
3、网络压力测试工具###
dhcpig :耗尽DHCP资源池的压力测试
4、ipv6攻击工具包###
5、Inundator###
IDS/IPS/WAF 压力测试工具
6、Macof###
可做泛洪攻击
7、Siege###
Siege是一个压力测试和评测工具,设计用于Web开发,评估应用在压力下的承受能力,可以根据配置对一个Web站点进行多用户的并发访问,记录每个用户所有请求过程的响应时间,并在一定数量的并发访问下重复进行:
8、T50压力测试###
功能强大,且具有独特的数据包注入工具,T50支持*nix系统,可进行多种协议数据包注入,实际上支持15种协议。
9、无线压力测试###
包括MDK3和Reaver
kali视频第37集数字取证工具总结##
数字取证技术将计算机调查和分析技术应用于潜在的、有法律效力的电子证据的确定与获取,同样他们都是针对黑客和入侵的,目的都是保障网络安全。
1、PDF取证工具###
pdf-parser和peepdf
peepdf是一个使用python编写的PDF文件分析工具,它可以检测到恶意的PDF文件。其设计目标是为安全研究人员提供PDF分析中可能用到的所有组件。
2、反数字取证chkrootkit###
Linux系统下查找rootkit后门工具。判断系统是否被植入Rootkit的利器。
3、内存取证工具###
Volatility是开源的Windows、Linux、Mac、Android的内存取证分析工具,由python编写成,命令行操作,支持各种操作系统。
4、取证分析工具binwalk###
Binwalk是一个固件的分析工具,旨在协助研究人员对固件分析,提取及逆向工程。简单易用,完全自动化脚本,并通过自定义签名,提取规则和插件模块,更重要的一点是可以轻松扩展。
借助binwalk中的一个很强大的功能——提取文件(压缩包)中的隐藏文件(或内容文件)。亦可分析文件格式。
分析压缩包 binwalk *.zip
binwalk -e *.zip 将文件全部解压,产生新的目录_zip.zip.extracted,
还可以作为文件格式分析的工具
5、取证哈希验证工具集###
md5deep是一套跨平台的方案,可以计算和比较MD5等哈希加密信息的摘要MD5,SHA-1,SHA-256,Tiger,Whirlpool。
6、取证镜像工具集###
针对镜像文件的取证工具,如mmsstat与mmls等命令。
7、数字取证套件###
数字取证工具
数字取证套件
autopsy
DFF(Digital Forensics Framework)是一个简单但强大的数字取证工作辅助工具,它具有灵活的模块系统,具有多种功能,包括:回复错误或崩溃导致的文件丢失,证据的研究和分析。DFF提供了一个强大的体系结构和一些列有用的模块。而autopsy则是提供了一个浏览器平台。
反数字取证chkrootkit
kali视频第38集Kali报告工具与系统服务总结##
一次完整的渗透测试,最后要完成一份报告作为一个小结。相应的,Kali Linux为安全工程师准备了报告工具集:
系统服务
1、Dradis###
Dradis用于提高安全检测效率的信息共享框架(协作平台)。Dradis提供了一个集中的信息仓库,用于标记我们目前已经做的工作和下一步计划。基于浏览器的在线笔记。
2、keepnote###
精简的笔记本软件,特点如下:
富文本格式:彩色字体、内置图片、超链接,能保存网页图片文字等完整内容。
树形分层组织内容,分门别类,一目了然。
全文搜索
综合截图
文件附件
集成的备份和恢复
拼写检查(通过gtkspell)
自动保存
内置的备份和恢复(zip文件存档)
3、媒体捕捉工具Cutycapt###
曾经介绍过的工具,将网页内容截成图片保存。
4、Recordmydesktop###
屏幕录像工具
5、证据管理###
Maltego Casefile
6、MagicTree###
是一个面向渗透测试人员的工具,可以帮助攻击者进行数据合并、查询、外部命令执行(比如直接调用nmap)和报告生成。所有数据都会以树形结构存储,非常方便。
7、Truectypt###
免费开源的加密软件,同时支持Windows,OS,Linux等操作系统。
8、系统服务介绍###
BeEF:对应XSS测试框架BeEF的启动与关闭;
Dradis:对应笔记分享服务Dradis的启动与关闭;
HTTP:对用Kali本机Web服务的启动与关闭;
Metasploit:对应Metasploit服务的启动与关闭;
Mysql:对应Mysql服务的启动与关闭;
Openvas:对应Openvas服务的启动与关闭;
SSH:对应SSH服务的启动与关闭;(远程连接最好不要开启)
本周学习进度#
完成了课本第九章第十章的学习,完成了kali视频第36~38集的学习。