วิธีการหยุดและตรวจจับการทิ้งระเบิด


14
#include <stdlib.h>
#include <unistd.h>

int main()
{
   while(1)
      fork();
}

นี่คือรหัสสำหรับการวางระเบิด

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

เราจะตรวจจับได้อย่างไรว่าระบบจะทำการ fork fork อย่างไร? และเราจะหยุดมันได้อย่างไร

วิธีหนึ่งคือการ จำกัด จำนวนกระบวนการสูงสุดที่ผู้ใช้รายเดียวอาจเป็นเจ้าของ มีวิธีใดบ้างที่จะหยุดและรู้ว่าระบบนั้นถูกนำไปใช้หรือไม่?


19
Telnet? อย่างจริงจัง? คุณควรใช้ SSH จริงๆ ...
ThiefMaster


ดูเพิ่มเติมunix.stackexchange.com/q/64611/17609
moooeeeep

มันเป็นรูปแบบการโยกย้าย แต่คำตอบเดียวอาจอยู่ในระดับเคอร์เนล แพทช์บางอย่างได้รับการดำเนินการอย่างแน่นอน แต่ดูเหมือนว่าจะไม่มีการยอมรับ ประเด็นของฉันคือ: วิธีการตรวจจับ: คนอื่น ๆ จะรู้ว่ามันไม่สามารถใช้ระบบได้อีกต่อไปดังนั้นจุดตรวจจับอาจไม่ใช่จุดสำคัญ วิธีการกู้คืน คำตอบปัจจุบันคือรีบูตฉันจะระบุ: วิธีบอกเคอร์เนลให้รันเพียงกระบวนการเดียว (อันที่คุณต้องการกำจัดความยุ่งเหยิง) และหยุดสิ่งอื่น ๆ ทั้งหมดไม่ว่าพวกเขาจะอยู่ที่ไหน นี่อาจเป็นคุณลักษณะที่เข้าถึงได้ในคอนโซลระบบเท่านั้น
philippe lhardy

คำตอบ:


16

วิธีหนึ่งคือการ จำกัด จำนวนกระบวนการผู้ใช้สามารถเรียกใช้

เพียงเข้าสู่ระบบในฐานะ root และแก้ไขไฟล์นี้เพื่อเพิ่มผู้ใช้และกำหนดค่าขีด จำกัด ของพวกเขา

# vi /etc/security/limits.conf

เพิ่มบรรทัดนี้ลงในไฟล์

john hard nproc 10

ตอนนี้ผู้ใช้ john สามารถสร้างได้เพียง 10 กระบวนการเท่านั้น


ฉันคิดว่าคุณต้องรีบูตเพื่อให้การตั้งค่าใหม่/etc/security/limits.confมีผล
Dan D.

2
ไม่ได้ แต่พวกเขาจะถูกใช้โดย PAM ดังนั้นพวกเขาจึงใช้กับการเข้าสู่ระบบใหม่เท่านั้น
ThiefMaster

14

ในการหยุดระเบิดส้อมที่กำลังวิ่งคุณอาจจะสามารถใช้killall <name>เพื่อฆ่ากระบวนการทั้งหมดของระเบิดได้ อย่างไรก็ตามเนื่องจากการทิ้งระเบิดมักส่งผลให้เกิดการโหลดสูงอย่างไม่น่าเชื่อในระบบคุณอาจไม่สามารถ SSH เข้าไปหรือดำเนินการนั้นได้ ดังนั้นการรีบูตอาจจำเป็นหรือเร็วกว่านั้นอย่างน้อย

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

อย่างไรก็ตามแทนที่จะลงโทษผู้ใช้ที่จุดชนวนระเบิดนั้นคุณควรแก้ไขการกำหนดค่าระบบเพื่อปลดอาวุธระเบิดทิ้ง คุณสามารถตั้งค่าขีด จำกัด กระบวนการต่อผู้ใช้โดยใช้/etc/security/limits.confและป้องกันไม่ให้ส้อมระเบิดจากการควบคุม - ด้วยเช่นกระบวนการเพียง 50 ระเบิดส้อมจะไม่ทำความเสียหายมากนัก


เป็นไปไม่ได้ที่จะตรวจพบว่าระบบใดกำลังมาจากระบบนี้
Rajesh M

@ user1670364: มันไม่ชัดเจนในสิ่งที่คุณถาม คุณหมายถึงอะไรโดย "กำลังจะมา" คุณสามารถบอกได้ว่าผู้ใช้คนใดเป็นเจ้าของกระบวนการคุณต้องการรู้อะไรอีก
David Schwartz

@DavidSchwartz ฉันหมายถึงความเป็นไปได้ในการตรวจจับ fork bomb ที่ระบบกำลังใช้อยู่หรือไม่
Rajesh M

@ user1670364: ถ้าคุณหมายถึงระบบที่ใช้ fork fork จริง ๆ มันเป็นระบบที่ช้า หากคุณหมายถึงผู้ใช้ที่รับผิดชอบนั่นคือผู้ใช้ที่เป็นเจ้าของกระบวนการที่ฟอร์ก
David Schwartz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.