אבטחת וורפרס – ההבדל בין אבטחת קוד להקשחה

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

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

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

אולי ההבדל בין אבטחת קוד להקשחה יהיו יותר פשוט עם דוגמה. הקשחה של וורדפרס היא התקנת תוסף שיחסום משתמש שיכניס סיסמה שגויה יותר משלוש פעמים (כדי לחסום ניסיונות של brute force attacks שבמסגרתן תוכנה כלשהי מנסה לשדר לאתר שלנו מיליוני סיסמאות כדי למצוא את הסיסמה הנכונה). אבטחת קוד היא האחריות של כותב התוסף לוודא שהקוד שהוא כתב הוא מאובטח.

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

אחרי שהבנו את גבולות הגזרה, נשאלת השאלה – איך אני יכול להקשיח את אבטחת האתר שלי?

לפני הבניה

בחירת תבניות ותוספים

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

עדכון אוטומטי של תבניות ותוספים

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

add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );

Static code analysis

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

לפני ההעלאה לאוויר

בחירת ספק אחסון נורמלי

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

אחרי ההעלאה לאוויר

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

גיבוי הקבצים ומסד הנתונים

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

הקפדה על מחשב תקין ונקי

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

  1. לעדכן את האתר אך ורק ממחשב בבעלותכם. ואם לא – לוודא שמתנתקים מהאתר בסיום העבודה.
  2. מערכת הפעלה מעודכנת ברישיון.
  3. אנטי וירוס מעודכן שרץ על המחשב.
  4. לא להשתמש בדפדפן עתיק יומין (אהם אקספלורר) ולהזהר עם התוספים שמותקנים על הדפדפן.

תוספי אבטחה ומה שהם אמורים לעשות

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

חסימת ניסיונות כניסה לא מורשים

חסימת ניסיונות הכניסה נעשית באמצעות כמה דרכים:

  1. סגירת הנתיב של wp-admin והחלפתו. כך למשל לא תוכלו להכנס אל internet-israel.com/wp-admin.
  2. חסימת IP אם משתמש ניסה להקליד יותר משלוש פעמים סיסמה לא נכונה.
  3. לודא שאין אינדיקציה על כך שרק הסיסמה לא נכונה – כלומר שאם אני מכניס שם משתמש נכון וסיסמה לא נכונה, האתר יגיד לי שרק הסיסמה לא נכונה. חשוב שהודעת השגיאה לא תחשוף מידע כזה.
  4. Two factor authentication.
  5. וידוא ששם המשתמש אינו admin.
  6. לודא שה-uid של המנהל אינו 1.
  7. בלימת יכולת עריכת קבצים מתוך וורדפרס.

בלימת בוטים אוטומטיים

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

  1. חסימה של משתמשים שמקבלים 404 יותר ממספר מסוים של פעמים – כלים אוטומטיים רבים מנסים את מזלם באיתור פרצות שונות ומשונות. איתור הפרצות מוביל הרבה פעמים לדפי 404. אם יש משתמש שמקבל יותר מ-20 פעם (למשל) 404 על דפים מסוימים, סביר להניח שהוא בוט ואפשר לחסום אותו לפרק זמן מסוים.
  2. חסימת פרוטוקולים כמו XML-RPC שמאפשרים עדכון של וורדפרס שלא באמצעות הממשק אבל 99% מהמשתמשים לא משתמשים בהם.
  3. אם אתם פונים לקהל מקומי (ישראל/ארצות הברית/אירופה) אז חסימה של IP מכל מיני מדינות מפוקפקות היא נדרשת ואף מבורכת.

בקרת משתמשים

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

  1. אכיפת ססמאות ארוכות – חשוב לי להבהיר משהו. סימנים מיוחדים, אותיות רשיות (capital letters) לא הופכים את הסיסמה שלכם ליותר מאובטחת. מה שהופך את הסיסמה לסיסמה מאובטחת היא האורך שלה. הסיסמאות שלי הן באורך של עשרים אותיות ואף יותר. הסיסמה Za#$!f הרבה יותר קלה לניחוש ב-bruteforce מ HappyPinkUnicornIsGoingAroundFarting. ההבדל ביניהן הוא שאת הסיסמה השניה הרבה יותר קל לזכור וסביר להניח שאני לא ארשום אותה בשום מקום. זו הסיבה שאם זה תלוי בי, אני מכריח את המשתמשים לכתוב ססמאות ארוכות, אבל מבחינתי שישתמשו רק באותיות.
  2. אכיפת החלפת סיסמאות מדי תקופה מסוימת.

ניטור ומעקב

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

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

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

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

ספריות ומודולים

מציאת PII באמצעות למידת מכונה

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

פתרונות ומאמרים על פיתוח אינטרנט

יישום של nonce על מנת להגן מפני התקפות injection

בפוסט הקודם הסברתי על hash עם CSP על משאבי inline – שזה נחמד ומעולה אבל פחות ישים בעולם האמיתי שבו בדרך כלל התוכן ה-inline (בין

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