Security Test Suite Trade Federation (sts-tradefed) สร้างขึ้นจากแพ็กเกจทดสอบของ Android Trade Federation เพื่อทดสอบอุปกรณ์ Android ทั้งหมดสำหรับการทดสอบแพตช์ความปลอดภัยที่ไม่ได้อยู่ในชุดเครื่องมือทดสอบความเข้ากันได้ การทดสอบเหล่านี้มีไว้เพื่อการแก้ไขที่มีความสัมพันธ์ (หรือจะเชื่อมโยง) กับช่องโหว่และจำนวนผู้ที่เห็นทั่วไป (CVE) เท่านั้น
SDK อนุญาตให้พัฒนาการทดสอบ STS นอกโครงสร้างแหล่งที่มาของ Android โดยใช้ Android Studio หรือ Android SDK มาตรฐาน ซึ่งรวมถึงยูทิลิตีทั้งหมดที่จําเป็นต่อการสร้างและเรียกใช้การทดสอบ STS
สิ่งที่ต้องมีก่อน
- คอมพิวเตอร์ Linux 64 บิต
- Android Studio (ติดตั้งได้จากเครื่องมือจัดการแพ็กเกจของดิสโทรด้วย)
- เครื่องมือแพลตฟอร์ม 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 แบ่งออกเป็น 3 ส่วน ได้แก่
- การทดสอบ Tradefed ฝั่งโฮสต์ที่โต้ตอบกับอุปกรณ์ผ่าน adb ในไดเรกทอรีย่อย
sts-test
- การโจมตีแบบพิสูจน์แนวคิดที่มีอยู่แล้ว (ไม่บังคับ) ซึ่งพุชเข้าไปในอุปกรณ์ผ่าน
adb push
และดำเนินการโดยการทดสอบฝั่งโฮสต์ในไดเรกทอรีย่อยnative-poc
- APK ของแอปหรือบริการที่ไม่บังคับซึ่งติดตั้งในอุปกรณ์ผ่าน
adb install
และเปิดตัวโดยการทดสอบฝั่งโฮสต์ด้วย แอปหรือบริการยังอาจมีชุดการยืนยัน JUnit ของตัวเองที่รายงานไปยังโปรแกรมรันไทม์ฝั่งโฮสต์ได้ด้วย ซึ่งอยู่ในไดเรกทอรีย่อยtest-app
โดยปกติแล้วขั้นตอนการทดสอบ STS ทั่วไปจะเป็นไปตาม 1 ใน 2 รูปแบบต่อไปนี้
การพิสูจน์แนวคิดแบบเนทีฟ
- การทดสอบฝั่งโฮสต์จะพุชและเปิดใช้ไฟล์ปฏิบัติการที่มาพร้อมเครื่องในอุปกรณ์
- โปรแกรมเนทีฟขัดข้องหรือส่งคืนโค้ดสำหรับออกที่เฉพาะเจาะจง
- การทดสอบฝั่งโฮสต์จะตรวจหาข้อขัดข้อง ดู Logcat Backtrace หรือมองหาโค้ดการออกที่เจาะจงเพื่อพิจารณาว่าการโจมตีสำเร็จหรือไม่
แอปทดสอบที่มีการวัดคุม:
- การทดสอบฝั่งโฮสต์จะพุช APK ที่ประกอบด้วยแอปหรือบริการไปยังอุปกรณ์
- การทดสอบฝั่งโฮสต์จะเริ่มต้นการทดสอบ JUnit ฝั่งอุปกรณ์ที่รวมอยู่ใน APK ผ่าน
runDeviceTest()
- JUnit ทดสอบแตะปุ่มและดูแอปโดยใช้ UIAutomator หรือเข้าถึงระบบ Android ในลักษณะที่เปิดเผยช่องโหว่ด้านความปลอดภัย
- ระบบจะแสดงผลลัพธ์ของการทดสอบ JUnit ฝั่งอุปกรณ์ที่สำเร็จหรือไม่สำเร็จไปยังการทดสอบฝั่งโฮสต์ ซึ่งสามารถใช้เพื่อระบุว่าการทดสอบผ่านหรือไม่
นอกจากนี้ คุณยังใช้ทั้ง 2 รูปแบบร่วมกันได้ (เช่น การเรียกใช้โปรแกรมเนทีฟร่วมกับการทดสอบฝั่งอุปกรณ์) เฟรมเวิร์กการวัดคุมอื่นๆ เช่น frida-inject
ก็มีให้ใช้งานเช่นกัน
โปรดดูรายละเอียดที่หัวข้อเอกสารอ้างอิงชุดทดสอบความปลอดภัยและหัวข้อเอกสารอ้างอิง Tradefed
การโจมตีแบบพิสูจน์แนวคิดของฉันไม่จำเป็นต้องใช้แอปทดสอบหรือไฟล์ปฏิบัติการในเครื่อง
การทดสอบส่วนใหญ่ไม่จำเป็นต้องใช้ทั้งแอปฝั่งเซิร์ฟเวอร์และไฟล์ปฏิบัติการในเครื่อง
หากการทดสอบไม่ได้เกี่ยวข้องกับการใช้แอป/บริการในอุปกรณ์ ให้ลบไดเรกทอรีย่อย test-app
ในทำนองเดียวกัน หากการทดสอบไม่ได้ใช้ไฟล์ปฏิบัติการแบบเนทีฟ ให้ลบไดเรกทอรีย่อย native-poc
จากนั้น Gradle ซิงค์โปรเจ็กต์
ระบบจะตั้งค่าโปรเจ็กต์ให้ข้ามการสร้างโมดูลเหล่านั้นโดยอัตโนมัติเมื่อไม่มีโมดูลดังกล่าว
การโจมตีเพื่อพิสูจน์แนวคิดของฉันเกี่ยวข้องกับแอป/บริการที่ 2
ก่อนอื่น ให้เพิ่มโมดูลใหม่ลงในโปรเจ็กต์สำหรับแอป/บริการที่ 2 แล้วเขียนแอปนั้นเหมือนกับที่คุณเขียน APK อื่นๆ
ถัดไป ให้แก้ไข build.gradle
ที่รูทของไดเรกทอรีนี้ แล้วเพิ่มโมดูลโดยทำตามวิธีการใน copyArtifacts
, assembleStsARM
และ assembleStsx86
วิธีนี้ช่วยให้มั่นใจว่าระบบจะคัดลอก APK ที่คอมไพล์ไปยังไดเรกทอรีเอาต์พุตของ STS และเปิดใช้การติดตั้ง/การเรียกใช้แอปใหม่จากการทดสอบ
สุดท้าย Gradle ซิงค์โปรเจ็กต์
ส่งการทดสอบ STS
เรียกใช้งาน zipForSubmission
(ด้วย Android Studio หรือ Gradle ในบรรทัดคำสั่ง) คุณควรสร้างไฟล์ใหม่ codesubmission.zip
ในไดเรกทอรี build
ที่รูทของโปรเจ็กต์ อัปโหลดไฟล์ไปพร้อมกับการส่ง
ไปยังโปรแกรมสะสมคะแนนช่องโหว่ของ Android