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

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

רן בר-זיק נובמבר 14, 2017 9:40 am 4 תגובות

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

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

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

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

חיבור בעייתי לאתר רמי לוי
חיבור בעייתי לאתר רמי לוי

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

הסבר טכני על מהות החולשות

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

אתר רמי לוי תקשורת - צילום מסך
אתר רמי לוי תקשורת – צילום מסך

חולשה ראשונה: חוסר הגנה על ממשק קבלת החשבוניות

בקישור https://mobile.rami-levy.co.il/My/invoices ניתן לקבל את מספרי החשבוניות של כל משתמש באמצעות בקשת GET פשוטה והעברת הפרמטרים phone שהוא מספר הטלפון של הלקוח ו-match. אך ה-match אינו נבדק כלל. כל מה שצריך להעביר זה את מספר הטלפון באופן הזה:

https://mobile.rami-levy.co.il/My/invoices?phone=PHONE_NUMBER&match=1111

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

מספרי החשבוניות ומספר הלקוח חיוניות בהתקפה הסופית (חולשה שלישית) המאפשרת לנו לקבל את כל פירוט השיחות.

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

חולשה שניה: חוסר הגנה על ממשק הכניסה לאתר

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

 https://mobile.rami-levy.co.il/Client/validateacc

עם הפרמטרים phone, match ו-idnum.

בפועל, לא נעשית בדיקה של מספר תעודת הזהות (idnum) והמידע הנבדק הוא מספר הטלפון ו-4 הספרות האחרונות של כרטיס האשראי. בממשק אין שום הגנת brute force והוא נותן חיווי מיידי על הצלחה, כלומר אפשר בקלות לשגר כמה בקשות שרוצים על מנת לנסות ולנחש את מספר כרטיס האשראי המשויך למספר הטלפון. כיוון שמדובר ב-4 ספרות נומריות, מספר הניסיונות המקסימלי שצריך הוא 10 בחזקת 4 או 10,000. אפשר לעשות את זה בקצב מהיר ואפשר לעשות את זה בקצב איטי. אבל מה שצריך זה סקריפט פשוט. עם ממוצע של 5,000 ניסיונות, זה אומר שאפילו בקצב נמוך, אפשר למצוא את 4 הספרות האחרונות של כרטיס האשראי בקלות וכך לבצע לוגין כמו כל משתמש ולקבל את כל המידע השמור במנגנון האתר: מספר תעודת זהות, כתובת פיזית, כתובת מייל ומספרי חשבוניות ומספר לקוח. דבר שאנחנו גם כן יכולים להשתמש בו בחולשה השלישית והקריטית יותר.

חולשה שלישית: חוסר הגנה על ממשק קבלת פירוט השיחות

על מנת לקבל גישה לפירוט השיחות, ישנה שכבת הגנה נוספת. הלקוח צריך לשלוח באמצעות האתר בקשה לקבלת שיחות ולאחר שליחת הבקשה, נשלח סמס לטלפון של הלקוח עם קוד סודי שאותו הוא נדרש להזין בממשק. בפועל, על מנת לצפות בפירוט השיחות, נשלחת בקשת GET אל:
https://mobile.rami-levy.co.il/My/invoice
עם הפרמטרים הבאים:
type = calls
phone = מספר הטלפון
invoice = מספר החשבונית (שמשיגים מחולשה א׳ או ב׳)
code = מספר הלקוח (שמשיגים מחולשה א׳ או ב׳)
vcode = קוד סודי בן 4 ספרות שמקבלים אך ורק בסמס.

דוגמה לבקשת ה-GET

https://mobile.rami-levy.co.il/My/invoice?type=calls&phone=PHONE_NUMBER&invoice=INVOICE_NUMBER&code=COSTUMER_NUMBER&vcode=XXXX

קוד הסמס נשלח ללקוח באמצעות בקשת POST אל הכתובת https://mobile.rami-levy.co.il/My/invoice_sms עם הפרמטר phone. ברגע שנשלחת בקשת POST מסוג זה, נשלח סמס פשוט ללקוח עם הקוד. ללא הסבר או התרעה.

סמס עם קוד סודי שהתקבל מרמי לוי
סמס עם קוד סודי שהתקבל מרמי לוי

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

כלומר, משהו בסגנון הזה:


const bf = require('bruteforce');
const colors = require('colors'); // eslint-disable-line

bf({
    len: 4,
    chars: [1, 2, 4, 5, 6, 7, 8, 9, 0],
    step: (number) => {
        console.error(`GENERATING GET PARAMETER NUMBER ${number}`.red);
        console.log(`Trying to break: https://mobile.rami-levy.co.il/My/invoice?type=calls&phone=MY_PHONE&invoice=INVOICE_NUMBER&code=CUSTOMER_NUMBER&vcode=${number}`.blue);
    },
});

רק שבמקום console.log, אני מבצע request, המודול שמייצר את המספרים הוא bruteforce JS. במידה ואני מקבל 200, בינגו. יש לי את המספר של הפרמטר vcode ואיתו אני יכול לגשת לכל מספרי החשבוניות ולקבל את כל פירוטי השיחות. זה הכל.

הגנה מפני פרצות brute force

ישנן כמה פרקטיקות מאוד פשוטות שקל ליישם בכל הנוגע להגנה מפני brute force. המוכרת שבהן היא re-captcha.

מתוך גוגל.קום

אך ניתן ליישם הגנות אחרות. באתר זה, למשל, 20 ניסיונות שיובילו ל-404 או 403 יובילו לחסימה מוחלטת של כל הבקשות מה-IP למשך 20 דקות.

התגובה של רמי לוי תקשורת

בניגוד למצופה, אנשי המקצוע מטעם רמי לוי ששוחחו איתי התקשו להבין את מהות הפירצה. למרות שאישרו בשיחה הטלפונית את כל הפרטים. המחשבה שיש מי שיכול להפעיל סקריפט פריצה שיכול להריץ התקפה של brute force כדי לנחש 4 ספרות נומריות נראתה להם כלא ריאליסטית. הם טענו שהאתר יקרוס אם יפעילו כזו כמות של בקשות. הניסיונות שלי להסביר להם שאפילו ב-80 בקשות לשעה (מספר נמוך לכל הדעות) ניתן לפצח את קוד הסמס ב-62 שעות בלבד בממוצע, לא הואילו. לאחר דין ודברים הם טענו שהם יתקנו את החולשות שאותן הן כינו ׳הצעות יעול׳. כרגע החולשות האלו אמורות להיות מתוקנות.

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

4 תגובות

  1. דימה הגב נובמבר 14, 2017 בשעה 10:36 am

    הי. מגניב ביותר.
    רק לא הבנתי דבר אחד – מה הקשר בין החולשות עצמן לעובדה שתעודת הSSL לא היתה תקינה?

  2. רן בר-זיק הגב נובמבר 14, 2017 בשעה 10:39 am

    אין קשר. זה פשוט היה הטריגר לבדיקה 🙂

    • דימה הגב נובמבר 14, 2017 בשעה 1:06 pm

      הבנתי. אז למעשה אין בעיה שהתעודה לא תקינה? אין לזה שום השפעה?

      • פז אריכא הגב נובמבר 14, 2017 בשעה 3:06 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 | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

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