ค้นหาเว็บไซต์

เรียนรู้การตรวจสอบระบบ Linux ด้วยเครื่องมือ Auditd บน CentOS/RHEL


การตรวจสอบระบบหมายถึงการวิเคราะห์เชิงลึกของระบบเป้าหมายเฉพาะ การตรวจสอบประกอบด้วยการตรวจสอบส่วนต่างๆ ซึ่งประกอบด้วยระบบนั้น พร้อมด้วยการประเมินที่สำคัญ (และการทดสอบหากจำเป็น) ในด้านต่างๆ ที่น่าสนใจ

อ่านเพิ่มเติม: Lynis – เครื่องมือตรวจสอบและสแกนความปลอดภัยสำหรับระบบ Linux

หนึ่งในระบบย่อยที่สำคัญบน RHEL/CentOS ซึ่งเป็นระบบตรวจสอบ Linux ที่รู้จักกันทั่วไปในชื่อ auditd ใช้วิธีการติดตามข้อมูลที่เกี่ยวข้องกับความปลอดภัยบนระบบ: ใช้กฎที่กำหนดไว้ล่วงหน้าเพื่อรวบรวมข้อมูลจำนวนมหาศาลเกี่ยวกับเหตุการณ์ที่เกิดขึ้นบนระบบ และบันทึกไว้ในไฟล์บันทึก ซึ่งทำให้เกิดการทดลองตรวจสอบ

สามารถบันทึกข้อมูล เช่น วันที่ เวลา ประเภท และผลลัพธ์ของเหตุการณ์ ผู้ใช้ที่ทำให้เกิดเหตุการณ์ การแก้ไขใดๆ ที่เกิดขึ้นกับไฟล์/ฐานข้อมูล การใช้กลไกการรับรองความถูกต้องของระบบ เช่น PAM, LDAP, SSH และอื่นๆ

Auditd ยังบันทึกการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับไฟล์การกำหนดค่าการตรวจสอบ หรือความพยายามในการเข้าถึงไฟล์บันทึกการตรวจสอบ และความพยายามใดๆ ในการนำเข้าหรือส่งออกข้อมูลเข้าหรือออกจากระบบ รวมถึงข้อมูลที่เกี่ยวข้องกับความปลอดภัยอื่นๆ อีกมากมาย

เหตุใดระบบตรวจสอบ Linux จึงมีความสำคัญ

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

ส่วนประกอบของระบบตรวจสอบ Linux

ระบบการตรวจสอบมีองค์ประกอบหลัก 2 ส่วน ได้แก่

  • แอปพลิเคชันพื้นที่ผู้ใช้และยูทิลิตี้/เครื่องมือ และ
  • การประมวลผลการเรียกของระบบฝั่งเคอร์เนล – ยอมรับการเรียกของระบบจากแอปพลิเคชันพื้นที่ผู้ใช้และส่งผ่านตัวกรองสามประเภท ได้แก่: ผู้ใช้, งาน, ออก< หรือ ยกเว้น

ส่วนที่สำคัญที่สุดคือ พื้นที่ผู้ใช้ ดีมอนตรวจสอบ (auditd) ซึ่งรวบรวมข้อมูลตามกฎที่กำหนดค่าไว้ล่วงหน้าจากเคอร์เนลและสร้างรายการในไฟล์บันทึก: บันทึกเริ่มต้นคือ /var/log/audit/audit.log

นอกจากนี้ audispd (audit Dispatcher Daemon) ยังเป็นมัลติเพล็กเซอร์เหตุการณ์ที่โต้ตอบกับ auditd และส่งเหตุการณ์ไปยังโปรแกรมอื่นที่ต้องการดำเนินการแบบเรียลไทม์ การประมวลผลเหตุการณ์

มีเครื่องมือพื้นที่ผู้ใช้จำนวนหนึ่งสำหรับการจัดการและดึงข้อมูลจากระบบการตรวจสอบ:

  • auditctl – ยูทิลิตี้สำหรับควบคุมระบบการตรวจสอบของเคอร์เนล
  • ausearch – ยูทิลิตี้สำหรับค้นหาไฟล์บันทึกการตรวจสอบสำหรับเหตุการณ์เฉพาะ
  • aureport – ยูทิลิตี้สำหรับสร้างรายงานเหตุการณ์ที่บันทึกไว้

วิธีติดตั้งและกำหนดค่าเครื่องมือตรวจสอบใน RHEL/CentOS/Fedora

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

rpm -qa | grep audit

หากคุณไม่ได้ติดตั้งแพ็คเกจข้างต้น ให้รันคำสั่งนี้ในฐานะผู้ใช้รูทเพื่อติดตั้ง

