Python 取证 - 内存和取证

  • 简述

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

    易失性存储器是一种存储类型,当系统电源关闭或中断时,内容会被擦除。RAM 是易失性存储器的最佳示例。这意味着,如果您正在处理尚未保存到非易失性存储器(例如硬盘驱动器)的文档,并且计算机断电,那么所有数据都将丢失。
    一般来说,易失性内存取证遵循与其他取证调查相同的模式 -
    • 选择调查对象
    • 获取取证数据
    • 取证分析
    基础的volatility plugins用于 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)
    
    上面的代码将产生以下输出。
    内存和取证输出
    实施的 YARA 规则的数量有助于更好地了解可疑文件。间接地,可疑文件列表有助于收集适当的取证信息。
    以下是github中的源代码:https ://github.com/radhikascs/Python_yara