בתקופה האחרונה, אנו נחשפים באופן שוטף למידע על אתרים שנפרצו וחשבונות של משתמשים שנגנבו – ממשתמש פשוט ועד לחשבון מנהל/אדמין, וזאת על ידי ביצוע מתקפה בעזרת Cross-Site Scripting (בקצרה XSS)
מה זה בעצם Cross-Site Scripting (XSS) ?
XXS היא תקיפה נגד גולש אינטרנט, המתרחשת באמצעות פגיעות ביישומי אינטרנט ומאפשרת לתוקף להזריק סקריפט זדוני שמטרתו לרוץ בדפדפנים של משתמשי המערכת, כלומר הגולשים.
בעת הרצת הקוד יוכל התוקף לבצע פעולות בשמו של המשתמש בשירות על ידי ניצול מגבלות קיימות בפרוטוקול HTTP* בו משתמשים על-מנת לגשת לאתר, ואף לגנוב את מזהה המשתמש.
בכתבה זו נסקור את הנושא בשני חלקים:
- איך תקיפה זו מתבצעת?
- כיצד ניתן להתגונן בפניה?
עכשיו לאקשן! איך מתבצעת המתקפה?
שילוב של שתי הבעיות הבאות, עלול לחשוף את האתר לביצוע תקיפת XSS.
איך אפשר למצוא את החולשות האלו?
- מציאת אתר שעובד עם פרוטוקול HTTP בלבד, ב-Port** 80.
- נבדוק ב-Cookie**, האם מוגדר לאתר HttpOnly. זהו דגלון אשר מונע הכנסת קוד לאתר בצד לקוח.
כאשר שני תנאים אלו מתקיימים, קיימת אפשרות לביצוע תקיפת XSS, והזרקת קוד זדוני לאתר.
כיצד מתבצעת התקיפה?
- בעזרת שימוש בתוכנת PROXY, אשר מאפשרת לי לקבל ולראות את המידע העובר בדפדפן, ניתן לערוך את הבקשה.
- בשלב זה ניתן להוסיף את הסקריפט הזדוני בתוך הפרמטר של ה-Cookie, ולהעביר הלאה מידע.
ההודעה שמתקבלת בשרת בזמן ביצוע התקיפה:
ההודעה שמתקבלת באתר בזמן ביצוע התקיפה:
מה אפשר לעשות על מנת להתגונן?
ההמלצה היא לבצע שימוש בפרוטוקול SSL. כאשר משתמשים בפרוטוקול זה, כלל העברת מידע מהמחשב שלך לשרתים חיצוניים ובחזרה מתבצעת בצורה מוצפנת, כך שהTEXT לא חושף את המידע המועבר.
באמצעות שימוש בפרצת XSS הגורמת לדפדפן לשלוח עוגיות לשרתים שאינם אמורים לקבלם. דפדפנים מודרניים מאפשרים לבצע קטעי קוד שאוחזרו מהשרת. אם ניתן לגשת אל ה-Cookie בעת הרצת הקוד, תוכנה עלול להישלח אל שרתים שלא אמורים לקבלו.
שימו לב – הצפנת ה-Cookie לפני שליחתן ברשת אינה עוזרת במקרה זה.
התוקפים משתמשים בשיטה זו בעיקר במחשבים המאפשרים שליחת תוכן HTML. התוקפים משלבים מידע בתוכן הHTML- וכך הם יכולים לקבל Cookies של משתמשים אחרים. ניתן להשתמש ב-Cookies אלו על ידי התחברות לשרת שאמור היה לקבלן מלכתחילה, ולהזדהות בכינוי של המשתמש ממנו נגנבה ה-Cookie.
ניתן למנוע התקפות כאלו באמצעות דגלון HttpOnly, אפשרות הקיימת במערכות Microsoft וחוסמת Cookies מפני גישה של קוד בצד לקוח.
* פרוטוקול HTTP – פרוטוקול תקשורת מהנפוצים בעולם, הנועד להעברת דפי HTML ואובייקטים המוכלים בהם ברשת האינטרנט.
** Port – תהליך בעזרתו תוכנות יכולות להעביר נתונים באופן ישיר במקום שימוש בקבצי נתונים. השימוש הנפוץ ביותר בPorts הוא בתקשורת מחשבים.
כששני מחשבים רוצים לתקשר זה עם זה באמצעות פרוטוקול ה- TCP/IP הם צריכים להחליט באיזה ערוץ להעביר את המידע. כל יישום שנותן שירותים מתוכנת להקשיב בערוץ תקשורת מסוים. הערוץ הזה נקרא PORT . אינפורמציה שתגיע בערוץ אחר שאינו מוגדר בפרוטוקול ההתקשרות בין המחשבים או ששום יישום אינו מוגדר להקשיב לערוץ זה, פשוט לא תתקבל ע”י המחשב הקולט. המחשב האמור לקבל את האינפורמציה פשוט לא ידע מה לעשות איתה ויתעלם מהפורטים אלו המשמים תוכנות יקראו בהתאם פורט שירות.
כל יישום שמתוכנת לבקש שירות (כגון הדפדפן של הגולש) מתוכנת לפנות אל היישום שנותן את השירותים (כגון השרת) בערוץ המוסכם מראש בהתאם לפרוטוקול ההתקשרות בו משתמשים. כלומר בפורט הקבוע והידוע מראש. למשל, תוכנת דואר אלק’ יודעת שכשהיא רוצה לשלוח דואר אל שרת הדואר עליה לפנות אל השרת בפורט 25, ולא לא יהיה שם אף אחד שיענה לה. דפדפן אינטרנט יודע שכדי לגלוש באינטרנט עליו לפנות לשרת האינטרנט בפורט 80, אחרת לא יענו לו. ואם אתה הולך לאתר מאובטח ב- SSL אז זה חייב להיות לפורט 443. ואם אתה מושך דואר, אז התוכנה שלך חייבת לפנות אל השרת בפורט 110.
*** Cookie – אובייקט המשויך לגולש מסוים באינטרנט, המייצג מצב של גולש/ת באתר או משמש לאגירת מידע או העדפות של אותו/ה גולש/ת.