yum install audit

จากนั้น ตรวจสอบว่า auditd เปิดใช้งานและทำงานอยู่หรือไม่ ให้ออกคำสั่ง systemctl ด้านล่างบนเทอร์มินัล

--------------- On CentOS/RHEL 7 --------------- 
systemctl is-enabled auditd
systemctl status auditd
systemctl start auditd   [Start]
systemctl enable auditd  [Enable]

--------------- On CentOS/RHEL 6 --------------- 
service auditd status
service auditd start     [Start]
chkconfig auditd on      [Enable]

ตอนนี้เราจะดูวิธีกำหนดค่า auditd โดยใช้ไฟล์การกำหนดค่าหลัก /etc/audit/auditd.conf พารามิเตอร์ที่นี่ช่วยให้คุณสามารถควบคุมวิธีการทำงานของบริการได้ เช่น การกำหนดตำแหน่งของไฟล์บันทึก จำนวนไฟล์บันทึกสูงสุด รูปแบบบันทึก วิธีจัดการกับดิสก์ทั้งหมด การหมุนเวียนบันทึก และตัวเลือกอื่นๆ อีกมากมาย

vi /etc/audit/auditd.conf

จากผลลัพธ์ตัวอย่างด้านล่าง พารามิเตอร์ต่างๆ อธิบายได้ในตัว

ทำความเข้าใจกฎการตรวจสอบ

ดังที่เราได้กล่าวไว้ก่อนหน้านี้ auditd ใช้กฎเพื่อรวบรวมข้อมูลเฉพาะจากเคอร์เนล กฎเหล่านี้โดยพื้นฐานแล้วคือตัวเลือก auditctl (ดูหน้าคู่มือ) ที่คุณสามารถกำหนดค่ากฎล่วงหน้าในไฟล์ /etc/audit/rules.d/audit.rules (บน CentOS 6 ให้ใช้ไฟล์ /etc/audit/audit.rules) เพื่อให้โหลดเมื่อเริ่มต้นระบบ

มีกฎการตรวจสอบสามประเภทที่คุณสามารถกำหนดได้:

  • กฎการควบคุม – ช่วยให้สามารถปรับเปลี่ยนพฤติกรรมของระบบการตรวจสอบและการกำหนดค่าบางอย่างได้
  • กฎของระบบไฟล์ (หรือเรียกว่าการเฝ้าดูไฟล์) – ช่วยให้สามารถตรวจสอบการเข้าถึงไฟล์หรือไดเร็กทอรีบางไฟล์ได้
  • กฎการเรียกของระบบ – อนุญาตให้บันทึกการเรียกของระบบที่ทำโดยโปรแกรมใดๆ

ตอนนี้เปิดไฟล์การกำหนดค่าหลักเพื่อแก้ไข:

vi /etc/audit/rules.d/audit.rules

โปรดทราบว่าส่วนแรกของไฟล์นี้ต้องมีกฎการควบคุม จากนั้นเพิ่มกฎการตรวจสอบของคุณ (การเฝ้าดูไฟล์และกฎการเรียกใช้ระบบ) ในส่วนตรงกลาง และส่วนสุดท้ายจะมีการตั้งค่าความไม่เปลี่ยนรูปซึ่งเป็นกฎการควบคุมด้วย

ตัวอย่างของกฎการควบคุม Auditd

-D		#removes all previous rules
-b  3074	#define buffer size
-f 4		#panic on failure 
-r 120		#create at most 120 audit messages per second

ตัวอย่างกฎระบบไฟล์ Auditd

คุณสามารถกำหนดการเฝ้าดูไฟล์ได้โดยใช้ไวยากรณ์นี้:

-w /path/to/file/or/directory -p permissions -k key_name

ตัวเลือกอยู่ที่ไหน:

  • w – ใช้เพื่อระบุไฟล์หรือไดเรกทอรีที่จะดูแล
  • p – สิทธิ์ที่จะบันทึก r – สำหรับการเข้าถึงเพื่ออ่าน w – สำหรับการเข้าถึงเพื่อเขียน x – สำหรับ ดำเนินการเข้าถึงและ a – สำหรับการเปลี่ยนแปลงไฟล์หรือแอตทริบิวต์ของผู้กำกับ
  • -k – ช่วยให้คุณสามารถตั้งค่าสตริงทางเลือกเพื่อระบุว่ากฎใด (หรือชุดของกฎ) ที่สร้างรายการบันทึกเฉพาะ

