พบช่องโหว่เข้าถึงสิทธิ์ root ของลินุกซ์ ด้วยการตั้งเวลาใหม่และรีเซ็ต sudo

by neizod
11 March 2013 - 22:15

ผู้ใช้ลินุกซ์คงคุ้นเคยกับข้อความอบรมเมื่อเรียกใช้โปรแกรม sudo ครั้งแรกกันดี (ความสามารถนี้ไม่ได้ถูกเปิดไว้แต่ต้นใน Ubuntu ครับ)

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

ข้อความนี้จะปรากฏให้เห็นเพียงแค่ครั้งแรกเท่านั้น โดยระบบจะจดบันทึกเวลาที่เราได้เรียกโปรแกรม sudo ลงในไฟล์ timestamp และจะไม่แสดงข้อความอบรมนี้อีกถ้าพบว่าไฟล์นี้มีอยู่

นอกจากนี้ โปรแกรม sudo ยังใช้งานไฟล์ timestamp เพื่ออำนวยความสะดวกอีกอย่าง คือยอมให้ผู้ใช้พิมพ์รหัสผ่านเพียงแค่ครั้งเดียว ถ้าหากการเรียกใช้โปรแกรมครั้งถัดๆ ไปนั้นไม่นานจากครั้งก่อนมากนัก (ค่ามาตรฐานที่ 5 นาที)

อย่างไรก็ตาม ผู้ใช้ที่ต้องการสั่งหยุดการใช้ sudo (บังคับให้ถามรหัสผ่านใหม่) ก็สามารถทำได้โดยสั่ง sudo -k โดยที่ไฟล์ timestamp จะถูกรีเซ็ตค่ากลับไปที่ epoch (01/01/1970 01:00:00) เพื่อป้องกันไม่ให้มีการแสดงข้อความอบรมอีกครั้งเมื่อเรียกใช้ sudo ครั้งถัดไป

ช่องโหว่นี้เกิดขึ้นได้โดยอาศัยการรีเซ็ตไฟล์ timestamp (ด้วย sudo -k) บวกกับพฤติกรรมของโปรแกรมที่จะเอาเวลาปัจจุบันไปลบเวลาจากไฟล์ timestamp แล้วดูว่าน้อยกว่า 5 นาทีหรือไม่ เพื่อที่จะได้ไม่ต้องถามรหัสผ่านซ้ำ

ผู้โจมตีระบบที่สามารถเข้าถึงเครื่องคอมพิวเตอร์ของเหยื่อ สามารถใช้เทคนิคนี้ข้ามการใส่รหัสผ่านเพื่อเรียกใช้โปรแกรม sudo ถ้าหากว่าเขาสามารถเปลี่ยนเวลาของระบบกลับไปยัง epoch ได้ (การเปลี่ยนเวลาตามปรกติต้องใช้สิทธิ์ root ยกเว้นว่าจะทำผ่าน GUI ในบางระบบปฎิบัติการ หรือรีบูทเครื่องที่แบตเตอรี่ไบออสหมด)

สำหรับ sudo ที่ได้รับผลกระทบได้แก่เวอร์ชัน 1.6.0 ถึง 1.7.10p6 และเวอร์ชัน 1.8.0 ถึง 1.8.6p6 ซึ่งจะได้รับการแก้ไขใน 1.7.10p7 และ 1.8.6p7 ส่วน workaround ตอนนี้คือให้สั่ง sudo -K เพื่อลบไฟล์ timestamp ทิ้งครับ

ที่มา: Sudo ผ่าน The Hacker News

Blognone Jobs Premium