DLL Hijacking – פרק שני. לא כל-כך חדש?

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

בתור בלוג אבטחת מידע המשתדל לפנות לקהל רב ככל האפשר ובמיוחד לאלו שמטרתם ללמוד, אני משתדל שהפוסטים שיוכנסו לבלוג יהיו בהירים כמה שאפשר – אך גם מדויקים באותה מידה. המידע שאני מביא כאן לרוב עובר מחקר מקיף שמתפרש על פני אתרים שונים ואנשים שונים שבודקים את נכונות הפרטים בהם אני לא בטוח, עיתונים מן המעלה הראשונה ואף לעיתים מקורות ראשונים (במידה ורלוונטי). כאחד שכזה, אני מרגיש צורך להתנצל על הפוסט האחרון שפורסם תחת הכותרת המפוצצת: "DLL Hijacking – הפירצה החדשה ב-Windows (חלונות) שמצא HD Moore". בסוף הפוסט אמנם הוצגה סברה לפיה הפירצה איננה כה חדשה, אך כשדברתי עם מספר חוקרי אבטחה ישראליים – העניין התבהר כחמור אף יותר.

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

הפירצה איננה חדשה.
היא ידועה לפחות משנת 2000: http://www.securityfocus.com/bid/1699/info
ודווחה רשמית למיקרוסופט בשנת 2006: http://aviv.raffon.net/2006/12/14/IE7DLLloadHijackingCodeExecutionExploitPoC.aspx

לפני קצת יותר משנה, מיקרוסופט שחררה עדכון למערכת ההפעלה שאמור היה לעזור בפתרון הבעיה (כאמור, אינו פותר אותה לחלוטין): http://www.microsoft.com/technet/security/Bulletin/MS09-015.mspx

אתמול מיקרוסופט פרסמה מאמר המסביר (טכנית) את הבעיה ודרכים כיצד ניתן לפתור אותה ללא עדכון: http://www.microsoft.com/technet/security/advisory/2269637.mspx

והוא אכן צודק. בשיחה שלי שנערכה עם cP כשעתיים קודם לכן, הוא אמר לי לגגל DLL Search Order Hijacking – הופתעתי מהתוצאות. מילות המפתח שאכן מתארות במדויק את אופי המתקפה, מצאו תוצאות של קוד המשתמש לניצול הפירצה ("אקספלוייט") עוד מ-2006 שנכתב על ידי… אביב ראף – איש אבטחת מידע ישראלי, שלא במקרה היה זה שהגיב בבלוג. למרות שמאות (אם לא אלפי) עיתונים נכבדים באנגלית מן המעלה הראשונה, מסקרים את "הפירצה החדשה שמצא HD Moore" [וחיפוש ממש קצר מניב מעל 120 תוצאות מקוונות שנרשמו ב24 שעות האחרונות, למרות שחלפה הסערה]. העיתונים המקוונים המתקדמים יחסית מדווחים על כך שהבאג נמצא לפני 6 חודשים, אך כמעט אף לא אחד בעולם דיווח על כך שהפירצה קיימת כבר 10 שנים.

היחיד שאני מצאתי למען האמת, הוא HD Moore, שלא מכחיש את זה ואפילו דואג לפרט. בבלוג החברה הוא כתב:

As Thierry notes, a variation of this bug was originally published in 2000 by Georgi Guninski.
("כפי שתיירי הזכיר, גירסה אחרת של הבאג מקורה בפרסום בשנת 2000 שנעשה על ידי גאורגי גונינסקי.")

אז מה בכל זאת ההבדל? HD Moore מציין רק אחד שכזה וטוען שהוא "הגדול ביותר" – ההרחבה לפירצה ניתנת לניצול גם כשמקור ה-DLL שהתוכנה מנסה לטעון איננו בתיקיית המערכת (ספריות DLL השייכות לתוכנה ספציפית):

The biggest difference is that the new issues mostly apply to applications where the hijacked DLL does not exist in the system directory (application-specific libraries).

פתית מידע נוסף: למרות הצהרותיה, קרסה מיקרוסופט תחת פרסומי התקשורת השליליים ופירסמה תיקון לחור האבטחה. במקביל, החל גל האקספלויטים לעניין להציף את הרשת, ובין התוכנות הפגיעות – Powerpoint 2010 וכן חבילת Live (שניהן תוצרת מייקרוסופט), כמו גם uTorrent (קליינט ביטורנט) ואפילו Wireshark (תוכנה שמשמשת הרבה חוקרי אבטחת מידע ואפילו מפתחי אתרים לחקירת התעבורה העוברת ברשת).

פתית על הפתית: רוצה לציין הרבה הרבה הרבה [והמוני המונים] של תודה ל-TheLeader, שנתן אזכור לכתבה הקודמת בתוך אקספלויט DLL-Hijacking שהוא פירסם בexploit-db עבור uTorrent. נציין שיש סבירות גבוהה מאוד שהוא זה שהזין את הדוגמאות לרוב המדיות התקשורתיות בחו"ל אודות האקספלויטים (כולל האתר העצום The Register – כבוד!) – הוא הראשון שראיתי שכתב אקספלויטים עבור uTorrent, Wireshark ו-Powerpoint. סחתיין עליך חבר (:

