Privakey - שמור על גלישה בטוחה

קצת רקע על למה בחרתי דווקא את הרעיון הזה לפרויקט ואיך הגעתי אליו

בסביבות תחילת 2020 חיפשתי פרויקט שאוכל לבנות ולהגיש כפרויקט במגמת "סייבר", אני לא שואף לבינוניות, ולכן לא בחרתי במשהו כמו צ'אט פשוט, אלא משהו שיותר יעניין אותי ויביא אותי למחקר הרבה יותר עמוק, עם עדיפות לנושא שלא יצא לי להתעסק בו לפני כן (במקרה הזה - לינוקס וראוטרים).

הנושאים שמאוד עניינו אותי היו בעיקר התקפיים, ולכן הרעיון הראשון שלי היה לתקוף ראוטר. רציתי לנסות לבנות משהו סטייל Rubber Ducky USB - אבל לראוטרים.
לצערי רעיון כזה דורש המון מחקר, וידע שהייתי צריך לרכוש. כיוצא בזה - המלאכה ארוכה, העובדים עצלים, ונשארו לי 3 חודשים להגשת הפרויקט. אז נטשתי את הרעיון.
אבל!
עדיין רציתי לעשות משהו עם לינוקס וראוטרים, אז בהתהפכות של 180 מעלות, במקום לתקוף ראוטר, אני אגן עליו!

ראיתי שבחלק מהראוטרים יש חיבור USB מאחורה, עד אז לא ידעתי באמת למה הוא נמצא שם, ואחרי מחקר קצר הגעתי למסקנה שהוא משומש למספר רב של דברים, ביניהם חיבור לShared Storage Device, מדפסת משותפת, וכ'ו.
אבל חיבור USB הוא חיבור USB, ולכן מערכת ההפעלה של הראוטר אמורה (לפחות) לזהות כל USB שאחבר אליו.
במקרה שלי בחרתי בDOK רגיל לחלוטין (אני חושב שאפילו היו עליו קבצים).
הDOK ישמש בפרויקט כ"מפתח", ברגע שהוא מחובר משהו בתפקוד של הראוטר ישתנה, ברגע שינותק תפקוד הראוטר יחזור לדיפולטיביות.

התחלתי בלהבין מה אני רוצה מעצמי ומהפרויקט בכללי

  • אני רוצה שהפרויקט יעניין אותי
  • הפרויקט צריך להביא לי ציון גבוה בבגרות
  • אני רוצה ללמוד כמה דברים מ0 בפרויקט
  • הפרויקט צריך להיות פרקטי, אחרי הכל אני צריך להגיש אותו במאי 2020
  • צריך “סייבר” בפרויקט

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

מה נדרש ממני בפרויקט

  • ללמוד לעבוד עם לינוקס בצורה בסיסית
  • ללמוד bash
  • לחקור מה אני יכול לאבטח בראוטר ואיך
  • לחקור יצירת services בלינוקס
  • לחשוב על persistency

החלטתי לעבוד על OpenWRT כמערכת ההפעלה של הראוטר גרסה 19.07.2, בלי שום סיבה מיוחדת.
אז הרמתי VM, העלתי את מערכת ההפעלה, והתחלתי לפשפש ולהבין למה הכנסתי את עצמי.
טעות שהבנתי בדיעבד, נתתי לVM הרבה יותר מדי זיכרון, ולכן הוא לא באמת מדמה ראוטר כמו שצריך, לא הייתי ממליץ להריץ את הפרויקט על ראוטר אמיתי לפני שווידאתם שהכל טוב (לא לוקח אחריות על כלום).

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

הפרויקט המוגמר

* Github של הפרויקט יינתן בפרטי למעוניינים

ישנו Service שמרים Daemon ועוד קובץ שעוזר לשמור על Persistency, הוא עולה עם מערכת ההפעלה, וניתן לעצירה (stop), התחלה (start), ואתחול (restart).
הקובץ Persistency, פשוט מאוד מריץ לולאה שבודקת שהDaemon למעלה, במידה ולא - ירים אותו.
הDaemon משמש כמעין Main() לפרויקט, הוא מכיל את הקריאה לשאר הסקריפטים בעיקר. מהצד הוא עושה מה שקובץ הPersistency עושה, ושומר עליו בחיים (ככה הם בעצם שומרים אחד על השני).

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

  • change_dns (עם פרמטר const שנקבע מראש)
  • disable_system_log
  • disable_kernel_log
  • enable_tor

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

  • change_dns (עם פרמטר const שנקבע מראש, google dns הוא default)
  • enable_system_log
  • enable_kernel_log
  • disable_tor

הערות

מאחר שהפרויקט מאבטח את הראוטר ולא מכשיר קצה ספציפי, גם טלפונים ומכשירי IoT כאלו ואחרים (בעצם כל דבר שמחובר לראוטר עליו רץ הפרויקט) ינותבו דרך הtor client שרץ על הראוטר. אני חושב שזה מאוד מגניב.

אשמח לשמוע מה אתם חושבים על הפרויקט, למרות שכתבתי אותו לפני בערך שנתיים.
מה הייתם עושים שונה? מה הייתם מוסיפים?
בנוסף, מוזמנים לשאול שאלות על הפרויקט, אנסה לענות כמה שיותר בפירוט :slight_smile:

2 לייקים

למה בחרת שה-initiator יהיה חיבור של החסן נייד? ב-OpenWRT יש אפשרות לשנות מה כפתור מבצע [1] (אם יש לך כפתורים בראוטר). וטיפ קטן, Tor מספק אנונימיות, אך לא מבטיח פרטיות ואבטחה.

אגב, לגבי ברווזגומי [2], יש את הפרוייקט הזה [3] (נראה שכבר לא מתוחזק) שתומך בפונקציונאליות HID, אולי זו נקודה להתחלה.

קישורים:

  1. [OpenWrt Wiki] Attach functions to a push button
  2. USB Rubber Ducky - Hak5
  3. GitHub - ossiozac/Raspberry-Pi-Zero-Rubber-Ducky-Duckberry-Pi: A £10 Rubber Ducky USB HID! A USB device which emulates a keyboard and automates key entry.

התשובה הכללית היא כי לא הכרתי, העיקר הוא כי רציתי לתת תמיכה לכמה שיותר מערכות לינוקס, ולא ספציפית לOpenWRT שהיא האחת שעבדתי עליה.
לגבי הכפתור מבצע, מה אם יש לך ראוטר שרץ על OWRT בלי כפתור? הלך הפרויקט (מבחינה גנרית לפחות). למשל אצלי בראוטר הביתי אין כפתורים חוץ מכפתור ההדלקה.
ההוספה של tor הייתה האחרונה, לא חשבתי עליה בהתחלה, אבל זה נחמד שאתה יכול להפעיל פרוקסים בחיבור DOK על כל המכשירים שמחוברים לראוטר וtor מספק את זה בקלות.
אני חושב שקראתי את הקישור ה3 שהצמדת במחקר הראשוני שעשיתי, אבל לא ניסיתי לבנות ברווזגומי, אלא לתת שליטה קלה פיזית על הפעילות של התוכנה - תחבר DOK ופה זה נגמר.

לייק 1