Python Forensics - หน่วยความจำและนิติเวช
ในบทนี้เราจะมุ่งเน้นไปที่การตรวจสอบหน่วยความจำที่ระเหยได้ด้วยความช่วยเหลือของ Volatilityซึ่งเป็นกรอบงานนิติวิทยาศาสตร์ที่ใช้ Python ที่ใช้กับแพลตฟอร์มต่อไปนี้: Android และ Linux.
หน่วยความจำระเหย
หน่วยความจำระเหยเป็นหน่วยเก็บข้อมูลประเภทหนึ่งที่เนื้อหาจะถูกลบเมื่อปิดหรือขัดจังหวะการทำงานของระบบ RAM เป็นตัวอย่างที่ดีที่สุดของหน่วยความจำระเหย หมายความว่าหากคุณกำลังทำงานกับเอกสารที่ไม่ได้ถูกบันทึกลงในหน่วยความจำที่ไม่ลบเลือนเช่นฮาร์ดไดรฟ์และคอมพิวเตอร์สูญเสียพลังงานข้อมูลทั้งหมดจะสูญหาย
โดยทั่วไปการตรวจสอบความจำระเหยจะเป็นไปตามรูปแบบเดียวกับการสืบสวนทางนิติวิทยาศาสตร์อื่น ๆ -
- การเลือกเป้าหมายของการสอบสวน
- การรับข้อมูลทางนิติวิทยาศาสตร์
- การวิเคราะห์ทางนิติวิทยาศาสตร์
พื้นฐาน volatility plugins ซึ่งใช้สำหรับ Android รวบรวม RAM dumpสำหรับการวิเคราะห์ เมื่อรวบรวมการถ่ายโอนข้อมูล RAM เพื่อวิเคราะห์แล้วสิ่งสำคัญคือต้องเริ่มค้นหามัลแวร์ใน RAM
กฎของ YARA
YARA เป็นเครื่องมือยอดนิยมที่ให้ภาษาที่มีประสิทธิภาพเข้ากันได้กับ Regular Expressions ที่ใช้ 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