עוד אחד נפל חלל – פריצה לחשבונות ב-One
הזומבקי אומר לי שנראה לו שהרשת החברתית באתר הספורט one.co.il לא מאובטחת. היות וזה אחד מתוך עשרים האתרים הנצפים ביותר בישראל (וגם האתר הישראלי שהכי לא מתפקד בפיירפוקס) – החלטנו להסתכל מה באמת העניין איתם.
יצרנו חשבונות משלנו ועשינו עליהם בדיקה קצרה (קלינגר: "אולי יש כאן עבירה על על תנאי השימוש באתר") ובסיום הבדיקה התרענו לפני החברים מ-DEX כי ניתן להכנס (לפרוץ) לכל חשבון משתמש ברשת החברתית everyone ששייכת לאתר One וכי ניתן ללא מאמץ גדול עבור כל משתמש לראות את ההודעות שלו, לראות את האימייל שלו ולראות את הסיסמה שלו.
אני לא צריך להגיד לכם מה אפשר לעשות עם אימייל וסיסמה של כמה אלפי משתמשים. (למי שמתייאש באמצע הפוסט, יש סרטון וידאו למטה בהמשך!)
החברים מ-DEX אמרו ש"תודה שסיפרתם לנו אבל בעיית האבטחה קשורה למערכת המשתמשים של האתר ONE. יש להם מערכת משלהם שמזינה את כל השרותים שלהם, יש להם אתר לוידאו (קרייזי וואן) וכל מיני שרותים אחרים אנחנו רק עוד שרות שמתממשק אליהם". הם אמרו שיודיעו ללקוח על הפרצה ושוב תודה.
אה.. לכל השירותים? לא רק לרשת החברתית? בסדר וסבבה, אנחנו בנתיים לא כותבים על זה. רק שיודיעו לנו שזה מטופל, ביקשנו.
חיכינו אבל הפרצה עדיין היתה שם וכלום לא השתנה (אגב, במקרה אחר ששם התקלה היתה פחות חמורה ודווקא כן במערכת של דקס, תוך שעתיים באמצע הלילה היא תוקנה על ידם).
הימים חולפים ומתקצרים, הסתיו חלף עבר וגם שבועיים עברו – ביקשנו לדעת האם מטפלים בנושא ולא קיבלנו תגובה.
אחרי מספיק זמן החלטנו שנעשה את הדברים כמו שצריך ושלחנו אימייל ישירות ל-One כדי לספר להם שגאד-דמט, כל המשתמשים שלהם חשופים, סיסמאות, כינויים, אימיילים וזה מה זה לא יפה. לא קיבלנו תשובה.
בצר לנו התחלנו לכתוב את הפוסט הזה אבל תוך כדי כתיבתו, כנראה אתמול, הנושא טופל (הידד!).
בעצם מה שרצינו לכתוב עליו היא פרצת SQL injection, הזרקת SQL, ולהסביר בקצרה ובהפשטה עם תמונות ותנועות ידיים גדולות כדי שגם אנשים רגילים יבינו. (אני ממליץ בכלל, למי שלא מכיר על הבלוג של גיא מזרחי). המטרה היא לא ללמד איך לפרוץ אלא, להיות מודעים לבעיות כאלו. שזה לא יקרה.
איך זה עובד, SQL Injection למבוגרים:
בעמוד הכניסה יש להכניס פרטים לתיבות טקסט. בלחיצה על כפתור "אישור" יוזנו הפרטים למשתנים שהוגדרו במערכת.

הפרטים מוזנים לתוך המשתנים
משתנים אלו ישובצו בתוך שאילתה שפונה אל בסיס הנתונים, כך:
אם [user_email] ו-[user_password] מתאימים למשתמש מסוים, הכנס אותי לחשבון שלו.
או לפי מה שנוצר:
אם יש משתמש שהאימייל שלו הוא "erez@mail.com" והסיסמה היא "1234" אז הכנס אותי לחשבון שלו.
בהזרקת SQL במקום לרשום נתון רגיל לתיבה, ממשיכים את השאילתה כדי ליצור משפט כזה:
אם (יש משתמש שהאימייל שלו הוא "לא משנה מה" וגם הסיסמה שלו היא "בלהבלהבלה") או שפשוט הכינוי שלו הוא "berez", תכניס אותי לחשבון שלו.

