Skip to main content

CSRF התקפת

מבוא לאבטחת יישומי ווב – התקפת CSRF

יישומי ווב

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

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

התקפת CSRF

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

פשוט מדהים.

איך זה עובד?

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

שימוש ב authentication cookie

כאשר משתמש נכנס בפעם הראשונה ליישום ווב אז הוא צריך לעבור את מסך ה login. הוא רושם את שם המשתמש שלו ואת הסיסמא. המידע הזה נשלח למחשב השרת. הוא בודק שהמידע נכון ואז שולח חזרה לדפדפן cookies שבו רשום בצורה מוצפנת זיהוי של המשתמש. נהוג לקרוא ל cookie הזה בשם authentication cookies.

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


מה התוקף עושה?

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

למה שהמשתמש הרגיל יעשה את זה? 

כי התוקף ישתמש בשיטות social engineering חכמות לשטות במשתמש כך שהמשתמש יפתח קישור לאתר של התוקף. לדוגמא: הוא ישלח אימייל שנראה בדיוק כמו אימייל של הבנק ובו רשום משהו כמו "דוח רבעוני של החשבון שלך מחכה באתר הבנק. להלן קישור לאתר הבנק לשימושך". 

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

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

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

איך מתגוננים?

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

גם אם המשתמש פתח אתר של התוקף, הקוד של התוקף לא יכול לקרוא את ה headers של המידע שמגיע ליישום הווב הלגיטימי.

ל angularJS יש תמיכה מראש בשיטה הזו.

Comments

Popular posts from this blog

Best freeware - XML editor

As a software developer, I open XML files all the time. I a heavy commercial XML editor. But nothing can compare to a small, thin and free XML editor like 'foxe'. A great feature is has is the alignment of long XML strings to readable XML format (Shift-F8). It help lot of times when the XML file was generated by some tool and was not readable. Homepage: http://www.firstobject.com/dn_editor.htm

Jenkins error: groovy.lang.MissingPropertyException

I tried to run groovy build step and got below error. This post will describe how I solved the problem. Caught: groovy.lang.MissingPropertyException: No such property: hudson for class: script

SSL in pictures

Here is my summary on SSL (or as I like to call it 'SSL for dummies')