
Ollama 공개 인스턴스용 대규모 정찰, 버전 지문 수집, CVE 테스터 및 라이브 익스플로잇 프레임워크
노출된 Ollama 서버를 발견하고, 버전을 식별하며, 모델 접근을 검증하기 위한 모듈식 툴킷입니다.
OllamaHound는 공개적으로 노출된 Ollama 서버를 발견하고, 버전을 식별하며, CVE 노출 여부를 분류하고, 텍스트 생성이 가능한지 검증하며, (선택적으로) 통제된 테스트를 위한 대화형 CLI 세션을 활성화하는 모듈식 RedTeam 지향 툴킷입니다.
@@@@@@@@@@@@@@@@@@@@@@@@@@@#*#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@%.-+-:#@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@+--=%@@@@@@@@-.@@@+ #@@@@@@@@@@@@@@@@@ @@@@@@@@@@@= %%+.=@@@%###-.@@@@= %@@@@@@@@@@@@@@@@ @@@@@@@@@@@-.@@@@..--====-.=@@@@.-@@@@@@@@@@@@@@@@ @@@@@@@@@@@# +#+-:*%@@@@@@@@@@@@- +@@@@@@@@@@@@@@@ @@*@@@@@#*+=:::.-*%@@@@@@@@@@@@@@%::%@@@@@@@@@@@@@ @+:-@@*----=***+==-=#@@@@@@@@@@@@@@::@@@@@@@@@@@@@ @*+#@=-==+=%@@@@%#=+:*%%%@@@@#++%@@+ %@@@@@@@@@@@@ +:=@#.+-@#=#@%+++%@:* =++==*@- *@@-.@@@@@@@@@@@@@ %=+@+--*@@*=##+++%#.+::=@#%:+@%@@@@%.=@@@@@@@@@@@@ @@@@#.+-@@%=*@@@@@+.* =-:*@-=@@@@@@@* %@@@@@@@@@@@ @@@@@+:==#*=%@@@@*-=.:--+*-=@@@@@@@@+ %@@@@@@@@@@@ @@@@@@#=----+*++=--=**++*#%@@@@@@@@% =@@@@@@@@@@@@ @@@@@@@@%*-:---.+*%@@@@@@@@@@@@@@@@+-:+@@@@@@@@@@@ @@@@@@@@@@# ==:.%@@@@@@@@@@@@@@@@@@@@%.-@@@@@@@@@@ @@@@@@@@@@#.@@:.#@@@@@@@@@@@@@@#@@@@@@% *@@@@@@@@@ @@@@@@@@@*::--::=%@@@@@@@@@@@@::@@@@@@@ =@@@@@@@@@ @@@@@@@@-.#@@@@@-.@@@@@@@@@@#.-@@@@@@@@*.-@@@@@@@@ @@@@@@@@.-@@@@@%::@@@@@@@@%=.+@@@@@@@@@@%.-@@@@@@@ @@@@@@@@#::++=::+@@@@@@@%=:=%@@@@@%%@@@@@+ @@@@@@@ @@@@@@@@@@=.:: #@@@@@@@=.+@@@@@@%=:*@@@@@= @@@@@@@ @@@@@@@@@@@@%-.%@@@@@@# *@@@@@#-:+@@@@@@% +@@@@@@@ @@@@@@@@@@@@@.=@@@@@@@@=:===---*@@@@@@@@@.=@@@@@@@ @@@@@@@@@@@@@=.%@@@@@@@@#-##%@@@@@@@@@@@@.-@@@@@@@ @@@@@@@@@@@@@@= -%@@@@@@# #@@@@@@@@@@@@@# #@@@@@@@ @@@@@@@@@@@@@@@ .:=*%%@%#..*@@@@@@@@@@@+.+@@@@@@@@ @@@@@@@@@@@@@@@.=@*==- -=*. --==+*#**=:-#@@@@@@@@@ @@@@@@@@@@@@@@@:-@@@@# #@@+ %%##*..++#%@@@@@@@@@@@ @@@@@@@@@@@@@@@::@@@@-.@@@% *@@@@-:@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@*.=++::%@@@@::%@%+ *@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@%***%@@@@@@%=---=%@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@---OllamaHound---@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@---By 7h30th3r0n3---@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!!! 경고 !!!
⚠️ 법적 및 윤리적 고지
이 프로젝트는 공인된 보안 평가(내부 네트워크, 범위 내 작업, 실험 환경)를 위해 설계되었습니다.
소유한 시스템이나 명시적 서면 허가를 받은 시스템에서만 사용하십시오.
이 소프트웨어를 사용함으로써 귀하는 귀하의 행동에 대해 전적으로 책임을 진다는 데 동의합니다.
저자 및 기여자는 이 소프트웨어를 "있는 그대로" 제공하며,
오용, 손해 또는 사용으로 인한 법적 결과에 대해 모든 책임을 부인합니다.
/api/tags 및 /api/generateresults/scraper/targets.txtresults/scanner/<prefix>_YYYYMMDD_HHMMSS.csv단계별로 수행하거나 오케스트레이터를 실행하여 처음 세 단계를 연결할 수 있습니다.
asyncio + aiohttp 사용 (수천 개의 동시 소켓)rich를 통한 ETA, 처리량, 완료율<prefix>_YYYYMMDD_HHMMSS.csvGET /api/version → 대체 GET /version → 대체 Server 헤더< 0.1.47<= 0.3.14GET /api/tags를 통해 모델 열거POST /api/generate를 통해 생성 테스트aiohttprichpackagingrequestsshodan의존성 설치:
python3 -m pip install -U aiohttp rich packaging requests shodan
Docker 사용:
docker build -t ollamahound .
docker run -it --rm ollamahound <ollamahound 스크립트>
옵션 A (가장 빠름): 스크래핑 → 스캔 → 연결
python3 ollamaScraper.py
python3 ollamaScanner.py results/scraper/targets.txt --gen-ok-only
python3 ollamaConnector.py --scan-csv results/scanner/ollama_scan_*.csv
옵션 B (원샷): 오케스트레이터 파이프라인
python3 ollamaOrchestrator.py --scan-gen-ok-only
ollamaOrchestrator.py는 스크레이퍼, 스캐너, 커넥터를 순차적으로 실행하여 단일 명령어로 Shodan 수집부터 대화형 CLI까지 이동할 수 있도록 합니다. 스크레이퍼와 커넥터는 대화형으로 유지되지만, 오케스트레이터가 출력을 연결해 줍니다.
python3 ollamaOrchestrator.py --scan-gen-ok-only --scan-vuln-only
results/orchestrator/targets.txt에 기록됩니다 (--targets로 변경 가능).--scan-output-prefix (기본값 orchestrator_scan) 접두사로 results/scanner/에 저장됩니다.--connector-row를 전달하여 커넥터 실행 시 행을 자동 선택하거나, 평소처럼 대화식으로 선택합니다.--skip-scrape, --skip-scan, --skip-connect를 사용하면 기존 출력을 사용하여 중간부터 재개할 수 있습니다 (스캔 단계를 건너뛸 때는 --scan-csv가 필요).이 섹션의 나머지 부분은 수동으로 각 모듈을 실행하려는 경우에도 적용됩니다.
스크레이퍼:
# 기본 대화형 스크래핑 (Shodan dork 선택기)
python3 ollamaScraper.py
# 사용자 정의 출력 폴더 + 파일명
python3 ollamaScraper.py --output-dir results/my-scrape -o targets_acme.txt
스캐너:
# targets.txt 스캔 (기본값 11434, 동시성 500, 타임아웃 8초)
python3 ollamaScanner.py results/scraper/targets.txt
# /api/generate가 200을 반환하는 호스트만
python3 ollamaScanner.py results/scraper/targets.txt --gen-ok-only
# 다중 포트 스캔 (공백과 쉼표 혼합)
python3 ollamaScanner.py results/scraper/targets.txt -p 11434 8080,13871
# 공격적 스위프 (짧은 타임아웃 + 높은 동시성)
python3 ollamaScanner.py results/scraper/targets.txt --timeout 3 -c 800
# 취약한 호스트만 유지 (RCE/DoS) 및 알 수 없는 버전 포함
python3 ollamaScanner.py results/scraper/targets.txt --vuln-only --show-unknown
# 사용자 정의 CSV 접두사 + 출력 디렉터리
python3 ollamaScanner.py results/scraper/targets.txt -o scan_acme.csv --output-dir results/scanner_acme
내비게이터:
# 스캐너 CSV 디렉터리 필터링
python3 ollamaNavigator.py --scan-csv results/scanner --require-gen-ok --vuln rce
# 단일 CSV 필터링, llama 모델로 제한, 크기 >= 7B
python3 ollamaNavigator.py --scan-csv results/scanner/scan_20260107_180002.csv \
--model llama --min-params 7
# 모델 제외 + 검색 키워드
python3 ollamaNavigator.py --scan-csv results/scanner --exclude-model qwen --search france
# 필터링된 행 내보내기
python3 ollamaNavigator.py --scan-csv results/scanner --vuln dos \
--json-output results/navigator/dos.json --csv-output results/navigator/dos.csv
# 대화형 필터 메뉴
python3 ollamaNavigator.py --scan-csv results/scanner --interactive
커넥터:
# 직접 연결
python3 ollamaConnector.py --host http://127.0.0.1:11434 --model llama3
# 스캐너 CSV 행 사용 (1부터 시작하는 인덱스)
python3 ollamaConnector.py --scan-csv results/scanner/scan_20260107_180002.csv --scan-row 3
오케스트레이터:
# 전체 파이프라인
python3 ollamaOrchestrator.py
# 전체 파이프라인 + gen-ok만 + vuln-only만
python3 ollamaOrchestrator.py --scan-gen-ok-only --scan-vuln-only
# 기존 대상 및 CSV 재사용, 커넥터만 실행
python3 ollamaOrchestrator.py --skip-scrape --skip-scan --scan-csv results/scanner/scan_20260107_180002.csv
# 커넥터 건너뛰기 (스크래핑 + 스캔만)
python3 ollamaOrchestrator.py --skip-connect
targets.txt는 한 줄에 하나씩 포함할 수 있습니다:
192.0.2.1010.0.0.0/24ollama.example.org스크레이퍼로 목록을 생성한 경우 스캐너를 results/scraper/targets.txt (또는 --output-dir로 선택한 경로)로 지정하십시오.
ollamaScraper.py는 Shodan을 쿼리하여 results/scraper/targets.txt를 빌드할 수 있습니다:
python3 ollamaScraper.py
스크립트는 API 키를 .shodan_api에 캐시하고, dork(전역 또는 국가 범위)를 선택할 수 있게 하며, 모든 히트를 results/scraper/targets.txt에 추가하면서 기본 컨텍스트를 출력합니다. 선택적으로 org:"Company" 필터를 추가하여 결과를 좁힐 수 있습니다. Ctrl+C를 누르거나 최대 IP 제한에 도달하면 실행이 중지됩니다. --output-dir / -o를 사용하여 폴더나 파일명을 변경한 다음 해당 경로를 스캐너에 전달하십시오.
/api/generate가 HTTP 200을 반환하는 호스트만 표시:
python3 ollamaScanner.py targets.txt --gen-ok-only
더 공격적인 스위프 (짧은 타임아웃 + 높은 동시성):
python3 ollamaScanner.py targets.txt --gen-ok-only --timeout 3 -c 800
전체 스위프 예제:
11434 및 8080 스캔/api/generate == 200만 유지scan.csvpython3 ollamaScanner.py targets.txt -p 11434,8080 --timeout 2 -c 1200 \
--gen-ok-only --vuln-only --show-unknown -o scan.csv
스캐너 CSV는 이제 results/scanner/ 아래에 저장됩니다. 파일을 다른 곳에 저장하려면 --output-dir을 사용하십시오 (폴더는 자동으로 생성됩니다).
스캐너는 rich 테이블을 출력합니다:
?)rce, dos, patched, unknown)tags, generate, show)타임스탬프가 있는 CSV가 자동으로 기록됩니다. 예:
ollama_scan_20260107_180002.csv
필드:
ip, port, version, vuln, tags, generate, show, models내비게이터를 사용하여 하나의 CSV 또는 스캐너 출력 전체 디렉터리(호스트/포트별 중복 제거, 모델 병합)에서 결과를 필터링, 정렬 및 내보낼 수 있습니다.
python3 ollamaNavigator.py --scan-csv results/scanner --require-gen-ok --vuln rce --model llama
--scan-csv는 단일 CSV 파일 또는 스캐너 출력 디렉터리를 허용합니다.params (기본값), ip, 또는 version.--interactive를 사용하면 메뉴 기반 필터 편집기 + 내보내기를 사용할 수 있습니다.--json-output 또는 --csv-output로 필터링된 행을 내보냅니다.발견된 인스턴스에 연결하고 응답을 스트리밍합니다:
python3 ollamaConnector.py --host http://127.0.0.1:11434 --model llama3
--model을 생략하면 CLI가 /api/tags를 가져와 서버가 노출하는 모든 모델을 나열하고 번호로 선택할 수 있게 합니다. 각 프롬프트는 서버가 완료되거나 Ctrl+C를 누를 때까지 청록색 토큰을 스트리밍합니다. exit / quit를 입력하여 종료합니다.
커넥터를 스캐너 CSV의 행에 직접 연결하여 호스트와 모델을 다시 입력할 필요가 없도록 할 수도 있습니다:
python3 ollamaConnector.py --scan-csv scan_20260107_141056.csv --scan-row 3
--scan-row는 1부터 시작합니다 (헤더 다음 첫 번째 줄이 1). 생략하면 커넥터가 CSV를 로드하고, 모든 호스트(IP/포트, 취약점 상태, 첫 번째 모델)를 표시한 다음 인덱스를 선택하도록 하고, 발견된 모델을 나열하여 채팅할 모델을 선택할 수 있게 합니다. 모델 프롬프트에서 0을 선택하면 새로운 /api/tags 가져오기로 건너뛰므로 CSV가 오래되었거나 비어 있어도 원래 커넥터 동작이 여전히 작동합니다.
ollamaScraper.py는 간단한 도우미로, .shodan_api 토큰 파일을 유지하고, 국가(또는 전역)를 묻고, 여러 미리 만들어진 Shodan dork(또는 사용자 정의 쿼리) 중에서 선택하게 한 다음, 중단하거나 사용자 정의 호스트 제한에 도달할 때까지 Shodan 페이지를 탐색합니다. 모든 IP는 results/scraper/targets.txt에 기록되므로 스캐너가 즉시 출력을 재사용할 수 있습니다. 원하는 경우 --output-dir을 통해 다른 디렉터리를 제공할 수 있습니다.
또한 선택적인 회사/조직 필터를 제공하여 dork에 org:"Company"를 추가하고, 소유한 시스템이나 명시적 허가를 받은 시스템만 대상으로 하라는 경고를 출력합니다.
--skip-scrape, --skip-scan, --skip-connect: 파이프라인 부분 재개--targets: 공유 대상 파일 선택--ports, --scan-concurrency, --scan-timeout: 스캐너 단계 조정--scan-output-prefix, --scan-output-dir: 스캐너 CSV 출력 제어--scan-gen-ok-only, --scan-vuln-only, --scan-show-unknown: 스캐너 필터--scan-csv: 스캔을 건너뛸 때 기존 스캐너 CSV 재사용--connector-row: 커넥터 실행 시 행 자동 선택내비게이터는 7B, 13b, 또는 500m과 같은 모델 이름에서 매개변수 크기를 추출합니다. 호스트당 가장 큰 크기가 테이블에 표시되며 정렬/필터링(--min-params / --max-params)에 사용됩니다.
OllamaHound는 방어적 및 승인된 공격적 보안을 위해 구축되었습니다:
7h30th3r0n3
스캐너대규모 비동기 발견, 버전 식별, CVE 분류, 모델 프로빙.
|
커넥터발견된 Ollama 인스턴스와 대화하기 위한 풍부한 UI 대화형 CLI 클라이언트.
|
스크레이퍼Shodan 기반 대상 수집기로 대화식으로
|
내비게이터내보내기 및 대화형 메뉴가 있는 스캐너 CSV용 검색/필터 도우미.
|
오케스트레이터스크레이퍼 → 스캐너 → 커넥터를 연결하여 각 출력을 다음 단계로 전달합니다.
|
결과출력은 |
/api/generate가 HTTP 200을 반환하는 호스트가 상단에 표시됨--gen-ok-only: /api/generate가 작동하는 호스트만 유지--vuln-only: RCE/DoS로 분류된 호스트만 유지--show-unknown: 알 수 없거나 구문 분석할 수 없는 버전의 호스트 포함| 모듈 | 출력 | 기본 위치 |
|---|
| 스크레이퍼 | 대상 목록 | results/scraper/targets.txt |
| 스캐너 | 타임스탬프가 있는 CSV | results/scanner/<prefix>_YYYYMMDD_HHMMSS.csv |
| 내비게이터 | 선택적 JSON/CSV 내보내기 | navigator_results.json / navigator_results.csv |
| 오케스트레이터 | 대상 + 스캐너 CSV | results/orchestrator/targets.txt + results/scanner/ |