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
'Program > 토스뱅크 사이버보안 엔지니어 부트캠프(공격&방어 기술)' 카테고리의 다른 글
| Google Drive API 사용 방법 (1) | 2026.01.10 |
|---|---|
| KAPE(Kroll Artifact Parser and Extractor) (0) | 2025.12.30 |
| [MITRE ATT&CK Framework] ID (0) | 2025.12.10 |
| [APT] APT29 POSHSPY (0) | 2025.12.09 |
| [System] svchost (0) | 2025.11.19 |