นี่คือกรอบการประเมินข้อบกพร่องขั้นสูงร่วมสำหรับแอปพลิเคชัน Android (Jaads ชื่อเดิม Jade เปลี่ยนชื่อเพื่อหลีกเลี่ยงปัญหาเครื่องหมายการค้าที่อาจเกิดขึ้น) เขียนในปี 2014 Jaadas เป็นเครื่องมือที่เขียนขึ้นใน Java และ Scala ด้วยพลังของเขม่า คุณสมบัติของมันรวมถึงการวิเคราะห์การใช้ API ในทางที่ผิดการวิเคราะห์การบริการ (เจตนาผิดพลาด) ในท้องถิ่นการวิเคราะห์การไหลแบบ taint รูปแบบระหว่างกระบวนการ (จากเจตนาสู่ API ที่ละเอียดอ่อนเช่นการได้รับพัสดุจากเจตนาและใช้เพื่อเริ่มกิจกรรม)
Jaadas ยังสามารถรวม Multidex เป็นหนึ่งเดียวและวิเคราะห์โดยสิ้นเชิง ความสามารถในการตรวจจับของ Jaadas ส่วนใหญ่สามารถกำหนดได้ในไฟล์ config และไฟล์ข้อความ groovy (ไฟล์แหล่งที่มาของ Soot และ Sink)
Jaadas ถูกบรรจุลงในคลังเก็บ Jar เดียวและฉันมีไฟล์กฎความเสี่ยงเริ่มต้น มีสองโหมดสำคัญสำหรับ Jaadas
FullAnalysis ปลดปล่อยพลังเต็มรูปแบบของ Jaadas และเขม่ารวมถึงการวิเคราะห์การใช้งานทั้งหมดระหว่างกระบวนการและการวิเคราะห์การไหลของข้อมูลระหว่างกระบวนการ แต่มันอาจใช้เวลามากและอาจไม่เสร็จในเครื่องที่มีหน่วยความจำขนาดเล็ก (<16GB) ค่าเริ่มต้นคือโหมดเต็มรูปแบบ
FastAnalysis มักจะเสร็จสิ้นในเวลาน้อยกว่า 1 นาทีและมีไว้สำหรับการวิเคราะห์แบทช์ขนาดใหญ่ การวิเคราะห์ระหว่างกระบวนการถูกปิดใช้งานเพื่อให้ได้ความยืดหยุ่นสูงสุด ในสถานการณ์ปกติโหมดนี้เพียงพอสำหรับการตรวจสอบทั่วไป
-Fastanalysis ช่วยให้ fastanalysis และปิดการใช้งาน fullanalysis
บรรทัดคำสั่งสำหรับการวิเคราะห์: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -ตัวเลือก C -C ต้องจัดทำเป็นไดเรกทอรีสำหรับไฟล์กำหนดค่ารวมถึงกฎที่มีความเสียหายแหล่งที่มาและอ่างล้างจานคำอธิบาย API ที่มีช่องโหว่และอื่น ๆ หากคุณไม่เข้าใจเนื้อหาไฟล์ config อย่าแก้ไขให้ปล่อยไว้ตามที่เป็นอยู่
### -ตัวเลือก P -p ตัวเลือกระบุไดเรกทอรีแพลตฟอร์ม Android ซึ่งมักจะชี้ไปที่ $ {Android_SDK}/แพลตฟอร์ม/
เขม่าต้องการเวอร์ชันเฉพาะของ platform.jar ที่จะนำเสนอตัวอย่างเช่นหากเป้าหมายการวิเคราะห์ของคุณมี targetsdk = 22 ดังนั้นเขม่าจะมองหาแพลตฟอร์ม/Android-22/Android.jar มิฉะนั้นจะทำให้เกิดข้อผิดพลาด หากคุณไม่มีขวดที่เฉพาะเจาะจงจริง ๆ แล้วคุณสามารถสร้างสัญลักษณ์ที่ตำแหน่งนั้นชี้สิ่งที่คุณมีอยู่แล้วพูดว่า Android-16.jar เพื่อให้เขม่ามีความสุข มันจะไม่ส่งผลกระทบต่อความแม่นยำในการวิเคราะห์
-f ตัวเลือกระบุ APK ที่จะวิเคราะห์
Jaadas จะส่งออกผลลัพธ์ในรายการไปยังคอนโซลและยังเขียนผลลัพธ์ JSON-ED ไปยังเอาต์พุต/ ไดเรกทอรี: {MD5_OF_INPUT_APK} .txt ตัวอย่างสามารถค้นหาได้ในไดเรกทอรีผลลัพธ์ของ repo นี้: https://github.com/flankerhqd/jaadas/blob/master/output/92db77bbe1cae9004f11ef9d3d6cbf08.txt
ตัวอย่าง:
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r24 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r24) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void sendBroadcast(android.content.Intent,java.lang.String)>($r27, $r24) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r4 = virtualinvoke $r2.<android.content.Intent: android.os.Bundle getExtras()>() " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r6 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r6) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r9 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r9) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}]}หากต้องการหลีกเลี่ยง oom ให้เพิ่ม -xmx ตัวเลือกในคำสั่งเช่น java -jar -xmx8192m jade -0.1.jar
Jaadas จัดโดย Gradle รัน gradle fatJar ที่รากของไดเรกทอรีต้นฉบับและขวดเดียวที่มีการรวมตัวเดียวจะถูกสร้างขึ้นที่ ./jade/build/ แต่ละไดเรกทอรีจริง ๆ แล้วแสดงถึง Git Submodule ในขั้นต้น เพื่อความเรียบง่ายฉันรวมกันเป็นไดเรกทอรีรากเดียวกันและคุณสามารถเปลี่ยนได้ตามที่คุณต้องการติดตามการเปลี่ยนแปลงเขม่าต้นน้ำ
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defect-assesment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releases/download/release0.1/jaadas-0.1.zip
ขอบคุณผู้เขียนเขม่า (https://github.com/sable/soot) สำหรับการจัดทำกรอบที่ดีเช่นนี้
นี่เป็นเพียงต้นแบบการวิจัยใช้ความเสี่ยงของคุณเอง ผลลัพธ์อาจมีผลบวกที่ผิดพลาดและเชิงลบเท็จเนื่องจากลักษณะของการวิเคราะห์แบบคงที่ อย่าลังเลที่จะแยกและดึงมัน
jdk> = 1.8 (ต้อง)
scala> = 2.11 ทดสอบ