Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
decker — 선언적 침투 테스트 오케스트레이션 프레임워크 | Kitploit
도구/GitHubGitHub/stevenaldinger/decker
Penetration Testing FrameworksReconnaissanceVulnerability ScannersExploit FrameworksScripting & AutomationInformation Gathering
GitHubstevenaldinger/decker

decker

선언적 침투 테스트 오케스트레이션 프레임워크

저장소 보기
2962857년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Build Status

Decker - 침투 테스트 오케스트레이션 프레임워크

목적

Decker는 침투 테스트 오케스트레이션 프레임워크입니다. HashiCorp Configuration Language 2 (Terraform과 동일한 구성 언어)를 활용하여 선언적인 침투 테스트를 코드로 작성할 수 있게 해주므로, 팀이나 커뮤니티와 테스트를 버전 관리, 공유, 재사용 및 협업할 수 있습니다.

decker 구성 파일 예시:

root@kitploit:~
// 변수는 환경에서 가져옵니다.
//   예: DECKER_TARGET_HOST
// 구성 파일 전체에서 var.*로 사용 가능합니다.
//   예: ${var.target_host}
variable "target_host" {
  type = "string"
}

// 리소스는 플러그인을 참조합니다.
// 리소스는 고유한 이름이 필요하므로 플러그인을 여러 번 사용할 수 있습니다.
// 다음과 같은 형식으로 선언됩니다: 'resource "plugin_name" "unique_name" {}'
// 해당 출력은 unique_name.* 형식으로 다른 곳에서 사용할 수 있습니다.
//   예: nmap.443
resource "nmap" "nmap" {
  host = "${var.target_host}"
  plugin_enabled = "true"
}
resource "sslscan" "sslscan" {
  host = "${var.target_host}"
  plugin_enabled = "${nmap.443 == "open"}"
}

목록의 각 항목에 대해 플러그인 실행:

root@kitploit:~
variable "target_host" {
  type = "string"
}
resource "nslookup" "nslookup" {
  dns_server = "8.8.4.4"
  host = "${var.target_host}"
}
resource "metasploit" "metasploit" {
  for_each = "${nslookup.ip_address}"
  exploit = "auxiliary/scanner/portscan/tcp"
  options = {
    RHOSTS = "${each.key}/32"
    INTERFACE = "eth0"
  }
}

중첩된 값과 for_each를 결합한 복잡한 구성:

root@kitploit:~
variable "target_host" {
  type = "string"
}
resource "nslookup" "nslookup" {
  dns_server = "8.8.4.4"
  host = "${var.target_host}"
}
resource "nmap" "nmap" {
  for_each = "${nslookup.ip_address}"
  host = "${each.key}"
}
// 각 IP에 대해 nmap이 포트 25가 열려 있는지 확인합니다.
// 열려 있으면 metasploit의 smtp_enum 스캐너를 실행합니다.
resource "metasploit" "metasploit" {
  for_each = "${nslookup.ip_address}"
  exploit = "auxiliary/scanner/smtp/smtp_enum"
  options = {
    RHOSTS = "${each.key}"
  }
  plugin_enabled = "${nmap["${each.key}"].25 == "open"}"
}

출력 형식

여러 출력 형식을 사용할 수 있으며, 동시에 여러 개를 선택할 수 있습니다.

DECKER_OUTPUTS_JSON 또는 DECKER_OUTPUTS_XML을 "true"로 설정하면 각각 json 및 xml 형식의 파일이 출력됩니다.

  1. 일반 텍스트 외에 .json 파일 출력: export DECKER_OUTPUTS_JSON="true"
  2. 일반 텍스트 외에 .xml 파일 출력: export DECKER_OUTPUTS_XML="true"

이름이 decker인 이유?

제 친구 Courtney가 이름을 정하는 데 어려움을 겪을 때 도움을 주었고, SciFi 용어 사전에서 decker를 찾았습니다... 그리고 멋져 보였습니다.

미래의 크래커; 사이버 공간을 조작하는 데 능숙한 소프트웨어 전문가, 특히 보안 예방 조치를 우회하는 데 능숙한 사람.

