본문 바로가기

코딩 및 기타/프로젝트

HAVOC

728x90

• HAVOC

침투 테스터(레드팀, 블루팀)를 위해 만들어진 제어 프레임워크이다.

 

https://github.com/HavocFramework/Havoc

 

GitHub - HavocFramework/Havoc: The Havoc Framework.

The Havoc Framework. Contribute to HavocFramework/Havoc development by creating an account on GitHub.

github.com

 

∙ C2 (Command & Control)

- 공격자가 초기 침투에 성공한 장치와의 통신을 유지하는데 사용하는 도구 및 기술집합이다.

- 피해자 장치와 공격자가 제어하는 플랫폼 간의 하나 이상의 은밀한 통신 채넣로 구성되며, 감염된 대상에 명령 전달, 추가 악성 페이로드를 다운로드, 탈취한 데이터를 공격자에게 전달하는데 사용한다.

- 외부 C2 또는 C&C를 통해 추가적인 파일이나 스크립트를 다운로하여 추가 악성코드를 다운로드 받는다.

 

 

• 작동 원리

- Teamserver : 연결된 운영자, 에어전트 작업 및 콜백 구문 분석, 리스너, 에이전트에서 다운로드한 파일 및 스크린샷을 처리한다.

- Client : 작업 에이전트의 명령과 상호 작용하고 출력을 받을 수 있다.

 

• 설치 방법 (Kali 서버 구축)

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

 

- 서버구축에 필요한 종속 항목 설치

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

 

- Go 종속성 설치 

cd teamserver
go mod download golang.org/x/sys
# sudo 명령어 없으면 에러 뜸
go mod download github.com/ugorji/go
cd ..

 

- 빌드 및 실행 

# sudo 명령어 없으면 에러 뜸
make ts-build

# Run the teamserver
./havoc server --profile ./profiles/havoc.yaotl -v --debug