מקורות להרחבה זו: הפוסט בבלוג החברה, תגובות לפוסט הקודם, האקספלויט שפרסם אביב (2006), עלון המידע של SecurityFocus משנת 2000, כתבה שמזכירה את תגלית חוקר האבטחה הישראלי אביב ראף ב-2006, כתבה על הכלי לחסימת הפירצה שנכתב על ידי מיקרוסופט.
התודות ניתנות ל: חדר ה-IRC [שרת irc.nix.co.il, חדר security#] שלנו (ו-cP שנכנס לעדכן), אביב ראף (בלוג מצוין), TheLeader (על הפירסום, בדיקת המאמר הקודם והתרומה לקהילה הישראלית).

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

crossdomain.xml - הXSS חוזר - איך יגנבו לכם משתמשים בקלות.

שלום לכם, ותודה שחזרתם לקרוא כתבה נוספת בעניין ה-XSS. נעים מאוד לראות את כל התגובות שלכם לכתבה הקודמת, שהתפרסמה, אגב, גם בNewsgeek (וגם שם זכתה לתגובות אוהדות). רציתי להגיד לכולם תודה רבה, ושהתגובות שלכם הן מה שמשלהב אותי להמשיך להמשיך לכתוב פוסטים ב4 לפנות בוקר ;). היום נדבר על מקרה פרטי מאוד מעניין, שכמעט לא מוכר ולא מדובר. בהרבה מדריכים "מקיפים" לאבטחת מידע לא מצאתי מילה בנושא – וכשאני אומר "לא מצאתי מילה", אני מתכוון ל"חיפשתי בגירסאות האלקטרוניות של 'Web Application Hacker's Handbook' ו'XSS Attacks' באופן אלקטרוני, ולא מצאתי שום הזכרה לעניין הזה". האם חוסר המודעות העצומה גורמת לרשלנותן של כל-כך הרבה חברות ענק בנושא, הן של חברות ישראליות והן חברות חוץ? אינני יודע לענות לכם על כך בוודאות, אבל אני חושש שהתשובה היא כן. יש להבין שבהעדר רכישת אמצעים מקצועיים לאבטחת הערוצים התקשורתיים, כפי שכבר הזכרתי בעבר, רק הפרצות הנפוצות שמוכרות לבוני האתרים יטופלו.

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

כולנו זוכרים (אוי לקוראים הותיקים אם לא) את ההגדרה שהצגתי ל"שרת", החוטאת בדיוק למען קיצור אורכה – מחשב מרוחק המחובר לרשת האינטרנט, ומשמש אותנו למטרות שונות (פירוט נוסף כמובן מופיע בפוסט על הIRC). כשאנחנו אומרים "שרת הקבצים", אנחנו מתכוונים לשרת שמוצא עבורינו קובץ מסוים על המחשב שבו מאוחסן האתר, מאפשר ומבצע את שליחתו למשתמש. זאת אומרת: אם אני, ים, נכנס ל http://www.mesicka.com/index.php, שרת הקבצים ידע לשלוף עבורי את הקובץ index.php. (הוא אפילו יעבד את הקודים של הPHP שבו עבורי – ראו פוסט קודם).

לעניין – crossdomain.xml

ישנן מוסכמות על שמות של קבצים רבים שלהם יש חשיבות מסוימת, ולמרות שמשתמש רגיל יכול לצפות בחלקם – הם אינם חלק מתוכן האתר באופן ישיר. אתן דוגמה: בחלק מהאתרים ישנו קובץ בשם robots.txt (גם לנו יש). הקובץ, שכבר הוזכר באחד הפוסטים הקודמים שלי, בבירור לא נועד כדי להיות חלק מן התוכן באתר באופן ישיר, ומטרתו האמיתית היא להראות לרובוטים של מנועי החיפוש (זחלנים) מה לעשות (לקריאה נוספת). באופן דומה, יש את הקובץ htpasswd (קיים בשרתים מסוימים עליהם מותקן שרת דפי-אינטרנט בשם "Apache") שמטרתו היא להגביל כניסה לדף מסוים בשם משתמש וסיסמה – והצגת התוכן שלו, כמובן, איננה נגישה למשתמשים, שכן הוא מאחסן את שם המשתמש והסיסמה שיאפשרו גישה לדף. יש עוד מספר קבצים מיוחדים כאלו (שיעורי בית: חפשו על htaccess ועל sitemap.xml), חלקם אחראיים על תפקוד השרת עצמו (php.ini לדוגמה) וחלקם מבקשים משרתים אחרים דברים (robots.txt).

