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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
SteppingStones — Cobalt Strike 및 BloodHound 통합을 갖춘 웹 기반 레드팀 활동 로깅, 리포팅 및 상황 인식 도구 | Kitploit
도구/GitHubGitHub/nccgroup/steppingstones
Scripting & AutomationInformation GatheringPenetration TestingCommand and ControlUtilities & FrameworksRed Teaming
GitHubnccgroup/steppingstones

SteppingStones

Cobalt Strike 및 BloodHound 통합을 갖춘 웹 기반 레드팀 활동 로깅, 리포팅 및 상황 인식 도구

저장소 보기
24334405일 전Kitploit 검토 완료
웹사이트

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Stepping Stones

목적

레드 팀 활동을 위한 허브로서 기록 보존, 상황 인식 및 보고를 지원합니다. Stepping Stones는 팀이 활동을 기록하고 보고서 스니펫을 생성할 수 있는 웹 기반 UI를 제공합니다. 이 UI는 보고 단계에서만이 아니라 작전 전반에 걸쳐 사용할 수 있을 만큼 빠르게 동작하도록 설계되었습니다.

릴리스 블로그 게시물

설치

Stepping Stones는 Python Django 애플리케이션이므로 로컬에서 실행하려면 다음을 수행하십시오:

  1. 최신 버전의 Python 3을 설치합니다(Windows 및 Linux에서 3.12.2로 테스트됨)
  2. 이 저장소 사본의 루트 디렉터리로 이동합니다
  3. 다른 앱과 의존성을 분리하기 위해 가상 환경을 생성합니다: python -m venv .venv
  4. 가상 환경을 활성화합니다: .venv\Scripts\activate 또는 *nix에서는 source .venv/bin/activate
  5. 의존성을 설치합니다: pip install -r requirements.txt
  6. 타사 백그라운드 작업 모듈에 필요한 모든 마이그레이션이 있는지 확인합니다: python manage.py makemigrations background_task
  7. 데이터베이스 스키마를 최신 상태로 유지합니다: python manage.py migrate
  • 애플리케이션을 시작합니다:
    • systemd를 사용하는 Linux 시스템에서 실행하는 경우 systemd 가이드를 참조하십시오.
    • 개발 버전의 경우:
      • python manage.py runserver와 python manage.py process_tasks를 동시에 실행합니다.
    • 프로덕션 버전의 경우:
      • python manage.py check --deploy를 실행하여 Lockdown(보안 강화) 관련 조언을 얻은 다음 다음과 같은 가이드를 따르십시오: https://docs.djangoproject.com/en/6.0/howto/deployment/
  • 애플리케이션에 접속하여 작업(task)과 관리자 사용자를 구성합니다: 예를 들어 로컬에서 실행 중인 경우 http://127.0.0.1:8000에 접속합니다.
    • 참고: 생성된 사용자는 기본 앱에서도 사용되며 기록된 이벤트에 대해 "red team operator"로 표시됩니다. 따라서 "admin" 대신 "ST" 또는 "stephen"과 같은 적절한 사용자 이름을 선택하십시오. Cobalt Strike 통합을 사용하는 경우, 두 도구 모두 동일한 사용자 이름을 사용하면 통합에 도움이 됩니다.
  • Cobalt Strike 통합

    • 라이선스가 있는 Cobalt Strike를 /opt/cobaltstrike 또는 c:\tools\cobaltstrike-dist\cobaltstrike에 배치합니다.

    팀 서버에서 Stepping Stones가 연결할 수 있도록 방화벽에 허용 규칙을 추가합니다. 예:

    • AWS에서는 Team Server의 50050 포트로 들어올 수 있도록 Stepping Stones 보안 그룹을 설정합니다.
    • 호스트에서는 방화벽이 인바운드 트래픽도 허용하는지 확인합니다. 예: sudo ufw allow proto tcp from 172.31.16.0/20 to any port 50050

    애플리케이션 업데이트

    로컬 사본을 실행 중이고 git에서 코드가 업데이트되어 새 기능을 사용하려면:

    1. 두 서비스를 중지합니다. 예: systemd 사용:
      • sudo service ssbot stop
      • sudo service steppingstones stop
    2. 최신 버전을 가져옵니다. 예: https://github.com/nccgroup/SteppingStones/archive/refs/heads/main.zip
    3. 다운로드한 파일의 압축을 풀고 배포본 위에 파일을 복사합니다. 예: rm -rf /tmp/stepping-stones-main; unzip /tmp/stepping-stones-main.zip && cp -R /tmp/stepping-stones-main/* /opt/steppingstones
    4. steppingstones 디렉터리에서 가상 환경을 활성화합니다(아직 활성화하지 않은 경우): .venv\Scripts\activate 또는 *nix에서는 source .venv/bin/activate
    5. 새 의존성을 가져옵니다: pip install -r requirements.txt
    6. 타사 백그라운드 작업 모듈에 필요한 모든 마이그레이션이 있는지 확인합니다: python manage.py makemigrations background_task
    7. 로컬 데이터베이스를 새 스키마로 변환하기 위해 마이그레이션 스크립트를 실행합니다: python manage.py migrate.
      • Django에서 python manage.py makemigrations를 실행하라는 메시지가 표시되면 중지하고 Stepping Stones 개발자에게 문의하십시오. 모든 사용자가 동일한 마이그레이션 스크립트 세트를 사용하는 것이 중요하며, 이는 개발자를 통해 조정되어야 합니다.
    8. 두 서비스를 다시 시작합니다. 예: systemd 사용:
      • sudo service ssbot restart
      • sudo service steppingstones restart
    9. 오류가 없는지 확인합니다. 예: systemd를 사용한 journalctl -u steppingstones

    빈 데이터베이스로 다시 시작하기

    동일한 인스턴스를 여러 작업에 사용하고 있으며 이전 데이터를 보관한 후 새로 시작하려면 다음을 수행할 수 있습니다:

    • 위의 _애플리케이션 업데이트_에서 1단계를 수행하여 애플리케이션을 중지합니다.
    • SQLite 데이터베이스의 이름을 변경합니다:
      • mv db.sqlite3 db.sqlite.OLD_CLIENT_NAME
    • 위의 _설치_에서 2, 4, 7-9단계를 수행하여 올바른 데이터베이스 구조를 만들고 새로 구성된 애플리케이션에 접근합니다.

    백업

    이 시스템은 SQLite를 사용합니다. 소중한 데이터를 보호하려면 서버 루트에 있는 db.sqlite3 파일을 백업하거나 Web UI를 통해 주기적으로 백업하십시오.

    웹훅

    구성된 각 웹훅 URL은 주요 이벤트 발생 시 작은 JSON 문서를 수신합니다. JSON 문서는 항상 다음 구조를 갖습니다:

    root@kitploit:~
    {
        "type": "notification type",
        "message": "Human readable message"
    }
    

    type 필드는 다음 중 하나일 수 있습니다:

    • new beacon (이전에 본 적 없는 비콘이 모니터링 중인 팀 서버에 연결됨)
    • respawned beacon (이전에 본 비콘이 모니터링 중인 팀 서버에 연결됨)
    • returned beacon (재연결을 위해 명시적으로 모니터링되던 비콘이 방금 다시 연결됨)

    이를 사용하려면 다음 블루프린트를 기반으로 https://make.com 시나리오를 사용할 수 있습니다:

    root@kitploit:~
    {"name":"Webhook to iOS","flow":[{"id":1,"module":"gateway:CustomWebHook","version":1,"parameters":{"hook":129792,"maxResults":1},"mapper":{},"metadata":{"designer":{"x":-386,"y":-129},"restore":{"parameters":{"hook":{"data":{"editable":"true"},"label":"My webhook"}}},"parameters":[{"name":"hook","type":"hook:gateway-webhook","label":"Webhook","required":true},{"name":"maxResults","type":"number","label":"Maximum number of results"}],"interface":[{"name":"type","type":"text"},{"name":"message","type":"text"}]}},{"id":8,"module":"ios:SendNotification","version":1,"parameters":{"device":171760},"mapper":{"body":"{{1.message}}","title":"{{1.type}}","action":"","priority":10,"collapsible":false},"metadata":{"designer":{"x":-31,"y":-128},"restore":{"expect":{"action":{"label":"Default"},"priority":{"label":"Deliver immediately"}},"parameters":{"device":{"data":{"editable":"undefined"},"label":"Personal Phone"}}},"parameters":[{"name":"device","type":"device:apn","label":"Device","required":true}],"expect":[{"name":"title","type":"text","label":"Title","required":true},{"name":"body","type":"text","label":"Body"},{"name":"action","type":"select","label":"Action","validate":{"enum":["open_url"]}},{"name":"priority","type":"select","label":"Priority","required":true,"validate":{"enum":[10,5]}},{"name":"collapsible","type":"boolean","label":"Collapse push notifications","required":true}]}}],"metadata":{"instant":true,"version":1,"scenario":{"roundtrips":1,"maxErrors":3,"autoCommit":true,"autoCommitTriggerLast":true,"sequential":false,"confidential":false,"dataloss":false,"dlq":false},"designer":{"orphans":[]},"zone":"eu1.make.com"}}
    

    위 블루프린트를 가져오려면 빈 시나리오를 만든 다음 Web UI 하단 중앙에 있는 "..."(More) 메뉴의 "Import Blueprint" 기능을 사용하십시오.

    그런 다음 두 가지 추가 단계가 필요합니다:

    • 웹훅 원을 클릭하고 이름이 지정된 새 웹훅을 추가하여 URL을 생성합니다.
    • Apple 로고를 클릭하여 integromat 앱으로 iPhone을 make.com에 등록합니다.

    웹훅은 Stepping Stones 웹훅 페이지의 버튼을 통해 테스트할 수 있습니다.

    보안 모델

    Stepping Stones는 Django의 모델 수준 권한 시스템을 활용하여 사용자가 각 유형의 데이터 모델을 생성, 편집, 조회 및 삭제하지 못하도록 제한할 수 있습니다. /admin 콘솔에서 그룹을 찾을 수 있으며, 그룹은 해당 그룹의 모든 구성원에게 일련의 권한(예: 고객의 블루 팀에 적합한 권한)을 할당합니다.

    기존 그룹은 다음과 같습니다:

    역할설명
    Client Blue Team - Read Only이벤트 및 파일 페이지를 읽을 수 있습니다.
    Client Blue Team - Limited WriteClient Blue Team - Read Only와 동일하며, 이벤트의 결과(outcome) 및 탐지(detection) 필드에 대한 쓰기 권한이 있습니다.

    설치 과정에서 생성된 사용자에게는 "superuser" 상태가 부여되므로 암묵적으로 모든 권한을 갖습니다. 그러나 관리자 콘솔을 통해 사용자를 수동으로 생성할 때는 "staff"나 "superuser"로 표시하지 않도록 하십시오. 그래야 암시된 권한 없이 시작하여 그룹에 추가될 때만 권한을 얻을 수 있습니다.

    현지화

    사용자의 시간대는 /admin 포털에서 수정할 수 있습니다. 보고서의 시간은 블루 팀이 더 쉽게 연관 지을 수 있도록 의도적으로 UTC로 출력됩니다.

    Stepping Stones가 표시하는 날짜 형식은 웹 브라우저의 로케일과 일치해야 합니다. 즉, 브라우저가 미국 로케일로 설정된 사용자는 Web UI 및 보고서 스니펫에서 MM/DD/YYYY 형식의 날짜를 보게 됩니다.

    EventStream

    Stepping Stones는 JSON 기반의 맞춤형 EventStream 형식으로 포맷된 경우 다른 도구의 로그를 수집할 수 있습니다. 해당 형식은 스키마와 예제 데이터를 포함하여 SteppingStones 웹 인터페이스에 자세히 설명되어 있습니다.

    EventStream 로그가 Stepping Stones에 수집되면 관련 특정 항목을 보고서용 이벤트(Events)로 복제할 수 있습니다.

    Cobalt Strike 통합 세부 사항

    Cobalt Strike를 통합하는 기본 방법은 SSBot을 사용하는 것입니다. 이를 위해서는 /opt/cobaltstrike 또는 c:\tools\cobaltstrike에 라이선스가 있는 Cobalt Strike 사본이 필요하며, 이는 Web 인터페이스에 구성된 (활성화된) 팀 서버에 접속하는 데 사용됩니다.

    통합이 완료되면:

    • Source/Target 드롭다운에 비콘이 포함됩니다.
    • File 드롭다운에 CS를 통해 업로드/다운로드된 파일이 포함됩니다.
    • Credentials 탭은 도구 출력과 CS에 추가된 자격 증명을 기반으로 채워집니다.
    • 개별 CS 작업을 이벤트로 전환할 수 있습니다. 보고서 품질을 유지하려면 작업을 통째로 복제하지 말고 선별적으로 각 이벤트에 맥락을 추가하십시오.

    SSBot이 의도한 대로 작동하지 않는 경우 사용할 수 있는 추가 CLI 명령이 있습니다:

    • .\manage.py reset_cs_data [-s SERVER] - 지정된 팀 서버에서 파싱된 모든 데이터를 재설정하거나, 이름이 지정되지 않은 경우 전체를 재설정합니다. 이 작업은 수동으로 복제된 이벤트나 자격 증명 등 CS 로그에서 파생된 데이터에는 영향을 미치지 않습니다.
    • .\manage.py parse_log_tar <file name> - 팀 서버에서 tar로 묶어 가져온 logs 디렉터리의 내용을 파싱합니다. 참고: 여기에는 SSBot이 접근할 수 있는 모든 데이터가 포함되지 않으므로 선호되는 수집 방법이 아닙니다.

    BloodHound 통합

    Web UI를 통해 구성된 Neo4j 서버는 다음 용도로 사용됩니다:

    • 비밀번호가 포함된 자격 증명이 추가되거나 특정 호스트에서 시스템 계정으로 비콘이 실행될 때 BloodHound의 owned 상태를 업데이트합니다.
    • Source/Target 드롭다운에 사용자와 컴퓨터를 채웁니다.
    • Stepping Stones의 credentials 섹션에서 계정에 대한 추가 보고를 제공합니다.

    보고 플러그인

    플러그인을 통해 Stepping Stones의 기능을 확장할 수 있습니다. 추가 문서는 여기에서 확인할 수 있습니다.

    도구 다운로드