Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ssh-enum — This project explores whether modern OpenSSH reveals valid usernames through subtle response or timing differences. CVE-2016-6210 user enumeration investigation ( Welch's t-test, Cohen's d, and detection engineering ) on a controlled lab on Ubuntu 22.04.5 LTS, it also examines the traces such attempts leave behind and how they can be detected.. | Kitploit
도구/GitHubGitHub/alisha-chaudhary/ssh-enum
ReconnaissanceVulnerability AnalysisInformation GatheringPenetration TestingPapers & ResearchLearning & EducationLog Analysis
GitHubalisha-chaudhary/ssh-enum

ssh-enum

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →

소개

This project explores whether modern OpenSSH reveals valid usernames through subtle response or timing differences. CVE-2016-6210 user enumeration investigation ( Welch's t-test, Cohen's d, and detection engineering ) on a controlled lab on Ubuntu 22.04.5 LTS, it also examines the traces such attempts leave behind and how they can be detected..

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

ssh-enum

CVE-2016-6210에 대한 통계적 검증 연구

널리 알려진 OpenSSH 사용자 이름 열거 취약점을 통계적 분석을 사용하여 재현 가능하게 재조사합니다.

이 프로젝트는 문서화된 OpenSSH 타이밍 사이드 채널인 CVE-2016-6210을 재조사하여, 기본 PAM 구성을 사용하는 최신 Ubuntu Server에서 여전히 관찰 가능한지 확인합니다.

게시된 동작이 여전히 유효하다고 가정하지 않고, 이 프로젝트는 Welch의 t-검정과 Cohen의 d를 사용하여 수동 프로빙, Hydra, Metasploit을 통해 수집된 인증 타이밍 측정값을 평가하여, 측정 노이즈로부터 진정한 타이밍 신호를 구별합니다.

이 연구는 테스트된 기본 구성에서 통계적으로 유의미한 타이밍 차이가 없음을 발견하여, 게시된 보안 주장에 대한 재현 가능한 실험과 증거 기반 검증의 가치를 입증했습니다.


⚠️ 법적 고지

이 프로젝트는 자체 소유의 격리된 실험실 환경에서 완전히 수행되었습니다. 모든 결과는 테스트된 구성에만 적용됩니다. 소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템을 절대 테스트하지 마십시오.


목차

  • 문제 정의
  • 실험실 설정
  • 방법론
  • 구축 내용
  • 관찰 및 발견
  • 사고 과정
  • 보안 위험
  • 완화 전략
  • 향후 개선 사항
  • 프로젝트 구조
  • 빠른 시작
  • 참고 자료

🎯 문제 정의

사용자 열거 - 유효한 자격 증명 없이 특정 사용자 이름이 원격 시스템에 존재하는지 확인할 수 있는 능력입니다. 이는 계정 손상으로 이어지는 공격 체인의 첫 번째 중요한 단계입니다.``` Reconnaissance → [User Enumeration] → Password Attack → Access ↑ This project investigates here

root@kitploit:~
If an attacker can distinguish "this user exists" from "this user does not exist" by analysing server responses, they can dramatically reduce the keyspace for subsequent
brute force or credential stuffing attacks.

SSH is a frequent target because it is nearly universally exposed, handles password authentication, and older implementations had measurable timing differences between valid and invalid usernames (CVE-2016-6210).

**This investigation asks two questions:**

1. Does modern OpenSSH on Ubuntu 22.04.5 LTS with default configuration leak username existence
   via response messages, timing, or tool-reported signals?
2. If an attacker makes the attempt regardless, what artefacts does it leave? and how
   reliably can those be detected?

---

## 🖥️ Lab Setup

All testing was performed in a fully isolated host-only virtual network with no internet
exposure.

| 머신      | OS                        | 역할                                    | IP               | SSH 버전      |
|----------|---------------------------|-----------------------------------------|------------------|------------------|
| 공격자 | Kali Linux 2024.1         | 공격 도구, 분석 스크립트       | 192.168.56.5     | —                |
| 타겟   | Ubuntu Server 22.04.5 LTS | OpenSSH를 **기본** 설정으로 실행 중 | 192.168.56.10    | OpenSSH 8.9p1    |

**타겟 SSH 설정 (`/etc/ssh/sshd_config` 기본값):**```
PasswordAuthentication yes
UsePAM yes                  # Key setting — normalises timing via dummy hash
PermitRootLogin prohibit-password
MaxAuthTries 6
LogLevel INFO

