시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 22/50편 (전체 272/450)
학습 단계: 지속성(persistence) 메커니즘
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
전역 systemd(F20)는 루트 권한이 필요하지만, 사용자 수준 systemd 서비스(~/.config/systemd/user)와 autostart는 루트 없이도 지속성을 제공합니다. 저권한 공격자가 사용자 세션 거점을 유지하는 데 쓰입니다.
사용자 수준 지속성
사용자 systemd: ~/.config/systemd/user/*.service
systemctl --user enable → 사용자 로그인 시 실행
linger: loginctl enable-linger → 로그아웃 후에도 유지
autostart(GUI): ~/.config/autostart/*.desktop
사용자 crontab: crontab -e (F19)
특징: 루트 없이 사용자 권한으로 지속성 확보
사용자 수준 지속성은 루트 권한이 없어도 되고, linger 설정 시 로그아웃 후에도 유지되어 서버에서도 유효합니다.
| 사용자 지속성 | 위치 | 위험 |
|---|---|---|
| 사용자 systemd | ~/.config/systemd/user | 높음 |
| linger | loginctl enable-linger | 높음(로그아웃 후 유지) |
| autostart | ~/.config/autostart | 중간(GUI) |
| 사용자 crontab | crontab -e | 높음 |
| 정상 사용자 서비스 | 정상 | 정상 |
# 사용자 수준 지속성 탐지 (분석 방법)
# 사용자 systemd 서비스 변경·존재
sudo ausearch -k persist -i --start recent 2>/dev/null | grep -E '\.config/systemd/user|\.config/autostart' | tail
find /home/*/.config/systemd/user /home/*/.config/autostart /root/.config/systemd/user -type f 2>/dev/null
# linger 설정(로그아웃 후 유지)
ls /var/lib/systemd/linger/ 2>/dev/null
$ (사용자 systemd 변경) (없음)
$ (사용자 유닛) (없음 또는 정상 사용자 서비스)
$ (linger) (없음 또는 정상 사용자)
사용자 수준 systemd·autostart에 신규 유닛이 없고, 비정상 linger가 없는 상태가 정상입니다.
$ (사용자 유닛)
/home/devops/.config/systemd/user/update.service (ExecStart=/tmp/.x)
$ (linger)
/var/lib/systemd/linger/devops (로그아웃 후에도 유지 설정)
사용자 수준 지속성 분석입니다(가상의 예시).
[등록] ~/.config/systemd/user/update.service (ExecStart=/tmp/.x)
↓
[활성] systemctl --user enable update
↓
[linger] loginctl enable-linger devops (로그아웃 후 유지)
↓
[실행] 사용자 세션·부팅 시 실행 (루트 없이 지속)
| 요소 | 해석 |
|---|---|
| 사용자 .service | 루트 없는 지속성 |
| --user enable | 사용자 세션 실행 |
| linger | 로그아웃 후 유지 |
| /tmp ExecStart | 비표준 실행 |
전역 systemd만 보면 놓치므로 사용자 경로·linger를 함께 감시합니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,persistence,">
<rule id="105210" level="12">
<if_sid>105060</if_sid>
<field name="audit.file" type="pcre2">\.config/systemd/user/|\.config/autostart/|/var/lib/systemd/linger/</field>
<description>사용자 수준 systemd·autostart·linger 지속성</description>
<mitre><id>T1543.002</id><id>T1547</id></mitre>
</rule>
</group>
사용자 홈의 systemd·autostart를 감시 대상에 포함합니다. linger 설정 변경도 함께 탐지합니다.
| 사용자 지속성 | 위치 |
|---|---|
| 사용자 systemd | ~/.config/systemd/user |
| linger | loginctl enable-linger |
| autostart | ~/.config/autostart |
| 사용자 crontab | crontab -e |
| 면접 포인트 | "사용자 수준 지속성은 루트 불필요 — linger는 로그아웃 후에도 유지" |
다음 편 273. 프로세스·지속성 — init·rc 스크립트 지속성 탐지 에서는 init·rc 스크립트 지속성을 다루는 init·rc 스크립트 지속성 탐지를 다룹니다.
이전 편: 271. 프로세스·지속성 — 셸 초기화 파일(.bashrc 등) 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점