Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
gobalance-patch — GoBalance onion 로드 밸런서에 대한 보안 패치 및 개념 증명으로, blindedSign을 통한 마스터 키 복구와 위조된 디스크립터 수용을 다루며, 회귀 테스트를 포함합니다. | Kitploit
도구/GitHubGitHub/kolmteistov/gobalance-patch
Vulnerability AnalysisExploitationWeb Application ExploitationCryptographyPenetration TestingLearning & Education
GitHubkolmteistov/gobalance-patch

gobalance-patch

GoBalance onion 로드 밸런서에 대한 보안 패치 및 개념 증명으로, blindedSign을 통한 마스터 키 복구와 위조된 디스크립터 수용을 다루며, 회귀 테스트를 포함합니다.

저장소 보기
361일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

GoBalance 보안 패치 및 PoC

gitlab.com/n0tr1v/gobalance용 권고 패키지 - master 브랜치, 커밋 bb1b0f3 ("fix crash"). 상태: 치명적 - 두 가지 독립적인 전체 탈취 경로. 업스트림 patch1 브랜치는 둘 다 수정하지 않습니다.

이 패키지에는 완전한 보안 패치, 두 공격 경로에 대한 엔드투엔드 개념 증명, 그리고 수정 사항이 유지됨을 입증하는 회귀 테스트가 포함되어 있습니다. 두 포럼에 영향을 미친 최근 onion 도메인 탈취 사건과 관련하여 작성된 전체 취약점 분석 보고서("Laporan Analisis Keamanan GoBalance")와 함께 제공됩니다. 단계별 빌드 및 테스트 가이드는 USAGE.md에 있습니다.


1. 요약

#취약점심각도영향상태
1blindedSign을 통한 마스터 신원 키 유출 (상수 nonce 접두사)치명적단일 공개 디스크립터로부터 전체 onion 신원 복구수정됨
2RegisterDescriptor가 위조된 인스턴스 디스크립터를 수용 (서명/바인딩 검증 없음)치명적모든 GoBalance 프론트엔드의 트래픽 탈취수정됨
3pkg/brand의 결정론적, 시간 시드 RNG 경로높음 (위험 요소)이를 사용하는 모든 것에 대해 예측 가능한 키 자료제거됨
4도입 지점 셔플이 math/rand 사용낮음프로토콜 인접 코드의 약한 무작위성crypto/rand로 교체됨

취약점 #1 - 하나의 공개 디스크립터로부터 마스터 키 복구 (치명적)

pkg/stem/descriptor/hidden_service.go의 디스패처 blindedSign()이 identityKey.Seed() - 원시 32바이트 스칼라 a - 를 BlindedSignWithTorKey()에 전달했습니다. Tor 형식 키는 확장 키입니다: 64바이트 (a || h), 여기서 h는 서명별 nonce 접두사를 파생시키는 PRF 키입니다. h가 누락되면 nonce 파생 입력이 비어 있었고

kPrime = SHA512("Derive temporary signing key hash input" || <empty>)

는 공개 상수가 되었습니다. 결과: 하나의 공개된 디스크립터를 읽을 수 있는 사람은 누구나 nonce r을 재계산하고, 블라인드된 스칼라 s' = (S − r) · H(R‖PK‖M)⁻¹ mod L을 풀고, 공개 승수를 사용하여 이를 언블라인드하여 onion 서비스의 마스터 신원 키를 복구할 수 있습니다. 서버 접근, MitM, 무차별 대입이 필요하지 않습니다. 이는 조용한 도메인 탈취 프리미티브이며 최근 포럼 하이재킹에서 관찰된 메커니즘과 일치합니다.

수정: 이제 디스패처는 전체 확장 키 (gobpk.PrivateKey.PrivKey())를 전달합니다. BlindedSignWithTorKey는 정확히 64바이트가 아닌 모든 키에 대해 패닉을 발생시킵니다. blindedSignP2는 심층 방어로 ESK 길이를 독립적으로 강제합니다. gobpk.New는 로드 시 잘린 Tor 키를 거부합니다.

취약점 #2 - 위조된 인스턴스 디스크립터 수용 (치명적)

NewReceivedDescriptor()는 네트워크가 전달한 것을 파싱하고 신뢰했습니다. 서브크레덴셜은 디스크립터 자체 내부에 포함된 블라인드된 키에서 파생되므로, 공격자는 자신의 키를 사용하여 다른 사람의 onion 주소에 대해 암호학적으로 자기 일관성 있는 디스크립터를 생성할 수 있었습니다. 그러면 프론트엔드는 피해자의 신원 아래에 공격자의 도입 지점을 재게시하게 됩니다 - 키 복구가 전혀 필요 없는 완전한 트래픽 탈취입니다.

수정: 새로운 VerifyHiddenServiceDescriptorV3()에서 3계층 검증: (1) 블라인드된 키 아래의 인증서 서명, (2) 인증된 서명 키 아래의 디스크립터 서명, (3) 바인딩 - 블라인드된 키가 프론트엔드가 합의(GetBlindingParam + 시간 주기)와 인스턴스 주소로부터 독립적으로 계산한 값과 일치해야 합니다. RegisterDescriptor는 실패 시 폐쇄적입니다: 라이브 합의가 없으면 맹목적으로 신뢰하는 대신 등록을 거부합니다.

2. 이 패키지의 내용