ובכן, למרות שהסוג השני יותר נדיר, הנה הצצה נדירה לקובץ שאת שמו מעטים מכירים: crossdomain.xml. מסתבר שהוא קיים בהמון אתרים, ולרוע המזל – לפעמים הוא יכול להיות ממש לא נחמד. הוא אינו בגדר וירוס, אבל אני מניח שכל קוראיי יסכימו שכמו שלא נמליץ לטבח להתחיל לתכנן ולבנות לבד בניין שדורש יעוץ אדריכלי, כך עדיף יהיה שלא כל בעל אתר יתעסק בקבצים שאיננו מבין בהם. חיזרו למאמרי הקודם בנושא הXSS, וקיראו שוב את ההגדרה המפורטת של "עוגיות" – פתיתי מידע שנשלחים מהשרת ונשמרים על המחשב שלנו, ובסופו של דבר מכילים פעמים רבות את פרטי ההתחברות. משנזכרתם, אוכל להגיד לכם למה אותו קובץ (שעד עכשיו הצגתי כקובץ אימה, שלא בצדק) משמש. עיקר המטרה של crossdomain.xml, הוא להגדיר לאילו אתרים יש גישה לעוגיות של האתר. במילים אחרות: אני, הבעלים של האתר www.mesicka.com, יכול להכניס קובץ חדש לאתר: www.mesicka.com/crossdomain.xml. בקובץ זה, אני יכול לכתוב שמתחשק לי לתת לwww.walla.co.il גישה לכל העוגיות של האתר שלי.

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

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

ניצול הcrossdomain.xml

נכנס לעובי הקורה ונסתכל באותו קובץ של טוויטר. נתמקד בשורות הכוללות allow-access-from domain (מכיוון שהן מרכז המאמר), ונוכל לראות שהוא מקנה גישה לארבעה אתרים שמהווים חלקים מ-Twitter עצמו. נבדוק אתר אחר – YouTube (לחצו על-מנת להגיע לקובץ). הופה, גילינו משהו מעניין: יוטיוב מעניק גישה לעוגיות שלנו גם עבור האתר s.ytimg.com. אלוהים יודע מה זה.. מוזר. (*תודה לw3rp שהגיב לפוסט והודיע לנו שמדובר בשרת המאחסן קבצים, בבעלות YouTube.) עם הרגשת חוסר הבטיחות ואולי החשש הזו, נפנה אל אתר רדיו מעניין – Hideout. לאנשים לא טכנולוגיים מדי קצת קשה להבין מה הולך כאן, ולכן אעזור לכם: סימן הכוכבית במחשבים הוא אחד מקבוצת סימנים חשובה אשר קרויה Wildcards, שהם בעצם תווים שמסמנים תכונה מיוחדת. משמעות הכוכבית היא "הכל", ולכן במקרה שלנו Hideout פשוט מאפשר לכל האתרים לקחת את העוגיות שלו, כלומר – של המשתמשים שלו. מפתיע ומדהים? חסר אחריות לגמרי? מעצבן ומקומם? כל התשובות נכונות. למי שעדיין לא נפל האסימון עד כאן, הנה עזרה קטנה: אני יכול פשוט להקים אתר משלי, ולדעת שכשמשתמש יתחבר לאתר עם crossdomain לא מאובטח, ולאחר מכן לאתר שלי – אוכל פשוט לגנוב לו את העוגיות ששייכות לאותו אתר. XSS ממעלה שנייה, אם תרצו.

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

אבל יש גם אנשים שמנסים להיות אחראיים, ולא מציינים את אותה כוכבית ארורה שעלולה לגרום לכל-כך הרבה צרות. גם אם יש עשרות אתרים שאיתם הם רוצים לשתף את העוגיות, הם רושמים את כל כתובות האתרים. אז מה רע, אתם שואלים? הבעיה עם העמסת כתובות אתרים על קובץ היא מובנת, והפעם לאו-דווקא מזווית של אבטחת מידע אלא מזווית אנושית: כשקונים דומיין (כתובת אתר), בדרך-כלל רוכשים אותו לתקופה של שנה עד שנתיים. לאחר מכן הוא מתפוגג (לא מיד, כי אם לאחר "תקופת חסד", תודה לגולש שוהם שביקש להבהיר), ואז כל אחד אחר יכול לרשום אותו שוב. זאת אומרת, שאם נעמיס, נניח, 1,000 כתובות על crossdomain.xml, הסיכוי שדומיין יפוג למחרת הוא כמעט ודאי. למען האמת, בהנחה שכל דומיין נרשם לשנה ולא לשנתיים, מספיקים 22 דומיינים על מנת שתהיה סבירות גבוהה מ-50% שאחד מהם יפוג ממש למחרת! (קראו על פרדוקס יום ההולדת על מנת להבין מדוע).

בואו נניח שיש לנו חברה בשם "חמציצים בע"מ". חמציצים בע"מ היקרים בדיוק עשו שיתוף פעולה עם "תותים עזאם", שמהווה חברה מאוד ותיקה לתותים בשוק. למעשה, "תותים עזאם" רכשו דומיין לשנה בדיוק לפני 362 ימים (עוד 3 ימים והדומיין חוגג יומולדת ויש צורך לחדש אותו). במסגרת השותפות הוחלט שכל אתר ישים קובץ crossdomain.xml, שיאפשר גישה לעוגיות האתר השני. עד כאן הכל דבש. יומיים לאחר מכן, בצער רב, מכריזים "תותים עזאם" על פשיטת רגל. תוך יום נגמרה תקופת ההשכרה של הדומיין, והוא פנוי למשכירים חדשים. אם "חמציצים בע"מ" לא יורידו את האתר של "תותים עזאם" מקובץ הcrossdomain.xml, יוכל גורם עוין ("שזיפים בלעם") להשתלט על הדומיין של תותים עזאם ולהשתיל שם Cookie Stealer. בכך, כל פעם שמישהו יתחבר ל"חמציצים בע"מ" ומיד אחרי זה יחפש בגוגל "תותים עזאם" ויגיע לאתר, שעכשיו בכלל בבעלות "שזיפים בלעם", יסגיר את פרטי ההתחברות שלו לאתר של "חמציצים בע"מ". מסוכן. (התבלבלתם? קראו שוב).

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

