压力测试经过肯定一个系统的瓶颈或者不能接受的性能点,来得到系统能提供的最大的服务级别的测试。通俗地讲,压力测试是为了发如今什么条件下你的应用程序的性能会变得不可接受。
Kali下压力测试工具包括VoIP压力测试工具、WEB压力测试、网络压力测试及无线压力测试四个分类。linux
包括iaxflood和inviteflood。git
借助WEB压力测试下的THC-SSL-DOS攻击工具,任何人均可以把提供SSL安全链接的网站攻击下线,这种攻击方法被称为SSL拒绝服务攻击。德国黑客组织“The Hacker’s Choice”发布THC SSL DOS,利用SSL中的已知弱点,迅速消耗服务器资源,与传统DDos工具不一样的是,它不须要任何带宽,只须要一台执行单一攻击的电脑。
漏洞存在于协议的renegotiation过程当中,renegotiation被用于浏览器到服务器之间的验证。
算法
耗尽DHCP资源池的压力测试。
sql
由THC发布的IPv6攻击工具包包括:
shell
IDS/IPS/WAF压力测试工具,经过耗尽对方的认证资源来实现压力测试攻击。编程
可作泛洪攻击。
windows
Siege是一个压力测试和评测工具,设计用于WEB开发者评估应用在压力下的承受能力:能够根据配置对一个WEB站点进行多用户的并发访问,记录每一个用户全部请求过程的相应时间,并在必定数量的并发访问下重复进行。Siege功能比较强大,进行攻击的同时还能够进行数据分析。
数组
T50 Sukhoi PAK FA Mixed Packet Injector是一个压力测试工具,它功能强大且具备独特的数据包注入工具。T50支持*nix系统可进行多种协议的数据包注入,实际上支持15种协议。T50的主要特色:浏览器
包括介绍过的MDK3和Reaver。
安全
数字取证技术将计算机调查和分析技术应用于对潜在的、有法律效力的电子证据的肯定与获取,一样它们都是针对黑客和入侵的,目的都是保障网络安全。Kali Linux下有丰富的数字取证工具:
包括peepdf、pdf-parser和pdfid。
其中,peepdf是一个使用Python编写的PDF文件分析工具,它能够检测恶意的PDF文件。其设计目标是为安全研究人员提供PDF分析中可能用到的全部组件,无需使用3或4种工具完成同一件任务。
chkrootkit是一个Linux系统下的查找检测rootkit后门的工具,是判断系统是否被植入rootkit的利器。
包括Volatility和Volafox。
其中,Volatility是开源的Windows,Linux,MaC,Android的内存取证分析工具,由Python编写而成,命令行操做,支持各类操做系统。Volatility功能比较强大,能够直接分析抓取的内存状态。
binwalk是一个固件的分析工具,旨在协助研究人员对固件分析、提取及逆向工程用处。简单易用,彻底自动化脚本,并经过自定义签名,提取规则和插件模块,更重要的一点是能够轻松地扩展。
借助binwalk有个很强大的功能是提取文件(压缩包)中存在的隐藏文件(或内容文件),亦可分析文件格式。
包括md5deep和rahash2。
其中,md5deep是一套跨平台的方案,能够计算和比较MD5等哈希加密信息的摘要MD五、SHA-一、SHA-25六、Tiger、Whirlpool。
针对镜像文件的取证工具,如mmsstat
与mmls
等命令。
数字取证目录较为精简,对应有数字取证套件,包括DFF、autopsy等工具。DFF和autopsy均具备图形化界面。
其中,DFF(Digital Forensics Framework)是一个简单但强大的数字取证工做辅助工具,它具备一个灵活的模块系统,具备多种功能,包括:恢复错误或崩溃致使的文件丢失,证据的研究和分析等。DFF提供了一个强大的体系结构和一些有用的模块。
而autopsy提供了一个浏览器控制台 。
点击如上图所示的连接,打开autopsy的浏览器页面:
一次完整的渗透测试,最后总要完成一份优雅的报告做为一个小结。相应地,Kali Linux为安全工程师准备了报告工具集,包括Documentation、媒体捕捉和证据管理三个部分。其中,Documentation包括Dradis和Keepnote两个工具,媒体捕捉包括Cutycapt和Recordmydesktop两个工具,证据管理包括Maltego、Casefile等工具。
同时,对于Kali Linux下的各项系统服务,整理以下:
Dradis是一个用于提升安全检测效率的信息共享框架(协做平台)。它提供了一个集中的信息仓库,用于标记咱们目前已经作的工做和下一步计划。
一个很精简的笔记软件,具备以下特色:
将网页内容截成图片保存。
屏幕录像工具,用来录制桌面。
属于报告工具集中的证据管理。
是一个面向渗透测试人员的工具,能够帮助咱们轻松直接地进行数据合并、查询、外部命令执行和报告生成。全部的数据都会以树形结构存储,很是方便。
一款免费开源的加密软件,同时支持Windows Vista、7/XP、Mac OS X、Linux等操做系统。
恶意代码指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
恶意代码能够根据其执行方式、传播方式和对攻击目标的影响分为计算机病毒、蠕虫、恶意移动代码、特洛伊木马、后门、僵尸程序、内核套件等。须要注意的是,一些恶意代码会综合使用多种技术,因此具备多种分类的特性,能够归为融合型恶意代码。
①Fred Cohen首次提出计算机病毒的概念:计算机病毒是一个能感染其余程序的程序,它靠篡改其余程序,并把自身的拷贝嵌入其余程序而实现病毒的感染。随后他进一步将计算机病毒定义为:病毒程序经过修改其余程序的方法将本身的精确复制或可能演化的形式放入其余程序中,从而感染它们。
②Ed Skoudis为了给出计算机病毒和蠕虫的区别,给出了如下定义:计算机病毒是一种可以自我复制的代码,经过将自身嵌入其余程序进行感染,而感染过程一般须要人工干预才能完成。
③1994年《中华人民共和国计算机安全保护条例》给出了我国对计算机病毒的具备法规效力的定义:计算机病毒是指编制或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码。
一旦病毒在计算机系统中被触发,它就会寻找可供感染的宿主程序位置,并复制自身并寄生在宿主上,病毒可能依附在移动存储或硬盘的引导扇区,或者能够嵌入代码的文档、可执行文件或者脚本文件。然而在一般意义下,病毒不会像蠕虫同样可以自主地跨越网络传播,而是须要借助人类的帮助从一台计算机传播到另外一台计算机。
计算机病毒的传播渠道包括移动存储、电子邮件及下载、共享目录等。
网络蠕虫是一种能够自我复制的代码,而且经过网络传播,一般无须人为干预就能传播。
网络蠕虫的定义特性在于经过网络的自主传播。而计算机病毒的定义特性在于感染宿主,包括可执行文件、数据文档或磁盘引导扇区,而蠕虫则没有必要感染宿主。
典型的蠕虫内部组成结构包括:“弹头”、传播引擎、目标选择算法和扫描引擎、有效载荷。
从定义特性上进行分析,后门是容许攻击者绕过系统常规安全控制机制的程序,可以按照攻击者本身的意图提供访问通道。
做为特洛伊木马的简称,木马是指一类看起来具备某个有用或善意目的的,但实际掩盖着一些隐藏恶意功能的程序。
僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机,并经过一对多的命令与控制信道所组成的网络。
僵尸网络区别于其余攻击方式的基本特性是使用一对多的命令与控制机制。另外,僵尸网络还具备恶意性和网络传播性。
僵尸网络能够分为主体功能模块和辅助功能模块,主体功能模块包括实现僵尸网络定义特性的命令与控制模块和实现网络传播特性的传播模块,而包含辅助功能模块的僵尸程序则具备更强大的攻击功能和更好的生存能力。
当前主流使用的僵尸网络命令与控制机制包括:基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制和基于P2P协议的命令与控制机制这三大类。
代码分析,或称程序分析,是按需求使用必定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
恶意代码分析就是利用一系列的程序分析技术方法、流程和工具,来识别恶意代码关键程序结构和行为特征的过程。
恶意代码分析的技术方法主要包括静态分析和动态分析两大类。
对于恶意代码分析实践而言,一个可以彻底受控、易于构建与恢复的分析环境是必需的。
恶意代码分析环境分为:恶意代码发烧友的分析环境、基于虚拟化构建恶意代码分析环境和用于研究的恶意代码自动分析环境。
静态代码分析方法在不实际执行软件代码状况下对恶意代码进行自动化或辅助分析,经过包括使用反病毒引擎扫描识别已知的恶意代码家族和变种,逆向分析获取恶意代码的关键程序信息、模块构成、内部数据结构和关键控制流程,理解恶意代码的机理,并提取特征码用于检测。
恶意代码静态分析的主要技术手段具体包括:反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别与代码脱壳等。
动态代码分析方法是经过在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。
恶意代码动态分析的主要技术手段具体包括:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试等。
能够被攻击者利用并致使危害的安全缺陷被称为软件安全漏洞。安全漏洞的范畴不限于软件安全漏洞,还包括硬件、我的与组织管理中存在的、可以被攻击者利用来破坏安全策略的弱点,可是软件安全漏洞是目前最多见,也是影响范围最大的安全漏洞类型。
软件安全漏洞构成了目前安全漏洞最为主要的部分,也是计算机安全应急响应组织所关注的重点。
著名信息安全专家G. Hoglund和G. McGraw提出了软件安全“困境三要素”:复杂性、可扩展性和连通性。软件的这三个要素共同做用,使得软件的安全风险管理成为一个巨大的挑战,从而很难根除安全漏洞。
从技术上主要包括以下几类:
内存安全违规类漏洞是在软件开发过程当中在处理RAM内存访问时所引入的安全缺陷。缓冲区溢出漏洞是一种最基础的内存安全问题。
输入验证类安全漏洞是指软件程序在对用户输入进行数据验证存在的错误,没有保证输入数据的正确性、合法性和安全性,从而致使可能被恶意攻击与利用。
竞争条件类缺陷是系统或进程中一类比较特殊的错误,一般在涉及多进程或多线程处理的程序中出现,是指处理进程的输出或者结果没法预测,并依赖于其余进程事件发生的次序或时间时,所致使的错误。
权限混淆与提高类漏洞是指计算机程序因为自身编程疏忽或被第三方欺骗,从而滥用其权限,或赋予第三方不应给予的权限。
缓冲区溢出是计算机程序中存在的一类内存安全违规类漏洞,在计算机程序向特定缓冲区内填充数据时,超出了缓冲区自己的容量,致使外溢数据覆盖了相邻内存空间的合法数据,从而改变程序执行流程破坏系统运行完整性。
缓冲区溢出攻击发生的根本缘由:现代计算机系统的基础架构——冯·诺依曼体系存在本质的安全缺陷,即采用了“存储程序”的原理,计算机程序的数据和指令都在同一内存中进行存储,而没有严格的分离。这一缺陷使得攻击者能够将输入的数据,经过利用缓冲区溢出漏洞,覆盖修改程序在内存空间中与数据区相邻存储的关键指令,从而达到使程序执行恶意注入指令的攻击目的。
缓冲区溢出漏洞根据缓冲区在进程内存空间中的位置不一样,又分为栈溢出、堆溢出和内核溢出这三种具体技术形态。
(1)栈溢出是指存储在栈上的一些缓冲区变量因为存在缺少边界保护问题,可以被溢出并修改栈上的敏感信息(一般是返回地址),从而致使程序流程的改变。
(2)堆溢出是指存储在堆上的缓冲区变量缺少边界保护所遭受溢出攻击的安全问题。
(3)内核溢出漏洞存在于一些内核模块或程序中,是因为进程内存空间内核态中存储的缓冲区变量被溢出形成的。
Linux平台中的栈溢出攻击按照攻击数据的构造方式不一样,主要有NSR、RNS和RS三种模式。
Shellcode是一段机器指令,对于咱们一般接触的IA32架构平台,Shellcode就是符合Intel 32位指令规范的一串CPU指令,被用于溢出以后改变系统正常流程,转而执行Shellcode以完成渗透测试者的攻击目的,一般是为他提供一个访问系统的本地或远程命令行访问(即Shell)。
按照在本地溢出攻击和远程溢出攻击使用场景的不一样,分为本地Shellcode和远程Shellcode。
Linux系统本地Shellcode一般提供的功能就是为攻击者启动一个命令行Shell。
Shellcode的通用方法:
①先用高级编程语言,一般用C,来编写Shellcode程序;
②编译并反汇编调试这个Shellcode程序;
③从汇编语言代码级别分析程序执行流程;
④整理生成的汇编代码,尽可能减少它的体积并使它可注入,并可经过嵌入C语言进行运行测试和调试;
⑤提取汇编代码所对应的opcode二进制指令,建立Shellcode指令数组。
Linux系统上的远程Shellcode的实现原理与本地Shellcode彻底一致,也是经过执行一系列的系统调用来完成指定的功能。实现方法步骤也是首先给出高级语言的功能代码实现,而后经过反汇编调试编译后的二进制程序,提取、优化和整理所得到的汇编代码,并最终产生opcode二进制指令代码。
Windows操做系统平台在不少方面与与Linux操做系统具备显著不一样的实现机制,而在这些差别中,与成功攻击应用程序中栈溢出漏洞密切相关的主要有以下三点:
(1)对程序运行过程当中废弃栈的处理方式差别
当一个函数调用完成返回至调用者,执行下一条指令以前,Windows平台会向废弃栈中写入一些随机的数据,而Linux则不进行任何的处理。
(2)进程内存空间的布局差别
Windows操做系统的进程内存空间布局与Linux存在着不一样,Linux进程内存空间中栈底指针在0xc0000000之下,即通常栈中变量的位置都在0xbfff地址附近,在这些地址中没有空字节。Windows平台的栈位置处于0x00FFFFFF如下的用户内存空间,通常为0x0012地址附近,而这些内存地址的首字节均为0x00空字节。
(3)系统功能调用的实现方式差别
Windows平台上进行操做系统功能调用的实现方法较Linux更加复杂,Linux系统中经过“int 80”中断处理来调用系统功能,而Windows系统则是经过操做系统中更为复杂的API及内核处理例程调用链来完成系统功能调用,对应用程序直接可见的是应用层中如kernel32.dll、User32.dll等系统动态连接库中导出的一些系统API接口函数。
按照在本地溢出攻击和远程溢出攻击使用场景的不一样,分为本地Shellcode和远程Shellcode。
在Windows平台上,典型的本地Shellcode一样也是启动一个命令行Shell,即“command.com”或“cmd.exe”。
与Linux系统相似,更为经常使用的Shellcode是能够在远程渗透攻击中使用的,可以给出shell网络访问的远程Shellcode。
Windows远程Shellcode的C语言实现示例代码,其大体过程以下:
①建立一个服务器端socket,并在指定的端口上监听;
②经过accept()接受客户端的网络链接;
③建立子进程,运行“cmd.exe”,启动命令行;
④建立两个管道,命令管道将服务器端socket接收(recv)到的客户端经过网络输入的执行命令,链接至cmd.exe的标准输入;而后输出管道将cmd.exe的标准输出链接至服务器端socket的发送(send),经过网络将运行结果反馈给客户端。
堆溢出攻击是缓冲区溢出中第二种类型的攻击方式,因为堆中的内存分配与管理机制较栈更为复杂,不一样操做系统平台的实现机制都具备显著的差别,同时经过堆中的缓冲区溢出控制目标程序执行流程须要更精妙的构造,所以堆溢出攻击的难度较栈溢出要复杂不少,真正掌握、理解并运用堆溢出攻击也更为困难一些。
经过以上对缓冲区溢出攻击技术的介绍,咱们知道攻击者一般先经过溢出植入攻击代码,而后经过修改关键数据结构改变程序执行流程,最后让攻击代码执行。因此,天然而然地,针对缓冲区溢出攻击的防护技术围绕着如何组织这三步中任何一步失效,来达到抵御缓冲区溢出攻击的能力。
解决缓冲区溢出攻击最根本的方法是编写正确的、不存在缓冲区溢出安全漏洞的软件代码,但因为C/C++语言做为效率优先的语言,很容易就会出现缓冲区溢出。
这种防护技术容许溢出发生,但对可能影响到程序流程的关键数据结构实施严密的安全保护,不让程序改变其执行流程,从而阻断溢出攻击。
这种防护技术尝试解决冯·诺依曼体系的本质缺陷,经过堆栈不可执行限制来防护缓冲区溢出攻击。