UsePAM yes는 중요한 강화 설정입니다. 이 설정은 OpenSSH가 존재하지 않는 사용자에 대해 더미 bcrypt 계산을 수행하도록 하여, 실제 비밀번호 확인과 타이밍을 일치시킵니다. 이는 CVE-2016-6210에 대한 대응책으로 특별히 도입되었습니다.


🔬 방법론

각 공격 방법은 깨끗한 로그 상태에서 독립적인 시험으로 실행되었습니다:```bash

Reset log state on target before each trial

sudo truncate -s 0 /var/log/auth.log

After attack: collect evidence

sudo cp /var/log/auth.log ~/evidence/trial-N-auth.log

root@kitploit:~
Evidence collected per trial:
- Tool stdout/stderr (saved verbatim)
- `/var/log/auth.log` from target
- Response timing samples via `time.perf_counter()` in `manual_ssh.py`
- SSH banner grabbed before any auth attempt

### 공격 방법

| 방법                | 도구                                 | 단어 목록                | 목적                                         |
|-----------------------|--------------------------------------|-------------------------|-------------------------------------------------|
| 수동 SSH            | `ssh` CLI + Paramiko                 | 50개의 일반적인 사용자 이름     | 기준; 원시 응답 검사                 |
| Hydra 무차별 대입     | `hydra`                              | 동일한 50개                 | 자동화; Hydra 내장 열거 모드 활용 |
| Metasploit 모듈     | `auxiliary/scanner/ssh/ssh_enumuser` | 동일한 50개                 | 프레임워크 전용 열거 모듈        |
| 배너 지문 수집 | 사용자 정의 `BannerFingerprinter`         | N/A                     | 인증 없는 버전 유출, CVE 확인                 |
| 타이밍 분석       | 사용자 정의 `ResponseAnalyzer`            | 유효 vs 무효 서브셋 | 통계적 부채널 확인                  |

---

## 구축된 내용

이 프로젝트는 단순히 도구를 실행하는 것을 넘어, 각 공격과 모든 탐지 로직을 구조화된 Python 코드베이스로 감싸고, 파이프라인 전체를 처음부터 끝까지 실행하는 오케스트레이터를 제공합니다.

### 공격 도구 (`src/attack_tools/`)

**`ManualSSHEnumerator`** — 각 사용자 이름을 `paramiko`로 N번 테스트하여 정확한 타이밍, 결과 유형 및 SSH 배너를 기록합니다. 사용자 이름별 평균 및 표준편차를 계산합니다. 중요한 점은, 시도 간에 연결을 재사용하지 않으므로 각 샘플이 전체 서버 측 처리 시간을 포착합니다.

**`BannerFingerprinter`** — 원시 TCP 소켓을 통해 SSH 배너를 가져옵니다 (자격 증명 필요 없음). 구현 이름, 버전 문자열 및 OS 힌트를 파싱합니다. 로컬 CVE 레지스트리와 교차 참조합니다. `OpenSSH_8.9p1 Ubuntu-3ubuntu0.6`와 같은 버전은 정확한 서버 소프트웨어를 드러내며, 잠재적으로 인증 시도 전에 알려진 취약점을 식별할 수 있습니다.

**`HydraAutomation`** — Hydra 주변의 서브프로세스 래퍼. stdout을 파싱하여 성공적인 로그인, 오류 메시지 및 Hydra 자체 열거 판정(`does not support user enumeration`)을 추출합니다.

**`MetasploitScanner`** — 임시 리소스 스크립트를 작성하고 서브프로세스를 통해 `msfconsole`을 구동합니다. 강화 탐지 및 발견된 사용자 이름에 대한 출력을 파싱합니다.

### 탐지 도구 (`src/detection_tools/`)

**`LogParser`** — 정규식 기반 auth.log 파서로, 다섯 가지 SSH 이벤트 유형을 지원합니다: `failed_invalid_user`, `failed_valid_user`, `pre_auth_reject`, `accepted`, `disconnected`. 타임스탬프, 이벤트 유형, 사용자 이름, 소스 IP 및 포트가 포함된 구조화된 이벤트 딕셔너리를 반환합니다.

**`ResponseAnalyzer`** — 유효 사용자 이름과 무효 사용자 이름의 타이밍 분포에 대해 Welch의 t-검정을 수행합니다. 타이밍 델타(ms), p-값, Cohen의 d 효과 크기 및 평이한 언어 결론을 계산합니다. 임계값: delta ≥ 5ms AND p < 0.05인 경우 부채널 경고가 트리거됩니다.

**`EnumerationDetector`** — 네 가지 탐지 패턴:
- **빠른 사용자 프로브**: 슬라이딩 윈도우 - 동일한 IP, 60초 이내에 ≥10개의 고유 사용자 이름
- **단어 목록 상관 관계**: 시도된 사용자 이름과 알려진 공격 목록 간의 일치율
- **순차적 타이밍**: 시도 간 간격의 변동 계수 (낮은 CoV → 도구)
- **분산 프로빙**: 여러 IP에서 동일한 사용자 이름 (자격 증명 스터핑 정찰)

**`AlertingSystem`** — 경량 알림 발신기. 타임스탬프가 포함된 JSON 알림을 stdout으로 생성합니다. 필요에 따라 이메일/SIEM/웹훅 통합으로 확장 가능합니다.

### 오케스트레이터

**`run_investigation.py`** — 네 단계를 순차적으로 실행하고 결과를 `data/results/`에 기록하는 CLI 드라이버입니다. 전체 사용법은 `--help`와 함께 실행하세요.```bash
python run_investigation.py \
    -target 192.168.xx.xxxx \
    -usernames data/wordlists/common-usernames-50.txt \
    -log data/sample-logs/auth.log \
    -known-valid root ubuntu \
    -samples 10

