נתחיל בתיקון של תמונה אחת שיושבת לרוב האנשים בראש.
אף אחד לא יושב מול המסך ומנסה לפרוץ דווקא לאתר שלכם. אתם לא מעניינים מספיק, וזו בשורה טובה.
מה שכן קורה הוא אחר לגמרי: סקריפט אוטומטי עובר על עשרות אלפי אתרים בשעה, בודק בכל אחד את אותה רשימה קצרה של חולשות מוכרות, ועוצר רק במקום שבו משהו נענה. זה לא אישי. זה נפח.
סריקה אוטומטית של אתר היא תהליך שבו בוט אוסף מידע גלוי - מערכת הניהול וגרסתה, רשימת התוספים, שמות משתמש ונתיבים פתוחים - ומצליב אותו מול מאגר חולשות ידועות, כדי לזהות אם באתר קיים רכיב שלא עודכן.
הפוסט הזה עובר על מה שבאמת גלוי באתר שלכם מבחוץ, ומה סוגרים - לפי סדר.
מה שרואים מבחוץ בלי להיכנס לשום מקום
כל אתר משדר עליו מידע לכל מי שמבקש. זה לא פרצה, זו ברירת מחדל. השאלה היחידה היא כמה מזה נחוץ.
1. איזו מערכת ואיזו גרסה
וורדפרס, ורוב מערכות הניהול, מציינות את עצמן ואת הגרסה במקומות קבועים - בתגית מטא בקוד העמוד, ובקישורים לקבצי הסגנון והסקריפטים.
למה זה משנה: גרסה מדויקת מאפשרת לבוט לדעת אם קיימת חולשה מתועדת באותה גרסה בלי לנסות כלום. הוא לא בודק את האתר שלכם. הוא בודק רשימה.
2. אילו תוספים מותקנים ובאיזו גרסה
כל תוסף שטוען קובץ CSS או JS משאיר את שמו בקוד העמוד, ולרוב גם את מספר הגרסה בסוף הכתובת.
וזה החלק המעניין: רוב הפריצות לאתרים לא מגיעות דרך הליבה של וורדפרס. הן מגיעות דרך תוסף שלא עודכן שנה וחצי, או תוסף שהמפתח שלו פשוט הפסיק לתחזק.
הקיר של האתר שלכם חזק כמו התוסף הכי מוזנח שמותקן בו.
3. שמות משתמש
שם המשתמש שלכם לרוב גלוי - הוא מופיע בשם הכותב מתחת לפוסטים, בכתובות של עמודי מחבר, ולעיתים גם דרך ממשקים סטנדרטיים של המערכת.
שם משתמש גלוי הוא חצי מהעבודה. את החצי השני בוט מנסה להשלים בכוח, בניסיונות התחברות חוזרים.
4. נתיבים שפתוחים כברירת מחדל
עמוד ההתחברות, ממשקי ה-API של המערכת וכמה נתיבים ותיקים פתוחים כברירת מחדל בכל התקנה. הם קיימים אצל כולם, ולכן הבוטים יודעים בדיוק לאן לפנות בלי לחפש.
הם לא חייבים להיסגר. הם חייבים להיות מוגבלים בקצב, כך שמי שמנסה מאה פעמים בדקה ייעצר אחרי השנייה או השלישית.
5. מה שנשאר מאחור
הקטגוריה שהכי קל לתקן והכי הרבה אתרים נכשלים בה: קבצים ותיקיות שנשארו מסביבת הפיתוח.
גיבוי ישן ששמור בשורש האתר, תיקיית בדיקות, קובץ הגדרות עם פרטי חיבור, או הודעת שגיאה מפורטת שמציגה נתיב מלא בשרת. כל אחד מאלה שווה יותר לתוקף מכל חולשה טכנית, כי הוא לא דורש שום מאמץ.
איך נראית התקפה אמיתית ביומיום
לא דרמטית. זה הדבר הראשון שמפתיע.
הנה דפוס שחוזר על עצמו, מתוך טיפול באתר של לקוחה:
- כל שתי דקות - בקשת איפוס סיסמא נשלחת דרך הטופס הסטנדרטי של המערכת.
- הכתובות - לא של גולשים, אלא של שרתי ענן מוכרים. אלה מכונות שנשכרו לצורך הסריקה.
- ההשפעה המיידית - מיילים שנשלחים מהשרת בלי הפסקה, עומס, והדירוג של הדומיין כשולח מיילים מתחיל ליפול.
- מה שלא קרה - אף אחד לא נכנס. הבוט לא ידע סיסמא, הוא רק ניסה למצות את המנגנון.
הפתרון לא היה תוסף כבד. הוא היה שלושה דברים קטנים: הגבלת קצב על אותו נתיב ספציפי, חסימה של טווחי הכתובות של אותם ספקי ענן, ונעילה אוטומטית אחרי מספר ניסיונות.
הרעש נפסק באותו יום.
מה סוגרים, לפי סדר
סדר החיסון של אתר נקבע לפי מה שנוצל בפועל ולא לפי מה שנשמע מפחיד: קודם עדכונים ומשתמשים, אחר כך הגבלת קצב על נתיבי ההתחברות, אחר כך ניקוי שאריות פיתוח, ורק בסוף שכבות הגנה מתקדמות.
- עדכונים. ליבה, תוספים ותבנית. ותוסף שלא קיבל עדכון שנה - להסיר, לא להשאיר "ליתר ביטחון". תוסף לא פעיל הוא עדיין קוד שיושב על השרת.
- משתמשים. לעבור על רשימת המשתמשים ולמחוק את כל מי שלא עובד אצלכם יותר. מפתח שסיים פרויקט לפני שנתיים לא צריך גישת מנהל.
- הרשאות. לא כולם מנהלי מערכת. מי שרק כותב תוכן מקבל הרשאת כותב, וזהו.
- אימות דו-שלבי לכל מי שיש לו גישת ניהול. זו ההגנה היחידה ברשימה שעוצרת גם סיסמא שדלפה.
- הגבלת קצב ונעילה על התחברות ועל איפוס סיסמא. זה מה שהופך ניסיון אוטומטי מבעיה לרעש שולי.
- ניקוי שאריות. גיבויים, תיקיות בדיקה, קבצי הגדרות ישנים - הכל יורד מהשרת ועובר לאחסון נפרד.
- גיבוי אוטומטי שנשמר מחוץ לשרת, ושמישהו בדק פעם אחת שהוא באמת ניתן לשחזור. גיבוי שלא נבדק הוא לא גיבוי.
- יומן פעילות. אחרי אירוע, ההבדל בין שעה לשבוע של עבודה הוא האם יש לכם רישום של מי עשה מה ומתי.
שמונה השורות האלה מכסות את רוב מה שבאמת קורה לאתרים קטנים ובינוניים. כל מה שמעבר להן הוא שכבה נוספת, לא תחליף.
למה חסימת מדינות היא לא תמיד הפתרון
העצה הנפוצה היא לחסום מדינות שמהן לא מגיעים לקוחות. היא נשמעת הגיונית והיא לפעמים נכונה - אבל לא תמיד.
שתי בעיות. הראשונה, עסק שמשווק גם מחוץ למדינה אחת לא יכול לחסום לפי מפה בלי לחסום לקוחות אמיתיים. השנייה, והמשמעותית יותר, היא שרוב הסריקות מגיעות ממילא משרתי ענן שיושבים פיזית בארצות הברית ובאירופה - בדיוק המקומות שלא תחסמו.
חסימה לפי רשת נותנת תוצאה טובה בהרבה מחסימה לפי מדינה. טווחי כתובות של ספקי ענן הם מקום שממנו כמעט אף לקוח אמיתי לא גולש, והם המקור של חלק ניכר מהתנועה האוטומטית.
מה תוסף אבטחה לא עושה בשבילכם
תוסף אבטחה הוא כלי טוב. הוא לא ביטוח.
הוא לא יעדכן בשבילכם תוסף נטוש. הוא לא ימחק משתמש מיותר. הוא לא ידע שהגיבוי שלכם מושחת, ולא יסיר קובץ שהשארתם בשורש האתר לפני שנה.
מה שהוא כן עושה טוב: מגביל קצב, נועל אחרי ניסיונות כושלים, מתריע, ומייצר יומן. ארבעת אלה שווים הרבה - בדיוק בתנאי שמישהו קורא את ההתראות.
ועוד נקודה מהשטח: יותר מדי תוספי אבטחה מותקנים יחד יוצרים התנגשויות, ולפעמים אפילו מערכת ההגנה של השרת מסמנת קוד לגיטימי של תוסף כזדוני בגלל מחרוזות שנראות לה חשודות. תוסף אחד שמוגדר נכון עדיף על שלושה שמותקנים "ליתר ביטחון".
בדיקה של עשר דקות
אפשר לעשות את זה עכשיו, בלי כלים מיוחדים:
- כמה תוספים מותקנים, וכמה מהם לא קיבלו עדכון בשנה האחרונה?
- כמה משתמשים עם הרשאת מנהל קיימים, וכמה מהם עובדים אצלכם היום?
- יש אימות דו-שלבי על חשבון המנהל?
- מה קורה אחרי חמישה ניסיונות התחברות שגויים? אם כלום - זו הנקודה הפתוחה.
- מתי בפעם האחרונה מישהו שחזר גיבוי כדי לוודא שהוא עובד?
- יש קובץ או תיקייה בשורש האתר שאתם לא יודעים למה הם שם?
שלוש תשובות בעייתיות ומעלה - יש מה לסדר, וזה עדיין נמדד בשעות ולא בשבועות.
שורה תחתונה
אבטחה של אתר עסקי קטן היא לא מלחמה מול האקרים. היא תחזוקה מול מכונות.
הבוטים לא מחפשים את האתר החלש ביותר ברשת. הם מחפשים את הראשון שעונה. אתר מעודכן, עם הרשאות נקיות והגבלת קצב, פשוט לא עונה - והסקריפט ממשיך לכתובת הבאה.
זה לא מרשים. זה גם מה שעובד.
רוצים שנעבור על האתר שלכם ונגיד לכם מה פתוח? ←
שאלות נפוצות
למה שמישהו יתקוף אתר קטן?
ברוב המקרים המטרה היא לא אתם. אתר שנפרץ משמש להפצת דואר זבל, להפניית מבקרים לאתרים אחרים, או כמשאב לשרשרת התקפות. ככה אתר של עסק קטן הופך למטרה שווה בדיוק כמו כל אתר אחר.
וורדפרס פחות בטוח ממערכות אחרות?
לא מהותית. הוא הנפוץ ביותר, ולכן הכי נסרק. רוב האירועים מקורם בתוסף לא מעודכן או בסיסמא חלשה, ושניהם לא ייחודיים לפלטפורמה אחת.
יש לי SSL. זה לא מספיק?
SSL מצפין את התעבורה בין הגולש לאתר. הוא לא מונע התחברות עם סיסמא שנוחשה, ולא מגן על תוסף עם חולשה ידועה. הוא נחוץ, והוא לא קשור לשכבה שהפוסט הזה מדבר עליה.
כמה עולה לאבטח אתר קיים?
סבב חיסון בסיסי - עדכונים, ניקוי משתמשים, הגבלת קצב, גיבוי מסודר ויומן פעילות - הוא פרויקט קטן שנמסר תוך 3-5 ימים. מעקב שוטף אחרי כן הוא שירות חודשי נפרד.
פרצו לי לאתר. מה עושים ראשון?
לא מוחקים כלום. מורידים את האתר למצב תחזוקה, מחליפים סיסמאות לכל בעלי ההרשאות ולמסד הנתונים, ורק אחר כך מתחילים לבדוק. מחיקה מהירה משמידה בדיוק את המידע שנדרש כדי להבין איך זה קרה ולמנוע חזרה.
אפשר לדעת אם האתר שלי כבר נפרץ?
סימנים נפוצים: קבצים שהשתנו בתאריך שאתם לא מזהים, משתמש מנהל שלא אתם יצרתם, הפניות אוטומטיות למקומות זרים, ירידה חדה בדירוגים, או התראה מספק האחסון. אם משהו מאלה קיים, כדאי לבדוק לעומק ולא להניח שזה באג.