
Shadowbroker v0.9.84
실시간 지리공간 OSINT 플랫폼으로, 60개 이상의 공공 원격 측정 피드(ADS-B, AIS, 위성, CCTV)를 통합 지도에 집계하며 서버 측 정찰 도구 키트, AI 에이전트 채널, 분산 메시 통신 기능을 제공합니다.
🛰️ S H A D O W B R O K E R
글로벌 위협 차단 — 실시간 지리공간 정보 플랫폼
ShadowBroker는 60개 이상의 실시간 다중 도메인 OSINT 정보 피드를 단일 다크옵스 맵 인터페이스로 통합하는 분산형 인텔리전스 플랫폼입니다. 항공기, 선박, 위성, 분쟁 지역, CCTV 네트워크, GPS 재밍, 인터넷 연결 장치, 경찰 스캐너, 메쉬 라디오 노드, 그리고 주요 지정학적 사건까지 — 모두 한 화면에서 실시간으로 업데이트되며, 난독화된 통신 프로토콜 및 정보 교환 인프라도 포함합니다.
🛰️ 프로젝트 설명
Next.js, MapLibre GL, FastAPI, Python으로 구축되었습니다. SAR 지표면 변화 감지, Telegram OSINT (공개 채널 미리보기가 지리적으로 맵에 표시됨), 서버 측 정찰 도구 모음(DNS, WHOIS, 제재, BGP, IP 스캔 등), 공급망 위험 오버레이, 악성코드/C2 + CISA KEV 사이버 위협 피드를 포함한 40개 이상의 토글 가능한 데이터 레이어를 제공합니다. 여러 시각 모드 (DEFAULT / SATELLITE / FLIR / NVG / CRT)를 지원합니다. 지구상의 아무 지점이나 마우스 오른쪽 버튼으로 클릭하면 국가 개요, 국가 원장 조회, 엔터티 그래프 확장, 최신 Sentinel-2 위성 사진을 확인할 수 있습니다. ShadowBroker는 계정, 제품 원격 측정, 분석 기능이 없습니다. 대시보드는 자체 호스팅 백엔드와 통신합니다. 민감한 정찰 및 Shodan 쿼리는 브라우저에서 타사 API에 직접 접근하지 않고 SSRF 보호 및 로컬 연산자 인증을 통해 백엔드를 프록시합니다. OpenClaw / 에이전트 명령 채널은 전체 원격 측정 검색과 동일한 정찰 백엔드를 제공하므로 별도의 API 통합이 필요하지 않습니다.
분석가, 연구자, 무선 통신 운영자, 그리고 모든 공개 신호를 하나의 맵에서 보고자 하는 모든 이들을 위해 설계되었습니다.
🌍 이 프로젝트가 존재하는 이유
놀랍게도 전 세계 원격 측정 데이터의 상당수는 이미 공개되어 있습니다 — 항공기 ADS-B 방송, 해상 AIS 신호, 위성 궤도 데이터, 지진 센서, 메쉬 라디오 네트워크, 경찰 스캐너 피드, 환경 모니터링 스테이션, 인터넷 인프라 원격 측정 등. 이 데이터는 수십 개의 도구와 API에 분산되어 있습니다. ShadowBroker는 이 모든 것을 하나의 인터페이스로 결합합니다.
이 프로젝트는 새로운 감시 기능을 도입하지 않습니다 — 기존 공개 데이터 세트를 집계하고 시각화합니다. 완전히 오픈 소스이므로 누구든지 어떤 데이터에 접근하는지, 어떻게 사용되는지 정확히 감사할 수 있습니다. ShadowBroker는 제품 원격 측정, 분석 기능 또는 계정을 포함하지 않습니다. 운영자가 제공한 키는 로컬 배포에 남아 있지만, 라이브 OSINT 기능은 사용자가 활성화하거나 쿼리하는 공개 데이터 제공자에게 아웃바운드 요청을 보내야 합니다.
📡 Shodan 및 정찰 (보안 우선)
ShadowBroker는 운영자가 제공하는 API 접근(SHODAN_API_KEY)을 위한 선택적 Shodan 커넥터와 키 없는 OSINT 조회를 위한 정찰 도구 모음(Recon Toolkit) 패널을 포함합니다. 둘 다 서버 측에서만 실행됩니다: 브라우저는 자체 호스팅된 /api/osint/* 및 /api/tools/shodan/* 경로를 호출하며, 아웃바운드 요청은 SSRF 검증 후 백엔드에서 수행됩니다. 정찰은 로컬 운영자 접근이 필요합니다 (레이어 토글 및 관리자 경로와 동일한 신뢰 모델). Shodan 결과는 별도의 맵 오버레이로 렌더링되며 Shodan의 서비스 약관이 적용됩니다.
🗺️ 흥미로운 사용 사례
- 에어 포스 원, 억만장자 및 독재자의 개인 제트기, ADS-B를 송출하는 모든 군용 유조선, ISR 및 전투기를 추적하세요. 에어 포스 원 및 모든 대통령/부통령 전용기는 이륙하는 순간부터 강조 표시되어 모니터링됩니다.
- AI 에이전트를 공동 분석가로 연결 — ShadowBroker의 HMAC 서명된 에이전트 명령 채널을 통해 OpenClaw 및 프로토콜을 사용하는 모든 에이전트(Claude, GPT, LangChain, 사용자 정의)를 지원합니다. 에이전트는 40개 이상의 데이터 레이어에 대한 전체 읽기/쓰기 액세스, 간결한 교차 레이어 검색(
search_telemetry,search_news), 전체 정찰 도구 모음(IP/DNS/WHOIS/제재/CVE 등에 대한osint_lookup), 엔터티 그래프 확장, 핀 배치, 맵 제어, SAR 지표면 변화, 메쉬 네트워킹 및 알림 전달을 사용할 수 있습니다. 운영자가 보는 모든 것을 보고 실시간으로 맵에서 작업을 수행할 수 있습니다. - InfoNet 테스트넷에서 통신 — OSINT 도구에 내장된 최초의 분산형 인텔리전스 메쉬입니다. 게이트 페르소나를 통한 난독화된 메시징, Dead Drop 피어 투 피어 교환, 내장 터미널 CLI가 포함됩니다. 계정 없음, 가입 없음. 아직 개인정보 보호가 보장되지는 않습니다 — 이는 실험적인 테스트넷이지만 프로토콜은 활성화되어 있으며 보안을 강화 중입니다.
- 지구상의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하여 국가 개요(국가 원수, 인구, 언어), Wikipedia 요약 및 10m 해상도의 최신 Sentinel-2 위성 사진을 확인하세요.
- KiwiSDR 노드를 클릭하여 대시보드에서 직접 단파 라디오를 실시간 청취하세요. 경찰 스캐너 피드를 클릭하면 한 번의 클릭으로 도청할 수 있습니다.
- 6개국 11,000개 이상의 CCTV 카메라 — 런던, 뉴욕, 캘리포니아, 스페인, 싱가포르 등 — 맵에서 실시간 스트리밍 시청
- GPS 재밍 구역을 실시간으로 확인 — 항공기 트랜스폰더 데이터의 NAC-P 저하 분석에서 파생
- 위성을 임무 유형별로 색상 코드로 모니터링 — 군사 정찰, SIGINT, SAR, 조기 경보, 우주 정거장 — SatNOGS 및 TinyGS 지상국 네트워크 포함
- 해상 교통 추적 — 25,000척 이상의 AIS 선박, Global Fishing Watch를 통한 어업 활동, 억만장자 슈퍼요트 포함
- 지진, 화산 폭발, 활성 산불(NASA FIRMS), 악천후 경보, 전 세계 대기 질 측정값 추적
- 군사 기지, 35,000개 이상의 발전소, 2,000개 이상의 데이터 센터, 인터넷 중단 지역 매핑 — 자동으로 상호 참조
- Meshtastic 메쉬 라디오 노드 및 APRS 아마추어 무선 네트워크에 연결 — 맵에 표시되고 Mesh Chat에 통합
- 구름 덮개를 통한 지표면 변화 감지 — SAR(합성 개구 레이더)을 사용하여 mm 단위 지면 변형, 홍수 범위, 식생 교란, NASA OPERA 및 Copernicus EGMS의 피해 평가. 자신의 감시 구역을 정의하고 이상 징후 알림을 받으세요. NASA Earthdata 계정으로 무료 제공.
- 시각 모드 전환 — DEFAULT, SATELLITE, FLIR(열화상), NVG(야간 투시), CRT(레트로 터미널) — STYLE 버튼 사용
- 기차 추적 — 미국 전역(Amtrak) 및 유럽(DigiTraffic)에서 실시간으로
- 미국 항공모함 위치 추정 — 자동화된 GDELT 뉴스 스크래핑 사용 — 다른 오픈 도구에서는 이 기능을 제공하지 않음
- 전 세계 인터넷 연결 장치 검색 — Shodan을 통해 카메라, SCADA 시스템, 데이터베이스 — 맵에 실시간 오버레이로 표시
- 완전한 정찰 도구 모음 실행 — 왼쪽 사이드바에서 IP 지리적 위치, DNS, RDAP/WHOIS, 인증서 투명성, BGP/ASN, OFAC 제재 검색, CVE 조회, Tor/OTX 위협 확인, 서브넷 스캔(서버 측 프록시 InternetDB)
- 엔터티 그래프 확장 — 항공기, 선박, 회사 또는 IP 선택 시 — Wikidata + OFAC + 라이브 스토어 교차 링크가 엔터티 그래프 패널에 렌더링
- 공급망 위험 모니터링 — 티어 1/2 반도체 및 배터리 공장을 인근 지진, 산불, 분쟁 이벤트에 대해 평가 (SCM 패널)
- 악성코드 C2 핫스팟 토글 — abuse.ch Feodo Tracker + URLhaus 피드를 국가별로 매핑 (옵트인 레이어)
- Telegram OSINT 채널 모니터링 — 공개
t.me/s전쟁/분쟁 피드(OSINTdefender, NEXTA 등)를 매시간 스크래핑, 위험 점수 부여, 지리적 파싱으로 메트로 앵커에 연결, 클릭 가능한 맵 핀으로 인라인 미디어와 함께 표시 - 전역 해저 케이블 오버레이 — 정적 TeleGeography 파생 케이블 경로 (옵트인 레이어)
⚡ 빠른 시작 (Docker)
GitHub에서 (기본값 — GHCR 이미지 사용)```bash
git clone https://github.com/bigbodycobain/Shadowbroker.git cd Shadowbroker docker compose pull docker compose up -d
### GitLab에서 (GitLab Container Registry 사용)```bash
git clone https://gitlab.com/bigbodycobain/Shadowbroker.git
cd Shadowbroker
docker compose -f docker-compose.yml -f docker-compose.gitlab.yml pull
docker compose -f docker-compose.yml -f docker-compose.gitlab.yml up -d
두 경로 모두 동일한 컨테이너를 생성합니다—동일한 소스, 동일한 CI, 동일한 이미지(바이트 단위로 동일). 이미 사용 중인 생태계를 선택하세요.
http://localhost:3000을 열어 대시보드를 확인하세요! (Docker Desktop 또는 Docker Engine 필요)
비공개 InfoNet 스웜(sb-testnet-0)에 참여하세요: 대시보드에서 NODE를 클릭하거나, 헤드리스 참가자를 위해
./meshnode.sh를 실행하세요. 수동 피어 목록 없음 — 기본 플리트가 시드를 자동으로 발견하고 서명된 매니페스트를 가져옵니다. 비공개 단독 노드를 원한다면.env에서MESH_INFONET_FLEET_JOIN=false를 설정하세요.
백엔드 포트가 이미 사용 중인가요? 브라우저는 포트
3000만 필요하지만, 백엔드 API는 로컬 진단을 위해 호스트 포트8000에도 게시됩니다. 다른 앱이 이미8000을 사용 중이라면docker-compose.yml옆에.env를 생성하거나 편집하여BACKEND_PORT=8001을 설정한 다음docker compose up -d를 실행하세요.
몇 분 후에도 뉴스/UAP/기지/폐수가 빈 화면인가요?
docker events --since 30m --filter container=shadowbroker-backend --filter event=oom으로 백엔드 OOM 재시작을 확인하세요. 기본 compose 파일은 백엔드에 4GB를 할당합니다. 호스트 메모리가 부족하면 활성화된 피드를 줄이거나BACKEND_MEMORY_LIMIT=3G를 설정하고 느리거나 무거운 레이어가 더 점진적으로 워밍업될 것으로 예상하세요.
Podman 사용자: Podman은 작동하지만,
podman compose는 래퍼이며 여전히 Compose 제공자가 설치되어 있어야 합니다. Windows/WSL에서looking up compose provider failed오류가 발생하면,podman-compose를 설치하고 클론된Shadowbroker폴더 내에서podman-compose pull후podman-compose up -d를 실행하세요. Linux/macOS/WSL 셸에서는./compose.sh --engine podman pull및./compose.sh --engine podman up -d를 사용할 수도 있습니다.
🔄 업데이트 방법
ShadowBroker는 사전 빌드된 Docker 이미지를 사용합니다—로컬 빌드가 필요하지 않습니다. 업데이트는 몇 초밖에 걸리지 않습니다:```bash docker compose pull docker compose up -d
그게 다입니다. `pull`은 최신 이미지를 가져오고, `up -d`는 컨테이너를 다시 시작합니다.
> **이전 버전에서 오셨나요?** 먼저 최신 저장소 코드를 가져온 후, 이미지를 가져오세요:
>
> ```bash
> git pull origin main
> docker compose down
> docker compose pull
> docker compose up -d
> ```
>
> Podman 사용자는 해당 제공자 명령어를 실행해야 합니다. 예를 들어 `podman-compose pull` 및 `podman-compose up -d`, 또는 bash 호환 셸에서 `./compose.sh --engine podman pull` 및 `./compose.sh --engine podman up -d`를 사용하세요.
### 업데이트 무결성
Docker 업데이트는 서명된 컨테이너 레지스트리를 통해 제공됩니다. 기존 ZIP 자체 업데이트 프로그램은 다음 체인을 통해 순서대로 릴리스 아카이브를 확인합니다:
* 운영자가 명시적으로 다이제스트를 고정할 때 `MESH_UPDATE_SHA256`.
* 번들 릴리스 고정을 위한 `backend/data/release_digests.json`.
* 번들 고정이 없을 때 GitHub의 릴리스 `SHA256SUMS.txt` 자산.
릴리스 유지 관리자는 게시 전에 `python backend/scripts/release_helper.py hash <ShadowBroker_vX.Y.Z.zip>`를 실행한 다음, ZIP 업데이트 대상을 배송할 때 `SHA256SUMS.txt`를 게시하고 `backend/data/release_digests.json`을 업데이트해야 합니다. 업데이트 프로그램은 번들 다이제스트가 누락된 경우 오류로 종료하지 않고 운영자 재정의 경로를 그대로 유지하므로, 릴리스 프로세스 오류로 인해 기존 설치가 중단되지 않습니다.
### CSP 강화
프로덕션 프론트엔드는 수화 호환 CSP와 `Content-Security-Policy-Report-Only`의 엄격한 nonce 전용 CSP와 함께 제공됩니다. 배포에서 정확한 빌드가 올바르게 수화되는지 확인한 후에만 `SHADOWBROKER_STRICT_CSP=1`을 설정하세요. 런타임 Google 글꼴은 필요하지 않습니다. 번들된 Next 글꼴 파이프라인이 앱 빌드에서 대시보드 글꼴을 제공합니다.
### ⚠️ **이전 버전에서 막혀 있나요?**
**`git pull`이 실패하거나 `docker compose up`이 이미지를 가져오지 않고 계속 소스에서 빌드하는 경우**, 귀하의 클론이 커밋 기록을 다시 작성한 2026년 3월 저장소 마이그레이션 이전의 것입니다. 일반 `git pull`로는 해결할 수 없습니다. 다음을 실행하세요:```bash
# Back up any local config you want to keep (.env, etc.)
cd ..
rm -rf Shadowbroker
git clone https://github.com/bigbodycobain/Shadowbroker.git
cd Shadowbroker
docker compose pull
docker compose up -d
영향을 받았는지 확인하는 방법: docker compose up에서 RUN apt-get, RUN npm ci, 또는 RUN pip install이 표시된다면 — 사전 빌드된 이미지를 가져오는 대신 소스에서 빌드하고 있는 것입니다. 새 클론이 필요합니다.
기타 문제 해결:
- 강제 재가져오기:
docker compose pull --no-cache - 오래된 이미지 정리:
docker image prune -f - 로그 확인:
docker compose logs -f backend
☸️ Kubernetes / Helm (고급)
고가용성 배포 또는 홈 랩 클러스터의 경우, ShadowBroker는 Helm을 통한 배포를 지원합니다. 이 차트는 bjw-s-labs 템플릿을 기반으로 하며, 백엔드와 프론트엔드 모두를 위한 견고하고 모듈식 설정을 제공합니다.
1. 저장소 추가:```bash helm repo add bjw-s-labs https://bjw-s-labs.github.io/helm-charts/ helm repo update
**2. 차트 설치:**```bash
# Default — pulls images from GHCR
helm install shadowbroker ./helm/chart --create-namespace --namespace shadowbroker
# GitLab registry variant
helm install shadowbroker ./helm/chart --create-namespace --namespace shadowbroker \
-f helm/chart/values.yaml \
-f helm/chart/values-gitlab.yaml
3. 주요 기능:
- 모듈식 아키텍처: 인텔리전스 백엔드와 HUD 프론트엔드를 개별적으로 확장 가능.
- 보안 컨텍스트: 컨테이너 강화를 위해 제한된 UID(1001)로 실행.
- 인그레스 지원: Traefik, Cert-Manager 및 Gateway API와 호환되어 인텔리전스 노드에 대한 안전한 외부 액세스 제공.
초기 Kubernetes 아키텍처에 기여한 @chr0n1x님께 특별히 감사드립니다.
🌐 실험적 테스트넷 — 개인정보 보호 미보장
ShadowBroker v0.9.7은 InfoNet(분산형 인텔리전스 메시 + Sovereign Shell 거버넌스 경제), 에이전트 AI 명령 채널(OpenClaw 및 모든 HMAC 서명 에이전트 지원), Time Machine 스냅샷 재생, SAR 위성 지상 변화 탐지를 탑재했습니다. 이는 실험적 테스트넷입니다 — 비공개 메신저나 프로덕션 거버넌스 시스템이 아닙니다.
| 채널 | 개인정보 보호 상태 | 세부 정보 |
|---|---|---|
| Meshtastic / APRS | 공개 | RF 무선 전송은 설계상 공개적이며 가로챌 수 있습니다. |
| InfoNet 게이트 채팅 | 난독화됨 | 메시지는 게이트 페르소나와 정식 페이로드 서명으로 난독화되지만, 종단간 암호화는 아닙니다. Tor와 Reticulum을 통해 설계되었음에도 불구하고 메타데이터는 숨겨져 있지 않습니다(작업 진행 중). |
| 데드 드롭 DM | 현재 가장 강력한 채널 | SAS 단어 확인 기능이 있는 토큰 기반 에포크 사서함. 이 빌드에서 가장 강력한 채널이지만, 아직 확실히 비공개는 아닙니다. |
| Sovereign Shell 거버넌스 | 공개 원장 | 청원, 투표, 업그레이드 해시, 분쟁 스테이크는 공개 해시체인에 서명된 이벤트입니다. 게이트 페르소나를 통한 가명이지만, 거버넌스 작업은 의도적으로 관찰 가능합니다. |
| 개인정보 보호 프리미티브(RingCT / 스텔스 / DEX) | 아직 연결되지 않음 | Locked Protocol 컨트랙트는 마련되어 있지만, 암호화 체계가 아직 선택되지 않았습니다. 개인정보 보호 코어 Rust 크레이트는 향후 스프린트의 통합 대상입니다. |
어떤 채널에서도 민감한 내용을 전송하지 마십시오. 지금은 모든 채널을 공개 및 공개적으로 취급하십시오. E2E 암호화와 더 깊은 네이티브/Tauri 강화가 다음 이정표입니다. 이 프로젝트를 포크하는 경우, 이 레이블을 그대로 유지하고 구현이 지원하는 것보다 더 강력한 개인정보 보호 주장을 하지 마십시오.
메시가 실제로 방어하는 것과 방어하지 않는 것에 대한 전체 그림을 보려면 위협 모델과 주장 조정 문서를 읽어보십시오. 위의 모든 문장은 이를 적용(또는 적용하지 않는) 코드 경로에 매핑되어 있습니다.
✨ 기능
🧅 InfoNet — 분산형 인텔리전스 메시 + Sovereign Shell (v0.9.7에서 확장)
OSINT 플랫폼에 직접 구축된 최초의 분산형 인텔리전스 통신 및 거버넌스 레이어. 계정, 가입, 신원 불필요. v0.9.7은 InfoNet을 채팅 레이어에서 개인정보 보호를 위한 분산형 인텔리전스 플랫폼으로 가는 명확한 경로를 갖춘 완전한 거버넌스 경제로 승격시킵니다.
통신 레이어 (v0.9.6부터):
- InfoNet 실험적 테스트넷 — Tor와 Reticulum을 사용하는 전역, 난독화된 메시지 중계. ShadowBroker를 실행하는 모든 사람이 InfoNet에서 송수신할 수 있습니다. 메시지는 게이트 페르소나, Ed25519 정식 페이로드 서명, 전송 난독화를 사용하는 Wormhole 중계 레이어를 통과합니다.
- 메시 채팅 패널 — 세 개의 탭 인터페이스: INFONET (난독화된 전송을 사용하는 게이트 채팅), MESH (Meshtastic 라디오 통합), DEAD DROP (토큰 기반 에포크 사서함을 사용한 피어-투-피어 메시지 교환 — 현재 가장 강력한 채널).
- 게이트 페르소나 시스템 — Ed25519 서명 키, 프리키 번들, SAS 단어 연락처 확인, 신고 기능을 갖춘 가명 신원.
- 메시 터미널 — 내장 CLI:
send,dm, 마켓 명령어, 게이트 상태 검사. 드래그 가능한 패널, 최소화 시 상단 표시줄로 이동.help를 입력하여 모든 명령어 확인. - 암호화 스택 — Ed25519 서명, X25519 Diffie-Hellman, HKDF 키 파생을 사용한 AESGCM 암호화, 해시체인 커밋 시스템. 더블 래칫 DM 스캐폴딩 진행 중.
Sovereign Shell — 거버넌스 경제 (v0.9.7의 새로운 기능):
- 청원 + 거버넌스 DSL — 서명된 청원을 통한 온체인 매개변수 변경.
UPDATE_PARAM,BATCH_UPDATE_PARAMS,ENABLE_FEATURE,DISABLE_FEATURE를 위한 타입 안전 페이로드 실행기. 조정 가능한 노브는 투표로 변경 — 코드 배포 불필요. - 업그레이드 해시 거버넌스 — 새로운 로직(매개변수 변경만이 아닌)이 필요한 프로토콜 업그레이드는 검증된 릴리스의 SHA-256 해시에 투표합니다. 80% 초과다수, 40% 정족수, 67% Heavy-Node 활성화. 수명 주기: 서명 → 투표 → 도전 기간 → 준비 대기 → 활성화.
- 결의 및 분쟁 시장 — 시장 결의 결과(예/아니오/데이터_없음)에 스테이크, 증거와 함께 분쟁 열기, 분쟁 확인 또는 취소에 스테이크. 행별 제출 상태는 격리되어 동시 작업이 인플라이트 슬롯을 공유하지 않음.
- 증거 제출 — Python
repr()과 정확히 일치하는 클라이언트 측 SHA-256 정규화를 통한 증거 번들(해시가 체인을 통해 깔끔하게 왕복). - 게이트 정지/종료/이의 제기 — 게이트 정지 또는 종료 신청 양식, 보류 중인 청원을 자동 대상으로 하는 재사용 가능한 이의 제기 흐름.
- 부트스트랩 Eligible-Node-One-Vote — 처음 100개 시장은 스테이크 가중 결의 대신 자격 노드당 한 표로 결의됩니다. 자격: 신원 연령 ≥ 3일, 예측자 제외 목록에 없음, 유효한 Argon2id PoW(Heavy-Node 전용). 1000개 노드에서 스테이크 결의로 전환.
- 2계층 상태 + 에포크 최종성 — 계층 1 이벤트는 낮은 지연 시간을 위해 CRDT 스타일로 전파, 계층 2 이벤트는 행동 가능해지기 전에 에포크 최종성 필요. 신원 회전, 점진적 패널티, 램프 이정표,
MappingProxyType을 통해 시행되는 헌법적 불변. - 적응형 폴링 — Sovereign Shell 뷰는 활성 투표/도전/활성화 단계에서 8초마다, 유휴 상태에서는 30-60초마다 폴링. 웹소켓 레이어 없이도 투표가 실시간으로 느껴짐.
- 그대로의 진단 — 모든 쓰기 버튼은 백엔드의 그대로의 거부 이유를 표시합니다. 불투명한 "거부됨" 토스트 메시지 없음.
개인정보 보호 프리미티브 런웨이 (v0.9.7의 새로운 기능):
- Function Keys — 익명 자격 증명 스캐폴딩 — 널리파이어, 챌린지-응답, 2단계 커밋 영수증, 열거된 거부 코드, 일괄 정산을 위한 배관이 마련되어 있습니다. 현재의 챌린지-응답은 통합 테스트를 위한 HMAC 기반 플레이스홀더로, 프로덕션 익명 또는 영지식 시민권 증명이 아닙니다. 실제 연결 불가능한 발행은 여전히 프리미티브 결정(RSA 블라인드 서명 vs BBS+ vs U-Prove vs Idemix)을 기다리고 있습니다.
- Locked Protocol 컨트랙트 — 링 서명, 스텔스 주소, Pedersen 커밋, 범위 증명, DEX 매칭을 위한
services/infonet/privacy/contracts.py의 안정적인 인터페이스.privacy-coreRust 크레이트가 통합 대상이며, 개인정보 보호 모듈의 호출자는 어떤 체계가 활성화되어 있는지 알 필요가 없습니다. - Sprint 11+ 경로 — 암호화 체계가 선택되면, 프리미티브는 API 변경 없이 Locked Protocol에 연결됩니다.
실험적 테스트넷 — 개인정보 보호 미보장: InfoNet 메시지는 난독화되지만 종단간 암호화되지는 않습니다. 메시 네트워크(Meshtastic/APRS)는 비공개가 아닙니다 — 무선 전송은 본질적으로 공개적입니다. 개인정보 보호 프리미티브 컨트랙트는 스캐폴딩되었지만 아직 연결되지 않았습니다. 어떤 채널에서도 민감한 내용을 보내지 마십시오. 지금은 모든 채널을 공개 및 공개적으로 취급하십시오.
🔍 정찰 툴킷 및 Shodan (Osiris 기반, 보안 우선)
OSIRIS 정찰 스택(MIT)을 ShadowBroker의 프록시 모델로 적용했습니다. 출처: backend/third_party/osiris/NOTICE.md.
정찰 툴킷 (왼쪽 사이드바 — 로컬 운영자 전용):
- IP / DNS / WHOIS — ip-api.com 지리적 위치, Google DNS-over-HTTPS, RDAP 등록자 데이터, 선택적 HTTP 보안 헤더 점수
- 인증서 및 BGP — crt.sh 서브도메인 검색, bgpview.io ASN/접두사 조회
- 위협 인텔리전스 — AlienVault OTX 펄스, Tor 종료 노드 확인, 선택적 IP/도메인 평판
- 제재 목록 — OpenSanctions
us_ofac_sdn인덱스(CC-BY); WHOIS 엔티티 및 IP ISP/조직 문자열 교차 확인 - CVE / MAC / GitHub / 유출 — MITRE CVE API, MAC 벤더 조회, GitHub 프로필 정찰, 공개 유출 확인
- IP 스위프 —
/api/osint/sweep/scan은 대상 /24–/32를 지리적 위치로 파악하고 Shodan InternetDB 호스트 검색을 서버 측에서 프록시(브라우저가 InternetDB에 직접 연결되지 않음) - SSRF 가드 — 비공개, 루프백, 링크-로컬, 메타데이터 호스트 이름은 사용자가 제공한 가져오기 전에 차단됨
엔티티 그래프 — 지도 엔티티를 선택하여 엔티티 그래프 패널 열기(GET /api/entity/expand). 항공기, 선박, 회사, 개인, IP, 국가를 노드/링크 그래프(Wikidata SPARQL + OFAC + 인메모리 항공/선박 저장소)로 해석.
OpenClaw / 에이전트 액세스 — 동일한 정찰 백엔드를 HMAC 명령 채널(로컬 운영자 게이트 없음)에서 사용 가능: osint_lookup (수동 IP/DNS/WHOIS/인증서/BGP/제재/CVE/MAC/GitHub/유출/위협), entity_expand (관계 그래프), osint_sweep (활성 서브넷 스캔 — 전체 액세스 계층만). 지원되는 조회 유형을 보려면 osint_tools 호출. 스킬 패키지: openclaw-skills/shadowbroker/ (SKILL.md + sb_query.py).
Shodan 오버레이 (변경 없음):
- 인터넷 장치 검색 — 자신의 API 키로 Shodan 쿼리; 결과가 라이브 오버레이로 표시됨
- 구성 가능한 마커 — Shodan 결과의 모양, 색상, 크기 사용자 정의
🛩️ 항공 추적
- 상업 항공편 — OpenSky Network를 통한 실시간 위치(~5,000+ 항공기)
- 개인 항공기 — 경량 GA, 터보프롭, 비즈니스 제트기 별도 추적
- 개인 제트기 — 소유자 식별이 포함된 고액 자산가 항공기
- 군용 항공편 — adsb.lol 군용 엔드포인트를 통한 탱커, ISR, 전투기, 수송기
- 비행 경로 누적 — 추적된 모든 항공기에 대한 지속적인 트레일
- 호버링 패턴 감지 — 자동으로 선회 항공기 표시(>300° 총 선회)
- 항공기 분류 — 모양 정확 SVG 아이콘: 여객기, 터보프롭, 비즈니스 제트기, 헬리콥터
- 지상 감지 — 지상 100ft 미만 항공기는 회색 아이콘으로 표시
🚢 해상 추적
- AIS 선박 스트림 — aisstream.io WebSocket을 통한 25,000+ 선박(실시간)
- 선박 분류 — 화물선, 유조선, 여객선, 요트, 군함 유형, 색상 코딩 아이콘
- 항모강습단 추적기 — OSINT 추정 위치를 포함한 11척의 모든 현역 미 해군 항공모함. 다른 공개 도구는 이를 수행하지 않습니다.
- 자동화된 GDELT 뉴스 스크래핑이 항공모함 이동 보고를 파싱하여 위치 추정
- 50개 이상의 지리적 영역-좌표 매핑(예: "동부 지중해" → 위도/경도)
- 디스크 캐시된 위치, 00:00 및 12:00 UTC에 자동 새로고침
- 크루즈 및 여객선 — 크루즈 라이너 및 페리 전용 레이어
- 어업 활동 — Global Fishing Watch 선박 이벤트 (신규)
- 클러스터링된 표시 — 저확대에서 선박 클러스터링, 개수 레이블, 확대 시 클러스터 해제
🚆 철도 추적 (v0.9.6의 새로운 기능)
- Amtrak 열차 — 속도, 방향, 경로, 상태를 포함한 미국 전역 Amtrak 열차의 실시간 위치
- 유럽 철도 — 유럽 열차 위치를 위한 DigiTraffic 통합
🛰️ 우주 및 위성
- 궤도 추적 — CelesTrak TLE 데이터 + SGP4 전파를 통한 실시간 위성 위치(2,000+ 활성 위성, API 키 불필요)
- 임무 유형 분류 — 임무별 색상 코딩: 군사 정찰(빨간색), SAR(시안), SIGINT(흰색), 항법(파란색), 조기 경보(자주색), 상업 이미징(녹색), 우주 정거장(금색)
- SatNOGS 지상국 — 라이브 관측 데이터를 포함한 아마추어 위성 지상국 네트워크 (신규)
- TinyGS LoRa 위성 — LoRa 위성 별자리 추적 (신규)
🌍 지리정치 및 분쟁
- 글로벌 사건 — GDELT 기반 분쟁 이벤트 집계(최근 8시간, ~1,000 이벤트)
- 우크라이나 전선 — DeepState Map의 라이브 전쟁선 GeoJSON
- 우크라이나 공습 경보 — 실시간 지역 공습 경보 (신규)
- SIGINT/RISINT 뉴스 피드 — 여러 인텔리전스 중심 소스의 실시간 RSS 집계, 사용자 정의 가능한 피드(최대 20개 소스, 구성 가능한 우선순위 가중치 1-5)
- 지역 도시에 — 지구상 어디든 우클릭하여 즉시 인텔리전스 브리핑:
- 국가 프로필(인구, 수도, 언어, 통화, 면적)
- 현재 국가 원수 및 정부 유형(라이브 Wikidata SPARQL 쿼리)
- 썸네일이 포함된 지역 Wikipedia 요약
- 캡처 날짜 및 구름량이 포함된 최신 Sentinel-2 위성 사진(10m 해상도)
🛰️ 위성 이미지
- NASA GIBS (MODIS Terra) — 30일 시간 슬라이더, 재생/일시 중지 애니메이션, 투명도 컨트롤이 있는 일간 트루 컬러 위성 이미지 오버레이(~250m/픽셀)
- 고해상도 위성 (Esri) — Esri World Imagery를 통한 서브미터 해상도 이미지 — 건물 및 지형 세부 사항 확대(줌 18+)
- Sentinel-2 인텔 카드 — 지도 우클릭 시 캡처 날짜, 구름량 %, 클릭 가능한 전체 해상도 이미지가 포함된 최신 Sentinel-2 위성 사진을 보여주는 부동 인텔 카드(10m 해상도, 약 5일마다 업데이트)
- Sentinel Hub Process API — OAuth2 토큰 흐름을 사용하는 Copernicus CDSE 위성 이미지 (신규)
- VIIRS 야간 조명 — 야간 조명 변화 감지 오버레이 (신규)
- 5가지 시각 모드 — STYLE 버튼을 통해 지도 미적 감각 전환:
- DEFAULT — 어두운 CARTO 베이스맵
- SATELLITE — 서브미터 Esri World Imagery
- FLIR — 열화상 미적 감각(반전 그레이스케일)
- NVG — 야간 투시경 녹색 형광체
- CRT — 레트로 터미널 스캔라인 오버레이
🛰️ SAR 지상 변화 탐지 (신규)
- 합성 개구 레이더 레이어 — 구름을 뚫고, 밤에, 지구상 어디서나 지상 변화 감지. 두 모드 모두 무료:
- 모드 A (카탈로그) — Alaska Satellite Facility의 무료 Sentinel-1 장면 메타데이터. 계정 불필요. 관심 영역 위에 레이더 패스가 언제 발생했는지와 다음 패스가 언제 오는지 보여줍니다.
- 모드 B (전체 이상 징후) — NASA OPERA(DISP, DSWx, DIST-ALERT) 및 Copernicus EGMS의 실시간 지상 변화 경고. 무료 NASA Earthdata 계정 필요 — 인앱 마법사가 1분 이내에 설정을 안내합니다.
- 이상 징후 유형 — 지반 변형(mm 규모 침하, 산사태), 표면 수분 변화(홍수 범위), 식생 교란(산림 벌채, 화상 흉터, 폭발 분화구), 피해 평가(UNOSAT/Copernicus EMS 검증), 간섭 일관성 변화
- 지도 시각화 — 종류별 색상 코딩된 이상 징후 핀(주황색: 변형, 시안색: 물, 녹색: 식생, 빨간색: 피해, 보라색: 일관성). AOI 경계는 대시 다각형으로 그려지며 카테고리 기반 색상. 핀 클릭 시 세부 정보 팝업: 규모, 신뢰도, 해결사, 장면 개수, 출처 링크.
- AOI 편집기 — 지도에서 직접 관심 영역 정의. SAR 레이어가 활성화된 상태에서 "AOI 편집" 버튼을 클릭한 다음, 십자선 도구를 사용하여 지도에서 AOI 중심을 클릭하여 드롭. 이름, 반경(1–500 km), 카테고리 설정. AOI가 즉시 지도에 나타납니다.
- OpenClaw 통합 — AI 에이전트가 SAR 이상 징후 세부 정보를 검사(
sar_pin_click)하고 운영자의 지도를 AOI 중심으로 이동(sar_focus_aoi)할 수 있습니다 — 협업 분석가 워크플로우 가능. - 설정 패널 — 설정의 전용 SAR 탭에 모드 A/B 상태, OpenClaw 통합 상태가 표시되며, 한 번의 클릭으로 Earthdata 자격 증명을 취소할 수 있습니다.
📻 소프트웨어 정의 라디오 및 SIGINT
- KiwiSDR 수신기 — 전 세계에 클러스터링된 호박색 마커로 표시된 500개 이상의 공개 SDR 수신기
- 라이브 라디오 튜너 — KiwiSDR 노드 클릭 시 SIGINT 패널에 직접 임베디드 SDR 튜너 열기
- 메타데이터 표시 — 노드 이름, 위치, 안테나 유형, 주파수 대역, 활성 사용자
- Meshtastic 메시 라디오 — MQTT 기반 메시 라디오 통합, 노드 맵 포함, 메시 채팅에 통합 (신규)
- APRS 통합 — APRS-IS TCP 피드를 통한 아마추어 무선 위치 확인 (신규)
- GPS 재밍 감지 — 항공기 NAC-P(항법 정확도 범주) 값의 실시간 분석
- 그리드 기반 집계로 간섭 영역 식별
- "GPS JAM XX%" 심각도 레이블이 있는 빨간색 오버레이 사각형
- 무선 수신 패널 — OpenMHZ 경찰/소방 스캐너 피드를 사용한 스캐너 스타일 UI. 시스템 클릭 시 라이브 청취. 스캔 모드는 활성 피드를 자동 순환. 실제 긴급 통신을 클릭하여 도청.
📷 감시
- CCTV 메시 — 10개국(미국, 영국, 캐나다, 호주, 오스트리아, 스페인, 싱가포르, 네덜란드(NDW 피드가 작동 중일 때), OSM)의 21개 수집기에서 22,000개 이상의 라이브 교통 카메라:
- 🇬🇧 Transport for London JamCams
- 🇺🇸 NYC DOT, Austin TX (TxDOT)
- 🇺🇸 캘리포니아(12개 Caltrans 지구), 워싱턴 주(WSDOT), 조지아 DOT, 일리노이 DOT, 미시간 DOT
- 🇪🇸 스페인 DGT 전국(20개 도시), 마드리드 시(KML을 통한 357개 카메라)
- 🇦🇹 오스트리아 ASFINAG 고속도로 웹캠
- 🇸🇬 싱가포르 LTA
- 🌍 Windy Webcams
- 피드 렌더링 — 비디오, MJPEG, HLS, 임베드, 위성 타일, 이미지 피드 자동 감지 및 렌더링
- 클러스터링된 지도 표시 — 녹색 점이 개수 레이블과 함께 클러스터링, 확대 시 클러스터 해제
🔥 환경 및 위험 모니터링
- NASA FIRMS 화재 핫스팟 (24시간) — NOAA-20 VIIRS 위성의 5,000개 이상의 글로벌 열 이상 징후, 주기마다 업데이트. 화염 모양 아이콘은 화재 복사 전력(FRP)에 따라 색상 코딩됨: 노란색(낮음), 주황색, 빨간색, 진한 빨간색(강함). 저확대에서 불 모양 클러스터 마커로 클러스터링됨.
- 화산 — Smithsonian 글로벌 화산 활동 프로그램의 홀로세 화산 전 세계에 표시 (신규)
- 기상 경보 — 긴급/심각도 표시기가 있는 심각한 기상 다각형 (신규)
- 대기 질 (PM2.5) — 전 세계 OpenAQ 방송국의 실시간 미세먼지 수치 (신규)
- 지진 (24시간) — USGS 실시간 지진 피드, 규모별 마커 크기
- 우주 날씨 배지 — 하단 상태 표시줄의 라이브 NOAA 지자기 폭풍 표시기. 색상 코딩된 Kp 지수: 녹색(조용함), 노란색(활성), 빨간색(폭풍 G1–G5). SWPC 행성 K-지수 1분 피드의 데이터.
🏗️ 인프라 모니터링* 인터넷 중단 모니터링 — 조지아 공과대학교 IODA의 지역별 인터넷 연결 경보. 영향받은 지역에 심각도 백분율로 표시되는 회색 마커. 신뢰할 수 있는 데이터 소스(BGP 라우팅 테이블, 능동 핑 프로빙)만 사용 — 망원경 또는 보간 데이터 없음.
- 데이터 센터 매핑 — 선별된 데이터 세트에서 2,000개 이상의 글로벌 데이터 센터를 표시. 서버 랙 아이콘이 있는 클러스터형 자주색 마커. 클릭 시 운영자, 위치, 국가별 자동 인터넷 중단 교차 참조 확인.
- 군사 기지 — 글로벌 군사 시설 및 미사일 기지 데이터베이스 (NEW)
- 발전소 — WRI 데이터베이스의 35,000개 이상 글로벌 발전소 (NEW)
- 해저 케이블 — 정적 TeleGeography 파생 GeoJSON(
frontend/public/data/submarine-cables.json)의 글로벌 해저 케이블 경로. 옵트인 라인 오버레이. - 멀웨어 C2 계층 — abuse.ch의 봇넷 C2 서버(Feodo Tracker) 및 최신 멀웨어 URL(URLhaus), 계층이 활성화되면 느린 계층에서 새로고침.
- SCM 공급업체 위험 — 지진, FIRMS 화재, GDELT 충돌 근접성을 교차 참조한 1/2차 파운드리 및 배터리 공장(TSMC, 삼성, CATL 등). SCM 패널의 경고; 선택적 지도 계층.
- 사이버 위협 피드 —
/api/cyber-threats및 계층 토글을 통해 노출된 최신 CISA KEV(Known Exploited Vulnerabilities) 항목. - 국가 위험 지수 —
/api/country-risk를 통한 USGS 지진 보강이 포함된 정적 지정학적 위험 점수. - 텔레그램 OSINT — 구성 가능한 전쟁/OSINT 피드의 공개 채널 웹 미리보기(
t.me/s/*). 시간별 증분 병합(중복 재스크랩 없음), 키워드 위험 점수, 키릴/아랍어 장소 별칭, 메트로 앵커 지오코딩(뉴스 중심점과 별도),/api/telegram/media프록시를 통한 인라인 사진/동영상. 계층 키:telegram_osint.
🌐 추가 계층 및 도구
- 주야간 주기 — 지구 전체의 주간/야간을 보여주는 태양 종단선 오버레이
- 글로벌 시장 티커 — 실시간 금융 시장 지수 (최소화 가능)
- 측정 도구 — 지도상의 점 간 거리 및 방위각 측정
- LOCATE 바 — 좌표(31.8, 34.8) 또는 장소 이름(테헤란, 호르무즈 해협)으로 검색하여 모든 위치로 바로 이동 — OpenStreetMap Nominatim을 통해 지오코딩
Gaza
🤖 에이전틱 AI 명령 채널 — OpenClaw + 호환 에이전트 (v0.9.7에서 확장)
ShadowBroker는 양방향 에이전틱 AI 명령 채널을 제공합니다. 서명되고 계층별로 게이트된 브리지로, 호환되는 모든 AI 에이전트가 인텔리전스 플랫폼에 대한 전체 읽기/쓰기 액세스 권한을 가질 수 있습니다. OpenClaw가 참조 에이전트이지만 채널은 공개 프로토콜입니다. HMAC-SHA256으로 요청에 서명하는 모든 LLM 기반 에이전트(Claude Code, GPT, LangChain, 사용자 정의 Python/TypeScript 클라이언트 또는 자체 통합)는 운영자와 동일한 데이터를 보고 지도에서 작업을 수행할 수 있는 분석가로 연결될 수 있습니다. ShadowBroker는 LLM, 에이전트 런타임 또는 모델 가중치를 번들로 제공하지 않습니다. 표면을 제공하며 에이전트는 사용자가 가져옵니다.
v0.9.7은 ShadowBroker를 인간이 지켜보는 대시보드에서 모든 에이전트가 행동할 수 있는 인텔리전스 표면으로 전환합니다.
채널 전송 (v0.9.7의 새로운 기능):
- 단일 명령 채널 —
POST /api/ai/channel/command는{cmd, args}를 수락하고 등록된 모든 도구로 전달합니다. - 배치 동시 실행 —
POST /api/ai/channel/batch는 하나의 요청에서 최대 20개의 명령을 수락합니다. 백엔드는 이를 동시에 실행하고 팬아웃 결과 맵을 반환합니다. 순차 호출보다 에이전트 지연 시간을 한 자릿수 줄입니다. - 계층별 게이트 액세스 —
OPENCLAW_ACCESS_TIER는 에이전트가 호출할 수 있는 명령을 제어합니다.restricted는 읽기 전용 세트를 노출하고,full은 쓰기 및 주입을 추가합니다. 검색 엔드포인트는available_commands를 반환하여 에이전트가 자체 기능을 파악할 수 있도록 합니다. - HMAC-SHA256 서명 — 모든 명령은
HMAC-SHA256(비밀, METHOD|path|timestamp|nonce|sha256(body))로 서명되며 타임스탬프 + 논스 재생 방지 및 요청 무결성을 제공합니다. 로컬 모드(구성 없음) 및 원격 모드(에이전트가 다른 시스템/VPS에 있음)를 지원합니다.
기능:
- 전체 텔레메트리 액세스 — 에이전트는 40개 이상의 모든 데이터 계층(비행, 선박, 위성, SIGINT, 충돌 이벤트, 지진, 화재, 폐수, 텔레그램 OSINT, 멀웨어/C2, CISA KEV 사이버 위협, SCM 오버레이, 어업 활동(GFW), 예측 시장 등)을 쿼리합니다. 빠른 계층과 느린 계층 엔드포인트는 지리적 좌표, 타임스탬프, 출처 속성이 포함된 보강된 데이터를 반환합니다.
- 컴팩트 검색 (전체 덤프보다 선호) —
get_summary→get_layer_slice(per-layersince_layer_versions사용, SSElayer_changed푸시로 에이전트에 업데이트된 계층 정확히 알림).search_telemetry는 Google 스타일의 교차 계층 키워드 인덱스입니다.search_news는 뉴스, GDELT, CrowdThreat, LiveUAMap, 전선, 텔레그램 게시물을 다룹니다.entities_near,brief_area,find_flights/find_ships/find_entity,correlate_entity는 수 메가바이트를 끌어오지 않고도 타겟 질문에 답변합니다. - 채널의 정찰 도구 키트 —
osint_lookup은 Recon 패널과 동일한 SSRF 보호 백엔드(ip,dns,whois,certs,bgp,sanctions,cve,mac,github,leaks,threats,sweep_init)를 실행합니다.entity_expand는 Wikidata + OFAC 관계 그래프를 구축합니다.osint_sweep은 Shodan InternetDB 서브넷 검색(full 계층)을 실행합니다. 계층 별칭:telegram,malware/botnet,cyber/cisa/kev,scm/suppliers,gfw/fishing. - AI 인텔 핀 — 운영자의 지도에 직접 색상 코딩된 조사 마커를 배치합니다. 14개의 핀 카테고리(위협, 이상 징후, 군사, 해양, 항공, SIGINT, 인프라 등)와 신뢰도 점수, TTL 만료, 소스 URL, 한 번에 최대 100개의 핀 일괄 배치.
- 지도 제어 — 운영자의 지도 보기를 모든 좌표로 이동, 위성 이미지 조회 트리거, 지역 도스이에르 열기. 에이전트는 실시간으로 운영자의 주의를 특정 위치로 유도할 수 있습니다.
- SAR 지상 변화 — SAR 이상 피드 쿼리, 핀 세부 정보 검사, AOI 관리, 지도 이동하여 영역 관찰. 에이전트는 지반 변형, 홍수 범위 또는 손상을 모니터링하고 이상을 핀으로 승격할 수 있습니다.
- 네이티브 계층 주입 — 사용자 정의 데이터를 ShadowBroker의 네이티브 계층(CCTV 카메라, 선박, SIGINT 노드, 군사 기지 등)에 직접 푸시하여 에이전트가 발견한 소스가 실제 피드와 함께 렌더링되도록 합니다.
- 웜홀 메쉬 참여 — 에이전트는 분산형 InfoNet에 가입하고, 서명된 메시지를 게시하고, 암호화된 게이트 채널에 참여하고, 암호화된 DM을 보내고 받고, Meshtastic 라디오 및 Dead Drops과 상호 작용할 수 있습니다 — 완전한 메쉬 피어로 작동합니다.
- 주권 셸 참여 (v0.9.7) — 청원 제출, 거버넌스 변경 사항에 서명 및 투표, 결의 및 분쟁에 스테이킹, 업그레이드 준비를 위한 Heavy-Node 준비 신호 — 모두 프로그래밍 방식으로, 계층 및 HMAC에 의해 게이트됩니다. 에이전트는 분산형 인텔리전스 경제의 일류 참여자가 됩니다.
- 지오코딩 및 근접 스캔 — 장소 이름을 좌표로 확인한 다음, 반경 내 모든 계층을 스캔하여 완전한 근접 다이제스트를 얻습니다.
- 위치 근처 뉴스 및 GDELT — 모든 좌표 근처에서 GDELT 충돌 이벤트 및 집계된 뉴스 기사를 가져와 지역 상황 인식을 제공합니다.
- 알림 전달 — 브랜드 인텔리전스 브리핑, 경고, 위협 알림을 Discord 웹훅 및 텔레그램 채널로 전송합니다.
- 인텔리전스 보고서 — 요약 통계, 최고 군용 항공편, 상관 관계, 지진 활동, SIGINT 수, 핀 인벤토리가 포함된 구조화된 보고서를 생성합니다.
- 감사 가능 — 모든 채널 호출이 기록됩니다. 운영자는 에이전트가 수행한 작업을 검사할 수 있습니다.
에이전트 연결: 왼쪽 사이드바에서 AI Intel 패널을 열고 Connect Agent를 클릭한 후 HMAC 시크릿을 복사합니다. 그런 다음 호환되는 모든 에이전트를 채널에 지정합니다. OpenClaw의 경우 openclaw-skills/shadowbroker/sb_query.py에서 ShadowBrokerClient를 가져옵니다(예제는 SKILL.md 참조). 다른 에이전트의 경우 위에 문서화된 동일한 HMAC 계약(타임스탬프 + 논스 + 본문 다이제스트, 계층별 게이트)을 사용합니다. 검색: GET /api/ai/tools 및 GET /api/ai/capabilities. 채널은 프로토콜이지 에이전트가 아닙니다.
Docker Compose + 원격 에이전트: 대시보드 UI는 Docker의 개인 브리지(자동 신뢰)를 통해 백엔드와 통신합니다. 호스트(컨테이너 외부)에서 실행되는 OpenClaw 에이전트는 Docker 게이트웨이 IP에서 http://localhost:8000에 접속합니다. 거기서 HMAC가 필요합니다. AI Intel → Connect Agent에서 Bootstrap을 클릭한 다음 Reveal을 클릭하고 SHADOWBROKER_HMAC_SECRET을 에이전트 환경 변수에 복사한 후 백엔드를 한 번 재시작하여 backend_data 볼륨의 data/openclaw.env가 로드되도록 합니다. 다음과 같이 연기 테스트를 수행합니다:```bash
export SHADOWBROKER_URL=http://127.0.0.1:8000
export SHADOWBROKER_HMAC_SECRET=
python openclaw-skills/shadowbroker/verify_hmac.py
Use the backend port (`:8000`), not the Next.js dashboard port (`:3000`). 직접 구현한 서명자는 정확한 POST 바이트를 해시해야 합니다: `json.dumps(payload, separators=(",", ":"), sort_keys=True)`.
### ⏱️ 타임 머신 — 스냅샷 재생 (v0.9.7 신규)
전체 텔레메트리 피드를 위한 미디어 스타일 전송 방식입니다. 라이브 맵을 스크럽, 일시 정지, 다시 재생할 수 있는 녹화본으로 취급합니다.
* **라이브 ↔ 스냅샷 전환** — 스냅샷 모드로 전환하면 즉시 전역 폴링 루프가 중단되고, 다시 라이브로 전환하면 ETag가 무효화되어 빠른 계층과 느린 계층 모두 강제로 새로고침되어 대시보드가 지연된 프레임 깜빡임 없이 따라잡습니다.
* **시간별 인덱스** — 캡처된 모든 스냅샷은 `count`, `latest_id`, `latest_ts`, 그리고 전체 `snapshot_ids` 목록과 함께 시간 버킷별로 인덱싱됩니다. 타임라인 스크러버에서 캡처된 타임스탬프로 직접 이동할 수 있습니다.
* **프레임 보간** — 움직이는 개체(항공기, 선박, 위성, 군용 비행)는 재생 중 녹화된 프레임 사이에서 부드럽게 보간되어 스냅샷이 드물어도 움직임이 연속적으로 유지됩니다.
* **가변 재생 속도** — 조정 가능한 속도로 저장된 텔레메트리를 단계별 재생, 재생, 빨리 감기, 되감기할 수 있습니다.
* **프로필 인식** — 각 스냅샷은 캡처 당시 활성화된 개인정보 보호 프로필을 기록하므로 해당 프로필의 운영자가 보았을 내용과 일치하게 재생됩니다.
* **운영자 측, 서버 측이 아님** — 스냅샷은 백엔드에 로컬로 저장되며, 어떤 제3자도 재생 타임라인을 볼 수 없습니다.
### 📦 API 키 패널 — 경로 우선, 읽기 전용 (v0.9.7 신규)
설정 → API 키는 이제 읽기 전용 레지스트리입니다. 키 값은 난독화된 접두사조차도 브라우저 프로세스에 도달하지 않습니다. 패널은 다음을 표시합니다:
* `Path(__file__).resolve()`로 확인된 백엔드 `.env` 파일의 절대 경로 — 모든 OS, 모든 드라이브, 모든 설치 위치(Linux `/home/...`, macOS `/Users/...`, 모든 드라이브의 Windows, Docker 컨테이너, 클라우드 VM)에서 작동합니다.
* 경로 자체에 `[exists]` / `[will be created on first save]` / `[NOT WRITABLE — edit by hand]` 표시.
* `.env.example` 템플릿의 경로로, 사용자가 이를 복사하여 키를 입력할 수 있습니다.
* 키별로 `CONFIGURED` / `NOT CONFIGURED` 이진 배지와 사용자가 파일에 수동으로 넣을 수 있는 복사 가능한 env 줄(예: `OPENSKY_CLIENT_ID=YOUR_VALUE`).
OpenSky API 자격 증명은 이제 **중요 경고** 환경 요구 사항입니다. 시작 환경 검사에서 누락된 OpenSky OAuth2 자격 증명에 대해 강력한 경고를 표시하며, 변경 로그 모달은 무료 등록 페이지로 직접 연결됩니다. 자격 증명이 없으면 항공편 레이어는 ADS-B 전용 커버리지로 대체되어 아프리카, 아시아, 라틴 아메리카에 상당한 공백이 발생합니다.
</details>
---
<details>
<summary>🏗️ 아키텍처</summary>
ShadowBroker v0.9.7은 세 가지 수직으로 쌓인 평면 — **운영자 UI**, **백엔드 서비스 평면**, **분산 계층(InfoNet)** — 과 두 개의 교차 브릿지(**타임 머신** 및 **Agentic AI Channel**(OpenClaw 및 기타 호환 에이전트가 연결되는 프로토콜)) 및 레거시 메시와 미래의 보호된 코인/DEX 작업을 뒷받침하는 **Privacy Core** Rust 크레이트로 구성됩니다.```
╔═════════════════════════════════════════════════════════════════════════════╗
║ OPERATOR UI (Next.js + MapLibre) ║
║ ║
║ ┌────────────────┐ ┌──────────┐ ┌────────────────┐ ┌────────────────┐ ║
║ │ MapLibre GL │ │ NewsFeed │ │ Sovereign Shell│ │ Mesh Chat │ ║
║ │ WebGL render │ │ SIGINT │ │ Petitions / │ │ + Mesh Term. │ ║
║ │ + clusters │ │ GDELT │ │ Upgrades / │ │ (Infonet / │ ║
║ │ │ │ Threat │ │ Disputes / │ │ Mesh / │ ║
║ │ │ │ │ │ Gates / │ │ Dead Drop) │ ║
║ │ │ │ │ │ Bootstrap / │ │ │ ║
║ │ │ │ │ │ Function Keys │ │ │ ║
║ └──────┬─────────┘ └────┬─────┘ └────────┬───────┘ └────────┬───────┘ ║
║ │ │ │ │ ║
║ ┌──────┴─────────────────┴─────────────────┴───────────────────┴───────┐ ║
║ │ Time Machine ◀── snapshot playback ── snapshotMode toggle ──▶ Live │ ║
║ │ hourly index │ frame interpolation │ profile-aware │ per-tier ETag │ ║
║ └──────────────────────────────────┬───────────────────────────────────┘ ║
║ │ REST + /api/[...path] proxy ║
╠═════════════════════════════════════╪═══════════════════════════════════════╣
║ BACKEND SERVICE PLANE (FastAPI) ║
║ │ ║
║ ┌──────────────────────────────────┴────────────────────────────────────┐ ║
║ │ Data Fetcher (APScheduler — fast / slow tiers) │ ║
║ │ │ ║
║ │ ┌───────────┬───────────┬───────────┬───────────┬───────────┐ │ ║
║ │ │ OpenSky* │ adsb.lol │ CelesTrak │ USGS │ AIS WS │ │ ║
║ │ │ Flights │ Military │ Sats │ Quakes │ Ships │ │ ║
║ │ ├───────────┼───────────┼───────────┼───────────┼───────────┤ │ ║
║ │ │ Carrier │ GDELT │ CCTV (12) │ DeepState │ NASA │ │ ║
║ │ │ Tracker │ Conflict │ Cameras │ Frontline │ FIRMS │ │ ║
║ │ ├───────────┼───────────┼───────────┼───────────┼───────────┤ │ ║
║ │ │ GPS │ KiwiSDR │ Shodan │ Amtrak │ SatNOGS │ │ ║
║ │ │ Jamming │ Radios │ Devices │ DigiTraf │ TinyGS │ │ ║
║ │ ├───────────┼───────────┼───────────┼───────────┼───────────┤ │ ║
║ │ │ Volcanoes │ Weather │ Fishing │ Mil Bases │ IODA │ │ ║
║ │ │ Air Qual │ Alerts │ Activity │ PwrPlants │ Outages │ │ ║
║ │ ├───────────┼───────────┼───────────┼───────────┼───────────┤ │ ║
║ │ │ Sentinel │ MODIS │ VIIRS │ Data │ Meshtastic│ │ ║
║ │ │ Hub/STAC │ Terra │ Nightlts │ Centers │ APRS │ │ ║
║ │ ├───────────┴───────────┴───────────┴───────────┴───────────┤ │ ║
║ │ │ SAR (NEW v0.9.7) │ │ ║
║ │ │ Mode A: ASF Search catalog (free, no account) │ │ ║
║ │ │ Mode B: NASA OPERA / Copernicus EGMS / GFM / EMS / │ │ ║
║ │ │ UNOSAT ground-change anomalies (opt-in) │ │ ║
║ │ └───────────────────────────────────────────────────────────┘ │ ║
║ │ * OpenSky: REQUIRED for global flight coverage │ ║
║ └───────────────────────────────────────────────────────────────────────┘ ║
║ │ ║
║ ┌──────────────────────────────────┴────────────────────────────────────┐ ║
║ │ Snapshot Store (Time Machine source) │ ║
║ │ Hourly index │ per-snapshot layer manifest │ profile metadata │ ║
║ └───────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌───────────────────────────────────────────────────────────────────────┐ ║
║ │ Agentic AI Channel (HMAC-SHA256, tier-gated — OpenClaw + others) │ ║
║ │ │ ║
║ │ POST /api/ai/channel/command → one tool call │ ║
║ │ POST /api/ai/channel/batch → up to 20 concurrent tool calls │ ║
║ │ │ ║
║ │ Tier: restricted (read-only) │ full (read + write + inject) │ ║
║ │ Auth: X-SB-Timestamp + X-SB-Nonce + X-SB-Signature │ ║
║ │ Sig = HMAC-SHA256(secret, METHOD|path|ts|nonce|sha256(body)) │ ║
║ └───────────────────────────────────────────────────────────────────────┘ ║
╠═════════════════════════════════════════════════════════════════════════════╣
║ DECENTRALIZED LAYER (InfoNet Testnet — signed events) ║
║ ║
║ ┌────────────────────────────┐ ┌──────────────────────────────────┐ ║
║ │ Mesh Hashchain │ │ Sovereign Shell Governance │ ║
║ │ │ │ │ ║
║ │ Ed25519 signed events │ │ Petitions (DSL: UPDATE_PARAM, │ ║
║ │ Public-key binding │ │ ENABLE_FEATURE …) │ ║
║ │ Replay / sequence guard │ │ Upgrade-Hash voting (80% / 40% │ ║
║ │ Two-tier finality │ │ quorum / 67% Heavy) │ ║
║ │ ├ Tier 1 (CRDT, fast) │ │ Resolution & Dispute markets │ ║
║ │ └ Tier 2 (epoch finality)│ │ Gate suspend / shutdown / appeal│ ║
║ │ Identity rotation │ │ Bootstrap eligible-node-1-vote │ ║
║ │ Constitutional invariants │ │ (Argon2id PoW, Heavy-Node only)│ ║
║ │ (MappingProxyType) │ │ Function Keys (5 of 6 pieces) │ ║
║ └─────────────┬──────────────┘ └─────────────┬────────────────────┘ ║
║ │ │ ║
║ └──────────────┬──────────────────┘ ║
║ │ ║
║ ┌────────────────────────────┴──────────────────────────────────────┐ ║
║ │ Wormhole / InfoNet Relay (transport layer) │ ║
║ │ Gate personas │ canonical signing │ Dead Drop epoch mailboxes │ ║
║ └───────────────────────────────────────────────────────────────────┘ ║
╠═════════════════════════════════════════════════════════════════════════════╣
║ PRIVACY CORE (Rust crate — locked Protocol contracts) ║
║ ║
║ privacy-core/ ─► Argon2id │ Ed25519/X25519 │ AESGCM │ HKDF ║
║ Ring sigs* │ Stealth addrs* │ Pedersen* │ Bulletproofs*║
║ Blind-sig issuance* (RSA / BBS+ / U-Prove / Idemix) ║
║ ║
║ * = locked Protocol contract; cryptographic primitive lands Sprint 11+ ║
╚═════════════════════════════════════════════════════════════════════════════╝
Distribution
────────────
GitHub (primary): ghcr.io/bigbodycobain/shadowbroker-{backend,frontend}
GitLab (mirror): registry.gitlab.com/bigbodycobain/shadowbroker/{backend,frontend}
Multi-arch: linux/amd64 + linux/arm64 (Raspberry Pi 5 supported)
Desktop: Tauri shell → packaged backend-runtime + Next.js frontend
📊 데이터 소스 및 API
| 출처 | 데이터 | 업데이트 빈도 | API 키 필요 |
|---|---|---|---|
| OpenSky Network | 상업 및 개인 항공편 | ~60초 | 예 |
| adsb.lol | 군용 항공기 | ~60초 | 아니오 |
| aisstream.io | AIS 선박 위치 | 실시간 WebSocket | 예 |
| CelesTrak | 위성 궤도 위치 (TLE + SGP4) | ~60초 | 아니오 |
| USGS Earthquake | 전 세계 지진 이벤트 | ~60초 | 아니오 |
| GDELT Project | 전 세계 분쟁 이벤트 | ~6시간 | 아니오 |
| DeepState Map | 우크라이나 전선 | ~30분 | 아니오 |
| Shodan | 인터넷 연결 장치 검색 | 요청 시 | 예 |
| OpenSanctions | OFAC SDN 제재 색인 (정찰 + 엔티티 그래프) | 24시간 캐시 | 아니오 |
| abuse.ch Feodo + URLhaus | 악성코드 C2 / 배포 URL | ~5분 (옵트인 계층) | 아니오 |
| CISA KEV | 알려진 악용 CVE | ~5분 (옵트인 계층) | 아니오 |
| ip-api.com | IP 지리 위치 (정찰, 엔티티 그래프) | 요청 시 | 아니오 |
| Google Public DNS | DNS-over-HTTPS 조회 (정찰) | 요청 시 | 아니오 |
| RDAP.org | 도메인 등록 데이터 (정찰) | 요청 시 | 아니오 |
| crt.sh | 인증서 투명성 (정찰) | 요청 시 | 아니오 |
| bgpview.io | BGP/ASN 라우팅 (정찰) | 요청 시 | 아니오 |
| TeleGeography (정적) | 해저 케이블 경로 | 정적 | 아니오 |
| ASFINAG | 오스트리아 고속도로 웹캠 | ~10분 | 아니오 |
| Amtrak | 미국 열차 위치 | ~60초 | 아니오 |
| DigiTraffic | 유럽 철도 위치 | ~60초 | 아니오 |
| Global Fishing Watch | 어선 활동 이벤트 | ~1시간 | 예 (GFW_API_TOKEN) |
| Telegram 공개 미리보기 | 전쟁/OSINT 채널 게시물 (telegram_osint) | ~1시간 | 아니오 (선택 사항 TELEGRAM_OSINT_CHANNELS) |
| Transport for London, NYC DOT, TxDOT | CCTV 카메라 (영국, 미국) | ~10분 | 아니오 |
| Caltrans, WSDOT, GDOT, IDOT, MDOT | CCTV 카메라 (미국 5개 주) | ~10분 | 아니오 |
| Spain DGT, Madrid City | CCTV 카메라 (스페인) | ~10분 | 아니오 |
| Singapore LTA | 싱가포르 교통 카메라 | ~10분 | 예 |
| Windy Webcams | 글로벌 웹캠 | ~10분 | 아니오 |
| SatNOGS | 아마추어 위성 지상국 | ~30분 | 아니오 |
| TinyGS | LoRa 위성 지상국 | ~30분 | 아니오 |
| Meshtastic MQTT | 메시 라디오 노드 위치 | 실시간 | 아니오 |
| APRS-IS | 아마추어 무선 위치 | 실시간 TCP | 아니오 |
| KiwiSDR | 공용 SDR 수신기 위치 | ~30분 | 아니오 |
| OpenMHZ | 경찰/소방 스캐너 피드 | 실시간 | 아니오 |
| Smithsonian GVP | 전 세계 홀로세 화산 | 정적 (캐시됨) | 아니오 |
| OpenAQ | 대기질 PM2.5 측정소 | ~120초 | 아니오 |
| NOAA / NWS | 심각한 기상 경보 및 폴리곤 | ~120초 | 아니오 |
| WRI Global Power Plant DB | 35,000개 이상의 발전소 | 정적 (캐시됨) | 아니오 |
| Military base datasets | 전 세계 군사 시설 | 정적 (캐시됨) | 아니오 |
| NASA FIRMS | NOAA-20 VIIRS 화재/열적 핫스팟 | ~120초 | 아니오 |
| NOAA SWPC | 우주 기상 Kp 지수 및 태양 이벤트 | ~120초 | 아니오 |
| IODA (Georgia Tech) | 지역 인터넷 중단 알림 | ~120초 | 아니오 |
| DC Map (GitHub) | 전 세계 데이터 센터 위치 | 정적 (7일 캐시) | 아니오 |
| NASA GIBS | MODIS Terra 일일 위성 이미지 | 일일 (24-48시간 지연) | 아니오 |
| Esri World Imagery | 고해상도 위성 기본 지도 | 정적 (주기적으로 업데이트) | 아니오 |
| MS Planetary Computer | Sentinel-2 L2A 장면 (우클릭) | 요청 시 | 아니오 |
| Copernicus CDSE | Sentinel Hub 이미지 (Process API) | 요청 시 | 예 (무료) |
| VIIRS Nightlights | 야간 조명 변화 감지 | 정적 | 아니오 |
| RestCountries | 국가 프로필 데이터 | 요청 시 (24시간 캐시) | 아니오 |
| Wikidata SPARQL | 국가 원수 데이터 | 요청 시 (24시간 캐시) | 아니오 |
| Wikipedia API | 위치 요약 및 항공기 이미지 | 요청 시 (캐시됨) | 아니오 |
| OSM Nominatim | 장소 이름 지오코딩 (LOCATE 바) | 요청 시 | 아니오 |
| CARTO Basemaps | 어두운 지도 타일 | 지속적 | 아니오 |
아웃바운드 개인정보 보호 및 감사 (#348–#366): 각 자체 호스팅 설치는 자체 백엔드 IP와 설치별 User-Agent 핸들을 사용합니다. 타사에 접촉하는 내용, 옵트인/환경 변수 제어, 수용된 트레이드오프(CCTV Referer, 기본 지도 CDN, LiveUAMap 등)에 대해서는 docs/OUTBOUND_DATA.md를 참조하세요.
🚀 시작하기
🐳 Docker 설정 (자체 호스팅 권장)
저장소에는 GitHub Container Registry에서 사전 빌드된 이미지를 가져오는 docker-compose.yml이 포함되어 있습니다.```bash
git clone https://github.com/BigBodyCobain/Shadowbroker.git
cd Shadowbroker
Add your API keys in a repo-root .env file (optional — see Environment Variables below)
docker compose pull docker compose up -d
`http://localhost:3000`를 열면 대시보드를 볼 수 있습니다.
> **퍼블릭이나 LAN에 배포하시나요?** 대부분의 설정에서 별도 구성이 필요하지 않습니다.
> 프론트엔드는 모든 API 호출을 Next.js 서버를 통해 `BACKEND_URL`로 프록시하며,
> 기본값은 `http://backend:8000`(Docker 내부 네트워킹)입니다.
> 호스트 포트 `8000`은 로컬 API/디버그 접근(`docker-compose.yml`에서 `127.0.0.1:8000`)에만 게시됩니다.
> 다른 서비스와 충돌하는 경우 `.env`에 `BACKEND_PORT=8001`을 설정하세요. `BACKEND_URL`은 `http://backend:8000`으로 그대로 두세요.
> 이는 Docker 내부 포트이기 때문입니다.
>
> **백엔드를 Docker 외부에서 실행할 경우**(`cd backend && python main.py`):
> 개발 서버는 **루프백 전용**(`127.0.0.1:8000`)으로 바인드되므로 LAN에 있는 다른 머신이 빈 `ADMIN_KEY`로 admin/local-trust 경로에 접근할 수 없습니다.
> `0.0.0.0`을 의도적으로 필요로 하고 비로컬 호출자에 대해 강력한 `ADMIN_KEY`를 사용하는 경우에만 `.env`에서 `SHADOWBROKER_DEV_BIND_ALL=true`를 설정하세요.
> 백엔드 메모리 제한은 `BACKEND_MEMORY_LIMIT`로 제어되며 기본값은 `4G`입니다.
> Docker가 OOM 이벤트를 보고하면 백엔드가 재시작되고 느린 레이어는 다시 채워질 때까지 비어 보일 수 있습니다.
>
> 백엔드가 **다른 호스트나 포트**에서 실행 중인 경우, 재빌드 없이 런타임에 `BACKEND_URL`을 설정하세요:
>
> ```bash
> # Linux / macOS
> BACKEND_URL=http://myserver.com:9096 docker compose up -d
>
> # Podman (compose.sh 래퍼 사용)
> BACKEND_URL=http://192.168.1.50:9096 ./compose.sh up -d
>
> # Windows (PowerShell)
> $env:BACKEND_URL="http://myserver.com:9096"; docker compose up -d
>
> # 또는 docker-compose.yml 옆에 .env 파일에 추가:
> # BACKEND_URL=http://myserver.com:9096
> ```
**Podman 사용자:** `podman compose pull`에 GitHub URL을 전달하지 마세요. 먼저 리포지토리를 클론하고 `cd Shadowbroker`한 다음 해당 폴더에서 compose를 실행하세요. `podman compose`는 Compose 프로바이더도 필요합니다. Podman이 `looking up compose provider failed`라고 보고하면 하나를 설치하세요:```bash
# Linux / macOS / WSL
python3 -m pip install --user podman-compose
podman-compose pull
podman-compose up -d
입력:```powershell
Windows PowerShell
py -m pip install --user podman-compose podman-compose pull podman-compose up -d
bash 호환 셸을 사용하는 경우, 포함된 래퍼가 Docker 또는 Podman을 자동으로 감지할 수 있습니다:```bash
./compose.sh --engine podman pull
./compose.sh --engine podman up -d
🐋 독립 배포 (Portainer, Uncloud, NAS 등)
저장소를 클론할 필요가 없습니다. GitHub Container Registry의 사전 빌드된 이미지를 사용하세요. GitLab 레지스트리 이미지는 거기에 게시하면 미러로 사용할 수 있습니다.
다음 내용으로 docker-compose.yml을 생성하고 직접 배포하세요 — Portainer의 스택 편집기, uncloud deploy, 또는 모든 Docker 호스트에 붙여넣기:```yaml
Image registry — uncomment ONE line per service:
GitHub (primary): ghcr.io/bigbodycobain/shadowbroker-backend:latest
GitLab (mirror): registry.gitlab.com/bigbodycobain/shadowbroker/backend:latest
services: backend: image: ghcr.io/bigbodycobain/shadowbroker-backend:latest # image: registry.gitlab.com/bigbodycobain/shadowbroker/backend:latest container_name: shadowbroker-backend ports: - "${BACKEND_PORT:-8000}:8000" environment: - AIS_API_KEY=your_aisstream_key # Required — get one free at aisstream.io - OPENSKY_CLIENT_ID= # Optional — higher flight data rate limits - OPENSKY_CLIENT_SECRET= # Optional — paired with Client ID above - LTA_ACCOUNT_KEY= # Optional — Singapore CCTV cameras - SHODAN_API_KEY= # Optional — Shodan device search overlay - SH_CLIENT_ID= # Optional — Sentinel Hub satellite imagery - SH_CLIENT_SECRET= # Optional — paired with Sentinel Hub ID - CORS_ORIGINS= # Optional — comma-separated allowed origins volumes: - backend_data:/app/data restart: unless-stopped
frontend: image: ghcr.io/bigbodycobain/shadowbroker-frontend:latest # image: registry.gitlab.com/bigbodycobain/shadowbroker/frontend:latest container_name: shadowbroker-frontend ports: - "3000:3000" environment: - BACKEND_URL=http://backend:8000 # Docker internal networking — no rebuild needed depends_on: - backend restart: unless-stopped
volumes: backend_data:
> **작동 방식:** 프론트엔드 컨테이너는 Docker 내부 네트워킹을 사용하여 모든 `/api/*` 요청을 Next.js 서버를 통해 `BACKEND_URL`로 프록시합니다. 브라우저는 항상 3000번 포트와만 통신합니다. 백엔드의 호스트 포트는 로컬 API/디버그 접근용이며 `BACKEND_URL`을 변경하지 않고 `BACKEND_PORT=8001`로 변경할 수 있습니다.
>
> `BACKEND_URL`은 일반 런타임 환경 변수입니다(빌드 타임 `NEXT_PUBLIC_*`가 아님). 따라서 이미지를 다시 빌드하지 않고 Portainer, Uncloud 또는 다른 compose 편집기에서 변경할 수 있습니다. Docker 네트워크 내부에서 백엔드에 접근 가능한 주소로 설정하세요(예: `http://backend:8000`, `http://192.168.1.50:8000`).
</details>
---
<details>
<summary>📦 빠른 시작 (코드 필요 없음)</summary>
코드를 다루지 않고 대시보드를 실행하려면:
1. 이 저장소 페이지 오른쪽의 **[Releases](https://raw.githubusercontent.com/bigbodycobain/releases)** 탭으로 이동합니다.
2. 릴리스에서 최신 `.zip` 파일을 다운로드합니다.
3. 폴더를 컴퓨터에 압축 해제합니다.
4. **Windows:** `start.bat`을 더블 클릭합니다.
**Mac/Linux:** 터미널을 열고 `chmod +x start.sh`, `dos2unix start.sh`를 입력한 후 `./start.sh`를 실행합니다.
5. 자동으로 모든 것을 설치하고 대시보드를 실행합니다!
로컬 실행기 참고 사항:
- `start.bat` / `start.sh`는 Docker 없이 앱을 실행합니다 — 종속성을 설치하고 두 서버를 직접 시작합니다.
- 업그레이드 후 Wormhole 아이덴티티 또는 DM 연락처 엔드포인트가 실패하면 `docs/mesh/` 폴더에서 문제 해결 방법을 확인하세요.
- DM 루트 증인, 투명성 및 운영자 모니터링 롤아웃은 `docs/mesh/wormhole-dm-root-operations-runbook.md`부터 시작하세요.
- 샘플 DM 루트 운영 브리지 자산은 `scripts/mesh/poll-dm-root-health-alerts.mjs`, `scripts/mesh/export-dm-root-health-prometheus.mjs`, `scripts/mesh/publish-external-root-witness-package.mjs`, `scripts/mesh/smoke-external-root-witness-flow.mjs`, `scripts/mesh/smoke-root-transparency-publication-flow.mjs`, `scripts/mesh/smoke-dm-root-deployment-flow.mjs`, `scripts/mesh/sync-dm-root-external-assurance.mjs` 및 `docs/mesh/examples/`도 참조하세요.
</details>
---
<details>
<summary>💻 개발자 설정</summary>
코드를 수정하거나 소스에서 실행하려면:
#### 사전 요구 사항
* **Node.js** 18+ 및 **npm** — [nodejs.org](https://nodejs.org/)
* **Python** 3.10, 3.11 또는 3.12와 `pip` — [python.org](https://www.python.org/downloads/) (설치 중 **"Add to PATH"** 확인)
* ⚠️ Python 3.13+는 일부 종속성과 호환성 문제가 있을 수 있습니다. **3.11 또는 3.12를 권장합니다.**
* API 키 필요: `aisstream.io` (필수), 선택적으로 `opensky-network.org` (OAuth2), `lta.gov.sg`
### 설치```bash
# Clone the repository
git clone https://github.com/BigBodyCobain/Shadowbroker.git
cd Shadowbroker
# Backend setup
cd backend
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # macOS/Linux
pip install .
# Optional helper scripts (creates venv + installs dev deps)
# Windows PowerShell
# .\backend\scripts\setup-venv.ps1
# macOS/Linux
# ./backend/scripts/setup-venv.sh
# Optional env check (prints warnings for missing keys)
# Windows PowerShell
# .\backend\scripts\check-env.ps1
# macOS/Linux
# ./backend/scripts/check-env.sh
# Create .env with your API keys
echo "AIS_API_KEY=your_aisstream_key" >> .env
echo "OPENSKY_CLIENT_ID=your_opensky_client_id" >> .env
echo "OPENSKY_CLIENT_SECRET=your_opensky_secret" >> .env
# Frontend setup
cd ../frontend
npm ci
실행```bash
From the frontend directory — starts both frontend & backend concurrently
npm run dev
* **Next.js** 프론트엔드 (`http://localhost:3000`)
* **FastAPI** 백엔드 (`http://localhost:8000`)
### Pre-commit (선택 사항)
pre-commit을 사용한다면, 리포지토리 루트에서 한 번 후크를 설치하세요:```bash
pre-commit install
로컬 AIS 수신기 (선택 사항)
RTL-SDR 동글과 오픈 소스 AIS 디코더인 AIS-catcher를 사용하여 자신의 AIS 선박 데이터를 ShadowBroker에 공급할 수 있습니다. 이를 통해 API 키 없이도 주변 지역의 선박을 실시간으로 파악할 수 있습니다.
- RTL-SDR 동글을 연결합니다.
- AIS-catcher를 설치하거나 (릴리스) Docker 이미지를 사용합니다: ```bash
docker run -d --device /dev/bus/usb
ghcr.io/jvde-github/ais-catcher -H http://host.docker.internal:4000/api/ais/feed interval 10 - 또는 네이티브로 실행하세요: ```bash
AIS-catcher -H http://localhost:4000/api/ais/feed interval 10
AIS-catcher는 161.975 MHz 및 162.025 MHz의 VHF 무선 신호를 디코딩하고, 10초마다 디코딩된 선박 데이터를 ShadowBroker에 POST합니다. SDR 안테나로 탐지된 선박은 글로벌 AIS 스트림과 함께 표시됩니다.
Docker (ARM/Raspberry Pi): ARM에 최적화된 프로덕션 준비 Docker 이미지는 docker-shipfeeder를 참조하세요.
참고: AIS 범위는 안테나에 따라 다릅니다 — 기본 설정에서는 일반적으로 20-40 해리, 고지대의 해양 VHF 안테나에서는 60+ 해리입니다.
🎛️ 데이터 레이어
모든 41개 레이어는 왼쪽 패널에서 독립적으로 켜고 끌 수 있습니다:
| 레이어 | 기본값 | 설명 |
|---|---|---|
| 상업 항공편 | ✅ 켜짐 | 항공사, 화물, 일반 항공 항공기 |
| 개인 항공편 | ✅ 켜짐 | 비상업용 개인 항공기 |
| 개인 제트기 | ✅ 켜짐 | 소유자 데이터가 포함된 고가의 비즈니스 제트기 |
| 군용 항공편 | ✅ 켜짐 | 군용 및 정부 항공기 |
| 추적 항공기 | ✅ 켜짐 | 특별 관심 감시 목록 |
| GPS 재밍 | ✅ 켜짐 | NAC-P 저하 구역 |
| 항공모함 / 군함 / 화물선 | ✅ 켜짐 | 해군 항공모함, 화물선, 유조선 |
| 민간 선박 | ✅ 켜짐 | 요트, 어선, 레저용 |
| 크루즈 / 여객선 | ✅ 켜짐 | 크루즈선 및 페리 |
| 추적 요트 | ✅ 켜짐 | 억만장자 및 과두 정치인 슈퍼요트 |
| 어업 활동 | ✅ 켜짐 | Global Fishing Watch 선박 이벤트 |
| 기차 | ✅ 켜짐 | 암트랙 + 유럽 철도 위치 |
| 위성 | ✅ 켜짐 | 임무 유형별 궤도 자산 |
| SatNOGS | ✅ 켜짐 | 아마추어 위성 지상국 |
| TinyGS | ✅ 켜짐 | LoRa 위성 지상국 |
| 지진 (24시간) | ✅ 켜짐 | USGS 지진 이벤트 |
| 화재 핫스팟 (24시간) | ✅ 켜짐 | NASA FIRMS VIIRS 열 이상 징후 |
| 화산 | ✅ 켜짐 | Smithsonian 현세 화산 |
| 기상 경보 | ✅ 켜짐 | 악천후 다각형 |
| 대기질 (PM2.5) | ✅ 켜짐 | 전 세계 OpenAQ 측정소 |
| 우크라이나 전선 | ✅ 켜짐 | 실시간 전쟁 전선 위치 |
| 우크라이나 공습 경보 | ✅ 켜짐 | 지역별 공습 경보 |
| 글로벌 사건 | ✅ 켜짐 | GDELT 분쟁 이벤트 |
| CCTV 메시 | ✅ 켜짐 | 13개 출처, 6개국에 걸친 11,000개 이상의 카메라 |
| 인터넷 장애 | ✅ 켜짐 | IODA 지역 연결성 경보 |
| 데이터 센터 | ✅ 켜짐 | 글로벌 데이터 센터 위치 (2,000개 이상) |
| 군사 기지 | ✅ 켜짐 | 글로벌 군사 시설 |
| KiwiSDR 수신기 | ✅ 켜짐 | 공개 SDR 라디오 수신기 |
| Meshtastic 노드 | ✅ 켜짐 | 메시 라디오 노드 위치 |
| APRS | ✅ 켜짐 | 아마추어 무선 위치 |
| 스캐너 | ✅ 켜짐 | 경찰/소방 스캐너 피드 |
| 낮/밤 주기 | ✅ 켜짐 | 태양 종말선 오버레이 |
| MODIS Terra (일일) | ❌ 꺼짐 | NASA GIBS 일일 위성 이미지 |
| 고해상도 위성 | ❌ 꺼짐 | Esri 서브미터 위성 이미지 |
| Sentinel Hub | ❌ 꺼짐 | Copernicus CDSE Process API |
| VIIRS 야간 조명 | ❌ 꺼짐 | 야간 조명 변화 감지 |
| 발전소 | ❌ 꺼짐 | 35,000개 이상의 글로벌 발전소 |
| Shodan 오버레이 | ❌ 꺼짐 | 인터넷 장치 검색 결과 |
| 도로 화물 동향 | ❌ 꺼짐 | 주요 고속도로에서 Sentinel-2 트럭 이동 동향 (여기서 분석) |
| 해저 케이블 | ❌ 꺼짐 | 글로벌 해저 케이블 경로 (정적 GeoJSON) |
| 악성코드 C2 | ❌ 꺼짐 | abuse.ch Feodo + URLhaus 위협 포인트 |
| SCM 공급업체 | ❌ 꺼짐 | Tier 1/2 공급망 위험 마커 + 패널 경고 |
| 사이버 위협 | ❌ 꺼짐 | 최근 CISA KEV 항목 (느린 계층 페이로드의 통계) |
| Telegram OSINT | ✅ 켜짐 | 공개 전쟁/OSINT Telegram 채널 — 시간별 스크래핑, 지리 파싱된 핀 |
| SAR | ✅ 켜짐 | 합성개구레이더 카탈로그 + 이상 징후 경고 |
정찰 및 엔터티 도구 (지도 레이어 아님 — 왼쪽 사이드바 / 선택):
| 도구 | 대시보드 접근 | OpenClaw 명령 | 설명 |
|---|---|---|---|
| 정찰 도구 키트 | 로컬 운영자 (/api/osint/*) | osint_lookup, osint_sweep† | IP, DNS, WHOIS, 인증서, BGP, 제재, CVE, MAC, GitHub, 유출, 위협, 서브넷 스윕 |
| 엔터티 그래프 | 로컬 운영자 (/api/entity/expand) | entity_expand | Wikidata + OFAC + 라이브 저장소 관계 그래프 |
| SCM 위험 패널 | 로컬 운영자 (/api/scm-suppliers) | get_layer_slice(["scm_suppliers"]) | 공급업체 위험 요약 + 지도 마커 |
| 도구 검색 | — | osint_tools | 정찰 조회 유형 및 엔터티 확장 스키마 나열 |
† osint_sweep (활성 InternetDB 스캔)은 OPENCLAW_ACCESS_TIER=full이 필요합니다.
🔧 성능
플랫폼은 대규모 실시간 데이터 세트를 처리하도록 최적화되어 있습니다:
- Gzip 압축 — API 페이로드가 ~92% 압축됨 (11.6 MB → 915 KB)
- ETag 캐싱 —
304 Not Modified응답으로 중복 JSON 구문 분석 생략 - 뷰포트 컬링 — 보이는 지도 경계 내의 피처만 렌더링 (+20% 버퍼)
- 명령형 지도 업데이트 — 대량 레이어(항공편, 위성, 화재)는 React 재조정을 우회하고 직접
setData()호출을 통해 업데이트 - 클러스터링 렌더링 — 선박, CCTV, 지진, 데이터 센터는 MapLibre 클러스터링을 사용하여 피처 수 감소
- 디바운스된 뷰포트 업데이트 — 300ms 디바운스로 팬/확대/축소 시 GeoJSON 재구축 스래시 방지; 밀집 레이어(위성, 화재)에서는 2초 디바운스
- 위치 보간 — 데이터 새로고침 사이에 부드러운 10초 틱 애니메이션
- React.memo — 무거운 컴포넌트를 래핑하여 불필요한 재렌더링 방지
- 좌표 정밀도 — 위도/경도를 소수점 5자리(~1m)로 반올림하여 JSON 크기 축소
📁 프로젝트 구조
새로운 기여자는 더 짧은 오리엔테이션 가이드를 위해 docs/contributor-map.md를 사용할 수 있습니다.``` Shadowbroker/ ├── openclaw-skills/shadowbroker/ # OpenClaw skill — SKILL.md, sb_query.py client, alerts/monitor helpers ├── backend/ │ ├── main.py # FastAPI app, middleware, API routes (~4,000 lines) │ ├── cctv.db # SQLite CCTV camera database (auto-generated) │ ├── config/ │ │ └── news_feeds.json # User-customizable RSS feed list │ ├── services/ │ │ ├── data_fetcher.py # Core scheduler — orchestrates all data sources │ │ ├── ais_stream.py # AIS WebSocket client (25K+ vessels) │ │ ├── carrier_tracker.py # OSINT carrier position estimator (GDELT news scraping) │ │ ├── cctv_pipeline.py # 14-source CCTV camera ingestion pipeline │ │ ├── ssrf_guard.py # SSRF validation for operator recon fetches │ │ ├── sanctions/ofac.py # OpenSanctions OFAC SDN index │ │ ├── osint/lookups.py # Server-side recon lookups (Osiris port) │ │ ├── osint/openclaw_recon.py # OpenClaw dispatch for recon + entity_expand │ │ ├── osint_intel/resolve.py # Entity graph resolver (Wikidata + OFAC) │ │ ├── scm/suppliers.py # Supply-chain risk overlay │ │ ├── intel_feeds/ # Country risk index helpers │ │ ├── fetchers/malware.py # abuse.ch Feodo + URLhaus │ │ ├── fetchers/cyber_status.py # CISA KEV feed │ │ ├── fetchers/telegram_osint.py # Public Telegram channel scrape + geoparse │ │ ├── third_party/osiris/ # MIT attribution for Osiris-derived code │ │ ├── geopolitics.py # GDELT + Ukraine frontline + air alerts │ │ ├── region_dossier.py # Right-click country/city intelligence │ │ ├── radio_intercept.py # Police scanner feeds + OpenMHZ │ │ ├── kiwisdr_fetcher.py # KiwiSDR receiver scraper │ │ ├── sentinel_search.py # Sentinel-2 STAC imagery search │ │ ├── shodan_connector.py # Shodan device search connector │ │ ├── sigint_bridge.py # APRS-IS TCP bridge │ │ ├── network_utils.py # HTTP client with curl fallback │ │ ├── api_settings.py # API key management │ │ ├── news_feed_config.py # RSS feed config manager │ │ ├── fetchers/ │ │ │ ├── flights.py # OpenSky, adsb.lol, GPS jamming, holding patterns │ │ │ ├── geo.py # AIS vessels, carriers, GDELT, fishing activity │ │ │ ├── satellites.py # CelesTrak TLE + SGP4 propagation │ │ │ ├── earth_observation.py # Quakes, fires, volcanoes, air quality, weather │ │ │ ├── infrastructure.py # Data centers, power plants, military bases │ │ │ ├── trains.py # Amtrak + DigiTraffic European rail │ │ │ ├── sigint.py # SatNOGS, TinyGS, APRS, Meshtastic │ │ │ ├── meshtastic_map.py # Meshtastic MQTT + map node aggregation │ │ │ ├── military.py # Military aircraft classification │ │ │ ├── news.py # RSS intelligence feed aggregation │ │ │ ├── financial.py # Global markets data │ │ │ └── ukraine_alerts.py # Ukraine air raid alerts │ │ └── mesh/ # InfoNet / Wormhole protocol stack │ │ ├── mesh_protocol.py # Core mesh protocol + routing │ │ ├── mesh_crypto.py # Ed25519, X25519, AESGCM primitives │ │ ├── mesh_hashchain.py # Hash chain commitment system (~1,400 lines) │ │ ├── mesh_router.py # Multi-transport router (APRS, Meshtastic, WS) │ │ ├── mesh_wormhole_persona.py # Gate persona identity management │ │ ├── mesh_wormhole_dead_drop.py # Dead Drop token-based DM mailbox │ │ ├── mesh_wormhole_ratchet.py # Double-ratchet DM scaffolding │ │ ├── mesh_wormhole_gate_keys.py # Gate key management + rotation │ │ ├── mesh_wormhole_seal.py # Message sealing + unsealing │ │ ├── mesh_merkle.py # Merkle tree proofs for data commitment │ │ ├── mesh_reputation.py # Node reputation scoring │ │ ├── mesh_oracle.py # Oracle consensus protocol │ │ └── mesh_secure_storage.py # Secure credential storage │ ├── routers/ │ │ ├── osint.py # /api/osint/* recon routes (local operator) │ │ ├── entity_graph.py # /api/entity/expand │ │ ├── scm.py # /api/scm-suppliers │ │ └── intel_feeds.py # /api/malware, /api/cyber-threats, /api/telegram-feed, /api/country-risk ├── frontend/ │ ├── public/data/ │ │ └── submarine-cables.json # Static undersea cable GeoJSON │ ├── src/ │ │ ├── app/ │ │ │ └── page.tsx # Main dashboard — state, polling, layout │ │ └── components/ │ │ ├── MaplibreViewer.tsx # Core map — all GeoJSON layers │ │ ├── MeshChat.tsx # InfoNet / Mesh / Dead Drop chat panel │ │ ├── MeshTerminal.tsx # Draggable CLI terminal │ │ ├── NewsFeed.tsx # SIGINT feed + entity detail panels │ │ ├── WorldviewLeftPanel.tsx # Data layer toggles (40+ layers) │ │ ├── ShodanPanel.tsx # Shodan device search overlay │ │ ├── ReconPanel.tsx # Server-side OSINT recon toolkit │ │ ├── ScmPanel.tsx # Supply-chain risk command panel │ │ ├── EntityGraphPanel.tsx # Entity graph on map selection │ │ ├── MaplibreViewer/popups/TelegramOsintPopup.tsx # Threat-intercept styled Telegram pin popups │ │ ├── WorldviewRightPanel.tsx # Search + filter sidebar │ │ ├── AdvancedFilterModal.tsx # Airport/country/owner filtering │ │ ├── MapLegend.tsx # Dynamic legend with all icons │ │ ├── MarketsPanel.tsx # Global financial markets ticker │ │ ├── RadioInterceptPanel.tsx # Scanner-style radio panel │ │ ├── FindLocateBar.tsx # Search/locate bar │ │ ├── ChangelogModal.tsx # Version changelog popup (auto-shows on upgrade) │ │ ├── SettingsPanel.tsx # API Keys + News Feed + Shodan config │ │ ├── ScaleBar.tsx # Map scale indicator │ │ └── ErrorBoundary.tsx # Crash recovery wrapper │ └── package.json
</details>
---
<details>
<summary>🔑 환경 변수</summary>
### 백엔드 (`backend/.env`)```env
# Required for airplane telemetry (NEW in v0.9.7 — startup env check flags these as critical)
# Free registration: https://opensky-network.org/index.php?option=com_users&view=registration
OPENSKY_CLIENT_ID=your_opensky_client_id # OAuth2 — global flight state vectors
OPENSKY_CLIENT_SECRET=your_opensky_secret # OAuth2 — paired with Client ID above
# Optional (enhances data quality)
AIS_API_KEY=your_aisstream_key # Maritime vessel tracking (aisstream.io) — ships layer empty without it
LTA_ACCOUNT_KEY=your_lta_key # Singapore CCTV cameras
SHODAN_API_KEY=your_shodan_key # Shodan device search overlay
SH_CLIENT_ID=your_sentinel_hub_id # Copernicus CDSE Sentinel Hub imagery
SH_CLIENT_SECRET=your_sentinel_hub_secret # Paired with Sentinel Hub Client ID
MESH_SAR_EARTHDATA_USER= # NASA Earthdata user (SAR Mode B — OPERA products)
MESH_SAR_EARTHDATA_TOKEN= # NASA Earthdata token (paired with user above)
MESH_SAR_COPERNICUS_USER= # Copernicus Data Space user (SAR Mode B — EGMS / EMS)
MESH_SAR_COPERNICUS_TOKEN= # Copernicus token (paired with user above)
OPENCLAW_ACCESS_TIER=restricted # OpenClaw agent tier: "restricted" (read-only) or "full"
# OPENCLAW_HMAC_SECRET= # Optional; UI Bootstrap persists to data/openclaw.env in Docker
GFW_API_TOKEN=your_gfw_token # Global Fishing Watch — fishing_activity layer (Settings → Maritime)
TELEGRAM_OSINT_ENABLED=true # Telegram OSINT layer (default on)
TELEGRAM_OSINT_CHANNELS=osintdefender,... # Comma-separated public channel slugs (see .env.example)
# Private-lane privacy-core pinning (required when Arti or RNS is enabled)
PRIVACY_CORE_MIN_VERSION=0.1.0
PRIVACY_CORE_ALLOWED_SHA256=your_privacy_core_sha256
# Optional override if you load a non-default shared library path
PRIVACY_CORE_LIB=
MESH_ARTI_ENABLED=true 또는 MESH_RNS_ENABLED=true인 경우, 로드된 privacy-core 아티팩트가 PRIVACY_CORE_MIN_VERSION 이상의 구문 분석 가능한 버전을 보고하고 PRIVACY_CORE_ALLOWED_SHA256의 해시 중 하나와 일치하지 않으면 백엔드 시작 시 닫힘 실패(fails closed)합니다.
배포하려는 아티팩트에서 해시를 생성하십시오:```powershell Get-FileHash .\privacy-core\target\release\privacy_core.dll -Algorithm SHA256
---
### 도구 (계속)```bash
sha256sum ./privacy-core/target/release/libprivacy_core.so
그런 다음 인증된 GET /api/wormhole/status 또는 GET /api/settings/wormhole-status가 동일한 privacy_core.version, privacy_core.library_path 및 privacy_core.library_sha256을 표시하는지 확인합니다.
프론트엔드
| 변수 | 설정 위치 | 목적 |
|---|---|---|
BACKEND_URL | docker-compose.yml의 environment 또는 쉘 환경 | Next.js 서버가 백엔드로 API 호출을 프록시하는 데 사용하는 URL입니다. 기본값은 http://backend:8000입니다. 런타임 변수 — 재빌드 불필요. |
BACKEND_PORT | 리포지토리 루트 .env 또는 docker compose up 전 쉘 환경 | 로컬 진단을 위해 백엔드 API를 노출하는 데 사용되는 호스트 포트입니다. 기본값은 8000이며, 포트 8000이 이미 사용 중인 경우 BACKEND_PORT=8001로 설정합니다. Docker 내부 BACKEND_URL은 변경되지 않습니다. |
작동 방식: 프론트엔드는 Next.js 서버를 통해 모든 /api/* 요청을 Docker의 내부 네트워킹을 사용하여 BACKEND_URL로 프록시합니다. 브라우저는 포트 3000만 사용하며, 백엔드 호스트 포트는 로컬 진단용입니다. Docker 없이 로컬 개발하는 경우 BACKEND_URL은 기본적으로 http://localhost:8000로 설정됩니다.
🤝 기여자
ShadowBroker는 오픈 소스로 개발됩니다. 다음 분들이 실제 코드를 기여했습니다:
| 누가 | 무엇을 | PR |
|---|---|---|
| @Alienmajik | Raspberry Pi 5 지원 — ARM64 패키징, 헤드리스 배포 노트, Pi급 하드웨어를 위한 런타임 튜닝 | — |
| @wa1id | CCTV 수집 수정 — 스레드 SQLite, 영구 DB, 시작 시 하이드레이션, 클러스터 클릭 가능 | #92 |
| @AlborzNazari | 스페인 DGT + 마드리드 CCTV 소스, STIX 2.1 위협 인텔리전스 내보내기 | #91 |
| @adust09 | 발전소 레이어, 동아시아 인텔리전스 커버리지 (JSDF 기지, ICAO 강화, 대만 뉴스, 군사 분류) | #71, #72, #76, #77, #87 |
| @Xpirix | LocateBar 스타일 및 상호작용 개선 | #78 |
| @imqdcr | 선박 토글 분할 (4개 카테고리) + 안정적인 MMSI/호출부호 엔티티 ID | — |
| @csysp | 닫을 수 있는 위협 알림 + GDELT 및 뉴스용 안정적인 엔티티 ID | #48, #63 |
| @suranyami | 병렬 다중 아키텍처 Docker 빌드 (11분 → 3분) + 런타임 BACKEND_URL 수정 | #35, #44 |
| @chr0n1x | 고가용성 배포를 위한 Kubernetes / Helm 차트 아키텍처 | — |
⚠️ 면책 조항
이 도구는 전적으로 공개적으로 이용 가능한 오픈 소스 인텔리전스(OSINT) 데이터를 기반으로 구축되었습니다. 기밀, 제한 또는 비공개 데이터는 사용되지 않습니다. 통신사 위치는 공개 보고를 기반으로 한 추정치입니다. 군사 테마의 UI는 순전히 미적 목적입니다.
📜 라이선스
이 프로젝트는 교육 및 개인 연구 목적으로 사용됩니다. 데이터 사용 제한에 대한 개별 API 제공자의 서비스 약관을 참조하십시오.
☕와 수많은 API 호출로 만들어졌습니다