관찰 및 발견

발견 1: 응답 일관성 — 핵심 방어

테스트된 가설: OpenSSH가 존재하지 않는 사용자와 존재하는 사용자(잘못된 비밀번호)에 대해 다른 오류 메시지를 반환하는가?```bash

Non-existent user

$ ssh [email protected] Permission denied (publickey,password).

Existing user, wrong password

$ ssh [email protected] Permission denied (publickey,password).

root@kitploit:~
**결과:** 응답은 바이트 단위로 동일합니다. 프로토콜은 아무것도 유출하지 않습니다.

**이유:** OpenSSH 7.3부터 `UsePAM yes`는 서버가 존재하지 않는 사용자에 대해 더미 `crypt()` 연산을 실행하도록 강제하여, 실제 실패한 인증의 타이밍과 오류 경로를 일치시킵니다. 이 수정은 CVE-2016-6210에 대한 직접적인 대응이었습니다.

---

### 발견 2: 타이밍 부채널 감지되지 않음

**테스트된 가설:** 오류 메시지가 일치하더라도, 유효한 사용자 이름과 유효하지 않은 사용자 이름 사이에 통계적으로 악용될 수 있는 측정 가능한 타이밍 차이가 있는가?

50개의 사용자 이름 각각에 대해 10개의 타이밍 샘플을 수집했습니다. (시스템에서 확인된) 알려진 유효 사용자를 유효하지 않은 사용자 풀과 비교했습니다.

| 측정 지표                      | 값                               |
|-----------------------------|-------------------------------------|
| 평균 타이밍 — 유효하지 않은 사용자 | ~312 ms                             |
| 평균 타이밍 — 유효 사용자   | ~311 ms                             |
| 델타                       | **~1 ms**                           |
| Welch의 t-검정 p-값      | > 0.40                              |
| 결론                  | **구별 가능한 부채널 없음** |

~1ms 델타는 5ms 노이즈 임계값보다 훨씬 낮으며 통계적으로 유의미하지 않습니다(p >> 0.05). OpenSSH의 더미 해시 계산은 효과적입니다.

---

### 발견 3: Hydra가 열거 지원 없음 보고

Hydra의 SSH 열거 모드는 세 가지 신호 중 하나에 의존합니다: 다른 오류 메시지, 다른 타이밍, 또는 다른 연결 동작. 세 가지 모두 정규화되면서, Hydra는 명시적으로 보고합니다:```
[ERROR] target ssh://192.168.56.10:22/ does not support user enumeration
[STATUS] 50/50 tries completed, 0 valid logins found

