《软件安全分析与应用》总括

背景

随着技术的发展和应用的深入,软件安全问题将越来越严重。

典型的软件安全问题

可以粗略地分为三类:恶意软件、软件漏洞和软件后门。
(因为这是一个概括总结的一章,先大致了解本书的主要内容,了解一些名词和技术,之后的章节会详细介绍。)

恶意软件

  1. 字面意思即包含恶意功能的软件。但由于是否“恶意”也具有一定的主观性,因此,目前仍很难对恶意软件进行一个非常客观的标准定义。
  2. 传统的恶意软件主要是指病毒、木马、蠕虫、僵尸网络、间谍软件等。其共同特点是在用户不知情的情况下实施一系列的破坏能力,或窃取信息,或远程控制,或实施破坏。
  3. 传统的恶意软件一直在发展3方面的能力:渗透与扩散能力、隐蔽能力、破坏能力。
  4. 根据恶意软件的发展历程,可将其分为这样3个阶段:第一阶段:单机传播阶段,以磁盘病毒、文件宏病毒为主。第二阶段:网络传播阶段,以邮件病毒、蠕虫。第三阶段:协同攻击阶段,以僵尸网络。
  5. APT攻击:高可持续性威胁,针对特定目标、采用高技术手段的攻击。两个典型的案例:RSA公司遭受SecurID窃取攻击、Hacking Team遭受APT攻击。

软件漏洞

  1. 软件漏洞是指由于程序设计实现错误造成的软件问题。
  2. 攻击者利用软件漏洞往往可以造成程序崩溃,获取敏感数据或执行任意代码。
  3. 软件漏洞是当前互联网的主要威胁之一,是病毒感染,蠕虫传播,APT攻击渗透等攻击实施的重要基础。
  4. 要彻底消除软件漏洞困难的原因:(1)软件自身越来越复杂,(2)软件漏洞越来越多样化,(3)软件开发周期越来越短,造成现实生活中软件产品漏洞百出。
  5. 案例:JPEG漏洞

软件后门

  1. 软件后门是指软件开发人员有意设计,刻意对用户隐瞒的一些功能,往往这些功能用于软件产品应用之后的一些特殊目的。
  2. 攻击者利用软件后门的方法,具有以下优势:(1)难发现(2)易利用(3)难取证
  3. 软件产品中,以漏洞形式存在的后门也是目前软件产品中的重要安全威胁之一,在某种程度上,是比一般性的软件漏洞更严重的威胁。

软件安全性分析的目标

  1. 存在问题,即目标软件中是否存在恶意功能,是否存在漏洞或者后门。这是评估一个软件安全性的首要问题。
  2. 机理问题,即确定问题存在之后,进一步分析其具体是如何实现的或者是什么原因造成的。
  3. 对策问题,即根据其相关机理分析结果,提出相应的防御政策。

软件分析主要是在没有源代码的情况下,针对可执行代码的分析,这主要是基于现实考虑,无论是恶意软件还是流行的软件产品,常常都无法获取源代码,而在没有源代码支持的情况下,对软件的逆向分析存在以下挑战:(1)指令代码的理解(2)关联关系的抽取(3)复杂逻辑的解析。

软件逆向分析的主要方法和技术

根据分析方式的不同,可将软件逆向分析分为静态和动态两大类。
静态分析主要是直接对软件的可执行代码进行分析,一般是在对代码反汇编或反编译的基础上,对汇编代码或其他高级语言代码进行进一步分析。
动态分析是通过直接运行软件,然后监测软件运行过程,实施分析。

反汇编与反编译(静态)

汇编:将汇编程序代码转换成机器可运行的执行代码
反汇编:汇编过程的逆过程,即将可执行代码转换为可读的汇编代码
编译:将高级语言转换成另一种编程语言(目标语言)代码的过程,如将C语言转换成汇编代码或机器码
反编译:将机器码、汇编代码转换成高级语言的过程。

程序调试(动态)

通过实际运行软件,利用断点、单步执行等方式,对软件执行过程进行细粒度分析。

程序切片(主要用于静态)

它是解决软件超大规模所带来的理解困境的重要思路,是一种重要的程序“分解”方法。
它主要通过分析程序代码之间的依赖关系来分析指令的相关性,从而帮助用户提取其所“感兴趣”的代码片段,它根据用户所关注的指令和指令相关的操作数,提取与该指令及操作数相关联的代码,从而在软件逆向分析过程中减少其他无关代码的干扰。

污点传播分析(动态)

污点传播分析是一种重要的数据流分析方法。基本思路是:将所感兴趣的数据做标记,即标记为污点数据,然后通过分析对该污点数据的处理过程,根据每条指令的污点传播规则,分析数据的传递关系。
数据传递、扩散的过程就是污点传播的过程。

符号执行(可静可动)

符号执行是分析内部逻辑的一种基础方法,符号执行在软件逆向分析过程中常用于路径约束条件。基本思路是:将目标程序代码中部分变量和运算符号化,通过对各种条件分支的符号化表达来形成路径的约束条件。
符号执行同样是一种数据流分析方法。

模糊测试

模糊测试准确的说并不是一项逆向分析技术。
基本思想是:通过构造各种不同的输入数据,尽可能的触发执行软件的各种路径,通过对执行结果的监测来实现相关的分析或检测目标。

软件逆向分析的主要应用场景

几种典型的应用场景:恶意软件分析、网络协议逆向分析、软件漏洞分析与利用。

文章目录
  1. 1. 背景
  2. 2. 典型的软件安全问题
    1. 2.1. 恶意软件
    2. 2.2. 软件漏洞
    3. 2.3. 软件后门
  3. 3. 软件安全性分析的目标
  4. 4. 软件逆向分析的主要方法和技术
    1. 4.1. 反汇编与反编译(静态)
    2. 4.2. 程序调试(动态)
    3. 4.3. 程序切片(主要用于静态)
    4. 4.4. 污点传播分析(动态)
    5. 4.5. 符号执行(可静可动)
    6. 4.6. 模糊测试
  5. 5. 软件逆向分析的主要应用场景