איחוד הסחר של Security Test Suite (sts-tradefed) בנוי על גבי Android Trade Federation. תוכנית הבדיקה מאפשרת לבדוק את כל מכשירי Android כדי לאתר בדיקות של תיקוני אבטחה שלא נכללים בחבילה של 'חבילת בדיקות התאימות'. הבדיקות האלה מיועדות אך ורק לתיקונים שמשויכים (או ישויכו) לפרצות אבטחה וחשיפות נפוצות (CVE).
ה-SDK מאפשר לפתח בדיקות STS מחוץ לעץ המקור של Android באמצעות Android Studio או Android SDK הסטנדרטי. היא כוללת את כל הכלים שנדרשים כדי ליצור ולהריץ בדיקת STS.
איך מקבלים את גרסת ה-SDK העדכנית של STS
דרישות מוקדמות
- מחשב Linux בגרסת 64 ביט.
- את Android Studio (אפשר להתקין גם דרך מנהל החבילות של ההפצה.
- צריך להתקין את כלי הפלטפורמה של Android (
adb
,fastboot
) ולהעביר אותם ל-$PATH
(כלומר, צריך להיות אפשר להריץ אתadb
משורת הפקודה). הדרך הקלה ביותר להתקין את כלי הפלטפורמה היא דרך מנהל החבילות של המהדורה שלכם.- אם אתם משתמשים במנהל ה-SDK של Android Studio במקום בכלי הפלטפורמה העצמאיים, חשוב להוסיף את ספריית
platform-tools
של ה-SDK ל-$PATH.
- אם אתם משתמשים במנהל ה-SDK של Android Studio במקום בכלי הפלטפורמה העצמאיים, חשוב להוסיף את ספריית
- את aapt, שאפשר להתקין גם דרך מנהל החבילות של התפוצה.
תחילת השימוש ב-Android Studio
אחרי שמחלצים את קובץ הארכיון, פותחים את הספרייה ב-Android Studio כפרויקט קיים. מריצים את יעד ה-build assembleSTSARM
או assembleSTSx86
כדי ליצור את בדיקת השלד, בהתאם לארכיטקטורה של מכשיר Android היעד. מריצים את יעד ה-build runSTS
כדי להריץ את בדיקת השלד במכשיר המחובר (ל-ADB חייבת להיות הרשאה).
תחילת העבודה עם Gradle
אחרי שמחלצים את הארכיון, מגדירים את המאפיין sdk.dir
בקובץ local.properties
ברמה הבסיסית (root) של פרויקט Gradle, ומריצים את המשימה assembleSTSARM
ב-Gradle כדי ליצור את בדיקת השלד. בסיום ה-build, אפשר לעבור (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 כוללת שלושה חלקים:
- בדיקת Tradefed בצד המארח שמבצעת אינטראקציה עם המכשיר דרך adb, בתיקיית המשנה
sts-test
. - התקפה אופציונלית מקורית להוכחת היתכנות (PoC) שמועברת למכשיר דרך
adb push
ומבוצעת על ידי הבדיקה בצד המארח בתיקיית המשנהnative-poc
. - קובץ APK אופציונלי של אפליקציה או שירות שמותקן במכשיר דרך
adb install
וגם מופעל על ידי הבדיקה בצד המארח. האפליקציה או השירות יכולים גם להכיל קבוצה של טענות נכונות (assertions) משלהם של JUnit, שמדווחות להרצה בצד המארח. הפריט נמצא בספריית המשנהtest-app
.
תהליך אופייני של בדיקת STS מתבצע בדרך כלל לפי אחד משני דפוסים:
הוכחת היתכנות מקורית:
- הבדיקה בצד המארח דוחפת ומפעילה קובץ הפעלה מקורי במכשיר.
- התוכנה המקורית קורסת או מחזירה קוד יציאה ספציפי.
- בבדיקה בצד המארח, מתבצע חיפוש של קריסות, בודק את המעקב לאחור (backtrace) של ה-Logcat, או מחפש את קוד היציאה הספציפי כדי לקבוע אם ההתקפה הצליחה.
אפליקציית בדיקה אינסטרומנטלית:
- הבדיקה בצד המארח דוחפת למכשיר קובץ APK שמכיל אפליקציה או שירות.
- הבדיקה בצד המארח מפעילה את בדיקות JUnit בצד המכשיר שמצורפות ל-APK דרך
runDeviceTest()
- JUnit בצד המכשיר בודק את הלחצנים וצופה באפליקציה באמצעות UIAutomator, או ניגש למערכת Android בדרכים אחרות כדי לחשוף נקודות חולשה באבטחה.
- התוצאה של בדיקות JUnit בצד המכשיר (הצלחה או כישלון) מוחזרת לבדיקה בצד המארח, וניתן להשתמש בה כדי לקבוע אם הבדיקה עברה או לא.
אפשר גם לשלב בין שני הדפוסים (לדוגמה, הרצה של תוכנית נייטיב יחד עם בדיקות בצד המכשיר). יש גם מסגרות אחרות למדידה, כמו frida-inject
.
פרטים נוספים זמינים במסמכי העזרה של Security Test Suite ובמסמכי העזרה של Tradefed.
להתקפת ההוכחה לקונספט שלי לא נדרשת אפליקציית בדיקה או קובץ הפעלה מקורי
ברוב הבדיקות לא יהיה צורך גם באפליקציה בצד המכשיר וגם בקובץ הפעלה נייטיב.
אם הבדיקה לא כוללת שימוש באפליקציה או בשירות במכשיר, פשוט מוחקים את ספריית המשנה test-app
. באופן דומה, אם בבדיקה לא נעשה שימוש בקובץ הפעלה מקומי, מוחקים את ספריית המשנה native-poc
ולאחר מכן מסנכרנים את הפרויקט באמצעות Gradle.
הפרויקט מוגדר כך שהמערכת תדלג באופן אוטומטי על בניית המודולים האלה כשהם לא קיימים.
ההתקפה שלי להוכחת היתכנות כוללת אפליקציה/שירות שני
תחילה, מוסיפים מודול חדש לפרויקט של האפליקציה או השירות השני וכותבים כמו שעושים עם כל APK אחר.
לאחר מכן, עורכים את הקובץ build.gradle
ברמה הבסיסית של הספרייה הזו ומוסיפים את המודול לפי ההוראות במאמרים copyArtifacts
, assembleStsARM
ו-assembleStsx86
. כך תבטיחו שה-APK שעבר הידור יועתק לספריית הפלט של STS, ותאפשר להתקין את האפליקציה החדשה או לשלוח קריאה אליה בטופס הבדיקה.
לבסוף, מבצעים סנכרון של הפרויקט באמצעות Gradle.
שליחה של בדיקת ה-STS
מריצים את המשימה zipForSubmission
(באמצעות Android Studio או באמצעות Gradle בשורת הפקודה). צריך ליצור קובץ חדש, codesubmission.zip
, בספרייה build
ברמה הבסיסית של הפרויקט. עליכם להעלות את הקובץ יחד עם הבקשה שלכם לתוכנית התגמולים של נקודות חולשה של Android.