시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 25/50편 (전체 075/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
로그인 기록은 텍스트 로그(secure·auth.log)와 별개로 바이너리 파일에도 저장됩니다. 이 둘을 교차 확인하면 한쪽이 지워져도 보완할 수 있습니다.
/var/run/utmp : 현재 로그인 세션 → who, w
/var/log/wtmp : 로그인/로그아웃 이력 → last
/var/log/btmp : 실패한 로그인 → lastb
/var/log/lastlog: 계정별 마지막 로그인 → lastlog
특성: 바이너리 → 텍스트 로그와 별도. 공격자가 둘 다 지워야 흔적이 사라짐.
같은 로그인이 secure(텍스트)와 wtmp(바이너리) 양쪽에 남으므로, 불일치 자체가 변조 신호가 됩니다.
lastlog는 계정별 마지막 로그인 시각을 보여줘, 휴면 계정의 갑작스러운 사용(081편)을 빠르게 포착합니다.| 명령 | 대상 | 용도 |
|---|---|---|
who, w | utmp | 현재 세션 |
last -i -F | wtmp | 로그인 이력(IP·정확한 시각) |
last -x | wtmp | 재부팅·런레벨 포함 |
sudo lastb -i | btmp | 실패 이력 |
lastlog | lastlog | 계정별 마지막 로그인 |
ls -l --time-style=full /var/log/wtmp | 파일 | 크기·수정 시각(삭제·초기화 단서) |
# 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
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 로그인 수가 거의 일치하고, 로그인 출발지가 관리망인 상태가 정상입니다(수 건 차이는 세션 집계 방식 차이).
$ 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
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영역 「로그 변조 의심」에서 깊게 다루며, 여기서는 로그인 기록의 불일치를 탐지하는 데 집중합니다.
<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영역에서 확장).
| 파일 | 내용 / 명령 |
|---|---|
| utmp | 현재 세션 / who, w |
| wtmp | 로그인 이력 / last |
| btmp | 실패 이력 / lastb |
| lastlog | 계정별 마지막 로그인 / lastlog |
| 면접 포인트 | "텍스트 로그와 wtmp 불일치 = 바이너리 로그 변조 신호" |
다음 편 076. 계정 · 인증 보안 — 로그인 시간·출발지 기준선 만들기 에서는 정상 범위를 정의하는 로그인 시간·출발지 기준선 만들기를 다룹니다.
이전 편: 074. 계정 · 인증 보안 — 성공 직전 실패 패턴 — 인증 돌파 판단
📚 시리즈 전체 보기: 시스템 보안 · 취약점