עד הפעם הבאה,
- ים מסיקה

ואגב, בונוס על שבירת שיא הכניסות לבלוג – Ninja Catty!

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

פרצת האבטחה XSS - סיכון גבוה, עירנות נמוכה.

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

רוב הציבור נוהג להסתכל על אבטחת מידע כדבר מאוד מונוטוני – כשאדם רגיל שומע שיש באתר "פירצת אבטחה" הוא מתחבא מתחת לשולחן, מנתק את המודם מהמקום וממלמל מתחת לשפם "שמע ישראל" בתקווה שההאקר המרושע לא ידפוק את המחשב. במציאות העניינים מתנהלים די אחרת: גם באתרים מקצועיים של אבטחת מידע, לרוב מדורגת הפירצה במדד מסויים (ראיתי כאלו שמדרגים אפילו בכמה מדדים נפרדים, מ1-3, וציון סופי של 1 עד 10 – OSVDB). ישנם פרמטרים שונים שמשפיעים על כמה הפירצה חמורה, והרבה פעמים ימצאו פירצות שיהיה די קשה לנצל אם שאר האתר מוגן כמו שצריך (דוגמה טובה לכך תהיה פירצה שמסוגלת לפלוט את שם המשתמש של מנהל האתר, אך הפאנל לניהול יהיה מוחבא היטב, ובו תהיה הגנת CAPTCHA והגנה מהתקפות כוח-גס).

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

ראשי התיבות של XSS הן Cross Site Scripting. אז למה לא CSS, ישאלו החכמולוגים שבינכם, ויקבלו את התשובה שישנו כבר קיצור נפוץ מאוד בשם CSS – כל כך נפוץ, כנראה, שלא ראו לנכון לבנות עליו ביטוי נוסף. לכל אותם חברה שאינם בעלי רקע גדול מדי באתרי אינטרנט ובאבטחת מידע, אוכל להגיד שחלק נרחב מהפרצות החבויות באתרי אינטרנט, הן בעצם פגיעוּת עקב חוסר בדיקה של קלט מהמשתמש. אדם שיכול להיות איש אבטחת מידע טוב, הוא זה שיגלוש לאתר הבנק, וכשישאלו אותו "כמה אתה רוצה להפקיד לחשבון של מר. קוסטנזה" הוא ירשום בשדה הקלט 5000$- (שימו לב לסימן המינוס). בעצם, נעשה פה ניסיון להערמה על מערכת המחשוב של האתר – האם במקום הפקדה של 5,000$ לחשבון, אוכל למשוך 5,000$ מחשבונו של אותו מר קוסטנזה? כאן בעצם בא לידי ביטוי תפקידו של מתכנת מערכות הבנק למנוע מצבים שכאלו, או באופן סציפי יותר – תפקידו לזכור לרשום את התנאי שעבור כל סכום להעברה הקטן מאפס תוצג למשתמש שגיאה, והפעולה לא תבוצע.

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

כל אתר בנוי מקוד מסוים, שניתן לחלק לשני "סוגים":

  1. חלק שמעובד על המחשב שלנו, של המשתמשים, ולכן הוא נשלח אל המחשב שלנו ויכול להקרא במלואו על ידינו (תוכלו לראות את הקוד הזה בכל אתר על ידי קליק ימני -> הצג מקור). השפות שמשתמשות בקוד שכזה אינן שפות תכנות, והנפוצות ביותר הן HTML וJavaScript.
  2. חלק שמעובד על השרת, והדבר היחידי שנשלח אלינו, המשתמשים, הוא התוצאה ("הפלט"). השפות שמשתמשות בקוד שכזה הן לרוב שפות תכנות, וניתן לראות בתחום זה שפות רבות כמו PHP, ASP ודומות רבות להן.

אם נפרק את התקפת הXSS למרכיביה, נקבל מעין תרשים זרימה:

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

בהתקפה זו לא נוכל שלא להשתמש במונח "עוגיות", שמהוות אפשרות מעניינת ביותר לניצול פירצת האבטחה – העוגיות (Cookies, או "קוקית" בעברית.. בעע), הן מעין נתונים שאתרים שונים משתילים לנו במחשב. בניגוד לסברה הנפוצה שמדובר בוירוסים שמטרתם לעקוב אחרינו, העוגיות הן בעצם כלי חשוב שעוזר לנו באופן משמעותי להתנהלות היום-יומית באינטרנט: נניח, Gmail.com יכולים להכניס לנו עוגיה עם שם המשתמש והסיסמה שלנו לחשבון המייל, אם לחצנו על "שמור סיסמה". מטרת העוגיה היא, כמובן, להכניס אותנו באופן אוטומטי בפעם הבאה שנכנס לאתר. הפרטים בעוגיה לרוב מוצפנים, על מנת שלא יוכלו להקרא על ידי גורמים עויינים שמאזינים לנו. שימו לב שעוגיה היא כמו אישתו של אתר: אף אתר אחר לא יכול "להתחיל איתה" (לקרוא את התוכן שלה) חוץ מאותו אתר שהגדיר שהיא בשליטתו. זאת אומרת: אם Gmail יצרו עוגיה שבה פרטי החשבון שלי, Hotmail לא יוכלו לקרוא מה יש בעוגיה – כי אין להם גישה לכך.

