
विंडोज मेमोरी-फोरेंसिक और खतरे की खोज करने वाला उपकरण जो लाइव प्रोसेस मेमोरी को दुर्भावनापूर्ण पैटर्न, इंजेक्शन तकनीकों और रिफ्लेक्टिवली लोडेड .NET असेंबलियों के लिए स्कैन करता है, और गलत सकारात्मक को कम करने के लिए बहु-स्तरीय विश्वास मॉडल का उपयोग करता है।

संस्करण : 0.9 (स्थिर रिलीज़)
Aether एक विंडोज मेमोरी-फोरेंसिक और खतरा-शिकार उपकरण है जो लाइव प्रक्रिया मेमोरी को स्कैन करता है दुर्भावनापूर्ण पैटर्न, इंजेक्शन तकनीक, इम्प्लांट सिग्नेचर, रिफ्लेक्टिवली लोडेड .NET असेंबली का पता लगाने के लिए। यह एक बहु-परत विश्वास मॉडल के साथ काम करता है जो झूठी सकारात्मक दर को नाटकीय रूप से कम करता है और दुर्भावनापूर्ण व्यवहार का शिकार करता है। Aether में हॉलोइंग, APC, थ्रेड हाईजैकिंग तकनीकों का पता लगाने की अच्छी क्षमता है। सुरक्षा विश्लेषक इसका उपयोग संदिग्ध क्षेत्रों को स्कैन करने, शिकार करने और स्नैपशॉट लेने के लिए कर सकते हैं ताकि ऑफ़लाइन विश्लेषण किया जा सके।
दस्तावेज़: https://0xsp.com/docs/aether-getting-started/
शोध लेख:
Aether की मुख्य विशेषताओं के लिए त्वरित स्पष्टीकरण, आप अधिक जानकारी के लिए पूर्ण तकनीकी ब्लॉगपोस्ट पढ़ सकते हैं:
"msxsl:script" 6D 00 73 00 78 00 ... बन जाता है)rules/ में नए सिग्नेचर ड्रॉप करेंMEM_PRIVATE क्षेत्रों में PE हैडर का पता लगाना — रिफ्लेक्टिवली लोडेड .NET असेंबली (MZ + PE + BSJB मेटाडेटा) को फ़्लैग करता हैAether कच्चे वर्किंग-सेट सिग्नल के ऊपर पाँच फ़िल्टर को लेयर करता है ताकि एक निष्कर्ष को रिपोर्ट करने से पहले कई सहमत संकेतकों की आवश्यकता हो, FP फ़िल्टरिंग के साथ:
अन्य संरचनात्मक जाँचें:
MEM_IMAGE आवंटन जो PEB मॉड्यूल सूची में नहीं हैं (DLL हॉलोइंग / मॉड्यूल स्टॉम्पिंग)K32QueryWorkingSetEx के माध्यम से, बैचित एक सिस्कॉल प्रति क्षेत्र के बजाय प्रति 4 KB पृष्ठ एक के बजाय (≈ 50-100× तेज़ नैव लूप से)MEM_PRIVATE + PAGE_EXECUTE_* (यह FP परिणाम उत्पन्न कर सकता है) आवंटन (शेलकोड, JIT स्प्रे, डायनामिक कोड स्टब आवंटन) को फ़्लैग करता हैE9 ?? ?? ?? ?? — JMP rel32FF 25 ?? ?? ?? ?? — JMP [rip+disp32]68 ?? ?? ?? ?? C3 — PUSH imm32 ; RET48 B8 ?? ?? ?? ?? ?? ?? ?? ?? FF E0 — MOV RAX, imm64 ; JMP RAXAether थ्रेड्स को सख्त वर्गीकरण और L1–L5 निष्कर्षों के साथ क्रॉस-कोरिलेशन के साथ जाँचता है। लक्ष्य प्रक्रिया में प्रत्येक बनाए गए थ्रेड के लिए, Aether NtQueryInformationThread के माध्यम से इसका Win32StartAddress पढ़ता है और, जब पहुँच अनुमति देती है, तो GetThreadContext / Wow64GetThreadContext के माध्यम से लाइव Rip / Eip भी पढ़ता है।
प्रत्येक पता फिर निम्न तालिका के अनुसार ग्रेड किया जाता है, अधिक विवरण के लिए ब्लॉगपोस्ट पढ़ें:
यह मूल जाँच "क्या start_address किसी मॉड्यूल में है" से अधिक मजबूत क्या बनाता है:
VirtualQueryEx क्रॉस-चेक — प्रत्येक पते को एक एकल O(1) कॉल में Type / Protect / AllocationBase के लिए क्वेरी किया जाता है, मॉड्यूल सूची पर रैखिक स्कैन के बजायTSAV_MODIFIED_HOST हो जाती हैWin32StartAddress NtSetInformationThread के माध्यम से प्रक्रिया-लिखने योग्य है और स्पूफ करने योग्य फ़ील्ड है; निलंबित थ्रेड का लाइव Rip वह है जिसे लोडर आसानी से पुनर्लिखित नहीं कर सकता। हम दोनों की तुलना करते हैं और किसी भी असहमति को फ़्लैग करते हैं जो संदिग्ध क्षेत्र में हल करता हैWow64GetThreadContext पर स्विच करता है और 64-बिट प्रक्रिया के अंदर 32-बिट थ्रेड के लिए Eip पढ़ता हैरनटाइम API रिज़ॉल्यूशन एक ऐसी तकनीक है जिसका उपयोग मैलवेयर द्वारा अक्सर किया जाता है। Aether का पता लगाने का तंत्र हीप में मान्य मॉड्यूल पतों और पॉइंटर्स के लिए स्कैन करके और नीचे वर्णित फ़िल्टरिंग मानदंडों के साथ परिणामों को सहसंबंधित करके इस व्यवहार की पहचान करता है:
प्रत्येक फ़िल्टर वास्तविक-विश्व टेलीमेट्री में देखे गए एक विशिष्ट FP वर्ग को मारता है:
Aether वर्तमान में स्टब स्तर पर XOR डिटेक्शन पैटर्न का समर्थन करता है और मेमोरी क्षेत्र में बाइट मानों की यादृच्छिकता की जाँच करने के लिए Shannon एंट्रॉपी एल्गोरिदम अपनाता है, यह एक सीमा से ऊपर सब कुछ फ़्लैग करता है। उच्च मात्रा में FP को संबोधित करने के लिए, Aether कई संकेतकों का उपयोग करता है।
GetExtendedTcpTable पोल करता हैMODIFIED_CODE_* निष्कर्ष में private_pages और region_pages होते हैं ताकि ट्राइएज के पास वास्तविक संख्याएँ होंAether.exe --scan --pid <PID> [OPTIONS]
Aether.exe --scan --lookup "ProcessName.exe"
Aether.exe --hunt <PID> SLEEP_MS PERIOD
Aether.exe --scan-all [OPTIONS]
git clone https://github.com/0xsp-SRD/aether
cd aether
# डीबग बिल्ड (सुरक्षा जाँचें सक्षम)
zig build
# रिलीज़ बिल्ड (छोटा, तेज़ बाइनरी)
zig build -Doptimize=ReleaseSafe
# या
zig build -Doptimize=ReleaseFast
निर्मित निष्पादनीय zig-out/bin/Aether.exe में आता है।
यदि आप अतिरिक्त सिग्नेचर स्कैन करना चाहते हैं तो zig-out/bin/Aether.exe और rules/ निर्देशिका को लक्ष्य विंडोज मशीन पर कॉपी करें। यदि लक्ष्य प्रक्रिया को प्रशासनिक विशेषाधिकारों की आवश्यकता है, तो आपको Aether.exe को प्रशासक विशेषाधिकारों के साथ चलाना होगा।
Win32StartAddress पुनर्लेखन का पता केवल तभी लगाया जा सकता है जब प्रोब के समय थ्रेड प्रतीक्षा में खड़ा हो (Moneta के समान बाधा)Aether कम्युनिटी GNU GPL v3.0 के तहत लाइसेंस प्राप्त है। व्यावसायिक लाइसेंस केवल लेखक से स्वामित्व या व्यावसायिक उपयोग के लिए उपलब्ध हैं।
| लेयर | फ़िल्टर | उद्देश्य |
|---|
| L1 | संरचनात्मक | केवल निष्पादन योग्य IMAGE उप-क्षेत्रों पर विचार किया जाता है (.data / .rdata COW शोर को समाप्त करता है) |
| L2 | मात्रात्मक | private_pages गिनती और private_ratio द्वारा ग्रेड करें (निम्न / मध्यम / उच्च) |
| L3 | पुष्टि | केवल तभी प्रचारित करें जब कोई स्वतंत्र संकेत उसी आवंटन आधार पर सहमत हो — सिग्नेचर हिट, missing_peb_entry, private_rwx, हुक प्रोलॉग, या ऑन-डिस्क डिफ़ |
| L4 | CLR-जागरूक | ngen / R2R / टियरड-JIT लक्ष्यों (*.ni.dll, mscor*, clr*, coreclr, system.private.corelib*) के लिए प्रति-मॉड्यूल दमन, CLR लोड होने पर ब्लैंकेट-स्किपिंग के बजाय |
| L5 | ऑन-डिस्क डिफ़ | CreateFileMappingW(SEC_IMAGE_NO_EXECUTE) के साथ मॉड्यूल फ़ाइल मैप करें; प्रत्येक निजी निष्पादन योग्य पृष्ठ के पहले 16 बाइट्स की तुलना डिस्क पर समान RVA से करें। कोई भी विचलन एक वास्तविक-संशोधन IOC है |
49 BB ?? ?? ?? ?? ?? ?? ?? ?? 41 FF E3 — Detours-शैली MOV R11, imm64 ; JMP R11Cor_Private_IPCBlock_v4_<PID> और v2 Cor_Private_IPCBlock_<PID> (पुरातन .NET 2/3 / mscorwks) के लिए सेक्शन-ऑब्जेक्ट प्रोब, ताकि पुराने रनटाइम चलाने वाले शोरगुल वाले ऐप-पूल गलत वर्गीकृत न हों| फैसला | गंभीरता | शर्त |
|---|
TSAV_SHELLCODE_PRIVATE | CRITICAL | पता एक MEM_PRIVATE + PAGE_EXECUTE_* क्षेत्र में रहता है — क्लासिक CreateRemoteThread शेलकोड |
TSAV_SUSPENDED_RIP | CRITICAL | निलंबित थ्रेड का Rip Win32StartAddress से असहमत है और एक संदिग्ध क्षेत्र में हल करता है — Win32StartAddress स्पूफिंग (EarlyBird / APC चाल) और SetThreadContext हाईजैक पकड़ता है |
TSAV_HOLLOWED_HOST | HIGH | पता एक MEM_IMAGE आवंटन के अंदर है जो PEB मॉड्यूल सूची में नहीं है (DLL हॉलोइंग / मॉड्यूल स्टॉम्पिंग) |
TSAV_MODIFIED_HOST | HIGH | पता एक MEM_IMAGE आवंटन के अंदर है जिसे L1–L5 पाइपलाइन पहले से MODIFIED_CODE_*, MISSING_PEB, PRIVATE_RWX, DISK_MEM_DIFF, या HOOK_PROLOGUE के रूप में फ़्लैग कर चुकी है |
TSAV_STAGED_PRIVATE_RW | HIGH | MEM_PRIVATE + PAGE_READWRITE — पूर्व-VirtualProtect शेलकोड स्टेजिंग |
TSAV_MAPPED_NONPE | MEDIUM | MEM_MAPPED (पेजफ़ाइल-समर्थित सेक्शन) बिना PE हैडर के — sRDI / पेजफ़ाइल रिफ्लेक्टिव लोडर |
TSAV_SPOOF_TRAMPOLINE | MEDIUM | पता एक निषिद्ध ट्रैम्पोलिन से मेल खाता है (LoadLibraryA/W/ExA/W, WinExec, CreateProcessA/W, VirtualAlloc[Ex], RtlExitUserThread, RtlExitUserProcess, NtTerminateProcess, ShellExecuteA/W) |
QUERY_INFORMATION | GET_CONTEXTQUERY_INFORMATIONQUERY_LIMITED_INFORMATION| फ़िल्टर | नियम | FP वर्ग जिसे यह हटाता है |
|---|
| F1 | count >= 5 | यादृच्छिक पॉइंटर-आकार का डेटा, NULL, HMODULES |
| F2 | उन रनों को अस्वीकार करें जो केवल होस्ट EXE में इंगित करते हैं | एप्लिकेशन-क्लास C++ vtables |
| F3 | distinct_modules >= 2 | एकल-DLL फ्रेमवर्क vtables (Qt, MFC, wxWidgets) |
| F4 | capability_modules >= 2 | ब्राउज़र / CRT vtables जो एकल OS DLL को स्पर्श करते हैं (जैसे iertutil + ucrtbase + shlwapi) |
| F5 (L10) | जाँचने योग्य पॉइंटर्स का >= 80% निर्यातित RVAs पर उतरता है | Winsock LSP डिस्पैच टेबल्स, प्लगइन कॉलबैक ऐरे, आंतरिक (गैर-निर्यातित) विधियों की ओर इशारा करने वाले vtables |
| फ़्लैग | विवरण |
|---|
--pid, -p <PID> | स्कैन करने के लिए लक्ष्य प्रक्रिया ID |
--lookup, -l <name> | एक प्रक्रिया नाम से मेल खाने वाली सभी PID खोजें |
--json, -j | परिणाम JSON के रूप में आउटपुट करें (SIEM एकीकरण के लिए) |
--verbose, -v | प्रति-क्षेत्र स्कैन विवरण दिखाएँ |
--scan-all, -a | सभी प्रक्रियाओं को स्कैन करें |
--hunt, -b <PID> [ms] [hits] | कनेक्शन मॉनिटर करें — हर ms (डिफ़ॉल्ट 2000) पर पोल करें, ≥ hits घटनाओं वाले एंडपॉइंट को फ़्लैग करें |
--networking | नेटवर्क-मॉनिटरिंग मोड |
--rules, -r <dir> | नियम निर्देशिका (डिफ़ॉल्ट: rules/) |
--config, -c <file> | एकल नियम फ़ाइल (पुरातन प्रारूप) |
--dump, `` | कस्टम आकार के साथ विशिष्ट मेमोरी क्षेत्र डंप करें |
--read, `` | मेमोरी क्षेत्र सामग्री टर्मिनल पर लाइव पढ़ें |
--help, -h | सहायता दिखाएँ |