אינטרנט זה אינטרנט, וועד בית זה ועד בית

סקריפט גריזמאנקי להסתרת שאלונים מפייסבוק

נמאס לכם משאלונים טפשיים כמו "איזה דמות של מארוול אתה" או "איזה עיר אתה"? התקינו את זה.

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

איך לגלות את סיסמת המשתמש בשירות הדואר של וואלה!

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

איך זה עובד? קלי קלות:

  1. מקליקים על "אפשרויות", מתחת ללוגו של "וואלה! דואר"

  2. ממשיכים ל "עריכת פרטי חשבון משתמש"

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

  4. בעצם, אם נסתכל על קוד ה-HTML של הדף (view page source) ונחפש בו את המילה password, נגלה שהסיסמה מופיעה שם כחול על גבי לבן (בפיירפוקס). באמת אופס.

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

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

בואו נסתכל רגע על ה-URL:

http://friends.walla.co.il/?tsscript=login&theme=&ReturnURL=http://friends.walla.co.il/?w=/@reg&edit=1

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

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

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

כדי להוכיח את זה, נשתמש בתוסף לפיירפוקס בשם Modify Headers*. תוסף זה מאפשר לשחק עם המידע שהדפדפן שולח אל השרת (במקרה הזה, השרת של וואלה!), ולגרום לו להתנהג בצורה שונה מברירת המחדל. נבקש ממנו לשנות את שדה ה -Referer לכתובת של דף ההתחברות, כך:

לאחר מכן נגלוש אל דף פרטי עריכת החשבון (http://friends.walla.co.il/?w=/@reg&edit=1) ונקבל אותו ללא הצורך בהזנת הסיסמה. זה אומר שאם לפני ה"תיקון" היה לוקח 10 שניות לגלות את הסיסמה, עכשיו זה לוקח דקה.

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

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

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

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

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

יוצרי הקמפיינים הישראלים ביוטיוב - תחשבו על פורמט מקורי חדש

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

לפני שבוע עלה זה:

לפני כן זה:

וקודם לכן זה:

שבכלל מחקה את זה:

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

פירצת האבטחה בשירות הדואר של וואלה! נחשפת

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

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

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

afrom=new Array();
afrom.email="johndoe@example.com";
afrom.name="John Doe";

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

אם, לדוגמה, שם השולח היה John " + "123″ + " Doe, התוצאה בקוד הג'אווהסקריפט היתה נראית כך:

afrom.name="John " + "123" + " Doe";

ושם השולח היה מוצג בחלון התצוגה כ "John 123 Doe".

ואפשר גם משהו כזה:

afrom.name="John " + function(){alert("Boo!");}() + " Doe";

שיגרום להודעה "Boo!" לקפוץ בעת קריאת הדואר.

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

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

איך וואלה! היו צריכים להגן על משתמשיהם? פשוט להחליף את התו " בסימן ;quot& שמייצג מרכאות, מה שהם כבר עשו עם נושא ההודעה.

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

איך לסנכרן סקריפטי גריזמאנקי בין מחשבים שונים בעזרת Dropbox

Read the english version here

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

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

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

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

בחלונות XP

הורידו והתקינו את התוכנה לפי ההוראות. אם זה המחשב הראשון עליו אתם מתקינים, תתבקשו תחילה להירשם לשירות דרך אשף ההתקנה. לאחר סיום ההתקנה תיווצר לכם תיקייה בשם My Dropbox תחת My Documents. זוהי תיקיית הסנכרון שלכם.
העבירו את תיקיית הסקריפטים של גריזמאנקי (בד"כ C:\Documents and Settings\<User>\Application Data\Mozilla\Firefox\Profiles\<Profile>\gm_scripts) לתיקיית הסנכרון. Dropbox תזהה מיד את הקבצים החדשים ותעלה אותם לחשבון שלכם בשרת.
לאחר מכן יש לגרום לגריזמאנקי לקרוא את הסקריפטים מהתיקייה החדשה. הדרך המסובכת היא לשנות בקוד שלו את שם התיקייה, אבל זה די טפשי. במקום זה עדיף לקשר בין התיקייה הישנה לחדשה. לשם כך תצטרכו להוריד את Junction ולחלץ את הקובץ junction.exe מהזיפ למקום ידוע כלשהו (c:windows הוא מקום טוב כי הוא תמיד נמצא ב-path).
לאחר מכן פיתחו את שורת הפקודה (Run > Start > cmd) והזינו את הפקודה הבאה:

junction C:\Documents and Settings\<User>\Application Data\Mozilla\Firefox\Profiles\<Profile>\gm_scripts C:\Documents and Settings\<User>\My Documents\My Dropbox\gm_scripts

פקודה זו תקשר בין התיקייה gm_scripts שבפרופיל הפיירפוקס שלכם לתיקייה בעלת אותו השם ב-Dropbox שלכם. שימו לב שלא מדובר ביצירת העתק, אלה בשתי תיקיות שבעצם מכילות את אותם הקבצים בדיוק (עוד על הקונספט).
כמו כן, שימו לב שציינתם את הנתיבים המדוייקים של פרופיל הפיירפוקס ותיקיית ה-Dropbox שלכם.

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

בלינוקס

התקינו את התוכנה לפי ההוראות. מכיוון שאני משתמש ב-KDE לא התקנתי מהחבילות שבאתר אלא עקבתי אחר ההוראות האלה (תודה יהונתן), שנראות לי ברורות מספיק, אז לא אחזור עליהן כאן.

בסיום ההתקנה הריצו את שתי הפקודות הבאות בשורת הפקודה:

$ mv ~/.mozilla/firefox/profiles/<Profile>/gm_scripts/ ~Dropbox
$ ln -s ~/Dropbox/gm_scripts/ ~/.mozilla/firefox/profiles/<Profile>/gm_scripts/

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

לסיכום

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

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

FireStats icon Powered by FireStats