הפריצה והגניבה של כרטיסי האשראי: אנליזה שלי

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

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

עם כל זאת, אני מאמין לאותם אנשים כמו שאני מאמין שעל כתפי הימנית יושבת כרגע פייה….

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

כל זה כמובן מדובר על מערכת Linux שמותקנת ומעודכנת עם הטלאים האחרונים (yum update או apt-get update תלוי בהפצה) ועם הגדרות הקשחה נוספות. אותם בוני אתרים טענו שיש להם תקן PCI (אם הבנתי נכון) כך שאם באמת היה להם תקן PCI, מי שמימש אותו היה צריך להקשיח את המערכת.

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

נחזור לטענה של בוני האתרים: מהאתר שאינו שלהם ושהם אירחו – אותו פורץ סעודי נכנס לאתר שלהם וגנב משם את הפרטים.

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

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

במילים אחרות: אם השרת היה באמת מוקשח עם עדכונים אחרונים, כל זה לא היה קורה.

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

האם ניתן לעשות משהו כדי למנוע? כן, לא מעט:

  • עדכונים, כל הזמן לעדכן את השרתים, גם גרסאות ישנות של לינוקס עדיין מוציאים להם עדכונים
  • אם יש לכם קוד שמטפל בכרטיסי אשראי, מומלץ להצפין את הקוד ולשמור קוד מקור במחשב אחר לחלוטין. ניתן להצפין קוד PHP עם ION Cube כך שגם אם מישהו פורץ, הוא לא יוכל להסתכל בקוד
  • להצפין את ה-DB. אפשר להשתמש בדרכים כמו שמופיעים כאן לדוגמא
  • שילוב של 2 הסעיפים: ההצפנה מבוצעת בקוד והתוצר המוצפן מוכנס ל-DB כאשר הקוד עצמו מוגן עם ION Cube

ויש עוד דרכים ושיטות אחרות שמומחי אבטחה יכולים להמליץ עליהן.

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

כמה מילים על גניבת מספרי אשראי

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

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

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

חברות כרטיסי האשראי

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

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

לקח בערך דקה אחת לקבל אישור. אפילו לא קניתי תעודת SSL ומבחוינת אותה חברת אשראי אני יכול לסלוק כרטיסים בלי שום בעיה ואף אחד לא בודק לי את הקוד, את ה-DB ושום דבר אחר. מבחינתן, כל עוד אני משלם דמי חבר ומשתמש בשרותיהן, אין שום בעיה, ואף אחד לא יבדוק אם אני מאחסן את פרטי כרטיס האשראי כקובץ טקסט, CSV פשוט או כל פורמט שילד בן 6 יכול לקרוא.

רק לאחרונה החלו חברות האשראי להתעקש על תקן PCI, אבל אם אתם חושבים שזה יעזור, טעות בידכם ותיכף ארחיב על כך.

חברות הסליקה

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

חברות אחסון האתרים

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

בוני אתרים

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

אני רוצה לאמר משהו נוסף על חברות האשראי בארץ.

חברות האשראי נסמכות עכשיו על ה-דבר: תקן PCI לאבטחת מידע של כרטיסי אשראי. יש לי חדשות בשבילכם: זה לא יעזור. תמיד יהיה המתכנת הפוץ שלא מבין בסולאריס או לינוקס והשאיר את הסקריפט שמחייב את הלקוחות בחיוב החודשי עם הרשאות 666 ושהסיסמא ל-DB בתוך הסקריפט (תאמינו לי, ראיתי את זה ולא פעם אחת!) אז פורץ שימצא את הסקריפט הזה ולא חשוב כמה הצפנות קשיחות יהיו לבסיס הנתונים – יוכל בקלות לשאוב את הנתונים, לארוז אותם בקובץ zip ולהעביר אותם לעצמו. לא מאמינים? תנחשו איך גנבו לחברת Stratfor את המידע (וכן, הם עברו תקן PCI) עם מספרי כרטיסי אשראי בערב חג המולד…

