072. 계정 · 인증 보안 — brute-force 징후 — 빈도·분포 분석

changseop lee·6일 전

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

선행 학습

1. 개념

brute-force는 한 계정에 여러 비밀번호를 빠르게 시도하는 공격입니다. 열거(071편)로 찾은 실존 계정이 표적이 됩니다. 탐지 핵심은 "정상적인 실패"와 구분하는 임계값입니다.

판별 축
 빈도   : 짧은 시간(예: 1분)에 실패 N회 이상
 간격   : 기계적으로 일정(사람은 불규칙) → 자동화
 출발지 : 단일 IP 집중 / 여러 IP 분산(분산형)
 대상   : 한 계정 집중(brute-force) vs 여러 계정(스프레이, 073편)
 결과   : 실패만 / 실패 후 성공(돌파)

사람의 오타: 수 회, 불규칙 간격, 업무 시간, 관리망, 결국 성공 또는 포기

2. 왜 중요한가

  • brute-force 자체는 흔하지만, 성공으로 이어졌는가가 핵심입니다. 실패 1000건보다 "실패 후 성공 1건"이 훨씬 중요합니다(074편).
  • 임계값이 너무 낮으면 사용자 오타까지 Alert가 되고, 너무 높으면 느린 공격을 놓칩니다. 빈도 + 간격 + 출발지를 함께 봐야 합니다.
  • faillock(014편)이 동작하면 brute-force가 잠금으로 막히지만, 잠금을 피하는 느린 공격(low and slow)도 있습니다.

3. 핵심 명령어 / 설정

지표명령
계정별 실패 수sudo grep 'Failed password for' /var/log/secure | grep -oE 'for [^ ]+' | sort | uniq -c | sort -rn
출발지별 실패 수... | grep -oE 'from [0-9.]+' | sort | uniq -c | sort -rn
분당 실패 빈도... | awk '{print $1,$2,$3}' | cut -d: -f1,2 | uniq -c
실패→성공 연결같은 계정·출발지의 Failed 다음 Accepted
느린 공격긴 시간 창에서 일정 간격 실패

4. 실습 (실습 예시)

LOG=/var/log/secure        # Ubuntu: /var/log/auth.log
# 1) 계정×출발지별 실패 집계 (집중 대상 식별)
sudo grep 'Failed password for' $LOG | sed -E 's/.*for (invalid user )?([^ ]+) from ([0-9.]+).*/\3 \2/' | sort | uniq -c | sort -rn | head

# 2) 분당 실패 추이 (급증 구간)
sudo grep 'Failed password' $LOG | awk '{print $1,$2,substr($3,1,5)}' | uniq -c | sort -rn | head

# 3) 실패 후 성공 (돌파 여부) — 계정·출발지 기준
sudo grep -E 'Failed password for devops from 192.168.56.77|Accepted .* for devops from 192.168.56.77' $LOG | tail

5. 정상 상태

      3 192.168.56.5 admin1
$ (분당) 1 Oct 2 09:15

특정 계정에 수 회, 관리망 출발지, 분산된 시각 → 사용자 오타 수준으로 정상 범위입니다.

6. 이상 상태

    220 192.168.56.77 devops
     18 192.168.56.77 admin1
$ (분당) 95 Oct 2 02:10
                       88 Oct 2 02:11
$ (실패→성공)
02:10:41 Failed password for devops from 192.168.56.77
02:10:44 Accepted password for devops from 192.168.56.77
  • devops에 분당 90여 회 실패 집중 → 기계적 brute-force
  • 단일 출발지(.77), 새벽 → 자동화 공격
  • 결정적으로 실패 직후 성공 → 돌파 성공(074편에서 상세). 이 시점부터 계정 탈취 대응으로 전환

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

brute-force의 빈도와 돌파를 함께 본 예시입니다(가상의 예시 로그 집계).

devops @ 192.168.56.77
 02:10:00 ~ 02:10:59  실패 95
 02:11:00 ~ 02:11:44  실패 88, 02:10:44 성공 1
 간격: 약 0.6초 균일 → 자동화 도구
 결론: brute-force 성공(돌파) → 탈취 세션 ses=12 로 이후 행위 추적
지표판정
분당 ~90회, 균일 간격자동화
단일 출발지, 새벽공격
실패 후 성공돌파 → Incident

8. SOC 관제 포인트

  • brute-force는 빈도 + 간격 + 출발지 + 대상 계정으로 판정하고, 사용자 오타(소수·불규칙·관리망)와 구분합니다.
  • 가장 중요한 것은 실패 후 성공 여부입니다. 성공이 있으면 즉시 탈취 대응으로 전환합니다.
  • 잠금을 피하는 느린 공격을 위해 넓은 시간 창의 누적 실패도 함께 봅니다.

9. 탐지 규칙

<group name="local,syssec_b,authentication,">
  <!-- Wazuh 기본 5712(SSHD brute force)를 보완: 돌파(실패 후 성공) 상관 -->
  <rule id="101200" level="13">
    <if_sid>5715</if_sid>
    <if_matched_sid>5712</if_matched_sid>
    <same_source_ip />
    <same_user />
    <description>brute-force 이후 동일 계정·출발지 로그인 성공(돌파)</description>
  </rule>
</group>

5712는 Wazuh의 brute-force 룰입니다. 위 룰은 "brute-force가 관측된 출발지·계정에서 성공이 발생"을 잡는 상관 예시이며, same_* 동작은 wazuh-logtest로 검증합니다.

10. 대응 방법

  1. 초기 확인 — 표적 계정의 실패 빈도·간격·출발지와 성공 여부를 확인합니다.
  2. 범위 확인 — 돌파가 있으면 세션으로 이후 행위를 추적하고 다른 서버 시도를 확인합니다.
  3. 증거 확보 — 실패·성공 로그, 빈도 집계를 보존합니다.
  4. 차단/조치 — 출발지 차단, 돌파 시 계정 잠금·비밀번호 교체·세션 종료를 진행합니다.
  5. 재발 방지 — brute-force 돌파 상관 룰과 느린 공격용 넓은 시간 창 집계를 운영합니다.

11. 핵심 정리

축내용
빈도짧은 시간 실패 급증
간격균일(자동화) vs 불규칙(사람)
출발지·대상단일 IP → 단일 계정 집중
결과실패만 vs 실패 후 성공(돌파)
면접 포인트"실패 1000건보다 실패 후 성공 1건이 중요하다"

12. 다음 편 예고

다음 편 073. 계정 · 인증 보안 — password spraying 징후 분석 에서는 여러 계정에 소수 비밀번호를 뿌리는 password spraying 징후 분석을 다룹니다.


이전 편: 071. 계정 · 인증 보안 — invalid user와 계정 열거 시도 판별
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글