הכנסת תנאי שיתווסף לשאילתה
כלומר, נוסף תנאי לשאילתה אשר ביטל את התנאים הקודמים.
המערכת מבינה שעליה לקיים את אחד מחלקי המשפט או את החלק הראשון: למצוא את המשתמש עם הפרטים שהוכנסו
או לקיים את חצי המשפט השני: להכנס לחשבון של המשתמש שהכינוי שלו הוא berez.
מה שנדרש הוא לדעת SQL כדי להמשיך המשפט כך שיצור שאילתת SQL נכונה וכן נדרש לדעת את שם המשתנה שהוגדר במערכת (יש דרכים לעשות זאת, אבל במקרים רבים בניסיון השלישי ניתן להבין את ההיגיון של המתכנת).
וזה לא הכל! בגלל שצילצלתם עכשיו אתם גם זוכים בסרטון קטן שמדגים. הכנסו לגרוב ה-SQL:
נחזור למקרה של One, שם בוצעה עברה נוספת וחמורה. בכניסה (פריצה) לחשבון של משתמש ניתן להכנס לדף הפרטים האישיים שלו. מה יש שם? תיבות שמציגות את פרטיו האישיים: כינוי, אימייל, שם וסיסמה אותם ניתן לעדכן. אמנם הסיסמה מופיעה עם כוכביות על גבי המסך אבל בהצגת הקוד של הדף (View Source) ניתן לראות את סיסמת המשתמש.
על כך הזומבקי אומר שזה פשוט עצלנות של המתכנת (להחזיר את הסיסמה לברוזר) ולא צריכים לעשות דברים כאלו, ואני חושב שיש הרבה דברים שלא צריכים לעשות ובכל זאת אנשים כן עושים אותם, כמו למשל לרדוף ולתבוע את שלמה מן או את הבלוגרים שמזהים פרצה ובסך הכל מנסים למנוע פגיעה בגולשים. אבל לך תדע.
לא להאמין כמה זה פשוט
מצמרר
היה גם ראוי להזכיר שבכלל לא צריך לשמור את הסיסמה במסד הנתונים, ואז כבר נחסכות לך צרות. וגם סביר להניח שההתקפה הזו (ספציפית) לא היתה עובדת, בגלל שמה שיש בשדה הסיסמה עובר גיבוב (hash).
רו"ש, אתה צודק בהחלט, וזה גם נאמר להם. אז עכשיו במקום להחזיר את הסיסמה הם מחזירים כוכביות לדפדפן… עם זאת, גם בלי חשיפת הסיסמה אפשר היה להכנס לכל חשבון שרוצים באמצעות שם המשתמש (או שדה אחר, אם יודעים מה השם שלו בבסיס הנתונים). מה שהיה נמנע זאת האפשרות להשיג את הסיסמה של המשתמש, שיחד עם האימייל אכן מהווה את הנכס העיקרי שאפשר להשיג בפריצה.
מרשים. אני בכל פעם נדהם מחדש מהדברים האלו, שכבר הייתי בטוח שעברו מהעולם. איך אנשים מעלים מערכות ללא QA גם באזורים הכי רגישים שלהם. האם השוק פרוץ? האם המימונים לא מקיפים? האם קלות הקמת המערכת, בעידן של מערכות CMS בקוד פתוח הורידה את החסם מתחת לגובה של קופסת הממתקים?
פעם קראתי בגינטרנט על מישהו שהכיר מישהו שפרץ למערכת הציונים הראשית של כל הטכניון דרך SHELL פתוח. שמעתי שעכשיו הוא עובד בגוגל. בטח היו לו ציונים טובים
איך יודעים אם פרצו לי לחשבון של אתר היכרויות?
לחצתי בכדי לקרוא את אחת ההודעות שנשלחו לי ובמקום הודעה הופיע לי בחלון חדש רק המילים
sql-injection
בנוסף לכך זה קרא רק בהודעות ממשתמש ספציפי, אחרי שקראתי הרבה הודעות ממשתמשים אחרים
האם נפרץ לי החשבון? והאם זה אומר שהוא זה שפרץ?