관찰된 부작용: 열거에 실패했음에도 불구하고, 50번의 모든 시도가 /var/log/auth.log에 소스 IP, 타임스탬프, 시도된 사용자 이름과 함께 기록됩니다. 공격자의 존재가 완전히 드러납니다.


발견 4: Metasploit이 스캔을 완료하기 전에 강화(Hardening)를 감지함

auxiliary/scanner/ssh/ssh_enumuser 모듈은 열거를 시도하기 전에 배너에서 OpenSSH 버전을 확인합니다. UsePAM yes가 설정된 버전 ≥ 7.3은 강화된 것으로 플래그 처리되고 모듈이 일찍 종료됩니다:``` [] 192.168.xx.xxxx:22 - SSH - Checking for vulnerability [] 192.168.xx.xxxx:22 - SSH - Target is not vulnerable: OpenSSH 8.9p1 (hardened)

root@kitploit:~
이것은 유용한 발견입니다: 배너 자체만으로도 공격자에게 열거 시도가 있기 전에 서버의 방어 태세를 알려줍니다.

---

### 발견 5: 열거가 실패하더라도 탐지는 신뢰할 수 있음

방어자의 관점에서 핵심 통찰: **공격이 성공하지 못하더라도 공격은 노이즈를 발생시킵니다**. 네 가지 탐지 패턴 모두 수집된 auth.log에 대해 올바르게 작동했습니다:

| 탐지                | 트리거                                           | 심각도 |
|----------------------|--------------------------------------------------|--------|
| 빠른 사용자 프로브   | Kali IP가 60초 내에 50개의 사용자 이름을 프로브함 | 높음   |
| 단어 목록 상관 관계  | 시도된 이름 48/50개가 단어 목록과 일치함           | 높음   |
| 순차적 타이밍        | 시도 간 CoV = 0.04 (도구 시그니처)               | 중간   |
| 배너 전용 프로브     | 사용자 이름을 보내기 전에 인증 전 연결 종료         | 낮음   |

---

## 사고 과정

### 왜 수동 SSH 열거를 먼저 했는가?

수동 테스트로 시작한 본능은 방법론적으로 타당했습니다: 도구 출력을 신뢰하기 전에 원시 프로토콜이 실제로 무엇을 말하는지 이해해야 합니다. `ssh ghost@target`을 실행하고 정확한 오류 메시지를 관찰하면 자동화에 시간을 투자하기 전에 열거할 *것이* 있는지 알 수 있습니다.

첫 번째 관찰인 `Permission denied (publickey,password)`가 사용자가 존재하는지 여부에 관계없이 동일하게 보인다는 점이 핵심 발견이었습니다. 그 이후의 모든 것은 해당 결과의 검증이었습니다.

### 만들어진 가정 (그리고 재검토)

초기 가정은 Hydra와 Metasploit이 수동 테스트보다 *더* 강력할 것이라는 것이었고, 따라서 수동이 실패하면 도구가 여전히 성공할 수 있을 것이라고 생각했습니다. 이는 예상된 방향으로는 틀렸지만 *그 이유*에서는 옳았습니다: 프로토콜 자체가 신호를 유출하지 않기 때문에 도구가 여기서 능력을 추가하지 않습니다. 도구는 동일한 프로토콜 위에서의 자동화일 뿐입니다.

검토할 가치가 있는 두 번째 가정: 첫 번째 수동 시도는 이후 시도보다 눈에 띄게 느렸고, 성공한 비밀번호 시도는 빨랐습니다. 처음에는 이것이 잠재적인 타이밍 신호로 해석되었습니다. 다시 생각해보면, 느려진 원인은 서버 측 처리 시간이 아니라 TCP 연결 설정 오버헤드(ARP 해결, 연결 설정)였습니다. 이를 통제하기 위해 TCP 핸드셰이크 *이후*의 `time.perf_counter()`로 측정하거나 첫 번째 샘플을 폐기하는 것이 더 엄격했을 것입니다. `ManualSSHEnumerator` 구현은 사용자 이름당 10개의 샘플을 수집하고 평균/표준편차를 보고하여 첫 번째 샘플 노이즈를 희석함으로써 이 문제를 해결합니다.

### 프로젝트 중에 변경된 사항

원래 범위는 좁았습니다: 세 개의 도구를 실행하고 작동하는지 문서화하는 것. 프로젝트는 두 방향으로 발전했습니다:

**내부로 (더 깊은 분석):** 초기 결과가 부정적이었을 때, 자연스러운 질문은 *왜*인지였습니다. 이는 OpenSSH 변경 로그, CVE-2016-6210, `UsePAM` 구현을 읽는 것으로 이어졌습니다. 메커니즘을 이해하는 것은 단순히 결과를 기록하는 것보다 더 가치 있습니다.

**외부로 (탐지 중심 전환):** 부정적인 공격 결과는 여전히 유용한 방어 데이터 포인트입니다. "열거가 실패했지만, 서버는 무엇을 보았는가?"로의 전환은 로그 분석 및 탐지 엔지니어링 구성 요소로 이어져, 일차원적인 도구 실행 연습을 양방향 조사로 바꾸었습니다.

### 다르게 했을 점

타이밍 측정은 호스트 전용 가상 네트워크에서 수행되었으며, 이는 실제 네트워크보다 지터가 적지만 결과가 낙관적이라는 것을 의미합니다. TCP 지연, 지터, 재전송이 있는 실제 환경에서는 노이즈 바닥이 더 높을 것이며, 타이밍 분석에는 사용자 이름당 더 많은 샘플이 필요할 것입니다. 더 강력한 방법론은 시뮬레이션된 WAN 링크(`tc netem`을 사용하여 제어된 지연 및 지터 도입)를 통해 테스트하여 현실적인 조건에서 결론이 어떻게 유지되는지 확인하는 것입니다.

---

## 보안 위험

이 실습에서는 열거가 성공하지 못했지만, 공격 표면과 관련 위험은 다음과 같습니다:

**열거가 *가능한* 경우 (예: 이전 OpenSSH, `UsePAM no`, 사용자 정의 PAM 스택):**
- 공격자는 무차별 대입 캠페인을 확인된 유효한 사용자 이름으로만 좁혀 탐지 위험을 줄이고 효율성을 극적으로 높일 수 있습니다.
- 비밀번호 스프레이(모든 유효한 사용자 이름에 대해 하나의 공통 비밀번호)와 결합하면 사용자별 `MaxAuthTries` 잠금을 우회합니다.

**열거 저항이 있더라도 적용되는 위험:**
- SSH 배너는 정확한 OpenSSH 버전과 OS를 유출합니다. `OpenSSH_8.9p1`을 본 공격자는 단일 인증 패킷을 보내기 전에 CVE-2024-6387(regreSSHion)이 적용되는지 즉시 확인할 수 있습니다.
- 모든 열거 시도는 소스 IP와 함께 기록됩니다. 로그 모니터링이 없는 경우, 느린 공격(시간당 한 번 시도)은 속도 기반 알림을 트리거하지 않고 수천 개의 사용자 이름을 프로브할 수 있습니다.
- `PasswordAuthentication yes`는 열거가 가능하지 않더라도 비밀번호 기반 공격 표면을 열어 둡니다. 사후 OSINT 자격 증명 공격(침해된 비밀번호 목록을 OSINT에서 얻은 사용자 이름에 사용)은 서버 측 열거가 전혀 필요하지 않습니다.

---

## 완화 전략

| 위협                  | 완화 조치                                                     | 필요한 구성 변경                    |
|-----------------------|---------------------------------------------------------------|-------------------------------------|
| 타이밍 부채널          | `UsePAM yes` 확인 (Ubuntu 기본값)                              | 없음 — 이미 기본값                    |                  
| 배너 버전 공개         | `sshd_config`에서 `VersionAddendum none` 및 `DebianBanner no`   | 예                                  |
| 비밀번호 기반 공격     | `PasswordAuthentication no` — 키 전용 인증                    | 예                                  |
| OSINT 후 무차별 대입   | `fail2ban` with `sshd` jail                                   | 설치 + 구성                         |
| 느린 열거             | SIEM으로 로그 전송; 시간당 IP당 >N개의 고유 사용자 이름 알림   | SIEM 필요                           |
| 루트 로그인            | `PermitRootLogin no`                                          | 예 (기본값은 `prohibit-password`)    |
| 인증 전 연결 끊기      | `MaxStartups 10:30:60`으로 인증되지 않은 연결 속도 제한        | 예                                  |

**강화된 배포를 위한 최소 권장 `sshd_config` 추가 사항:**```
PasswordAuthentication no
PermitRootLogin no
MaxAuthTries 3
MaxStartups 10:30:60
VersionAddendum none
LogLevel VERBOSE

