החדשות הרעות: יישומון "המגן" של משרד הבריאות, שפותח בקוד פתוח ומותקן בטלפונים של מעל מיליון אזרחים, מכיל קוד שונה מזה שעליו מצהיר המשרד, דבר שמצביע על העדר תהליכי פיתוח ובקרה בפרויקט הקורונה החשוב והרגיש מאין כמותו. אנחנו מדווחים על כך כאן בסייברסייבר בשיתוף רן בר-זיק ב"הארץ".
החדשות הטובות: בעקבות פנייתנו התחילו במשרד הבריאות לפעול לתיקון הבעיה, וכבר נקטו צעדים לשיפור תהליכי הפיתוח והפיקוח על מנת שהדבר לא ישנה.
אבל ראשית ראשית ואחרית אחרית.
קהילת הקוד הפתוח צהלה ושמחה כשהודיעו במשרד הבריאות שאת האפליקציה לניטור מגעים בתקופת הקורונה יפתחו בקוד פתוח. למרות שיש לא מעט פרויקטים כאלה מטעם הממשלה הישראלית, זה לגמרי לא טריוויאלי שמשרד ממשלתי בוחר לעבוד בסטנדרטים של קוד פתוח, בשקיפות ובאיכות הנדרשת, אבל זה לגמרי ראוי להערכה ולכבוד. אז משרד הבריאות – סחתיין עליכם.
הבחירה בקוד פתוח, למרות שאני בטוח שלא היתה קלה, היא בהחלט הבחירה הנכונה. כפי שהזכרנו באחד הפרקים הקודמים בנושא בפודקאסט הפופולרי סייברסייבר (קורונה וקורקינטים עוקבים אחריכם 🐱💻 ע02פ21), על מנת שהאפליקציה תעבוד, היא צריכה להיות מותקנת אצל חלק גדול מאוד באוכלוסיה, וכדי שכמה שיותר אנשים יתקינו אותה הם צריכים להיות בטוחים שהיא בטוחה לשימוש, והדרך הטובה ביותר לעודד אמון היא באמצעות שקיפות – וזה בדיוק מה שעושה הקוד הפתוח.
באמצעות שימוש בקוד פתוח המשתמשים יכולים להיות בטוחים (לכאורה, ומיד נראה למה רק לכאורה) שאין בקוד דלתות אחוריות ששולחות את תמונות המאפים שלנו לשב"כ, שאין רושעות, רוגלות, או נוזקות שיכולות לפגוע בנו ובזכויותינו, ושאם יש תקלה – אפשר לבקש את עזרת קהילת הקוד הפורחת בארץ על מנת לתקן אותה. כמו לרכב על חד קרן לחנות בורקס-הסביח השכונתית. תענוג.
אבל בשביל לנהל פרויקט של קוד פתוח צריך קודם לעשות כמה דברים קטנים, כמו למשל להגדיר תהליכי פיתוח, תהליכי בקרה, ולשמור עליהם כמו על סופלה תופח בתנור. כל טעות קטנה תפגע באמון החשוב כל כך להצלחת הפרויקט, ותגרום לפחות ופחות אנשים לסמוך על הממשלה שתסתובב להם בטלפון. וכאן, כפי שניחשתם, התגלה הכשל הגדול.
מאז שחררנו, עידוק ואני, את הפרק הקודם על "המגן" (סייברקורונה 🤿 אל תבנו על יישומוני מעקב המגע 🐱💻 ע02פ26) פנו אלינו לא מעט אנשים שהאשימו אותנו בשלל האשמות לא נעימות. החל מ"אתם דובי לא-לא", עבור ב"איך אתם יכולים להגיד שקוד פתוח הוא לא קוד פתוח, אתם לא מבינים מהחיים שלכם", וכלה ב – ובחיי שאני לא ממציא את זה – "אתם כמו ריקלין בערוץ 20". לא נפגענו.
אבל הפעם מי שצדק היו אלה דווקא אנחנו. אמרנו כי העובדה שהממשלה *טוענת* שהפרויקט הוא בקוד פתוח זה לחלוטין לא מספיק. הזהרנו שלמרות שהקוד מפורסם בפומבי זה לא אומר שהאפליקציה היורדת למכשירים של האזרחים מכילה את אותו קוד. וזה, תאמינו או לא, בדיוק מה שקרה.
אמרו לנו שמי שלא מאמין לממשלה שילך ויבדוק בעצמו, אז זה בדיוק מה שעשינו (ובמאמר מוסגר נאמר שמי שמאמין לממשלה – מגיע לו כל מה שהוא מקבל).
המגן המקורי האורגינל. היזהרו מחיקויים!
אז הורדנו את קובץ האפליקציה מחנות האפליקציות של גוגל, קובץ בפורמט APK (Android application package), והעברנו אותו תהליך של דה-קומפילציה (אהדרה?) על מנת לראות מה הוא מכיל, ולנסות להשוות אותו לקוד המפורסם בגיטהאב מטעם משרד הבריאות. זה אולי נשמע משהו מאוד מורכב, אבל בפועל אלה בדיוק שתי שורות פקודה בפחות מעשר שניות. למה אף אחד מאלה שכינו אותנו "ריקלין" עוד לא עשה את זה? שאלה מצוינת, לה אין לנו תשובה.
בתוך הקובץ מצאנו בעיקר ברדק, שנמצא במעט מאוד פרויקטים מקצועיים, ובהרבה הרבה פחות פרויקטים רשמיים בקוד פתוח. למשל, היה שם מידע קירבה שנאסף באמצעות בלוטות', עם מזהה המכשיר, הזמן, עוצמת האות, המרחק (קירבה בין המכשירים), תאוצת המכשיר בעת המדידה, ועוד:
מהמידע שנכלל שם נראה כי הרשומות נאספו לפני כחודשיים, ב-14 במאי 2020. מידע נוסף שהיה שם משווה בין המזהה הזמני (Ephemeral_id) למזהה המשתמש (user_id):
אבל לא רק המידע עצמו היה שם, אלא גם הקוד שאוסף אותו:
אז ראשית – איסוף מידע בבלוטות' לא אמור להיות בכלל בגרסה של "המגן 1", שאמורה לאסוף רק מיקום באמצעות GPS ואת כל רשתות ה-WiFi בסביבת המכשיר. ושנית – הקוד האוסף מידע באמצעות בלוטות' *לא* קיים בקוד הפתוח של משרד הבריאות שאמור לשקף את הקוד הנמצא באפליקציה.
נעצור לרגע ונבהיר שאין כל רע באיסוף מידע ע"י בלוטות', וכי הפרוטוקול שפותח ע"י ד"ר אייל רונן ופרופ' בני פנקס ושאומץ על ידי משרד הבריאות הוא פרוטוקול טוב, ששם את הפרטיות של המשתמשים במקום הראשון, ומגן עליה באמצעים קריפטוגרפיים מתקדמים. העובדה שהקוד הזה לא היה במאגר הקוד הפתוח (Repository) של משרד הבריאות, ושאף אחד לא שם לב לכך – היא הדגל האדום והמתנפנף מעל הפרויקט.
חלק נוסף וקריטי שירד לאפליקציות של המשתמשים ולא נמצא במאגר הקוד הפתוח הוא הייצוא של המידע ממכשיר הטלפון, אותו מידע שהבטיחו לנו שלעולם לא יצא ממנו. כאילו להוסיף חטא על פשע, ייצוא המידע הזה נכתב על ידי חברה מסחרית ישראלית בשם Wix ונמצא במרחב השמות שלה – ולא בזה של משרד הבריאות:
נדגיש כי לא מדובר פה בקוד היקפי, נניח כזה שעושה פעולה גנרית כמו לצפצף ניגון עליז של הבה נגילה, או לצייר תמונה של גמל, קוד שלא נוגע במידע האישי והפרטי הנאסף על ידי אפליקציה ממשלתית. הקוד דנן הוא קוד שנכתב ספציפית לטובת משרד הבריאות, עושה בדיוק את מה שנאמר לנו שיזהרו בו בצוננים, שזה לייצא את המידע הרגיש הזה – וגם הוא לא נמצא במאגר הקוד הפתוח האמור לשקף את האמון אותו מבקשת הממשלה שניתן בה.
אפילו אם נתעלם מתהליכי הפריסה (Deployment) הלקויים שדוחפים קבצים המכילים מידע שנאסף על ידי משתמשים לסביבת הפרודקשן, או שמעלים קובץ ובו מידע גיאוגרפי מ-Uberlândia, עיר קטנה בברזיל, העובדה שקוד סופר-רגיש, שלא אמור להיות בגרסה הנוכחית, ושלא נמצא במאגר הקוד הפתוח, עולה לחנות האפליקציות ומשם למכשירי מעל מליון אזרחים – מעלה שאלות קשות לגבי מקצועיות חלק מהמעורבים בפרויקט, וברצינות בה הם לוקחים את חשיבותו.
פרויקט כזה – שאמור להיות מטופל בכפפות של משי בשל האמון שהוא מבקש ממליוני אזרחים לתת בו – אסור לחתוך בו פינות. יש לשים תהליכי בקרה על תהליכי הבקרה על מנת לוודא שמה שמובטח – זה מה שמבוצע בסופו של דבר. אם האפליקציה מכריזה שהיא לא אוספת מידע באמצעות בלוטות' – אסור בתכלית האיסור שיהיה בה קוד האוסף מידע באמצעות בלוטות'. אם האפליקציה מכריזה שהיא שקופה ושכל אחד יכול לוודא זאת באמצעות מעבר על הקוד עצמו – יש לוודא באלף עיניים כי האפליקציה שעולה לחנויות אכן מכילה את הקוד המופיע במאגר, ורק אותו.
"כל הקוד מפורסם בגיטהאב, למעט"
פנינו לדוברות משרד הבריאות, וזו התגובה הראשונית והגנרית למדי שקיבלנו:
1. אפליקציית המגן פותחה ע"י משרד הבריאות בשיתוף עם מתנדבים ועם החברות הישראליות הבאות: מטריקס ו- igates, ובליווי צמוד של מומחי פרטיות וסייבר.
2. אין למשרד הבריאות ולאף גורם אחר, גישה למידע באפליקציה. כל המידע נשמר על המכשיר בלבד.
המקרה היחידי בו משותף מידע הוא במקרה בו משתמש האפליקציה נמצא חיובי לקורונה וכחלק מהחקירה האפידמיולוגית בוחר לשתף את המידע עם משרד הבריאות בצורה וולונטרית.
התהליך דורש הסכמה מפורשת ואקטיבית של המשתמש במסך ייעודי של העלאת מידע למשרד הבריאות שהגישה אליו ניתנת רק כחלק מהחקירה.
3. כל הקוד מפורסם ב- GitHub. זאת, למעט – צד השרת שכולל את קובץ המידע על מסלולים שהאפליקציה מושכת וכן קובצי קונפיגורציה ותרגומים. כמו כן, מטפל השרת בנושא שיתוף המסלול (המתואר בסעיף 2)
4. נודה אם הפונה יוכל לכוון אותנו לחלק בקוד אליו התכוונת על מנת שנוכל לבדוק את הנושא.
תגובת דוברות משרד הבריאות לדיווח של סייברסייבר על הבעיות בקוד יישומון המגן
זאת, למשל, דוגמה מצוינת לתגובה גרועה. ראשית – היא סותרת את עמדת הדרג המקצועי שדווקא הבין מיד, קיבל אחריות, והבטיח לתקן (ועל כך בהמשך), ושנית – היא מסתירה מידע שלא ברור מה האינטרס להכמין. שאלנו במפורש אילו חברות מסחריות היו שותפות לפיתוח האפליקציה בגלל שראינו בקוד את מרחב הכתובות המסחרי של חברת וויקס (Wix). מדוע בחר הדובר להסתיר את מעורבותם של עובדי החברה, למרות שהקוד עצמו לכאורה שייך לה? לא ברור. כנראה המשך ישיר את המקצוענות המתפרצת בעבודת המשרד.
Profero, חברת הסייבראבטחה של חוקר האבטחה עמרי שגב מויאל, בדקה עבור משרד הבריאות את הגירסה הראשונית של המגן ואישרה שזו אכן תואמת לקוד בגיטהאב. אבל המשרד המשיך בפיתוח ופרופרו לא היתה מעורבת בתהליך. מפרופרו נמסר בתגובה:
אנו בפרופרו שמחנו לקחת חלק בהליך הבקרה על האפליקציה בגרסתה הראשונה ואימוצה על ידי הקהילה, הציבור ושחרורה כקוד פתוח. תווך מרכזי בקוד פתוח הינו תרומה מכל חברי הקהילה, כולל חברות מסחריות – אך הוא נשען על שחרור מלא של הקוד, ללא שימוש בקוד סגור (או קנייני) של גופים פרטיים.
חברת פרופרו מתנגדת לחוסר שקיפות באופן כללי וספציפית באפליקציה חשובה כמו "המגן".
אנו שמחים כי האפליקציה שוחררה כקוד פתוח ומאפשרת לכל אחד לוודא ולחקור מה קורה בפועל. לא ניתן להסתיר מחוקרי האבטחה מה האפליקציה עושה בפועל – ואנו מברכים על כל ביקורת בלתי תלויה.
אנו מצפים מכל מובילי הפרוייקט בקהילה ובעלי התפקידים במשרד הבריאות לתקן מיידית את הפערים שהתגלו ולוודא כי לא יקרו שוב.
תגובת פרופרו
עם זאת, לא הכל רע. בעקבות פנייתנו דרך חברים מקורבים, במשרד הבחינו והכירו בקטסטרופה, ומרגע שזה קרה – החלו לפעול לתיקון הנהלים והתהליכים על מנת שטעות כזו לא תשנה. במהלך הבירור דיברנו עם שתיים ממובילות הפרויקט – סבטה מורג, CTO משרד הבריאות, ושרית דשא מנהלת הפיתוח של הפרויקט, ושתיהן אישרו את חומרת הממצאים והבטיחו לתקן את הקוד והתהליכים הנדרשים. ואכן, זמן קצר לאחר מכן התחילו להופיע במאגר הקוד הפתוח בקשות לשינויים שיש לבצע על מנת לגרום לזה לקרות.
אמון נמדד גם בנכונות לתקן, וכאן נשות משרד הבריאות עשו עבודה באמת מעולה: קיבלו את האחריות על הטעויות ופעלו באופן מהיר ויעיל לתיקון. תכלס, זה הרבה מעבר למה שעושים ברוב המקומות האחרים להם אנחנו מאסגרים פרצות אבטחה, חולשות וטעויות.
חשוב להבהיר שאיש לא חושב שמדובר פה במזימה מרושעת שנועדה לגרום לאזרחים להתקין אפליקציה זדונית, וכי לרוב הדברים יש הסבר מניח את הדעת שמקורו ברשלנות ממשלתית רגילה שמקורה בהעדר תהליכי פיתוח נכונים ובלחץ הגדול המופעל על חברות וחברי הפרויקט, שבאמת עובדים בתנאים לא פשוטים. עם זאת, עלינו כאזרחים מוטלת החובה לבדוק את מה שנאמר לנו על ידי הממשלה ולא לקבל את הדברים כפי שהם, כי לעיתים נדירות הם באמת כאלה.
בשולי הדברים, בינתיים, נציין שהאפליקציה שמשתחררת עכשיו דילגה על שלב הבטא, החלטה מאוד בעייתית כשמדובר בפריסה רחבה כל כך, על מכשירים מסוגים רבים שאצל חלקם עדיין ישנן בעיות ביצועים קשות שיגרמו לריקון הסוללה תוך זמן קצר. לעניות דעתי היה כדאי לקחת עוד נשימה (עם מסכה, כמובן), להשקיע עוד איזה שבוע-שבועיים בתיקון הבעיות הידועות וגילוי בעיות חדשות על ידי ניסוי שטח, ורק אז לשחרר את הגרסה החדשה כשהיא יציבה יותר, בטוחה יותר, וראויה יותר לאמון המשתמשים.
המומחים מדברים
על הגרסה החדשה והפרוטוקול הקריפטוגרפי שעומד מאחוריה תוכלו לשמוע באחד הפרקים הקרובים של הפודקאסט הפופולרי סייברסייבר מפי ד"ר אייל רונן, אחד מכותבי הפרוטוקול שעומד בבסיסה.
ביום שלישי תוכלו להשתתף בסמינר וירטואלי על איתור מגעים ופרטיות, בהשתתפות ד"ר אייל רונן, סבטה מורג ממשרד הבריאות, ד"ר ערן טוך מאוניברסיטת ת"א וד"ר תהילה שוורץ אלטשולר מהמכון הישראלי לדמוקרטיה. רישום להשתתפות בזום, צפייה בשידורשת חי ביוטיוב.
נעם רותם מפצח אתרים כי פיצוחים זה משמין