091. 계정 · 인증 보안 — 인증 로그 정규화 — secure·auth.log·journal

changseop lee·5일 전

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

선행 학습

1. 개념

같은 "로그인"이 로그원마다 다른 형식으로 남습니다. 통합 분석을 하려면 이를 공통 필드로 정규화해야 합니다.

같은 성공 로그인, 다른 표현
 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)와 로그원 차이를 흡수하면, 하나의 질의로 전체를 볼 수 있습니다.

2. 왜 중요한가

  • 정규화가 안 되면 Rocky·Ubuntu 서버를 따로 질의해야 하고, 로그원마다 다른 파서를 써야 합니다.
  • 통합 필드가 있어야 "계정 X의 모든 로그인을 전 서버에서" 같은 질의가 가능합니다(046·096편).
  • 한 로그원이 지워져도 다른 로그원의 같은 정규화 필드로 교차 확인할 수 있습니다(025편).

3. 핵심 명령어 / 설정

로그원경로/도구특징
Rocky secure/var/log/securesshd·PAM·sudo·su
Ubuntu auth.log/var/log/auth.log동일 역할
journaldjournalctl _COMM=sshd구조화 필드, 재부팅 포함
auditausearch -m USER_LOGINUSER_* 이벤트, auid/ses
정규화 필드user·srcip·result·method분석·룰·대시보드 공통 키

4. 실습 (실습 예시)

# 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

5. 정상 상태

     40 SUCCESS,publickey,devops,192.168.56.5
     22 SUCCESS,publickey,admin1,192.168.56.5
      3 FAIL,password,admin1,192.168.56.5

로그원·배포판과 무관하게 결과,방식,계정,출발지 형식으로 정규화되어, 한눈에 집계되는 상태가 정상입니다.

6. 이상 상태

     220 FAIL,password,devops,192.168.56.77
       1 SUCCESS,password,devops,192.168.56.77
  • 정규화 덕분에 돌파(FAIL 220 + SUCCESS 1)가 한 형식으로 드러남
  • Rocky·Ubuntu 서버가 섞여 있어도 같은 질의로 집계 가능
  • 이 정규화 결과가 072·074편 분석과 046편 SIEM 대시보드의 입력

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

로그원 간 교차 확인 예시입니다(가상의 예시).

[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방식·지문
auditauid·ses(세션 추적)
journald재부팅 넘어선 보존

세 로그원을 같은 정규화 필드(user·srcip·result)로 조인하면, 한쪽이 지워져도 보완되고 세부 정보가 합쳐집니다.

8. SOC 관제 포인트

  • 인증 로그는 배포판 무관 경로 선택 + 공통 필드 정규화를 기본으로 합니다.
  • 정규화 필드(user·srcip·result·method)를 룰·대시보드·검색의 공통 키로 통일합니다.
  • 로그원별 고유 정보(audit의 auid/ses)는 정규화 필드에 보강 필드로 더합니다.

9. 탐지 규칙

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로 확인합니다.

10. 대응 방법

  1. 초기 확인 — 분석 대상 로그원과 배포판을 확인하고 공통 필드로 정규화합니다.
  2. 범위 확인 — 정규화 결과로 교차 확인(로그원 간 일치/불일치)을 수행합니다.
  3. 증거 확보 — 정규화 규칙(파서·디코더)과 원본 로그를 보존합니다.
  4. 차단/조치 — 누락·불일치 구간은 다른 로그원·원격 사본으로 보완합니다.
  5. 재발 방지 — 인증 로그 정규화 표준을 SIEM 파서·룰에 적용합니다.

11. 핵심 정리

로그원역할 / 추가 정보
secure / auth.logsshd·PAM·sudo (방식·지문)
journald구조화·재부팅 넘어 보존
auditUSER_* (auid·ses)
정규화 필드user · srcip · result · method · time · host
면접 포인트"같은 로그인도 로그원마다 형식이 다르다 — 공통 필드로 통합"

12. 다음 편 예고

다음 편 092. 계정 · 인증 보안 — auditd 인증 이벤트(USER_AUTH·USER_LOGIN) 분석 에서는 시스템 콜 수준 인증 기록인 auditd 인증 이벤트(USER_AUTH·USER_LOGIN) 분석을 다룹니다.


이전 편: 090. 계정 · 인증 보안 — 계정 탈취 의심 지표(IOC) 정리
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글