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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
subcrawl — 웹에서 오픈 디렉터리를 발견하고 분석하기 위한 모듈식 프레임워크입니다. URL을 크롤링하고 콘텐츠를 추출하며 YARA/ClamAV 스캔을 적용하고 결과를 MISP, SQLite 또는 콘솔로 출력하여 위협 인텔리전스에 활용합니다. | Kitploit
도구/GitHubGitHub/hpthreatresearch/subcrawl
OSINT (Open Source Intelligence)Vulnerability AnalysisInformation GatheringWeb SecurityThreat IntelligenceCrawler
GitHubhpthreatresearch/subcrawl

subcrawl

웹에서 오픈 디렉터리를 발견하고 분석하기 위한 모듈식 프레임워크입니다. URL을 크롤링하고 콘텐츠를 추출하며 YARA/ClamAV 스캔을 적용하고 결과를 MISP, SQLite 또는 콘솔로 출력하여 위협 인텔리전스에 활용합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

SubCrawl

SubCrawl은 HP Inc의 Threat Research 팀 소속 Patrick Schläpfer, Josh Stroschein 및 Alex Holland이 개발한 프레임워크입니다. SubCrawl은 공개 디렉토리를 찾고, 스캔하며, 분석하도록 설계되었습니다. 프레임워크는 모듈식으로, 입력 모듈, 처리 모듈, 출력 모듈 및 코어 크롤링 엔진의 네 가지 구성 요소로 이루어져 있습니다. URL이 주요 입력 값이며, 프레임워크는 이를 파싱하여 큐 시스템에 추가한 후 크롤링합니다. URL 파싱은 중요한 첫 단계로, 제출된 URL을 가져와 하위 디렉토리를 하나씩 제거하여 더 이상 남지 않을 때까지 추가 URL을 생성합니다. 이 프로세스는 웹 서버에 대한 더 완전한 스캔 시도를 보장하고 추가 콘텐츠를 발견할 수 있게 합니다. 특히 SubCrawl은 URL 발견을 위해 무차별 대입(Brute-force) 방식을 사용하지 않습니다. 스캔된 모든 콘텐츠는 입력 URL, URL 파싱 과정 및 크롤링 중 발견된 내용에서 비롯됩니다. 공개 디렉토리가 발견되면 크롤링 엔진은 디렉토리에서 링크를 추출하여 평가합니다. 크롤링 엔진은 링크가 다른 디렉토리인지 파일인지 판단합니다. 디렉토리는 크롤링 큐에 추가되고, 파일은 처리 모듈에 의해 추가 분석이 수행됩니다. 스캔된 각 URL에 대해 SHA256 및 퍼지 해시, 공개 디렉토리 발견 여부, YARA 규칙 일치 여부 등의 결과가 생성 및 저장됩니다. 마지막으로 결과 데이터는 하나 이상의 출력 모듈(현재 세 가지)에 따라 처리됩니다. 첫 번째는 MISP와의 통합을 제공하고, 두 번째는 데이터를 콘솔에 출력하며, 세 번째는 데이터를 SQLite 데이터베이스에 저장합니다. 프레임워크가 모듈식이므로 원하는 입력, 처리 및 출력 모듈을 쉽게 구성할 수 있을 뿐만 아니라 새로운 모듈을 개발하는 것도 간단합니다.

Framework Architecture 그림 1 - SubCrawl 아키텍처

SubCrawl은 두 가지 작동 모드를 지원합니다. 첫째, SubCrawl은 한 번 실행(run-once) 모드로 시작할 수 있습니다. 이 모드에서 사용자는 스캔할 URL을 파일에 제공하며, 각 입력 값은 줄 바꿈으로 구분됩니다. 두 번째 작동 모드는 서비스 모드입니다. 이 모드에서 SubCrawl은 백그라운드에서 실행되며 입력 모듈이 스캔할 URL을 제공합니다. 그림 1은 SubCrawl 아키텍처의 개요를 보여줍니다. 두 작동 모드에서 모두 사용되는 구성 요소는 파란색, 한 번 실행 모드 구성 요소는 노란색, 서비스 모드 구성 요소는 녹색입니다.

