Intellidroid เป็นเครื่องมือวิเคราะห์สำหรับแอปพลิเคชัน Android ที่แยกเส้นทางการโทรที่นำไปสู่พฤติกรรมเฉพาะและดำเนินการเส้นทางเหล่านี้อย่างแม่นยำในช่วงเวลาทำงาน เมื่อได้รับชุด พฤติกรรมเป้าหมาย ส่วนประกอบการวิเคราะห์แบบคงที่จะข้ามกราฟการโทรของแอปพลิเคชันเพื่อค้นหาเส้นทางไปยังพฤติกรรมเหล่านี้ นอกจากนี้ยังแยกข้อ จำกัด เส้นทางซึ่งใช้เพื่อกำหนดค่าอินพุตที่สามารถเรียกใช้เส้นทางเหล่านี้ ส่วนประกอบแบบไดนามิกใช้เส้นทาง/ข้อ จำกัด ที่แยกออกมาและฉีดค่าอินพุตลงในอุปกรณ์ Android ทำให้เกิดพฤติกรรมเป้าหมาย
สำหรับรายละเอียดเพิ่มเติมโปรดดูกระดาษและสไลด์ของเรา (NDSS 2016)
'frameworkanalysis' ทำการวิเคราะห์แบบคงที่เพื่อสร้างข้อ จำกัด สำหรับกรอบ Android ขณะนี้เรามีข้อ จำกัด ด้านเอาท์พุทเฟรมเวิร์กเพื่อให้สามารถเพิ่มลงในข้อ จำกัด ของแอปพลิเคชันที่ผลิตโดยส่วนประกอบ 'Appanalysis'
ไดเรกทอรี 'Appanalysis' ถือรหัสที่สร้างข้อ จำกัด สำหรับแอปพลิเคชัน Android
| ไดเรกทอรี | คำอธิบาย |
|---|---|
| ประมวลผลล่วงหน้า | สคริปต์เพื่อแยกและประมวลผลไฟล์ APK ก่อนที่จะส่งไปยังเครื่องมือ |
| SRC | ไฟล์ซอร์สโค้ด |
| Libs | การพึ่งพารวมถึงห้องสมุด Wala ที่จำเป็น 1 |
| Android | รวบรวมไฟล์ Android Framework (เพื่อวิเคราะห์) จาก AOSP เวอร์ชัน 4.4.2_R2 |
1 เราได้เปลี่ยนแปลงการสร้างกราฟการโทรของ Wala เล็กน้อยเพื่อปรับปรุงประสิทธิภาพของ Intellidroid ซอร์สโค้ดที่แก้ไขสามารถพบได้ที่นี่
โครงการนี้ใช้ระบบการสร้าง Gradle ไฟล์เอาต์พุตอยู่ใน build/ Directory สคริปต์ Gradlew เป็นเครื่องห่อหุ้มสำหรับเครื่องจักรที่ไม่ได้ติดตั้ง Gradle แล้ว หากเครื่องพัฒนาของคุณมี Gradle อยู่แล้วคุณสามารถใช้การติดตั้งของคุณเองได้โดยแทนที่ ./gradlew gradlew ด้วย gradle ในคำสั่งด้านล่าง จำเป็นต้องมีการเชื่อมต่อเครือข่ายเมื่อรวบรวมรหัสเป็นครั้งแรกเพื่อให้ Gradle สามารถดาวน์โหลดการพึ่งพาได้โดยอัตโนมัติ
ไฟล์ Android Framework ที่รวมอยู่ในไดเรกทอรี android ถูกรวบรวมโดยใช้ JDK 1.6 แต่ apktool ที่ใช้ในสคริปต์การประมวลผลล่วงหน้าต้องใช้ JDK 1.7 เราขอแนะนำให้ใช้ JDK 1.7 ซึ่งดูเหมือนว่าจะทำงานได้ดีที่สุด หากจำเป็นคุณสามารถแทนที่ไฟล์ในไดเรกทอรี android เพื่อลอง AOSP หรือ JDK เวอร์ชันต่าง ๆ
ไฟล์ APK เป้าหมายที่จะวิเคราะห์ควรประมวลผลล่วงหน้าก่อนโดยใช้สคริปต์ในโฟลเดอร์ preprocess ไดเรกทอรีผลลัพธ์ (ที่มีไฟล์ APK และทรัพยากรที่แยกออกมา) สามารถส่งผ่านไปยังการวิเคราะห์แบบคงที่
สคริปต์การประมวลผลล่วงหน้าใช้ apktool และกล้าที่จะแยกแพ็คเกจ APK คุณสามารถใช้เครื่องมือสกัดของคุณเอง แต่คุณอาจต้องแก้ไขรหัสการวิเคราะห์แอปเพื่อให้ IntelliDroid สามารถค้นหาไฟล์ bytecode และรายการสำหรับแอปพลิเคชันที่กำหนด
./preprocess/PreprocessAPK.sh <APK file>
./preprocess/PreprocessDataset.sh <directory of APK files>
./gradlew build
./IntelliDroidAppAnalysis -o <output directory> <preprocessed app directory>
หากต้องการดูตัวเลือกบรรทัดคำสั่งอื่น ๆ เรียกใช้:
./IntelliDroidAppAnalysis --help
ไดเรกทอรีเอาต์พุตใช้เพื่อจัดเก็บไฟล์ข้อมูลแอปข้อมูล JSON และไฟล์ข้อ จำกัด Z3 หากไม่ได้ระบุไฟล์เหล่านี้จะถูกเก็บไว้ใน ./pathOutput pathoutput ไฟล์เอาต์พุตถูกใช้โดยเครื่องมือ IntelliDroidDynamicClient เพื่อระบุเส้นทางการโทรและเพื่อสร้างข้อมูลอินพุตเพื่อเรียกพา ธ เหล่านี้
ไฟล์ appInfo.json และ constraintX_X.py ที่ผลิตในไดเรกทอรีเอาต์พุตเป็นสิ่งจำเป็นสำหรับไคลเอนต์แบบไดนามิก แต่ไม่สามารถอ่านได้มาก การตั้งค่าสถานะ -y สามารถใช้เพื่อให้ได้ผลลัพธ์ของผลลัพธ์เส้นทาง/ข้อ จำกัด ที่อ่านได้มากขึ้น
ไดเรกทอรี 'DynamicClient' มีโปรแกรม Python ที่สื่อสารกับอุปกรณ์ Android และส่งอินพุตที่กระตุ้นเหตุการณ์ที่ต้องการ
โปรแกรมคาดว่าอุปกรณ์ Android หรือ Emulator เชื่อมต่อกับระบบ อุปกรณ์นี้จะต้องเรียกใช้ระบบปฏิบัติการ Android ที่กำหนดเองที่มี IntelliDroidService (ซึ่งตีความคำสั่งโปรแกรมนี้ส่งและทำการเรียกร้องเหตุการณ์จริง) โปรแกรม DynamicClient จะเชื่อมต่อกับอุปกรณ์โดยอัตโนมัติผ่านซ็อกเก็ตบนพอร์ต TCP: 12348 เครื่องมือ adb จะถูกใช้เพื่อตั้งค่าการเชื่อมต่อและเรียกใช้คำสั่งบางคำและควรเข้าถึงได้จาก PATH (สามารถทำได้โดยการเพิ่มไดเรกทอรีเครื่องมือ Android SDK ลงในตัวแปร PATH หรือโดยการตั้งค่าสภาพแวดล้อม AOSP Build ก่อนที่จะเรียกใช้ DynamicClient
นอกจากนี้ DynamicClient ใช้ตัวแก้ข้อ จำกัด Z3 ผ่าน Python API (Z3-PY) คำแนะนำในการสร้างและติดตั้ง Z3 ด้วยการผูก Python มีอยู่ที่นี่
ระบบปฏิบัติการ Android ที่กำหนดเองที่ใช้โดย Intellidroid นั้นมีให้เป็นชุดของไฟล์ DIFF ที่สามารถนำไปใช้กับแผนผังแหล่งต้นกำเนิด AOSP ปัจจุบัน Intellidroid ถูกนำไปใช้สำหรับ Android 4.3 (สาขา AOSP android-4.3_r1 ) โปรดดูเอกสาร AOSP สำหรับคำแนะนำเกี่ยวกับวิธีการดาวน์โหลดและสร้าง Android
เมื่อคุณดาวน์โหลดและรวบรวมเวอร์ชัน AOSP ที่ถูกต้องแล้วคุณสามารถใช้แพตช์ IntelliDroid ซึ่งอยู่ในไดเรกทอรี androidPatches ไฟล์ patch.sh และ unpatch.sh มีให้เพื่อช่วยทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติ หลังจากการแก้ไขแล้วให้สร้าง AOSP ใหม่ (เราพบว่าคุณอาจต้องเรียกใช้ make สองครั้งมิฉะนั้นไฟล์บางไฟล์บนตัวจำลองจะไม่สอดคล้องกัน) คุณอาจต้องเรียกใช้ make update-api พร้อมกับ make เมื่อสร้างขึ้นแล้วคุณสามารถใช้ logcat เพื่อตรวจสอบว่าคลาส IntelliDroidService เริ่มต้นเป็นบริการระบบเมื่ออุปกรณ์บูท
cd androidPatches
./patch.sh <path to AOSP directory>
./IntelliDroidDynamicClient.py
HELP (รับคำอธิบายคำสั่ง)
INSTALL <APK file>
START <directory to app information, generated by IntelliDroidAppAnalysis>
TRIGGER <call path ID to trigger, as specified in appInfo.json>
EXECUTE <command to send to IntelliDroidService> 1
INFO <info requested from IntelliDroidService> 1
CLOSE
KILL
1 คำสั่งเหล่านี้มีวัตถุประสงค์เพื่อการดีบักเท่านั้น คุณควรใช้สิ่งเหล่านี้หากคุณรู้พารามิเตอร์ที่แน่นอนที่ IntellidroidService คาดหวัง
การรวมเข้ากับ taintdroid นั้นค่อนข้างตรงไปตรงมา สำหรับส่วนประกอบ 'appanalysis' ให้ใช้การตั้งค่าสถานะ -t เพื่อระบุรายการวิธีการที่แตกต่างกัน (เช่นไฟล์ taintdroidTargets.txt ที่ให้ไว้)
./IntelliDroidAppAnalysis -t taintdroidTargets.txt <preprocessed app directory>
ในด้านไดนามิกทำตามคำแนะนำที่นี่เพื่อดาวน์โหลดและสร้าง taintdroid สำหรับ Android 4.3 เมื่อคุณตรวจสอบว่าการสร้าง taintdroid ของคุณใช้งานแพตช์ใน DynamicClient/androidPatches ในลักษณะเดียวกับที่คุณต้องการสำหรับ AOSP ที่ไม่ได้แก้ไข
Intellidroid ได้รับการพัฒนาในขั้นต้นว่าเป็นโครงการวิทยานิพนธ์ของอาจารย์โดย Michelle Wong ที่มหาวิทยาลัยโตรอนโตภายใต้การดูแลของดร. เดวิดโกหก
สำหรับข้อสงสัยใด ๆ กรุณาติดต่อ:
ต่อไปนี้ได้มีส่วนร่วมในการใช้รหัสไปยัง Intellidroid:
Intellidroid ได้รับการปล่อยตัวภายใต้ใบอนุญาต MIT