לצערי הרב, חברות האשראי בארץ עדיין עובדות כאילו הן נמצאות בשנות ה-90, וכשמסתכלים על Paypal בחו"ל לשם השוואה, זה נראה כאילו מדובר במסע בזמן. ישראכרט לדוגמא, ישמחו לתת ללקוחותיהם Isracard Web, כרטיס וירטואלי עם 16 ספרות, אבל הם לא מצמידים את מספר הכרטיס לחשבון, אלא דורשים שהלקוח יפקיד סכום מסויים והסכום הזה "נתקע" באותו כרטיס וירטואלי. אם שמת 600 שקל והשתמשת ב-300, אז 300 תקועים בכרטיס מבלי שתוכל לעשות שימוש אחר זולת שימוש באותו כרטיס וירטואלי. מה אם בקניה הבאה תצטרך 380 במקום 300? תעבור את התהליך מחדש. פתרון מטומטם או לא?

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

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

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

מה ניתן לעשות להבא? כמה דברים פשוטים:

  • חשבון Paypal (מישהו יודע אם כא"ל גמרו את משחקי העמלות כפולות מול Paypal?) – פעם אחת מזינים את מספר הכרטיס, עוברים תהליך אישור כרטיס ובפעם הבאה שאתם רוכשים, תבחרו באופציה של Paypal. את העמלה אתם לא משלמים, אלא הסוחר משלם. מספר הכרטיס שלכם לא עובר לשום סוחר, וניתן גם להתחרט ולהתלונן אם יש לכם בעיה עם עיסקה. אני חייב לציין לטובה את השרות בעברית שלהם בטלפון.
  • אם אתם צריכים לעשות עיסקאות עם אתרים קטנים או כאלו שנמצאים במזרח ואינכם יודעים את טיבם, עדיף להשתמש בכרטיס נטען (שניתן לרכוש בדואר ולהטעין אותו עד 1000 שקל, אולי ויזה כא"ל יתעוררו יום אחד ויאפשרו הטענות חוזרות). במקרים כאלו גם אם משתמשים במספר הזה, הנזק אינו רב.
  • מערכות אתרי האשראי התקדמו טיפה לכיוון שנת 2012 ומאפשרות לראות עיסקאות שנעשו ביומיים שלושה האחרונים (מדוע טיפה? בארה"ב אתה רואה את העיסקה עם הפרטים בחשבון האשראי שלך מיידית, אצלנו בארץ כנראה חברות האשראי עובדות עם קומודור 64 כנראה), ולכן מומלץ אחת לשבוע להסתכל ברשימת העסקאות ולאתר עסקאות חשודות.
  • בעלי אתרים – כן, ברוב המקרים בונה האתר שלכם מבין באבטחת מידע כמו שאני מבין בהטסת חלליות. תתחילו לחפש אנשים שמבינים היטב באבטחת קוד (SRO? אתה כאן? תשאיר פרטים שלך בטוקבק ולינק לאתר שלך) שיעברו על האתר שלכם ויחסמו דברים פתוחים, יקשיחו סיסמאות וגישות ועוד. אחרי הכל, אתם לא רוצים לראות את הפרטים הסודיים שלכם בידי המתחרים שלכם.

ולבסוף – אולי, אולי יבינו בכנסת ששום מאגר מידע אינו חסין בפני פריצה ובמיוחד לא המאגר הביומטרי שמתחיל לקום! (אדרבא, במקרה של הממשלה עם ערימות קבלני המשנה שקל לשחד אותם בבמבה ובפחית קולה) והרעיון כולו דבילי, אולי אם היו מקשיבים לעדי שמיר (ה-S ב-RSA, גוף מאוד מוכר באבטחת מדי – זה Shamir), אז יכול להיות שיש סיכוי שאפשר לעצור את השגעון הזה בראשות מאיר שטרית. למה ללכת רחוק? רק לפני חודשיים ישיבה החליטה לבדוק אם התלמידים שלה עשו עוון רציני ולמדו (השם ישמור) שיעורי נהיגה. מהיכן המידע נראה לכם?