Android Security AutoRepro

ปลั๊กอิน AutoRepro Gradle สร้างขึ้นจากแพลตฟอร์มทดสอบของ Android Trade Federation เพื่อทดสอบอุปกรณ์ Android ทั้งหมดสำหรับการทดสอบแพตช์ความปลอดภัยเพื่อหาช่องโหว่ในกระดานข่าวสารด้านความปลอดภัยของ Android การทดสอบเหล่านี้มีไว้สำหรับข้อแก้ไขที่เชื่อมโยงหรือจะเชื่อมโยงกับ Common Vulnerabilities and Exposures (CVE) โดยเฉพาะ

ปลั๊กอินนี้ช่วยให้พัฒนาการทดสอบ Tradefed นอกซอร์สโค้ด Android ได้โดยใช้ Android Studio หรือ Android SDK มาตรฐาน ซึ่งรวมถึงยูทิลิตีทั้งหมดที่จําเป็นในการสร้างและเรียกใช้การทดสอบ Tradefed

โดยหลักๆ แล้วจะใช้เพื่อส่งการพิสูจน์แนวคิดที่ทําซ้ำได้อัตโนมัติสําหรับโปรแกรมรางวัลสำหรับช่องโหว่ของ Android

ดาวน์โหลดตัวอย่าง AutoRepro

สิ่งที่ต้องมีก่อน

วิธีการมีไว้สำหรับ PC ที่ใช้ Linux 64 บิต

  • Android Studio Ladybug ขึ้นไป - ติดตั้งได้จากเครื่องมือจัดการแพ็กเกจของดิสโทรด้วย
  • เครื่องมือแพลตฟอร์ม Android SDK (adb, fastboot) - ต้องติดตั้งและอยู่ใน $PATH (กล่าวคือ คุณควรเรียกใช้ adb จากบรรทัดคำสั่งได้) วิธีที่ง่ายที่สุดในการติดตั้งเครื่องมือแพลตฟอร์มคือการใช้เครื่องมือจัดการแพ็กเกจของดิสโทร
    • หากใช้เครื่องมือจัดการ SDK ของ Android Studio แทนเครื่องมือแพลตฟอร์มแบบสแตนด์อโลน อย่าลืมเพิ่มไดเรกทอรี platform-tools ของ SDK ลงใน $PATH ของคุณสำหรับการพัฒนาแบบบรรทัดคำสั่ง
  • AAPT2 - ติดตั้งโดยใช้โปรแกรมจัดการแพ็กเกจของดิสโทรได้เช่นกัน
  • Java JDK 21 ขึ้นไป - เข้ากันได้กับ Android SDK และ Gradle

เริ่มต้นใช้งาน Android Studio

หลังจากแตกไฟล์ตัวอย่างหรือเทมเพลตแล้ว ให้เปิดไดเรกทอรีใน Android Studio เป็นโปรเจ็กต์ที่มีอยู่ แล้วรอให้ Gradle ซิงค์เสร็จสมบูรณ์ การกำหนดค่าการเรียกใช้ Android Studio ที่กําหนดค่าไว้ล่วงหน้ามีอยู่หลายรายการ

งาน Gradle

  • assembleSubmissionSources - รวบรวมไฟล์ต้นฉบับสำหรับไฟล์ ZIP ที่ส่ง
  • assembleSubmissionZip - รวบรวมไฟล์ ZIP การส่งเพื่ออัปโหลด
  • copyInvocationResultsToSubmission - คัดลอกผลลัพธ์จากการเรียกใช้ Tradefed ก่อนหน้านี้ไปยังไดเรกทอรีแหล่งที่มาของการส่ง AutoRepro เพื่อช่วยในกระบวนการตรวจสอบ โปรดทราบว่าไฟล์นี้มีบันทึกจากทั้งโฮสต์และอุปกรณ์ โปรดตรวจสอบเนื้อหาก่อนหรือหลังเรียกใช้

การเรียกใช้ AutoRepro การกำหนดค่าการเรียกใช้ Android Studio

  • autorepro_nonroot_arm64
  • autorepro_nonroot_x86_64
  • autorepro_root_arm64
  • autorepro_root_x86_64

