בנק לאומי מציג: כשלון של אבטחת מידע

הנה אני מצליח לעשות בשבע דקות מה שבנק לאומי לא הצליח לעשות בשבוע: להפוך אתר וורדפרס לכזה שעובד בפרוטוקול HTTPS
The SSL certificate used to load resources from https://pepper.co.il will be distrusted in M70. Once distrusted, users will be prevented from loading these resources. See https://g.co/chrome/symantecpkicerts for more information. 5Mixed Content: The page at '' was loaded over HTTPS, but requested an insecure stylesheet ''. This request has been blocked; the content must be served over HTTPS. 7Mixed Content: The page at '' was loaded over HTTPS, but requested an insecure script ''. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-includes/js/jquery/jquery.js?ver=1.12.4'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'. This request has been blocked; the content must be served over HTTPS. (index):59 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://www.googletagmanager.com/gtm.js?id=GTM-WL7Z75'. This request has been blocked; the content must be served over HTTPS. (anonymous) @ (index):59 (anonymous) @ (index):60 (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.8.1'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-content/themes/orion/script/plugins.min.js?ver=4.8.1'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-content/themes/orion/script/general.min.js?ver=4.8.1'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-content/themes/orion/script/front-page.js?ver=4.8.1'. This request has been blocked; the content must be served over HTTPS. 11Mixed Content: The page at '' was loaded over HTTPS, but requested an insecure image ''. This content should also be served over HTTPS.

לפני ארבע שנים כתבתי על HTTPS ואפילו העברתי את האתר שלי ל-HTTPS. למה זה חשוב? טוב, מדובר בפרוטוקול הצפנה שמצפין את התנועה בין המשתמש לאתר. למה זה חשוב? אם למשל אני יושב בבית קפה שבעלי הרשת שבו מאזין לתנועה שלי, או בבית אבל השכן הצליח לפרוץ לראוטר (או שטכנאי תקשורת של הספק עשה זאת), או שבמחשב שלי מותקנת תוכנה זדונית שמאזינה לתקשורת – הם לא יוכלו לעולם "להאזין" לתקשורת או להחליף את האתר באתר שלהם. למשל אני אראה בשורת ה-URL כתובת כמו bank.com אבל בפועל זה יהיה evil-bank.com בלי שאדע על כך. התקפה כזו נקראת MITM או 'אדם באמצע' ובזמנו היא היתה מאוד פופולרית. HTTPS מבטיח כמעט בוודאות שמה שאני רואה זה מה שנשלח. בגלל זה הרשת עוברת לפרוטוקול הזה.

רגע, אמרתי שהרשת עוברת? כי אתר בנק פפר (אל תקרא לי בנק) לא בדיוק עבר ל-HTTPS. הכל החל כשחבר שלח לי קישור לבנק קקמייקה הזה, נכנסתי ובוא ונגיד שחשכו עיני. גרסת ה-HTTPS של האתר היתה שבורה לחלוטין. כלומר מי שרוצה לעשות MITM לאתר הבנק יכול. אז נכון, זה אתר תדמיתי – אבל נניח שאני אנצליח לעשות MITM ללקוח של הבנק ואשלח לו סמס בסגנון הבא:

לקוח יקר של בנק לאומי! מגיע לך 1,000 ש"ח מתנה במזומן! אנא הכנס ל pepper.co.il, הכנס את פרטי כרטיס האשראי שלך, חשבון הבנק שלך, הסיסמה הסודית ותמונה שלך בעירום ותוכל לקבל את הכסף שלך במזומן!
לקוח יקר של בנק לאומי! מגיע לך 1,000 ש"ח מתנה במזומן! אנא הכנס ל pepper.co.il, הכנס את פרטי כרטיס האשראי שלך, חשבון הבנק שלך, הסיסמה הסודית ותמונה שלך בעירום ותוכל לקבל את הכסף שלך במזומן!

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

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

כפי שנכתב בכתבה, אתר ה-https של פפר היה שבור לחלוטין ונראה רע – מקום נהדר לכל תוקף לחגוג על MITM על חשבון לקוחות של הבנק.

The SSL certificate used to load resources from https://pepper.co.il will be distrusted in M70. Once distrusted, users will be prevented from loading these resources. See https://g.co/chrome/symantecpkicerts for more information. 5Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure stylesheet '<URL>'. This request has been blocked; the content must be served over HTTPS. 7Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure script '<URL>'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-includes/js/jquery/jquery.js?ver=1.12.4'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'. This request has been blocked; the content must be served over HTTPS. (index):59 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://www.googletagmanager.com/gtm.js?id=GTM-WL7Z75'. This request has been blocked; the content must be served over HTTPS. (anonymous) @ (index):59 (anonymous) @ (index):60 (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.8.1'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-content/themes/orion/script/plugins.min.js?ver=4.8.1'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-content/themes/orion/script/general.min.js?ver=4.8.1'. This request has been blocked; the content must be served over HTTPS. (index):1 Mixed Content: The page at 'https://pepper.co.il/' was loaded over HTTPS, but requested an insecure script 'http://pepper.co.il/wp-content/themes/orion/script/front-page.js?ver=4.8.1'. This request has been blocked; the content must be served over HTTPS. 11Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure image '<URL>'. This content should also be served over HTTPS.