향후 개선 사항

현재 프로젝트는 하나의 프로토콜을 하나의 구성에서 테스트합니다. 자연스러운 확장 방안:

동일 호스트의 다른 서비스 열거. SMTP (VRFY/EXPN), LDAP (속성 쿼리), HTTP 로그인 양식, SNMP는 모두 SSH가 강화된 동일 머신에서 일반적인 사용자명 유출 벡터입니다. 서비스 간 비교 연구는 보다 완전한 위험 그림을 제공할 것입니다.

비기본 SSH 구성 테스트. UsePAM no, 사용자 정의 PAM 모듈, Kerberos 인증 백엔드, 그리고 오래된 OpenSSH 버전(임베디드 시스템, 네트워크 장비에 배포됨)은 여전히 타이밍 누출을 보일 수 있습니다. 동일한 파이프라인을 의도적으로 취약한 구성에 대해 테스트하면 대비를 보여줄 것입니다.

inotify를 이용한 실시간 탐지. 현재 탐지는 복사된 로그 파일을 대상으로 사후 분석을 수행합니다. 프로덕션 등급 버전은 inotify (또는 tail -f + 파서 스레드)를 사용하여 열거 시도가 시작된 후 몇 초 이내에 거의 실시간으로 탐지하고 경고할 것입니다.

