Python Forensics - Mémoire et criminalistique

Dans ce chapitre, nous nous concentrerons sur l'étude de la mémoire volatile à l'aide de Volatility, un framework d'investigation basé sur Python applicable sur les plates-formes suivantes: Android et Linux.

Mémoire volatile

La mémoire volatile est un type de stockage dans lequel le contenu est effacé lorsque l'alimentation du système est coupée ou interrompue. La RAM est le meilleur exemple de mémoire volatile. Cela signifie que si vous travailliez sur un document qui n'a pas été enregistré dans une mémoire non volatile, comme un disque dur, et que l'ordinateur a perdu de l'énergie, toutes les données seront perdues.

En général, la criminalistique de la mémoire volatile suit le même modèle que les autres enquêtes médico-légales -

  • Sélection de la cible de l'enquête
  • Acquérir des données médico-légales
  • Analyse médico-légale

Les bases volatility plugins qui sont utilisés pour les regroupements Android RAM dumppour analyse. Une fois le vidage de la RAM recueilli pour analyse, il est important de commencer à rechercher les logiciels malveillants dans la RAM.

Règles YARA

YARA est un outil populaire qui fournit un langage robuste, est compatible avec les expressions régulières basées sur Perl et est utilisé pour examiner les fichiers / répertoires suspects et faire correspondre les chaînes.

Dans cette section, nous utiliserons YARA sur la base de l'implémentation de correspondance de modèle et les combinerons avec l'alimentation électrique. Le processus complet sera bénéfique pour l'analyse médico-légale.

Exemple

Considérez le code suivant. Ce code aide à extraire le code.

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)

Le code ci-dessus produira la sortie suivante.

Le nombre de règles YARA mises en œuvre contribue à donner une meilleure image des fichiers suspects. Indirectement, la liste des fichiers suspects aide à recueillir des informations appropriées pour la criminalistique.

Voici le code source dans github: https://github.com/radhikascs/Python_yara