Учебники

Python Forensics — память и криминалистика

В этой главе мы сконцентрируемся на исследовании энергозависимой памяти с помощью Volatility , криминалистической среды на основе Python, применимой к следующим платформам: Android и Linux .

Летучая память

Энергозависимая память — это тип хранилища, в котором содержимое стирается, когда питание системы отключается или прерывается. ОЗУ является лучшим примером энергозависимой памяти. Это означает, что если вы работали с документом, который не был сохранен в энергонезависимой памяти, такой как жесткий диск, и компьютер потерял питание, то все данные будут потеряны.

Как правило, криминалистическая экспертиза изменчивой памяти следует той же схеме, что и другие криминалистические исследования —

  • Выбор цели расследования
  • Получение криминалистических данных
  • Судебный анализ

Основные плагины волатильности, которые используются для Android, собирают дамп оперативной памяти для анализа. Как только дамп ОЗУ собран для анализа, важно начать поиск вредоносного ПО в ОЗУ.

Правила YARA

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