• HAVOC
침투 테스터(레드팀, 블루팀)를 위해 만들어진 제어 프레임워크이다.
https://github.com/HavocFramework/Havoc
∙ 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 |