การได้สิทธิ์เข้าถึงเป็นเพียงครึ่งงาน อีกครึ่งคือการไม่สูญเสียมันไป ด้วยเหตุนี้ซอฟต์แวร์อันตรายแบบอัตโนมัติแทบทุกตัวจึงจัดการเรื่องการกลับมารันตัวเองเป็นอย่างแรก: หลังการรีบูต หลังไฟล์ถูกลบ หลังเปลี่ยนรหัสผ่าน และจากตรงนี้ก็มาสู่เรื่องราวที่คุ้นเคย — «ทำความสะอาดแล้วสองวันต่อมามันก็กลับมาอีก»
จุดที่การจัดการนั้นเกิดขึ้นมีไม่มากนัก และทุกจุดตรวจได้ในไม่กี่นาที ด้านล่างคือวงจรทั้งหมดตามลำดับ
1. คีย์ SSH
เส้นทางกลับที่ง่ายที่สุด: บรรทัดหนึ่งใน authorized_keys รอดพ้นการเปลี่ยนรหัสผ่าน การอัปเดตระบบ และการรีบูต
sudo find /home /root -name authorized_keys -exec ls -l {} \; -exec cat {} \;
ทุกบรรทัดคือสิทธิ์เข้าถึงถาวรของใครสักคน ถ้าบอกไม่ได้ว่าของใคร ให้ถือว่าเป็นของคนอื่น สังเกตคำอธิบายที่ท้ายบรรทัดด้วย: มันเป็นข้อความอิสระ และการที่มันตรงกับชื่อของคุณก็ไม่ได้พิสูจน์อะไร
2. งาน cron ของผู้ใช้ทุกคน
ไม่ใช่แค่ตรวจ crontab ของตัวเอง:
for u in $(cut -f1 -d: /etc/passwd); do echo "== $u"; sudo crontab -u "$u" -l 2>/dev/null; done
sudo ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/
sudo cat /etc/crontab
สัญญาณที่ควรมองหา: บรรทัด @reboot คำสั่งยาวที่อ่านไม่ออก การเรียก curl หรือ wget ที่ส่งต่อเข้าเชลล์ และอะไรก็ตามที่รันจาก /tmp, /dev/shm หรือ /var/tmp ไม่มีสิ่งมาตรฐานใดรันจากไดเรกทอรีเหล่านั้น
3. ไทเมอร์และบริการของ systemd
ทางเลือกสมัยใหม่แทน cron และถูกตรวจน้อยกว่ามาก:
systemctl list-timers --all
systemctl list-units --type=service --state=running
sudo ls -la /etc/systemd/system/ /run/systemd/system/
และแยกต่างหากคือบริการของผู้ใช้ ซึ่งทำงานโดยไม่ต้องมีสิทธิ์ root และไม่ปรากฏในรายการทั่วไป:
systemctl --user list-units --type=service
sudo ls -la /home/*/.config/systemd/user/
อีกรายละเอียดหนึ่ง: lingering ที่เปิดให้ผู้ใช้คนหนึ่ง (loginctl enable-linger) ทำให้บริการของเขาทำงานได้โดยไม่ต้องมีเซสชันที่ใช้งานอยู่ ตรวจด้วย loginctl list-users
4. ไฟล์เริ่มต้นของเชลล์
โค้ดที่เพิ่มท้ายไฟล์เริ่มต้นของเชลล์จะรันทุกครั้งที่เข้าสู่ระบบ:
sudo tail -5 /root/.bashrc /root/.profile /home/*/.bashrc /home/*/.profile
sudo ls -la /etc/profile.d/
ดูที่ท้ายไฟล์พอดี — ตรงนั้นแหละที่มันถูกเพิ่มเข้าไปเพื่อไม่ให้สะดุดตาเมื่อมองผ่าน ๆ
5. ld.so.preload
ไฟล์ที่บังคับให้ระบบโหลดไลบรารีที่กำหนดเข้าไปในทุกกระบวนการที่รัน และในสภาวะปกติมันไม่เคยถูกสร้างขึ้นเลย:
ls -l /etc/ld.so.preload
การมีอยู่ของมันเป็นสัญญาณที่ไม่กำกวมของการถูกยึดครองอย่างรุนแรงในทางปฏิบัติ และไลบรารีเช่นนั้นมักซ่อนทั้งไฟล์ กระบวนการ และการเชื่อมต่อเครือข่ายไปพร้อมกัน และหลังจากนั้นสิ่งที่คุณเห็นบนเครื่องนั้นก็ไม่น่าเชื่อถืออีกต่อไป
6. hook ของตัวจัดการแพ็กเกจ
วิธีที่คนจำได้น้อยกว่า: apt สามารถรันคำสั่งก่อนและหลังการดำเนินการกับแพ็กเกจได้
sudo ls -la /etc/apt/apt.conf.d/
sudo grep -r 'DPkg::Pre-Invoke\|DPkg::Post-Invoke\|APT::Update' /etc/apt/apt.conf.d/
hook เช่นนั้นรันทุกครั้งที่ติดตั้งอัปเดต — นั่นคือเป็นประจำและในฐานะ root
7. ข้อความประจำวันใน Ubuntu
ไดเรกทอรี /etc/update-motd.d/ มีสคริปต์ปฏิบัติการที่รันทุกครั้งที่เข้าสู่ระบบผ่าน SSH และสร้างข้อความต้อนรับ และจุดนี้สะดวกพอดีเพราะมันดูเหมือนเป็นส่วนหนึ่งของระบบ:
sudo ls -la /etc/update-motd.d/
8. งาน at ที่ตั้งเวลาไว้
sudo atq
sudo ls -la /var/spool/cron/atjobs/ 2>/dev/null
กลไกเก่าที่ใช้กันน้อย และด้วยเหตุนั้นจึงถูกตรวจน้อยที่สุด
ถ้าพบอะไรควรทำอย่างไร
ปฏิกิริยาแรกคือลบสิ่งที่พบทันที และนั่นคือความผิดพลาด: พร้อมกันนั้นข้อมูลว่ามันมาอยู่ตรงนั้นได้อย่างไรก็หายไปด้วย และหากไม่มีคำตอบของคำถามนั้น ทุกอย่างก็จะเกิดซ้ำ
- เก็บสำเนาของไฟล์หรืองานนั้นพร้อมเวลาที่มันถูกแก้ไข
- ใช้เวลานั้นดูในล็อกของเว็บเซิร์ฟเวอร์และใน
auth.logว่านาทีเดียวกันเกิดอะไรขึ้น จุดเข้ามักอยู่ตรงนั้น - ตรวจทั้งแปดจุดในรายการ ไม่ใช่แค่จุดที่พบอะไร ประตูหลังแทบไม่เคยถูกทิ้งไว้เพียงชุดเดียว
- และเมื่อถึงตอนนั้นจึงค่อยทำความสะอาดและปิดช่องโหว่เอง
การรู้ว่าปกติเป็นอย่างไร
ความยากที่แท้จริงของการตรวจนี้ไม่ใช่คำสั่ง แต่คือการที่บรรทัดแปลกหน้าในรายการงานไม่ได้ดูน่าสงสัยเลยถ้าคุณจำไม่ได้ว่ารายการเดิมเป็นอย่างไร และบนเซิร์ฟเวอร์ที่คนอื่นตั้งค่าไว้ หรือที่ตั้งค่าไว้เมื่อปีที่แล้ว การแยกของตัวเองออกจากของคนอื่นแทบเป็นไปไม่ได้
จากตรงนี้จึงได้ข้อสรุปเชิงปฏิบัติ: การถ่ายสแนปช็อต «ตามที่เป็นอยู่» วันนี้มีความหมาย ตราบใดที่เซิร์ฟเวอร์ยังปกติดี รายการงาน cron ไทเมอร์ คีย์ และบริการบนเครื่องที่แข็งแรงคือมาตรฐานที่ทุกอย่างจะถูกเทียบกับมันในภายหลัง และเมื่อรวมไว้ในที่เดียวพร้อมวันที่และได้รับการปกป้อง มันก็เปลี่ยนการตามล่าประตูหลังจากการฝึกหลายชั่วโมงให้เป็นการเทียบสองรายการ ภาพนั้นเป็นอย่างไรดูได้ที่หน้าเดโมด้านล่าง