070. 계정 · 인증 보안 — SSH 인증 실패 로그 분석

changseop lee·5일 전

시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 20/50편 (전체 070/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

인증 실패 로그는 종류가 다양하고, 메시지마다 다른 상황을 의미합니다. 이를 구분하지 못하면 모든 실패가 같은 "brute-force"로 뭉뚱그려집니다.

Failed password for devops from IP        → 존재하는 계정, 비밀번호 틀림
Failed password for invalid user oracle   → 존재하지 않는 계정 시도(열거)
Invalid user oracle from IP               → 위와 짝을 이루는 메시지
Failed publickey for devops from IP       → 키 인증 실패(등록 안 된 키)
Connection closed ... [preauth]           → 인증 완료 전 종료(스캔·배너 수집)
maximum authentication attempts exceeded  → 한 연결에서 여러 번 시도(A영역 012편)
User devops not allowed because ...        → 접근 제어로 거부(A영역 011편)

2. 왜 중요한가

  • invalid user는 존재하지 않는 계정을 노린 것이라 계정 열거(071편)의 신호입니다. 반대로 Failed password for <실존계정>은 그 계정이 표적임을 의미합니다.
  • Failed publickey가 많으면 키 기반 접근을 시도하는 것으로, 비밀번호 brute-force와 대응이 다릅니다.
  • preauth 종료는 인증 시도조차 아닌 경우(스캔·배너 수집, A영역 034편)가 많아, brute-force 집계에서 분리해야 정확합니다.

3. 핵심 명령어 / 설정

메시지의미대응 방향
Failed password for <user>실존 계정 비밀번호 실패표적 계정 보호(072편)
Failed password for invalid user / Invalid user존재하지 않는 계정계정 열거(071편)
Failed publickey키 인증 실패미등록 키 접근 시도
Connection closed ... [preauth]인증 전 종료스캔·배너(034편)
Received disconnect ... [preauth]클라이언트 중단자동화 도구 가능성

4. 실습 (실습 예시)

LOG=/var/log/secure        # Ubuntu: /var/log/auth.log
# 1) 실패 메시지 유형별 집계
sudo grep -E 'Failed |Invalid user|preauth' $LOG | \
  grep -oE 'Failed password for invalid user|Failed password for|Failed publickey for|Invalid user|closed by .* \[preauth\]|Received disconnect.*\[preauth\]' | \
  sort | uniq -c | sort -rn

# 2) 실존 계정 대상 실패 vs invalid user 분리
echo "[실존 계정 실패]"; sudo grep 'Failed password for' $LOG | grep -v 'invalid user' | awk '{for(i=1;i<=NF;i++)if($i=="for"){print $(i+1);break}}' | sort | uniq -c | sort -rn | head
echo "[invalid user]";  sudo grep 'Failed password for invalid user' $LOG | awk '{for(i=1;i<=NF;i++)if($i=="user"){print $(i+1);break}}' | sort | uniq -c | sort -rn | head

5. 정상 상태

      3 Failed password for
      1 closed by ... [preauth]
[실존 계정 실패]
      3 admin1

실패가 소수이고, 실존 계정(admin1)의 간헐적 실패(비밀번호 오타 수준)만 있는 상태가 정상입니다.

6. 이상 상태

    120 Failed password for invalid user
     95 Invalid user
     40 Failed password for
     30 Received disconnect ... [preauth]
[실존 계정 실패]
     12 devops
     10 admin1
[invalid user]
     18 oracle
     15 test
     14 admin
  • invalid user 다수(oracle, test, admin) → 계정 열거(존재하는 계정을 찾는 중, 071편)
  • 실존 계정(devops, admin1) 실패도 동반 → 찾아낸 계정에 대한 추측
  • preauth disconnect 다수 → 자동화 도구 사용 정황
  • 유형을 분리하지 않았다면 "실패 285건"으로만 보여 열거와 추측을 구분하지 못했을 것

7. 로그 분석 (분석 방법)

유형별로 나눠 본 실패 로그입니다(가상의 예시 로그).

02:10:20 sshd[12701]: Invalid user oracle from 192.168.56.77 port 40102
02:10:20 sshd[12701]: Failed password for invalid user oracle from 192.168.56.77 port 40102 ssh2
02:10:41 sshd[12710]: Failed password for devops from 192.168.56.77 port 50110 ssh2
02:10:44 sshd[12710]: Accepted password for devops from 192.168.56.77 port 50110 ssh2
관찰해석
Invalid user oracleoracle 계정 없음 → 열거
Failed ... for devopsdevops는 실존 → 표적 확정
직후 Accepted for devops추측 성공(072편의 성공 직전 실패)

같은 출발지에서 열거 → 실존 계정 추측 → 성공으로 이어지는 흐름이 한 로그 뭉치에 담겨 있습니다.

8. SOC 관제 포인트

  • 실패 로그는 유형별로 분리해 집계한다(실존 계정 / invalid user / 키 실패 / preauth).
  • invalid user는 열거, 실존 계정 실패는 표적, preauth는 스캔으로 각각 다른 분석으로 넘긴다.
  • 유형 분리 결과를 072·073편(brute-force/스프레이) 분석의 입력으로 쓴다.

9. 탐지 규칙

<group name="local,syssec_b,authentication,">
  <rule id="101180" level="5">
    <decoded_as>sshd</decoded_as>
    <match>Failed password for invalid user</match>
    <description>존재하지 않는 계정 로그인 시도(계정 열거 가능성)</description>
  </rule>
</group>

Wazuh 기본 룰셋에 실패(5710 invalid user, 5716 failed password 등)가 이미 있으므로, 유형 분리는 주로 대시보드 집계로 하고, 커스텀 룰은 상관(빈도·분산)에서 추가합니다(072·073편).

10. 대응 방법

  1. 초기 확인 — 실패 로그를 유형별로 분리해 각 유형의 출발지·대상을 확인합니다.
  2. 범위 확인 — invalid user(열거)와 실존 계정 실패(표적)를 구분해 각각 후속 분석으로 넘깁니다.
  3. 증거 확보 — 유형별 집계 결과와 원본 로그를 보존합니다.
  4. 차단/조치 — 공격 출발지 차단, 표적 계정 보호 조치를 진행합니다.
  5. 재발 방지 — 실패 유형 분리 대시보드를 운영하고 상관 룰(072·073편)과 연계합니다.

11. 핵심 정리

메시지의미
Failed password for 실존 계정 비밀번호 실패(표적)
invalid user / Failed ... invalid user존재하지 않는 계정(열거)
Failed publickey미등록 키 접근
closed/disconnect [preauth]인증 전 종료(스캔·배너)
면접 포인트"실패를 유형별로 나눠야 열거·추측·스캔을 구분한다"

12. 다음 편 예고

다음 편 071. 계정 · 인증 보안 — invalid user와 계정 열거 시도 판별 에서는 실존 계정을 찾는 invalid user와 계정 열거 시도 판별을 깊게 다룹니다.


이전 편: 069. 계정 · 인증 보안 — SSH 인증 성공 로그 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글