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

จุดที่การจัดการนั้นเกิดขึ้นมีไม่มากนัก และทุกจุดตรวจได้ในไม่กี่นาที ด้านล่างคือวงจรทั้งหมดตามลำดับ

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

กลไกเก่าที่ใช้กันน้อย และด้วยเหตุนั้นจึงถูกตรวจน้อยที่สุด

ถ้าพบอะไรควรทำอย่างไร

ปฏิกิริยาแรกคือลบสิ่งที่พบทันที และนั่นคือความผิดพลาด: พร้อมกันนั้นข้อมูลว่ามันมาอยู่ตรงนั้นได้อย่างไรก็หายไปด้วย และหากไม่มีคำตอบของคำถามนั้น ทุกอย่างก็จะเกิดซ้ำ

  1. เก็บสำเนาของไฟล์หรืองานนั้นพร้อมเวลาที่มันถูกแก้ไข
  2. ใช้เวลานั้นดูในล็อกของเว็บเซิร์ฟเวอร์และใน auth.log ว่านาทีเดียวกันเกิดอะไรขึ้น จุดเข้ามักอยู่ตรงนั้น
  3. ตรวจทั้งแปดจุดในรายการ ไม่ใช่แค่จุดที่พบอะไร ประตูหลังแทบไม่เคยถูกทิ้งไว้เพียงชุดเดียว
  4. และเมื่อถึงตอนนั้นจึงค่อยทำความสะอาดและปิดช่องโหว่เอง

การรู้ว่าปกติเป็นอย่างไร

ความยากที่แท้จริงของการตรวจนี้ไม่ใช่คำสั่ง แต่คือการที่บรรทัดแปลกหน้าในรายการงานไม่ได้ดูน่าสงสัยเลยถ้าคุณจำไม่ได้ว่ารายการเดิมเป็นอย่างไร และบนเซิร์ฟเวอร์ที่คนอื่นตั้งค่าไว้ หรือที่ตั้งค่าไว้เมื่อปีที่แล้ว การแยกของตัวเองออกจากของคนอื่นแทบเป็นไปไม่ได้

จากตรงนี้จึงได้ข้อสรุปเชิงปฏิบัติ: การถ่ายสแนปช็อต «ตามที่เป็นอยู่» วันนี้มีความหมาย ตราบใดที่เซิร์ฟเวอร์ยังปกติดี รายการงาน cron ไทเมอร์ คีย์ และบริการบนเครื่องที่แข็งแรงคือมาตรฐานที่ทุกอย่างจะถูกเทียบกับมันในภายหลัง และเมื่อรวมไว้ในที่เดียวพร้อมวันที่และได้รับการปกป้อง มันก็เปลี่ยนการตามล่าประตูหลังจากการฝึกหลายชั่วโมงให้เป็นการเทียบสองรายการ ภาพนั้นเป็นอย่างไรดูได้ที่หน้าเดโมด้านล่าง