시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 15/50편 (전체 415/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
공격자가 일반 계정으로 다시 들어오더라도 sudoers 규칙 하나가 있으면 곧바로 root가 됩니다. 그래서 sudoers 변경은 권한 상승이면서 동시에 재침투 이후를 위한 지속성입니다(T1548.003).
sudoers 지속성 패턴
/etc/sudoers.d/99-sys : webadmin ALL=(ALL) NOPASSWD: ALL
/etc/sudoers : #includedir 경로 추가
서비스 계정 : apache ALL=(root) NOPASSWD: /usr/bin/python3
위장 : 기존 파일 끝에 한 줄 추가, 파일명은 정상처럼
핵심: 재침투 계정 + NOPASSWD = 비밀번호 없이 즉시 root
D영역(29~31편)에서 sudoers 규칙 변경을 권한 변경으로 다뤘다면, 여기서는 "다시 돌아왔을 때 쓰는 규칙"인지, 즉 규칙의 대상 계정이 재침투 경로와 연결되는지를 봅니다.
| 확인 | 명령 | 포인트 |
|---|---|---|
| 문법·전체 | visudo -c | 포함 파일 목록 |
| 실효 권한 | sudo -l -U <user> | NOPASSWD·ALL |
| 신규 파일 | ls -la /etc/sudoers.d/ | 미승인 파일 |
| 위험 규칙 | grep -rE 'NOPASSWD|ALL$' /etc/sudoers* | 대상 계정 |
# sudoers 지속성 점검 (분석 방법)
sudo visudo -c
sudo grep -rnE 'NOPASSWD|^[^#].*ALL *$|includedir' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
# 로그인 가능 계정별 실효 sudo 권한
for u in $(getent passwd | awk -F: '$3>=1000||$1=="apache"{print $1}'); do
sudo -l -U "$u" 2>/dev/null | grep -q NOPASSWD && echo "NOPASSWD 보유: $u"
done
sudo ausearch -k account_persist -f sudoers -i 2>/dev/null | grep -E 'auid=|exe=' | tail
/etc/sudoers.d/ops : %ops ALL=(ALL) ALL (비밀번호 필요, 티켓 CHG-0910)
NOPASSWD 보유: 없음
그룹 단위로 승인된 규칙만 있고, NOPASSWD나 서비스 계정 대상 규칙이 없는 상태가 정상입니다.
/etc/sudoers.d/99-sys (02:57 생성, auid=webadmin, exe=/usr/bin/tee)
webadmin ALL=(ALL) NOPASSWD: ALL
apache ALL=(root) NOPASSWD: /usr/bin/python3
NOPASSWD 보유: webadmin, apache
sudoers 지속성 분석 흐름입니다(가상의 예시).
[변경 감지] sudoers·sudoers.d 감시
↓
[규칙 해석] 대상 계정·실행 명령·NOPASSWD
↓
[재침투 연결] 대상 계정이 웹셸·백도어 계정·키와 연결되는가
↓
[사용 여부] sudo 로그에서 해당 규칙 사용 기록(COMMAND=)
| 규칙 | 위험 |
|---|---|
| NOPASSWD: ALL | 최고 |
| 서비스 계정 sudo | 높음 |
| 인터프리터 허용 | 셸 탈출 가능 |
규칙이 추가된 뒤 실제 sudo 사용이 있었다면 그 이후 시점의 root 행위 전체가 조사 범위가 됩니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108140" level="13">
<if_sid>108000</if_sid>
<field name="audit.key">account_persist</field>
<field name="audit.file.name" type="pcre2">^/etc/sudoers(\.d/.*)?$</field>
<field name="audit.exe" negate="yes" type="pcre2">/visudo$</field>
<description>visudo 외 프로그램의 sudoers 변경(sudo 지속성 규칙 의심)</description>
<mitre><id>T1548.003</id></mitre>
</rule>
</group>
정상 변경은 대부분 visudo나 구성관리 도구를 거치므로, 그 밖의 도구로 sudoers를 쓰는 경우를 높게 경보합니다. 구성관리 계정은 별도 예외 룰로 관리합니다.
| 확인 | 기준 |
|---|---|
| 파일 | sudoers.d 신규 파일 |
| 규칙 | NOPASSWD·ALL·인터프리터 |
| 대상 | 서비스·재침투 계정 |
| 사용 | sudo COMMAND 로그 |
| 면접 포인트 | "sudoers 한 줄은 재침투 후의 root 예약권 — 대상 계정과 재침투 경로를 잇는다" |
다음 편 416. 지속성·재침투 — 자격증명 재설정·해시 교체 탐지 에서는 passwd·chpasswd·shadow 직접 편집으로 기존 계정의 비밀번호를 공격자가 아는 값으로 바꾸는 지속성을 탐지하는 방법을 다룹니다.
이전 편: 414. 지속성·재침투 — PAM 백도어 모듈 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점