네트워크 수준 탐지. Auth.log는 호스트 기반 아티팩트입니다. 패킷 수준 탐지로 보완하세요: 인증 핸드셰이크를 완료하기 전에 종료되는 포트 22로의 짧은 TCP 연결은 배너 전용 핑거프린팅의 특징입니다. 이는 Zeek 또는 Suricata 규칙으로 구현될 수 있습니다.

통계 보고를 위한 Jupyter 노트북. 수집된 타이밍 데이터는 시각화에 적합합니다 - 사용자별 타이밍 분포의 상자 그림, 시간에 따른 시도 빈도의 산점도, 소스 IP의 히트맵. 노트북은 분석을 재현 가능하고 공유 가능하게 만들 것입니다.


프로젝트 구조```

ssh-enumeration-analysis/ │ ├── README.md ├── run_investigation.py ← Full pipeline orchestrator (start here) ├── requirements.txt │ ├── src/ │ ├── attack_tools/ │ │ ├── init.py │ │ ├── manual_ssh.py ← Paramiko-based timing probe │ │ ├── banner_fingerprinter.py ← No-auth banner grab + CVE lookup │ │ ├── hydra_automation.py ← Hydra subprocess wrapper │ │ └── metasploit_scanner.py ← MSF console automation │ │ │ └── detection_tools/ │ ├── init.py │ ├── log_parser.py ← auth.log regex parser │ ├── response_analyzer.py ← Welch t-test + Cohen's d │ ├── pattern_detector.py ← 4 detection patterns │ └── alerting_system.py ← JSON alert emitter │ ├── data/ │ ├── sample-logs/ │ │ ├── auth-baseline.log ← Normal SSH activity (no attacks) │ │ ├── auth-hydra-run.log ← Captured during Hydra trial │ │ └── auth-msf-run.log ← Captured during Metasploit trial │ │ │ ├── wordlists/ │ │ ├── common-usernames-50.txt │ │ └── common-usernames-100.txt │ │ │ └── results/ ← Auto-generated (gitignored) │ ├── investigation-summary.json │ ├── manual-enumeration-results.json │ ├── timing-analysis.json │ └── detection-report.json │ ├── tests/ │ ├── test_enumeration.py │ ├── test_detection.py │ └── test_log_parser.py │ ├── case-study/ │ └── User_Enumeration_attempt_using_manual_SSH.docx │ └── screenshots/ ├── manual-ssh-same-response.png ├── hydra-no-enumeration-support.png ├── metasploit-hardened-detected.png ├── auth-log-hydra-evidence.png └── detection-alerts-output.png

root@kitploit:~
## ⚡ 빠른 시작```bash
# 1. Clone and install dependencies
git clone https://github.com/Alisha-chaudhary/ssh-enum
cd ssh-enum
pip install -r requirements.txt

# 2. Run just the banner fingerprint (no credentials needed)
python -c "
from src.attack_tools.banner_fingerprinter import BannerFingerprinter
r = BannerFingerprinter().grab('192.168.xx.xxxx')
print(r.raw_banner, r.cves)
"

# 3. Run the full investigation pipeline
python run_investigation.py \
    -target 192.168.xx.xxxx \
    -usernames data/wordlists/common-usernames-50.txt \
    -log data/sample-logs/auth-hydra-run.log \
    -known-valid root ubuntu \
    -samples 10

# 4. Analyse a log file only (no live target needed)
python -c "
from src.detection_tools.pattern_detector import EnumerationDetector
d = EnumerationDetector('data/sample-logs/auth-hydra-run.log')
import json; print(json.dumps(d.run_all(), indent=2))
"

요구 사항:``` paramiko>=3.3.1 scipy>=1.11.0 Hydra and Metasploit must be installed separately (pre-installed on Kali Linux).

root@kitploit:~
---

## 📚 참고 자료

| 자원                                                                              | 관련성                                       |
|-----------------------------------------------------------------------------------|-----------------------------------------------|
| [CVE-2016-6210](https://nvd.nist.gov/vuln/detail/CVE-2016-6210)                   | 이 프로젝트가 테스트한 타이밍 부채널 공격      |
| [CVE-2024-6387 (regreSSHion)](https://nvd.nist.gov/vuln/detail/CVE-2024-6387)     | OpenSSH ≤ 9.7에서의 인증되지 않은 원격 코드 실행 |
| [OpenSSH sshd_config manual](https://man.openbsd.org/sshd_config)                 | `UsePAM`, `MaxAuthTries`, `VersionAddendum`   |
| [OWASP — User Enumeration](https://owasp.org/www-community/attacks/User_Enumeration) | 일반적인 사용자 열거 공격 패턴                |
| [RFC 4252 — SSH Authentication Protocol](https://tools.ietf.org/html/rfc4252)     | 프로토콜 사양; 오류 메시지 동작 정의            |
| [fail2ban documentation](https://www.fail2ban.org/wiki/index.php/Main_Page)       | 속도 제한 및 IP 차단                           |

---

## 🎓 입증된 기술

| 영역                    | 근거                                                                                                   |
|-------------------------|--------------------------------------------------------------------------------------------------------|
| SSH 프로토콜 내부        | `UsePAM` 타이밍 정규화, CVE-2016-6210 수정, 배너 정보 노출에 대한 이해                                  |
| 공격 보안               | Hydra, Metasploit 및 맞춤형 Paramiko 프로빙을 체계적인 방법론으로 실제 사용                               |
| 통계 분석               | 타이밍 데이터에 적용된 Welch의 t-검정, Cohen의 d, 변동 계수                                             |
| 탐지 엔지니어링          | 네 가지 패턴 유형에 걸친 로그 기반 IOC 탐지; 구조화된 알림 출력                                          |
| Python 엔지니어링        | 데이터클래스, 타입 힌트, 서브프로세스 자동화, 정규식 파싱, 통계 라이브러리                                |
| 보안 연구                | 가설 → 통제된 실험 → 증거 수집 → 문서화된 결과 → 실행 가능한 결론                                        |

---

**상태:** 완료 | **테스트 환경:** Ubuntu Server 22.04 LTS + OpenSSH 8.9p1 | Kali Linux 2024.1
도구 다운로드