Skip to main content

Shellcode คืออะไร?

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

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

shellcode มักจะเขียนในภาษาการเขียนโปรแกรมที่มีการเข้าถึงระบบระดับต่ำเช่นแอสเซมบลี, C หรือ C ++อย่างไรก็ตามขึ้นอยู่กับช่องโหว่เป้าหมายผลลัพธ์เดียวกันอาจเกิดขึ้นได้โดยการแทรกรหัสสำหรับภาษาสคริปต์ที่ตีความเช่น Perl หรือ bytecode สำหรับเครื่องเสมือนเช่น Javaรหัสสามารถฝังได้ก่อนระหว่างหรือหลังการจี้ของตัวนับโปรแกรมดังนั้นรหัสที่ล่วงล้ำอาจมีอยู่ในไฟล์บนเครื่องเป้าหมายหรือส่งผ่านการเชื่อมต่อเครือข่ายแบบเรียลไทม์การหาประโยชน์จากเชลล์ท้องถิ่นได้รับการออกแบบมาเพื่อให้ผู้โจมตีควบคุมเครื่องจักรที่เขาหรือเธอมีการเข้าถึงทางกายภาพวัตถุประสงค์ในกรณีนี้อาจเป็นการสร้างบัญชีที่มีสิทธิ์ผู้ดูแลระบบเช่นในทำนองเดียวกันหากกระบวนการทำงานมีระดับสิทธิพิเศษสูงการหาประโยชน์ที่ประสบความสำเร็จจะให้การเข้าถึงผู้บุกรุกในระดับเดียวกันชั่วคราว

กระบวนการทำงานบนเครื่องระยะไกลสามารถใช้ประโยชน์ได้โดยใช้โปรโตคอลเครือข่ายมาตรฐานเพื่อสื่อสารกับคอมพิวเตอร์เป้าหมายShellCode Connect-Back สั่งให้เครื่องเป้าหมายเริ่มการเชื่อมต่อกับคอมพิวเตอร์ผู้บุกรุกหากผู้บุกรุกเริ่มต้นการเชื่อมต่อรหัสจะเรียกว่า bindshell เนื่องจากพยายามควบคุมการเชื่อมต่อเครือข่ายที่เรียกว่าพอร์ตบนเครื่องรีโมตวิธีการเชื่อมต่อกลับถูกใช้กันอย่างแพร่หลายมากขึ้นเนื่องจากไฟร์วอลล์ไม่ค่อยห้ามการเชื่อมต่อขาออก