
정찰 및 레드팀 운영을 위해 macOS 및 iOS 아티팩트를 수집하여 네트워크 활동, 기기 간 신원, 물리적 위치 상관관계의 타임라인을 구축합니다.
RinHit - macOS 생태계 정찰 프레임워크. Apple 생태계에서 아티팩트를 수집하여 네트워크 활동, 기기 간 신원, 물리적 위치 상관관계의 타임라인을 구축합니다.
이는 오픈소스 정찰 모듈입니다. 클로즈드소스 Swift 페이로드(
rinhit-agent)는 내부적으로 레드팀에서 사용되며 이 저장소에 포함되지 않습니다.
com.apple.wifi.known-networks.plist(레거시) 파싱 또는 networksetup(macOS 15+ Data Vault) 사용com.apple.Bluetooth.plist의 페어링된 기기, 캐시된 기기, 연결된 기기ioreg(IOKit) 및 system_profiler를 통한 연결된 USB 기기high, 모바일 핫스팟 = medium 등# 클론
git clone https://github.com/toxy4ny/rinhit.git
cd rinhit
# 빌드
go build -o rinhit ./cmd/rinhit
# 또는 직접 설치
go install ./cmd/rinhit
./rinhit list
sudo 필요)sudo ./rinhit scan -v
sudo ./rinhit scan -c wifi,bluetooth -v
sudo ./rinhit scan --correlate -v
sudo ./rinhit scan -o report.json
# Wigle CSV 덤프 가져오기
./rinhit geo import wigle-export.csv
# BSSID 조회
./rinhit geo lookup AA:BB:CC:DD:EE:FF
# 캐시 통계 표시
./rinhit geo stats
{
"generated_at": "2026-08-21T21:09:10Z",
"hostname": "MacBook-Pro-test.local",
"user": "root",
"artifacts": [
{
"id": "wifi-ns-iPhone7",
"collector": "wifi",
"type": "wifi-network",
"name": "iPhone7",
"severity": "medium",
"timestamp": "2026-08-21T14:09:10-07:00",
"source": "networksetup",
"data": {"ssid": "iPhone7", "source": "networksetup"},
"tags": ["wifi", "network", "macos15-fallback", "mobile-hotspot", "cross-device"]
}
],
"summary": {
"total_artifacts": 12,
"by_severity": {"info": 11, "medium": 1},
"by_collector": {"wifi": 12}
},
"data": {
"correlations": [
{
"type": "mobile-hotspot",
"confidence": 0.7,
"description": "Mobile hotspot 'iPhone7' detected - indicates iPhone/iPad tethering usage",
"artifact_ids": ["wifi-ns-iPhone7"],
"tags": ["mobile-hotspot", "tethering", "cross-device"]
}
]
}
}
rinhit/
├── cmd/rinhit/main.go # CLI 진입점
├── pkg/
│ ├── collector/ # 수집기 인터페이스 및 레지스트리
│ │ ├── wifi/ # Wi-Fi 아티팩트 수집기
│ │ ├── bluetooth/ # Bluetooth 기기 수집기
│ │ └── usb/ # USB 기기 수집기
│ ├── model/ # Artifact 및 Report 구조체
│ ├── parser/plist/ # SIP 폴백이 포함된 Plist 파싱
│ ├── reporter/json/ # JSON 리포터
│ ├── correlator/ # 아티팩트 간 상관관계 엔진
│ └── geoloc/ # 오프라인 BSSID 지리위치 캐시
새 수집기를 추가하려면 Collector 인터페이스를 구현하세요:
type Collector interface {
Name() string
Description() string
Collect(ctx context.Context) ([]model.Artifact, error)
RequiresRoot() bool
}
그런 다음 cmd/rinhit/main.go의 buildRegistry()에 등록하세요.
networksetup으로 폴백합니다(living off the land)sudo가 필요한 것은 wifi 수집기뿐입니다MIT - LICENSE 참조.
"바구미가 과일에 구멍을 뚫고, 알을 낳고, 줄기를 잘라 흔적을 덮듯이, RinHit는 Apple 생태계를 뚫고 들어가 지속성을 심고 내부에서 보안 경계를 무너뜨립니다."