BinaryVision

פיתוח Mokonnect

מאת בתאריך 05/06/09, תחת כללי

מבוא

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

קווים מנחים

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

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

Mockup

תמונות שציירתי עוד לפני שהתחלתי לפתח (כדי לראות איך זה יראה, ואם זה נוח לשימוש):

מסך ראשי

מסך ראשי


רשת USB

רשת USB


Wifi

Wifi


ניתוב

ניתוב

שיטות שימוש

התחברות לרשת אלחוטית פעם אחת

פותחים את התוכנה, לוחצים על Wifi, מכוונים את ההגדרות, לוחצים על Apply, מחכים שהוא יתחבר ויציג פלט, ויוצאים מהתוכנה

התחברות לרשת אלחוטית יותר מפעם אחת

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

התחברות לGPRS וניתוב האינטרט לחיבור USB

פותחים את התוכנה, מגדירים את החיבור USB, לוחצים Apply, כנ"ל גם החיבור GPRS, לוחצים Apply,
הולכים לRoute, מגדירים שם מי החיבור הראשי, מאיפה לוקחים DNS, ומי נמצא בNAT וכאלה, לוחצים Apply,
בתפריט הראשי שומרים את הפרופיל, ופעם הבאה ההגדרות האלה יהיו במרחק בחירת פרופיל מתוך רשימה.

סביבת פיתוח

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

סביבת הפיתוח

סביבת הפיתוח

  • VMWare Workstation – כי זה מהיר מאד בWindows, ונוח…
  • Slackware 12.2 – אם יש כלי פיתוח כלשהו שצריך ומשתמשים בו בעולם, אז הוא קיים בהתקנה הבסיסית של Slackware.

דברים שהתקנתי ובעיות שפתרתי:

  • Enlightment DR17 – החדש שהמוקו מריץ (בעזרת סרקריפט easy_e17.sh שלוקח לו שנים לרוץ)
  • Illume-SHR Profile – ערכת נושא והגדרות לillume (מתוך הGIT של הפרוייקט)
  • הגדרת DPI נכונה – ההגדרה צריכה להיות פי 2 יותר קטנה מהDPI הנוכחי. (בתוך הX11 כבר)
  • e17 Python Bindings – אני רוצה לבנות את התוכנה בPython (מתוך המקור של e17)

עכשיו יש לי סביבת פיתוח שמדמה איך הדברים יראו ובערך יעבדו המוקו.

התקדמות

תמונת מסך: מסך ראשי

תמונת מסך: מסך ראשי


מי שרוצה לראות את הקוד בצורה יפה: http://code.assembla.com/shrdev/subversion/nodes/Mokonnect/trunk
קישור לSVN למי שרוצה: http://subversion.assembla.com/svn/shrdev/Mokonnect/trunk
כפי ששמתם לב אני משתמש בAssembla לצרכי שמירת הקוד שלי, ואולי גם אשתמש בWiki שם לצורך תיעוד.
בכל מקרה המצב של הקוד כרגע לא משהו.
יש GUI, בערך קרוב למה שתכננתי, ויש גם את ההגדרות של USB Network,
כל השאר לא פעיל בינתיים.
בתוך ההגדרות של USB Network, אני נלחם עם Apply בצורה חכמה,
תמונת מסך: USB

תמונת מסך: USB


כך שבזמן שאני עושה פעולות הוא לא יתקע את הGUI ויעדכן אותו עם הודעות התקדמות.
זה יותר קשה משציפיתי בגלל שהToolkit לא תומך בThreads יותר מדי.
בכל מקרה, עד כאן להיום.

תשאירו תגובות, הערות, הצעות לשיפור, או בכלל אם יש לכם משהו להגיד.

9 תגובות :, , , , עוד...

פלאפון פתוח זה טוב לפרטיות

מאת בתאריך 29/05/09, תחת כללי

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

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

