Python Forensics - Memory and Forensics
W tym rozdziale skupimy się na badaniu ulotnej pamięci za pomocą Volatility, oparty na Pythonie framework do kryminalistyki mający zastosowanie na następujących platformach: Android i Linux.
Ulotna pamięć
Pamięć ulotna to rodzaj pamięci, w której zawartość jest kasowana po wyłączeniu lub przerwaniu zasilania systemu. RAM jest najlepszym przykładem pamięci ulotnej. Oznacza to, że jeśli pracujesz nad dokumentem, który nie został zapisany w pamięci nieulotnej, takiej jak dysk twardy, a komputer stracił zasilanie, wszystkie dane zostaną utracone.
Ogólnie rzecz biorąc, kryminalistyka pamięci ulotnej postępuje według tego samego schematu, co inne badania kryminalistyczne -
- Wybór celu śledztwa
- Pozyskiwanie danych kryminalistycznych
- Analiza kryminalistyczna
Podstawy volatility plugins które są używane do zbierania plików Android RAM dumpDo analizy. Po zebraniu zrzutu pamięci RAM do analizy ważne jest, aby rozpocząć wyszukiwanie złośliwego oprogramowania w pamięci RAM.
Zasady YARA
YARA to popularne narzędzie, które zapewnia niezawodny język, jest kompatybilne z wyrażeniami regularnymi opartymi na Perlu i służy do sprawdzania podejrzanych plików / katalogów i pasujących łańcuchów.
W tej sekcji użyjemy YARA w oparciu o implementację dopasowania wzorców i połączymy je z zasilaniem sieciowym. Cały proces będzie korzystny dla analizy kryminalistycznej.
Przykład
Rozważmy następujący kod. Ten kod pomaga w wyodrębnieniu kodu.
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)
Powyższy kod wygeneruje następujące dane wyjściowe.
Liczba zaimplementowanych reguł YARA pomaga w uzyskaniu lepszego obrazu podejrzanych plików. Pośrednio lista podejrzanych plików pomaga w zebraniu odpowiednich informacji dla medycyny sądowej.
Poniżej znajduje się kod źródłowy w github: https://github.com/radhikascs/Python_yara