技术深度剖析:反作弊绕过与 EDR 绕过的比较

在不断发展的数字安全领域,出现了两个突出的挑战,它们对在线系统和用户数据的完整性构成了重大威胁:反作弊绕过和 EDR 绕过。这两个概念分别围绕绕过旨在确保在线游戏领域公平竞争和保护计算机系统免受恶意软件侵害的保护措施。这篇文章将深入探讨反作弊绕过和 EDR 绕过的目标,探索这些活动背后的动机及其影响,并区分合法的安全研究和非法活动。

方面反作弊绕过EDR 绕过
目标环境游戏应用程序和平台通用计算环境和系统
客观的在多人游戏中逃避检测绕过 EDR 软件检测
技术代码注入、挂钩、数据包操纵多态恶意软件、rootkit、代码混淆
检测机制启发式分析、行为监控基于签名的检测、启发式方法、沙盒
对用户的影响游戏中的不公平优势,游戏剥削的可能性系统完整性受损、数据被盗和恶意软件感染
法律影响违反游戏平台服务条款非法活动、数据泄露和法律后果
生态系统影响游戏体验下降,开发者收入损失恶意软件大规模爆发,用户数据遭窃
对策定期更新、服务器端验证、玩家报告定期 EDR 更新、入侵检测系统、用户教育

反作弊绕过

反作弊绕过是指规避或突破在线游戏中为检测和防止作弊而实施的安全机制的过程。试图绕过反作弊系统的个人的主要目的是获得比其他玩家不公平的优势,破坏游戏体验的平衡性和完整性。在线游戏中的作弊可以采取各种形式,包括瞄准机器人、透视、速度黑客和其他提供不公平优势的修改。

绕过反作弊系统的动机

个人参与反作弊绕过活动的动机是多方面的。有些人寻求超越安全系统的刺激,这是由突破数字障碍的挑战所驱动的。其他人可能是为了在黑客社区中获得认可,或通过出售作弊工具和服务来将他们的漏洞货币化。在某些情况下,玩家可能会诉诸作弊,作为对游戏环境中明显不公平现象的反抗。

合法安全研究与反作弊绕过中的非法活动

在讨论反作弊绕过时,区分合法的安全研究和非法活动至关重要。道德黑客可能会进行负责任的披露,帮助游戏开发者识别漏洞并加强他们的反作弊措施。然而,那些利用这些漏洞谋取私利或破坏在线社区的个人则属于非法行为者,威胁着在线生态系统的稳定。

EDR 绕过

另一方面,EDR 绕过涉及逃避或规避 EDR 软件用于识别和消除恶意软件的检测机制。恶意软件开发人员和网络犯罪分子使用各种技术来创建和分发 EDR 程序无法检测到的恶意软件,从而使他们能够破坏系统、窃取敏感信息或发起其他恶意活动。

EDR 绕过背后的动机

EDR 绕过背后的动机主要是恶意的,其驱动力是逃避检测并确保成功部署恶意软件。网络犯罪分子的目的是为了经济利益、间谍活动或其他邪恶目的而危害个人用户、企业和组织的安全。网络安全的不断发展要求恶意软件开发人员领先于安全解决方案一步,从而导致攻击者和防御者之间永无休止的军备竞赛。

合法安全研究与 EDR 绕过中的非法活动

合法的安全研究和 EDR 绕过中的非法活动凸显了加强网络安全和利用漏洞进行恶意攻击之间的界限。有道德的研究人员旨在通过负责任的披露和遵守法律框架来加强安全态势,这与那些在法律界限之外恶意行动的攻击者形成鲜明对比。这种动态强调了持续投资于安全研究和网络安全社区内部合作的迫切需要,以领先于不断演变的威胁。

反作弊绕过和 EDR 绕过

反作弊绕过和 EDR 绕过的目标在重点和影响上有所不同。反作弊绕过旨在破坏在线游戏的公平竞争,而 EDR 绕过则试图出于恶意目的破坏计算机系统的安全性。区分合法的安全研究和非法活动对于应对这些挑战和营造安全的数字环境至关重要。随着技术的不断进步,对创新和适应性安全措施的需求变得越来越明显,以抵消那些试图利用漏洞谋取利益的人的持续努力。

在不断发展的网络安全格局中,攻击者和防御者之间永无休止的斗争催生了双方复杂的工具和技术。虽然反作弊绕过和 EDR 绕过都涉及规避安全措施,但它们针对的是不同的领域,反作弊侧重于游戏环境,而 EDR 侧重于整体系统保护。

Windows API类别反作弊绕过EDR 绕过
执行
创建远程线程代码注入
虚拟分配内存代码注入
写入进程内存代码注入
创建进程流程创建
加载库动态链接库 (DLL) 加载
执行命令流程执行
持久性
注册表设置值注册表修改
创建服务服务创建
变更服务配置服务配置
权限提升
调整Token权限Token 权限修改
开放进程令牌代币操纵
启用权限启用特定权限
防御规避和反分析
查询系统信息系统信息查询
设定信息处理程序制程信息设定
设置线程上下文线程上下文修改
ZwUnmapViewOfSection内存部分取消映射
输出调试字符串调试输出