* Teamserver와 상호작용하는 동안 생성된 모든 파일은 /Havoc/data/* 폴더 내에 저장되어있다

 

• 설치 방법 (Kali 클라이언트 구축)

- 빌드 및 실행

# Build the client Binary (From Havoc Root Directory)
make client-build

# Run the client
./havoc client

처음 프로그램을 실행시키면 위 사진과 같이 연결 대화 상자가 표시된다.

* 프로필에서 변경함 

ID : test

PW : test

- profiles/havoc.yaotl

# 클라이언트가 Teamserver에 접속하기 위한 HOST, PORT 설정 공간
Teamserver {
    Host = "0.0.0.0"
    Port = 40056

    Build {
        Compiler64 = "data/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc"
        Compiler86 = "data/i686-w64-mingw32-cross/bin/i686-w64-mingw32-gcc"
        Nasm = "/usr/bin/nasm"
    }
}
# 접속에 필요한 계정들..!
Operators {
    user "5pider" {
        Password = "password1234"
    }

    user "Neo" {
        Password = "password1234"
    }

    user "hcm" {
        Password = "hcm"
    }
}

# this is optional. if you dont use it you can remove it.
Service {
    Endpoint = "service-endpoint"
    Password = "service-password"
}

Demon {
    Sleep = 2
    Jitter = 15

    TrustXForwardedFor = false

    # 프로세스 인젝션을 할때 어떤 더미 프로세스를 생성할것인지..!
    Injection {
        Spawn64 = "C:\\Windows\\System32\\notepad.exe"
        Spawn32 = "C:\\Windows\\SysWOW64\\notepad.exe"
    }
}

 

클라이언트 실행 화면이다.

 

- 실행 방법

프로그램을 실행 시킨 후, 먼저 Listener을 만들어줘야한다.

 

두번째로는 페이로드를 만들어준다. 

Slepp Technique 항목은 암호화 기법을 사용할것인지에 대한 선택 항목이다.

* 맥에서는 암호화기법을 사용해서 페이로드를 만들면 공격이 성공하였을때, 응답값을 받을 수 없었다..

 

windows11에서 프로그램을 실행시키며 세부정보에 demon.x64.exe 파일이 실행된걸 확인할 수 있다.(Windows11 디펜스는 꺼야함)

 

실행이 잘되면 kali에서 명령어를 실행 시킬수있다.

 

File Explorer창으로 가니 Windows11의 모든 폴더를 쉽게 폴수 있다.!! (이 기능 최고인듯,,,)

 

• 오픈소스 코드 분석

• teamserver

- main.go

package main

// cmd랑 pkg/logger 임포트
import "Havoc/cmd"
import "Havoc/pkg/logger"

// 에러가 있는지 확인하는 구간
func main() {
	err := cmd.HavocCli.Execute()
	if err != nil {
		logger.Error("Failed to execute havoc")
		return
	}
}

 

해당 부분을 보닌 server 폴더 말고 다른 go 파일들은 배경화면? 시작메뉴 정도의 코드이다..!

- cmd.go

package cmd

import (
	"fmt"
	"os"

	"Havoc/cmd/server"
	"Havoc/pkg/colors"

	"github.com/spf13/cobra"
)

var (
	VersionNumber = "0.6"
	VersionName   = "Hierophant Green"
	DatabasePath  = "data/teamserver.db"

	HavocCli = &cobra.Command{
		Use:          "havoc",
		Short:        fmt.Sprintf("Havoc Framework [Version: %v] [CodeName: %v]", VersionNumber, VersionName),
		SilenceUsage: true,
		RunE:         teamserverFunc,
	}

	flags server.TeamserverFlags
)

// init all flags
func init() {
	// 기본 완성 기능 비활성 
	HavocCli.CompletionOptions.DisableDefaultCmd = true

	// server flags
	CobraServer.Flags().SortFlags = false
	CobraServer.Flags().StringVarP(&flags.Server.Profile, "profile", "", "", "set havoc teamserver profile")
	CobraServer.Flags().BoolVarP(&flags.Server.Debug, "debug", "", false, "enable debug mode")
	CobraServer.Flags().BoolVarP(&flags.Server.DebugDev, "debug-dev", "", false, "enable debug mode for developers (compiles the agent with the debug mode/macro enabled)")
	CobraServer.Flags().BoolVarP(&flags.Server.SendLogs, "send-logs", "", false, "the agent will send logs over http(s) to the teamserver")
	CobraServer.Flags().BoolVarP(&flags.Server.Default, "default", "d", false, "uses default profile (overwrites --profile)")
	CobraServer.Flags().BoolVarP(&flags.Server.Verbose, "verbose", "v", false, "verbose messages")

	// add commands to the teamserver cli
	HavocCli.Flags().SortFlags = false
	HavocCli.AddCommand(CobraServer)
	HavocCli.AddCommand(CobraClient)
}

// CLI를 호출할 때 실행되는 함수, 시작 메뉴
func teamserverFunc(cmd *cobra.Command, args []string) error {
	startMenu()

	if len(os.Args) <= 2 {
		err := cmd.Help()
		if err != nil {
			return err
		}
		os.Exit(0)
	}

	return nil
}

func startMenu() {
	fmt.Println(colors.Red("              _______           _______  _______ \n    │\\     /│(  ___  )│\\     /│(  ___  )(  ____ \\\n    │ )   ( ││ (   ) ││ )   ( ││ (   ) ││ (    \\/\n    │ (___) ││ (___) ││ │   │ ││ │   │ ││ │      \n    │  ___  ││  ___  │( (   ) )│ │   │ ││ │      \n    │ (   ) ││ (   ) │ \\ \\_/ / │ │   │ ││ │      \n    │ )   ( ││ )   ( │  \\   /  │ (___) ││ (____/\\\n    │/     \\││/     \\│   \\_/   (_______)(_______/"))
	fmt.Println()
	fmt.Println("  	", colors.Red("pwn"), "and", colors.Blue("elevate"), "until it's done")
	fmt.Println()
}

 

'코딩 및 기타 > 프로젝트' 카테고리의 다른 글

OpenAI 사용방법  (0) 2023.10.21
MDM  (0) 2023.10.20
Agentless(MDM)  (0) 2023.10.15
Sliver(슬리버)  (0) 2023.10.07
GO 프로그래밍  (0) 2023.09.21