当Python遇上电子数据取证(三) | The first Python forensics application

bowu 2017年10月11日

I. 双因素认证

双因素认证将安全物理设备(如智能卡)与具有解锁智能卡功能的口令相结合,这就产生了必须同时具备“持有的事物”和“知道的事物”的效果。


II. Python命名惯例和其他考虑

常量

规则:大写字母加下划线分隔符
例:HIGH_TEMPERATRUE

本地变量名

规则:小写字母,驼峰命名法(bumpy cap)(下划线可选)
例:currentTemperature

全局变量名

规则:gl_前缀,加小写字母,驼峰命名法(下划线可选)
注意:全局变量应当包含在一个单一模块中
例:gl_maximumRecordedTemperature

函数名

规则:大写字母,驼峰命名法(下划线可选,具有主动语态)
例:ConvertFarenheitToCentigrade

对象名

规则:ob_前缀,加小写字母,驼峰命名法
例:ob_myTempRecorder

模块

规则:下划线加小写字母,驼峰命名法
例:_tempRecorder

类名

规则:class_前缀,驼峰命名法,并且保持简短
例:class_TempSystem


III. 第一个应用程序“单向文件系统哈希”

第一个程序的目标如下:

  • 1.为取证调查员构建一个实用的应用程序和攻击
  • 2.按照在本书和将来的应用程序中可复用的原则,开发若干模块
  • 3.为开发Python取证应用程序建立一个坚实的方法体系
  • 4.开始介绍这种语言的更多高级特性

背景

  • MD5算法长度为128比特
  • SHA-1:算法长度为160比特
  • SHA-2:算法长度为224、256、384、512比特
  • SHA-3:算法长度为224、256、384、512比特

MD5算法现在仍然在使用,对于很多应用程序来说,速度、便利性和互操作性使得它成为算法首选。由于对MD5算法的工具以及它比较高的碰撞可能性,许多组织转向了SHA-2(256比特和512比特是最常用的大小)。许多组织选择跳过SHA-1,因为它有一些与MD5相同的弱点

在取证中单向哈希算法的最佳用途

  • 证据保全
  • 搜索
  • 黑名单
  • 白名单
  • 变化检测

数字证据的保管链(chain of custody)

基本需求

当定义任何一个软件或者应用程序的需求时,要把它们定义得尽可能简洁,几乎不使用专业词汇,这样熟悉该领域的任何人都可以理解,即使他们不是软件开发人员,并且每一项需求都应当有一个标识符,方便从定义,直到设计、开发、验证等环节进行跟踪。

需求编号 需求名称 需求描述
000 总体 我们需要的基本能力是一个取证应用程序,能遍历指定起点的文件系统(如c:或/etc),然后为遇到的每个文件生成个单项哈希值
001 可移植性 应用程序应该支持Windows和Linux操作系统,作为一般的参考,将在Windows7、Windows8、Ubuntu12.04LTS环境上进行验证
002 主要功能 除了生成单向哈希值,应用程序应该收集每个被哈希的文件的系统元数据,例如,至少包括文件属性、文件名和文件路径等
003 主要结果 应用程序应该以标准输出文件格式提供结果,以满足灵活性
004 算法选择 当指定用到的单向哈希算法时,应用程序应该提供多种选择
005 错误处理 应用程序必须支持操作执行中的错误处理和日志,包括文字描述和时间戳

设计中的考虑

现在已经定义了这个应用程序的基本需求,需将它们分解到设计考虑中。首先会尽可能利用Python标准库里的内置函数。

程序结构

  • Main函数
    Main函数作用是控制这个程序的整体工作流。例如在Main里面建立起Python日志记录器,显示开始和完成的消息,并保持对时间的跟踪。另外Main还调用命令行解析器,然后启动WalkPath函数。一旦WalkPath完成,Main会记下完成情况,并给用户显示终止消息,并记入日志