시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 11/50편 (전체 411/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

새 계정은 눈에 띄기 때문에, 공격자는 이미 있지만 아무도 쓰지 않는 계정을 다시 살려 쓰기도 합니다(T1078.003). 잠금 해제, 비밀번호 설정, nologin 셸을 bash로 바꾸는 작업이 대표적입니다.

휴면 계정 재활성화 패턴
 잠긴 계정 (!! 또는 ! 해시) → passwd -u / usermod -U
 nologin 셸                 → chsh / usermod -s /bin/bash
 만료 계정                  → chage -E -1
 비밀번호 없음              → passwd <user> 로 새 비밀번호
   ↓
 몇 주 후 외부에서 해당 계정 로그인

핵심: "변경 시점"과 "첫 로그인" 사이의 간격이 단서

B영역 33편(휴면 계정 식별)이 정리 관점이었다면, 이번에는 휴면 계정이 다시 살아나는 순간을 잡는 탐지 관점입니다.

2. 왜 중요한가

  • 기존 계정은 신규 계정 생성 탐지에 걸리지 않습니다.
  • 휴면 계정은 소유자가 없어 이상 로그인을 신고할 사람도 없습니다.
  • 재활성화와 사용 사이에 시간차를 두면 침투 시점과 연결하기 어려워집니다.

3. 핵심 명령어 / 설정

확인명령 / 로그포인트
잠금 상태passwd -S <user>L/LK → P 변경
셸 변경ausearch -k account_persist -f /etc/passwdnologin→bash
만료 해제chage -l <user>Account expires: never
마지막 로그인lastlog -u <user>오랜 공백 후 로그인

4. 실습 (실습 예시)

# 휴면 계정 재활성화 점검 (분석 방법)
# 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

5. 정상 상태

oldsvc  상태=LK  셸=/sbin/nologin  마지막 로그인: Never logged in

장기 미사용 계정이 잠금(LK)·nologin 상태를 유지하고 변경 기록이 없는 상태가 정상입니다.

6. 이상 상태

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
  • 휴면 계정에 비밀번호 설정 + 셸 변경 → 재활성화
  • 변경 주체가 침해 의심 계정, 업무 외 시간 → 지속성 설치
  • 19일 뒤 외부 IP 로그인 → 재침투에 실제 사용

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

휴면 계정 재활성화 분석 흐름입니다(가상의 예시).

[휴면 목록] lastlog 90일 이상 미사용
   ↓
[상태 변화] 잠금 해제·셸 변경·만료 해제·비밀번호 설정
   ↓
[변경 주체] auid·시점 → 침투·권한 상승 타임라인과 대조
   ↓
[사용] 재활성화 이후 첫 로그인(출발지·방식)
변화의미
LK→P로그인 가능해짐
nologin→bash대화형 셸 확보
만료 해제장기 사용 준비

재활성화 이벤트가 사고 조사 기간보다 훨씬 이전에 있었을 수 있으므로, 조사 범위를 최초 침투 시점까지 넓혀 계정 변경 로그를 확인해야 합니다.

8. SOC 관제 포인트

  • 휴면 계정 목록을 기준선으로 두고, 상태 변화 자체를 경보합니다.
  • 재활성화 후 첫 로그인은 출발지와 관계없이 확인 대상입니다.
  • 정리 대상 휴면 계정은 삭제보다 잠금+만료로 두고 변화를 감시합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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 리스트)에 있으면 레벨을 높이도록 하위 룰을 추가할 수 있습니다.

10. 대응 방법

  1. 초기 확인 — 대상 계정의 휴면 기간과 상태 변화 내용을 확인합니다.
  2. 범위 확인 — 재활성화 이후 로그인·명령 기록과 다른 휴면 계정 변화를 확인합니다.
  3. 증거 확보 — 계정 변경 로그와 로그인 기록을 보존합니다.
  4. 차단/조치 — 계정을 다시 잠그고 셸을 nologin으로 되돌린 뒤 세션을 종료합니다.
  5. 재발 방지 — 휴면 계정 정기 점검과 상태 변화 경보를 운영합니다.

11. 핵심 정리

패턴탐지
잠금 해제passwd -S, USER_MGMT
셸 변경passwd 변경 감시
만료 해제chage 기록
사용공백 후 첫 로그인
면접 포인트"새 계정보다 조용한 휴면 계정 — 상태 변화와 첫 로그인을 본다"

12. 다음 편 예고

다음 편 412. 지속성·재침투 — SSH authorized_keys 백도어 키 탐지 에서는 authorized_keys에 추가된 미승인 공개키를 지문 기준선·auditd·sshd 로그로 탐지하고 실제 사용 여부까지 확인하는 방법을 다룹니다.


이전 편: 410. 지속성·재침투 — UID 0 숨은 계정 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글