נחלק את התקפת הXSS לשני חלקים (למרות שיש חלק שלישי, עליו לא נדון במאמר):

  1. פרצה קבועה: השתלת קוד משלנו בתוך האתר (נניח, בפורומים או במערכות אתרים שמרשות לנו לנהל את הHTML שלנו).
  2. פרצה "זמנית": באתרים שמציעים עמודים דינאמיים בעלי קלט שמתקבל מהמשתמש – נפרט מיד. הסוג הנפוץ יותר.

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

  1. נכין דף מראש על השרת שלנו, שיחכה לקבל כפרמטר תוכן של עוגיה. נקרא לו OogiFletzet.php, ומטרתו: ברגע שהוא מקבל עוגיה, הוא מאחסן אותה על Ate.txt
  2. בדף הפגיע שמצאנו באתר ההוא (זה שמאפשר להכניס בו קודים), נרשום סקריפט בJavaScript שישלוף את התוכן של העוגיות של מי שצופה בדף.
  3. הסקריפט של הJavaScript ישלח לOogiFletzet.php את העוגיות שהוא שלף.
  4. נשאר רק לחכות שמשתמש (קורבן) מסכן יכנס לדף שבו שתלנו את הסקריפט בשלב 2, ופרטי העוגיות שלו ישלחו אלינו.
  5. לרוב, פרטי העוגיות מוצפנות. לכן, נוכל להזריק לעצמינו את העוגיות (לעזאזל, זה נשמע ממש רע) שנצברו בAte.txt ולהשתמש בהן כיאילו היו שלנו.

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

ניתן תרשים ויזואלי שאולי ימחיש קצת מה הולך כאן:

הליך הXSS

אבל אם להגיד את האמת, הסוג הזה של XSS נפוץ הרבה פחות. לכתוב הודעה באיזשהו פורום, לחכות שאנשים יכנסו ולקבל הרים של עוגיות זה חלומו הרטוב של כל האקר – אבל זה די נדיר. הפרצה הזמנית היא נפוצה הרבה יותר, ולא אתפלא אם במחקר ההוא שנערך ב2007, כ50% מתוך אותם 59.26% היו פרצות "זמניות". קצת קשה להסביר את שונותה של הפרצה הזמנית מזו של חברתה הקבועה, אבל נוכל לנסות ולנסח כלל שכזה: פרצה קבועה מוטמעת בתוך תוכן האתר, בעוד שפרצה זמנית נוצרת כל פעם מחדש. הטכניקה של גניבת העוגיות היא אותה טכניקה עם שינוי אחד קטן: אנחנו הופכים להיות יותר אקטיביים. אנחנו לא ממתינים שאנשים יכנסו לדף שבו השתלנו את פרצת האבטחה, אלא אנחנו פועלים ושולחים לאנשים פרצת אבטחה שיצרנו. כיצד זה עובד?

  1. לרוב, את פרצת הXSS הזמנית אנחנו נראה בכתובות של אתרים, כאשר כתובתם דינאמית.
  2. כתובת דינאמית תהיה, נניח, http://mysite.com/index.php&search=hello – בכתובת זו אנו עושים חיפוש אחר המחרוזת "hello", והיא משתמשת בשיטה בשם GET לשליחת הנתונים שלה, לפיה הפרמטרים מועברים דרך הכתובת (לדוגמה: search הוא פרמטר, שמציין לעמוד index.php באיזו מחרוזת להשתמש לצורך החיפוש. במקרה זה, המשתמש החליט לחפש hello).
  3. אופציה למה שיוצג למשתמש לאחר חיפוש שכזה הוא: "חיפשת את המחרוזת hello, ולהלן התוצאות". אנו רואים שפלט הדף קשור באופן ברור למחרוזת שהזננו, ולכן נשחק מעט עם הכתובת.
  4. נשנה את הכתובת ל<http://mysite.com/index.php&search=<script>alert("hello")</script . מה שהכנסתי בפרמטר החיפוש הוא בעצם סקריפט קצר בג'אווהסקריפט, שמטרתו הוא להקפיץ הודעה למשתמש.
  5. נכנס לכתובת, ואם תוצג למשתמש הודעת שגיאה עם הכיתוב hello, נדע בוודאות שהאתר פגיע.

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