gobalance-patch/
├── README.md                  ← 이 파일 (영어)
├── USAGE.md                   ← 단계별 빌드 및 테스트 가이드 (영어)
├── README_ID.md               ← 패치 요약 (인도네시아어)
├── gobalance-security.patch   ← master@bb1b0f3에 대한 통합 diff (7개 파일, +360/−94)
├── gobalance-patched/         ← 전체 사전 패치된 소스 트리 (드롭인)
│   ├── go.mod / go.sum / main.go
│   ├── pkg/…                  ← 패치된 라이브러리, 회귀 테스트 포함
│   ├── poc/                   ← 엔드투엔드 공격 데모 + 취약한 코드 스냅샷
│   ├── cmd/gbdemo/            ← 독립 실행형 복구 데모 CLI (+ E2E 테스트) - USAGE #13
│   └── tools/                 ← pem2tor.py (PEM→Tor 키 변환기), get_desc.py (디스크립터 가져오기)
└── gobalance-v1/              ← 커뮤니티 포크 "GoBalance Enhanced v1.0" (Dread), 테스트용으로
                                 배포된 그대로 번들됨 - 여전히 취약함 - USAGE #14

3. 빠른 시작

# 옵션 A - 새로운 업스트림 체크아웃에 패치 적용
git clone https://gitlab.com/n0tr1v/gobalance && cd gobalance
git apply /path/to/gobalance-security.patch
go build ./... && go test ./...

# 옵션 B - 번들된 사전 패치된 트리 사용 (가장 빠름)
cd gobalance-patched
go build ./...
go test ./poc/ -v      # 공격 데모: 취약한 스냅샷에 대해 성공, 패치에 대해 실패
go test ./...          # 전체 스위트: 8개 패키지 ok

예상 출력이 포함된 전체 안내는 USAGE.md를 참조하세요.

4. PoC가 입증하는 것

  1. 공격 (취약한 코드): 마스터 스칼라가 단일 공개 디스크립터로부터 복구되고, 복구된 키로 미래 시간 주기에 대해 위조된 서명이 피해자의 실제 서명과 바이트 단위로 동일합니다 - Test01_Vulnerable_MasterKeyRecoveredFromSingleDescriptor.
  2. 방어: 패치된 빌드는 잘린 32바이트 Tor 키를 위험을 명시하는 명시적 패닉으로 거부합니다 - Test02_Patched_TruncatedTorKeyRejected.
  3. 호환성: 패치된 tor 경로 서명은 여전히 블라인드된 공개 키 아래에서 표준 ed25519로 검증되므로 Tor 상호 운용성은 변경되지 않습니다 - Test03_Patched_TorPathSignaturesVerifyAsStdEd25519.
  4. 방어: 패치된 코드에 대해 동일한 공격 수학을 재생하면 더 이상 실제 마스터 스칼라와 일치하지 않는 쓰레기가 생성됩니다 - Test04_Patched_AttackMathYieldsGarbage.
  5. 방어 (#2): 자기 일관성 있는 위조 디스크립터가 이전 신뢰 모델의 검사(파싱 + 인증서 서명 + 디스크립터 서명)를 통과하지만 새로운 합의 바인딩 검사에 의해 거부됩니다 - TestForgedSelfConsistentDescriptorIsDetected.
  6. 방어 (#2): 실제 수신 경로가 정직한 디스크립터를 수용하고 변조되거나 잘못 바인딩된 것을 거부합니다 - TestNewReceivedDescriptor_AcceptsHonestDescriptor, _RejectsTamperedSignature, _RejectsWrongIdentityBinding.

PoC의 모든 키는 테스트 시 로컬에서 생성됩니다. 실제 서비스는 대상이 아니었습니다.

5. 운영 참고 사항 - 배포 전에 읽어보세요

  1. 취약한 코드를 실행한 적이 있다면 키를 교체하세요. 하나의 공개 디스크립터만으로도 마스터 키를 복구하기에 충분했습니다 (취약점 #1). 패치는 앞으로의 유출을 막지만 이미 공개된 디스크립터를 비공개로 되돌릴 수는 없습니다. 새로운 onion 신원을 생성하고 마이그레이션하세요.
  2. 와이어 호환성은 유지됩니다. 디스크립터 형식은 변경되지 않았고 서명은 블라인드된 키 아래에서 표준 ed25519로 유지됩니다 - Tor 및 일반 검증자는 차이를 보지 못합니다. Seed/PEM 형식 키는 이전과 정확히 동일하게 작동합니다 (해당 경로는 항상 올바랐습니다; 원래 TestBlindedSign은 여전히 통과합니다).
  3. 실패 시 폐쇄적 동작은 의도적입니다. 라이브 합의가 없으면 프론트엔드는 이제 맹목적으로 신뢰하는 대신 인스턴스 디스크립터 등록을 거부합니다.
  4. 업스트림 patch1 브랜치는 취약점 #1 또는 #2를 수정하지 않습니다. 이 패치는 master 위에 적용해야 합니다 (또는 번들된 트리를 사용하세요).

6. 테스트 환경

  • Go 1.21.13, linux/amd64 (go.mod는 go 1.18을 선언).
  • go vet ./... 깨끗함; go build ./... OK.
  • go test ./... → 8개 패키지 ok, 0개 실패, 회귀 없음 (기존 업스트림 테스트 포함).
도구 다운로드