עבור לתוכן
Alex Kovalev

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

החצי החיצוני של צ׳קליסט האבטחה שלי לוורדפרס. הקלידו את כתובת האתר וראו מה כל בוט כבר רואה.

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

–ציון

עוד לא נסרק

הקלידו כתובת ולחצו סריקה. השורות למטה יתמלאו כשהתשובות יגיעו.

בדיקות

  • זה וורדפרס?

    טביעות אצבע בדף הבית.

    לא נבדק
  • HTTPS ותעודה

    האם האתר מוצפן והאם התעודה תקינה.

    לא נבדק
  • שמות משתמש ב-REST API

    האם כל אחד יכול לקבל את רשימת המשתמשים ב-/wp-json/wp/v2/users.

    לא נבדק
  • שמות משתמש דרך ?author=

    האם /?author=1 מוביל לשם משתמש.

    לא נבדק
  • XML-RPC

    האם xmlrpc.php עדיין עונה.

    לא נבדק
  • קבצים נשכחים

    גיבויי הגדרות, ‎.env, גיבויי מסד נתונים, ‎.git, ‏debug.log.

    לא נבדק
  • רשימת קבצים בהעלאות

    האם אפשר לדפדף בתיקיית ההעלאות כמו ברשימת קבצים.

    לא נבדק
  • חורים ידועים בוורדפרס הזה

    הגרסה הגלויה, מול מאגר פגיעויות.

    לא נבדק
  • תוספים עם חורים ידועים

    התוספים שדף הבית טוען והגרסאות שלהם, מול אותו מאגר.

    לא נבדק
  • תבניות עם חורים ידועים

    התבנית הפעילה (וההורה שלה), מול אותו מאגר.

    לא נבדק
  • גרסה גלויה

    האם הדף מכריז איזה וורדפרס רץ עליו.

    לא נבדק
  • כותרות אבטחה

    HSTS,‏ CSP, הגנה מקליקג׳קינג וחברים.

    לא נבדק
  • באנרים של השרת

    האם השרת מכריז על התוכנה והגרסה שלו.

    לא נבדק
  • גרסת PHP

    האם ה-PHP שהשרת מכריז עליו עדיין מקבל תיקוני אבטחה.

    לא נבדק
  • WP-Cron

    האם כל אחד יכול להפעיל את wp-cron.php.

    לא נבדק

מה שסריקה לא רואה

סמנו תוך כדי. הסימונים נשמרים רק בלשונית הזו.

לצ׳קליסט המלארק קריאה של מה שהאתר מראה לכל מבקר. מעבר ראשון, לא הוכחה לאבטחה.

איך משתמשים

5 צעדים
  1. הקלידו את כתובת האתר. example.com מספיק; נתיב אחרי הדומיין לא משנה, כי נבדקים רק דף הבית וכמה כתובות וורדפרס סטנדרטיות.
  2. סמנו את התיבה: האתר צריך להיות שלכם, או שיש לכם אישור בכתב לבדוק אותו.
  3. לחצו סריקה. זה לוקח כמה שניות ושולח לכל היותר 32 בקשות, כולן GET או HEAD רגילות.
  4. תקנו קודם את השורות האדומות. בכל אחת כתוב מה נמצא ומה לשנות, עם קישור לחלק בצ׳קליסט שמסביר למה.
  5. אחר כך עברו על מה שסריקה לא רואה: גיבויים, סיסמאות, עדכונים. שם נמצאת רוב העבודה האמיתית.

מה זה עושה

2 דקות קריאה

רוב הפריצות לוורדפרס הן לא מתוחכמות. בוט לוקח רשימה של נקודות תורפה ידועות ומנסה אותה על אלפי אתרים. הכלי הזה שואל את אותן שאלות שהבוט שואל, כדי שתראו את האתר כמו שהוא רואה אותו: האם שמות המשתמש שלכם מופיעים ב-/wp-json/wp/v2/users, האם xmlrpc.php עונה, האם הדף מכריז על גרסת הוורדפרס, והאם הגרסה הזו (או תוסף או תבנית שהדף טוען) מופיעה ברשימות פגיעויות ידועות, האם יש גיבויים או .env בתיקיית האתר, האם אפשר לדפדף בתיקיית ההעלאות, האם האתר ב-HTTPS עם תעודה תקינה, והאם כותרות האבטחה הבסיסיות מוגדרות.

הוא פסיבי בכוונה. הוא קורא רק מה שהאתר מראה לכל מבקר: בלי התחברות, בלי ניחוש סיסמאות, בלי אקספלויטים, בלי POST ל-XML-RPC ובלי להוריד את wp-config.php או גיבויים: על קבצים נשכחים הוא שואל בבקשת HEAD, שמחזירה רק כותרות. אתר שעבר את הבדיקה הוא לא „מאובטח”. פשוט אין לו דלת פתוחה לרחוב.

