คุณจะเปิดกระบวนการและทำให้มันมองไม่เห็นtop
คำสั่งได้อย่างไร กระบวนการเริ่มต้นโดยผู้ใช้ปกติ (ไม่ใช่รูท) และผู้ใช้ปกติรายอื่นไม่ควรมองเห็น
คุณจะเปิดกระบวนการและทำให้มันมองไม่เห็นtop
คำสั่งได้อย่างไร กระบวนการเริ่มต้นโดยผู้ใช้ปกติ (ไม่ใช่รูท) และผู้ใช้ปกติรายอื่นไม่ควรมองเห็น
คำตอบ:
เคอร์เนล Linux ตั้งแต่ 3.3 มีการสนับสนุนสำหรับการซ่อนกระบวนการกับผู้ใช้รายอื่น
จะทำโดยการhidepid=
และgid=
ติดตั้งตัวเลือกสำหรับการ proc / ตามที่อธิบายในที่สอดคล้องกันกระทำและเอกสาร / filesystems / proc.txt
Debian Wheezy ยังมีคุณสมบัตินี้
top
คำสั่งอ่านข้อมูลจาก proc ซึ่งมีให้โดยตรงจากเมล็ด เพื่อซ่อนกระบวนการคุณต้องใช้รหัสภายในเคอร์เนลเพื่อทำการปิดบัง
นอกเหนือจากการใช้กรอบความปลอดภัยเช่น SELinux และ grsecurity (กล่าวถึงในคำตอบอื่น ๆ ) รหัสสไตล์ rootkit เป็นตัวเลือกเดียวที่เหลืออยู่ของคุณ ฉันพูดว่า "style" เพราะ "rootkit" โดยตัวมันเองไม่ได้เลวร้ายมันเป็นวิธีการใช้งานของมัน มีเหตุผลที่สมบูรณ์แบบที่อยู่เบื้องหลังการซ่อนกระบวนการจากผู้ใช้รายอื่นซึ่งเป็นสาเหตุที่ความสามารถนี้มีอยู่ในกรอบความปลอดภัย
เส้นทางพื้นฐานที่คุณต้องปฏิบัติตามเพื่อให้สิ่งนี้ทำงานได้คือการขอเข้าสู่ (หรือจี้ขึ้นอยู่กับว่าคุณมองอย่างไร) ฟังก์ชันในเคอร์เนล linux ที่แจก/proc/pid/
ข้อมูล ฉันแสดงให้เห็นถึงวิธีการหนึ่งของ hooking ลงในฟังก์ชั่นเคอร์เนล linux ในโมดูลความปลอดภัยฉันเขียน
https://github.com/cormander/tpe-lkm
รหัส "ระดับสูง" สำหรับสิ่งนี้อยู่ในhijack_syscalls()
วิธีการsecurity.c
และเวทมนต์รายละเอียดอยู่ด้านหลังมันอยู่ในhijacks.c
ไฟล์
คุณอาจจะพบฟังก์ชั่นที่คุณต้องการเชื่อมโยงไปยังในfs/proc/
ไดเรกทอรีของซอร์สโค้ดของเคอร์เนล linux โปรดทราบว่า linux ไม่ได้จัดเตรียม ABI ที่มีความเสถียรดังนั้นรหัสของคุณจะต้องเปลี่ยนแปลงบ้างเพื่อให้มันทำงานในเคอร์เนลรุ่นต่าง ๆ ของ linux นอกจากนี้โปรดทราบว่าคุณต้องมีสิทธิ์เข้าถึงรูทเครื่องอย่างเต็มที่เพื่อให้สามารถแทรกรหัสนี้ได้
UPDATE:
หากคุณหุ้มpid_getattr
สัญลักษณ์เคอร์เนลด้วยรหัสเพิ่มเติมบางอย่างมันเป็นเรื่องง่ายที่จะทำ ฉันเพิ่งเพิ่มสิ่งที่ซ่อนกระบวนการในโมดูลเคอร์เนลดังกล่าว:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
คุณสามารถทำสิ่งที่คล้ายกันได้โดยทำให้กระบวนการของผู้ใช้หรือกลุ่มที่ไม่สามารถดูได้โดยใครก็ตามยกเว้นผู้ใช้รูทและผู้ใช้นั้น การทำตามชื่อกระบวนการนั้นซับซ้อนกว่าเล็กน้อย แต่เป็นไปได้ ดูที่exe_from_mm()
ฟังก์ชั่น pid_getattr
โปรดทราบว่าอาจจะมีผลกระทบต่อประสิทธิภาพการทำงานของการใช้มันภายในของ
ดูเหมือนว่าสองตัวเลือกหลัก
เซลินุกซ์ทำงานโดยนำผู้คนที่แตกต่างกันไปไว้ในโดเมนความปลอดภัยที่แตกต่างกันและในความหมายก็คือการชกมวยพวกเขาดังนั้นพวกเขาจึงไม่สามารถเห็นกันและกันได้ คำถามนี้ครอบคลุมในคำถามนี้ ตั้งแต่ selinux กลายเป็นกรอบความปลอดภัยแบบพฤตินัยอย่างรวดเร็วในโลก Linux นี่อาจเป็นทิศทางที่คุณควรมอง
อีกสิ่งหนึ่งคือความมั่นคงตามที่กล่าวไว้โดย marioosh และตามที่ถามในคำถามนี้ distros บางตัวมีแพ็คเกจเคอร์เนลสำรองที่มีการใช้แพตช์ grsecurity หากคุณมีสิ่งนี้คุณอาจใช้มัน
ถ้าด้วยเหตุผลบางอย่างที่คุณต้องการทำโดยไม่เพิ่มกรอบความปลอดภัยเช่น selinux หรือ grsecurity โปรดอธิบายว่าคุณกำลังทำอะไรอยู่ไม่ได้เขียน root-kit
มันไม่ง่ายเลยบนกล่อง linux มาตรฐาน ดูที่grsecurityแต่ต้องการ patching kernel เป็นต้น
คุณสามารถแทนที่ argv ของคุณ [0] ด้วยชื่ออื่น ... แต่พูดอย่างเคร่งครัดคุณกำลังมองหารูทคิทบางชนิด สิ่งนี้อาจช่วยคุณได้: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
คุณสามารถเขียนคำสั่งเทียบเท่าที่ทำงานเหมือนtop
แต่ไม่แสดงกระบวนการที่ตรงกับชื่อเฉพาะ หรือคุณสามารถรับซอร์สโค้ดของtop
คำสั่งและแก้ไขได้ จากนั้นคุณสามารถแทนที่top
คำสั่งใน/usr/sbin
(หรือที่ใดก็ได้) ด้วยเวอร์ชันของคุณ
top
คำสั่งได้อย่างไร
this_is_not_the_process_you_are_looking_for
?