시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 41/50편 (전체 091/450)
학습 단계: 4단계 · 자동 점검·로그 분석
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
같은 "로그인"이 로그원마다 다른 형식으로 남습니다. 통합 분석을 하려면 이를 공통 필드로 정규화해야 합니다.
같은 성공 로그인, 다른 표현
secure/auth.log: Accepted publickey for devops from 192.168.56.5 port 51010 ssh2: ED25519 SHA256:...
journald: (동일 메시지를 구조화 필드로: _COMM=sshd, SYSLOG_IDENTIFIER=sshd)
audit: type=USER_LOGIN ... acct=devops addr=192.168.56.5 res=success
정규화 공통 필드
user(계정) · srcip(출발지) · result(성공/실패) · method(방식) · time · host · raw
배포판 차이(Rocky secure vs Ubuntu auth.log)와 로그원 차이를 흡수하면, 하나의 질의로 전체를 볼 수 있습니다.
| 로그원 | 경로/도구 | 특징 |
|---|---|---|
| Rocky secure | /var/log/secure | sshd·PAM·sudo·su |
| Ubuntu auth.log | /var/log/auth.log | 동일 역할 |
| journald | journalctl _COMM=sshd | 구조화 필드, 재부팅 포함 |
| audit | ausearch -m USER_LOGIN | USER_* 이벤트, auid/ses |
| 정규화 필드 | user·srcip·result·method | 분석·룰·대시보드 공통 키 |
# 1) 배포판 무관하게 인증 로그 경로 자동 선택
AUTHLOG=$( [ -f /var/log/secure ] && echo /var/log/secure || echo /var/log/auth.log )
# 2) SSH 로그인을 공통 형식(user,srcip,result,method)으로 정규화
sudo grep -E 'Accepted|Failed password' "$AUTHLOG" | \
sed -E 's/.*(Accepted|Failed) ([a-z-]+) for (invalid user )?([^ ]+) from ([0-9.]+).*/\1,\2,\4,\5/' | \
awk -F, '{print ($1=="Accepted"?"SUCCESS":"FAIL")","$2","$3","$4}' | sort | uniq -c | sort -rn | head
# 3) journald에서 같은 이벤트 (재부팅 넘어 조회)
journalctl _COMM=sshd --since today | grep -E 'Accepted|Failed' | tail
40 SUCCESS,publickey,devops,192.168.56.5
22 SUCCESS,publickey,admin1,192.168.56.5
3 FAIL,password,admin1,192.168.56.5
로그원·배포판과 무관하게 결과,방식,계정,출발지 형식으로 정규화되어, 한눈에 집계되는 상태가 정상입니다.
220 FAIL,password,devops,192.168.56.77
1 SUCCESS,password,devops,192.168.56.77
로그원 간 교차 확인 예시입니다(가상의 예시).
[secure] 02:10:44 Accepted password for devops from 192.168.56.77 → SUCCESS,password,devops,192.168.56.77
[audit] USER_LOGIN acct=devops addr=192.168.56.77 res=success ses=12 → 같은 로그인, auid/ses 추가
[journald] sshd Accepted password ... (재부팅 후에도 보존)
| 로그원 | 추가로 주는 정보 |
|---|---|
| secure/auth.log | 방식·지문 |
| audit | auid·ses(세션 추적) |
| journald | 재부팅 넘어선 보존 |
세 로그원을 같은 정규화 필드(user·srcip·result)로 조인하면, 한쪽이 지워져도 보완되고 세부 정보가 합쳐집니다.
SIEM에서는 디코더/파서가 정규화를 담당합니다.
# Logstash grok (SSH 성공/실패 공통)
grok { match => { "message" => "%{WORD:auth_result} %{WORD:auth_method} for (invalid user )?%{USERNAME:user} from %{IP:srcip}" } }
mutate { add_field => { "result" => "%{auth_result}" } }
# Wazuh: data.srcuser, data.srcip, rule.id 로 이미 정규화됨 → KQL에서 공통 사용
Wazuh는 디코더가 data.srcuser·data.srcip 등으로 정규화하므로, 커스텀 룰·대시보드에서 배포판 구분 없이 같은 필드를 씁니다. 필드명은 wazuh-logtest로 확인합니다.
| 로그원 | 역할 / 추가 정보 |
|---|---|
| secure / auth.log | sshd·PAM·sudo (방식·지문) |
| journald | 구조화·재부팅 넘어 보존 |
| audit | USER_* (auid·ses) |
| 정규화 필드 | user · srcip · result · method · time · host |
| 면접 포인트 | "같은 로그인도 로그원마다 형식이 다르다 — 공통 필드로 통합" |
다음 편 092. 계정 · 인증 보안 — auditd 인증 이벤트(USER_AUTH·USER_LOGIN) 분석 에서는 시스템 콜 수준 인증 기록인 auditd 인증 이벤트(USER_AUTH·USER_LOGIN) 분석을 다룹니다.
이전 편: 090. 계정 · 인증 보안 — 계정 탈취 의심 지표(IOC) 정리
📚 시리즈 전체 보기: 시스템 보안 · 취약점