요구 사항

선택한 실행 모드에 따라 다른 전제 조건이 충족되어야 합니다.

한 번 실행 모드 요구 사항

SubCrawl은 Python3로 작성되었습니다. 또한 SubCrawl을 실행하기 전에 필요한 여러 패키지가 있습니다. 다음 명령을 사용하여 SubCrawl을 실행하기 전에 필요한 모든 패키지를 설치할 수 있습니다. crawler 디렉토리에서 다음 명령을 실행하십시오:

root@kitploit:~
$ sudo apt install build-essential
$ pip3 install -r requirements.txt

서비스 모드 요구 사항

SubCrawl을 서비스 모드로 시작하는 경우 Docker를 사용하여 수행할 수 있습니다. 이러한 이유로 Docker 및 Docker Compose의 설치가 필요합니다. 좋은 설치 지침은 Docker.com 웹사이트에서 직접 찾을 수 있습니다.

  • Installing Docker Engine
  • Installing Docker Compose

도움말 보기

SubCrawl에는 -h/--help 인수 또는 인수 없이 스크립트를 실행하여 내장 도움말이 있습니다.

root@kitploit:~
  ********         **        ******                               **
 **//////         /**       **////**                             /**
/**        **   **/**      **    //  ******  ******   ***     ** /**
/*********/**  /**/****** /**       //**//* //////** //**  * /** /**
////////**/**  /**/**///**/**        /** /   *******  /** ***/** /**
       /**/**  /**/**  /**//**    ** /**    **////**  /****/**** /**
 ******** //******/******  //****** /***   //******** ***/ ///** ***
////////   ////// /////     //////  ///     //////// ///    /// /// 
~~ Harvesting the Open Web ~~

usage: subcrawl.py [-h] [-f FILE_PATH] [-k] [-p PROCESSING_MODULES] [-s STORAGE_MODULES]

optional arguments:
  -h, --help            show this help message and exit
  -f FILE_PATH, --file FILE_PATH
                        Path of input URL file
  -k, --kafka           Use Kafka Queue as input
  -p PROCESSING_MODULES, --processing PROCESSING_MODULES
                        Processing modules to be executed comma separated.
  -s STORAGE_MODULES, --storage STORAGE_MODULES
                        Storage modules to be executed comma separated.

  Available processing modules: 
  - ClamAVProcessing
  - JARMProcessing
  - PayloadProcessing
  - TLSHProcessing
  - YARAProcessing

  Available storage modules: 
  - ConsoleStorage
  - MISPStorage
  - SqliteStorage

한 번 실행 모드

이 모드는 관리 가능한 양의 도메인을 빠르게 스캔하려는 경우에 적합합니다. 이를 위해 스캔할 URL을 파일로 저장해야 하며, 이 파일이 크롤러의 입력으로 사용됩니다. 다음은 한 번 실행 모드 실행 예시입니다. -f 인수가 파일 경로와 함께 사용됩니다.

root@kitploit:~
python3 subcrawl.py -f urls.txt -p YARAProcessing,PayloadProcessing -s ConsoleStorage

서비스 모드

서비스 모드를 사용하면 더 많은 양의 도메인을 스캔하고 결과를 저장할 수 있습니다. 선택한 저장 모듈에 따라 데이터를 더 자세히 분석하고 평가할 수 있습니다. 사용자가 서비스 모드를 최대한 쉽게 실행할 수 있도록 모든 기능을 Docker 이미지에 구축했습니다. 서비스 모드에서는 스캔할 도메인을 입력 모듈을 통해 얻습니다. 기본적으로 URLhaus 및 PhishTank에서 새로운 악성코드 및 피싱 URL을 다운로드하여 스캔 대기열에 추가합니다. 원하는 처리 및 저장 모듈은 config.yml에 직접 입력할 수 있습니다. 기본적으로 SQLite 저장소를 사용하여 다음 처리 모듈이 활성화됩니다.

  • ClamAVProcessing
  • JARMProcessing
  • TLSHProcessing
  • YARAProcessing

