Sandblaster เป็นเครื่องมือสำหรับการย้อนกลับ (decompiling) โปรไฟล์ Binary Apple Sandbox โปรไฟล์ Apple Sandbox ถูกเขียนใน SBPL ( ภาษาโปรไฟล์ Sandbox ) ภาษาที่มีลักษณะคล้ายโครงการและจากนั้นจะถูกรวบรวมเป็นรูปแบบไบนารีที่ไม่มีเอกสารและจัดส่ง ส่วนใหญ่ใช้บน iOS โปรไฟล์ Sandbox มีอยู่ใน MacOS เช่นกัน Sandblaster คือความรู้ของเราเครื่องมือแรกที่ย้อนกลับโปรไฟล์ Binary Sandbox เป็นรูปแบบ SBPL ดั้งเดิมของพวกเขา SandBlaster ทำงานบน iOS ตั้งแต่เวอร์ชัน 7 เป็นต้นไปรวมถึง iOS 11
รายงานทางเทคนิค Sandblaster: การย้อนกลับ Apple Sandbox นำเสนอข้อมูลที่กว้างขวาง (แม้ว่าจะล้าสมัยเล็กน้อย) เกี่ยวกับ Internals Sandblaster
Sandblaster อาศัยงานก่อนหน้านี้โดยรหัสและสไลด์ของ Dionysus Blazakis และ Stefan Esser
Reverser (ใน reverse-sandbox/ Folder) และเครื่องมือ Helper (ใน helpers/ โฟลเดอร์) ทำงานบนแพลตฟอร์มการทำงานของ Python
Sandblaster อาจติดตั้งและเรียกใช้แบบสแตนด์อโลนแม้ว่าเราจะแนะนำให้ติดตั้งและเรียกใช้จากภายใน IExtractor ตรวจสอบเอกสาร IExtractor สำหรับข้อมูล
IExtractor เป็นซอฟต์แวร์โอเพ่นซอร์สที่เปิดตัวภายใต้ใบอนุญาต BSD 3 ข้อ
Sandblaster ต้องการ Python2 สำหรับตัวกลับ (ใน reverse-sandbox/ ), Python3 พร้อม lief Lief สำหรับสคริปต์ผู้ช่วย (ใน helpers/ )
หลังจากโคลนนิ่งที่เก็บทราย BLASTER คุณต้องติดตั้ง lief สำหรับ Python3:
pip3 install lief
หากการติดตั้ง lief ล้มเหลวคุณต้องรวบรวม ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการรวบรวมสามารถพบได้ในหน้า Wiki
ในการใช้ SandBlaster คุณต้องเข้าถึงโปรไฟล์ Binary Sandbox และการดำเนินการ Sandbox ซึ่งเป็นชุดของสตริงที่กำหนดการกระทำเฉพาะของ Sandbox การดำเนินการ Sandbox และโปรไฟล์ Sandbox นั้นถูกดึงออกมาโดยใช้สคริปต์ helpers/extract_sandbox_data.py โปรไฟล์ Sandbox ถูกสกัดจากส่วนขยายเคอร์เนล Sandbox (เป็นชุดสำหรับ iOS 4 และ 9-11) หรือจากเคอร์เนลแคช (เป็นชุดสำหรับ iOS 12) หรือจากไฟล์ sandboxd ในระบบไฟล์ iOS (สำหรับ iOS 5-8) การดำเนินการของ Sandbox นั้นถูกสกัดจากส่วนขยายเคอร์เนล (สำหรับ iOS 4-11) หรือจากเคอร์เนลแคช (สำหรับ iOS 12)
ดังนั้นในฐานะข้อมูลอินพุต Sandblaster ต้องใช้เคอร์เนลคาเช่, ส่วนขยายของเคอร์เนลแซนด์บ็อกซ์และไฟล์ sandboxd ข้อมูลและสคริปต์เกี่ยวกับการแยกออกจากไฟล์ IPSW ( ซอฟต์แวร์ iPhone ) ที่เปิดเผยต่อสาธารณะนำเสนอโดย IExtractor
ด้านล่างนี้เป็นขั้นตอนและคำสั่งเพื่อย้อนกลับโปรไฟล์ Sandbox สำหรับ iOS 8.4.1 สมมติว่าส่วนขยายเคอร์เนล Sandbox ( com.apple.security.sandbox.kext ) และไฟล์ sandboxd พร้อมใช้งาน:
# Extract sandbox operations from kernelcache.
cd helpers/
./extract_sandbox_data.py -o iPad2,1_8.4.1_12H321.sb_ops iPad2,1_8.4.1_12H321.com.apple.security.sandox.kext 8.4.1
# Extract binary sandbox profile files from sandboxd.
mkdir iPad2,1_8.4.1_12H321.sandbox_profiles
./extract_sandbox_data.py -O iPad2,1_8.4.1_12H321.sandbox_profiles/ iPad2,1_8.4.1_12H321.sandboxd 8.4.1
# Reverse all binary sandbox profiles.
cd ../reverse-sandbox/
mkdir iPad2,1_8.4.1_12H321.reversed_profiles
for i in ../helpers/iPad2,1_8.4.1_12H321.sandbox_profiles/*; do python reverse_sandbox.py -r 8.4.1 -o ../helpers/iPad2,1_8.4.1_12H321.sb_ops -d iPad2,1_8.4.1_12H321.reversed_profiles/ "$i"; done
ด้านล่างนี้เป็นขั้นตอนและคำสั่งเพื่อย้อนกลับโปรไฟล์ Sandbox สำหรับ iOS 9.3 สมมติว่าส่วนขยายเคอร์เนล Sandbox ( com.apple.security.sandbox.kext ) พร้อมใช้งาน:
# Extract sandbox operations from kernelcache.
cd helpers/
./extract_sandbox_data.py -o iPhone5,1_9.3_13E237.sb_ops iPhone5,1_9.3_13E237.com.apple.security.sandox.kext 9.3
# Extract sandbox profile bundle from kernel sandbox extension.
./extract_sandbox_data.py -O . iPhone5,1_9.3_13E237.com.apple.security.sandox.kext 9.3
cd ../reverse-sandbox/
# Reverse all binary sandbox profiles in sandbox bundle.
mkdir iPhone5,1_9.3_13E237.reversed_profiles
# Print all sandbox profiles in bundle.
python reverse_sandbox.py -r 9.3 -o ../helpers/iPhone5,1_9.3_13E237.sb_ops -d iPhone5,1_9.3_13E237.reversed_profiles/ ../helpers/sandbox_bundle -psb
# Do actual reversing.
python reverse_sandbox.py -r 9.3 -o ../helpers/iPhone5,1_9.3_13E237.sb_ops -d iPhone5,1_9.3_13E237.reversed_profiles/ ../helpers/sandbox_bundle
การสกัดโปรไฟล์ Binary Sandbox แตกต่างกันระหว่าง iOS <= 8 และ iOS> = 9. เนื่องจาก iOS> = 9 โปรไฟล์ Binary Sandbox จะถูกเก็บไว้ในชุด Sandbox ในส่วนขยายของเคอร์เนล Sandbox สคริปต์ helpers/extract_sandbox_data.py ดึงพวกเขาอย่างเหมาะสมขึ้นอยู่กับเวอร์ชัน iOS
ตัวเลือก -psb สำหรับ reverse_sandbox.py พิมพ์โปรไฟล์ Sandbox เป็นส่วนหนึ่งของชุด Sandbox โดยไม่ต้องย้อนกลับจริง
สคริปต์ reverse_sandbox.py ต้องทำงานในไดเรกทอรี ( reverse-sandbox/ ) เนื่องจากต้องการโมดูล Python อื่น ๆ และไฟล์ logger.config
helpers/ โฟลเดอร์ย่อยมีสคริปต์ตัวช่วยที่ให้อินเทอร์เฟซที่ดีกว่าสำหรับเครื่องมือภายนอก
ตัวกลับจริงเป็นส่วนหนึ่งของ reverse-sandbox/ Folder ไฟล์ที่นี่สามารถจัดหมวดหมู่ดังนี้:
reverse_sandbox.py มันแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งการแยกวิเคราะห์ขั้นพื้นฐานของไฟล์ไบนารีอินพุต (ส่วนแยก) และเรียกฟังก์ชั่นที่เหมาะสมจากโมดูลอื่น ๆoperation_node.py มันมีฟังก์ชั่นในการสร้างกราฟกฎที่สอดคล้องกับโปรไฟล์ Sandbox และเพื่อแปลงกราฟเป็น SBPL มันถูกเรียกโดย reverse_sandbox.pysandbox_filter.py และการกำหนดค่าใน filters.json , filter_list.py และ filters.py ฟังก์ชั่นเฉพาะของตัวกรองถูกเรียกโดย operation_node.pysandbox_regex.py และ regex_parse.py regex_parse.py เป็นตัวแยกวิเคราะห์ด้านหลังที่แปลงการแสดงไบนารีเป็นกราฟพื้นฐาน sandbox_regex.py แปลงการแสดงกราฟ (automaton) เป็นนิพจน์ทั่วไปจริง (เช่นสตริงของอักขระและ metacharacters) มันถูกเรียกโดย reverse_sandbox.py สำหรับการแยกวิเคราะห์การแสดงออกปกติโดยมีรายการนิพจน์ปกติที่เกิดขึ้นจะถูกส่งผ่านไปยังฟังก์ชั่นที่เปิดเผยโดย operation_node.py ; operation_node.py ส่งผ่านไปยังไฟล์การจัดการตัวกรอง Sandboxreverse_string.py คลาส SandboxString หลักใน reverse_string.py ใช้ใน sandbox_filter.pylogger.config โดยค่าเริ่ม INFO และข้อความระดับที่สูงขึ้นจะถูกพิมพ์ไปยังคอนโซลในขณะที่ DEBUG และข้อความระดับที่สูงขึ้นจะถูกพิมพ์ไปยังไฟล์ reverse.log SandBlaster ทำงานสำหรับ iOS เวอร์ชัน 4 เป็นต้นไปรวมถึง iOS 12 แอปเปิ้ลได้ทำการอัปเดตรูปแบบไบนารีของโปรไฟล์ Sandbox: เนื่องจากโปรไฟล์ iOS 9 Sandbox ถูกเก็บไว้ในชุดข้อมูลเนื่องจากสตริง iOS 10 ถูกรวมเข้าด้วยกันในรูปแบบไบนารีพิเศษ iOS 11 ไม่ได้นำการเปลี่ยนแปลงใด ๆ มาสู่รูปแบบ
เข้าร่วมกับเราในการอภิปรายสด