เรียนรู้ buffer overflow
แปลและเรียบเรียงจาก Understanding buffer overflow attacks โดย Rik Farrow (rik@spirit.com)
ในระหว่างการสัมมนาของแฮกเกอร์เมื่อฤดูร้อนที่ผ่านมา ผู้ที่ทำงานด้านการรักษาความปลอดภัยคอมพิวเตอร์ หลายคนบ่นว่าไม่มีอะไรใหม่ ๆ ในเรื่องการรักษาความปลอดภัยเลย มีเพียงแต่บางอย่างที่เก่า ๆ ที่เพิ่มขึ้นมาเท่านั้นเอง บางอย่างที่ควรได้รับการแก้ไขหลายปีมาแล้ว แต่กลับไม่ได้รับการแก้ไข
การโจมตีคอมพิวเตอร์อย่างหนึ่งที่มีปรากฏไปทั่วคือ การโจมตีโดยใช้ buffer overflow การโจมตีแบบนี้ต้องอาศัย ความรู้เฉพาะเกี่ยวกับภาษาแอสแซมบลี และในกรณีของวินโดวส์ต้องมีความรู้ เกี่ยวกับ interface (ตัวกลางในการสื่อสารระหว่างระบบสองระบบ)ของระบบปฏิบัติการด้วย เมื่อมีคนเขียนโค้ดที่ใช้ประโยชน์จาก ช่องโหว่นี้และเผยแพร่มันแล้ว ใคร ๆ ก็สามารถใช้มันได้ ผลจากโค้ดเหล่านี้ทำให้สามารถใช้ shell (command interpreter) ในระบบยูนิกซ์ได้ ส่วนของวินโดวส์ทำให้ สามารถอัปโหลดและรันคำสั่งได้ตามที่ต้องการ
สิ่งที่น่าเสียดายเกี่ยวกับช่องโหว่ของ buffer overflow คือ ลักษณะการเขียนโปรแกรมที่ดีนั้นสามารถขจัด ช่องโหว่ที่อาจทำความเสียหายมากได้ แต่สิ่งที่ง่าย ๆ อย่างนี้ก็ไม่ได้เกิดขึ้น ผู้พัฒนาระบบปฏิบัติการ ที่มีไมโครซอฟท์อยู่ด้วยยังคงใช้ subroutine call(คำสั่งเรียกใช้ลำดับของคำสั่งสำหรับการทำงานบางอย่าง โดยเฉพาะ) ที่อันตรายแบบเดิมที่เปิดโอกาสให้มีการใช้ประโยชน์จากช่องโหว่ ไม่น่าสงสัยเลยว่าทำไมผู้เชี่ยวชาญ ด้านความปลอดภัยถึงได้เบื่อนัก
การป้องกันของคุณวนเวียนอยู่กับการควบคุมการเข้าถึงระบบที่มีความสำคัญ การลงซอฟท์แวร์อัปเดท แทนที่ซอฟท์แวร์ที่สามารถใช้ช่องโหว่ได้ และระมัดระวังต่อการโจมตี buffer overflow ในแบบที่ อาจเกิดขึ้นในเวลาที่ระบบของคุณอาจตกเป็นเป้าหมาย ถ้าคุณเป็นโปรแกรมเมอร์ คุณควรทำให้ผู้ที่ทำงาน เกี่ยวกับการรักษาความปลอดภัยมีความสุขขึ้นโดยการหลีกเลี่ยงการทำผิดซ้ำแบบเดิม
เวอมอันฉาวโฉ่
ในเดือนพฤศจิกายน คศ.1998 Internet Worm ทำให้ระบบมากกว่า 6,000 ระบบปิดตัวเองลงเพียงเพราะ มันทำให้การติดต่อทางอินเทอร์เน็ตหยุดชะงักลง วิธีการหนึ่งที่มันใช้เพื่อเข้าสู่ระบบคือการ ใช้ช่องโหว่ buffer overflow ของเซอร์วิสที่มีในยูนิกซ์ที่เรียกว่า finger เมื่อคุณใช้คำสั่ง finger ยูสเซอร์คนหนึ่ง เซอร์วิสนี้ก็จะตอบกลับข้อมูลเกี่ยวกับยูสเซอร์นั้น เช่น ชื่อจริงของยูสเซอร์และหมายเลขโทรศัพท์ แต่การโจมตี buffer overflow ไปยัง finger ไปเปลี่ยนโปรแกรมของเซิร์ฟเวอร์เป็น shell หรือ command interpreter ของยูนิกซ์ ต่อมา shell จึงถูกใช้เพื่อทำสำเนาโปรแกรม Worm ที่ถูกอัปโหลด เชื่อมโยงเข้าด้วยกัน แล้วจึงรันตัว Worm นี้ขึ้นมา
การโจมตีแบบ buffer overflow นี้ยังคงไม่ได้รับการกล่าวถึงเป็นเวลาหลายปีหลังจาก Worm ได้เกิดขึ้น ตัวอย่างที่เป็นที่รู้จักกันดีเกิดขึ้นในเดือนพฤศจิกายน คศ. 1994 เมื่อเว็ปเซิร์ฟเวอร์ที่จำหน่ายเชิงพาณิชย์ตัวแรกที่รันใน HP-UX (Hewlett-Packard UNIX) ถูกบุกรุกได้สำเร็จโดยการโจมตีแบบ buffer overflow ต่อเว็ปเซิร์ฟเวอร์ NCSA 1.3 ถึงแม้ว่าเว็ปเซิร์ฟเวอร์นี้จะตั้งอยู่ภายในเน็ตเวิร์คภายในของ เป้าหมายและต้องติดต่อโดยผ่านไฟร์วอล เท่านั้นก็ตาม ผู้โจมตียังสามารถเข้าถึงเน็ตเวิร์คภายในของเป้าหมายได้อย่างเต็มที่ โดยผู้โจมตีที่เรียกตัวเองว่า Internet Liberation Front วุ่นอยู่กับการโจมตีนี้อย่างสนุกสนาน
เหตุการณ์ที่จุดชนวนให้เกิดการโจมตีบ่อยครั้งคือการเผยแพร่ข้อเขียน "Smashing the Stack for Fun and Profit" ที่นำข้อมูลจากข้อเขียนที่เขียนโดย Mudge of the L0pht ใน Phrack พฤศจิกายน คศ.1996 ข้อเขียนของ Aleph One อธิบายถึงวิธีการให้โปรแกรมเมอร์เขียนช่องโหว่ที่ใช้ประโยชน์ จาก buffer overflow ต่อระบบยูนิกซ์ ในความเห็นของผม ข้อเขียนนี้น่าสนใจมาก โดยเฉพาะถ้าคุณ ต้องการเข้าใจถึงวิธีการทำงานของการใช้ประโยชน์จาก buffer overflow
ในปี คศ.1997 และ 1998 exploit ที่เกี่ยวกับ buffer overflow กลายเป็นสิ่งที่ใช้กันอย่างแพร่หลายมาก โดยเฉพาะกับเป้าหมายที่เป็นระบบยูนิกซ์และกับยูนิกซ์ที่เป็นแบบ open source ในขณะที่ องค์การของ open source เช่นผู้แจกจ่ายลีนุกซ์เจ้าต่าง ๆ หรือ FreeBSD ต่างออกซอฟท์แวร์แก้ไขอย่างรวดเร็ว จำนวนของช่องโหว่มีจำนวนมากจนอาจทำให้ตะลึง คุณอาจไปที่ไซต์ www.rootshell.com แล้วค้นหาคำว่า "buffer overflow" หรือไซต์อื่นเช่น L0PHT (0 คือศูนย์ไม่ใช่ตัวโอ) แล้วจึงค้นหา exploit เพื่อให้คุณรู้ถึงขอบเขตของปัญหานี้
คุณจะเห็นได้ว่า exploit ที่เกี่ยวข้องยังคงดำเนินมาจนถึงปี คศ.1999 และเริ่มรุกเข้ามาที่ผลิตภัณฑ์ของไมโครซอฟท์ เช่น IIS เป็นต้น เหตุผลหนึ่งที่ผลิตภัณฑ์ของไมโครซอฟท์ไม่ได้ถูกโจมตีตั้งแต่ต้นคือเทคนิคที่จำเป็นต้องใช้ ค่อนข้างจะแตกต่าง อย่างไรก็ตามข้อเขียนของ Dildog ช่วยทำให้ความระมัดระวังต่อผู้ที่ต้องการบุกรุกคอมพิวเตอร์ ที่ใช้ซอฟท์แวร์ของไมโครซอฟท์เพิ่มขึ้น
คุณลักษณะของ buffer overflow
ส่วนใหญ่ buffer overflow เกิดขึ้นเพราะภาษา C
**Hidden Content: To see this hidden content your post count must be 10 or greater.**
แหล่งข้อมูล
Phrack, Smashing the stack, issue 49, article 14 of Phrack by Aleph One (Elias Levy): http://www.phrack.com/search.phtml?view&article=p49-14
The article by Dr. Mudge that got the ball rolling: http://www.L0pht.com/advisories/bufero.html
Cult of the dead cow, by Dildog ('R' rated language), The Tao of Windows Buffer Overflows: http://www.cultdeadcow.com/cDc_files/cDc-351/
Rootshell, a site you can safely visit and search for buffer overflow exploits: http://www.rootshell.com/
L0PHT also includes a search facility, as well as some anti-hacking tools: http://www.l0pht.com/