เจาะลึก SUID: ประตูสู่การยกระดับสิทธิ์ในระบบ Linux ที่คุณต้องรู้

เจาะลึก SUID: ประตูสู่การยกระดับสิทธิ์ในระบบ Linux ที่คุณต้องรู้

เคยสงสัยไหมว่าแฮกเกอร์สามารถยกระดับสิทธิ์จากผู้ใช้งานธรรมดาไปเป็นผู้ดูแลระบบ (root) ใน Linux ได้อย่างไร? หนึ่งในกลไกที่ถูกใช้บ่อยและอันตรายคือการใช้ประโยชน์จาก SUID binaries หรือโปรแกรมที่ถูกตั้งค่าพิเศษ บทความนี้จะพาไปทำความเข้าใจถึงหลักการทำงาน ความเสี่ยง และวิธีการที่ผู้ไม่หวังดีใช้ช่องทางนี้ในการเข้าควบคุมระบบ

SUID คืออะไร และทำไมถึงเป็นช่องโหว่?

SUID ย่อมาจาก Set User ID เป็นบิตพิเศษที่สามารถตั้งค่าให้กับไฟล์โปรแกรมต่างๆ ในระบบ Linux ได้

เมื่อโปรแกรมใดๆ ถูกตั้งค่า SUID ไว้ เมื่อผู้ใช้งานคนใดก็ตามรันโปรแกรมนั้น โปรแกรมจะทำงานโดยใช้สิทธิ์ของผู้เป็นเจ้าของไฟล์ ไม่ใช่สิทธิ์ของผู้ใช้งานที่เรียกใช้ ยกตัวอย่างง่ายๆ หากไฟล์โปรแกรม passwd ซึ่งมีหน้าที่เปลี่ยนรหัสผ่าน ถูกตั้งค่า SUID และมีเจ้าของเป็น root เมื่อผู้ใช้งานธรรมดารัน passwd โปรแกรมจะทำงานในฐานะ root เพื่อแก้ไขไฟล์รหัสผ่านของระบบได้

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

ค้นหาไฟล์ SUID ที่ซ่อนอยู่ได้อย่างไร?

การเริ่มต้นตรวจสอบระบบของเราว่ามีไฟล์ SUID ที่น่าสงสัยหรือไม่นั้นง่ายกว่าที่คิด

เราสามารถใช้คำสั่ง find ใน Terminal เพื่อค้นหาไฟล์ที่มีบิต SUID ตั้งค่าไว้ทั่วทั้งระบบได้

คำสั่งที่นิยมใช้คือ: find / -perm -4000 -type f 2>/dev/null

คำสั่งนี้จะค้นหาไฟล์ทั้งหมด (-type f) ที่มีสิทธิ์ SUID (-perm -4000) โดยเริ่มต้นจากไดเร็กทอรีราก (/) และซ่อนข้อผิดพลาด (2>/dev/null) รายการที่ได้ออกมาคือโปรแกรมที่ทำงานด้วยสิทธิ์เจ้าของไฟล์ หากเจ้าของเป็น root คุณต้องจับตาดูเป็นพิเศษ

เมื่อเจอแล้ว จะใช้ประโยชน์จาก SUID ได้อย่างไร? (ตัวอย่างช่องทางอันตราย)

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

มีโปรแกรมหลายตัวที่หากถูกตั้งค่า SUID โดยไม่จำเป็น อาจกลายเป็นประตูสู่การยกระดับสิทธิ์ได้อย่างง่ายดาย

ตัวอย่างเช่น:

  • find: ถ้าคำสั่ง find มี SUID เราสามารถใช้มันรันคำสั่งอะไรก็ได้ในฐานะ root ตัวอย่างเช่น find . -exec sh -p \; -quit เพื่อเปิดเชลล์ด้วยสิทธิ์ root

  • vi/vim/nano/less/more: โปรแกรม Text Editor หรือ Pager เหล่านี้ มักมีฟังก์ชันที่อนุญาตให้เปิดเชลล์ย่อย (subshell) ได้

หากโปรแกรมเหล่านี้มี SUID ตั้งอยู่ ผู้โจมตีสามารถเปิดไฟล์ใดก็ได้ จากนั้นใช้คำสั่งภายในเช่น `:!bash` (ใน `vi/vim`) หรือ `!` ตามด้วยคำสั่ง (ใน `less/more`) เพื่อเข้าถึงเชลล์ในฐานะ **root**

  • cp: โปรแกรมสำหรับคัดลอกไฟล์ หากมี SUID ผู้โจมตีสามารถคัดลอกไฟล์สำคัญของระบบ เช่น /etc/shadow ซึ่งเก็บรหัสผ่านที่เข้ารหัส ไปยังตำแหน่งที่สามารถเข้าถึงได้ เพื่อทำการแคร็กรหัสผ่าน

  • tar: โปรแกรมบีบอัดและคลายไฟล์ หากมี SUID สามารถถูกใช้เพื่อเขียนทับไฟล์ระบบ หรือดึงไฟล์ไปยังตำแหน่งที่สำคัญได้

  • nmap: Nmap เป็นเครื่องมือสแกนเครือข่าย แต่เวอร์ชันเก่าๆ บางเวอร์ชันมีช่องโหว่ที่หากมี SUID สามารถรันคำสั่งได้โดยตรงผ่านโหมด Interactive

  • bash: หากเชลล์ bash มี SUID ตั้งค่าอยู่ การรัน bash -p สามารถให้เชลล์ที่มีสิทธิ์ของเจ้าของไฟล์ SUID ซึ่งก็คือ root ได้ทันที

สำหรับข้อมูลและวิธีการโจมตีที่ละเอียดของแต่ละโปรแกรม สามารถตรวจสอบได้จากเว็บไซต์ GTFOBins ซึ่งเป็นแหล่งรวมข้อมูลเกี่ยวกับการใช้โปรแกรมต่างๆ เพื่อยกระดับสิทธิ์

การป้องกันและข้อคิดที่สำคัญ

การลดความเสี่ยงจาก SUID binaries เริ่มต้นจากการตรวจสอบระบบอย่างสม่ำเสมอ

เราควรมั่นใจว่ามีโปรแกรมเพียงไม่กี่ตัวเท่านั้นที่จำเป็นต้องมี SUID และโปรแกรมเหล่านั้นต้องมาจากแหล่งที่เชื่อถือได้และอัปเดตอยู่เสมอ

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