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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sshfinder — 모든 포트를 스캔하고 SSH 배너를 검증하며 인증 방법, 취약한 암호화, Terrapin 취약점, 그리고 호스트 및 CIDR 범위 전반에 걸친 재사용된 호스트 키를 감사하는 병렬 SSH 서비스 검색 및 보안 감사 도구입니다. | Kitploit
도구/GitHubGitHub/kabiri-labs/sshfinder
ReconnaissanceVulnerability ScannersPort ScanningVulnerability AnalysisInformation GatheringNetwork SecurityCryptographyPenetration Testing
GitHubkabiri-labs/sshfinder

sshfinder

모든 포트를 스캔하고 SSH 배너를 검증하며 인증 방법, 취약한 암호화, Terrapin 취약점, 그리고 호스트 및 CIDR 범위 전반에 걸친 재사용된 호스트 키를 감사하는 병렬 SSH 서비스 검색 및 보안 감사 도구입니다.

저장소 보기
3142개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

sshfinder

CI version

네트워크의 모든 SSH 서비스를 찾아내고, 표준을 충족하는지 판단하며, 변경 사항이 발생하면 알려줍니다.

sshfinder는 필수 종속성이 없는 단일 Python 파일입니다. CIDR 범위를 지정하면 포트 22뿐만 아니라 실제로 수신 대기 중인 모든 곳에서 SSH를 발견하고, 각 서비스가 실제로 SSH를 사용하는지 확인하며, 암호화 상태를 평가하고, 정책을 위반하는 항목이 있으면 0이 아닌 종료 코드를 반환합니다.


해결하는 문제

대부분의 팀은 자체 SSH 자산에 대한 세 가지 질문에 답할 수 없습니다:

  1. SSH 서비스가 몇 개이고 어디에 있나요? 머신 수가 아니라 — 2019년에 계약자가 설정한 포트 2222의 서비스를 포함한 수신 대기 중인 SSH 서비스의 수입니다.
  2. 모두 표준을 충족하나요? 비밀번호 로그인 비활성화, 취약한 암호화 방식 없음, Terrapin에 노출되지 않음. 주장이 아닌 증명 가능하게.
  3. 어젯밤 이후 무엇이 변경되었나요? 이동한 호스트 키. 새로 나타난 서비스. 재구축 후 다시 활성화된 비밀번호 인증.

기존 도구들은 각각 이 문제의 일부만 해결하고 멈춥니다:

도구SSH 발견평가플릿 전체 대상
nmap예얕음, NSE 스크립트 사용예
ssh-audit아니요 — 호스트 하나를 직접 지정심층적아니요
masscan / zmap인터넷 규모아니요예
sshfinder예예예

이 도구는 발견 및 평가 및 판정을 하나의 산출물로 제공하는 그 격차를 메우기 위해 존재합니다. 이미 알고 있는 단일 호스트만 감사하면 되는 경우 ssh-audit를 사용하세요. 단일 서비스에 대해 이 도구보다 더 심층적으로 분석합니다.

대상 사용자

  • 내부 보안 및 자산 인벤토리. 자산 내 모든 SSH 서비스의 기록을 구축하고 유지하며 CSV 또는 JSON으로 내보냅니다.
  • 규정 준수 의무가 있는 플랫폼 및 SRE 팀. 예약된 일정과 종료 코드로 VPC의 어떤 호스트도 비밀번호 로그인을 허용하지 않거나 취약한 암호화를 제공하지 않음을 증명합니다.
  • 양자 이후(post-quantum) 마이그레이션을 실행하는 모든 사람. 플릿 중 얼마나 많은 부분이 여전히 양자 이후 키 교환을 협상할 수 없는지, 그리고 정확히 어떤 서비스인지에 대한 하나의 숫자.

침투 테스터는 감사 및 SOCKS 피벗 기능을 유용하게 사용할 수 있지만, 이 도구는 일회성 작업이 아니라 소유한 자산에 대해 동일한 스캔을 반복적으로 실행하는 데 초점을 맞춥니다.


빠른 시작

git clone https://github.com/kabiri-labs/sshfinder.git
cd sshfinder
python sshfinder.py 10.0.0.0/24 -p 22,2222

설치 불필요, 종속성 없음. Python 3.9+ 필요.

세 가지 주요 기능을 세 가지 명령으로:

# 1. 인벤토리 — 어떤 SSH가 있나요?
python sshfinder.py 10.0.0.0/24 --audit --format csv -o ssh-inventory.csv

# 2. 판정 — 표준을 충족하나요? (아니면 3으로 종료)
python sshfinder.py 10.0.0.0/24 -p 22,2222 --policy baseline

# 3. 드리프트 — 어젯밤 이후 무엇이 변경되었나요?
python sshfinder.py 10.0.0.0/24 -p 22,2222 --baseline yesterday.json \
    --fail-on-drift