Docker로 예제 구성 실행하기

두 개의 볼륨이 마운트됩니다:

  1. decker-reports라는 디렉토리로, decker가 실행된 각 플러그인에 대한 파일을 출력합니다. 파일 이름은 {unique_resource_name}.report.txt입니다.
  2. decker 구성 파일이 포함된 examples 디렉토리. 이 볼륨을 마운트하면 즐겨 사용하는 편집기로 로컬에서 구성을 작성하고 컨테이너 내에서 실행할 수 있습니다.

하나의 환경 변수가 전달됩니다:

  1. DECKER_TARGET_HOST

이는 구성 파일에서 {var.target_host}로 참조됩니다. Decker는 DECKER_*라는 이름의 모든 환경 변수를 반복하여, 접두사를 제거하고 나머지를 소문자로 설정합니다.

root@kitploit:~
docker run -it --rm \
  -v "$(pwd)/decker-reports/":/tmp/reports/ \
  -v "$(pwd)/examples/":/decker-config/ \
  -e DECKER_TARGET_HOST=example.com \
 stevenaldinger/decker:kali decker ./decker-config/example.hcl

decker가 구성을 완료하면 ./decker-reports에서 출력물을 확인하세요.

Docker 없이 예제 구성 실행하기

decker가 보고서를 작성할 디렉토리를 DECKER_REPORTS_DIR 환경 변수로 설정하는 것이 좋습니다.

다음과 같은 설정이 적절합니다. 설정한 디렉토리가 이미 존재하는지 확인하세요.

root@kitploit:~
export DECKER_REPORTS_DIR="$HOME/decker-reports"

또한 예제 구성 파일 중 하나를 실행하는 경우 대상 호스트를 설정해야 합니다.

root@kitploit:~
export DECKER_TARGET_HOST="<호스트 이름 입력>"

그런 다음 구성 파일을 실행하면 됩니다. 이 저장소의 루트 디렉토리로 이동하여 다음을 실행하세요:

root@kitploit:~
./decker ./examples/example.hcl

기여하기

기여는 매우 환영하며 감사드립니다. 지침은 docs/contributions.md를 참조하세요.

개발

원활한 경험을 위해 Docker를 사용한 개발을 권장합니다. 이렇게 하면 모든 종속 항목이 설치되어 바로 사용할 수 있습니다.

Go 코드 개요는 아래 디렉토리 구조를 참조하세요.

빠른 시작

  1. (호스트 머신에서): make docker_build
  2. (호스트 머신에서): make docker_run (Docker 컨테이너를 시작하고 대화형 bash 세션을 엽니다)
  3. (컨테이너 내부에서): dep ensure -v
  4. (컨테이너 내부에서): make build_all
  5. (컨테이너 내부에서): make run

Git 훅 초기화

make init을 실행하여 각 커밋 시 린팅과 테스트를 실행하는 pre-commit 스크립트를 추가하세요.

플러그인 개발

Decker 자체는 구성 파일을 읽고, 구성 파일의 종속성을 결정하며, 다른 플러그인에 종속된 플러그인(한 플러그인의 출력이 다른 플러그인의 입력이 되는 경우)이 종속된 플러그인 이후에 실행되도록 순서를 결정하는 프레임워크일 뿐입니다.

decker의 진정한 힘은 플러그인에서 나옵니다. 플러그인 개발은 원하는 만큼 간단하거나 복잡하게 할 수 있으며, 최종 결과는 컴파일된 플러그인 코드가 포함된 .so 파일과 사용자가 구성할 입력을 선언하는 동일한 디렉토리의 .hcl 파일이어야 합니다.

첫 번째 플러그인을 시작하려면 docs/building_plugins.md를 확인하세요. 몇 분만에 "Hello World" decker 플러그인을 실행할 수 있을 것입니다.

플러그인 설치

