Python取证内存和取证


在本章中,我们将重点研究易失性存储器,并借助 挥发性 ,一个基于 Python 的取证框架,适用于以下平台: Android and Linux .

易失性记忆


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

一般来说,易失性内存取证遵循与其他取证调查相同的模式:

  • 选择调查对象
  • 获取取证数据
  • 取证分析

基础的 波动率插件 用于 Android 集合 RAM dump 进行分析。收集 RAM 转储进行分析后,开始在 RAM 中寻找恶意软件非常重要。

雅拉规则


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

在本节中,我们将使用基于模式匹配实现的 YARA,并将它们与实用程序相结合。整个过程将有利于取证分析。

例子

考虑以下代码。此代码有助于提取代码。

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 输出

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

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