시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 10/50편 (전체 410/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
Linux 커널은 이름이 아니라 UID로 권한을 판단합니다. 따라서 이름이 backup이어도 UID가 0이면 root와 똑같습니다. 공격자는 이를 이용해 root가 아닌 이름의 UID 0 계정을 지속성으로 남깁니다.
UID 0 숨은 계정
root:x:0:0:root:/root:/bin/bash ← 정상(유일해야 함)
backup:x:0:0::/var/backups:/bin/bash ← 숨은 root
경로
· passwd 직접 편집으로 UID 0 지정
· usermod -o -u 0 <user> (중복 UID 허용)
핵심: "UID 0은 root 하나"가 기준선
A영역 3편에서 점검 항목으로 다뤘던 UID 0 중복을 이번에는 "언제·누가 만들었는가"를 추적하는 탐지 관점으로 다룹니다.
| 확인 | 명령 | 기대 |
|---|---|---|
| UID 0 목록 | awk -F: '$3==0{print $1}' /etc/passwd | root만 |
| 중복 UID | cut -d: -f3 /etc/passwd | sort | uniq -d | 없음 |
| GID 0 | awk -F: '$4==0' /etc/passwd | root·시스템 계정 |
| 변경 이력 | ausearch -m USER_MGMT -i | usermod -o 기록 |
# UID 0 숨은 계정 점검 (분석 방법)
awk -F: '$3==0{print $1, $6, $7}' /etc/passwd
sudo pwck -r 2>/dev/null | head
# usermod로 UID를 바꾼 기록
sudo ausearch -m USER_MGMT -i 2>/dev/null | grep -E 'op=(changing uid|modify)' | tail
sudo grep -E "usermod.*(change user|uid)" /var/log/secure* | tail
$ awk -F: '$3==0{print $1}' /etc/passwd
root
UID 0 계정이 root 하나뿐이고 UID 중복이 없는 상태가 정상입니다.
$ awk -F: '$3==0{print $1}' /etc/passwd
root
backup
secure: usermod[4410]: change user 'backup' UID from '34' to '0'
type=USER_MGMT ... auid=webadmin op=changing-uid acct="backup"
UID 0 계정 분석 흐름입니다(가상의 예시).
[UID 0 목록] root 외 계정 발견
↓
[생성 방식] usermod -o -u 0 기록 ? 직접 편집 ?
↓
[작성자] auid 추적 → 권한 상승 시점과 비교
↓
[사용 여부] 해당 계정 로그인·sudo 없이 root 행위(euid=0, auid=해당 계정)
| 신호 | 해석 |
|---|---|
| UID 0 중복 | 숨은 root |
| 시스템 계정 셸 /bin/bash | 로그인 가능하게 개조 |
| auid=해당 계정, euid=0 | 실제 사용 |
UID 0 계정으로 로그인하면 auditd의 auid는 그 계정 UID(0)로 남으므로, 로그인 기록의 계정 이름과 함께 봐야 실제 사용 여부를 판단할 수 있습니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108090" level="13">
<if_sid>108000</if_sid>
<field name="audit.type">USER_MGMT</field>
<field name="audit.op" type="pcre2">changing.?uid|modify-account</field>
<description>계정 UID 변경 이벤트(UID 0 숨은 계정 생성 의심)</description>
<mitre><id>T1098</id></mitre>
</rule>
</group>
UID 변경은 운영에서 드물기 때문에 USER_MGMT 이벤트 자체를 높은 레벨로 다룹니다. 추가로 정기 점검 스크립트가 UID 0 중복을 발견하면 별도 이벤트를 남기도록 구성합니다.
| 항목 | 기준 |
|---|---|
| 정상 | UID 0 = root 하나 |
| 경로 | usermod -o -u 0, 직접 편집 |
| 탐지 | USER_MGMT·정기 점검 |
| 주의 | root 비밀번호 변경으로 제거 안 됨 |
| 면접 포인트 | "권한은 이름이 아니라 UID — UID 0이 둘이면 root도 둘" |
다음 편 411. 지속성·재침투 — 휴면 계정 재활성화 탐지 에서는 잠겨 있거나 오래 쓰지 않던 계정의 잠금 해제·비밀번호 재설정·셸 변경을 재침투용 지속성으로 탐지하는 방법을 다룹니다.
이전 편: 409. 지속성·재침투 — 백도어 계정 생성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점