反作弊绕过技术

代码注入和挂钩

设想这样一个场景:攻击者试图通过在游戏进程中注入自定义 DLL 来在在线游戏中获得不公平的优势。这些 DLL 可能包含作弊手段,例如瞄准机器人或透视攻击,允许玩家操纵游戏环境并占据上风。

#include <Windows.h> 

void InjectDLL(DWORD processId, const char* dllPath) { 
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId); 
    LPVOID dllPathAddr = VirtualAllocEx(hProcess, NULL, strlen(dllPath) + 1, MEM_COMMIT, PAGE_READWRITE); 
    WriteProcessMemory(hProcess, dllPathAddr, dllPath, strlen(dllPath) + 1, NULL); 
  
    LPVOID loadLibraryAddr = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 

    HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)loadLibraryAddr, dllPathAddr, 0, NULL);

    WaitForSingleObject(hThread, INFINITE);

    CloseHandle(hThread);
    VirtualFreeEx(hProcess, dllPathAddr, 0, MEM_RELEASE);
    CloseHandle(hProcess);
}

int main() {
    InjectDLL(1234, "C:\\Path\\To\\Your\\Hack.dll");
    return 0;
}

多人游戏中的函数挂钩

在多人游戏领域,攻击者可能会使用函数挂钩技术来拦截和修改负责玩家健康或弹药的函数。这种操纵可以通过使攻击者的角色无敌或提供无限弹药来提供非法优势。

#include <Windows.h> 
#include <iostream> 

// Original function 
int OriginalFunction(int a, int b) { 
    return a + b; 
} 

// Hooked function 
int HookedFunction(int a, int b) { 
    std::cout << "HookedFunction is called!" << std::endl; 
    return OriginalFunction(a, b); 
} 

int main() { 
    // Replace the original function with the hooked function 
    DetourTransactionBegin(); 
    DetourUpdateThread(GetCurrentThread()); 
    DetourAttach(&(PVOID&)OriginalFunction, HookedFunction); 
    DetourTransactionCommit(); 

    // Call the hooked function 
    int result = OriginalFunction(10, 20); 

    // Cleanup 
    DetourTransactionBegin(); 
    DetourUpdateThread(GetCurrentThread()); 
    DetourDetach(&(PVOID&)OriginalFunction, HookedFunction); 
    DetourTransactionCommit(); 

    return 0; 
}

数据包操作

作弊者经常使用 Scapy 等工具操纵网络数据包,以更改游戏客户端和服务器之间发送的信息。例如,攻击者可以修改其角色在游戏世界中的坐标,从而制造出瞬间移动或超人速度的幻觉。

#include <WinSock2.h> 

int main() { 
    // Initialize Winsock 
    WSADATA wsaData; 
    WSAStartup(MAKEWORD(2, 2), &wsaData); 

    // Create a socket 
    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 

    // Connect to the game server 
    sockaddr_in serverAddr; 
    serverAddr.sin_family = AF_INET; 
    serverAddr.sin_port = htons(1234); 
    inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr); 
    connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr)); 

    // Manipulate outgoing packet 
    const char* modifiedData = "ModifiedPacketData"; 
    send(sock, modifiedData, strlen(modifiedData), 0); 

    // Cleanup 
    closesocket(sock); 
    WSACleanup(); 
    return 0; 
}

代码混淆

为了避免被发现,作弊开发者在创建游戏作弊代码时可能会使用代码混淆技术。这涉及将作弊代码转换为更复杂和更令人费解的形式,使反作弊系统难以识别和分析恶意代码。

// Example of basic code obfuscation 

void ObfuscatedFunction() { 
    int a = 5; 
    int b = 10; 

    // Unnecessary instructions for obfuscation 
    a = a + 1; 
    b = b - 1; 

    int result = a + b; 
    // ... 
}

EDR 绕过技术

多态恶意软件

想象一下这样一个场景:多态恶意软件变体通过网络钓鱼活动进行传播。恶意软件不断变异其代码以逃避基于签名的检测,这使得传统的 EDR 解决方案难以识别和阻止恶意负载。

下面的示例是一个功能完全相同但操作码有明显差异的应用程序。该示例演示了每次跳转之间使用大量垃圾代码来绕过签名扫描。

Rootkit 技术

在现实场景中,高级持续性威胁 (APT) 可能会部署内核模式 rootkit 来隐藏其在受感染系统上的存在。此 rootkit 在操作系统的深层运行,这使得 EDR 解决方案难以检测和删除。

#include <ntddk.h> 

