📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 232편
이전 글: 231. Directory Scan · 다음 글: 233. Brute Force와 Scan 구분

1. 개념

SSH Brute Force는 SSH 서비스(기본 22/tcp)에 계정과 비밀번호 조합을 반복해서 넣어 로그인을 시도하는 공격입니다. 포트 스캔으로 22번이 열린 것을 확인한 뒤 이어지는 경우가 많아, 정찰 다음 단계로 분류됩니다. 탐지 규칙의 설계(무엇을 세는가, track 방향)는 292. Brute Force 탐지에서 다뤘고, 이 글은 관제자가 sshd 로그에서 무엇을 읽어야 하는가에 집중합니다.

SSH는 암호화되어 있어 네트워크 장비는 연결 횟수만 볼 수 있고, 로그인 성공·실패와 계정 이름은 서버의 인증 로그에만 남습니다.

위치보이는 것보이지 않는 것
방화벽22번 포트 연결 수, 세션 길이계정, 성공 여부
IDS짧은 시간 다수 연결(임계치 Alert)비밀번호 입력 결과
sshd 인증 로그계정, 결과, 출발지 IP·포트(서버에 기록되지 않는 네트워크 정보)

2. 동작 원리

한 번의 SSH 연결 안에서도 여러 번 인증을 시도할 수 있으므로, 연결 수와 실패 횟수는 같지 않습니다. sshd는 연결당 인증 시도 횟수를 MaxAuthTries(기본 6)로 제한하며, 넘으면 연결을 끊고 로그를 남깁니다.

출발지 ── TCP 연결 (22) ──→ 서버
   ↓ 키 교환·암호화 채널 수립
   ↓ 인증 시도 1 ── 실패 → "Failed password for ..."
   ↓ 인증 시도 2 ── 실패 → "Failed password for ..."
   ↓ ... MaxAuthTries 초과 → 연결 종료 ("maximum authentication attempts exceeded")
   ↓ 새 연결로 반복
   ↓
(성공 시) "Accepted password for <계정> from <IP>" → 세션 열림 ★ 최우선 확인

3. 주요 특징

sshd 로그 메시지는 OpenSSH 버전에 따라 문구가 조금씩 다르지만, 관제에서 자주 보는 메시지는 다음과 같습니다.

메시지(요지)의미관제 판단
Failed password for <계정>존재하는 계정의 비밀번호 실패반복 시 대입 시도
Failed password for invalid user <계정>존재하지 않는 계정으로 시도계정 목록 대입 가능성
Invalid user <계정> from <IP>없는 계정 접근흔한 계정명 반복 여부 확인
maximum authentication attempts exceeded연결당 시도 한도 초과자동화 도구 가능성
Connection closed by ... [preauth]인증 전에 연결 종료단독이면 배너 확인·스캔일 수 있음
Accepted password / Accepted publickey로그인 성공실패 뒤 성공이면 최우선
  • 로그 위치: Rocky(RHEL 계열)는 /var/log/secure, Ubuntu는 /var/log/auth.log입니다. systemd 저널에서는 서비스 이름이 Rocky는 sshd, Ubuntu는 보통 ssh입니다.
  • 계정 분포가 패턴을 알려 줍니다. root·admin 같은 흔한 계정에 집중되면 일반적인 자동화 대입, 실제 직원 계정명이 섞여 있다면 사전 정보 수집 뒤의 표적 시도일 수 있습니다.

4. 예시

sshd 인증 로그 형식 예시입니다(값은 환경마다 다름).

Sep 30 03:10:01 web01 sshd[4101]: Invalid user test from 203.0.113.70 port 51201
Sep 30 03:10:03 web01 sshd[4101]: Failed password for invalid user test from 203.0.113.70 port 51201 ssh2
Sep 30 03:10:09 web01 sshd[4115]: Failed password for root from 203.0.113.70 port 51230 ssh2
Sep 30 03:10:15 web01 sshd[4115]: error: maximum authentication attempts exceeded for root from 203.0.113.70 port 51230 ssh2 [preauth]