SQLite 저장 모듈 외에도 스캔된 도메인과 URL을 보고 관리할 수 있는 간단한 웹 UI가 개발되었습니다.

Web UI for SQLite storage module

그러나 이 UI가 데이터의 후속 평가에 충분하지 않은 경우 MISP 저장 모듈을 대안 또는 추가로 활성화할 수 있습니다. 해당 설정은 config.yml의 MISP 섹션에서 이루어져야 합니다.

다음 두 명령으로 GIT 저장소를 클론하고, Docker 컨테이너를 생성하며 바로 시작할 수 있습니다. 이후 웹 UI는 https://localhost:8000/ 주소에서 접근할 수 있습니다. 컨테이너가 시작되면 입력 모듈이 URL을 처리 대기열에 추가하고 엔진이 호스트 크롤링을 시작합니다.

root@kitploit:~
git clone https://github.com/hpthreatresearch/subcrawl.git

docker-compose up --build 

SubCrawl 모듈

입력 모듈

입력 모듈은 서비스 모드에서만 사용됩니다. SubCrawl을 한 번 실행 모드로 시작하는 경우 스캔할 URL이 포함된 파일을 제공해야 합니다. 다음 두 가지 입력 모듈이 구현되었습니다.

URLhaus

URLhaus는 악성 URL을 추적하는 잘 알려진 웹 서비스입니다. 이 웹 서비스는 새로 발견된 URL이 포함된 내보내기 파일도 제공합니다. 이러한 악성코드 URL은 주로 악성 도메인을 분석하려는 크롤러에게 완벽한 입력입니다. 최근에 제출된 URL을 검색하며, API 요청(예: 태그 또는 기타 사용 가능한 매개변수)을 통해 검색 결과를 세분화하지 않습니다. 이 입력 모듈에서 URLHaus API로 이루어지는 HTTP 요청은 얻은 결과를 더 세분화하기 위해 수정될 수 있습니다.

PhishTank

PhishTank은 피싱 URL을 수집하는 웹사이트입니다. 사용자는 새로 발견된 피싱 페이지를 제출할 수 있습니다. 이 웹 서비스는 API를 통해 활성 피싱 URL이 포함된 내보내기 파일을 생성하고 다운로드할 수 있습니다. 따라서 이 또한 크롤러에게 이상적인 수집 대상입니다.

처리 모듈

SubCrawl에는 여러 처리 모듈이 포함되어 있습니다. 처리 모듈은 모두 결과를 코어 엔진에 반환하는 방식이 유사합니다. 일치하는 항목이 발견되면 결과가 코어 엔진으로 반환되고 이후 저장 모듈에 제공됩니다. 아래는 처리 모듈 목록입니다.

SDHash

SDHash 처리 모듈은 HTTP 응답의 유사성 해시를 계산하는 데 사용됩니다. 콘텐츠의 최소 크기는 512바이트여야 해시를 성공적으로 계산할 수 있습니다. 이 모듈은 설치가 가장 복잡할 수 있으며, Protobuf가 필요하고 대상 호스트에 따라 다시 컴파일해야 할 수 있습니다. 따라서 이 처리 모듈은 기본적으로 비활성화되어 있습니다. 이미 컴파일된 버전은 crawler/processing/minisdhash/에서 찾을 수 있으며, protobuf-2.5.0 및 python3.6이 필요합니다. 해당 바이너리는 Ubuntu 18.04.5 LTS x64에서 컴파일되었습니다. 설치 지침은 다음과 같습니다:

