האתר שלי נפרץ: מה עושים ב‑24 השעות הראשונות

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

  • 7 דקות קריאה

בקצרה

  • לפני שמוחקים או משחזרים משהו, שומרים עותק מלא של הקבצים, של מסד הנתונים ושל הלוגים. בלי זה קשה לגלות איך נכנסו.
  • שחזור גיבוי לפני שמוצאים את הפרצה מחזיר גם אותה, והתוקף חוזר. קודם מאתרים את נקודת הכניסה, ורק אז מנקים.
  • מחליפים את כל הסיסמאות והמפתחות, כולל מפתחות ה‑salt ב‑wp-config.php, ובודקים משתמשי ניהול ומשימות מתוזמנות שהתוקף השאיר.
  • אחרי הניקוי מבקשים מגוגל בדיקה חוזרת ב‑Search Console, כדי להסיר את האזהרה מתוצאות החיפוש ומהדפדפן.

הסימנים: איך יודעים שהאתר נפרץ

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

  • הפניות לאתרי ספאם: גולשים מגיעים לאתר הימורים, תרופות או "זכיתם בפרס". לעיתים קרובות ההפניה פועלת רק על מי שמגיע מגוגל או מהנייד, ולא על מנהל מחובר, ולכן בעל האתר הוא האחרון שרואה אותה.
  • אזהרה של גוגל: בתוצאות החיפוש מופיעה מתחת לאתר הודעה בנוסח "האתר הזה עלול להיות פרוץ", או שכרום מציג מסך אזהרה אדום לפני הכניסה.
  • ספאם בתוצאות החיפוש: חיפוש site:example.co.il בגוגל מציג עמודים שלא כתבתם, לפעמים ביפנית או עם שמות של מוצרים. התוקף מציג לא פעם תוכן אחד לגוגל ותוכן אחר לגולשים, כך שבאתר עצמו לא תראו אותם.
  • משתמשי ניהול חדשים שאף אחד מכם לא יצר.
  • קבצים לא מוכרים: קובצי PHP בתיקיית ההעלאות, קבצים עם שמות אקראיים, או קבצים שנראים כמו חלק מוורדפרס אבל לא שייכים לה.
  • חברת האחסון השעתה את האתר, בדרך כלל כי יוצא ממנו ספאם או כי הוא מארח עמוד התחזות.

אם אתם רואים רק חלק מהסימנים ולא בטוחים, בדיקת האבטחה החינמית שלנו היא נקודת התחלה מהירה.

מה לא לעשות בשעות הראשונות

הלחץ דוחף לפעולות מהירות, וחלק מהן מזיקות יותר מהפריצה עצמה:

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

השעה הראשונה: לעצור את הנזק ולשמור ראיות

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

להחליף סיסמאות ומפתחות, כולל ה‑salts

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

  • כל משתמשי הניהול בוורדפרס.
  • לוח הבקרה של האחסון, FTP ו‑SSH, ומוחקים מפתחות SSH שאינכם מזהים.
  • סיסמת מסד הנתונים, ומעדכנים אותה ב‑wp-config.php.
  • תיבות הדואר של הדומיין, והחשבון אצל רשם הדומיין.
  • מפתחות API ששמורים באתר: סליקה, שליחת מיילים, שירותי ענן.

אחר כך מחליפים את מפתחות ה‑salt ב‑wp-config.php (ערכים אקראיים שוורדפרס חותם בעזרתם על עוגיות ההתחברות). ההחלפה מנתקת מיד את כל המחוברים, כולל תוקף שמחזיק עוגייה גנובה. ערכים חדשים מקבלים בכתובת api.wordpress.org/secret-key/1.1/salt, או בפקודה אחת של WP-CLI (כלי שורת הפקודה של וורדפרס):

wp config shuffle-salts

שני דברים חשובים. מחליפים סיסמאות ממחשב שאתם סומכים עליו: אם הסיסמה נגנבה על ידי תוכנה זדונית במחשב של אחד המנהלים, גם החדשה תיגנב. ואם בהמשך תמצאו דלת אחורית, שדרכה התוקף יכול היה לקרוא את wp-config.php, מחליפים את הסיסמאות שוב בסוף הניקוי.

למצוא איך נכנסו

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

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

wp core verify-checksums
wp plugin verify-checksums --all
find wp-content/uploads -name "*.php"
find . -name "*.php" -mtime -7 -ls

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

grep "POST" access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20

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

לנקות, לעדכן ולבדוק מה התוקף השאיר

קבצים