למה צריך כאן שרת, כשלשאר הכלים פה לא צריך: לדפדפן אסור לקרוא כותרות תשובה של אתר אחר, והכותרות הן חצי ממה שנבדק. לכן הכתובת נשלחת לסורק קטן באתר הזה. הוא מסרב לפנות לכתובות פרטיות ופנימיות, בודק כל הפניה מחדש לפני שהוא הולך אחריה, עוצר כל סריקה אחרי 32 בקשות או 30 שניות, ומאפשר רק כמה סריקות בדקה לכל מבקר, כמה סריקות לכל אתר בכל עשר דקות, ומספר קטן ביום בסך הכול. בקשה חוזרת על אותו אתר בתוך חמש דקות מציגה את אותו דוח במקום לסרוק שוב. כל סריקה משאירה שורת יומן אחת (זמן, כתובת ה-IP שלכם, האתר והציון) כדי שאפשר יהיה לזהות שימוש לרעה; היא נשמרת עם שאר יומני השרת, שנמחקים עם הזמן. בשביל שורות הפגיעויות הוא קורא את ה-readme.txt הציבורי של כל תוסף כדי לדעת איזו גרסה מותקנת, ושואל את המאגר החינמי WPVulnerability על התוסף והגרסה; הכתובת שלכם לא חלק מהשאלה.

הציון מתחיל ב-100 ומאבד נקודות על כל ממצא: 25 על שמות משתמש גלויים או גיבוי, .env או עותק הגדרות שאפשר להוריד, עד 20 על כל תוסף פגיע ו-15 על ליבה פגיעה, 10 כל אחד על XML-RPC, תיקיית העלאות פתוחה לדפדוף, גרסה גלויה, היעדר HTTPS או תעודה פגומה, ומעט על כותרות חסרות ובאנרים פטפטניים של השרת. מ-85 ומעלה זה בסיס טוב, 65 עד 84 דורש תשומת לב, ומתחת לזה סגרו קודם את הדלתות הפתוחות. ההסבר לכל שורה, וכל מה שסריקה לא רואה, נמצא בצ׳קליסט האבטחה לוורדפרס.

שאלות

5 שאלות

למה כתוב שוורדפרס לא נמצא?

הכלי מחפש טביעות אצבע של וורדפרס בדף הבית: קישורים ל-wp-content או wp-includes, תגית ה-generator, כותרת Link עם wp-json. מטמון אגרסיבי או תוסף „הסתר וורדפרס” יכולים להעלים את כולן, ווורדפרס שמותקן בתיקייה כמו /blog/ בכלל לא מופיע בדף הבית. במקרה כזה שום דבר אחר לא נבדק, והציון נשאר ריק במקום להעמיד פנים.

איך מסתירים את שמות המשתמש?

אל תחסמו את כל /wp-json/: עורך הבלוקים והרבה תוספים צריכים אותו. הגבילו רק את נתיב המשתמשים למבקרים שלא מחוברים. ברוב תוספי האבטחה יש לזה מתג, ובצ׳קליסט יש קטע קוד קצר אם לא רוצים עוד תוסף. אחר כך סרקו שוב: השורה אמורה להפוך לירוקה עם 401,‏ 403 או 404.

מה זה „לא ברור”?

האתר ענה במשהו שהבדיקה לא יודעת לקרוא: דף אתגר של חומת אש, שגיאה, זמן תגובה ארוך מדי. זה לא נספר לטובתכם או נגדכם. חומות אש כמו Cloudflare או Imunify360 עונות לסורקים אחרת מאשר לדפדפנים, אז בדקו את השורה הזו מהטרמינל שלכם, למשל curl -I https://example.com/xmlrpc.php.

הוא מציג פגיעות שכבר תיקנתי.

הגרסה נלקחת ממה שהאתר מראה: תגית ה-generator או קישורים לקבצי ליבה בשביל וורדפרס, readme.txt או קישורים לקבצים בשביל תוספים. readme שנשאר מגרסה ישנה, או תוסף מטמון שמגיש קישורים ישנים, יכולים לפגר אחרי מה שמותקן. הגרסאות האמיתיות נמצאות ב„לוח בקרה ← עדכונים”. תוספים שלא טוענים כלום בדף הבית לא נראים מכאן, אז בדקו גם אותם שם.

אפשר לסרוק אתר של מישהו אחר?

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

עוד כלים על הקיר