https://github.com/shyujikou/binarybook
CTF(Capture the Flag)
有一个叫作 devkitPro 的网站上有很多喜欢分析各种游戏机的爱好者,他们发布了一些非官方的开发环境。这个网站是英语的,有兴趣的话可以上去看一看。 devkitPro http://devkitpro.org/
Metasploit 工具,通过它可以自动生成 shellcode)。
StackGuard 是一种在编译时在各函数入口和出口插入用于检测栈数据完整性的机器语言代码的方法,它属于编译器的安全机制。
Exec-Shield 是一种通过“限制内存空间的读写和执行权限”来防御攻击的机制。
地址随机化:ASLR
ASLR、Exec-Shield、StackGuard 等安全机制大大提高了系统的安全性,然而这也并不代表所有的安全漏洞都已经被彻底清除了。 安全专家们开始研究如何才能绕过这些安全机制来发动攻击,其中一种方法就是 Return-into-libc。 Return-into-libc 是一种破解 Exec-Shield 的方法,它的思路是“即便无法执行任意代码(shellcode),最终只要能够运行任意程序,也可以夺取系统权限”。 Return-into-libc 的基本原理是通过调整参数和栈的配置,使得程序能够跳转到 libc.so 中的 system 函数以及 exec 类函数,借此来运行 /bin/sh 等程序。
有人提出,能不能利用未随机化的那些模块内部的汇编代码,拼接出我们所需要的程序逻辑呢?在这种思路下衍生出的攻击手段,被称为 Return-Oriented-Programming(面向返回编程),简称 ROP。
关于 DLL 注入,有一篇著名的文章叫作“Three Ways to Inject Your Code into Another Process”。 Three Ways to Inject Your Code into Another Process http://www.codeproject.com/Articles/4610/Three-Ways-to-Inject-Your-Code-into-Another-Process 这
Metasploit Framework 是一个用于生成和运行攻击代码的框架,通常也简称为 Metasploit。这个工具有 Windows 版和 Linux 版,通常用来验证和调查软件的漏洞。
各种安全漏洞的信息都在一个叫作 CVE(Common Vulnerabilities and Exposures)的数据库中进行统一管理。 Search the CVE Web Site http://cve.mitre.org/find/index.html 其中每一条漏洞都被编 号,格式如 CVE-XXXX-YYYY(其中 XXXX 为年份,YYYY 为序号)。根据漏洞编号,我们可以从 CVE 的网站上搜索到以下信息。
只要我们知道了发生漏洞的软件、操作系统以及它们的版本,就可以搭建一个相同的环境,对漏洞进行验证和调查。
EMET 全称为 Enhanced Mitigation Experience Toolkit(增强减灾体验工具)
EMET 全称为 Enhanced Mitigation Experience Toolkit(增强减灾体验工具),是微软发布的一款免费的漏洞缓解工具。
作为蓝帽奖获奖方案之一的“ROPGuard - runtime prevention of return-oriented programming attacks”为我们提出了一种非常实用的应对 ROP 的方法。 ROPGuard 简单来说就是一种检查“RETN 所返回的目标有没有相对应的 CALL”(即 CALL-RETN 匹配性)的机制。这个方案非常简单,但是却能够十分有效地检测出 Return-into-libc 和 ROP 攻击。
ROPGuard-Cheap https://github.com/kenjiaiko/ropguard_cheap
另外,函数的返回目标地址是存放在栈中的,因此我们可以通过 ebp 进行回溯,找到上一个和再上一个返回目标地址。 这种方法被称为栈跟踪(stack trace)。通过栈跟踪,我们可以确认调用中的各个 ebp 是否位于栈的地址范围内。
REMnux 是一个用于分析恶意软件的操作系统,基于 Ubuntu 开发,主要用于在 VMware 等虚拟环境下运行。 大家可以从 sourceforge.net 下载最新版。 REMnux http://zeltser.com/remnux/ http://sourceforge.net/projects/remnux/files/version3/
REMnux 不仅能检测 x86 和 Windows 上的恶意软件,还能够检测出 Android 上的恶意软件,例如非常有名的 DroidDream。
首先我们来更新一下恶意软件的特征数据库。 请大家按照下面的例子,用 root 运行 freshclam 命令。
REMnux 是基于特征库来工作的,因此无法应对新的恶意软件,但它的魅力在于检测恶意软件非常方便。
我们刚才使用的 clamscan 命令,实际上是调用 GPL 协议的反病毒软件 ClamAV 对恶意软件和漏洞攻击进行扫描的。如果大家对反病毒软件的原理感兴趣的话,可以看一看这个软件的源代码。 ClamAV http://www.clamav.net/ ClamAV 的特征文件是持续更新的,从上面的官方网站可以下载到最新的版本。
ClamAV 特征文件下载 这里发布的特征文件扩展名为 .cvd,其中 main.cvd 为基本数据库,daily.cvd 为每日新增的特征数据库。 新发现的恶意软件首先会被添加到 daily.cvd 中,等到稳定之后会被转移到 main.cvd 中。
Zero Wine Tryouts 是另外一个恶意软件分析工具,它的原理和 REMnux 不同。Zero Wine Tryouts 是一个开源的自动分析工具,只要将文件上传上去就可以显示结果,非常方便。与 REMnux 的不同点在于,它主要通过动态分析来得出结果。 Zero Wine Tryouts http://zerowine-tryout.sourceforge.net/
Zero Wine Tryouts 运行在开源虚拟机 QEMU 上。输入任意的 EXE 文件或者 PDF 文件后,它会将其在沙箱(受保护的空间)中运行,并输出日志。
其内部是一个基于 Wine 的沙箱环境。Wine 是一个能够在 Linux、BSD、Solaris、OS X 等非 Windows 环境下运行 Windows 程序(PE 文件)的运行时库。 Wine http://www.winehq.org/ 在沙箱环境中运行的恶意软件会生成日志和报告。
Adobe Malware Classifier http://sourceforge.net/projects/malclassifier.adobe/ 由于启发式引擎都是各公司自主研发的,因此外人很难接触到其核心技术。不过,2012 年 4 月,Adobe 公司发布了一款开源的恶意软件检测引擎——Adobe Malware Classifier。 这个引擎可以对 Windows 可执行文件(PE 文件)进行恶意软件检测,程序本身是用 Python 编写的。
Adobe Malware Classifier 包括四个独立的检测算法,可分别对目标程序进行评分。 如果所有的检测算法都被判定为恶意软件,则最终结果会显示 1。 相对地,如果所有的检测算法都被判定为非恶意软件,则最终结果会显示 0。 此外,如果各检测算法的结论不一致,则显示 UNKNOWN。
FP(False Positive,假阳性):将正常文件误判为恶意软件 TN(True Negative,真阴性):将正常文件判定为正常文件 TP(True Positive,真阳性):将恶意软件判定为恶意软件 FN(False Negative,假阴性):将恶意软件判定为正常文件 TP Rate 表示将恶意软件判定为恶意软件的概率,其计算公式为 TP÷(TP+FN),即 130302÷(130302+3451)=0.97419871。 反之,FP Rate 则表示将正常文件误判为恶意软件的概率,结果为 0.171289071。 最后的 Accuracy 表示准确率。 简单总结如下。 将恶意软件判定为恶意软件的概率(真阳性):90% 以上 将正常文件判定为正常文件的概率(真阴性):不到 85% 85% 和 90% 代表每 10 次就会误判一次,
wsample01a.exe 只是一个显示消息框的简单程序,但四个算法中有三个都给出了恶意软件的结论。 从上面的例子可以看出,启发式恶意软件检测技术不同于传统的黑名单方式,误判率很高,因此到现在也未能成为一种确实有效的检测手段。
《只是为了好玩:Linux 之父林纳斯自传》,