לדלג לתוכן

מה זה Clickjacking - כשהלחיצה שלכם לא באמת שלכם

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

אז מה זה בעצם קורה שם

Clickjacking, או בשמו המקצועי יותר UI redress - "עיוות ממשק משתמש" - מתבסס על יכולת בסיסית של דפדפנים: להטמיע אתר אחד בתוך אתר אחר, באמצעות תג <iframe>. הרעיון עצמו לגיטימי לחלוטין - הרבה אתרים מטמיעים סרטונים, מפות או תוכן חיצוני בדיוק ככה.

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

דוגמה שממחישה את זה

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

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

למה זה מסוכן יותר ממה שנשמע

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

איך מגנים על אתר מפני Clickjacking

  • כותרת X-Frame-Options. זו כותרת HTTP שהשרת שולח, שמורה לדפדפן אם מותר בכלל להטמיע את העמוד בתוך iframe. הגדרה כמו DENY או SAMEORIGIN חוסמת לגמרי אפשרות שאתר חיצוני יטמיע את הדף שלכם.
  • הנחיית frame-ancestors ב-CSP. מדיניות אבטחת תוכן - Content-Security-Policy - כוללת הנחייה ייעודית בשם frame-ancestors, שמאפשרת שליטה עדינה יותר על אילו דומיינים בכלל מורשים להטמיע את העמוד שלכם. זו כיום השיטה המומלצת, וגם עוקפת חלק מהמגבלות של X-Frame-Options.
  • קוד frame-busting - הגנה ישנה וחלשה. לפני שהיו כותרות ייעודיות, אתרים ניסו להגן על עצמם עם קוד JavaScript שבודק אם הדף רץ בתוך iframe, ומנסה "לשבור" את זה. השיטה הזאת נחשבת חלשה, כי יש דרכים לעקוף אותה, והיא לא אמורה לשמש כהגנה יחידה. עדיף תמיד להסתמך על כותרות HTTP אמיתיות.

למה כדאי להכיר את החולשה הזו

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

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

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

הצטרפו לקהילה בדיסקורד

לסיכום

Clickjacking מזכירה שאבטחה לא נגמרת בבדיקת קלט וקוד - היא כוללת גם את החוויה שהמשתמש רואה בעצם על המסך שלו. כותרת HTTP פשוטה אחת, X-Frame-Options או frame-ancestors, מספיקה כדי לחסום את רוב מתקפות ה-Clickjacking לגמרי, ולכן אין באמת סיבה טובה שאתר לא יגדיר אותה.