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