फाइललेस मालवेयर किसी ब्राउजर के फ्लैश प्लगइन में या नेटवर्क प्रोटोकॉल में भेद्यता का फायदा उठाकर लक्ष्य पर हमला करता है।
सिस्टम कॉल का उपयोग करके एक लिनक्स प्रक्रिया को संशोधित किया जा सकता है ptrace()
। यह सिस्टम कॉल आमतौर पर डिबगर्स द्वारा लक्ष्य प्रक्रिया की आंतरिक स्थिति का निरीक्षण और प्रबंधन करने के लिए उपयोग किया जाता है, और सॉफ्टवेयर विकास में उपयोगी है।
उदाहरण के लिए, आइए 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-block मॉड्यूल को कर्नेल में लोड कर सकते हैं जो उस विशेष सिस्टम कॉल को निष्क्रिय कर देगा; स्पष्ट रूप से यह आपको डीबगिंग के लिए ptrace का उपयोग करने में असमर्थ बनाता है।