
RedPeanut은 .Net Core 2로 개발된 소형 RAT이며, 에이전트는 .Net 3.5/4.0으로 개발되었습니다.
__________________________________________________________________________
ooooooo________________oo_ooooooo___________________________________oo____
oo____oo___ooooo___oooooo_oo____oo__ooooo___ooooo__oo_ooo__oo____o__oo____
oo____oo__oo____o_oo___oo_oo____oo_oo____o_oo___oo_ooo___o_oo____o_oooo___
ooooooo___ooooooo_oo___oo_oooooo___ooooooo_oo___oo_oo____o_oo____o__oo____
oo____oo__oo______oo___oo_oo_______oo______oo___oo_oo____o_ooo___o__oo__o_
oo_____oo__ooooo___oooooo_oo________ooooo___oooo_o_oo____o_oo_ooo____ooo__
__________________________________________________________________________
________________________________________________RedPeanut_v0.3.0___@b4rtik
__________________________________________________________________________
현재 테스트 중입니다.
알려진 모듈 문제:
process -> spawnasagent
process -> spawnasshellcode
RedPeanut은 .Net Core 2로 개발된 소형 RAT이며, 그 에이전트는 .Net 3.5/4.0으로 개발되었습니다. RedPeanut의 코드 실행은 DonutCS로 생성된 셸코드를 기반으로 합니다. 따라서 .Net으로 개발되었지만 Assembly.Load에만 의존하지 않는 하이브리드 방식입니다. 이는 탐지 표면을 증가시키지만, dotnet 환경, 프로세스 관리 및 인젝션과 관련된 다양한 회피 기술을 연습하고 실험할 수 있게 해줍니다. 이 동작은 "managed" 및 "unmanaged" 명령으로 런타임에 변경할 수 있습니다. 일관성 있고 실제 업무에 사용할 수 있는 .Net C2 프레임워크에 관심이 있다면 Covenant를 추천합니다.
RedPeanut은 다음 도구로 무장되어 있습니다:
RedPeanut 에이전트는 .Net 3.5 및 4.0으로 컴파일할 수 있으며 NamedPipe를 통한 피벗 기능이 있습니다. 에이전트가 비관리(unmanaged) 모드로 실행될 때, 중요한 작업을 별도 프로세스에서 수행하여 AV의 탐지나 실행 중 오류로 인해 전체 에이전트를 잃지 않도록 합니다.
실행 흐름은 다음과 같습니다:
에이전트는 현재 https 채널만 지원합니다.
에이전트 체크인 프로토콜은 매우 간단합니다:
또는 은폐 채널(covered channel) 기능을 활성화할 수 있습니다(현재는 PoC 수준입니다). 아이디어는 실제 사용자가 수행하는 웹 트래픽을 모방하는 것입니다. 일반적으로 웹 페이지는 HTML 페이지와 CSS, 이미지 등 표시에 필요한 모든 객체로 구성됩니다. 새 작업 요청 시 서버의 응답은 암호화된 작업을 직접 반환하는 대신, 암호화된 작업이 포함된 이미지로의 링크를 추출할 수 있는 HTML 페이지가 반환됩니다. 이미지에 대한 HTTP 요청에는 Referer 헤더가 포함됩니다.
콘텐츠 전달은 4개의 채널로 구성됩니다:
RedPeanut은 서버 측과 클라이언트 측 모두의 네트워크 풋프린트를 사용자 정의할 수 있습니다. 설정할 수 있는 속성은 다음과 같습니다:
Domain Fronting
도메인 프론팅을 활성화하려면 클라이언트 섹션(Post 및 Get 모두)에서 "Host" 헤더 값을 설정해야 합니다(기본 프로필 2에 예시됨).
PowerShellExecuter 모듈을 사용하면 AMSI 우회, 로깅 우회 및 PowerView가 이미 로드된 runspace에서 원라이너 명령이나 파일을 실행할 수 있습니다.
버전 0.3.0부터 RedPeanutAgent는 blockdlls 명령을 지원합니다. 이 옵션이 활성화되면 비관리 모드에서 작업을 수행하기 위해 생성되는 자식 프로세스는 PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON 속성으로 생성됩니다. 이 속성은 Microsoft 서명이 없는 DLL이 프로세스에 로드되는 것을 방지하여, AV 및 EDR 후킹 기술로부터 작업을 보호할 수 있습니다.
RedPeanutAgent는 의심스러운 DLL 임포트 사용을 피하기 위해 동적 DLL 로드를 사용합니다. 동적 DLL 로드의 크레딧은 @TheRealWover, @cobbr_io 및 @FuzzySec에게 있으며, 그들의 작업은 SharpSploit에 있습니다.
일부 AV 및 EDR 벤더는 활동을 추적하기 위해 후킹 기술을 사용합니다. 후킹된 syscall 사용을 피하기 위해 RedPeanutAgent는 직접 syscall을 사용하며, 필요한 코드를 자동으로 인젝션합니다. 직접 Syscall의 크레딧은 @Cneelis에게 있습니다.
RedPeanut을 실행하려면 dotnet이 설치되어 있어야 합니다. Kali에 dotnet을 설치하려면:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/debian/9/prod.list
mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
chown root:root /etc/apt/sources.list.d/microsoft-prod.list
apt-get install apt-transport-https
apt-get update
apt-get install dotnet-sdk-2.1
git clone --recursive https://github.com/b4rtik/RedPeanut.git
은폐 채널 기능을 사용하려면 libgdiplus 라이브러리를 설치해야 합니다. 따라서:
리눅스 사용자:
apt-get install -y libgdiplus
OSX:
brew install mono-libgdiplus
어셈블리 서명 키 생성
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>sn.exe -k 4096 key.snk
그런 다음 key.snk를 Workspace/KeyFile에 복사하십시오.
root@kali:~# cd RedPanut
root@kali:~/RedPeanut# dotnet run
Using launch settings from /root/Projects/RedPeanut/Properties/launchSettings.json...
Enter password to encrypt serverkey:
__________________________________________________________________________
ooooooo________________oo_ooooooo___________________________________oo____
oo____oo___ooooo___oooooo_oo____oo__ooooo___ooooo__oo_ooo__oo____o__oo____
oo____oo__oo____o_oo___oo_oo____oo_oo____o_oo___oo_ooo___o_oo____o_oooo___
ooooooo___ooooooo_oo___oo_oooooo___ooooooo_oo___oo_oo____o_oo____o__oo____
oo____oo__oo______oo___oo_oo_______oo______oo___oo_oo____o_ooo___o__oo__o_
oo_____oo__ooooo___oooooo_oo________ooooo___oooo_o_oo____o_oo_ooo____ooo__
__________________________________________________________________________
________________________________________________RedPeanut_v0.3.0___@b4rtik
__________________________________________________________________________
[*] No profile available, creating new one...
[RP] >
DonutCS는 .NET 어셈블리로부터 위치 독립적인 셸코드 페이로드를 생성하는 도구입니다. 이 셸코드는 임의의 Windows 프로세스에 어셈블리를 인젝션하는 데 사용될 수 있습니다. 주어진 .NET 어셈블리, 매개변수 및 진입점(예: Program.Main)을 기반으로 메모리에서 이를 로드하는 위치 독립적인 셸코드를 생성합니다. .NET 어셈블리는 URL에서 스테이징되거나 셸코드에 직접 포함되어 스테이지리스 방식이 될 수 있습니다.
CLR 지속성 기술은 @Am0nsec이 이 포스트에서 처음 소개했습니다. 이 기술은 애플리케이션 도메인 관리자 후킹을 수행하는 것입니다. 포스트에서 설명된 대로, 후킹을 수행하려면 GAC에서 사용 가능한 어셈블리가 필요합니다. GAC에서 사용할 어셈블리는 강력한 이름(strong-named)을 가져야 하며 키로 서명되어야 합니다. CLR 지속성 모듈은 어셈블리에 서명할 수 있는 키가 필요하며, 다음과 같이 sn.exe 도구로 생성할 수 있습니다:
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>sn.exe -k 4096 key.snk
key.snk 파일을 Workspace/KeyFile 폴더에 복사하십시오. 이 파일은 지속성을 위해 어셈블리에 서명하는 데 사용됩니다.
RedPeanut에 포함된 잘 알려진 도구들(예: GhostPack 도구)은 완전히 래핑되어 클라이언트 측에서 실행됩니다. 전체 저장소를 업데이트하지 않고 도구(예: SeatBelt)를 업데이트하려면 다음이 필요합니다: Seatbelt 저장소를 클론하고, "Main" 메서드 이름을 "Execute"로 변경하고, public 수식자를 추가한 후 dll로 다시 컴파일합니다. dll은 RastaMouse의 PowerShell 스크립트 Get-CompressedShellcode.ps1을 사용하여 압축 및 Base64 인코딩되어야 합니다.