1. 인벤토리

비표준 포트의 SSH 서비스가 바로 아무도 기록하지 않은 것이기 때문에 전체 65535개 포트 스캔이 기본값입니다. 모든 열린 포트에 레이블이 지정되므로 열린 포트가 SSH 포트로 조용히 계산되지 않습니다:

=== 10.0.0.5 ===
  open: 10.0.0.5:22 [SSH], 10.0.0.5:8080 [not ssh]
  SSH  10.0.0.5:22  (SSH-2.0-OpenSSH_7.4)

확인은 와이어의 첫 바이트를 보는 것이 아니라 실제 RFC 4253 식별 교환입니다. 먼저 법적 배너를 출력하는 서버, 클라이언트가 자신을 식별할 때까지 기다리는 서버, 또는 배너가 TCP 세그먼트로 분할되어 도착하는 서버 모두 올바르게 인식됩니다 — 각각은 단순한 구현에서 오탐(false negative)이 되는 경우입니다.

각 서비스의 전체 정보를 보려면 --audit를 추가하세요:

  SSH  10.0.0.5:22  (SSH-2.0-OpenSSH_7.4)
       host key: ssh-ed25519 SHA256:T/ZM4jOL4amTsO5K3AaCdg2...
       auth: publickey, password  [!] password auth enabled
       [!] Terrapin (CVE-2023-48795): VULNERABLE
       [!] weak ciphers: aes128-cbc
           aes128-cbc [weak]: CBC mode is vulnerable to the SSH plaintext-recovery attack (CVE-2008-5161) and, …

공유 SSH 호스트 키 (가능한 공유/복제 호스트):
  SHA256:T/ZM4jOL4amTsO5K3AaCdg2...
    -> 10.0.0.5:22, 10.0.0.9:22

마지막 블록은 알아둘 가치가 있습니다: 여러 머신에서 호스트 키를 재사용하는 것은 일반적으로 복제된 VM 또는 공유 이미지를 의미하며, 한 호스트를 손상시키면 모든 호스트의 정체성이 손상됨을 의미합니다.

양자 이후 대비 상태

OpenSSH 10.0은 mlkem768x25519-sha256을 기본 키 교환으로 만들었고, 10.1은 클래식 세션이 지금 저장, 나중에 해독 캡처에 노출된다고 경고합니다. --pq-report는 KEXINIT만 사용하여 플릿 수준 질문에 직접 답하므로 타사 라이브러리가 필요 없습니다:

python sshfinder.py 10.0.0.0/24 -p 22,2222 --pq-report
Post-quantum readiness:
  1/3 service(s) negotiate post-quantum key exchange with a current client
  [!] no PQ key exchange offered (1):
        10.0.0.2:22
  [!] pre-standard PQ only (1) - looks post-quantum but is not:
        10.0.0.3:22
  2 service(s) exposed to store-now-decrypt-later capture; upgrade to OpenSSH 9.0+

pre-standard 범주가 사람들을 놀라게 하는 부분입니다. [email protected] 또는 Kyber 초안을 광고하는 서버는 알고리즘 덤프에서 양자 이후처럼 보이지만, OpenSSH는 2020년에 해당 철회된 매개변수 세트를 제거했습니다 — 따라서 현재 클라이언트는 공통 방법을 찾지 못하고 클래식 암호화로 대체됩니다. 준비된 것으로 계산되면 전혀 확인하지 않는 것보다 더 나쁩니다.

2. 판정

보고서는 문제를 설명합니다. 정책은 문제를 주장하며 빌드를 실패시킬 수 있습니다:

python sshfinder.py 10.0.0.0/24 -p 22,2222 --policy baseline; echo "exit $?"
Policy 'baseline':
  No password login, no Terrapin exposure, no weak algorithms.
  1/3 service(s) pass
  [FAIL] 1 service(s):
        10.0.0.3:22
          - password_auth: password login accepted: publickey, password
          - terrapin: vulnerable to Terrapin (CVE-2023-48795)
          - post_quantum (warn): post-quantum readiness is absent, ready required
  [warn] 1 service(s):
        10.0.0.2:22
          - post_quantum (warn): post-quantum readiness is absent, ready required
exit 3

baseline, strict, pq의 세 가지 정책이 내장되어 있으며, 배포판 이름이 아닌 적용하는 결과에 따라 이름이 지정됩니다. 규칙은 fail 또는 warn 심각도를 가지며 --fail-on이 어떤 게이트를 결정하므로 팀은 먼저 경고로 더 엄격한 기준을 채택하고 나중에 편집 없이 승격할 수 있습니다.

JSON으로 직접 작성:

