PracticU

כתיבת סקריפט Frida עבור UnCrackable

בלי כתוביותעם כתוביות
PracticU › קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting › כתיבת סקריפט Frida עבור UnCrackable
מילון מושגים:
USB - תקן חיבור אוניברסלי לחיבור התקנים למחשב, כמו זיכרון נייד, מקלדת או מדפסת.
GitHub - שירות ענן לאחסון מאגרי קוד מבוססי Git, המאפשר שיתוף פעולה, מעקב גרסאות וניהול פרויקטים.
באג - תקלה או שגיאה בקוד שגורמת לתוכנה להתנהג בניגוד למצופה.
שורת פקודה - ממשק טקסטואלי שבו מקלידים פקודות למערכת ההפעלה ומקבלים תגובה בטקסט, במקום להשתמש בעכבר.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
מעטפת - תוכנה שמפרשת פקודות של המשתמש ומעבירה אותן למערכת ההפעלה, למשל Bash או PowerShell.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.

כתיבת סקריפט Frida עבור UnCrackable
בשיעור זה נכתוב את סקריפפ ה Frida הראשון שלנו, סקריפפ פשוט שמחליף בזיכרון של המכשיר את פונקציות זיהוי השורש של אפליקציה תמימה לכאורה, כך שהיא תעבוד על מכשיר פרוץ במקום להיסגר. נעבור את כל התהליך, מהורדת האפליקציה והנדסה לאחור של הקוד שלה ועד הזרקת הסקריפף בזמן אמת.
נושאי הסיכום המוצגים בשיעור:
1. הסביבה: עובדים מול הטלפון הווירטואלי של Genymotion, שמאחורי הקלעים הוא מכונה וירטואלית של Virtual Box שהתוכנה מנהלת לבדה. אפשר לחבר גם טלפון פיזי בעזרת USB, אך עדיף לא להרוס טלפון אמיתי ולכן עובדים על הווירטואלי.
2. אפליקציית המטרה: מורידים מה GitHub את UnCrackable ברמה הראשונה של OWASP, הארגון שאוסף באגים ופריצות אבטחה בווב והכין גם אפליקציות מובייל לתרגול ברמות שונות. בודקים בעזרת adb devices שיש תקשורת עם הטלפון, מתקינים את ה APK בעזרת adb install, ומוחקים את העותק המקומי מהדיסק כדי לדמות מצב שבו האפליקציה קיימת רק בתוך הטלפון.
3. למה דווקא האפליקציה הזאת: בהפעלה היא מודיעה שהמכשיר פרוץ ומסרבת לעבוד, ואנחנו רוצים לשנות בזמן אמת, בתוך הזיכרון של האפליקציה, את הזיהוי הזה. בחרנו בה ולא באפליקציית הבנק מפני שכאן זיהוי השורש הוא מסך הפתיחה עצמו וזה פשוט יותר, ואת הבנק נעשה אחרי כן.
4. רשימת האפליקציות: בעזרת frida ps עם המתג של USB מוצגות גם האפליקציות הרצות וגם האלה שמותקנות בלבד, ובהן אפליקציית המטרה שלנו וגם פרידה עצמה.
5. התיקיות החשובות במכשיר: בתוך המכשיר, בשורת הפקודה שלו, מעניינות אותנו שתי תיקיות. data data הוא המקום שבו כל אפליקציה שמה את הנתונים שלה, ו data app הוא המקום שבו מוחזקות האפליקציות עצמן, כלומר קובצי ה APK המותקנים. מאתרים בתוכו את החבילה שלנו לפי שמה ורואים את קובץ ה APK עצמו.
6. שליפת ה APK מהמכשיר: אחרי יציאה מהמכשיר מריצים adb pull ומושכים את קובץ ה APK מתוך תיקיית ה data app אל התיקייה הנוכחית במחשב. כך התקבל מחדש קובץ ההתקנה שמחקנו קודם, הפעם ישירות מהמכשיר.
7. הנדסה לאחור בעזרת JADX: משליכים את הקובץ אל תוך JADX, כפי שעשינו בשיעורים קודמים, והוא מנתח אותו ומציג את החבילות והקוד שבתוכן, ביניהן מחלקות וחלונות שונים. במקום לחפש ביד משתמשים בחיפוש של הכלי.
8. איתור קוד הזיהוי: מפעילים את האפליקציה ומעתיקים את ההודעה שהיא מציגה על זיהוי שורש, מחפשים אותה בחיפוש של JADX בתוך הקוד, ומגיעים ישירות אל השורה שבה היא נכתבה. כך מבוצעת הנדסה לאחור על קובץ שנשלף מהטלפון.
9. ההיגיון של הזיהוי: השורה היא תנאי שבודק אם מחלקה מסוימת, שנקראת C, מחזירה אמת מאחת משלוש פונקציות הבדיקה שלה. אם אחת משלוש הבדיקות מחזירה אמת, מוצגת הודעת זיהוי השורש והאפליקציה מסתיימת. מזהים את הפונקציות בלחיצת עכבר תוך החזקת קונטרול, וכל אחת מהן בודקת משהו ומחזירה אמת או שקר.
10. מה רוצים להשיג: להחליף בזיכרון את שלוש הבדיקות כך שכולן יחזירו שקר, ואז אף אחת מהן לא תצביע על מכשיר פרוץ והאפליקציה תמשיך לרוץ. המחלקה C שמכילה את שלוש הפונקציות יושבת בתוך החבילה ששמה ידוע לנו, וכל מה שדרוש הוא שם החבילה, שם המחלקה ושמות הפונקציות.
11. הסקריפף עצמו: הסקריפף כתוב בשפת JavaScript, פותחים אותו בעורך טקסט פשוט, והוא זמין גם בשרת הקבצים של הקורס. בתחילתו הוא מדפיס על המסך שהתחיל חיבור, Start Hooking, והמילה hooking פירושה להתחבר אל תוך פונקציה או אל הקוד, בדיוק כפי שמתחבר דבאגר אל תוכנה, וכמו דבאגר רק אחד יכול להיות מחובר בכל רגע. אחר כך ישנה פונקציה בשם my bypass שהסקריפף מפעיל דרך Java perform, ובתוכה מוכרז משתנה שמקבל את תוצאת Java use על השם המלא של המחלקה, שם החבילה ושם המחלקה, וכך המשתנה מצביע אל אותה מחלקה בזיכרון המכשיר.
12. החלפת הפונקציות: אחרי שיש לנו מצביע אל המחלקה, מבקשים ממנו החלפה של פונקציית A במימוש חדש, implementation, כלומר קוד חדש שמחליף לגמרי את כל הקוד המקורי של הפונקציה. הקוד החדש מדפיס על המסך שבוצעה עקיפה של בדיקת השורש במחלקה ובפונקציה הספציפית, ומחזיר שקר. את אותו דבר עושים גם לפונקציית B וגם לפונקציית C, מצביעים על אותה מחלקה ומחליפים כל אחת מהן בקוד שמחזיר שקר.
13. הזרקת הסקריפף: מריצים את פרידה עם המתג של USB, כי ייתכן שמחוברים כמה מכשירים, עם שם קובץ הסקריפף, עם המתג שמורה לה להפעיל את האפליקציה עצמה, ועם המתג שאומר שלא לעצור, No Pause. חשוב לעמוד באותה תיקייה שבה נמצא קובץ הסקריפף, אחרת הכלי לא ימצא אותו. הניסיון הראשון נכשל בהודעה שלא ניתן להתחבר אל הרכיב במכשיר, מפני ששכחנו להפעיל את שרת פרידה בתוך הטלפון.
14. הפעלת שרת פרידה בטלפון: נכנסים בעזרת adb shell אל תיקיית ה temp של המכשיר, שם כבר יושב קובץ השרת מהשיעור הקודם, ומריצים אותו עם סימן הרצה ברקע, והוא מתחיל לעבוד מאחורי הקלעים על הפורט שלו. אחרי שהשרת רץ מריצים שוב את הזרקת הסקריפף, והפעם מודפס שהחיבור התחיל, הכלי יוצר את האפליקציה, מזריק לתוכה את הסקריפף, ממשיך להריץ אותה בעצמו, והאפליקציה עובדת בלי לזהות שום דבר ומדפיסה את הודעות העקיפה של שלוש הפונקציות.
15. מצב אינטראקטיבי: בלי המתג שאומר לא לעצור, פרידה טוענת את האפליקציה ואת הסקריפף אל הזיכרון ועוצרת לפני הפקודה הראשונה וממתינה להוראות. שם אפשר להריץ resume שממשיך את הריצה, ולראות שאחרי ההמשך ההודעות מגיעות, ואפשר לטעון סקריפף נוסף בעזרת load. סגירת האפליקציה מנתקת את החיבור של פרידה. השיטה שהוצגה עובדת רק על המסך הראשון שהכלי מפעיל, מפני שאיננו יודעים כיצד להורות לו להפעיל activity אחר, ובאפליקציית הבנק דרוש דווקא ה activity המוצהר כ exported של אחרי ההתחברות, ולכן בשיעור הבא נעבוד בשיטה מורכבת יותר שבה ההרצה נעשית מתוך פייתון, עם אותם עקרונות בדיוק.
בשיעור זה שלפנו את ה APK מתוך המכשיר, פתחנו אותו ב JADX, איתרנו את קוד זיהוי השורש לפי ההודעה שהוא מציג, הבנו את שלוש הבדיקות שמחזירות אמת או שקר, כתבנו סקריפפ פרידה שמחליף אותן בזיכרון בקוד שמחזיר שקר, הפעלנו את שרת פרידה בתוך הטלפון והזרקנו את הסקריפף בעת הפעלת האפליקציה, והיא עבדה בלי לזהות דבר. בשיעור הבא נעסוק בנושא כתיבת סקריפפ פרידה עבור InsecureBank.
SR12581HE

