จะทำให้กระบวนการมองไม่เห็นต่อผู้ใช้รายอื่นได้อย่างไร


19

คุณจะเปิดกระบวนการและทำให้มันมองไม่เห็นtopคำสั่งได้อย่างไร กระบวนการเริ่มต้นโดยผู้ใช้ปกติ (ไม่ใช่รูท) และผู้ใช้ปกติรายอื่นไม่ควรมองเห็น


1
การเอาชนะแบบนั้นเป็นการเอาชนะจุดสูงสุดและจะง่ายเกินไปที่จะถูกละเมิด ทำไมไม่เปลี่ยนชื่อเพียงแค่กระบวนการ? this_is_not_the_process_you_are_looking_for?

ฉันเห็นสิ่งที่เกี่ยวกับการซ่อนผู้ใช้?

5
โปรดบอกเราว่าคุณไม่ได้พยายามเขียนรูทคิท คุณสามารถอธิบายสถานการณ์ของคุณเพื่อให้เราสามารถแนะนำสถาปัตยกรรมความปลอดภัยที่ดีขึ้นแทนที่จะเป็นหนึ่งในพฤติกรรมที่ "ชั่วร้าย"?
Caleb

2
คุณสามารถใช้grsecurityหรือSELinux ทั้งคู่ต้องการการแทรกแซงของรากสำหรับการตั้งค่าเริ่มต้น
Gilles 'หยุดชั่วร้าย'

คำตอบ:


14

เคอร์เนล Linux ตั้งแต่ 3.3 มีการสนับสนุนสำหรับการซ่อนกระบวนการกับผู้ใช้รายอื่น

จะทำโดยการhidepid=และgid=ติดตั้งตัวเลือกสำหรับการ proc / ตามที่อธิบายในที่สอดคล้องกันกระทำและเอกสาร / filesystems / proc.txt

Debian Wheezy ยังมีคุณสมบัตินี้


11

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โปรดทราบว่าอาจจะมีผลกระทบต่อประสิทธิภาพการทำงานของการใช้มันภายในของ


4

ดูเหมือนว่าสองตัวเลือกหลัก

  • เซลินุกซ์ทำงานโดยนำผู้คนที่แตกต่างกันไปไว้ในโดเมนความปลอดภัยที่แตกต่างกันและในความหมายก็คือการชกมวยพวกเขาดังนั้นพวกเขาจึงไม่สามารถเห็นกันและกันได้ คำถามนี้ครอบคลุมในคำถามนี้ ตั้งแต่ selinux กลายเป็นกรอบความปลอดภัยแบบพฤตินัยอย่างรวดเร็วในโลก Linux นี่อาจเป็นทิศทางที่คุณควรมอง

  • อีกสิ่งหนึ่งคือความมั่นคงตามที่กล่าวไว้โดย marioosh และตามที่ถามในคำถามนี้ distros บางตัวมีแพ็คเกจเคอร์เนลสำรองที่มีการใช้แพตช์ grsecurity หากคุณมีสิ่งนี้คุณอาจใช้มัน

ถ้าด้วยเหตุผลบางอย่างที่คุณต้องการทำโดยไม่เพิ่มกรอบความปลอดภัยเช่น selinux หรือ grsecurity โปรดอธิบายว่าคุณกำลังทำอะไรอยู่ไม่ได้เขียน root-kit


1

มันไม่ง่ายเลยบนกล่อง linux มาตรฐาน ดูที่grsecurityแต่ต้องการ patching kernel เป็นต้น


2
ฉันคิดว่านี่เป็นมาตรฐานพร้อมเคอร์เนล selinux
user606723


0

คุณสามารถเขียนคำสั่งเทียบเท่าที่ทำงานเหมือนtopแต่ไม่แสดงกระบวนการที่ตรงกับชื่อเฉพาะ หรือคุณสามารถรับซอร์สโค้ดของtopคำสั่งและแก้ไขได้ จากนั้นคุณสามารถแทนที่topคำสั่งใน/usr/sbin(หรือที่ใดก็ได้) ด้วยเวอร์ชันของคุณ


2
การแทนที่ 'top' ไม่ได้ทำให้ผู้ใช้ไม่สามารถทำสิ่งที่ดีที่สุดได้
Tim Post

2
ไม่ แต่คำถามถามว่าจะทำให้กระบวนการมองไม่เห็นtopคำสั่งได้อย่างไร
LawrenceC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.