כך הממשלה הפתיעה אותי לטובה

התנהלות נכונה ונבונה של כל הגורמים גרמו לאתר ממשלתי להיות מאובטח יותר ותקין יותר
הקונגרס הציוני ה-21 שנת 1939 ג'נבה

בזמן האחרון, העולם שלי הולך ומתערער. אינטרנט אקספלורר הארור הולך ונעלם, מיקרוסופט הופכת להיות חסידת הקוד הפתוח ואף משתפת פעולה באופן נרחב עם לינוקס (הא?!? מי היה מאמין), טכנולוגיות מתחלפות, node.js הולך ומחליף את PHP, טכנולוגיות חדשות של מסדי נתונים מחליפות את ה-SQL הותיק ואפילו המכונות שאנו מפתחים עליהן משתנות לטובת docker ואחרים. אבל למרות שהכל משתנה במהירות, הייתי יכול להיות בטוח בדבר אחד: אתרי הממשלה יישארו מזעזעים בכל קנה מידה – בעיצוב, ב-UX, באיכות קוד הפרונט אנד, בביצועים וכמובן במחיר המופקע ששולם עליהם לקבלנים.

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

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

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

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

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

1. חשיפת פאנל הניהול של האתר – כפי שכל מתכנת וורדפרס יודע, ניתן לגשת לממשק הניהול של האתר באמצעות הכתובת wp-admin או wp-login.php. אחת ההמלצות בהקשחת אתר וורדפרס ובמיוחד עבור אתרים גדולים או מאוימים במיוחד (כמו כל אתר שיש לו סיומת gov il) היא לשנות את הכתובת לכתובת "סודית". למה עושים את זה? בגלל שהמון המון סקריפטים זדוניים מנסים ראשית את נקודת הכניסה הזו ואם הם לא מצליחים הם מדלגים הלאה לאתר הבא. ממשק ניהול חסוי מונע חלק גדול מכאב הראש של הסקריפטים האוטומטיים.

2. חשיפת שם משתמש שגוי – אם אני מכניס שם משתמש שגוי ככניסה לפאנל הניהול, וורדפרס משיב ש"שם המשתמש אינו תקין", דבר שמאפשר לפורץ לנחש יחסית בקלות את שם המשתמש ולהשתמש בו כבסיס ל-brute attack (אם שם המשתמש ידוע, יותר קל לנסות לפצח את הסיסמה) או בניסיונות "דיוג" (למשל לשלוח מייל "תקלה" למשתמש עם שם המשתמש שלו ולשכנע אותו להקליד את הסיסמה). כל ממשקי הניהול אמורים לציין "שם המשתמש או הסיסמה אינם נכונים" ולא לפרט מה מהם לא נכון.

3. השארת עמוד 'שלום עולם' p=1 – בכל אתר וורדפרס נוצר באופן אוטומטי דף 'שלום עולם' שהמספר המזהה שלו הוא 1. נהוג למחוק דף זה כי לעתים הוא מכיל פרטים מסגירים (כמו שם המשתמש של ה-admin) ואפשרות להכנסת תגובות שסקריפטים אוטומטיים מנצלים במיוחד אם חסמתם את התגובות משאר האתר.

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

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

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

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

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

במקרה שלנו, תוסף בשם Protect your admin ישנה את כתובת הכניסה של פאנל הניהול. Brute force login protection ימנע יותר משלוש ניסיונות כניסה לא מורשים וכן יחסום מסירת מידע על שם משתמש. זה הכל. וכמובן שישנם עוד תוספים שאפשר לבחור לסגירת חורים אחרים.

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

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

פייתון

קבצי קונפיגורציה בפואטרי

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

מיקרו בקרים

הפעלת מסך oled קטנטן עם esp32

יצירת מערכת מולטימדיה שלמה בגודל של בול דואר עם מיקרובקר ובעלות של דולרים בודדים. וגם על הדרך נלמד על ת׳רדים

פיתוח ב-JavaScript

Axios interceptors

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

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