Security Test Suite Trade Federation (sts-tradefed) สร้างขึ้นบนชุดทดสอบ Android Trade Federation เพื่อทดสอบอุปกรณ์ Android ทั้งหมดสำหรับการทดสอบแพตช์ความปลอดภัยที่ไม่อยู่ในชุดทดสอบความเข้ากันได้ การทดสอบเหล่านี้มีไว้สำหรับการแก้ไขที่เกี่ยวข้อง (หรือจะเชื่อมโยง) กับช่องโหว่และการเปิดเผยทั่วไป (CVE) เท่านั้น
SDK อนุญาตให้พัฒนาการทดสอบ STS นอกแผนผังแหล่งที่มาของ Android โดยใช้ Android Studio หรือ Android SDK มาตรฐาน ประกอบด้วยโปรแกรมอรรถประโยชน์ทั้งหมดที่จำเป็นในการสร้างและเรียกใช้การทดสอบ STS
ข้อกำหนดเบื้องต้น
- พีซีลินุกซ์ 64 บิต
- Android Studio (สามารถติดตั้งได้จากตัวจัดการแพ็คเกจของ distro
- ต้องติดตั้ง เครื่องมือแพลตฟอร์ม Android (
adb
,fastboot
) และอยู่ใน$PATH
ของคุณ (เช่น คุณควรจะสามารถเรียกใช้adb
จากบรรทัดคำสั่งได้) วิธีที่ง่ายที่สุดในการติดตั้งเครื่องมือแพลตฟอร์มคือผ่านตัวจัดการแพ็คเกจของ distro- หากใช้ตัวจัดการ SDK ของ Android Studio แทนเครื่องมือแพลตฟอร์มแบบสแตนด์อโลน อย่าลืมเพิ่มไดเร็กทอรี
platform-tools
ของ SDK ใน $PATH ของคุณ
- หากใช้ตัวจัดการ SDK ของ Android Studio แทนเครื่องมือแพลตฟอร์มแบบสแตนด์อโลน อย่าลืมเพิ่มไดเร็กทอรี
- 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 มีสามส่วน:
- การทดสอบ Tradefed ฝั่งโฮสต์ที่โต้ตอบกับอุปกรณ์ผ่าน adb ในไดเร็กทอรีย่อย
sts-test
- การโจมตีแบบพิสูจน์แนวคิดแบบเนทีฟซึ่งเป็นทางเลือกที่ส่งไปยังอุปกรณ์ผ่าน
adb push
และดำเนินการโดยการทดสอบฝั่งโฮสต์ในไดเร็กทอรีย่อยnative-poc
- แอพเสริมหรือ APK บริการที่ติดตั้งบนอุปกรณ์ผ่าน
adb install
และเปิดใช้งานโดยการทดสอบฝั่งโฮสต์ แอพหรือบริการยังสามารถมีชุดการยืนยัน JUnit ของตัวเองที่รายงานไปยังรันเนอร์ฝั่งโฮสต์ ซึ่งอยู่ในไดเร็กทอรีย่อยtest-app
ขั้นตอนการทดสอบ STS ทั่วไปมักจะเป็นไปตามหนึ่งในสองรูปแบบ:
การพิสูจน์แนวคิดดั้งเดิม:
- การทดสอบฝั่งโฮสต์จะพุชและเรียกใช้โปรแกรมเรียกทำงานแบบเนทีฟบนอุปกรณ์
- โปรแกรมเนทีฟหยุดทำงานหรือส่งคืนรหัสทางออกเฉพาะ
- การทดสอบฝั่งโฮสต์จะตรวจหาข้อขัดข้อง ดูที่ logcat backtrace หรือค้นหารหัสทางออกเฉพาะเพื่อระบุว่าการโจมตีสำเร็จหรือไม่
แอปทดสอบอุปกรณ์:
- การทดสอบฝั่งโฮสต์จะส่ง APK ที่ประกอบด้วยแอปหรือบริการไปยังอุปกรณ์
- การทดสอบฝั่งโฮสต์เริ่มต้นการทดสอบ JUnit ฝั่งอุปกรณ์ที่มาพร้อมกับ APK ผ่าน
runDeviceTest()
- JUnit ฝั่งอุปกรณ์ทดสอบการแตะปุ่มและเฝ้าดูแอปโดยใช้ UIAutomator หรือเข้าถึงระบบ Android ในลักษณะที่เปิดเผยช่องโหว่ด้านความปลอดภัย
- ความสำเร็จหรือความล้มเหลวของการทดสอบ 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