root@kitploit:~
# Protobuf installation
> apt-get update
> apt-get -y install libssl-dev libevent-pthreads-2.1-6 libomp-dev g++
> apt-get -y install autoconf automake libtool curl make g++ unzip
> wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.zip
> unzip protobuf-2.5.0.zip
> cd protobuf-2.5.0
> ./configure
> make
> sudo make install

# Python3.6 installation
> apt-get install python3.6-dev
> sudo ldconfig

# SDHash installation
> git clone https://github.com/sdhash/sdhash.git
> cd sdhash
> make
> make install
> ldconfig

JARM

JARM은 Salesforce에서 개발한 TLS 연결 핑거프린팅 도구입니다. JARM 처리 모듈은 도메인을 스캔하고 JARM 해시를 도메인과 함께 코어 엔진에 반환합니다. 웹 서버의 구성에 따라 TLS 핸드셰이크는 다른 속성을 가집니다. 이 핸드셰이크 속성의 해시를 계산함으로써 이러한 차이점을 사용하여 웹 서버 구성을 추적할 수 있습니다.

TLSH

TLSH 처리 모듈은 SDHash 처리 모듈과 유사하게 유사성 해시를 계산하는 데 사용됩니다. TLSH의 장점은 설치가 훨씬 간단하고 입력 최소 크기가 50바이트로 더 작다는 것입니다. 대부분의 웹쉘 로그인이 비교적 작고 우리 연구의 초점이었기 때문에 이 처리 모듈을 기본적으로 활성화했습니다.

YARA

YARA 처리 모듈은 HTTP 응답 콘텐츠를 YARA 규칙으로 스캔하는 데 사용됩니다. 이 처리 모듈을 호출하려면 처리 모듈 인수로 YARAProcessing 값을 제공하십시오. 예를 들어, 다음 명령은 YARA 처리 모듈을 로드하고 ConsoleStorage 저장 모듈을 통해 콘솔에 출력을 생성합니다.

root@kitploit:~
python3 subcrawl.py -p YARAProcessing -s ConsoleStorage

현재 YARA 처리 모듈은 웹쉘 로그인 및 다양한 기타 흥미로운 콘텐츠를 식별하는 데 사용됩니다. 이 프로젝트에 포함된 YARA 규칙:

  • protected_webshell: 암호로 보호된 웹쉘의 로그인 페이지 식별
  • js_webshell_tracking_script: JavaScript를 사용하는 백도어 플러그인/테마 식별로, 웹쉘이 활성화될 때 공격자에게 알림
  • open_webshell: 공개 웹쉘 식별 (즉, 로그인으로 보호되지 않은 웹쉘)
  • php_webshell_backend: 공격자가 사용하는 PHP 웹쉘 백엔드 식별

샘플 출력: Yara processing output

추가 YARA 규칙을 추가하려면 yara-rules 폴더에 .YAR 파일을 추가한 다음, combined-rules.yar에 include 문을 추가하여 규칙 파일을 포함시키면 됩니다.

ClamAV

ClamAV 처리 모듈은 스캔 중 HTTP 응답 콘텐츠를 ClamAV로 스캔하는 데 사용됩니다. 일치하는 항목이 발견되면 다양한 출력 모듈에 제공됩니다. 이 처리 모듈을 호출하려면 처리 모듈 인수로 ClamAVProcessing 값을 제공하십시오. 예를 들어, 다음 명령은 ClamAV 처리 모듈을 로드하고 ConsoleStorage 저장 모듈을 통해 콘솔에 출력을 생성합니다.

root@kitploit:~
python3 subcrawl.py -p ClamAVProcessing -s ConsoleStorage

샘플 출력: ClamAV Processing Module

이 모듈을 사용하려면 ClamAV가 설치되어 있어야 합니다. 터미널에서 APT 패키지 관리자를 사용하여 ClamAV를 설치하십시오:

root@kitploit:~
$ sudo apt-get install clamav-daemon clamav-freshclam clamav-unofficial-sigs