{
  "name": "house-rules",
  "description": "What we expect of every SSH service.",
  "rules": [
    {"check": "password_auth", "severity": "fail"},
    {"check": "terrapin", "severity": "fail"},
    {"check": "post_quantum", "require": "ready", "severity": "warn"},
    {"check": "forbid", "field": "ciphers",
     "algorithms": ["3des-cbc", "arcfour"], "severity": "fail"},
    {"check": "require", "field": "kex_algorithms",
     "algorithms": ["curve25519-sha256"], "severity": "fail"}
  ]
}

검사 항목: password_auth, terrapin, weak_algorithms, post_quantum (require: ready, legacy 또는 absent 포함), 그리고 kex_algorithms, host_key_algorithms, ciphers 또는 macs의 field에 대한 forbid / require.

그 외의 모든 것은 스캔이 시작되기 전에 정책이 로드될 때 하드 오류입니다. 이해하지 못하는 규칙을 조용히 건너뛰는 게이트는 게이트가 없는 것보다 더 나쁩니다: 실행이 녹색으로 표시되고 아무도 검사가 실행되지 않았다는 것을 알지 못합니다.

$ sshfinder 10.0.0.0/24 --policy house.json
sshfinder: error: rule 1: unknown check 'pasword_auth'
  (known: forbid, password_auth, post_quantum, require, terrapin, weak_algorithms)

3. 드리프트

어제의 보고서와 비교하여 매일 밤 실행하고 변경된 사항만 확인합니다:

# 매일 밤, cron에서:
python sshfinder.py 10.0.0.0/24 -p 22,2222 --audit --json -o today.json
python sshfinder.py 10.0.0.0/24 -p 22,2222 --baseline yesterday.json \
    --fail-on-drift
Baseline drift (vs yesterday.json):
  [alert] 2 change(s):
        10.0.0.5:22  SHA256:T/ZM4jO... -> SHA256:9aKm2Qx...; expected only after a rebuild or key rotation
        10.0.0.3:22  password login is now accepted
  [added] 1 change(s):
        10.0.0.9:2222  new SSH service (SSH-2.0-OpenSSH_9.6)
  [improved] 1 change(s):
        10.0.0.7:22  post-quantum readiness rose from absent to ready

변경된 호스트 키가 여기서 가장 중요한 신호입니다 — 재구축 또는 키 교체 후에만 예상되며, 그 외의 경우에는 항상 확인할 가치가 있습니다.

alert만 --fail-on-drift를 게이트합니다. 폐기된 호스트는 일반적인 변동이며, 이로 인해 야간 작업이 실패하면 모든 사람이 결과를 무시하도록 훈련될 것입니다.

비교는 변경 사항을 임의로 만들지 않도록 주의합니다. 두 스캔 모두에서 측정되지 않은 필드는 변경된 것으로 보고되지 않으며, 두 스캔 모두에 존재하는 호스트만 비교되고, 호스트 키 지문을 보유한 기준선은 이 스캔이 심층 프로브도 실행하도록 만듭니다 — 따라서 얕은 재스캔이 모든 키가 사라진 것으로 읽히지 않습니다.


출력 형식

--format text|json|sarif|csv, 선택적으로 -o로 파일에 기록.

  • csv — 확인된 각 SSH 서비스당 한 행. 자산 인벤토리가 실제로 정렬 및 필터링되는 형태.
  • json — 기본 보고서이자 --baseline의 입력 형식.
  • sarif — OASIS 스키마에 대해 검증된 SARIF 2.1.0. 결과는 host:port 논리적 위치에 고정되고 안정적인 지문을 가지므로 소비자는 매번 새 알림을 여는 대신 야간 실행에서 동일한 결과를 추적합니다.
  • --stream — 각 포트가 열리고 각 서비스가 확인될 때 플러시되는 줄바꿈 구분 JSON 이벤트로, 파이프라인이 스캔이 여전히 실행되는 동안 첫 번째 결과에 대해 작업할 수 있습니다:
python sshfinder.py 10.0.0.0/24 --stream -q | jq -c 'select(.event=="ssh")'
{"event":"ssh","elapsed":0.164,"host":"10.0.0.5","port":22,"banner":"SSH-2.0-OpenSSH_9.6"}
{"event":"ssh","elapsed":0.881,"host":"10.0.0.9","port":2222,"banner":"SSH-2.0-dropbear"}

SARIF 및 GitHub 코드 스캐닝에 관하여. SARIF 결과는 비어 있지 않은 아티팩트 위치를 포함해야 하며, 그렇지 않으면 upload-sarif가 파일을 거부하므로 논리적 위치와 함께 합성 ssh://host:port URI가 출력됩니다. 이는 저장소의 파일로 확인되지 않으므로 알림이 코드 앵커 없이 나타납니다. 이를 일반적인 보안 도구용 SARIF로 취급하세요 — VS Code SARIF 뷰어, Azure DevOps, 보관용 — diff에 주석을 다는 방법이 아닙니다.

종료 코드

도구 다운로드