אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » פיתוח אינטרנט » פתרונות ומאמרים על פיתוח אינטרנט » באג אבטחה שנובע מארכיטקטורת תוכנה

באג אבטחה שנובע מארכיטקטורת תוכנה

רן בר-זיק אוקטובר 8, 2017 7:07 am 4 תגובות

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

כשיש לנו פרצת אבטחה, הרבה מהפרצות הן בדרך כלל התקפות מוכרות וידועות מראש כמו XSS, או CSRF או SQL injection. ההתקפות האלו קלות לגילוי ברוב המקרים באמצעות static code analysis. אבל הרבה פעמים יש לנו פרצות אבטחה כתוצאה מארכיטקטורת תוכנה.

נשמע מפוצץ, נכון? כשאני עומד בהרצאות ומדבר על 'פרצה באמצעות ניצול בעיות בארכיקטורה של האתר' זה נראה משהו כזה:

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

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

לוגו נייטראן תל אביב 2017
לוגו נייטראן תל אביב 2017

מדובר במירוץ מושקע ובאתר שנראה על פניו מהוקצע. נכנסתי לרישום. ראיתי שיש שם מקום להכניס קוד קופון. הילד הרע שבתוכי הכניס סתם קוד. לחצתי שיגור וראיתי שקופץ לי alert ג'אווהסקריפט ופשוט שאומר "קוד הקופון אינו תקין"

Night run מסך הרישום

מה הבעיה? מלבד העובדה שאני מקבל alert מאוד לא ייצוגי ומאוד לא מעוצב? שכשהסתכלתי בקונסולה בזמן ששיגרתי את הטופס, ראיתי שהיא ריקה:

קונסולת network ריקה
קונסולת network ריקה

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

דוגמה לקוד ג'אווהסקריפט באתר נייט ראן - ללא מיניפקציה או אגרגציה
דוגמה לקוד ג'אווהסקריפט באתר נייט ראן – ללא מיניפקציה או אגרגציה

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

document.getElementById("ifrm").contentWindow.couponArray;

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

מניעה

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

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

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

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
אבטחה

4 תגובות

  1. תומר כהן ★ הגב אוקטובר 9, 2017 בשעה 11:01 pm

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

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

  2. משתמש אנונימי (לא מזוהה) הגב אוקטובר 18, 2017 בשעה 1:29 pm

    לא יודע אם שמת לב! אבל גם אתה פרסמת את הטלפון שלך ואת התעודת זהות שלך

    • רן בר-זיק הגב אוקטובר 18, 2017 בשעה 2:03 pm

      אל דאגה. אלו נתונים לא נכונים שהכנסתי מתוך ידיעה שאני אצלם את המסך 🙂 אבל יפה ששמת לב!

  3. משתמש אנונימי (לא מזוהה) הגב אוקטובר 21, 2017 בשעה 8:05 pm

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

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

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