시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 18/50편 (전체 418/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
계정·인증 지속성은 "누구로, 어떤 인증으로 다시 들어오는가"의 문제입니다. 지금까지 다룬 아홉 가지 기법을 계정·인증 수단·권한 세 층으로 묶어 정리합니다.
계정·인증 지속성 3층 구조
[계정 층] 백도어 계정(I09) · UID 0(I10) · 휴면 재활성화(I11)
[인증 층] SSH 키(I12) · sshd 설정(I13) · PAM(I14)
자격증명 재설정(I16) · SSH CA(I17)
[권한 층] sudoers 규칙(I15)
↓
재침투: 계정 + 인증 수단 + 권한 이 한 세트로 준비됨
핵심: 한 층만 제거하면 나머지 층으로 복귀
공격자는 보통 계정·인증·권한을 한 세트로 준비합니다. 예를 들어 휴면 계정을 살리고(계정), 키를 넣고(인증), NOPASSWD를 주는(권한) 식입니다.
| 기법 | 주 근거 | 룰 ID |
|---|---|---|
| 백도어 계정 | passwd 감시 | 108080 |
| UID 0 | USER_MGMT | 108090 |
| 휴면 재활성화 | USER_MGMT | 108100 |
| SSH 키 | authorized_keys 감시 | 108110 |
| sshd 설정 | persist_ssh | 108120 |
| PAM | persist_pam | 108130 |
| sudoers | sudoers 감시 | 108140 |
| 자격증명 | USER_CHAUTHTOK | 108150 |
| SSH CA | persist_ssh | 108160 |
# 계정·인증 지속성 일괄 점검 (분석 방법)
echo "[계정]"; awk -F: '$3==0||($3>=1000&&$7!~/nologin|false/){print $1,$3,$6,$7}' /etc/passwd
echo "[키]"; sudo find / -xdev -name 'authorized_keys*' -exec ssh-keygen -lf {} \; 2>/dev/null
echo "[sshd]"; sudo sshd -T | grep -iE '^(authorizedkeysfile|permitrootlogin|port|trustedusercakeys) '
echo "[PAM]"; rpm -V pam 2>/dev/null || dpkg --verify libpam-modules
echo "[sudo]"; sudo grep -rhE 'NOPASSWD' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
echo "[변경]"; sudo ausearch -m USER_MGMT,USER_CHAUTHTOK -ts this-week -i 2>/dev/null | grep -c type=
[계정] root 0 / kim.dev 1005 ... (기준선 일치)
[키] 기준선 지문만 [sshd] 기준선 일치
[PAM] 이상 없음 [sudo] NOPASSWD 없음
세 층 모두 기준선과 일치하고 이번 주 계정 변경이 모두 티켓으로 설명되는 상태가 정상입니다.
[계정] oldsvc 셸 bash 로 변경, backup UID 0
[키] /root 신규 지문 SHA256:Qm3...
[sudo] apache NOPASSWD: /usr/bin/python3
[변경] auid=webadmin, 02:51~03:07 사이 집중
계정·인증 지속성 종합 판정 흐름입니다(가상의 예시).
[층별 점검] 계정 → 인증 → 권한
↓
[주체·시간 묶기] 같은 auid · 30분 창
↓
[세트 판정] 2개 층 이상 변경 = 지속성 세트
↓
[사용 확인] 세트 구성 계정의 재침투 로그인
↓
[근절] 3층 동시 제거 → 재침투 감시
| 층 | 제거 대상 |
|---|---|
| 계정 | 백도어·UID 0·재활성화 계정 |
| 인증 | 키·CA·sshd·PAM·비밀번호 |
| 권한 | sudoers 규칙 |
근절 순서는 "인증 수단 차단 → 세션 종료 → 계정·권한 정리"가 안전합니다. 세션을 먼저 끊으면 공격자가 남은 경로로 바로 복귀할 수 있습니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108170" level="14">
<if_matched_sid>108110</if_matched_sid>
<if_group>persistence</if_group>
<same_field>audit.auid</same_field>
<timeframe>1800</timeframe>
<description>SSH 키 추가 후 30분 내 동일 사용자의 추가 계정·권한 지속성(지속성 세트)</description>
<mitre><id>TA0003</id></mitre>
</rule>
</group>
SSH 키 추가(108110)를 기점으로 같은 사용자가 다른 지속성 이벤트를 만들면 "지속성 세트"로 보고 최고 수준으로 경보하는 상관 룰 예시입니다.
| 층 | 기법 |
|---|---|
| 계정 | 백도어·UID 0·휴면 |
| 인증 | 키·sshd·PAM·자격증명·CA |
| 권한 | sudoers |
| 원칙 | 3층 동시 근절 |
| 면접 포인트 | "계정·인증·권한은 한 세트 — 한 층만 지우면 나머지 층으로 돌아온다" |
다음 편 419. 지속성·재침투 — cron 기반 지속성 탐지 에서는 crontab·cron.d·cron.hourly 등 cron 위치에 심은 주기 실행 지속성을 작성 주체·내용·실행 기록으로 탐지하는 방법을 다룹니다.
이전 편: 417. 지속성·재침투 — SSH 인증서·신뢰 CA 악용 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점