설치가 완료되면 ClamAV 업데이트 서비스가 이미 실행 중이어야 합니다. 그러나 freshclam을 사용하여 수동으로 업데이트하려면 서비스를 중지하십시오:

root@kitploit:~
sudo systemctl stop clamav-freshclam.service

그런 다음 freshclam을 수동으로 실행하십시오:

root@kitploit:~
$ sudo freshclam

마지막으로 ClamAV 서비스 상태를 확인하십시오:

root@kitploit:~
$ sudo systemctl status clamav-daemon.service

서비스가 실행 중이지 않으면 systemctl을 사용하여 시작할 수 있습니다:

root@kitploit:~
$ sudo systemctl start clamav-daemon.service

Payload

Payload 처리 모듈은 libmagic 라이브러리를 사용하여 HTTP 응답 콘텐츠를 식별하는 데 사용됩니다. 또한 SubCrawl은 PE 파일이나 아카이브와 같은 관심 콘텐츠를 저장하도록 구성할 수 있습니다. 이 처리 모듈을 호출하려면 처리 모듈 인수로 PayloadProcessing 값을 제공하십시오. 예를 들어, 다음 명령은 Payload 처리 모듈을 로드하고 콘솔에 출력을 생성합니다:

root@kitploit:~
python3 subcrawl.py -p PayloadProcessing -s ConsoleStorage

이 모듈에는 추가 종속성이 없습니다.

샘플 출력: Payload processing output

저장 모듈

저장 모듈은 대기열의 모든 URL이 스캔된 후 SubCrawl 엔진에 의해 호출됩니다. 이 모듈은 두 가지 목표로 설계되었습니다. 첫째, 스캔 대기열 처리가 완료된 직후 스캔 결과를 얻고, 둘째, 장기적인 저장 및 분석을 가능하게 하는 것입니다. 따라서 ConsoleStorage 모듈뿐만 아니라 MISP 통합 및 SQLite 저장 모듈도 구현했습니다.

Console

URL 스캔 직후 결과를 신속하게 분석하기 위해 콘솔에 잘 포맷된 출력이 인쇄됩니다. 이 출력은 SubCrawl을 한 번 실행 모드로 사용할 때 가장 적합합니다. 이 방법은 단일 도메인을 스캔하거나 빠른 출력을 생성하는 데는 효과적이지만 장기적인 연구 및 분석에는 부적합합니다.

Console Storage UI

Elastic

Elastic 클러스터와의 통합도 가능합니다. 각 URL과 해당 데이터는 이벤트로 인덱싱되며, 여기에는 YARA와 같은 다른 모듈의 출력이 포함됩니다. 이 모듈을 시작하는 데 도움이 되도록 기본 대시보드도 추가되었습니다. elasticsearch 섹션을 업데이트해야 하며, 다음이 포함됩니다:

  • Elastic search host (기본값 localhost)
  • Port to find elastic on (기본값 9200)
  • Index name (기본값 subcrawl)
  • Archive response content - HTTP 응답 본문을 디스크에 저장 (기본값 False)
  • Archive log location - 응답 콘텐츠를 저장할 위치 (기본값 log/)

이 출력 모듈을 사용하려면 -s 인수와 함께 ElasticStorage 값을 제공하십시오.

SQLite

MISP의 설치 및 구성이 시간이 많이 걸릴 수 있으므로 데이터를 SQLite 데이터베이스에 저장하는 또 다른 모듈을 구현했습니다. 사용자에게 데이터를 가능한 한 간단하고 명확하게 제시하기 위해 간단한 웹 GUI도 개발했습니다. 이 웹 애플리케이션을 사용하면 스캔된 도메인과 URL을 모든 속성과 함께 보고 검색할 수 있습니다. 초기 버전이므로 아직 복잡한 비교 기능은 구현되지 않았습니다.

SQLite UI

MISP

MISP는 유연한 데이터 모델과 API를 갖춘 오픈 소스 위협 인텔리전스 플랫폼으로, 위협 데이터를 저장하고 분석합니다. SubCrawl은 크롤링된 데이터를 MISP 이벤트로 저장하며, 도메인당 하나의 이벤트를 게시하고 식별된 공개 디렉토리를 속성으로 추가합니다. MISP는 사용자가 이벤트 및 속성에 태그를 정의할 수 있도록 허용합니다. 이는 이벤트 비교 및 연결 분석에 유용합니다. 이것이 주요 연구 목표 중 하나였기 때문에 SubCrawl의 출력을 MISP로 내보낼 때 URLHaus의 데이터로 정보를 보강했습니다. URLHaus는 태그를 사용하여 데이터에 주석을 달며, 이 태그는 URL과 관련된 악성코드 패밀리나 위협 행위자를 식별하는 데 사용될 수 있습니다. 각 공개 디렉토리 URL에 대해 모듈은 로컬에 저장된 URLHaus 데이터를 쿼리하고 일치하는 경우 URLHaus 태그를 MISP 이벤트에 추가합니다. 각 MISP 이벤트에 관련 없는 속성 모음을 방지하기 위해 스캔된 URL에 대한 새 MISP 개체인 opendir-url을 만들었습니다. 이렇게 하면 관련 속성이 함께 유지되어 데이터 개요를 쉽게 파악할 수 있습니다.

MISP UI

자체 모듈 구축

처리 및 저장 모듈용 템플릿은 프레임워크의 일부로 제공됩니다.

처리 모듈

처리 모듈은 crawler->processing 아래에서 찾을 수 있으며, 이 디렉토리에 샘플 모듈 파일 example_processing.py가 있습니다. 템플릿은 프레임워크에 의한 실행을 보장하는 데 필요한 상속 및 가져오기를 제공합니다. _init_ 함수는 모듈 초기화를 제공하며 로거 및 전역 구성의 인스턴스를 수신합니다. 로거는 처리 모듈 및 프레임워크 전반에서 로깅 정보를 제공하는 데 사용됩니다.

_process 함수는 각 HTTP 응답을 처리하기 위해 구현됩니다. 이를 위해 URL과 원시 응답 콘텐츠를 수신합니다. 이곳이 모듈의 작업이 구현되는 위치입니다. 이 함수는 다음 필드가 있는 딕셔너리를 반환해야 합니다:

  • hash: 콘텐츠의 sha256
  • url: 콘텐츠를 가져온 URL
  • matches: 모듈에서 일치하는 결과 (예: libmagic 또는 YARA 결과)

고유한 클래스 이름을 정의해야 하며, 이 이름은 -p 인수를 통해 모듈을 포함할 때 또는 구성 파일의 기본 처리 모듈로 정의할 때 사용됩니다.

마지막으로, __init__.py에 클래스 이름을 사용하여 import 문을 추가하십시오:

root@kitploit:~
from .<REPLACE>_processing import <REPLACE>Processing

저장 모듈

저장 모듈은 crawler->storage 아래에서 찾을 수 있으며, 이 디렉토리에 샘플 모듈 파일 example_storage.py가 있습니다. 처리 모듈과 유사하게 _init_ 함수는 모듈 초기화를 제공하며 로거 및 전역 구성의 인스턴스를 수신합니다. _store_results 함수는 구성 파일의 배치 크기로 정의된 간격으로 엔진으로부터 구조화된 데이터를 수신합니다.

고유한 클래스 이름을 정의해야 하며, 이 이름은 -s 인수를 통해 모듈을 포함할 때 또는 구성 파일의 기본 저장 모듈로 정의할 때 사용됩니다.

프레젠테이션 및 기타 자료

2021:

  • BlackHat Arsenal USA
  • VirusBulletin Localhost - 예정

라이선스

SubCrawl은 MIT 라이선스에 따라 라이선스가 부여됩니다.

도구 다운로드