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

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

התקנה והמאגר הראשון

sudo apt install aide aide-common
sudo aideinit

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

sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

ומשם והלאה הבדיקה מורצת כך:

sudo aide --check

מה להחריג כדי שהדוח יישאר קריא

ההגדרות נמצאות ב-/etc/aide/aide.conf ובתיקייה /etc/aide/aide.conf.d/. תצורת ברירת המחדל של Debian בודקת יותר מדי, והדבר הראשון הוא להסיר את מה שמשתנה מעצמו כל הזמן:

  • /var/log — משתנה בכל שנייה;
  • כל /var/lib — מסדי נתונים, מצב חבילות, מצב שירותים;
  • /var/cache, /tmp, /proc, /sys, /run;
  • תיקיות ההעלאות והמטמון של האתר — את תוכנן משנים המבקרים.

ומה ששווה לבדוק בהגדרות המחמירות ביותר הוא רשימה צרה:

  • /bin, /sbin, /usr/bin, /usr/sbin — קובצי ההפעלה של המערכת;
  • /lib, /usr/lib — ספריות;
  • /etc — הגדרות;
  • /root/.ssh ותיקיות .ssh של המשתמשים שלכם;
  • קוד האתר, אבל בלי תיקיות ההעלאות והמטמון.

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

איפה להחזיק את המאגר

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

מינימום סביר לשרת יחיד:

  • העתיקו את המאגר למכונה אחרת אחרי כל עדכון והריצו את הבדיקה עם העותק הזה מוצב במקומו;
  • או לפחות שמרו את סכום הביקורת של המאגר בנפרד ואמתו אותו לפני הבדיקה:
sha256sum /var/lib/aide/aide.db

אפילו אמצעי פשוט כזה הופך החלפה שקטה לאירוע מורגש.

עדכון המאגר הוא פעולה מודעת

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

sudo aide --update
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

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

לוח זמנים ועומס

החבילה aide-common מתקינה בעצמה משימה יומית. הבדיקה מעמיסה על הדיסק ועל המעבד כמה דקות, ולכן שווה להריץ אותה בשעה שקטה ובעדיפות מופחתת:

0 4 * * * ionice -c3 nice -n19 /usr/bin/aide --check

איך קוראים את הדוח

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

ולמה להגיב ראשון:

  • שינוי בכל קובץ ב-/bin, ב-/sbin, ב-/usr/bin מחוץ לחלון עדכון;
  • קבצים חדשים בתיקיות מערכת;
  • שינויים ב-authorized_keys, ב-/etc/passwd, ב-/etc/sudoers, ב-/etc/crontab וב-/etc/cron.d;
  • קובץ /etc/ld.so.preload שהופיע — הוא לעולם אינו מופיע מעצמו.

מאה קבצים שהשתנו מיד אחרי apt upgrade הם דבר נורמלי, וחותמת הזמן של הדוח מאשרת זאת. אבל שלושה קבצים שהשתנו ב-/usr/bin ביום רביעי בלי שום עדכונים הם סיבה לעצור ולבדוק.

AIDE ו-debsums

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

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