การกําหนดค่า Launcher อยู่ในรูปแบบ autorepro_{device_root}_{device_arch} โดยทั่วไปแล้ว เราขอแนะนำให้ใช้ตัวเลือกที่ไม่ใช่รูทเนื่องจากช่องโหว่ที่ต้องใช้รูทมีความรุนแรงน้อยกว่า อย่างไรก็ตาม การใช้สิทธิ์ระดับรูทในการตั้งค่าหรือล้างข้อมูลอาจยอมรับได้ ตราบใดที่มีการบันทึกไว้อย่างชัดเจนและเป็นที่ยอมรับโดยทั่วไปว่าเป็นสถานะที่ไม่ใช้สิทธิ์ระดับรูทที่ถูกต้อง เช่น อนุญาตให้ใช้สิทธิ์รูทเพื่อส่ง SMS ปลอมไปยังอุปกรณ์เพื่อหลีกเลี่ยงการใช้อุปกรณ์เครื่องที่ 2 และซิมการ์ดหลายใบ

ซึ่งจะเปิด Tradefed สำหรับการทดสอบ Tradefed จะรอให้อุปกรณ์ที่ถูกต้องเชื่อมต่อ ดังนั้นโปรดตรวจสอบว่ามีอุปกรณ์ที่เชื่อมต่ออยู่และได้รับสิทธิ์แก้ไขข้อบกพร่อง ADB แล้ว

เขียนการทดสอบ AutoRepro

การทดสอบ AutoRepro ประกอบด้วย 3 ส่วนและปลั๊กอิน Gradle ที่เกี่ยวข้อง 3 รายการ ดังนี้

  1. ปลั๊กอิน Gradle id("com.android.security.autorepro.javahosttest") การทดสอบ Tradefed ฝั่งโฮสต์ครั้งเดียวที่โต้ตอบกับอุปกรณ์ผ่าน ADB ตัวอย่างใช้ไดเรกทอรี submission/hostTest/
  2. ปลั๊กอิน Gradle id("com.android.security.autorepro.apptest") แอปหรือ APK บริการที่ติดตั้งในอุปกรณ์ผ่าน adb install และเปิดใช้งานโดยการทดสอบฝั่งโฮสต์ นอกจากนี้ แอปหรือบริการยังมีชุดการยืนยัน JUnit ของตัวเองที่รายงานไปยังโปรแกรมรันไทม์ฝั่งโฮสต์ได้ด้วย ตัวอย่างใช้ submission/appTest/ และไดเรกทอรี
  3. ปลั๊กอิน Gradle id("com.android.security.autorepro.ndktest") การโจมตีเพื่อพิสูจน์แนวคิดที่ใช้ NDK ซึ่งไม่บังคับ ซึ่งระบบจะพุชไปยังอุปกรณ์ผ่าน adb push และดำเนินการโดยทดสอบฝั่งโฮสต์ ตัวอย่างนี้ใช้ไดเรกทอรี submission/ndkTest/

โดยทั่วไปแล้ว ขั้นตอนการทดสอบ AutoRepro จะเป็นไปตามรูปแบบใดรูปแบบหนึ่งต่อไปนี้

  • แอปทดสอบที่มีเครื่องควบคุม

    1. การทดสอบฝั่งโฮสต์จะพุช APK ที่ประกอบด้วยแอปหรือบริการที่มีเครื่องมือวัดไปยังอุปกรณ์
    2. การทดสอบฝั่งโฮสต์จะเริ่มต้นการทดสอบ JUnit ฝั่งอุปกรณ์ที่รวมอยู่ใน APK ผ่าน runDeviceTest()
    3. การทดสอบ JUnit ฝั่งอุปกรณ์จะแตะปุ่มและดูแอปโดยใช้ UIAutomator หรือเข้าถึง Android API ในลักษณะที่เปิดเผยช่องโหว่ด้านความปลอดภัย
    4. ระบบจะแสดงผลลัพธ์ของการทดสอบ JUnit ฝั่งอุปกรณ์ไปยังการทดสอบฝั่งโฮสต์ ซึ่งสามารถใช้เพื่อระบุว่าการทดสอบผ่านหรือไม่ ข้อความแสดงข้อผิดพลาดควรมีรายละเอียดเกี่ยวกับสาเหตุที่การยืนยันไม่สำเร็จ รวมถึงออบเจ็กต์ ค่า ข้อยกเว้น สแต็กเทรซ หรืออาร์ติแฟกต์อื่นๆ ที่เฉพาะเจาะจงเพื่อเป็นหลักฐานแสดงช่องโหว่
  • การพิสูจน์แนวคิด NDK

    1. การทดสอบฝั่งโฮสต์จะพุชและเปิดใช้งานไฟล์ปฏิบัติการ Linux ในอุปกรณ์
    2. โปรแกรมเนทีฟขัดข้องหรือแสดงรหัสออกที่เฉพาะเจาะจง
    3. การทดสอบฝั่งโฮสต์จะตรวจหาข้อขัดข้อง ดูการย้อนกลับของ Logcat หรือมองหารหัสออกที่เฉพาะเจาะจงเพื่อระบุว่าการโจมตีสำเร็จหรือไม่ ข้อความแสดงข้อผิดพลาดควรมีรายละเอียดเกี่ยวกับสาเหตุที่การยืนยันไม่สําเร็จ รวมถึงโครงสร้าง ค่า สแต็กเทรซ หรืออาร์ติแฟกต์อื่นๆ ที่เฉพาะเจาะจงเพื่อเป็นหลักฐานแสดงช่องโหว่

