
GRAT2 C2
(c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c)
/ ._. \ / ._. \ / ._. \ / ._. \ / ._. \
\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/
(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
|| G || || R || || A || || T || || 2 ||
_.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._
(.-./`-'\.-.)(.-./`-`\.-.)(.-./`-'\.-.)(.-./`-'\.-.)(.-./`-'\.-.)
`-' `-' `-' `-' `-' `-' `-' `-' `-' `-'
v1.1 beta!
GRAT2 소개
GRAT2는 python3로 작성된 Command and Control (C2) 도구이며, 클라이언트는 .NET 4.5로 작성되었습니다. 주요 아이디어는 이 프로젝트를 시작한 Georgios Koumettou에게서 비롯되었습니다.
왜 GRAT2를 개발했는가?
이미 수많은 C2 도구가 존재한다는 것을 알고 있지만, C2와 다양한 회피 기법이 어떻게 작동하는지에 대한 호기심으로 이 도구를 개발했습니다. 그게 다입니다! ;-)
현재 기능:
회피 기법:
- 샌드박스 (도메인에 가입되어 있는지 확인, 그렇지 않으면 종료).
- ETW(Event Tracing for Windows) 로깅 패치.
- AMSI(Antimalware Scan Interface) 패치.
- caretrun - caret 형식(^i^p^c^o^n^f^i^g)으로 cmd.exe를 통해 명령을 실행하며, explorer.exe를 부모 PID로 사용합니다 (일부 AV/EDR 우회).
통신:
- HTTP 및 HTTPS
- DNS - 현재 TXT 레코드만 지원합니다.
- XOR 및 base64를 사용한 인코딩 통신.
- 프록시 인식.
모듈:
- startdns - DNS 리스너 서버 시작.
- listagents - 현재 에이전트 목록.
- localip - 시스템의 로컬 IP 주소 획득.
- uac - 부모 PID 스푸핑 기술을 사용한 무음 디스크 정리(silent disk clean-up)로 UAC 우회 시도.
- maketoken - 현재 토큰을 제거하고 주어진 자격 증명(도메인 또는 로컬)으로 새 토큰 생성.
- revtoself - 현재 토큰 제거.
- stealtoken - 실행 중인 프로세스에서 토큰을 탈취하여 사용자 가장 시도 (관리자 권한 필요).
- rportfwd - 역방향 포트 포워딩 생성 시도.
- whoami - 현재 사용자 표시.
- hostname - 시스템 호스트명 표시.
- domain - 도메인 FQDN 표시.
- screenshot - 스크린샷 촬영.
- download - 파일 다운로드.
- upload - 파일 업로드.
- cd - 디렉터리 변경.
- run - explorer.exe를 부모 PID로 사용하여 cmd.exe를 통해 명령 실행.
- caretrun - caret 형식(^i^p^c^o^n^f^i^g)으로 cmd.exe를 통해 명령을 실행하며, explorer.exe를 부모 PID로 사용합니다 (일부 AV/EDR 우회).
- sleep - 새 sleep 시간 설정.
- exit - 종료.
- shell - cmd.exe를 통해 명령 실행.
- powershell - 비관리형 PowerShell(Unmanaged PowerShell)을 사용하여 PowerShell 명령 실행.
- powerscript - 비관리형 PowerShell을 사용하여 PowerShell 스크립트 실행.
- executeassembly - 메모리에서 .NET 어셈블리 실행 시도.
- ps - 현재 프로세스 출력.
- pwd - 현재 디렉터리 출력.
- ls - 디렉터리 목록.
- pid - 현재 프로세스 ID 출력.
프로세스 인젝션 기술:
- dynamic_injectcrt - Dynamic Invoke를 사용하여 프로세스에 셸코드 인젝션 시도.
- ppid_processhollow - Process Hollowing 및 부모 PID 스푸핑(explorer.exe) 기술을 사용하여 프로세스에 셸코드 인젝션 시도.
- processhollow - Process Hollowing 기술을 사용하여 프로세스에 셸코드 인젝션 시도.
- injectppidapc - QueueUserAPC 및 부모 PID 스푸핑(explorer.exe) 기술을 사용하여 프로세스에 셸코드 인젝션 시도.
- injectapc - QueueUserAPC 기술을 사용하여 프로세스에 셸코드 인젝션 시도.
- injectcrt - Create Remote Thread 기술을 사용하여 원격 프로세스에 셸코드 인젝션 시도.
셸코드 생성에 관해서는 GRAT2_Shellcodes를 참조하십시오. Donut을 사용하여 위치 독립적인 셸코드를 생성합니다.
TODO:
- SMB 리스너.
- A 레코드 추가, DNS에서 HTTP로 전환 등 더 많은 기능을 추가하여 DNS 리스너 개선.
- 로깅 추가.
- SOCKS5 구현.
- 알려진 문제 수정.
클라이언트 프로필 구성:

일반 설정 및 HTTP/s 리스너:
-
c2 - GRAT2 서버 IP 주소 또는 호스트 이름 (필수).
-
sandboxEvasion - 활성화(1)하면 도메인에 가입된 컴퓨터에서만 GRAT2가 실행되고, 그렇지 않으면 GRAT2가 종료됩니다. 비활성화(0)하면 도메인에 가입되지 않은 컴퓨터에서만 GRAT2가 실행되고, 그렇지 않으면 종료됩니다 (기본값: 비활성화).
-
patchEtw - 활성화(1)하면 ETW(Event Tracing for Windows)가 패치됩니다 (기본값: 활성화).
-
patchAmsi - 활성화(1)하면 AMSI(Antimalware Scan Interface)가 패치됩니다 (기본값: 활성화).
-
sleep - sleep 시간 설정 (기본값: 3초).
-
UserAgent - UserAgent 설정 (기본값: "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko").
-
initialUrl - 초기 GRAT2 HTTP GET 요청 (기본값: jquery.js).
-
sendResults - GRAT2 HTTP POST 결과 요청 (기본값: login.aspx).
참고: initialUrl 또는 sendResults 문자열을 변경하는 경우, GRAT2_Server/handlers.py의 49행과 84행에 있는 문자열도 업데이트해야 합니다.
DNS 리스너:
- DNSListener - 활성화(1) 또는 비활성화(0). 활성화하는 경우 아래 설명에 따라 GRAT2 서버를 적절히 구성하십시오.
- DNSServer - GRAT2 DNS 서버.
- dnsMaxTXT - TXT 레코드의 최대 길이 (기본값: 255).
- maxDNSChar - 각 DNS 서브도메인의 최대 문자 크기 (기본값: 63).
서버 프로필 구성:

HTTP/s 및 DNS 리스너:
- HOST_NAME - GRAT2 서버 IP 주소 또는 호스트 이름.
- PORT_NUMBER - 수신 포트 (80 또는 443).
- server_pem - PEM 파일 경로.
- dnsDomainName - GRAT2 DNS 서버.
사용법:
- Visual Studio에서 GRAT2 클라이언트 프로젝트(GRAT2_Client.sln)를 열고, 솔루션 구성을 Debug에서 Release로 변경한 후 빌드합니다.
- GRAT2 서버에 **두 가지 종속성(dnslib 및 termcolor)**을 설치합니다: pip3 install -r requirements.txt
- GRAT2 서버 시작:

- GRAT2 클라이언트 실행 파일 실행 - GRAT2_Client\bin\Release\GRAT2_Client.exe
- 에이전트와 상호작용:

릴리스 노트:
버전 1.0 - 2020년 9월 5일
버전 1.1 - 2020년 12월 13일
- DNS 리스너 추가
- HTTPS 리스너 추가
- 에이전트 목록 기능 추가
- 시스템의 로컬 IP 주소를 얻을 수 있는 localip 모듈 추가
- 비관리형 PowerShell(Unmanaged PowerShell) 재작성
- .NET 4.0에서 .NET 4.5로 변경
크레딧:
또한 각 저자와 참조 링크는 소스 코드에 명시되어 있습니다.
고지 사항:
이 프로젝트는 승인된 테스트 또는 교육 목적으로만 사용할 수 있습니다. 사전 허가 없이 이 소프트웨어를 대상 시스템에 사용하는 것은 불법이며, 이 소프트웨어의 오용으로 인한 모든 손해에 대해 저자는 책임을 지지 않습니다.