การเฝ้าดูความสมบูรณ์ตอบคำถามที่ทั้งแอนติไวรัสและไฟร์วอลล์ไม่ตอบ: ตั้งแต่สัปดาห์ที่แล้วมีอะไรเปลี่ยนไปบนเซิร์ฟเวอร์นี้ ตัวสแกนลายเซ็นมองหาสิ่งที่รู้ว่าไม่ดี 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 ทันทีนั้นไม่ยากเลยสำหรับเขา — และการตรวจหลังจากนั้นก็จะรายงานว่าทุกอย่างเรียบร้อย ฐานข้อมูลที่อยู่บนเครื่องเดียวกันและเขียนได้ป้องกันได้แค่อุบัติเหตุเท่านั้น

ขั้นต่ำที่สมเหตุสมผลสำหรับเซิร์ฟเวอร์เครื่องเดียว:

  • คัดลอกฐานข้อมูลไปเครื่องอื่นหลังการอัปเดตทุกครั้ง แล้วรันการตรวจโดยวางสำเนานั้นกลับเข้าที่;
  • หรืออย่างน้อยเก็บ checksum ของฐานข้อมูลไว้แยกต่างหากและตรวจสอบก่อนการตรวจ:
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 เทียบกับ checksum ในแพ็กเกจของดิสทริบิวชัน — จึงเห็นไฟล์ระบบที่ถูกแทนที่โดยไม่ต้องตั้งค่าอะไรล่วงหน้าเลย แต่ไม่รู้อะไรเลยเกี่ยวกับสิ่งที่คุณติดตั้งนอกแพ็กเกจ การเก็บไว้ทั้งคู่นั้นสมเหตุสมผล ในทางปฏิบัติ debsums มักถูกติดตั้งก่อน เพราะมันไม่ต้องการทั้งการตั้งค่าและฐานข้อมูล

พวกมันยังมีจุดอ่อนร่วมกันหนึ่งอย่าง: รายงานมาทางเมล และเมลก็หายไป ดังนั้นสิ่งสำคัญไม่ใช่ว่าการตรวจได้รันไปแล้ว แต่คือการมีที่ที่มองเห็นผลลัพธ์ล่าสุดของมันได้ ภาพนั้นเป็นอย่างไรดูได้ที่หน้าเดโมด้านล่าง