วิธีบันทึกการเรียกระบบทั้งหมดที่ดำเนินการโดยกระบวนการและการสืบทอดทั้งหมดที่มี auditd


13

ที่ฉันสามารถทำได้

auditctl -a always,exit -S all -F pid=1234

ในการบันทึกการโทรของระบบทั้งหมดโดย pid 1234 และ:

auditctl -a always,exit -S all -F ppid=1234

สำหรับลูกหลานของฉัน แต่ฉันจะครอบคลุมเด็กผู้ยิ่งใหญ่และลูกหลานของพวกเขาได้อย่างไร (ปัจจุบันและอนาคต)

ฉันไม่สามารถพึ่งพา (e) uid / (e) gid ที่เปลี่ยนแปลงได้

(โปรดทราบว่าการใช้straceไม่ใช่ตัวเลือกอย่างใดอย่างหนึ่ง)


4
omg, omg, omg, Stephane ถามคำถาม ... (ฉันมาที่นี่จากชื่อความคิดstrace -s^^ แต่แล้วฉันก็เห็นว่าใครกำลังถามและรู้ทันทีว่า "เขารู้แล้ว!") ... Stephane คุณช่วยได้ไหม อาจจะ: 1) สร้างรายการ pids โดยใช้ตัวเลือก "tree" ของ ps, 2) เรียกใช้ auditctl (s) บน pids ทั้งหมดที่อยู่ใน tree (เช่นคุณสามารถมีหลาย "pid = .... " หรือหลาย auditctl แต่ละต่อหนึ่งได้อย่างไร) หรือ "โง่" วิธี: auditctl ทุกอย่างและ egrep บางอย่างใน "pid | pid | pid" ถ้า พวกเขาปรากฏในแต่ละบรรทัด?) (ข้อแม้: ฉันไม่สามารถเข้าถึงลินุกซ์ atm ดังนั้นฉันจึงไม่ทราบว่าข้อมูลจะปรากฏขึ้นอย่างไร)
Olivier Dulac

เคล็ดลับที่คุณอาจใช้ (อีกครั้งฉันไม่ทราบ specifics ของ auditd และไม่สามารถลองได้ในขณะนี้): ระบุตัวแปร environnement เฉพาะเมื่อเรียกใช้ parent สูงสุดและตรวจสอบกระบวนการทั้งหมดที่มีชุดตัวแปรนี้หรือไม่
Olivier Dulac

@ OlivierDulac ทำเครื่องหมายกระบวนการในบางวิธี (นั่นคือการสืบทอดจากเด็ก) เป็นสิ่งหนึ่งที่ฉันมีอยู่ในใจ แต่รายการสิ่งที่กฎการตรวจสอบสามารถจับคู่ได้นั้นค่อนข้างบาง (ไม่ใช่แม้แต่ sid, pgid ... ) อาจเป็น SELinux แต่ฉันไม่รู้สิ่งแรกเกี่ยวกับ SELinux อาจจะทำการเว้นวรรคชื่อ?
Stéphane Chazelas

บางทีผู้ปกครองสูงสุดสามารถอยู่ในกลุ่มกระบวนการของตัวเอง? ( en.wikipedia.org/wiki/Process_group )
Olivier Dulac

2
ฉันคิดว่าอาจใช้โปรแกรมของคุณในที่เก็บเฉพาะถ้านั่นเป็นตัวเลือกสำหรับคุณ หากฉันเข้าใจข้อผิดพลาดของเธรดนี้อย่างถูกต้องนั่นควรใช้กับเคอร์เนล≥3.13 อื่น ๆ กว่าที่ฉันไม่เห็นวิธีการอื่นที่ไม่ใช่ SELinux และใด ๆการตรวจสอบ UID AUID จะสามารถใช้ได้กับกรณีการใช้งานของคุณหรือไม่?
Gilles 'SO- หยุดความชั่วร้าย'

คำตอบ:


1

เพียงแค่เสนอบางสิ่งบางอย่างโดยไม่ต้องลองเลยตอนนี้ ... แต่แค่เดาจากโพสต์เอง

นี่คือข้อเสนอการแก้ปัญหา:

สมมติว่า id กระบวนการสูงสุดเป็น $ pid และบน linux ก็ps -Tให้โครงสร้างของกระบวนการ (ฉันไม่สามารถเข้าถึง linux ได้ในขณะนี้)

for eachpid in $(ps -T "$pid" | awk '{print $1}' | grep -v 'PID')
do
   auditctl -a always,exit -S all -F pid=$eachpid  >somelog_${eachpid}.log 2>&1
done

แน่นอนแทนที่ps -T "$pid"ด้วยเทียบเท่าสำหรับ linux หากที่ไม่ทำงานบน linux (หรือค้นหาโดย awk-ing เอาท์พุท "pstree -p" pid จะอยู่ระหว่างวงเล็บ)


2
ขอบคุณ แต่นั่นไม่ได้ครอบคลุมเด็ก ๆ "ในอนาคต" และการดำเนินการแบบวนซ้ำจะไม่ครอบคลุมกระบวนการที่มีอายุสั้น และการใช้ pid ซ้ำจะทำให้เกิดปัญหาเช่นกัน
Stéphane Chazelas

ทุกจุดที่ถูกต้อง ... จากนั้นฉันเชื่อว่าสิ่งที่คุณต้องการน่าจะเป็นคุณสมบัติ "ที่ต้องการมากที่สุด" และดังนั้นจึงอาจมีอยู่ในระดับ auditctl (แต่แน่นอนว่ามันไม่ปรากฏใน manpage): อาจมี ที่จะเสนอ (หรือ ... เขียน) สำหรับรุ่นในอนาคต ฉันจำไม่ได้ว่ามีวิธี "ติดตามทรี" ของกระบวนการ ... แต่คุณสามารถนำไปใช้ทีละ 1) โดยที่สคริปต์บางตัวทำหน้าที่เทียบเท่า "ps-T" ปกติ 2) สคริปต์อื่นจะฆ่าคนที่ 1 ทันที pid ตาย 3) ทุกครั้งที่รายการ pid เปลี่ยนไป 1) เพิ่ม / ลบ auditctl สำหรับ pids เหล่านั้น? (ไม่ยากเกินไปที่จะทำ)
Olivier Dulac

1
(ความคิดเห็นล่าสุดของฉันไม่ได้แก้ pb สำหรับกระบวนการที่อายุสั้นมาก ... สิ่งนี้อาจต้องการบางสิ่งในระดับเคอร์เนลและฉันก็ไม่รู้พอที่จะบอกคุณว่ามีบางสิ่งที่มีอยู่ในนั้นหรือเปล่า รายการส่งเมลเคอร์เนล)
Olivier Dulac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.