시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 11/50편 (전체 411/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
새 계정은 눈에 띄기 때문에, 공격자는 이미 있지만 아무도 쓰지 않는 계정을 다시 살려 쓰기도 합니다(T1078.003). 잠금 해제, 비밀번호 설정, nologin 셸을 bash로 바꾸는 작업이 대표적입니다.
휴면 계정 재활성화 패턴
잠긴 계정 (!! 또는 ! 해시) → passwd -u / usermod -U
nologin 셸 → chsh / usermod -s /bin/bash
만료 계정 → chage -E -1
비밀번호 없음 → passwd <user> 로 새 비밀번호
↓
몇 주 후 외부에서 해당 계정 로그인
핵심: "변경 시점"과 "첫 로그인" 사이의 간격이 단서
B영역 33편(휴면 계정 식별)이 정리 관점이었다면, 이번에는 휴면 계정이 다시 살아나는 순간을 잡는 탐지 관점입니다.
| 확인 | 명령 / 로그 | 포인트 |
|---|---|---|
| 잠금 상태 | passwd -S <user> | L/LK → P 변경 |
| 셸 변경 | ausearch -k account_persist -f /etc/passwd | nologin→bash |
| 만료 해제 | chage -l <user> | Account expires: never |
| 마지막 로그인 | lastlog -u <user> | 오랜 공백 후 로그인 |
# 휴면 계정 재활성화 점검 (분석 방법)
# 90일 이상 로그인 없던 계정 중 현재 잠금 해제·로그인 셸인 계정
sudo lastlog -b 90 | awk 'NR>1{print $1}' | while read u; do
s=$(sudo passwd -S "$u" 2>/dev/null | awk '{print $2}')
sh=$(getent passwd "$u" | cut -d: -f7)
[ "$s" = "P" ] && echo "$sh" | grep -qv nologin && echo "$u 상태=$s 셸=$sh"
done
sudo grep -E 'unlock|password changed|changed shell|chage' /var/log/secure* | tail
oldsvc 상태=LK 셸=/sbin/nologin 마지막 로그인: Never logged in
장기 미사용 계정이 잠금(LK)·nologin 상태를 유지하고 변경 기록이 없는 상태가 정상입니다.
passwd[3810]: password changed for oldsvc (auid=webadmin, 03:02)
usermod[3822]: change user 'oldsvc' shell from '/sbin/nologin' to '/bin/bash'
(19일 후) sshd: Accepted password for oldsvc from 203.0.113.80
휴면 계정 재활성화 분석 흐름입니다(가상의 예시).
[휴면 목록] lastlog 90일 이상 미사용
↓
[상태 변화] 잠금 해제·셸 변경·만료 해제·비밀번호 설정
↓
[변경 주체] auid·시점 → 침투·권한 상승 타임라인과 대조
↓
[사용] 재활성화 이후 첫 로그인(출발지·방식)
| 변화 | 의미 |
|---|---|
| LK→P | 로그인 가능해짐 |
| nologin→bash | 대화형 셸 확보 |
| 만료 해제 | 장기 사용 준비 |
재활성화 이벤트가 사고 조사 기간보다 훨씬 이전에 있었을 수 있으므로, 조사 범위를 최초 침투 시점까지 넓혀 계정 변경 로그를 확인해야 합니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108100" level="10">
<if_sid>108000</if_sid>
<field name="audit.type" type="pcre2">USER_MGMT|USER_CHAUTHTOK</field>
<field name="audit.op" type="pcre2">unlock|changing.?shell|change.?password|changing.?expiration</field>
<description>계정 잠금 해제·셸·비밀번호·만료 변경(휴면 계정 재활성화 의심)</description>
<mitre><id>T1078.003</id></mitre>
</rule>
</group>
계정 상태를 바꾸는 이벤트를 모아 경보하고, 대상 계정이 휴면 목록(CDB 리스트)에 있으면 레벨을 높이도록 하위 룰을 추가할 수 있습니다.
| 패턴 | 탐지 |
|---|---|
| 잠금 해제 | passwd -S, USER_MGMT |
| 셸 변경 | passwd 변경 감시 |
| 만료 해제 | chage 기록 |
| 사용 | 공백 후 첫 로그인 |
| 면접 포인트 | "새 계정보다 조용한 휴면 계정 — 상태 변화와 첫 로그인을 본다" |
다음 편 412. 지속성·재침투 — SSH authorized_keys 백도어 키 탐지 에서는 authorized_keys에 추가된 미승인 공개키를 지문 기준선·auditd·sshd 로그로 탐지하고 실제 사용 여부까지 확인하는 방법을 다룹니다.
이전 편: 410. 지속성·재침투 — UID 0 숨은 계정 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점