למרות זאת, רבים ממעיטים בערכו של הXSS הזמני – אני מניח שזה משום שיש צורך ממשי שמשתמש יכנס לאותו קישור נגוע. אינני מסכים עם תחושת הבטחון הפיקטיבית הזו, וקורא לכם לזכור שבעידן מקצרי הקישורים למינהם לא קשה לגרום לכם ללחוץ על לינק – bit.ly וtinyurl עושים את זה ממש קל לגרום לכם להתעניין וללחוץ. פירצת XSS לרוב בכלל לא תהיה מורגשת, ותוודעו לה רק שחשבונכם יפרץ. היא קיימת באין-ספור אתרים בעולם, ובכתבה הבאה אני אראה לכם כיצד אפשר לזהות כמה מהם ב5 שניות בדיוק.

מקווה שהשכלתם,
ים מסיקה

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

IRC - צ'אט בזמן אמת. (וגם: על פרוטוקולים, שרתים ובוטנטים)

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

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

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

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

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

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

שרת (או באנגלית: Server) הוא בעצם מחשב מרוחק שיושב אי שם (לרוב במקום שנקרא חוות שרתים), ומאפשר למשתמשים שונים להתחבר אליו. על השרת מותקנת תוכנה מסוימת, שחיונית לפעולתו, והיא מאפשרת את פעולות המשתמשים עליו. ישנם שרתים מסוגים רבים, שמוגדרים לרוב על פי אותה תוכנה חיונית שמותקנת עליהם: שרתי HTTP (זה שמאפשר לכם לראות אתרים שונים ברשת האינטרנט), שרתי פרוקסי (שעליהם ודאי אכתוב פוסט מתישהו), שרתי DNS (כנ"ל), שרתי דואר אלקטרוני, שרתי קבצים (שמאפשרים שיתוף קבצים), שרתי eMule (שלא דואגים להעברת הקבצים, אלא רק לחיפוש אנשים אחרים אליהם תוכלו להתחבר) ועוד הרבה אחרים – כולל שרת IRC, הדואג שלמשתמשים המחוברים אליו תהיה אפשרות לשוחח ברשת.

אם כן, אנחנו יודעים מה הוא שרת. אנחנו יודעים שהIRC הוא בעצם פרוטוקול תקשורת האחראי למימוש שיחה בין אנשים, כאשר אותו פרוטוקול תקשורת ממומש על ידי שרתים. ההסבר מכאן הוא די פשוט: כל אדם הרוצה להשתמש בפרוטוקול הIRC על מנת לשוחח עם חבריו, יכול להתחבר לשרת מסוים (בדיוק כמו שרובכם עושים בשרתי משחק רשת, או בשרתי תוכנות השיתוף). ישנם אלפי שרתי IRC המאפשרים למשתמשים להתחבר אליהם באופן חופשי. אדם המתחבר לשרת שכזה, יכנס בדרך כלל לערוץ. ערוץ הוא בעצם מקום מסוים שיוכלו המשתמשים "להכנס" אליו, והוא מהווה הסכמה בין משתמשים שרוצים לשוחח אחד עם השני (כמו שיחת ועידה שכזו). לכל ערוץ יש שם שמתחיל בסימן #, ופעמים רבות הוא ישקף את נושא השיחה בערוץ: לדוגמה, האנשים בערוץ security# ידברו לרוב על אבטחה. ניתן להתחבר לכמה שרתים ולכמה ערוצים במקביל, על מנת לשוחח (או לראות שיחות) בכמה מקומות מעניינים. דוגמה לשרת מעניין הוא שרת ששמו Freenode, בו הערוצים המובילים (אלו שיש בהם את המספר הרב ביותר של אנשים) עוזרים למשתמשים בנושאים שונים בשפות תכנות, ומאוכלסים במשתמשים שרמתם גבוהה מאוד (שימו לב – שפת הדיבור בסרבר הספציפי הזה היא אנגלית). מה שקורה במציאות לפי פרוטוקול התקשורת של ה-IRC, זה שהשרת אליו אתם מחוברים מקבל את ההודעה ששלחתם לערוץ מסוים, ומעביר אותה לשאר המשתמשים שנמצאים באותו הערוץ. פשוט, לא? כמו בחדרי צ'אט רגילים שאתם מכירים (שרובם המכריע מתבסס על פרוטוקול ה-IRC), בסרברים המודרניים יש דרגות ניהוליות שמסומלות בעזרת תווים מיוחדים (כמו @ שמציין מנהל), ויש אפשרויות שונות ("מודים") שניתן להחיל על הערוץ, דוגמת i שמציין ערוץ למוזמנים בלבד. קצרה היריעה מלהכיל את האפשרויות העצומות והרחבות הללו בפוסט אחד, ואני אסתפק בתיאור שנתתי עד כה.

כמובן, לכל דבר טוב חייב להיות גם צד רע. לרוע המזל, מנצלים היום את ה-IRC משתמשים רבים שמטרותיהן שונות ומסתכמות לרוב בגרימת נזק למחשבים שונים המחוברים לרשת האינטרנט: הם מדביקים משתמשים רבים בתוכנה זדונית, שמטרתה היא להכניס את כל אלו שנדבקו לחדר מסוים בשרת IRC ספציפי. לאחר מכן, אותם משתמשים זדוניים שולחים הודעה מסוימת בערוץ, המכילה פקודה שהמחשבים שנדבקו בתוכנה הזדונית יבצעו. פקודה זו יכולה להיות, נניח, בקשה מכל המחשבים לתקוף בצורה מסוימת, באופן סימולטני, אתר מסוים (שנקרא "הקורבן"). מחשב בודד שנדבק בתוכנה זדונית שכזו נקרא בוטנט (Botnet) או זומבי (Zombie), ובפעמים רבות הוא אחראי גם על הדבקת מחשבים אחרים (על ידי שליחה ברשימות תפוצה, כמו מייל, מסנג'ר וכדומה). רשתות בוטנטים הן עניין רציני, וככל נושא באבטחת מידע הוא מורכב ממנגנונים שונים, שבין היתר אחראיים לניקוי העקבות ולהסתרת ה"מפקדה", ממנה התוקף שולח את הפקודות. רשתות בוטנטים ניתנות למכירה (כמובן שכנגד החוק, כמו כל הסיפור הזה בפני עצמו), ואדם ששולט על רשת בוטנטים רחבה נחשב כאדם בעל עוצמה רבה. ישנם ספרים רבים בנושא, ולשם שינוי הפעם דווקא לא אמליץ על אף אחד מהם. לקריאה זריזה ונוספת אמליץ על מאמר של cp77fk4r במסגרת הגליון החודשי לאבטחת מידע של Digital Whisper (לחצו כאן – עמ' 4 עד 14).

גם לבלוג יש ערוץ IRC רשמי. לערוץ זה תוכלו להתחבר דרך צ'אט אינטרנטי, שכתובתו http://webchat.nix.co.il/#security (המילה security# מציינת את הערוץ). להתחברות דרך קליינט (תוכנה שמאפשרת שימוש בשרת מסוים – במקרה שלנו שרת הIRC), הורידו את mIRC לווינדוס או את XChat ללינוקס (המלצות אישיות, יש עוד תוכנות דומות רבות). מיד לאחר מכן תוכלו להתחבר על ידי הלינק הזה, שיקח אתכם ישירות לערוץ שלנו, security#, שנמצא בסרבר irc.nix.co.il. מומלץ בחום.

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

מקווה שהשכלתם,
ים

הכירו את אחיכם הגדול. (או: איך לחפש בגוגל.. ולמצוא)

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

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

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

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

  1. באם נרצה שהביטוי לא יופיע בתוצאות החיפוש, נרשום לפניו את הסימן -. לדוגמה, אם ארצה למצוא מכונית, אבל לא מכונית היברידית, אני ארשום: מכונית -היברידית.
  2. באם נרצה שהביטוי יופיע במילות החיפוש בהכרח, נרשום לפניו את הסימן +. לדוגמה, אם ארצה למצוא מכונית, אבל רק מכונית היברידית, ארשום: מכונית +היברידית.
  3. באם נרצה לחפש ביטוי כמקשה אחת, משמע, שתי מילים (או יותר) אחת אחרי השנייה, נקיף את הביטוי במרכאות. נניח, אם אני רוצה לחפש מידע על הביטוי "טול קורה מבין עינייך", ואני יודע שהוא לקוח במקור ממסכת ערכין, אני יכול לרשום: "טול קורה מבין עינייך" +ערכין. (זכרו - ככל שתתנו לגוגל יותר מידע, היא יטיב עמכם).
  4. באם נרצה לחפש גם מילים דומות וקרובות, נוכל להוסיף את הסימן טילדה (~) לפני המילה (עובד, לדעתי, טוב יותר בגוגל האנגלי מאשר בעברי). לדוגמה, אם ארצה לחפש אוטו גדול, אוכל לחפש: אוטו ~גדול, מה שימצא לנו גם "אוטו ענק".
  5. באם נרצה לחפש אחד מהביטויים שרשמנו, נוכל להוסיף את המילה OR בינהם (חובה באותיות גדולות, אחרת גוגל יפרש כמילת חיפוש!), או את הסימן | שיגרום לאותה השפעה בדיוק. לדוגמה, אם אינני בטוח האם הביטוי "אל תדין את חברך עד שתגיע למקומו" לקוח מ"אבות" או מ"סנהדרין", נוכל לחפש: "אל תדין את חברך עד שתגיע למקומו" אבות OR סנהדרין. יש לשים לב שOR (כנ"ל לגבי |) יסתכל רק על שתי המילים שמצדדיו, ולא על כל הביטוי. כך לדוגמה: קופי חלל OR נמרי יער יחפש את הביטויים "קופי" ו"יער" בנפרד, ואת אחד מהביטויים "חלל" או "נמרי". לצורך פתיחת הבעיה, ניתן להקיף את הביטוי במרכאות: "קופי חלל" OR "נמרי יער".
  6. מכשתתנסו בחיפוש ביטויים במרכאות, יקרו מקרים רבים שבהם תרצו לחפש משהו אך יחסר לכם חלק מאמצע הביטוי. נניח, אני זוכר שיש איזשהו ביטוי של מארק טווין, שאמר משהו בסגנון: "מעולם לא נתתי.. להפריע …". אני אוכל לרשום בגוגל פשוט, במקום הביטויים או המילים החסרות, כוכבית. ממש כך: "מארק טווין" "מעולם לא נתתי * להפריע *". אקבל את הביטוי המדויק: "מעולם לא נתתי לבי"ס להפריע להשכלתי".
  7. אם נתעסק בערכים מספריים, נוכל להכניס שתי נקודות בין שני ערכים שכאלו על מנת לחפש טווח. נניח, אם אני מחפש אוכל לחתול שלי בטווח של 50 ל100 דולר (כן, החתול חי טוב), אני ארשום בגוגל: "cats food" $50..$100 . (באנגלית תמיד יש יותר תוצאות, במיוחד כשמדובר בדולרים. ומאחר שבא לי שהחתול שלי לא יגווע בערב בזמן שאני מגגל לי בעברית…. עמכם הסליחה). כמובן שאפשר גם לדבר על כל ערך מספרי אחר, ולברר מתי התרחשה המהפכה הצרפתית. נוכל, בוודאי, לחפש "המהפכה הצרפתית" כמו שכבר ראינו, אבל אם יתחשק לנו שיופיעו התאריכים כבר בתוצאות החיפוש? אם אנחנו יודעים שהמהפכה קרתה אי שם בין 1700 ל1900 (לא לכולנו יש חוש היסטורי מפותח), נרשום: "המהפכה הצרפתית" 1700..1900 . אם להגיד את האמת, גם 1000..2000 יעבוד כאן. ויוה לה-פרנס!

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

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

  1. site - מאפשרת לחפש באתר מסוים. נניח, אני מת למצוא את פעולותיו ים מסיקה בפייסבוק – אבל אין לי פייסבוק ואני לא מתכוון לפתוח אחד. אני פשוט אוכל לרשום בגוגל "site:facebook.com "Yam Mesicka ולהנות מאחלה של תוצאות…
  2. filetype (או ext) – מחפש קובץ בעל סיומת מסוימת. לדוגמה, אם אני ארצה את מניפיסט ההאקר בPDF, אני אוכל לרשום: The Hacker Manifesto" filetype:pdf". נוכל גם להגביל חיפושים לקבצי שמע מסוג MP3 על ידי filetype:mp3, וכן לדפי אינטרנט מסוגים שונים שנרצה בעזרת הפרמטר "או": (filetype:(html|php|asp.
  3. inurl – מאפשרת לנו לדאוג שבכתובת האתר יוזכר ביטוי מסוים. נניח, אם אני רוצה שבכתובת האתר שאני מחפש בו אבטחת מידע יוזכר mesicka, ארשום: inurl:mesicka "אבטחת מידע".
  4. intitle – מאפשרת לנו לחפש בכותרת האתר משהו. מיד נראה אילו שימושים נהדרים אפשר לעשות בזה.
  5. intext – מאפשרת לנו לחפש רק בגוף הדף של האתר.

אז כל כך הרבה אפשרויות חיפוש, ראינו בעצמינו. פוסט שאמור להיות בסיסי ופשוט עולה עד עכשיו ב 1,000 מילים ומאיים לתפוס את השיא של הפוסט הכי ארוך שלי (שיא שבהחלט קשה לשבור). אז.. למה? מה כל כך חשוב בגוגל? התשובה היא שאם יודעים כיצד לחפש, אפשר למצוא כמעט כל דבר. רוצים למצוא שירים, בחינם? מה הבעיה! נבדוק כיצד נראים עמודים שמציגים למשתמשים קבצים (למתקדמים: מקומות שמאפשרים Listing בעזרת Apache). לאחר ניתוח המאפיינים של דפים כאלו, נבנה את השאילתה הבאה:

-inurl:(htm|html|php) intitle:"index of" +"last modified" +"parent directory" +description +size +(wma|mp3|ogg) +"Hallelujah"

במילים אחרות: ביקשנו שבכתובת לא יהיה htm, html או php. בכותרת יהיה "index of", והדף יכלול את כל שאר הביטויים שהכנסנו. חובה שהוא יכלול או wma, או mp3 או ogg. השאילתה הזו מפורסמת מאוד, ועובדת נהדר (זהירות: התוכן שהשאילתה מוצאת הוא לא חוקי, ומפר את חוק זכויות היוצרים התשס"ח שנחקק בישראל).

ישנו כיום שימוש במנוע החיפוש של גוגל בתחום אבטחת המידע. בעזרת גוגל, ניתן למצוא הרבה פעמים מקומות שלא היינו אמורים להגיע אליהם באתר – אבל גוגל עושה בשבילינו את העבודה. הרעיון נקרא בשמו העממי Google Hacking או Google Dorking, ומחרוזות החיפוש נקראות "דורקים" (Dorks). אז איך נמצא מצלמות לא מאובטחות פועלות? פשוט נרשום:

inurl:"ViewerFrame?Mode="

כמובן שמדובר פה ממש על קצה המזלג, וניתן למצוא דברים הרבה יותר חמורים, כמו פאנלי ניהול, קבצים המכילים שמות משתמשים וסיסמאות ורבים אחרים. קיצור מפורסם הוא GHDB, שפירושו: Google Hacking Database, והכוונה היא לאתר המרכז שאילתות רבות שניתן להריץ בגוגל על מנת למצוא פרצות שכאלו. אתם מוזמנים לחפש (ואנא, לא לעשות שימוש לרעה!)

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

שלכם,
ים.

(הפוסט הזה מכיל 1337 מילים.)