附6.1.3:(考核知识点解释)
上述介绍的基于关键词的静态检测,存在很多缺陷,比如:逆向分析技术的复杂性,加大了我们在每次关键函数调用上的分析难度;虽然能够找寻到函数的参数,但是参数的具体内容无法准确判断,因为参数是在程序运行中动态存在的。举个例子来说:如果一个程序中使用循环调用strcpy函数,并且每次调用时传递的参数都按照变化不定的内存中的数据为参数,那么这种情况使用静态逆向技术就无法分析。
如何化静为动呢?既然溢出漏洞的发掘入手点在于捕捉关键函数及其参数内容,那么在这些函数上能不能放上一个监视点呢?使用Hook技术就可以达成该目的。
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子(Hook),既然是位于消息被正式处理之前,那么它同样可以用于函数被正式调用之前,也就是说我们可以在那些操作栈的关键函数上加上钩子,将它们换成我们的函数实现,这样我们就可以做到真正的动态监视。
5、Meterpreter中实现了 、 、 、 与 等多样化的功能特性。
★考核知识点:Meterpreter的功能 参见讲稿章节:7-3
附7.3.1:(考核知识点解释)
在成功实施渗透攻击并获得目标系统的远程控制权之后,Metasploit框架中另一个极具威名的工具Meterpreter在后渗透攻击阶段提供了强大功能。
Meterpreter可以看做一个支持多操作系统平台,可以仅仅驻留于内存中并具备免杀能力的高级后门工具,Meterpreter中实现了特权提升、信息攫取、系统监控、跳板攻击与内网拓展等多样化的功能特性,此外还支持一种灵活可扩展的方式来加载额外功能的后渗透攻击模块,足以支持渗透测试者在目标网络中取得立足点之后进行进一步的拓展攻击,并取得具有业务影响力的渗透效果。
从技术角度来说,Meterpreter让它的“前辈们”(如国外的BO、BO2K,以
及国内的冰河、灰鸽子等)黯然失色。
二、主观部分: (一)、名词解释 1.远程利用漏洞
★考核知识点:远程利用漏洞的概念 参见讲稿章节:3-2
附3.2.1:(考核知识点解释)
软件漏洞可以考虑从以下几方面进行漏洞的分类,包括:软件漏洞被攻击者利用的地点,软件漏洞形成原因,漏洞生命周期不同阶段,漏洞对系统安全的直接威胁后果等。
(1)按照软件漏洞被攻击者利用的地点进行分类 ① 本地利用漏洞
本地利用漏洞是指攻击者必须在本机拥有访问权限的前提下才能攻击并利用的软件漏洞。比较典型的是没有网络服务功能的本地软件漏洞,以及本地权限提升漏洞。本地提权漏洞能让普通用户获得最高管理员权限甚至系统内核的权限。
② 远程利用漏洞
远程利用漏洞是指攻击者可以直接通过网络发起攻击并利用的软件漏洞。这类软件漏洞危害极大,攻击者能随心所欲地通过此漏洞对远端计算机进行远程控制,此类漏洞也是蠕虫病毒主要利用的漏洞。 2.堆溢出
★考核知识点:堆溢出的概念 参见讲稿章节:4-2
附4.1.3:(考核知识点解释)
堆溢出是指在堆中发生的缓冲区溢出。
由于堆与栈结构的不同,堆溢出不同于栈溢出。相比于栈溢出,堆溢出的实现难度更大,而且往往要求进程在内存中具备特定的组织结构。然而,堆溢出攻击也已经成为缓冲区溢出攻击的主要方式之一,利用堆溢出可以有效绕过基于栈溢出的缓冲区溢出防范措施。
堆是内存空间中用于存放动态数据的区域。与栈不同的是,程序员自己完成堆中变量的分配与释放。对于堆内存分配,操作系统有一个堆管理结构,用来管理空闲内存地址的链表。 3.不安全的加密存储
★考核知识点:不安全的加密存储的概念 参见讲稿章节:9-9 附9.4:(考核知识点解释)
2012年,CSDN网站600万账户密码泄露事件等一系列类似事件,导致网络安全及用户个人隐私成为大众关心的焦点。CSDN事件之所以严重的主要原因,是因为CSDN网站采用明文方式来存储用户名和密码,使得用户的隐私被轻易的泄露。
所谓不安全的加密存储指的是Web应用系统没有对敏感性资料进行加密,或者采用的加密算法复杂度不高可以被轻易破解,或者加密所使用的密钥非常容易检测出来。归根到底就是所存储的内容能够轻易被攻击者解析从而产生安全威胁。
为了防止不安全的加密存储,对于所有的敏感性数据必须进行加密,且无法被轻易破解。保证加密密钥被妥善保管,攻击者不能轻易窃取,并准备密钥的定期更换。对于敏感存储内容必须进行严格的访问控制,只允许授权用户进行操作。
(二)、简答
1.缓冲区溢出攻击是什么?
★考核知识点:缓冲区溢出攻击的概念 参见讲稿章节:4-1
附4.1.1:(考核知识点解释)
缓冲区是一块连续的内存区域,用于存放程序运行时加载到内存的运行代码和数据。
缓冲区溢出是指程序运行时,向固定大小的缓冲区写入超过其容量的数据,多余的数据会越过缓冲区的边界覆盖相邻内存空间,从而造成溢出。
缓冲区的大小是由用户输入的数据决定的,如果程序不对用户输入的超长数据作长度检查,同时用户又对程序进行了非法操作或者错误输入,就会造成缓冲
区溢出。
缓冲区溢出攻击是指发生缓冲区溢出时,溢出的数据会覆盖相邻内存空间的返回地址、函数指针、堆管理结构等合法数据,从而使程序运行失败、或者发生转向去执行其它程序代码、或者执行预先注入到内存缓冲区中的代码。缓冲区溢出后执行的代码,会以原有程序的身份权限运行。如果原有程序是以系统管理员身份运行,那么攻击者利用缓冲区溢出攻击后所执行的恶意程序,就能够获得系统控制权,进而执行其它非法操作。
造成缓冲区溢出的根本原因,是缺乏类型安全功能的程序设计语言(C、C++等)出于效率的考虑,部分函数不对数组边界条件和函数指针引用等进行边界检查。例如,C 标准库中和字符串操作有关的函数,像strcpy,strcat,sprintf,gets等函数中,数组和指针都没有自动边界检查。程序员开发时必须自己进行边界检查,防范数据溢出,否则所开发的程序就存在缓冲区溢出的安全隐患,而实际上这一行为往往被程序员忽略或者检查不充分。 2.什么是智能模糊测试?
★考核知识点:智能模糊测试的概念 参见讲稿章节:6-3
附6.2.2:(考核知识点解释)
模糊测试方法是应用最普遍的动态安全检测方法,但由于模糊测试数据的生成具有随机性,缺乏对程序的理解,测试的性能不高,并且难以保证一定的覆盖率。为了解决这个问题,引入了基于符号执行等可进行程序理解的方法,在实现程序理解的基础上,有针对性的设计测试数据的生成,从而实现了比传统的随机模糊测试更高的效率,这种结合了程序理解和模糊测试的方法,称为智能模糊测试(smart Fuzzing)技术。
智能模糊测试具体的实现步骤如下。 (1)反汇编
智能模糊测试的前提,是对可执行代码进行输入数据、控制流、执行路径之间相关关系的分析。为此,首先对可执行代码进行反汇编得到汇编代码,在汇编代码的基础上才能进行上述分析。
(2)中间语言转换
从汇编代码中直接获取程序运行的内部信息,工作量较大,为此,需要将汇
编代码转换成中间语言,由于中间语言易于理解,所以为可执行代码的分析提供了一种有效的手段。
(3)采用智能技术分析输入数据和执行路径的关系
这一步是智能模糊测试的关键,它通过符号执行和约束求解技术、污点传播分析、执行路径遍历等技术手段,检测出可能产生漏洞的程序执行路径集合和输入数据集合。例如,利用符号执行技术在符号执行过程中记录下输入数据的传播过程和传播后的表达形式,并通过约束求解得到在漏洞触发时执行的路径与原始输入数据之间的联系,从而得到触发执行路径异常的输入数据。
(4)利用分析获得的输入数据集合,对执行路径集合进行测试
采用上述智能技术获得的输入数据集合进行安全检测,使后续的安全测试检测出安全缺陷和漏洞的机率大大增加。与传统的随机模糊测试技术相比,这些智能模糊测试技术的应用,由于了解了输入数据和执行路径之间的关系,因而生成的输入数据更有针对性,减少了大量无关测试数据的生成,提高了测试的效率。此外,在触发漏洞的同时,智能模糊测试技术包含了对漏洞成因的分析,极大减少了分析人员的工作量。
3.Cookie与Session的区别与联系? ★考核知识点:Cookie与Session的概念 参见讲稿章节:9-1
附9.1.4:(考核知识点解释)
Cookie与session是与HTTP会话相关的两个内容,其中Cookie存在在浏览器,session存储在服务器中。
Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。
具体来说,cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而