Python Forensics 简明教程

Python Forensics - Memory and Forensics

在本章中,我们将重点研究使用 Volatility (一种适用于下列平台的基于 Python 的取证框架)调查易失性内存: AndroidLinux

Volatile Memory

易失性内存是一种存储,其内容会在系统电源关闭或中断时被擦除。RAM 是易失性内存的最佳示例。这意味着,如果你正在处理的文件尚未保存到非易失性内存(例如硬盘驱动器),并且计算机断电,那么所有数据都将丢失。

一般情况下,易失性存储器取证遵循与其他取证调查相同的模式 −

  1. 选择调查的目标

  2. Acquiring forensic data

  3. Forensic analysis

用于 Android 的基本 volatility plugins 收集 RAM dump 以进行分析。一旦收集 RAM 存储转储以进行分析,在 RAM 中寻找恶意软件十分重要。

YARA Rules

YARA 是一款流行的工具,提供强大语言,兼容基于 Perl 的正则表达式,用于检查可疑文件/目录并匹配字符串。

在本部分中,我们将根据模式匹配实现使用 YARA,并将其与实用程序电源结合在一起。整个过程对取证分析有益。

Example

考虑以下代码。此代码帮助提取代码。

import operator
import os
import sys

sys.path.insert(0, os.getcwd())
import plyara.interp as interp

# Plyara is a script that lexes and parses a file consisting of one more Yara
# rules into a python dictionary representation.
if __name__ == '__main__':
   file_to_analyze = sys.argv[1]
   rulesDict = interp.parseString(open(file_to_analyze).read())
   authors = {}
   imps = {}
   meta_keys = {}
   max_strings = []
   max_string_len = 0
   tags = {}
   rule_count = 0

   for rule in rulesDict:
      rule_count += 1

   # Imports
   if 'imports' in rule:
      for imp in rule['imports']:
         imp = imp.replace('"','')

         if imp in imps:
            imps[imp] += 1
         else:
            imps[imp] = 1
   # Tags
   if 'tags' in rule:
      for tag in rule['tags']:
         if tag in tags:
            tags[tag] += 1
         else:
            tags[tag] = 1

   # Metadata
   if 'metadata' in rule:
      for key in rule['metadata']:
         if key in meta_keys:
            meta_keys[key] += 1
         else:
            meta_keys[key] = 1

         if key in ['Author', 'author']:
            if rule['metadata'][key] in authors:
               authors[rule['metadata'][key]] += 1
            else:
               authors[rule['metadata'][key]] = 1

   #Strings
   if 'strings' in rule:
      for strr in rule['strings']:
         if len(strr['value']) > max_string_len:
            max_string_len = len(strr['value'])
            max_strings = [(rule['rule_name'], strr['name'], strr['value'])]
         elif len(strr['value']) == max_string_len:
            max_strings.append((rule['rule_name'], strr['key'], strr['value']))

   print("\nThe number of rules implemented" + str(rule_count))
   ordered_meta_keys = sorted(meta_keys.items(), key = operator.itemgetter(1),
      reverse = True)
   ordered_authors = sorted(authors.items(), key = operator.itemgetter(1),
      reverse = True)
   ordered_imps = sorted(imps.items(), key = operator.itemgetter(1), reverse = True)
   ordered_tags = sorted(tags.items(), key = operator.itemgetter(1), reverse = True)

上述代码将生成以下输出。

memory and forensics output

实现的 YARA 规则数量有助于更好地了解可疑文件。间接地,可疑文件可以帮助收集适当的取证信息。

以下是 github 中的源代码 https://github.com/radhikascs/Python_yara