פרקי ההרצאה: כתיבת סקריפט Frida עבור UnCrackable

  1. 00:00

    הכנת הטלפון הווירטואלי

  2. 00:42

    הורדת אפליקציית התרגול

  3. 01:18

    התקנת ה-APK עם ADB

  4. 01:55

    הצורך בעקיפת זיהוי ה-Root

  5. 02:27

    בדיקת האפליקציות עם Frida

  6. 03:01

    היכרות עם תיקיות המכשיר

תמלול ההרצאה: כתיבת סקריפט Frida עבור UnCrackable

הטקסט המלא של הדקות הראשונות בהרצאה «כתיבת סקריפט Frida עבור UnCrackable» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום לכולם, בהרצאה הזו אני רוצה להראות לכם סקריפט פשוט של פרידה, איך אנחנו עובדים, איך אנחנו כותבים סקריפט, ולשם כך אנחנו נדליק את הג'יני מושן, שזה הטלפון הווירטואלי שלנו.

  2. 00:16

    אפשר גם לחבר טלפון פיזי עם USB, אבל אנחנו לא רוצים להרוס את הטלפון הפיזי, יש לנו טלפון וירטואלי. זאת מכונה וירטואלית של וירטואל בוקס פה מאחורי הקלעים. הנה הוא הפעיל אותה לבד ומנהל אותה לבד, אני לא נוגע בו.

  3. 00:31

    יש לנו פה את הטלפון, פותחים עכשיו גוגל חרום וגולשים לגיטהאב להוריד את האפליקציה שלנו. זאת אפליקציה שנקראת קראקמי, קראקמי של אוואספ, שזה אלו שאוספים את הבאגים ופריצות אבטחה בווב, הם גם עשו במובייל, הם עשו לנו כמה אפליקציות לפי רמות שונות.

  4. 00:55

    אנחנו ניקח עכשיו לבל הראשון ונוריד את הקובץ APK, האפליקציה נתקין אותה בתוך טלפון כרגע זה מה שיש לנו בטלפון נפתח כאן דאונלואוד נראה שזה ירד לנו עושים cnd בודקים שadb devices מראה לי את הטלפון שאכן יש תקשורת אין שום בעיה של תקשורת

  5. 01:21

    adb devices ואז אני עושה אינסטול לקובץ apk שימו לב והנה הוא הופיע פה עכשיו אני אמחק אותו כאילו הוא לא קיים אצלי בארדיסק כאילו התקינו אותו רק בטלפון זאת אומרת שכרגע בארדיסק שלי הוא לא קיים זאת אומרת אם נעשה עכשיו דיר אתם תראו שפייל not found אני מתחיל ממצב שיש לי אפליקציה שאני רוצה לפרוץ אותה דרך אגב למה אני רוצה לפרוץ אותה כי כשאני מפעיל אותה הוא אומר

  6. 01:50

    המכשיר הזה פרוץ אני לא מוכן לעבוד אני רוצה בזמן אמת בזיכרון של האפליקציה לשנות את הזיהוי הזה. ממש להתחבר לו בזמן אמת לתוך הזיכרון.

  7. 02:02

    למה אני בחרתי את האפליקציה הזאת ולא את הבנק? כי בבנק זה לא המסך הראשון, וכאן זה המסך הראשון. בגלל זה זה יותר פשוט.

  8. 02:11

    בואו נתחיל מזה, אחרי זה נעשה את הבנק. אז אני עושה פרידה ps-u זה usb, גם אפליקציות שעובדות וגם אפליקציות שרק מותקנות ולא עובדות, אנחנו רואים פה את האפליקציה שלנו, אני רואה גם שפרידה עובדת ואת השם של האפליקציה רציתי לראות.

  9. 02:29

    שימו לב, אנחנו רוצים לפרוץ את החלון, למה? כי כל פעם שנפעיל אותה הוא יגיד לי שהאפליקציה הזאת לא מוכנה לעבוד כי Root Detected, הוא זיהה שזה מכשיר פרוץ.

  10. 02:40

    בואו ניכנס קודם כל לתוך המכשיר, פנימה, הנה אנחנו בפנים, ובתוך המכשיר אנחנו יכולים להריץ כל מיני פקודות כמו PS, לראות כל מיני פרוצסים שרצים, אבל מעניינות אותי שתי תיקיות דאטה שזה המידע של כל האפליקציות אתם רואים תיקיית דאטה דאטה פה כל אפליקציה שמה את

  11. 02:59

    הנתונים שלה ויש תיקייה שנקראת דאטה אפי פי כאן מוחזקים האפליקציות עצמם זה בעצם האפי קיי בתוך המכשיר בתוך התיקייה

לקורס המלא: קורס האקינג לאנדרואיד אונליין

ההרצאה הקודמת: התקנה של Frida

ההרצאה הבאה: כתיבת סקריפט Frida עבור InsecureBank

הרצאות קשורות מקורסים אחרים

  • כתיבת סקריפט PowerShell - חלק 1
  • סקריפט עם לולאת for
  • הדגמה של סקריפט אמיתי
  • סקריפט פייתון ל-NETCONF

קורסים נוספים במסלול

  • קורס SOC - מיישם הגנת סייבר
  • קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP