본문 바로가기

Program/토스뱅크 사이버보안 엔지니어 부트캠프(공격&방어 기술)

Havoc Framework

1. Havoc Framework

1.1 개요

Havoc은 침투 테스트, 레드팀, 블루팀을 위해 설계된 오픈소스 C2 프레임워크이다.

 

 

1.2 구성요소

구조 구성요소 설명
C2 Server Teamserver Listener 운영, Agent 콜백 처리, 명령 전달
Operator Havoc Client (UI) C2를 조작·운영, Teamserver 접속, Listener·Payload 생성, 세션 관리
~/Havoc/profiles/havoc.yaotl에 운영자 계정정보 존재
Agent Demon / SMB / External 피해자 시스템에서 명령 실행

 

1) TeamServer

서버는 중앙 제어 서버이다.

Operator(Client)와 에이전트(Implants)간의 모든 통신과 명령 전달을 담당하고, 에이전트에 작업을 할당하며, 콜백, 리스너, 다운로드된 파일 및 스크린샷을 에이전트에서 파싱한다.

알려진 등록된 운영자가 접근할 수 있도록 공용 VPS에서 실행되어야 한다.

 

2) Client

클라이언트는 서버 사용자의 인터페이스이다. 

클라이언트를 통해 에이전트와 상호 작용하고, 에이전트에 명령을 할당하고, 에이전트의 출력을 받을 수 있다.

C2 명령/제어를 분리하여 운영자가 편리하게 에이전트를 제어하도록 만든 설계이다.

 

 

2. 설치

2.1 공통

1) 깃 클론

git clone https://github.com/HavocFramework/Havoc.git

 

2) 의존성 설치

cd Havoc
sudo apt update
sudo apt install -y git build-essential cmake golang nasm mingw-w64 \
libqt5x11extras5-dev libqt5svg5-dev libqt5websockets5-dev \
libprotobuf-dev protobuf-compiler libfontconfig1-dev libfreetype6-dev \
libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev \
libxcb1-dev libx11-xcb-dev libxcb-glx0-dev \
nlohmann-json3-dev libspdlog-dev libfmt-dev

패키지명 구분 역할/설명
git 개발 도구 GitHub 저장소 클론 및 소스 코드 버전 관리
build-essential 빌드 도구 gcc, g++, make 등 C/C++ 기본 컴파일 도구
cmake 빌드 도구 플랫폼 독립적 C/C++ 빌드 시스템
golang Go 언어 Havoc Teamserver(Go) 빌드
nasm 어셈블러 저수준 바이너리·쉘코드 빌드
mingw-w64 크로스 컴파일 Linux에서 Windows 실행 파일(EXE) 빌드
libqt5x11extras5-dev Qt / X11 Qt에서 X11 네이티브 기능 사용
libqt5svg5-dev Qt / 그래픽 SVG 벡터 이미지 렌더링
libqt5websockets5-dev Qt / 네트워크 WebSocket 기반 실시간 통신
libprotobuf-dev 직렬화 Protocol Buffers 라이브러리
protobuf-compiler 직렬화 .proto 파일 컴파일러(protoc)
libfontconfig1-dev 폰트 시스템 폰트 검색 및 설정
libfreetype6-dev 폰트 TrueType/OpenType 폰트 렌더링
libx11-dev X11 X Window System 기본 라이브러리
libxext-dev X11 확장 X11 확장 기능 지원
libxfixes-dev X11 확장 커서·화면 영역 관리 기능
libxi-dev X11 입력 마우스·키보드 등 입력 장치 처리
libxrender-dev X11 렌더링 2D 그래픽 렌더링 지원
libxcb1-dev XCB X11 비동기 통신 라이브러리
libx11-xcb-dev X11/XCB Xlib ↔ XCB 연동
libxcb-glx0-dev OpenGL/X11 X11 환경에서 OpenGL(GLX) 지원
nlohmann-json3-dev JSON C++ JSON 파싱/직렬화 라이브러리
libspdlog-dev 로깅 고성능 C++ 로그 라이브러리
libfmt-dev 포맷팅 문자열 포맷팅(fmt) 라이브러리

 

 

3) 서브모듈 업데이트

git submodule update --init --recursive

 

 

2.2 팀서버 빌드

cd Teamserver
go mod download
go build -ldflags="-s -w" -o teamserver main.go

 


2.3 클라이언트 빌드

1) libtoml11-dev v4가 설치되어 있는지 확인

Installed: (none)은 현재 시스템에 libtoml11-dev가 설치되어 있지 않음을 의미한다.

Candidate: 4.4.0-1은 Kali rolling 저장소에서 설치 가능한 최신 버전을 의미한다.

 

 

2) toml11 v3.7.1 소스 직접 다운로드 및 압축 해제

wget https://github.com/ToruNiina/toml11/archive/refs/tags/v3.7.1.tar.gz
tar -xvf v3.7.1.tar.gz

 

 

3) /toml11 v3.7.1에 있는 toml.hpp 파일과 toml/ 디렉토리를 Havoc/client/include 디렉토리로 이동

 

 

4) CMakeList.txt 파일 수정

 

 

5) 빌드

 

 

 

2.4 서버 실행

1) Havoc Teamserver 설치 및 초기화 스크립트 실행

 

2) 실행

sudo ./teamserver server --profile ../profiles/havoc.yaotl -v --debug

 

 

2.5 클라이언트 실행

1) 서브 모듈 설치

 

2) 실행

 

3) 계정 생성

 

 

3. Listener

3.1 설명

- 종류:  HTTP/HTTPS는 기본 C2, SMB는 내부 통신, External C2는 확장 인터페이스

Listener 유형 주요 통신 방식 Demon Service 주요 사용 목적
HTTP HTTP POST 지원 지원 기본 C2
HTTPS HTTPS POST 지원 지원 은닉·보안 C2
SMB Named Pipe 미지원 지원 내부 P2P 통신
External C2 외부 구현 지원 지원 커스텀 C2

 

 

3.2 생성

[View] - [Listeners] - [Add] 

 

 

3.3 필드

필드 타입 설명 필수 여부
Hosts string array 에이전트가 접속할 호스트 목록. host:port 또는 host 형식 사용 가능
지정하지 않으면 Bind 정보 사용
선택
Port int Listener가 바인딩(bind)할 포트 필수
Host (Bind) string Listener가 바인딩될 IP 주소 필수
Host Rotation string 여러 Hosts 사용 시 호스트 선택 방식 필수
User Agent string 에이전트가 사용할 HTTP User-Agent 문자열 필수
Headers string array HTTP 요청에 포함될 헤더. 지정하지 않으면 기본값(Content-type: */*) 사용 선택
Uris string array 에이전트가 요청할 URI 경로. 지정하지 않으면 / 사용 선택
Enable Proxy connection bool HTTP/HTTPS 요청 시 프록시 사용 여부 선택

 

 


4. Payload 만들기

4.1 개념

 

 

4.2 생성

[Attack] - [Payload]

 

 

 

 

5. 

5.1 칼리에서 웹 서버 실행

 

 

5.2 실시간 보호 끄기

설정 > 업데이트 및 보안 > Windows 보안 > 바이러스 및 위협 방지 > 설정 관리

 

 

5.3 윈도우 브라우저에서 칼리IP로 접속 후 다운로드

 

 

5.4 파일 실행 후 프로세스 확인

 

 

5.5 칼리에서 확인

 

 


실패 원인 및 이유

 

1. 의존성 설치

cd Havoc
sudo apt install -y git build-essential apt-utils cmake libfontconfig1 libglu1-mesa-dev libgtest-dev libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 libqt5websockets5-dev qtdeclarative5-dev golang-go qtbase5-dev libqt5websockets5-dev python3-dev libboost-all-dev mingw-w64 nasm

패키지명 구분 역할/설명
git 개발 도구 GitHub 저장소 클론 및 소스 코드 버전 관리
build-essential 빌드 도구 gcc, g++, make 등 C/C++ 컴파일에 필수
apt-utils 시스템 유틸 apt 패키지 설정 보조 및 경고 메시지 감소
cmake 빌드 도구 C/C++ 프로젝트 빌드 설정 및 관리
libfontconfig1 그래픽 시스템 폰트 검색 및 설정 관리
libglu1-mesa-dev 그래픽(OpenGL) OpenGL 유틸리티 라이브러리
mesa-common-dev 그래픽(OpenGL) OpenGL/Mesa 공통 개발 헤더
libgtest-dev 테스트 Google Test 기반 유닛 테스트 라이브러리
libspdlog-dev 로깅 고성능 C++ 로그 출력 라이브러리
libboost-all-dev C++ 라이브러리 Boost 전체 모음 (네트워크, 스레드, 파일시스템 등)
libncurses5-dev 터미널 UI 콘솔 기반 UI(Text UI) 구현
libgdbm-dev 데이터 저장 키-값 기반 GNU DB 라이브러리
libssl-dev 암호화 TLS/SSL 암호화 통신(OpenSSL)
libreadline-dev 입력 처리 CLI 입력 편집 및 히스토리 기능
libffi-dev 런타임 런타임 함수 호출 인터페이스
libsqlite3-dev 데이터베이스 SQLite3 로컬 DB 연동
libbz2-dev 압축 bzip2 압축/해제 지원
qtbase5-dev GUI(Qt) Qt5 핵심 라이브러리
qtchooser GUI(Qt) Qt 버전 선택 도구
qt5-qmake GUI(Qt) Qt 프로젝트 빌드 도구
qtbase5-dev-tools GUI(Qt) Qt 개발 보조 도구
libqt5websockets5 GUI(Qt) Qt WebSocket 런타임 라이브러리
libqt5websockets5-dev GUI(Qt) Qt WebSocket 개발 헤더
qtdeclarative5-dev GUI(Qt/QML) QML 기반 UI 개발 지원
golang-go Go 언어 Havoc Teamserver(Go) 빌드
python3-dev Python 개발 Python 확장 모듈 및 스크립트 연동
mingw-w64 크로스 컴파일 Linux에서 Windows 실행 파일(EXE) 빌드
nasm 어셈블러 저수준 바이너리/쉘코드 빌드 지원

1) Kali-Linux는 Qt5 전체 메타 패키지 제공을 중단하고, Qt를 dev 패키지 중심로 분리함

 

 

2) Kali-Linux는 libboost-all-dev와 같이 용량이 크고 범용적인 메타 패키지는 제거

필요한 경우 개별 Boost 모듈을 직접 지정하도록 유도한다.

Boost 전체 의존성 제거하고, 기능 단위 라이브러리를 설치?해야 한다.

 

3) Mesa 구조 변경으로 일부 공통 dev 패키지 제거

OpenGL 사용 시 X11/GLX 단위 라이브러리 사용이 권장된다.

 

 

2. 팀 서버 빌드

cd teamserver
go mod download golang.org/x/sys
go mod download github.com/ugorji/go
cd ..

 

 

3. 팀서버 실행

 

 

4. 클라이언트 실행

Havoc(0.7 기준)은 Modules를 기본 레포에 포함하지 않아 직접 수동 클론 해야함..

Havoc 0.7 기준 Modules는 submodule 아니여서 직접 clone 해야한다.

 

 

5. 디렉토리 위치 변경

/home/kali/Havoc/payloads/를 /home/kali/Havoc/teamserver/payloads 여기로

 

 


 

+추가 내욤

1. 사용 이유

암호화 지원, 터널링 최신화 제공, 다양성을 고려했을때 이 프레임워크를 사용했을 때 가장

피드백에서 -> dns 프록시된거 !!!!! 이 통신 찾아보기

 

 


https://havocframework.com/docs/welcome