กฎเหล่านี้อนุญาตให้มีการตรวจสอบเพื่อดูเหตุการณ์ที่ทำการเปลี่ยนแปลงไฟล์ระบบที่สำคัญเหล่านี้

-w /etc/passwd -p wa -k passwd_changes
-w /etc/group -p wa -k group_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes

ตัวอย่างของกฎการโทรของระบบ Auditd

คุณสามารถตั้งค่ากฎการโทรของระบบได้โดยใช้แบบฟอร์มด้านล่าง:

-a action,filter -S system_call -F field=value -k key_name

ที่ไหน :

  • การกระทำ – มีสองค่าที่เป็นไปได้: เสมอหรือไม่เคย
  • ตัวกรอง – ระบุตัวกรองการจับคู่กฎเคอร์เนล (งาน ออก ผู้ใช้ และยกเว้น) ที่จะนำไปใช้กับเหตุการณ์
  • การเรียกของระบบ – ชื่อการเรียกของระบบ
  • ฟิลด์ – ระบุตัวเลือกเพิ่มเติม เช่น สถาปัตยกรรม, PID, GID ฯลฯ เพื่อแก้ไขกฎ

ต่อไปนี้เป็นกฎบางประการที่คุณสามารถกำหนดได้

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -S sethostname -S setdomainname -k system_locale

จากนั้นสุดท้ายให้เพิ่มการตั้งค่าความไม่เปลี่ยนรูปแบบที่ส่วนท้ายของไฟล์ เช่น:

-e 1	#enable auditing
-e 2	#make the configuration immutable -- reboot is required to change audit rules
ตัวอย่างไฟล์การกำหนดค่ากฎ Auditd

วิธีการตั้งค่ากฎ Auditd โดยใช้ยูทิลิตี้ auditctl

หรือส่งตัวเลือกไปที่ auditd ในขณะที่กำลังทำงานอยู่ โดยใช้ auditctl ดังตัวอย่างต่อไปนี้ คำสั่งเหล่านี้สามารถแทนที่กฎในไฟล์การกำหนดค่าได้

หากต้องการแสดงรายการกฎการตรวจสอบที่โหลดในปัจจุบันทั้งหมด ให้ส่งแฟล็ก -l:

auditctl -l

ต่อไป ให้ลองเพิ่มกฎสองสามข้อ:

auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/group -p wa -k group_changes
auditctl -w /etc/sudoers -p wa -k sudoers_changes
auditctl -l

ทำความเข้าใจกับไฟล์บันทึก Auditd

ข้อความการตรวจสอบทั้งหมดจะถูกบันทึกในไฟล์ /var/log/audit/audit.log ตามค่าเริ่มต้น เพื่อให้เข้าใจถึงรูปแบบรายการบันทึก เราจะโหลดกฎและตรวจสอบรายการบันทึกที่สร้างขึ้นหลังจากเหตุการณ์ที่ตรงกับกฎ

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

auditctl -w /backups/secret_files/ -p rwa -k secret_backup

ตอนนี้ เมื่อใช้บัญชีระบบอื่น ให้ลองย้ายไปยังไดเร็กทอรีด้านบนแล้วรันคำสั่ง ls:

cd /backups/secret_files/
ls

รายการบันทึกจะมีลักษณะเช่นนี้

เหตุการณ์ข้างต้นประกอบด้วยบันทึกการตรวจสอบสามประเภท อันแรกคือ type=SYSCALL:

type=SYSCALL msg=audit(1505784331.849:444): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=8ad5c0 a2=90800 a3=0 items=1 ppid=2191 pid=2680 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts1 ses=3 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="secret_backup"

รายการที่สองคือ type=CWD

type=CWD msg=audit(1505784331.849:444):  cwd="/backups/secret_files"

และอันสุดท้ายคือ type=PATH:

type=PATH msg=audit(1505784331.849:444): item=0 name="." inode=261635 dev=08:01 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:default_t:s0 objtype=NORMAL

คุณสามารถดูรายการฟิลด์เหตุการณ์ทั้งหมดได้ (เช่น msg, arch, ses ฯลฯ) และความหมายในข้อมูลอ้างอิงระบบการตรวจสอบ

นั่นคือทั้งหมดที่สำหรับตอนนี้. ในบทความถัดไป เราจะดูวิธีใช้ ausearch เพื่อสืบค้นไฟล์บันทึกการตรวจสอบ: เราจะอธิบายวิธีค้นหาข้อมูลเฉพาะจากบันทึกการตรวจสอบ หากคุณมีคำถามใด ๆ โปรดติดต่อเราผ่านทางส่วนความคิดเห็นด้านล่าง