นอกจากนี้ คุณยังใช้ทั้ง 2 รูปแบบร่วมกันได้ (เช่น การเรียกใช้โปรแกรมเนทีฟร่วมกับการทดสอบฝั่งอุปกรณ์) นอกจากนี้ คุณยังใช้เฟรมเวิร์กเครื่องมือวัดอื่นๆ เช่น frida-inject ได้ด้วย โปรดดูรายละเอียดที่หัวข้อเอกสารอ้างอิงชุดทดสอบความปลอดภัยและหัวข้อเอกสารอ้างอิง Tradefed

การโจมตีเพื่อพิสูจน์แนวคิดของฉันไม่จำเป็นต้องใช้แอปทดสอบหรือไฟล์ปฏิบัติการแบบเนทีฟ

การทดสอบส่วนใหญ่ไม่จําเป็นต้องใช้ทั้งแอปฝั่งอุปกรณ์และไฟล์ปฏิบัติการแบบเนทีฟ

หากการทดสอบไม่ได้เกี่ยวข้องกับการใช้ฟีเจอร์ ให้ลบไดเรกทอรีโปรเจ็กต์ย่อย gradle ที่ไม่จำเป็น

การโจมตีเพื่อพิสูจน์แนวคิดของฉันเกี่ยวข้องกับแอป/บริการที่ 2

เพิ่มโปรเจ็กต์ย่อย Gradle ที่มีปลั๊กอิน AutoRepro ได้มากเท่าที่ต้องการ

ส่งการทดสอบ AutoRepro

วิธีรวมผลการทดสอบจากอุปกรณ์ของคุณเป็นส่วนหนึ่งของข้อมูลที่ส่ง

  • (ไม่บังคับ) เรียกใช้งาน Gradle clean เพื่อลบการทดสอบเก่า
  • เรียกใช้การกําหนดค่าการเรียกใช้ AutoRepro ที่เหมาะสมเพื่อเรียกใช้ Tradefed สําหรับการทดสอบ และรวบรวมบันทึกและผลลัพธ์
  • เรียกใช้งาน copyInvocationResultsToSubmission เพื่อคัดลอกบันทึกและผลลัพธ์ไปยังไดเรกทอรีแหล่งที่มาของข้อมูลที่ส่ง

เรียกใช้ assembleSubmissionZip เพื่อสร้างไฟล์ submission/build/autorepro-submission.zip อัปโหลดไฟล์ดังกล่าวพร้อมกับข้อมูลที่ส่งไปยังโปรแกรมสะสมคะแนนสำหรับช่องโหว่ของ Android ตรวจสอบว่าไฟล์แนบตรงกับรูปแบบ *autorepro-submission*.zip และอัปโหลดพร้อมกับรายงานฉบับแรก การอัปโหลดข้อมูลล่าช้าจะส่งผลต่อความสามารถในการตรวจสอบรายงานของคุณอย่างเหมาะสม