Python Forensics - Trí nhớ và Pháp y
Trong chương này, chúng tôi sẽ tập trung vào việc điều tra ký ức biến động với sự trợ giúp của Volatility, một khung pháp y dựa trên Python có thể áp dụng trên các nền tảng sau: Android và Linux.
Ki ưc dê phai
Bộ nhớ đa năng là loại bộ nhớ trong đó nội dung sẽ bị xóa khi nguồn của hệ thống bị tắt hoặc bị ngắt. RAM là ví dụ tốt nhất về bộ nhớ dễ bay hơi. Có nghĩa là, nếu bạn đang làm việc trên một tài liệu chưa được lưu vào bộ nhớ không bay hơi, chẳng hạn như ổ cứng và máy tính bị mất nguồn, thì tất cả dữ liệu sẽ bị mất.
Nói chung, các cuộc điều tra về trí nhớ dễ bay hơi tuân theo mô hình giống như các cuộc điều tra pháp y khác -
- Lựa chọn mục tiêu điều tra
- Thu thập dữ liệu pháp y
- Phân tích pháp y
Cơ bản volatility plugins được sử dụng cho tập hợp Android RAM dumpđể phân tích. Sau khi kết xuất RAM được thu thập để phân tích, điều quan trọng là bắt đầu tìm kiếm phần mềm độc hại trong RAM.
Quy tắc YARA
YARA là một công cụ phổ biến cung cấp một ngôn ngữ mạnh mẽ, tương thích với Biểu thức chính quy dựa trên Perl và được sử dụng để kiểm tra các tệp / thư mục bị nghi ngờ và khớp các chuỗi.
Trong phần này, chúng tôi sẽ sử dụng YARA dựa trên việc triển khai đối sánh mẫu và kết hợp chúng với công suất tiện ích. Quá trình hoàn chỉnh sẽ có lợi cho việc phân tích pháp y.
Thí dụ
Hãy xem xét đoạn mã sau. Mã này giúp giải nén mã.
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)
Đoạn mã trên sẽ tạo ra kết quả sau.
Số lượng các quy tắc YARA được triển khai giúp đưa ra bức tranh tốt hơn về các tệp bị nghi ngờ. Một cách gián tiếp, danh sách các tệp bị nghi ngờ giúp thu thập thông tin thích hợp cho pháp y.
Sau đây là mã nguồn trong github: https://github.com/radhikascs/Python_yara