את קבצי הליבה לא מתקנים, מחליפים: wp core download --force --skip-content מוריד עותק נקי של וורדפרס מעל הקיים. קבצים מיותרים שהבדיקה דיווחה עליהם מוחקים ידנית. תוספים ותבניות מתקינים מחדש מהמקור הרשמי, ומה שלא בשימוש מוחקים. את מה שאי אפשר להחליף בודקים ידנית: מוחקים כל קובץ PHP מתיקיית ההעלאות, עוברים על wp-config.php שורה אחרי שורה, ובודקים את התיקייה mu-plugins (תוספים שנטענים תמיד ואי אפשר לכבות מלוח הבקרה) ואת כל קובצי ה‑.htaccess, מקום מועדף להפניות זדוניות.

מסד הנתונים

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

wp db search "<script" --all-tables

עדכונים

מעדכנים את וורדפרס, את כל התוספים והתבניות, ואת גרסת ה‑PHP לגרסה נתמכת. תוסף שכבר לא מקבל עדכונים מחליפים בחלופה.

משתמשים ומשימות מתוזמנות

wp user list --role=administrator --skip-plugins --skip-themes
wp cron event list
crontab -l

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

להחזיר את האמון של גוגל

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

  1. נכנסים ל‑Google Search Console (הכלי החינמי של גוגל לבעלי אתרים). אם האתר עוד לא מאומת שם, מאמתים אותו ברשומת DNS, ולא בקובץ באתר שזה עתה נוקה.
  2. בודקים בהגדרות, תחת משתמשים והרשאות (Users and permissions), שאין בעלים שאינכם מכירים. תוקפים מוסיפים את עצמם כבעלים כדי לשלוח לגוגל את עמודי הספאם שלהם. מסירים אותם, וגם את קובץ האימות או התג שהשאירו באתר.
  3. פותחים את דוח בעיות האבטחה (Security issues), ועוברים על הבעיות ועל דוגמאות הכתובות שגוגל מצא. מוודאים שכל אחת מהן נקייה.
  4. מסמנים שתיקנתם את הבעיות, ולוחצים על בקשת בדיקה (Request review). בתיאור כותבים בקצרה מה מצאתם, איך ניקיתם, ואיך סגרתם את הפרצה.

הבדיקה נמשכת בדרך כלל בין כמה ימים לכמה שבועות, לפי סוג הבעיה. עמודי ספאם שמחקתם צריכים להחזיר שגיאה 404 או 410, ואפשר להסתיר אותם זמנית מהתוצאות בכלי ההסרות (Removals) של Search Console.

איך מונעים את הפעם הבאה

  • עדכונים שוטפים של וורדפרס, התוספים, התבניות וגרסת PHP, ומחיקה של כל מה שלא בשימוש, כולל אתרים ישנים באותו חשבון.
  • אימות בשני שלבים (2FA, קוד נוסף מהטלפון בכל כניסה) לכל משתמש ניהול, וכמה שפחות מנהלים.
  • חסימת עריכת קבצים מלוח הבקרה, בשורה אחת ב‑wp-config.php: define('DISALLOW_FILE_EDIT', true);
  • הגנה ברמת השרת, שחוסמת ניסיונות ניצול וסורקת קבצים ברגע שהם נכתבים. הסברנו איך זה עובד במדריך על Imunify360.
  • גיבויים מחוץ לשרת, עם היסטוריה ארוכה: פריצה שמתגלה אחרי שלושה שבועות דורשת גיבוי מלפני שלושה שבועות.

את הרשימה המלאה תמצאו ברשימת התיוג לאבטחת וורדפרס. ב‑אחסון הוורדפרס של MVN חלק מהשכבות האלה כבר כלולות: Imunify360, Wordfence Premium, גיבויים יומיים בשתי שכבות, וניקוי נוזקות על ידי הצוות בלי עלות נוספת.

שאלות נפוצות

איך יודעים אם האתר שלי נפרץ?

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

האם מספיק לשחזר גיבוי?

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

כמה זמן לוקח לגוגל להסיר את האזהרה?

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

האם לשלם למי שדורש כסף כדי להחזיר את האתר?

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

האם אפשר לנקות אתר פרוץ לבד?

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

למה האתר נפרץ שוב אחרי שניקיתי אותו?

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

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

רוצים שנעשה את זה בשבילכם?

ננקה את האתר ונסגור את הפרצה שדרכה נכנסו, בתשלום חד פעמי של 350₪ או 550₪, או ב‑149₪ לחודש כולל תחזוקה שוטפת.