272. 프로세스·지속성 — systemd 사용자 서비스·autostart 지속성 탐지

changseop lee·2026년 10월 7일

시스템 보안 · 취약점

목록 보기
273/450

시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 22/50편 (전체 272/450)
학습 단계: 지속성(persistence) 메커니즘
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

전역 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 설정 시 로그아웃 후에도 유지되어 서버에서도 유효합니다.

2. 왜 중요한가

  • 사용자 수준 systemd·autostart는 루트 없이 지속성을 제공해 저권한 공격에 유효합니다.
  • linger(enable-linger)는 사용자가 로그아웃해도 서비스를 유지시킵니다.
  • 전역 systemd만 보면 사용자 수준 지속성을 놓치므로 사용자 경로도 감시합니다.

3. 핵심 명령어 / 설정

사용자 지속성위치위험
사용자 systemd~/.config/systemd/user높음
lingerloginctl enable-linger높음(로그아웃 후 유지)
autostart~/.config/autostart중간(GUI)
사용자 crontabcrontab -e높음
정상 사용자 서비스정상정상

4. 실습 (실습 예시)

# 사용자 수준 지속성 탐지 (분석 방법)
# 사용자 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

5. 정상 상태

$ (사용자 systemd 변경) (없음)
$ (사용자 유닛) (없음 또는 정상 사용자 서비스)
$ (linger) (없음 또는 정상 사용자)

사용자 수준 systemd·autostart에 신규 유닛이 없고, 비정상 linger가 없는 상태가 정상입니다.

6. 이상 상태

$ (사용자 유닛)
/home/devops/.config/systemd/user/update.service (ExecStart=/tmp/.x)
$ (linger)
/var/lib/systemd/linger/devops  (로그아웃 후에도 유지 설정)
  • devops 사용자 systemd에 악성 서비스 → 사용자 로그인 시 실행(루트 불필요)
  • linger 설정 → devops 로그아웃 후에도 서비스 유지
  • 사용자 수준 서비스+linger → 저권한 지속성 → 정탐

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

사용자 수준 지속성 분석입니다(가상의 예시).

[등록] ~/.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를 함께 감시합니다.

8. SOC 관제 포인트

  • 사용자 수준 systemd·autostart는 루트 없이 지속성을 제공해 저권한 공격에 유효합니다.
  • linger는 로그아웃 후에도 서비스를 유지시켜 서버에서도 유효합니다.
  • 전역 systemd(F20)와 함께 사용자 경로(~/.config/systemd/user)·linger를 감시합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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 설정 변경도 함께 탐지합니다.

10. 대응 방법

  1. 초기 확인 — 사용자 수준 systemd·autostart 유닛·ExecStart·linger를 확인합니다.
  2. 범위 확인 — 루트 없는 지속성·로그아웃 후 유지(linger)·비표준 실행을 확인합니다.
  3. 증거 확보 — 사용자 유닛·linger·실행 로그를 보존합니다.
  4. 차단/조치 — 사용자 지속성 정탐이면 --user disable·유닛 삭제·linger 해제를 진행합니다.
  5. 재발 방지 — 사용자 수준 지속성 탐지를 전역 systemd와 함께 운영합니다.

11. 핵심 정리

사용자 지속성위치
사용자 systemd~/.config/systemd/user
lingerloginctl enable-linger
autostart~/.config/autostart
사용자 crontabcrontab -e
면접 포인트"사용자 수준 지속성은 루트 불필요 — linger는 로그아웃 후에도 유지"

12. 다음 편 예고

다음 편 273. 프로세스·지속성 — init·rc 스크립트 지속성 탐지 에서는 init·rc 스크립트 지속성을 다루는 init·rc 스크립트 지속성 탐지를 다룹니다.


이전 편: 271. 프로세스·지속성 — 셸 초기화 파일(.bashrc 등) 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글