Shellcode

shellcode (21/1/45)

เมื่อนักเจาะสามารถเจาะช่องโหว่ อย่างเช่น ปัญหาเกี่ยวกับ buffer overflows ได้ โดยปกติพวกเขาจะเรียก shell ขึ้นในตอนท้ายของโปรแกรมสำหรับเจาะช่องโหว่ เมื่อนักเจาะสามารถเข้าถึง shell ที่เป็นแบบ command-line ได้แล้ว นักเจาะจึงสามารถทำสิ่งใด ๆ ก็ได้ที่พวกเขาต้องการ อย่างไรก็ตามการเรียก shell ขึ้นมาโดยอาศัยช่องโหว่ด้าน buffer overflow อาจเป็นสิ่งที่ยุ่งยากได้ ดังนั้นนักเจาะจึงต้องมี "shellcode" ต่าง ๆ ซึ่งเป็นโค้ดส่วนหนึ่งสำหรับ ระบบปฏิบัติการต่าง ๆ ที่ใส่เข้าไปในโปรแกรมสำหรับเจาะช่องโหว่แบบ buffer overflow

ประเด็น: สิ่งหนึ่งที่ยุ่งยากในการเขียน shellcode คือต้องจำเป็นทำผ่านฟิลเตอร์(filters) เช่น เมื่อการเจาะระบบ โดยอาศัยช่องโหว่ใน SMTP server คุณอาจพบว่าเซิร์ฟเวอร์จะนำบิตที่อยู่ในลำดับสูง ๆ (high-order bit) ออกจากบิตทั้งหมด (เช่นการส่งบิตที่เป็นแบบเท็กซ์ ไม่เป็นแบบไบนารี) ดังนั้นไบต์ที่อยู่ระหว่าง 0x00-07F จะผ่านไปได้ แต่ไบต์ 0x80-0xFF จะผ่านไปไม่ได้ นอกจากนี้ข้อจำกัดอีกอย่างอยู่ที่ระบบนั้นจะไม่ส่งผ่าน null characters (0x00) เพราะระบบจะกำจัดสายอักขระในฟังก์ชัน เช่น strcpy() ดังนั้นเมื่อนักเจาะจะต้องเลือก shellcode เพื่อใส่ลงไปในสคริปท์ของพวกเขา จะต้องระมัดระวังเกี่ยวกับข้อจำกัดของระบบที่จะต้องจัดการ

ประเด็น: เมื่อสร้าง shellcode ใหม่ จะมีการสร้างโปรแกรมภาษาซีที่เรียกคำสั่ง เช่น "system("/bin/sh");" หรือ "execve("/bin/sh",0,0);" แล้วจึงสร้าง output จากภาษาแอสเซมบลี ในขั้นนี้จึงเลือกเอาสิ่งที่ต้องการมา สิ่งนี้จำเป็นต้องอาศัยความรู้เพิ่มเติมเกี่ยวกับภาษาแอสเซมบลี

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

ประเด็น: การโจมตีโดยใช้ buffer overflow ส่วนใหญ่จะเอ็กซิคิวท์ /bin/sh ดังนั้นจึงสามารถนำโปรแกรมนี้ออก (หรือแทนที่ด้วยโปรแกรมอื่นที่มีการตรวจสอบสองชั้นว่ากำลังทำอะไรอยู่) แล้วคุณจะสามารถป้องกัน 0-day exploit ได้จำนวนมาก

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License