
Go असेंबली में AV/EDR बचाव के लिए अप्रत्यक्ष syscalls
Acheron एक लाइब्रेरी है जो SysWhisper3/FreshyCalls/RecycledGate से प्रेरित है, जिसमें अधिकांश कार्यक्षमता Go असेंबली में लागू की गई है।
acheron पैकेज का उपयोग आपके Golang ट्रेडक्राफ्ट में इनडायरेक्ट सिस्कॉल क्षमताएँ जोड़ने के लिए किया जा सकता है, ताकि उन AV/EDRs को बायपास किया जा सके जो यूज़रमोड हुक और इंस्ट्रुमेंटेशन कॉलबैक का उपयोग करके उन असामान्य सिस्कॉल्स का पता लगाते हैं जो ntdll.dll पर वापस नहीं लौटते, जब कॉल कर्नेल→यूज़रलैंड से संक्रमण करता है।
नया syscall प्रॉक्सी इंस्टेंस बनाते समय निम्नलिखित चरण किए जाते हैं:
Zw* फ़ंक्शन के लिए सिस्टम सर्विस नंबर की गणना करेंsyscall;ret गैजेट्स की गणना करें, जिनका उपयोग ट्रैम्पोलिन के रूप में किया जाएगाअपने offsec टूल्स में acheron को एकीकृत करना काफी आसान है। आप पैकेज को इस प्रकार इंस्टॉल कर सकते हैं:
go get -u github.com/f1zm0/acheron
फिर बस acheron.New() को कॉल करके एक syscall प्रॉक्सी इंस्टेंस बनाएँ और Nt* API के लिए इनडायरेक्ट syscall करने के लिए acheron.Syscall() का उपयोग करें।
न्यूनतम उदाहरण:
package main
import (
"fmt"
"unsafe"
"github.com/f1zm0/acheron"
)
func main() {
var (
baseAddr uintptr
hSelf = uintptr(0xffffffffffffffff)
)
// creates Acheron instance, resolves SSNs, collects clean trampolines in ntdll.dlll, etc.
ach, err := acheron.New()
if err != nil {
panic(err)
}
// indirect syscall for NtAllocateVirtualMemory
s1 := ach.HashString("NtAllocateVirtualMemory")
if retcode, err := ach.Syscall(
s1, // function name hash
hSelf, // arg1: _In_ HANDLE ProcessHandle,
uintptr(unsafe.Pointer(&baseAddr)), // arg2: _Inout_ PVOID *BaseAddress,
uintptr(unsafe.Pointer(nil)), // arg3: _In_ ULONG_PTR ZeroBits,
0x1000, // arg4: _Inout_ PSIZE_T RegionSize,
windows.MEM_COMMIT|windows.MEM_RESERVE, // arg5: _In_ ULONG AllocationType,
windows.PAGE_EXECUTE_READWRITE, // arg6: _In_ ULONG Protect
); err != nil {
panic(err)
}
fmt.Printf(
"allocated memory with NtAllocateVirtualMemory (status: 0x%x)\n",
retcode,
)
// ...
}
निम्नलिखित उदाहरण रिपॉजिटरी में शामिल हैं:
| उदाहरण | विवरण |
|---|---|
| sc_inject | अत्यंत सरल प्रोसेस इंजेक्शन PoC, जो डायरेक्ट और इनडायरेक्ट दोनों syscall का समर्थन करता है |
| process_snapshot |
अन्य प्रोजेक्ट जो acheron का उपयोग करते हैं:
योगदान का स्वागत है! नीचे कुछ चीज़ें दी गई हैं जो भविष्य में अच्छी होंगी:
यदि आपके पास कोई सुझाव या विचार हैं, तो बेझिझक एक issue या PR खोलें।
यह नाम ग्रीक पौराणिक कथाओं में Acheron नदी का संदर्भ है, जो वह नदी है जहाँ मृतकों की आत्माओं को अधोलोक में ले जाया जाता है।
नोट
यह प्रोजेक्ट सिमेंटिक वर्ज़निंग का उपयोग करता है। मामूली और पैच रिलीज़ को पिछले संस्करणों के साथ संगतता नहीं तोड़नी चाहिए। प्रमुख रिलीज़ का उपयोग केवल उन प्रमुख परिवर्तनों के लिए किया जाएगा जो पिछले संस्करणों के साथ संगतता तोड़ते हैं।
चेतावनी
यह प्रोजेक्ट केवल शैक्षिक उद्देश्यों के लिए बनाया गया है। इसका उपयोग उन प्रणालियों पर न करें जिनके आप मालिक नहीं हैं। इस प्रोजेक्ट का डेवलपर लाइब्रेरी के अनुचित उपयोग से होने वाले किसी भी नुकसान के लिए जिम्मेदार नहीं है।
यह प्रोजेक्ट MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है - विवरण के लिए LICENSE फ़ाइल देखें।
| सिस्कॉल के साथ प्रोसेस स्नैपशॉट लेने के लिए इनडायरेक्ट syscall का उपयोग |
| custom_hashfunc | कस्टम एन्कोडिंग/हैशिंग फ़ंक्शन का उदाहरण जिसे acheron के साथ उपयोग किया जा सकता है |