NTSTATUS MyNtQuerySystemInformation( 
    SYSTEM_INFORMATION_CLASS SystemInformationClass, 
    PVOID SystemInformation, 
    ULONG SystemInformationLength, 
    PULONG ReturnLength 
) { 
    NTSTATUS status = OriginalNtQuerySystemInformation( 
        SystemInformationClass, 
        SystemInformation, 
        SystemInformationLength, 
        ReturnLength 
    ); 

    // Modify SystemInformation to hide specific processes 
    // ... 
    return status; 
}
#include <Windows.h> 

BOOL HideFile(const wchar_t* filePath) { 
    return SetFileAttributes(filePath, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM); 
}

额外的技术

利用漏洞

威胁者可能会利用堆溢出漏洞来危害高价值目标。通过操纵内存分配,攻击者可以执行任意代码,绕过传统的 EDR 防御并获得对敏感系统的持久访问权限。

// Example of a heap overflow vulnerability 
#include <stdlib.h> 

void HeapOverflowVulnerability() { 
    char* buffer = (char*)malloc(10); 
    // Vulnerable code allowing heap overflow 
    free(buffer); 
}

Shellcode 绕过技术

在现实世界的勒索软件活动中,攻击者可能会使用编码的 shellcode 来混淆其恶意负载。这种编码有助于勒索软件逃避基于签名的检测,使其能够加密文件并索要赎金,而无需立即被发现。

#include <Windows.h> 

int main() { 
    // Encoded shellcode 
    unsigned char encodedShellcode[] = { /* Encoded shellcode bytes */ }; 

    // Allocate executable memory 
    LPVOID execMem = VirtualAlloc(NULL, sizeof(encodedShellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); 

    // Decode shellcode 
    // ... 
    // Copy decoded shellcode to executable memory 
    memcpy(execMem, decodedShellcode, sizeof(decodedShellcode)); 

    // Execute decoded shellcode 
    ((void(*)())execMem)(); 

    // Cleanup 
    VirtualFree(execMem, 0, MEM_RELEASE); 
    return 0; 
}

字符串混淆

恶意软件经常使用字符串混淆技术(例如对字符串进行异或运算)来避免签名扫描和启发式分析。通过对关键字符串进行异或运算,攻击者使 EDR 解决方案难以识别与恶意软件相关的特定模式。

#include <iostream> 
#include <string> 

std::string xorString(const std::string& input, const std::string& key) { 
    std::string result = input; 
    for (size_t i = 0; i < input.size(); ++i) { 
        result[i] = input[i] ^ key[i % key.size()]; 
    } 

    return result; 
} 

int main() { 
    std::string encryptedString = "YourEncryptedString"; 
    std::string decryptionKey = "YourSecretKey"; 
    std::string decryptedString = xorString(encryptedString, decryptionKey); 
    std::cout << "Decrypted String: " << decryptedString << std::endl; 

    return 0; 
}

反调试技术

恶意软件活动经常使用反调试技术来阻止安全研究人员的分析。这包括检测调试器的存在、动态改变代码行为以及使用复杂的条件断点来逃避分析过程中的检测。

#include <windows.h> 

// Function to detect debugger presence 
bool isDebuggerPresent() { 
    return IsDebuggerPresent(); 
} 

// Function with conditional breakpoints to hinder analysis 
void antiDebuggingFunction() { 
    __asm { 
        // Check if debugger is present 
        call isDebuggerPresent 
        test eax, eax 
        jnz debuggerDetected 

        // Normal code execution 
        // ... 
        jmp endAntiDebugging 

    debuggerDetected: 
        // Code to execute when debugger is detected 
        // This can include anti-analysis measures 
        // ... 

    endAntiDebugging: 
    } 
} 

int main() { 
    // Main program logic 
    // ... 

    // Call the anti-debugging function 
    antiDebuggingFunction(); 

    return 0; 
}

结论

在网络安全领域,反作弊绕过和 EDR 绕过之间的比较凸显了攻击者为规避安全措施而采用的各种策略。虽然反作弊绕过主要侧重于利用游戏环境中的漏洞,但 EDR 绕过技术将其范围扩大到危害整个系统安全。尽管目标不同,但这两个领域的攻击者所采用的底层方法有明显的相似之处。例如,代码注入、混淆和逃避检测机制在反作弊和 EDR 绕过技术中都很常见。然而,与每个领域相关的具体细微差别和挑战需要量身定制的防御机制。

利用 Windows API 函数执行、持久性和特权升级的共同点凸显了这些安全挑战的相互关联性。随着防御者不断适应和创新,了解这些相似之处和差异对于构建保护不同计算环境的全面安全态势至关重要。通过认识到反作弊和 EDR 绕过技术所带来的共同策略和独特挑战,网络安全专业人员可以更好地为不断变化的数字威胁格局做好准备。

原文链接:https://whiteknightlabs.com/2024/02/09/a-technical-deep-dive-comparing-anti-cheat-bypass-and-edr-bypass/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sec0nd_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值