ชุดพัฒนาชุดทดสอบความปลอดภัยของ Android (STS SDK)

Security Test Suite Trade Federation (sts-tradefed) สร้างขึ้นบนชุดทดสอบ Android Trade Federation เพื่อทดสอบอุปกรณ์ Android ทั้งหมดสำหรับการทดสอบแพตช์ความปลอดภัยที่ไม่อยู่ในชุดทดสอบความเข้ากันได้ การทดสอบเหล่านี้มีไว้สำหรับการแก้ไขที่เกี่ยวข้อง (หรือจะเชื่อมโยง) กับช่องโหว่และการเปิดเผยทั่วไป (CVE) เท่านั้น

SDK อนุญาตให้พัฒนาการทดสอบ STS นอกแผนผังแหล่งที่มาของ Android โดยใช้ Android Studio หรือ Android SDK มาตรฐาน ประกอบด้วยโปรแกรมอรรถประโยชน์ทั้งหมดที่จำเป็นในการสร้างและเรียกใช้การทดสอบ STS

รับ STS SDK ล่าสุด

ข้อกำหนดเบื้องต้น

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

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

หลังจากแตกไฟล์เก็บถาวรแล้ว ให้เปิดไดเร็กทอรีใน Android Studio เป็นโปรเจ็กต์ที่มีอยู่ เรียกใช้เป้าหมายการสร้าง assembleSTSARM หรือ assembleSTSx86 เพื่อสร้างการทดสอบโครงกระดูก ขึ้นอยู่กับสถาปัตยกรรมของอุปกรณ์ Android เป้าหมาย เรียกใช้เป้าหมายบิลด์ runSTS เพื่อรันการทดสอบโครงกระดูกบนอุปกรณ์ที่เชื่อมต่อ (ต้องได้รับอนุญาตจาก ADB)

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

หลังจากแตกไฟล์เก็บถาวร ให้ตั้งค่าคุณสมบัติ sdk.dir ในไฟล์ local.properties ที่รูทของโปรเจ็กต์ Gradle จากนั้นรันงาน assembleSTSARM Gradle เพื่อสร้างการทดสอบโครงกระดูก หลังจากสร้างเสร็จแล้ว สามารถรันการทดสอบได้โดยการนำทาง ( cd ) ไปยัง build/android-sts/tools และดำเนินการ sts-tradefed wrapper

$ echo 'sdk.dir=/home/<myusername>/Android/Sdk' > local.properties
$ ./gradlew assembleSTSARM
$ cd build/android-sts/tools
$ ./sts-tradefed run sts-dynamic-develop -m hostsidetest

เขียนแบบทดสอบ STS

การทดสอบ STS มีสามส่วน:

  1. การทดสอบ Tradefed ฝั่งโฮสต์ที่โต้ตอบกับอุปกรณ์ผ่าน adb ในไดเร็กทอรีย่อย sts-test
  2. การโจมตีแบบพิสูจน์แนวคิดแบบเนทีฟซึ่งเป็นทางเลือกที่ส่งไปยังอุปกรณ์ผ่าน adb push และดำเนินการโดยการทดสอบฝั่งโฮสต์ในไดเร็กทอรีย่อย native-poc
  3. แอพเสริมหรือ APK บริการที่ติดตั้งบนอุปกรณ์ผ่าน adb install และเปิดใช้งานโดยการทดสอบฝั่งโฮสต์ แอพหรือบริการยังสามารถมีชุดการยืนยัน JUnit ของตัวเองที่รายงานไปยังรันเนอร์ฝั่งโฮสต์ ซึ่งอยู่ในไดเร็กทอรีย่อย test-app

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

  • การพิสูจน์แนวคิดดั้งเดิม:

    1. การทดสอบฝั่งโฮสต์จะพุชและเรียกใช้โปรแกรมเรียกทำงานแบบเนทีฟบนอุปกรณ์
    2. โปรแกรมเนทีฟหยุดทำงานหรือส่งคืนรหัสทางออกเฉพาะ
    3. การทดสอบฝั่งโฮสต์จะตรวจหาข้อขัดข้อง ดูที่ logcat backtrace หรือค้นหารหัสทางออกเฉพาะเพื่อระบุว่าการโจมตีสำเร็จหรือไม่
  • แอปทดสอบอุปกรณ์:

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

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

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

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

หากการทดสอบของคุณไม่เกี่ยวข้องกับการใช้แอป/บริการในอุปกรณ์ ให้ลบไดเร็กทอรีย่อย test-app ในทำนองเดียวกัน หากการทดสอบของคุณไม่ได้ใช้ไฟล์ปฏิบัติการแบบเนทีฟ ให้ลบไดเร็กทอรีย่อย native-poc จากนั้น Gradle-sync โครงการ โครงการได้รับการตั้งค่าให้ข้ามการสร้างโมดูลเหล่านั้นโดยอัตโนมัติเมื่อไม่มีอยู่

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

ขั้นแรก เพิ่มโมดูลใหม่ในโครงการของคุณสำหรับแอป/บริการที่สองของคุณ และเขียนโมดูลนั้นเหมือนที่คุณทำกับ APK อื่นๆ

ถัดไป แก้ไข build.gradle ที่รากของไดเร็กทอรีนี้ และเพิ่มโมดูลของคุณตามคำแนะนำใน copyArtifacts , assembleStsARM และ assembleStsx86 สิ่งนี้จะทำให้แน่ใจว่า APK ที่คอมไพล์แล้วนั้นถูกคัดลอกไปยังไดเร็กทอรีเอาต์พุตของ STS และเปิดใช้การติดตั้ง/เรียกใช้แอปใหม่จากการทดสอบ

ในที่สุด Gradle-sync โครงการ

ส่งแบบทดสอบ สทศ

เรียกใช้งาน zipForSubmission (ด้วย Android Studio หรือ Gradle บนบรรทัดคำสั่ง) ควรสร้างไฟล์ใหม่ codesubmission.zip ในไดเร็กทอรี build ที่รูทของโปรเจ็กต์ อัปโหลดไฟล์นั้นไปพร้อมกับการส่งของคุณไปยังโปรแกรมรางวัลช่องโหว่ของ Android