075. 계정 · 인증 보안 — 로그인 기록 — wtmp·btmp·lastlog 분석

changseop lee·5일 전

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

선행 학습

1. 개념

로그인 기록은 텍스트 로그(secure·auth.log)와 별개로 바이너리 파일에도 저장됩니다. 이 둘을 교차 확인하면 한쪽이 지워져도 보완할 수 있습니다.

/var/run/utmp   : 현재 로그인 세션      → who, w
/var/log/wtmp   : 로그인/로그아웃 이력  → last
/var/log/btmp   : 실패한 로그인         → lastb
/var/log/lastlog: 계정별 마지막 로그인  → lastlog

특성: 바이너리 → 텍스트 로그와 별도. 공격자가 둘 다 지워야 흔적이 사라짐.

같은 로그인이 secure(텍스트)와 wtmp(바이너리) 양쪽에 남으므로, 불일치 자체가 변조 신호가 됩니다.

2. 왜 중요한가

  • 공격자는 흔적을 지우려 wtmp/btmp를 삭제·편집합니다. 하지만 텍스트 로그(원격 전송된 사본 포함)와 비교하면 삭제가 드러납니다.
  • lastlog는 계정별 마지막 로그인 시각을 보여줘, 휴면 계정의 갑작스러운 사용(081편)을 빠르게 포착합니다.
  • btmp(실패 기록)는 brute-force 분석(072편)의 보조 자료입니다.

3. 핵심 명령어 / 설정

명령대상용도
who, wutmp현재 세션
last -i -Fwtmp로그인 이력(IP·정확한 시각)
last -xwtmp재부팅·런레벨 포함
sudo lastb -ibtmp실패 이력
lastloglastlog계정별 마지막 로그인
ls -l --time-style=full /var/log/wtmp파일크기·수정 시각(삭제·초기화 단서)

4. 실습 (실습 예시)

# 1) 최근 로그인 이력 (IP·시각)
last -i -F -n 15

# 2) 실패 이력 상위 출발지
sudo lastb -i | awk '{print $3}' | sort | uniq -c | sort -rn | head

# 3) 휴면 계정의 최근 로그인 포착
lastlog | awk 'NR>1 && $0 !~ /Never logged in/ {print}'

# 4) 텍스트 로그 vs wtmp 교차 (성공 수 비교)
echo "secure Accepted: $(sudo grep -c 'Accepted ' /var/log/secure)"
echo "wtmp 로그인:    $(last -F | grep -vE 'reboot|wtmp begins|^$' | wc -l)"
ls -l --time-style=full-iso /var/log/wtmp /var/log/btmp

5. 정상 상태

devops  pts/1  192.168.56.5  Fri Oct 2 09:12:01 2026   still logged in
admin1  pts/0  192.168.56.5  Fri Oct 2 08:58:40 2026 - 10:30 (01:31)
secure Accepted: 62
wtmp 로그인:    61

텍스트 로그의 성공 수와 wtmp 로그인 수가 거의 일치하고, 로그인 출발지가 관리망인 상태가 정상입니다(수 건 차이는 세션 집계 방식 차이).

6. 이상 상태

$ last -i -F | grep '02:1'
(비어 있음)
secure Accepted: 62
wtmp 로그인:    41
$ ls -l --time-style=full-iso /var/log/wtmp
-rw-rw-r--. 1 root utmp 0 2026-10-02 03:20:05 ... /var/log/wtmp
  • secure에는 새벽 로그인이 있는데 wtmp에는 없음 → wtmp 변조·초기화 의심
  • wtmp 크기 0바이트 + 새벽 수정 시각 → 로그인 기록 전체 삭제(truncate)
  • 텍스트 로그(특히 원격 사본)가 남아 있어 삭제 사실과 원래 기록을 복원 가능

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

wtmp 변조 흔적과 교차 확인입니다(가상의 예시 로그).

[audit] type=PATH name="/var/log/wtmp" nametype=NORMAL
        type=SYSCALL syscall=... auid=1002 uid=0 comm="truncate" exe="/usr/bin/truncate" key="log_tamper"
[secure(원격 사본)] Oct 2 02:10:44 Accepted password for devops from 192.168.56.77
[wtmp(last)] 해당 시각 기록 없음
관찰해석
wtmp 대상 truncate로그인 기록 삭제
secure엔 있고 wtmp엔 없음바이너리만 지움(텍스트 누락)
원격 secure 사본삭제된 wtmp 기록을 복원하는 근거

로그 변조 자체는 G영역 「로그 변조 의심」에서 깊게 다루며, 여기서는 로그인 기록의 불일치를 탐지하는 데 집중합니다.

8. SOC 관제 포인트

  • 로그인 분석은 텍스트 로그 + wtmp/btmp/lastlog를 함께 보고, 불일치를 변조 신호로 삼습니다.
  • wtmp/btmp의 0바이트·갑작스런 크기 감소·수정 시각을 감시합니다.
  • lastlog로 휴면 계정의 재사용을 조기에 포착합니다(081편).

9. 탐지 규칙

<group name="local,syssec_b,log_tamper,">
  <rule id="101230" level="12">
    <if_sid>550</if_sid>
    <field name="file" type="pcre2">^/var/log/(wtmp|btmp|lastlog)$</field>
    <description>로그인 기록 파일(wtmp/btmp/lastlog) 변경</description>
  </rule>
</group>

wtmp는 로그인마다 정상적으로 바뀌므로 단순 변경은 소음입니다. 크기 급감·truncate 시스템 콜(audit log_tamper 키)이나 텍스트 로그 대비 불일치를 조건으로 삼는 것이 효과적입니다(G영역에서 확장).

10. 대응 방법

  1. 초기 확인 — 텍스트 로그와 wtmp/btmp 기록의 불일치 구간을 확인합니다.
  2. 범위 확인 — 불일치 구간의 로그인(원격 사본)과 다른 서버의 유사 변조를 확인합니다.
  3. 증거 확보 — wtmp/btmp 사본·크기 기록, 원격 텍스트 로그, audit을 보존합니다.
  4. 차단/조치 — 삭제가 확인되면 원격 사본으로 타임라인을 복원하고 해당 세션·계정을 조사합니다.
  5. 재발 방지 — 로그인 기록 교차 확인과 wtmp 변조 탐지를 운영합니다.

11. 핵심 정리

파일내용 / 명령
utmp현재 세션 / who, w
wtmp로그인 이력 / last
btmp실패 이력 / lastb
lastlog계정별 마지막 로그인 / lastlog
면접 포인트"텍스트 로그와 wtmp 불일치 = 바이너리 로그 변조 신호"

12. 다음 편 예고

다음 편 076. 계정 · 인증 보안 — 로그인 시간·출발지 기준선 만들기 에서는 정상 범위를 정의하는 로그인 시간·출발지 기준선 만들기를 다룹니다.


이전 편: 074. 계정 · 인증 보안 — 성공 직전 실패 패턴 — 인증 돌파 판단
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글