시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 23/50편 (전체 073/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
password spraying은 brute-force의 반대 모양입니다. 한 계정에 많은 비밀번호를 넣는 대신, 흔한 비밀번호 하나를 많은 계정에 뿌립니다. 계정당 시도가 적어 계정 잠금(faillock)을 피합니다.
brute-force: devops ← pw1,pw2,pw3,...,pw220 (1계정 × 다수 시도) → 잠금 발동
spraying: pw1 → devops, admin1, oracle, git, ...(50계정 × 2~3 시도) → 잠금 회피
│
└─ 탐지 포인트: "한 출발지가 많은 계정에, 계정당 적게" + 시간 분산
brute-force가 "깊게", spraying이 "넓게"입니다. 계정당 실패 수가 적어 개별 계정만 보면 정상처럼 보입니다.
| 지표 | 명령 |
|---|---|
| 출발지별 고유 대상 계정 수 | 출발지별 distinct user 집계 |
| 계정당 실패 수 분포 | 대부분 1~3회면 spraying 의심 |
| 시간 분산 | 넓은 시간에 걸쳐 조금씩 |
| 동시 다계정 실패 | 같은 분에 여러 계정 실패 |
| 성공 계정 | spraying 중 성공한 계정(약한 비밀번호) |
LOG=/var/log/secure # Ubuntu: /var/log/auth.log
# 1) 출발지별 "고유 대상 계정 수" (스프레이 핵심 지표)
sudo grep 'Failed password' $LOG | sed -E 's/.*for (invalid user )?([^ ]+) from ([0-9.]+).*/\3 \2/' | sort -u | awk '{c[$1]++} END{for(i in c) print c[i]" accounts "i}' | sort -rn | head
# 2) 특정 출발지의 계정별 실패 수 (대부분 소수면 spraying)
sudo grep 'Failed password' $LOG | grep 'from 192.168.56.77' | grep -oE 'for [^ ]+' | sort | uniq -c | sort -rn | head
# 3) spraying 중 성공한 계정
sudo grep 'Accepted' $LOG | grep 'from 192.168.56.77'
2 accounts 192.168.56.5
$ (계정별 실패) 1 admin1
출발지별 대상 계정이 1~2개로 좁고 계정당 소수 실패 → 정상(오타) 범위입니다.
52 accounts 192.168.56.77
$ (계정별 실패)
3 devops
2 admin1
2 oracle
2 git
...
$ (성공) Accepted password for svc_deploy from 192.168.56.77
svc_deploy 계정 성공 → 약한 비밀번호 계정이 뚫림(059편 정책 부재 결과)spraying의 전형적 로그 분포입니다(가상의 예시 로그).
02:15:01 Failed password for devops from 192.168.56.77
02:15:02 Failed password for admin1 from 192.168.56.77
02:15:03 Failed password for oracle from 192.168.56.77
02:15:04 Failed password for git from 192.168.56.77
...
02:15:48 Accepted password for svc_deploy from 192.168.56.77
| 관찰 | 해석 |
|---|---|
| 1초 간격, 계정만 바뀜 | 한 비밀번호를 계정마다 시도 |
| 계정당 1~3회 | 잠금 임계값 미만 |
| 끝에 1계정 성공 | 약한 비밀번호 계정 돌파 |
brute-force(한 계정 반복)와 로그 모양이 명확히 다릅니다. 세로(계정)로 퍼지는지, 가로(비밀번호)로 깊어지는지가 구분점입니다.
<group name="local,syssec_b,authentication,">
<rule id="101210" level="12" frequency="15" timeframe="300">
<if_matched_sid>5716</if_matched_sid>
<same_source_ip />
<different_user />
<description>단일 출발지의 다계정 인증 실패(password spraying 의심)</description>
</rule>
</group>
different_user(여러 계정 조건)를 Wazuh가 지원하지 않으면, SIEM에서 출발지별 distinct user count ≥ N 집계 알림으로 구현합니다. brute-force 룰(빈도)과 spraying 룰(계정 다양성)은 조건이 반대임에 유의합니다.
| 구분 | brute-force vs spraying |
|---|---|
| 모양 | 1계정×다수 시도 vs 다계정×소수 시도 |
| 잠금 | 발동(brute) vs 회피(spraying) |
| 탐지 기준 | 계정별 빈도 vs 출발지별 고유 계정 수 |
| 공통 | 성공 계정이 있으면 즉시 탈취 대응 |
| 면접 포인트 | "spraying은 계정당 적게 뿌려 잠금을 피한다 → 출발지 기준으로 봐야 보인다" |
다음 편 074. 계정 · 인증 보안 — 성공 직전 실패 패턴 — 인증 돌파 판단 에서는 공격의 성패를 가르는 성공 직전 실패 패턴 — 인증 돌파 판단을 다룹니다.
이전 편: 072. 계정 · 인증 보안 — brute-force 징후 — 빈도·분포 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점