BinaryVision

Tag: אבטחה

גלישה חינם בבתי מלון

by on אוג.16, 2010, under כללי

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

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

הרעיון בגדול הוא, למצוא מישהו ששילם (בעיקר ע"י ניסוי וטעייה או ניחושים מושכלים) ולהשתמש בזיהוי כרטיס הרשת שלו. להחליף כתובת mac ב- Windows זה סיפור מהתחת, לא תמיד אפשרי, במיוחד בעדכונים האחרונים של הדויורים וגם הדרך משתנה מכרטיס לכרטיס. מה שכן, Windows שימושי בשלב ראשוני מאוד עם התוכנה Cain, שמאפשרת לסרוק את ה subnet ולמצוא משתמשים פעילים ברשת (ip, mac וייצרן בקובץ hosts.lst). ההבדל המהותי הוא שב- arp -a למשל, לא רואים שום דבר חוץ מה- default gateway, כש- cain מייצר מפה שימושית מאוד אותה אני ממליץ לקחת ל ubuntu לשלבים הבאים של התהליך.

למי שלא מצא מספיק אנשים, או שלא רוצה לעבור ל windows, השיטה השנייה, היותר איטית אבל בהחלט יותר מדויקת (ונסתרת) היא להסתכל מי מדבר עם ה AP באוויר, וכך למצוא כתובות של קליינטים. אני ממליץ על שילוב של aircrack-ng עם wireshark. קודם נפתח ממשק למוניטור (נניח שהתחנות שמעניינות אותנו על ערוץ מס' 6 והכרטיס הוא wlan0) הפקודה היא: airmon-ng start wlan0 6 (מפסיקים עם airmon-ng stop mon0).

להבדיל מ- Windows, ב Ubuntu קיבלתי תמיכה מלאה בשינוי מאק ו injection ב aircrack ישר מהקופסה כמו שאומרים. אחרי שפתחתי ממשק mon0, פתחתי wireshark (מ root) והתחלתי לתפוס תעבורה מ mon0. עשיתי סינון לא לרשום broadcasts וכו'. הלוג עצמו שימושי, אבל יותר פשוט ללכת ל statistics ולבחור wlan. שם, רואים את כל התחנות ואת הקליינטים שמדברים איתן, וכמות המידע שעוברת בניהם. מכאן גם אפשר לקבל רשימה של כתובות mac ויצרנים.

עכשיו שיש רשימת יצרנים (אני תמיד ממליץ להתחיל מ apple, בדר"כ אנשים עם יותר כסף משכל), אפשר להתחיל לנסות להתחבר. בשביל לשנות mac צריך לנתק לרגע את ה network (קליק ימני על האייקון באובונטו Disable Network), ואז מתוך root, נשנה את ה mac שלנו ככה: ifconfig wlan0 hw ether aa:aa:aa:aa:aa:aa אפשר גם בלי הנקודתיים. כמובן שבסוף נעשה שוב קליק ימני ונדליק את ה network. השינוי הוא שינוי זמני ולא נשמר אחרי Restart.

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

wget -O /dev/null http://www.msftncsi.com/ncsi.txt

wget -O /dev/null http://whatismyip.akamai.com

נגמרו הכתובות או הסבלנות? עוד קצת sniffing, אולי על ערוץ אחר יכול להוביל לתוצאה יותר חיובית.

אם המחשב המקורי עדיין מחובר יהיה קצת חורים שחורים בגלישה. בדר"כ רשתות כאלה משדרות יותר מ AP אחד (למשל spectrum, wifizone) ולמרות שזו אותה רשת, ברמת ה AP זה לא, לכן אפשר להתחבר פשוט לרשת השנייה (המשתמש המקורי מתחבר לאחת, אתם מתחברים לשניה) ואז כולם שמחים.

ברגע שמתרגלים: התהליך לוקח פחות מ- 5 דקות. זהו, תהנו מחופשה עם אינטרנט on the house.

עדכון: למרות שלא יצא לי לבדוק בתנאי אמת, הנה תחליף לסריקת ה- arp עם cain:

nmap -sP -PR 10.1.0.1-255

16 Comments :, , , , , more...

אבטחה נמצאת בפרטים הקטנים

by on ינו.31, 2010, under כללי

הפוסט של היום לא עוסק בהקשחת שרת או בתכנות נכון והגנתי, אלא בדבר חשוב יותר משניהם, תכנון.
נתקלתי לאחרונה ב"פרצה" די מבדרת. הפרצה אומנם לא מאפשרת לי להשתלט על שרת, או אפילו לפגוע במשתמשים, אבל היא בהחלט מאפשרת גישה לדבר ששווה כסף, או לפחות יכול להיות מעצבן: כתובות אימייל של קבוצה ממוקדת נושא, במקרה הזה, אנשי טכנולוגיה.
למי שלא מכיר, האתר sourceforge הוא האתר הכי גדול (או לפחות אחד מההכי גדולים) לפרוייקטים קוד פתוח. באתר יש כ 2 מיליון משתמשים רשומים וכ 230,000 פרוייקטים. בנוסף, ישנם Mailing lists לכל הפרוייקטים, ובזה נתמקד.

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

נתבונן רגע לעומק במעמקי ה"קוד" של העמוד, נתבונן לדוגמה בלינק שנתתי קודם מארכיון המיילים של Firebird: נבחר את המייל השלישי, זה נשלח ע"י "Adriano dos Santos Fernandes <adrianosf@gm…>". אנחנו רואים שהכתובת שלו מתחילה ב gm, (הערה: כולם משתמשים כיום ב gmail ככה שלא קשה לנחש שהכתובת האמיתית שלו היא gmail.com, למרות שהיא לא הייתה חייבת להיות, וזה יעבוד כמובן גם על כתובות של שרתי מייל שאנחנו לא מכירים) אבל אם נסתכל לעומק בלינק שמקשר לפוסט (בעמודה topic), נראה שם משהו מעניין, לדוגמה, במקרה שלנו, הלינק הוא:
http://sourceforge.net/mailarchive/forum.php?thread_name=4B65B1DC.5020407%40gmail.com&forum_name=firebird-devel
הפלא ופלא, השדה thread_name מסתיים ב gmail.com, מכך נסיק ששרת המייל ששלח את המייל הוא gmail.com ולכן הכתובת היא adrianosf ~-at-~ gmail.com.
נסתכל בשורה הבאה, מייל מאת Alexander Peshkoff <peshkoff@ma…>, אם נסתכל בלינק בעמודה topic, (לינק: http://sourceforge.net/mailarchive/forum.php?thread_name=201001311914.57707.peshkoff%40mail.ru&forum_name=firebird-devel) נראה שאותו שדה מסתיים הפעם ב @mail.ru, והרי זה לא מפתיע שזה מתאים לאימייל שלו שמתחיל ב: peshkoff@ma ולכן האימייל המלא שלו הוא peskoff ~-at-~ mail.ru.

החדים מביניכם בטח שמו לב שבמקרה השני, הלינק הכיל את כל הכתובת, ובמקרה הראשון לא. זה מתחבר לממה שאמרתי קודם, השדה הזה לא עקבי מספיק, (או לפחות לא מצאתי את החוקיות), ולכן זה לא עובד ב 100% מהמקרים, אבל ברוב המקרים שבדקתי, השדה הזה אכן מסתיים בשרת האיימייל ששלח את המייל, גם אם זה לא בהכרח השרת שיקבל את המיילים, זה בהחלט יכול לעזור. לדוגמה, לפעמים ב gmail הסיומת של השדה הזה תיהיה mail.google.com, אמנם אי אפשר לשלוח מייל ל adrianosf@mail.google.com (מהדוגמה הקודמת), אבל אפשר בהחלט לתרגם את זה בצורה קלה (הרי אם זה נפוץ מספיק אז אפשר לתרגם ידנית ובקלות להחליף את כל השדות).
זה גם מאוד פשוט לגנוב את המיילים האלה, לדוגמה, השורה הפשוטה הבאה שמתמשת ב wget וב sed (אמנם לא הכי נקי שאפשר, אבל החלט עושה את העבודה):

wget -q -O - http://sourceforge.net/mailarchive/forum.php?forum_name=firebird-devel | sed -n -e 's/^.*<td width="50%"><a href="[^&]*%40\([^&]*\)[^"]*".*$/@\1/p' -e s'/^.*&lt;\([^&]*\)...&gt;.*/\1/p'

לוקחת עמוד ומחלצת ממנו את כל השרתים בשורה אחת (מתחילים ב @), ואת המייל (עד הקטע המצונזר) בשורה אחריה. להוסיף את התוצאות לdb פשוט (לדוגמה sqlite), ולכתוב סקריפט פרל קצר שיעבור בכל העמודים של כל ה ML ב sourceforge ויריץ עליהם את הסינון sed הזה, גם לא לוקח הרבה זמן. בקיצור, אנחנו יכולים, בקלות יחסית (עדיין צריך לזכור לא להציף את sourceforge ולהשתמש בפרוקסי\בוטנט) לקחת את כתובות האימייל של 2 מיליון אנשים טכנלוגיים (אולי יותר אולי פחות) ולהשתמש בהם בפרסום ממוקד באינטרנט.

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

1 Comment :, , , more...

למה מתייחסים לSQL שונה?!

by on יול.14, 2009, under כללי

הקדמה
קיימים הרבה מאוד סוגים של פרצות אבטחה, לדוגמא XSS, אני יכול להבין למה XSS קורה, הרי לפעמים יש מקרי קצה שבהם רוצים לתת למתכנת יכול לכתוב html, או לחלופין, קשה לבקר (לא באמת, אבל נניח) כל כתיבה שאנחנו מבצעים ולכן אפשר לפספס ובטעות לכתוב מחרוזת ששכחנו לעשות לה escaping.
אותו דבר אני יכול להגיד על buffer overflow (גם לא באמת, אבל נניח) וישנן עוד הרבה פרצות שעליהן אפשר להגיד אותו דבר (לפעמים המצב עגום יותר ולפעמים פחות).
אבל במקרה של sql injection אני פשוט לא מבין איך זה עדיין קיים. אבל לא על זה מדובר בכתבה, אלא על הבעיתיות והקלת הראש שאנשים מייחסים לשרת sql שלהם.

תיאור הבעיה הנפוצה
כידוע Sql injection קורה כאשר המשתמש מצליח להשפיע על המחרוזת המכילה את השאילתא שאנחנו מריצים על ה db כך שהשאילתא תבצע פעולה שלא רצינו שתקרה.
אוקיי, זו פרצה נחמדה, טריק מגניב, רעיון יפה, אבל למה זה עדיין קורה? הרי יש שתי פתרונות מאוד פשוטים למניעת הבעיה!

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

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

אז איך זה שאנשים עדיין לא עושים את זה? מעבר לבינתי.

הבעיה האמיתית ופתרון בשבילה
הפתרונות שהצגתי כמובן נפוצים ומשתמשים בהם בכל מיני מקומות, והם הדרך לטיפול בבעיה, אבל לא מעט פעמים נתקלים בכל זאת בפרצות. אבל זה בהחלט לא מספיק!
הבעיה האמיתית היא, איך בכלל הגענו למצב שבו כל מה שאנחנו צריכים זה לקרוא מידע מ"טבלאת הידיעות של האתר" ובכל זאת יש לנו הרשאות כתיבה\קריאה ל\מטבלאת המשתמשים?
כל איש אבטחה יודע שהדבר הראשון שעושים זה "הפרדת סמכויות" כי בסופו של דבר, לא משנה כמה ה firewall שלך חוסם כל תעבורה וכל התוכנות שאתה משתמש בהן לא פגיעות, אם ל guest account שלך יש הרשאות root, יהיה לך גהנום בשרת 🙂
בכל שרת sql בתחום יש שמות משתמש וססמאות, יתרה מכך, לכל שרת יש תמיכה באפשרויות הגבלת גישה מתקדמות.
אז למה אנשים לא משתמשים ב user אחד בשביל לקרוא\לכתוב מהטבלאת משתמשים, ביוזר אחר בשביל לקרוא מידע וביוזר אחרון בשביל לכתוב מידע? (כאשר מידע = הכל חוץ מטבלאות משתמשים) או אפילו אם צריך לפצל את זה עוד יותר (לדוגמא מידע אישי רגיש יהיה מפוצל מהבלוג של האתר).

ההנחה שלי היא: עצלנות.

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

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

הערה חשובה:
אני יודע שלא תמיד יש לכם גישה ליצירת גישות (לדוגמא שרת חינמי) אבל כל עוד אתם משלמים על השרת, זכותכם לדרוש כמה יוזרים שתרצו! ככה שזה לא תירוץ!!!

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

23 Comments :, , , , more...

Reversing, והכוח של זה

by on אפר.08, 2009, under כללי

בהמשך לפרק הקודם, היום אני הולך להראות לכם מה מצאתי במערכת הקבצים של ה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 Comments :, , , , , , , more...

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

by on מרץ.22, 2009, under כללי

יש התקדמות!
אני אשתדל לקצר כי יש ממש הרבה דברים שעשיתי, ואני מקווה שהקיצור לא יפגע בעניין והבנה של אנשים,
אם יש שאלות תמיד אפשר לשאות בתגובות, או בערוץ 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 Comments :, , , , , , , more...

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

by on מרץ.20, 2009, under כללי

מבוא

עכשיו שיצא לי ללמוד קצת יותר לעומק על לינוקס, הקרנל שלו, ואיך כל הדברים עובדים,
הגיע הזמן לקחת את הנתב שקניתי שהוא גם 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 Comments :, , , , , , more...

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

by on מרץ.11, 2009, under כללי

אז עם הטכנולוגיה של היום, אני כנראה לא אחדש לכם הרבה כשאני אגיד לכם שאפשר לפרוץ סלולר..
ה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 Comments :, , , , , more...

הקדמה לרשתות GSM

by on פבר.26, 2009, under כללי

GSM – Global System for Mobile Communications – הבסיס

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

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

המרכזיה (MSC – Mobile Switching Center)

כמו בכל רשת סטנדרטית, צריך להיות איזשהו רכיב שממתג את השיחות, בגדול, זהו תפקידה העיקרי של המרכזיה, המרכזיה בנוסף למיתוג שיחות, מחזיקה בתוכה כמה רכיבים קטנים עליהם אפרט:
HLR (Home Location Registry) – המרכזיה הביתית, המחזיקה את כל האינפורמציה של המשתמשים "הביתיים" של הרשת, לדוגמא, אם אתה לקוח של אורנג', המרכזיה הביתית של אורנג' מחזיקה את כל האינפורמציה שלך, כשאני אומר כל האינפורמציה אני מתכוון החל מכל הנתונים הטכניים של המכשיר שלך עד למס' כרטיס האשראי  שלך, הכל.
VLR (Visitor Location Registry) – המרכזיה המארחת. נסעת פעם לכיוון אילת וקיבלת הודעה שנכנסת לרשת הירדנית? זה אומר שנרשמת במרכזיה המארחת הירדנית. תפקידה של המרכזיה המארחת היא לתקשר עם הרשת הביתית שלך (דרך סיבים כלשהם), לשמור את האינפורמציה שלך ואת זמני השימוש שלך (בשביל לחייב אותך בהמשך דרך הרשת הביתית שלך..). או בעצם, לשמור את כל המידע הלא קבוע ברשת.
OMC (Operation and Maintaince Center) – בגדול, מרכז תחזוקה ותפעול של הרשת, כל בעיה ברשת נרשמת בלוגים ואף לרוב מטופלת בצורה אוטומטית ע"י הרכיב הזה.
AUC (Authentication Center) – מרכז אימות הנתונים של הרשת, שם מתבצע תהליך האימות של משתמש מול הרשת המארחת שלו. עליו תשמעו עוד בהמשך :>.

הרכיב הבא הוא הבקר, התקשורת בינו לבין המרכזיה מתבצעת דרך פרוטוקול שנקרא A ועובר בשיטת ריבוב E1*.

הבקר (BSC – Base Station Controller)

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

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

התא (BTS – Base Transceiver Station)

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

הרכיב הבא והאחרון בשרשרת הלוקלית של רשת GSM הוא בעצם משתמש הקצה, נקרא לו MS  (Mobile Station) ונפרט עליו מיד, אבל לפני אגיד שהMS מתקשר עם התא בפרוטוקול שנקרא P, ברשת GSM מתוקנת זהו הפרוטוקול היחיד שעובר באוויר.
תדר בפרוטוקול P  מחולק ל8 Time Slots, ההמוספרים מ0 עד 7, שתמיד בTS0 עובר לו תדר הביקון עליו דיברנו בקצרה.

משתמש הקצה MS (Mobile Station)

הגענו עד למשתמש הביתי ברשת הGSM, אותו אפשר לחלק בצורה די ברורה לשני חלקים:
ME – Mobile Equipment –  מכשיר הפלאפון + אנטנות, המכשיר מחזיק עליו זהות חשובה שנקראת IMEI, זהות שאמורה להיות יחידה בעולם (כמובן אם לא היו צורבים). 5 הספרות הראשונות בזהות הזאת אמורות להצביע על מודל המכשיר שבידך. את ה IMEI אפשר להשיג ע"י לחיצת *#06* או לפתוח את המכשיר באיזור הבטריה ולקרוא את המס' הסידורי שלו (הIMEI).
SIM – Subscriber Identification Module – או בעצם הזהות שלנו מול הרשת.. מחזיק את כל הזהויות שלנו בתור משתמשי רשת, IMSI (המספר שאנחנו לא רואים אבל מזהה אותנו כמשתמשים מול הרשת), Ki (הקוד זיהוי הראשי שלנו מול הרשת, או בעצם הדרך של הרשת לאמת את זהותנו).

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

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

אבטחה ברשת GSM

ברכיבי הAUC+HLR של המרכזיה נשמרים טבלאות של צימודים של IMSI (אמרנו שזהו המזהה שלנו מול הרשת או בעצם המס' שלנו) + Ki (המספר אימות שלנו שידוע לאף אחד חוץ מאיתנו ומהרשת) ועוד כל מיני אינפורמציה שאינן רלוונטיות ללמסמך זה כרגע.
תהליך הזיהוי מתבצע בצורה הבאה (זהו פירוט לא טכני וללא הודעות ספציפיות, אלא ההליך מוסבר בעברית כפי שהוא קורה):
1. המשתמש אומר לרשת "הלו? אני צריך להזדהות, אני מוציא שיחה/שולח SMS/מתחבר לאנשהו. יאללה בואי נתחיל את תהליך הזיהוי.."
2. המרכזיה הביתית אומרת למשתמש "אין בעיה סחבק, אנחנו מתחילים", בשלב זה המרכזיה יוצרת מס' רנדומלי באורך 128 ביטים, שולחת אותו למשתמש (כמובן שהמס' גם על הדרך עובר בפרוטוקול P שעובר באוויר כמו שאמרנו).
3. המשתמש מקבל את המספר הרנדומלי, לוקח את זהות ה Ki שלו + את הIMSI שלו + את המספר הרנדומלי שהרשת יצרה ומכניס את כל המשתנים האלה לאלגוריתם אינקריפציה חד כיוונית (סגנון HASH) שנקרא A5. משם מתקבלים שני מספרים, הראשון הוא SRES שנוצר למטרה היחידה של להצפין את הגל האלקטרומגנטי שעובר באוויר + מספר הזיהוי הסופי שלנו. האינפורמציה נשלחת למרכזיה הביתית.
4. המרכזיה בגדול עשתה את אותו התהליך שהמשתמש עשה, עכשיו היא קיבלה את האינפורמציה מהמשתמש ויכולה להשוות, ולראות אם המשתמש הוא באמת מי שהוא טוען שהוא.. אפשר לשים לב למודעות הקטנה לאבטחה, הKi לא עובר באוויר בשום שלב. אבל הנה הקטע ההזוי..
5. בהנחה שהרשת זיהתה את המשתמש היא שולחת לו הודעת Authentication Success וממשיכים בפעולה שהמשתמש רצה לעשות, ואם הזיהוי נכשל היא שולחת Authentication Failed ומנסים עוד פעם..
הזוי לא?! כלומר הרשת מוגנת מפני פריצות, כפי שבטח שמתם לב היא השולטת הגדולה בהליך האימות, סלולר זה לא אינטרנט, זה קצת מסובך פשוט לחסום את מי שמנסה לעשות לך BRUTEFORCE. אבל מה איתי? משתמש הקצה? אני לא צריך איזשהו אימות לגבי זה שאני מדבר עם הרשת שלי באמת? או שאני פשוט אמור לזרום עם מה שמביאים לי..
בגדול ברשתות המבוססות על תקן UMTS (דור שלישי) כל העיניין הזה תוקן, כלומר, גם הרשת צריכה להזדהות מול המשתמש כנותנת השירות. אבל בGSM העיניין לא מתבצע ככה, מה שהופך את כל העיניין לפריץ, יש לכם רעיונות פריצה? תכתבו לנו בתגובות.. אם לא אני פשוט אתן לכם קצת חומר למחשבה במאמר הבא שיעלה לקראת הסופ"ש (או במהלכו)..

  • E1 – שיטת ריבוב לנתוני טלפוניה המעבירה 2.048 מביט לשנייה ומחולק ל32 ערוצי זמן (PCM). כל PCM מחולק ל8 TS. כל TS מסוגל להעביר 8 קילובי\ט לשנייה. PCM0 וPCM16 הם ערוצי סינכרון ואיתותים בהתאמה ואינם משמשים להעברת נתוני שיחה.
    • ראוי לציין שלא אני כתבתי את המאמר, אלא אדם חביב שאינו מעוניין בפרסום שמו 🙂 תודה
8 Comments :, , , , , more...

"האח הגדול" ? מה עם האחים הקטנים ?!

by on ינו.10, 2009, under כללי

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

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

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

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

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

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

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

triangulation

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

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

16 Comments :, , , , more...

מחפש משהו?

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