기본적으로 플러그인은 decker 바이너리가 있는 위치를 기준으로 <decker binary>/internal/app/decker/plugins/<plugin name>/<plugin name>.so 경로에 있을 것으로 예상됩니다. DECKER_PLUGIN_DIRS 환경 변수를 설정하여 추가 경로를 추가할 수 있습니다. DECKER_PLUGIN_DIRS가 설정되어도 기본 플러그인 경로는 계속 사용됩니다.

예: export DECKER_PLUGIN_DIRS="/path/to/my/plugins:/additional/path/to/plugins"

.so 파일 옆에 <decker binary>/internal/app/decker/plugins/<plugin name>/<plugin name>.hcl 파일이 있어야 하며, 이 파일은 해당 플러그인의 입력 및 출력을 정의합니다. 현재는 string, list, map 입력만 지원됩니다. 각 입력에는 다음과 같은 input 블록이 있어야 합니다:

root@kitploit:~
input "my_input" {
  type = "string"
  default = "some default value"
}

디렉토리 구조

root@kitploit:~
.
├── build
│   ├── ci/
│   └── package/
├── cmd
│   ├── decker
│   │   └── main.go
│   └── README.md
├── deployments/
├── docs/
├── examples
│   └── example.hcl
├── githooks
│   ├── pre-commit
├── Gopkg.toml
├── internal
│   ├── app
│   │   └── decker
│   │       └── plugins
│   │           ├── a2sv
│   │           │   ├── a2sv.hcl
│   │           │   ├── main.go
│   │           │   └── README.md
│   │           └── ...
│   │               ├── main.go
│   │               ├── README.md
│   │               └── xxx.hcl
│   ├── pkg
│   │   ├── dependencies/
│   │   ├── gocty/
│   │   ├── hcl/
│   │   ├── paths/
│   │   ├── plugins/
│   │   └── reports/
│   └── README.md
├── LICENSE
├── Makefile
├── README.md
└── scripts
    ├── build-plugins.sh
    └── README.md
  • cmd/decker/main.go는 드라이버입니다. 주어진 구성 파일을 파싱하고, 파일의 resource 블록을 기반으로 적절한 플러그인을 로드하며, 지정된 입력으로 플러그인을 실행하는 역할을 합니다.
  • examples는 decker를 시작하는 데 도움이 되는 몇 가지 예제 구성을 포함합니다. kali docker 이미지 (stevenaldinger/decker:kali)를 사용하면 모든 구성 파일에 대한 모든 종속성이 설치되어 원활하게 실행됩니다.
  • internal/pkg는 실제 코드가 대부분 위치하는 곳입니다. main.go에서 임포트하는 모든 패키지를 포함합니다.
    • dependencies는 플러그인 종속성 그래프를 구축하고 플러그인이 올바른 순서로 실행되도록 위상 정렬된 배열을 반환하는 역할을 합니다.
    • gocty는 동적 입력 유형을 처리하는 데 사용되는 go-cty 값의 인코딩 및 디코딩을 위한 도우미를 제공합니다.
    • hcl는 HCL 파일 파싱을 담당하며, 다른 플러그인 블록에 종속될 때 블록이 올바르게 디코딩될 수 있도록 평가 컨텍스트를 생성하는 것을 포함합니다.
    • paths는 decker 바이너리, 구성 파일, 플러그인 구성 파일 및 생성된 보고서의 파일 경로를 반환하는 역할을 합니다.
    • plugins는 플러그인이 활성화되었는지 확인하고 실행하는 역할을 합니다.
    • reports는 보고서를 파일 시스템에 쓰는 역할을 합니다.
  • internal/app/decker/plugins는 Golang 플러그인으로 작성된 모듈식 코드 조각으로, 플러그인의 구성 파일(역시 HCL)에 지정된 입력 및 출력으로 런타임에 로드 및 호출될 수 있는 간단한 인터페이스를 구현합니다. 예제는 internal/app/decker/plugins/nslookup/nslookup.hcl에서 찾을 수 있습니다.
  • decker 구성 파일은 침투 테스트를 선언적으로 작성하는 방법을 제공합니다. 매니페스트는 HashiCorp Configuration Language 2로 작성되며, 테스트에 사용될 플러그인 집합과 그 입력을 설명합니다.
도구 다운로드