אין כרטיס קול בפלאפונים
בעקרון, בכל הפלאפונים "הפשוטים" אין כרטיס קול, ועד כמה שאני יודע (דרוש אימות), גם בפלאפונים המתקדמים יותר, כמו N95, Iphone ודומיהם.
למה הם עושים את זה? שמעתי כל מיני שמועות, על כך שהפרוטוקול של GSM (שכמובן סגור תחת NDA) מכיל פסקה הדורשת חיבור ישיר בין ה GSM לבין מערכות השמע (ככה"נ לבקשת האח הגדול), אם זה אכן המצב, GSM הוא התגלמות הרשע, אם לא, אז GSM עדיין דפוק מהסיבות שהסבירו מקודם. יכול להיות שמדובר בחיסכון בעלויות ובמשקל של המכשיר, ואם כן, זה תירוץ מתקבל אבל עדיין יוצר בעיה רצינית.
דבר זה גורם, שגם אם המכשיר כבוי, או גם אם המשתמש היה רוצה, הוא *לא* יכול לכבות את החיבור בין ה GSM לבין אביזרי השמע, מה שאומר ש*תמיד* אפשר לצוטט לו, וזה לא בשליטתו, למען האמת, גם אם היה לפלאפונים כרטיס קול, בגלל שהם סגורים לא היה למשתמש שליטה מלאה עליהם, ולא היה אפשר לוודא שאכן החיבור סגור.
אז בעצם, אפילו עם כל מאפייני האבטחה החלשים של ה GSM, אם היה לנו שליטה על מה קורה בפלאפון, לא היה אפשר להאזין לנו, אבל כמו שאנחנו רואים, אין זה המצב.

מה קורה באופן מוקו
באופן מוקו יש כרטיס קול, ובגלל ש*הכל* בו פתוח, אנחנו יכולים להיות בטוחים שאף אחד לא מאזין לנו, אפשר פשוט לכבות את החלק שאחרי על החיבור בין ה GSM לבין הכרטיס קול, והופה, אנחנו בטוחים. אז איך זה בעצם מתאפשר? ובכן, בגלל שהפלאפון פתוח, אני יודע שכאשר אני מכבה משהו, הוא מכובה, ובנוסף, ה"מבנה" של המוקו כמו שהוא, נבנה בפיקוח מלא של הקהילה, אשר יש בה אנשים מבינים שידעו להכריח הפרדה כזו, כי הרי, אף אחד לא אוהב שמאזינים לו…

מה אפשר לעשות?
אם יש לכן קצת ידע באלקטרוניקה, אפשר לעשות "eavesdrop-proofing" לפלאפון ע"י הוספת מתג שאחראי על ניתוק המיקרופון של הפלאפון ברמת החומרה, זה כמובן יבטל את האחריות, ועוד הרבה בלאגנים, אבל זה הפתרון הכי טוב!
למען האמת, הפתרון הכי טוב הוא לקנות פלאפון פתוח, ואולי ללחוץ על ייצור של עוד כאלה. בכלל, למוקו יש עוד שימושים מעניינים שאני אכתוב עליהם בעתיד, אם מישהו מעוניין: openmoko לקריאה נוספת על האופן מוקו.

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

8 תגובות :, , , עוד...

אחד האתגרים מILHack

מאת בתאריך 24/05/09, תחת כללי

מי שרוצה את האתגר, ולא יצא לו להביא מחשב נייד,
או לא יצא לו להעתיק את זה כמו שצריך.
אז הנה האתגר פריצה מהכנס:
http://de-ice.hackerdemia.com/doku.php
תקראו את הScenarios, ותהנו…
יש שם גם פתרונות בוידאו, אבל תנסו קודם בעצמכם,
בהצלחה.
עריכה:
קישור שעובד: http://heorot.net/instruction/tutorials/iso/de-ice.net-1.100-1.1.iso

עריכה:
אתגר נוסף מILHack, ההוא עם פריצה של קבצי EXE בעזרת Reverse Engineering אפשר להוריד מכאן:
http://iamverygood.notlong.com
הצלחה באתגר הזה יכולה להביא לכם עבודה טובה בתחום…

7 תגובות :, , , , עוד...

הסטיקרים הוזמנו

מאת בתאריך 19/05/09, תחת כללי

אתם תראו אותם בכנס… שווה לבוא 🙂

יום טוב.

10 תגובות :, , עוד...

תכנות בטוח ב Windows

מאת בתאריך 15/05/09, תחת כללי

מי שעוקב אחרי חדשות טכנולוגיות ברשת, בוודאי שם לב ל http://www.theregister.co.uk/2009/05/15/microsoft_banishes_memcpy/
אז כן, אחרי שמיקרוסופט הגבילה (מנעה?) את השימוש בפונקציות strcpy, strcat ודומיהן, הגיע הזמן של memcpy.

אז מה הם בעצם עשו? הם החליפו את memcpy ב memcpy_s שזה בעצם פונקציה שמקבלת עוד פרמטר, גודל זכרון היעד, ומעתיקה זכרון בגודל של המינימום בין גודל זכרון היעד לבין גודל הזכרון שצריך להעתיק, ואז, היא קוראת ל memcpy (זה מימוש אפשרי, ובטח לא רחוק ממה שהם עושים, אם הבנתי אותי נכון).

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

#define memcpy(a,b,c) memcpy_s(a,b,c,c)

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

שלא תבינו אותי לא נכון, אני חושב שנכון לכתוב בטוח, אבל אני לא בטוח שלהכין את הקרקע לקופים שלא שעושים שטויות היא הדרך הכי טובה.
מה בקשר ל pritnf? הם גם מונעים את השימוש בזה? צריך לחשוש שאיזה אידיוט יכניס לשם מחרוזת… אולי צריך לכתוב
printf_s שאחראית להקפיץ שאלה בקומפילציה עבור כל printf וככה לוודא שהמתכנת וידא שהוא לא עשה טעות.

יש לי אלטרנטיבה אחרת, תשכרו מתכנתים שיודעים לתכנת… כי בסופו של יום גם memcpy_s לא בטוחה לגמרי…

יום טוב.

5 תגובות :, , , עוד...

השקת "סטיקר" של Binaryvision

מאת בתאריך 22/04/09, תחת כללי

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

  • הסטיקר חייב להכיל את הכתובת של האתר (www.binaryvision.org.il)
  • הסטיקר יכול להכיל את הסלוגן "Because even wood can be hacked", או סלוגן אחר מגניב ולא חרוש…
  • הסטיקר חייב להיות יפה 🙂

אני חושב שרקע מטריקס כזה ירוק שחור עם 0 ו 1 זה דפוק ונדוש, אז מי שיגיש כזה יקבל מכות 🙂 (אבל זה רק אני).
בנוגע לצורה, יש שתי מחנות, האחד רוצה סטיקר מוארך סטייל "bumper sticker" והשני רוצה סטיקר עם צורה מגניבה, או לפחות אובאלי (ולכן יחסית ריבועי מבחינת מימדים).
החלטנו להעלות את הנושא לדיון פה, אבל בעיקר לצורך הגשת עיצובים.
אם למישהו יש רעיון לעיצוב, בבקשה שיכתוב פה, אם למישהו יש עיצוב מוכן, בבקשה שיעלה תמונה ויקשר פה.

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

יום טוב.

דוגמאות לסטיקרים שאני אהבתי: (הצורות, והלוגואים הצבעוניים והיפים)
http://www.realgeek.com/geek-laptop-stickers

דוגמא ל template שאני חושב שנכון, את הצורה אפשר לשנות, אני מדבר יותר על מיקומים של דברים וצורה כללית:
(לקח לי שתי שניות להכין, אני עסוק, אז הבחירת צבעים לא משהו וזו ממש לא גרסה סופית, והיא יחסית מכוערת, זה רק mock up, וגנבתי ממישהו את הגרזן, בטח יתבעו אותי על זכויות יוצרים):

Binaryvision logo mockup

Binaryvision logo mockup

אני חושב שאולי כל הסטיקר צריך להיות בצורה של גרזן\גזע עץ+גרזן ועליו יהיה כתוב כל הטקסט, מה אתם חושבים? נראה לי הרעיון האחרון שהצעתי מעולה! 🙂

בקיצור, הביעו את דעתכם.

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

25 תגובות :, , , עוד...

Reversing, והכוח של זה

מאת בתאריך 08/04/09, תחת כללי

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

ממשק הWeb

רשימת קבצים

רשימת קבצים

רשימת הקבצים שמצאתי נמצאת כאן בתמונה.

דברים מעניינים שקופצים ישר לעין:

  • x.asp

נראה כאילו הוא אמור להציג סיסמה כלשהיא, ננסה להכנס לדף ישירות דרך הנתב:
http://192.168.2.1/x.asp
ומקבלים לא רק את הסיסמה שלי להתחברות לנתב, אלא גם את הסיסמה של איזשהו משתמש super.
מה?! אתם בטח צוחקים עלי….

x.asp

x.asp

ניסיתי להתחבר לממשק עם המשתמש super, והסיסמה שיש שם, אבל זה לא נתן לי להתחבר, צריך עוד לראות איפה משתמשים בזה.
(ד"א הסיסמה מצונזרת בכוונה)

  • test.asp

לא נראה מעניין יתר מדי,
נראה כמו חלק מהממשק הוספת שיתוף בNAS.

  • users

קובץ שמכיל את הרשימה הבאה:

 User1
 User2
 user3
 user4
 user5
 user6
 user7
 user8
 user9

האל יודע למה, בינתיים לא מצאתי לזה שימוש או הגיון.

  • flash.asp

נראה כאילו זה הדף שדרכו אחרי זה עושים flash לחומרה, לפחות כאן אני יכול לראות מה הגרסת Firmware שלי.
שזה 2.15, קצת יותר ישן מהכי חדש שהורדתי מהאינטרנט (2.21), ז"א לפני שאני משחק עם זה בהתבסס על 2.21 צריך לעדכן את הנתב שלי.

  • getflash.asp

מביא קצת יותר פרטים, נותן את הMacים והRegulation Domain (מישהו יודע מה זה?)
אצלי זה עומד על ETST 1-13(Europe)

  • debug.asp

נראה ממש מעניין, מכיל טופס של פקודה command וכפתור apply.
משחקים עם הטופס לא הניבו כלום, הוא כל פעם כותב Invalid value of command.
מה שעוד יותר מוזר זה שאני לא רואה בסורס של debug.asp איפה כל הלוגיקה של מה שקורה אחרי שעושים Submit.
מבדיקה של הטופס עולה כי הוא שולח את זה למקום לא ברור, וגם לא קיים פיזית:

<form action=/goform/formDebug method=POST name="debug">
.
.
</form>

מה זה goform?? מאיפה זה בא?
http://home.postech.ac.kr/~sion/cs499a/webserver/web/over/goforms.htm
מצוין, זה אומר שהטופס הזה מקומפל בתור קוד C לתוך השרת web שלנו.
מצד אחד זה טוב, קוד C בדרך כלל לא כלכך אמין.
מצד שני זה רע, אני אצטרך לעשות Reversing לשרת כדי לראות מה הולך מאחורי כל סקריפט.

Reversing webs

formDebug

formDebug

טוב, אז ניקח את הבינארי של השרת Web, ונראה מה אנחנו יכולים לשלוף ממנו.
לפי מה שהבנתי מהתיעוד, כדי לרשום טופס חדש צריך לקרוא לwebFormDefine.
בואו נראה אם אנחנו יכולים לראות מי קורא לזה ועם איזה פרמטרים.
כמובן שזה מקומפל בלי Symbols, אז זה לא יהיה כזה פשוט, אפשר לנסות לגשת מצד אחר,
כדי לרשום טופס צריך להביא את השם שלו בתור מחרוזת, ז"א אם נוציא את השם של הטופס מתוך debug.asp
אז נוכל למצוא את המקום בקוד שרושם אותו.
השם של הטופס זה formDebug.
מגיעים לפונקצייה שהוא רושם, מסמנים אותה כפוקנצייה שמטפלת בformDebug, ומסתכלים מה היא עושה.
נראה כאילו הפונקצייה בודקת שהפקודה זה "report.txt", ואז מייצרת לוג של הרבה מאד פקודות מערכת, ונותנת אותו להורדה.
כמובן ה"נראה כאילו" לקח כמה זמן להבין, אני לא הולך להציג כאן את כל הקוד, זה פשוט הרבה אסמבלי.
בכל מקרה בדיקה של התיאוריה מול הנתב באמת אישרה את זה, רשמתי בפקודה report.txt, וקיבלתי קובץ להורדה עם מלא מידע.
כל ההגדרות רשת, ההגדרות נתב, כל המידע השותף שמשתנה בזמן הניהול, הוא זרק לי אותו בRaw Text.
נקודה מעניינת שראיתי, שהוא קורא הרבה ל_system בקוד שלו.

המשך עבודה

  • מה הוא עושה עם הסיסמא של super?
  • למצוא עוד דברים מעניינים בממשק Web.
  • למצוא קריאה ל_system שמקבלת מחרוזת שמורכבת מפרמטרים שאני מביא בקלט של הטפסים, כדי לאפשר לי הרצת פקודות ע"י שרשור פקודות לינוקס לפרמטרים בממשק Web.
  • מי שרוצה מוזמן להוריד את דפי הASP והבינארי של שרת הWEB מכאן: http://www.filesonic.com/file/2125608961/Edimax.Web.2.21.zip

אשמח לתגובות, רעיונות או כל דבר אחר שיש לכם להגיד…

11 תגובות :, , , , , , , עוד...

מסע אל בטן הנתב

מאת בתאריך 22/03/09, תחת כללי

יש התקדמות!
אני אשתדל לקצר כי יש ממש הרבה דברים שעשיתי, ואני מקווה שהקיצור לא יפגע בעניין והבנה של אנשים,
אם יש שאלות תמיד אפשר לשאות בתגובות, או בערוץ IRC.
בחרתי להשתמש בSlax 6.0.9 כדי לקמפל את הFirmware.

קימפול הסורס מהאתר של Edimax

הוראות פשוטות, פותחים את הtgz, נכנסים פנימה, לתוך תיקיית toolchain, ופותחים את הtgz שם לתוך "/" כך שישתלב במערכת.
מוחקים את build.tmp מהתיקיית מקור, ומריצים את NAS-BUILD.
כמובן ששום דבר לא פועל ישר בלינוקס, וצריך להתעסק עם כל החרא הזה.
אז נתחיל…
דבר ראשון אחרי הסתכלות בNAS-BUILD הבנתי שהוא עושה סוג של Clean וConfigure אם הוא לא מוצא את build.tmp.
עד כאן טוב ויפה חוץ מהעובדה שאפילו בזה הוא נכשל…
הוא נופל לי על זה שהוא לא מוצא את הפקודה rcsclean, ששייכת לחבילת ניהול קוד או משהו כזה.
טוב לא נורא, מורידים את slackpkg מתוך הRepository של Slackware, ומתקינים עם pkgtool שכבר יש בSlax.
אחרי הגדרת slackpkg שכלל בחירת Mirror, והורדה והתקנה של gnupg, ועדכון המפתח gpg שלו, אפשר להתקין את מה שאנחנו צריכים.

slackpkg update
slackpkg install gnupg
slackpkg update gpg
slackpkg install rcs

מוחקים את build.tmp שוב ומריצים NAS-BUILD.
הפעם נראה שהוא עשה מה שצריך.
עכשיו נשאר רק לבנות, מריצים את NAS-BUILD שוב, הוא שואל אותנו גרסה וכל זה, אנחנו משאירים הכל רגיל.
עכשיו אני לא הולך לפרט את כל השואה שעברתי כדי לגרום לזה להתקמפל, אני רק הולך לכתוב את זה בסעיפים, ואיפה התיקונים שעשיתי.

  • busybox-1.00-pre2 לא מתקמפל

צריך להכנס לתיקייה שלו בתוך AP ולערוך את .config ולשנות את CONFIG_LFS=y לCONFIG_LFS=n.

  • busybox-1.1.0 לא מתקמפל

אותו דבר כמו הקודם, רק הפעם צריך להפוך לn גם את FDISK_SUPPORT_LARGE_DISKS.

  • dosfstools-2.11 לא מתקמפל

צריך לערוך את Makefile בתיקייה שלו בתוך AP/dosfstools-2.11 ולהוריד את התוספת של OFFSET_BITS=64 (כל הערך החל מ-D)

  • libpcap-0.7.2 לא מתקמפל

צריך להתקין את bison ואת flex בעזרת slackpkg

  • ppp-2.4.1 לא מתקמפל, צועק על pcap_parse

צריך ללכת לתיקייה של AP/libpcap-0.7.2 לערוך את הMakefile כך שהשורות שמכילות את lex ואת yacc יכלו את הערכים הבאים:

LEX = lex -Ppcap_
YACC = yacc -p pcap_
  • vsftpd-2.0.4 לא מתקמפל

צריך לערוך את הקוד מקוד שנמצא בAP/vsftpd-2.0.4/sysutil.c
ולעשות Comment-Out לקוד שמגדיר את הDefines בקבוצה של OFFSET_BITS=64…

יש! זה התקמפל!!!! (אצלי לפחות)
ובנה את הImage שיושב בimage/NAS_Router/NAS-1.21.bin.
רגע…… 1.21??? הבינארי מהאינטרנט מהאתר של Edimax שזה 2.21, והוא גם יותר גדול.
כלבים, המקור לא מעודכן,
עד כאן!!

Reversing של הBinary של הFirmware

אחרי מעבר על כל NAS-BUILD וכל הסקריפטים שהוא משתמש בהם,
הבנתי שהFirmware מורכב מKernel ומהRoot File System שמחוברים יחד באיזה פורמט לא ברור שמיוצר ע"י קובץ בינארי. (cvimg)
בואו נראה לאיפה נכנס הקרנל שייצרנו בעצמו לתוך הimg שהצלחנו ליצור.
אפשר לראות שכל הקרנל (bzImage) בשלמותו יושב בתוך הimg הסופי ומתחיל באיזה כותרת, שמכילה את הגודל שלו, ומסתיים בעוד תוספת של 4 בתים כחלק מהגודל שכתוב בגודל.
ז"א את הקרנל אנחנו יודעים איך להוציא, ניגש לעניין.
פותחים את הimg הבינארי מהאתר עם עורך Hex ושולפים מתוכו את הKernel אחרי הכותרת, ועד האורך שמצויין פחות 4 בתים.
האורך שכתוב לנו זה 00120C18.
עכשיו צריך לראות איך שולפים את המערכת קבצים, לפי הסקריפטים שמייצרים את הimg שאנחנו הצלחנו ליצור,
הוא מייצר את המערכת קבצים בתור קובץ Image שמכיל מערכת קבצים ext2, אחרכך מכווץ אותו עם lzma ופשוט מחבר אותו לסוף הFirmware.
אז בואו נוציא את המערכת קבצים מהבינארי של Edimax.
הולכים למקום אחרי הKernel ומתחילים להעתיק משם עד סוף הקובץ החוצה עם עורך Hex, ושומרים את זה כקובץ נפרד.
מעבירים אותו ללינוקס, פותחים את הכיווץ בעזרת אותו lzma (פרמטר d) ומקבלים קובץ בגודל 11 מגה בערך.
משמעותית יותר גדול ממה שהיה לנו (8 פתוח, 1.5 מכווץ)
עכשיו אפשר למפות את הקובץ בתור כונן בלינוקס וסופסוף לראות מה יש שם.

mkdir /mnt/rootfs
mount -o loop extracted_rootfs.img /mnt/rootfs

בואו נכנס ונראה מה יש שם.
כמה דברים שקופצים ישר לעין:

  • יש תקייה ב/ שקוראים להweb שמכילה את כל המקור של האתר! 🙂
  • תיקייה /bin מלאה בסקריפטים לשימוש בחומרה והחלת הגדרות וכו'
  • תיקייה /etc גם מכילה דברים מעניינים יותר ממה שהיה לנו.

האפשרויות שעומדות בפני

  • יש לי את המקור ASP של האתר! אני יכול לחפש באגים בסקריפטים ולנסות להריץ Shell Commands.
  • יש לי את המערכת קבצים העדכנית, וקומפילר שמסוגל לקמפל למעבד שיש שם (RDC 3210), להוסיף תוכנות לא אמורה להיות בעיה גדולה מדי.
  • אולי אני אתקין עליו Python? 🙂
  • ראיתי שיש שם כבר Busybox עם telnetd שאפשר להריץ ברגע שיהיה לי Shell Command Execution.
  • עדיף לי בינתיים למצוא איך לשבור אותו בלי להתקין Firmware חדש כדי לא להסתכן בBricking של המכשיר, אז פוסט הבא יהיה כנראה על באגים בממשק Web של Edimax…

שאלות? תגובות?

10 תגובות :, , , , , , , עוד...

פרוייקט פריצת נתב

מאת בתאריך 20/03/09, תחת כללי

מבוא

עכשיו שיצא לי ללמוד קצת יותר לעומק על לינוקס, הקרנל שלו, ואיך כל הדברים עובדים,
הגיע הזמן לקחת את הנתב שקניתי שהוא גם NAS, שמו בישראל Edimax BR-6215SRg, ולפרוץ אותו.
זה הולך להיות בשלבים, ואני אעדכן אותכם כל פעם שתיהיה התקדמות משמעותית…

מטרות

  • השגת גישה של SSH לרואטר שלי

שבירת הממשק Web
שידרוג הFirmware למשהו שאני אבנה

  • קימפול דברים חדשים למכשיר

BitTorrent
aMule

  • לראות אם אפשר להתקין ממשק נורמלי לראוטר

OpenWRT
DD-WRT

ביצוע

מה כבר יש באינטרנט?

יש כבר Firmware קיים לכל מיני נתבים שמאפשר להחליף את הFirmware למשהו OpenSource ופתוח.

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

האם אפשר לדפוק את הממשק Web

חשבתי לנסות לפרוץ אליו דרך הממשק Web ולהשיג הרצת קוד.
אחרי שחרשתי על הממשק Web, ראיתי שאין כלכך איפה לתת פקודות.
אז בדקתי איזה שרת Web הוא מריץ וחשבתי לנסות לפרוץ אותו עם איזה Remote Code Execution.
ואז הבנתי, זה לא x86, אין לי מושג איך אני מריץ שם קוד, איזה קוד, יש שם בכלל מחסנית?!
במציאות הוא רץ על מעבד RDC 3210.

מה עם קוד מקור למערכת

למזלי, המערכת מריצה לינוקס לכן חלקים נכבדים שם בקוד פתוח,
אז יש הורדה מהאתר של Edimax של הקוד מקור של המערכת.
http://www.edimax.com/images/Image/OpenSourceCode/Wireless/Router/BR-6215SRg/NAS-GPL-BR-6215SRg.tar.gz
עכשיו צריך לשחק איתו ולראות אם אני מצליח למצוא שם איך לפרוץ אותו,
או איך לקמפל את כל הסיפור הזה מחדש עם השינויים שאני רוצה להכניס.

בפעם הבאה

  • נראה אם אני מצליח לקמפל את כל המערכת ממצב של קוד מקור למצב של Firmware Image שאפשר לעשות איתו Upgrade.
  • אם כן, אני צריך למצוא איפה הוא מרכיב את הRoot Filesystem, להוסיף לשם שרת SSH אם אין
  • לערוך סקריפטי עלייה ולהוסיף שם הפעלה של שרת SSH
  • לוודא שבiptables יש לי גישה לפורט 22
4 תגובות :, , , , , , עוד...

אבטחה ופרצות ברשת ה GSM

מאת בתאריך 11/03/09, תחת כללי

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

למי מכם שקרא את הכתבה הראשונה כנראה כבר הבין שהכתבה הזאת בכלל לא הולכת לדבר על סוגי תקיפה כאלה (בגלל שהן לא קשורות בכלל לGSM או סתם בגלל שהובלתי אותכם לכיוון אחר).
התקיפות שאני מדבר עליהן הן מסוג שונה לגמרי. כפי שהבנתם כבר ספקית הGSM שלכם לא צריכה להזדהות בפניכם, אז מה מונע מכל פורץ להיות הספק שלכם?
התשובה היא בדיוק כלום. כל בן אדם היום עם החומרה הנכונה והידע הנדרש יכול להיות הספקית שלכם, או לדייק קצת יותר… "לגנוב" אותכם מהרשת שלכם.

מתקפה אקטיבית

מה צריך?
1. לב GSM + סט אנטנות, רכיבים אלה ימלאו את תפקיד התא ברשת ה GSM
2. מחשב – שימלא את תפקיד הבקר והמרכזייה ברשת הGSM
כל מי שיש לו את הציוד הזה יכול לפתוח רשת GSM משלו, הוא אומנם לא יוכל באמת למתג שיחות או לחבר אותכם לאנשהו (לפחות לא בלי איזה האק מגעיל ומכשיר נוסף ברשת אחרת), אבל הוא יוכל לגרום לפלאפון שלכם (או כל פלאפון אחר) להאמין שזה אפשרי,

וזה כל מה שהפלאפון שלכם צריך בשביל להתחבר לרשת GSM.

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

איך זה קורה?!
אז למה בעצם שהפלאפון שלי יעבור לתדר ביקון אחר שהוא לא של הרשת? בתכלס, אין בזה שום הגיון עד שמביטים בצד הטכני של הסיפור הזה.. פלאפונים במצב IDLE (כלומר שלא משדרים), מחוברים לרשת,  או יותר נכון "קוראים" נתונים מהרשת (מהתדר ביקון), פעם בכמה זמן (הסבר הלא טכני של הפעולה) הפלאפון מתחבר למאית שנייה לרשת, מודיע שהפלאפון עדיין דלוק (המנוי עדיין מחובר), מודיע על המיקום שלו וזהו, אם  פעולה זאת לא תתבצע פעם בזמן מוגדר הרשת תחשוב שהמכשיר כבוי – ממש כמו PING.
אז איך בעצם פלאפון מתנייד? פלאפון עובר מביקון לביקון עם התחשבות בתדר ביקון שהוא קולט הכי טוב, ככה במהלך נסיעה קצרה בת"א הפלאפון הממוצע עובר בערך 5 תדרי ביקון שונים.  מכיוון שכל תדרי הביקון בעולם עוברים באוויר, כל הנתונים שלהם פתוחים לכלל הציבור ואינם מוצפנים, ולכן לחקות תדר ביקון זה דבר מאוד מאוד פשוט… סה"כ Copy/Paste  של הנתונים מהאוויר.

ולמה שהפלאפון שלי יעבור דווקא לתדר ביתי שמישהו משדר כשיש באוויר כל כך הרבה תדרים של רשתות גדולות שמוגברות ומשודרות בעוצמה הרבה יותר גבוהה? כאן הקסם מתחיל. כל ביקון משדר נתון מסויים שנקרא CRO (Cell Reselect Offset), הנתון הזה נועד לווסת את השימוש ברשת לתאים השונים. לדוגמא, בואו נדמיין קניון גדול עם המון אנשים, ליידו (ממש 20 מטר ממנו) יש תדר ביקון וכל המשתמשים בקניון מתחברים לאותו תדר ביקון, למה? כי הוא הכי קרוב והפלאפון קולטים אותו הכי חזק? אבל זהו לא מצב אידיאלי, הרשת לא רוצה שהעומס יהיה על תדר אחד.
הרשת רוצה שהעומס יתחלק בין כל התאים שלה, ולכן היא תשים תא קצת יותר רחוק (100 מטר מהקניון) ותשים לו CRO גבוהה, מה שיגרום למכשיר לחשוב שהוא קולט את התדר הזה אותה העוצמה כמו את התדר הקרוב (אם לא יותר טוב) ולכן העומס מהקניון יתחלק בין שני התאים הקרובים לקניון. אבל מה? הרשתות הישראליות הגאוניות שלנו החליטו לא לווסת עומסים אלא פשוט לשים הרבה תאים בכל מקום, ולכן הן לא משתמשות בנתון ה
CRO, מה שנותן לכל טמבל את האפשרות לפתוח תדר משלו עם CRO גבוה ולגנוב את כל ת"א במידה וירצה בכך.

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

לאחר שגנבתי פלאפון אני יכול לעשות איתו כל דבר שאני רוצה, החל מלאכן (לגרום למכשיר לשדר, למדוד את התאים שנמצאים מסביבו, לקבל נתון "TA" מכל אחד מהם ואיתו אפשר לחשב בדיוק לא רע את מיקום הפלאפון), האזנה לרעשים שמסביב לפלאפון, התקנות אפליקציות ריגול דרך האוויר, שלל פעולות שמתבצעות דרך פקודות AT כמו במודם ועוד הרבה דברים אחרים.

מתקפה פאסיבית

מה צריך ?

USRP – סורק תדרים שאנחנו יכולים לתכנת

איזה טארהבייט של Rainbow tables – כדי לפצח את ההצפנה מסוג A5

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

איך זה קורה?

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

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

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

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

IMSI DETACHING

טוב, אם לא הבנתם או קראתם עד עכשיו אז אני אזכיר לכם שה IMSI הוא המזהה שלכם ברשת ה GSM.

הוא לא קשור ל IMEI של המכשיר אלא קשור לסים שאיתו אתם נרשמים ברשת.

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

איך זה קורה ?

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

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

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

זהו,

זה הכל אולי בעתיד אני אוסיף עוד מתקפות ועוד מידע אבל בינתיים אני חושב שכתבתי מספיק 🙂

עוד מידע מעניין:
http://www.scribd.com/doc/7227619/Cracking-a5-THC-Wiki
http://wiki.thc.org/gsm
http://openciphers.cvs.sourceforge.net/openciphers/gsm/a5/

8 תגובות :, , , , , עוד...

מחפש משהו?

תשתמש בטופס למטה כדי לחפש באתר: