มัลแวร์ที่ไม่มีลวดลายทำงานบน linux อย่างไร


10

ฉันเข้าใจคำจำกัดความของมัลแวร์ไร้สาระ:

รหัสที่เป็นอันตรายที่ไม่ได้ใช้ไฟล์ แต่มีอยู่ในหน่วยความจำเท่านั้น…โดยเฉพาะอย่างยิ่งรหัสที่เป็นอันตรายแบบไม่ใส่ข้อมูล ... ผนวกตัวเองเข้ากับกระบวนการที่ทำงานอยู่ในหน่วยความจำ ...

ใครช่วยอธิบายหน่อยได้ไหมว่าการผนวกตัวเองเข้ากับกระบวนการที่ทำงานอยู่ในหน่วยความจำได้อย่างไร

นอกจากนี้การป้องกัน / การทำให้แข็งตัวคืออะไร


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

คำถามนี้อาจจะมีการตอบที่ดีกว่าที่https://security.stackexchange.com/
rubynorails

@rubynorails - ฉันสนใจเฉพาะคำตอบเฉพาะของ linux เท่านั้น SecuritySE เป็นเรื่องทั่วไป หากฉันขอคำตอบจากลินุกซ์โดยเฉพาะพวกเขาจะส่งฉันมาที่นี่
Martin Vegter

คำตอบ:


6

มัลแวร์ไร้ร่องรอยโจมตีเป้าหมายโดยใช้ประโยชน์จากช่องโหว่เช่นในปลั๊กอินแฟลชของเบราว์เซอร์หรือในโปรโตคอลเครือข่าย

ptrace()กระบวนการลินุกซ์สามารถแก้ไขได้โดยการใช้การโทรระบบ โดยทั่วไปแล้วการเรียกระบบนี้มักจะถูกใช้โดย debuggers เพื่อตรวจสอบและจัดการสถานะภายในของกระบวนการเป้าหมายและมีประโยชน์ในการพัฒนาซอฟต์แวร์

ยกตัวอย่างเช่นขอพิจารณากระบวนการที่มี PID 1234 กระบวนการนี้พื้นที่ที่อยู่ทั้งสามารถดูได้ในระบบแฟ้มหลอกที่ตั้ง/proc /proc/1234/memคุณสามารถเปิด pseudofile นี้จากนั้นแนบกับกระบวนการนี้ผ่านptrace(); หลังจากทำเช่นนั้นคุณสามารถใช้pread()และpwrite()เขียนไปยังพื้นที่กระบวนการ

char file[64];
pid = 1234;

sprintf(file, "/proc/%ld/mem", (long)pid);
int fd = open(file, O_RDWR);
ptrace(PTRACE_ATTACH, pid, 0, 0);

waitpid(pid, NULL, 0);
off_t addr = ...; // target process address

pread(fd, &value, sizeof(value), addr);
// or
pwrite(fd, &value, sizeof(value), addr);

ptrace(PTRACE_DETACH, pid, 0, 0);
close(fd);

(รหัสที่นำมาจากที่นี่มีบทความเกี่ยวกับการหาประโยชน์จาก ptrace อีกฉบับหนึ่งที่นี่ )

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


เช่นเดียวกับที่อื่น ๆคำตอบนี้ก็ล้าสมัย - ตามที่อธิบายไว้ที่นี่คุณไม่จำเป็นต้องไป ptrace /proc/PID/memกระบวนการในการสั่งซื้อที่จะอ่านหรือเขียนไปของมัน ฉันหวังว่าคุณจะทนไฟน้อยกว่าบุคคลอื่นที่จะอัปเดตและแก้ไขคำตอบของคุณแทนที่จะทำให้เป็นตำนานและข้อมูลที่ผิด
pizdelect

... ซึ่งเป็นกรณีนี้อาจมีผลกระทบตามที่คนอาจคิดผิดว่าโดยกระบวนการที่พวกเขาสามารถป้องกันกระบวนการอื่น ๆ จากการอ่านหน่วยความจำ
pizdelect

@pizdelect ขอบคุณสำหรับลิงค์ มันจะดีถ้าคุณเพิ่มเนื้อหาเป็นคำตอบอื่น
dr_

ไม่ฉันจะไม่เพิ่มคำตอบอีก ฉันคาดหวังให้คุณแก้ไขของคุณ
pizdelect

จำไว้ว่าคุณสามารถแก้ไขคำตอบของคนอื่นได้เช่นกัน คุณดูเหมือนจะมีความรู้ที่ดีกว่าฉันเกี่ยวกับหัวข้อนี้โดยเฉพาะดังนั้นคุณสามารถทำได้
dr_

1

เมื่อคุณจัดการกระบวนการขัดข้องคุณสามารถทำให้กระบวนการแทรกข้อมูลลงในหน่วยความจำ วิธีที่นิยมมากในการทำเช่นนี้คือการใช้บัฟเฟอร์มากเกิน

มันทำงานอย่างไร ตัวอย่างเช่นคุณรู้ว่ากระบวนการกำลังรับฟังพอร์ต x และมีบัฟเฟอร์สำหรับฟังก์ชั่นบางอย่างที่กล่าวคือ 15 ไบต์ใหญ่ คุณเรียกใช้ฟังก์ชันนั้นด้วยข้อมูล 15 ไบต์ + n ไบต์ (โค้ดของคุณจะถูกเรียกใช้งาน) หากโปรแกรมตรวจสอบความถูกต้องของข้อมูลไม่ถูกต้องโปรแกรมจะเขียนทับหน่วยความจำที่อยู่ติดกันด้วยรหัสของคุณดังนั้นรหัสจะอยู่ในหน่วยความจำ หากคุณสามารถเรียกใช้โค้ดนี้ได้แสดงว่าคุณเป็นเจ้าของระบบ มีข้อ จำกัด อยู่เช่นกระบวนการที่ไม่สามารถเขียนไปนอกหน่วยความจำของพื้นที่จัดสรร

มีรายการช่องโหว่จำนวนมากในทุกระบบปฏิบัติการ 'ที่บัฟเฟอร์ overruns อนุญาตให้แครกเกอร์ฉีดข้อมูลลงในหน่วยความจำของเป้าหมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.