실습 예시 — 본인 소유 실습 서버에서 출발지·계정별 실패 집계와 성공 여부를 확인하는 방어 측 명령입니다.

# Rocky
sudo grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head
sudo journalctl -u sshd --since "2026-09-30 03:00" | grep -E "Accepted|Failed"
# Ubuntu
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head
sudo journalctl -u ssh --since "2026-09-30 03:00" | grep -E "Accepted|Failed"

# 의심 출발지의 성공 로그인 여부 (Ubuntu 예)
sudo grep "Accepted" /var/log/auth.log | grep "203.0.113.70"

$(NF-3)은 "Failed password ... from IP port N ssh2" 형식에서 IP 위치를 가리킵니다. 메시지 형식이 다르면 위치가 달라지므로 결과를 눈으로 확인합니다.

집계 결과판단조치
한 IP, 실패 수백 건, 성공 없음대입 시도(실패)출발지 차단, 보고
한 IP, 실패 후 Accepted계정 탈취 의심즉시 에스컬레이션, 세션 확인
여러 IP, 같은 계정분산 대입계정 보호 조치 검토

5. 보안 관점

  • SSH 대입의 성패는 비밀번호 인증 허용 여부에 크게 좌우됩니다. 공개키 인증만 허용(PasswordAuthentication no), PermitRootLogin 제한, 관리 IP 제한이 가장 효과적인 예방책입니다.
  • 반복 실패 IP를 자동 차단하는 도구(fail2ban 등)나 HIDS 능동 대응은 소음을 줄여 주지만, 차단 전까지의 시도와 성공 여부는 여전히 로그로 확인해야 합니다.
  • 포트를 22번이 아닌 번호로 옮기면 자동화 소음은 줄지만 전체 포트 스캔에는 발견됩니다. 보안 대책이 아니라 소음 감소책입니다.

6. SOC 관점

SSH 반복 연결 Alert (방화벽·IDS)
   ↓ 대상 서버 인증 로그 조회
   ↓ 계정 분포 확인 (존재 계정? 관리자 계정?)
성공 없음 → 출발지 차단·기록, 같은 IP의 다른 서버 시도 검색
성공 있음 → 계정 탈취 의심: 로그인 이후 활동 확인, 계정 조치 요청, 에스컬레이션

관제자가 확인할 질문

  • 같은 출발지·계정 조합에 Accepted 로그가 있는가? 있다면 그 이후 명령 실행·추가 접속은?
  • 대상 계정은 실제로 존재하는가? 존재하지 않는 계정 비율은?
  • 같은 출발지가 다른 서버의 22번에도 시도했는가(방화벽 로그)?
  • 인증 로그가 SIEM에 정상 수집되고 있는가(수집 공백이면 "성공 없음"을 단정할 수 없음)?

오탐 주의: 비밀번호 변경 후 예전 비밀번호를 저장한 자동화 스크립트·백업 작업, 키 파일 경로가 잘못된 배포 도구는 같은 계정으로 짧은 주기의 실패를 반복합니다. 출발지가 내부 고정 서버라면 설정 오류를 먼저 확인합니다. Wazuh 등 HIDS에서 이 로그가 어떤 Alert로 묶이는지는 239. Wazuh Alert 분석에서 다룹니다.


7. 핵심 정리

  • SSH Brute Force는 22번 서비스에 계정·비밀번호 조합을 반복 입력하는 시도이며, 결과는 sshd 인증 로그에만 남습니다.
  • 로그 위치는 Rocky /var/log/secure, Ubuntu /var/log/auth.log이고, 저널 서비스 이름은 각각 sshd, ssh입니다.
  • Failed password, invalid user, maximum authentication attempts exceeded, Accepted 메시지의 의미를 구분합니다.
  • 가장 중요한 확인은 같은 출발지·계정의 실패 뒤 성공 여부입니다.
  • 예방은 공개키 인증 전용, root 로그인 제한, 관리 IP 제한이며, 포트 변경은 소음 감소책입니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글