אתר פפר שבור ללא גרפיקה בשל מנגנון הגנה אוטומטי של כרום

למה זה נראה ככה? כאשר אתר מאפשר תקשורת של https, אסור לו בתכלית האיסור לנסות לטעון משאבים בפרוטוקול לא מאובטח http. מה זאת אומרת? אם למשל יש לי תמונות בדף, אני חייב להגיש אותן לגולש גם כן בפרוטוקול https. ברגע שיש https – כל התנועה והמשאבים בין הגולש לאתר חייבים להיות בפרוטוקול מאובטח. אני לא יכול לערבב בין המשאבים. ברגע שהתחייבתי לפרוטוקול המאובטח – כל דבר שנשלח לגולש חייב להיות מאובטח. במידה ולא, זה ייחשב כהפרה של פרוטוקול האבטחה. כיוון שפורץ המאזין לתקשורת יכול לגלות את המשאבים האלו ולהחליף אותם במשאבים משלו ואז לגנוב את הפרטים במתקפה שידועה כ-Man In The Middle.

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

האתר ב-HTTP נראה טוב מן הסתם, אבל גם זה הדהים אותי – ייתכן שאתר של בנק (פפר זה בנק לאומי) יהיה זמין ללא פרוטוקול HTTPS

אבל כפי שאומרים בכל קליקבייט נלוז – התגובה שהארץ קיבלו מבנק לאומי היממה אותי. ממש כך. שופופו:

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

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

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

הפיכת אתר וורדפרס ל-HTTPS היא משימה קשה – אם אתה חאפר או חסר ידע. אם יש לך מעט ידע, זה עניין של כמה דקות. לא מאמינים לי? הנה סרטון שמוכיח את זה. כך הפכתי את אתר כנס מיתופיה (כנס על ג'.ר.ר טולקין והארי פוטר שמתקיים במודיעין) ל-HTTPS. תוך כדי שאני עם הילדים בבית וטוחן פיצה פיתה. אבל מסתבר שזו משימה קשה מדי לבנק לאומי. אל תקרא לי בנק הם אומרים. בטוח שאני לא אקרא לכם בנק עם אבטחת מידע כזו. אולי אקרא לכם חבורת חובבנים שלא הייתי שם אצלם שקל (ואכן הוצאתי את החשבון הפעיל שלי מבנק לאומי).

למי שאין כוח לראות את הסרטון ולשמוע אותי מלרלר תוך כדי בליסת פיצה פיתה – הנה הצעדים שצריך לעשות על מנת להפוך את האתר מבוסס הוורדפרס שלכם לתומך בפרוטוקול HTTPS:

ליצור תעודת אבטחה באתר שלכם

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

לבדוק את האתר שלכם עם HTTPS

הכנסו לאתר שלכם עם https. עובד ויש אייקון ירוק של https? הרווחתם. דלגו על השלב הבא. יש לכם אייקון אפור ואזהרת mixed content? עיברו לשלב הבא.

פיתרו את בעיות ה-mixed content

אזהרת mixed content מתרחשת כאשר אתר בפרוטוקול HTTPS מנסה לטעון משאבים (סקריפטים, פונטים, קבצי CSS או תמונות) בפרוטוקול HTTP. כלומר יש קריאות ל-HTTP. עשו view source וגלו מאיפה הקריאות. אם מדובר באתר קטן – עברו על התוכן, במיוחד בוידג'טים ובקוד שאתם כתבתם. אם מדובר באתר גדול, יש סיכוי שתצטרכו קצת שאילתות SQL כדי לאתר את כל המקומות שבהם יש קריאות ל-HTTP. המירו את הקריאות לנתיבים יחסיים (למשל image.png/ במקום http://example.com/image.png).

וודאו שאף אחד לא יכול להכנס לאתר עם HTTP

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


RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

נסו להכנס לאתר שלכם עם פרוטוקול HTTP ו-ודאו שאתם מועברים לגרסת ה-HTTPS.

החליפו את כתובת האתר

זהירות! זה החלק הכי מסוכן וחובה לוודא שהשלבים הקודמים עברו בהצלחה. ב'הגדרות' -> 'פרטים כלליים', יש את כתובת האתר. צריך להחליפה מ-HTTP ל-HTTPS. מייד אחר כך תצטרכו לעשות כניסה מחדש לאתר. הצלחתם? מעולה. המעבר הושלם.

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

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

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

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

המנעו מהעלאת source control לשרת פומבי

לא תאמינו כמה אתרים מעלים את ה-source control שלהם לשרת. ככה תמצאו אותם וגם הסבר למה זה רעיון רע.

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

גלילה לראש העמוד