270. 프로세스·지속성 — systemd 서비스·타이머 지속성 탐지

changseop lee·2026년 10월 7일

시스템 보안 · 취약점

목록 보기
270/450

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

선행 학습

1. 개념

현대 Linux(systemd 기반)에서 systemd 서비스·타이머는 강력한 지속성 수단입니다. 서비스 유닛은 부팅·재시작 시 실행되고, 타이머는 cron처럼 주기 실행합니다. enabled된 악성 유닛은 영구 거점이 됩니다.

systemd 지속성 메커니즘
 서비스 유닛: /etc/systemd/system/*.service
   ExecStart=악성 명령, enable → 부팅 시 실행
 타이머: *.timer → 주기 실행(cron 대체)
 Restart=always → 죽으면 재시작(지속성)
 사용자 유닛: ~/.config/systemd/user/ (F22)

공격: 악성 서비스 등록·enable → 부팅·재시작 복구

systemd 지속성은 enable 상태(부팅 자동 시작)와 Restart=always(죽어도 부활)가 핵심입니다. 신규 서비스·타이머 등록을 감시합니다.

2. 왜 중요한가

  • systemd 서비스는 부팅·재시작 시 자동 실행되어 영구 거점이 됩니다.
  • Restart=always는 프로세스를 죽여도 systemd가 재시작시켜 지속성을 강화합니다.
  • 타이머는 cron을 대체하는 주기 실행 지속성입니다.

3. 핵심 명령어 / 설정

systemd 요소지속 방식위험
*.service enabled부팅 실행높음
Restart=always죽으면 부활높음
*.timer주기 실행높음
ExecStart 악성악성 명령높음
정상 패키지 유닛정상정상

4. 실습 (실습 예시)

# systemd 지속성 탐지 (분석 방법)
# systemd 유닛 변경 이벤트(watch)
sudo ausearch -k persist -i --start recent 2>/dev/null | grep -E 'systemd/system|\.service|\.timer' | tail
# 신규/의심 서비스(기준선 대비 + 의심 ExecStart)
diff /root/baseline/services.txt <(systemctl list-unit-files --state=enabled 2>/dev/null|sort) | grep '^>'
sudo grep -rE 'ExecStart=.*(/tmp/|/dev/shm/|curl|nc |bash -i)' /etc/systemd/system/ 2>/dev/null

5. 정상 상태

$ (systemd 변경) (없음 또는 패키지 설치)
$ (신규 서비스) (없음)
$ (의심 ExecStart) (없음)

systemd 유닛이 패키지·정상 서비스뿐이고, 신규 악성 서비스·의심 ExecStart가 없는 상태가 정상입니다.

6. 이상 상태

$ (신규 서비스) > updater.service
$ (의심 ExecStart)
/etc/systemd/system/updater.service:
  ExecStart=/tmp/.x
  Restart=always
  • 신규 updater.service 등록·enable → 부팅 시 자동 실행(지속성)
  • ExecStart=/tmp/.x + Restart=always → 비표준 경로 실행·죽어도 부활
  • 신규 악성 서비스·Restart=always → 지속성 → 정탐

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

systemd 지속성 분석입니다(가상의 예시).

[등록] /etc/systemd/system/updater.service 생성 (watch/FIM)
   ↓
[활성] systemctl enable updater → 부팅 자동 시작
   ↓
[실행] ExecStart=/tmp/.x (비표준 경로)
   ↓
[부활] Restart=always → 죽여도 systemd가 재시작
 = 부팅 복구 + 죽여도 부활(강력한 지속성)
요소해석
신규 .service지속성 등록
enabled부팅 실행
ExecStart /tmp비표준 실행
Restart=always죽여도 부활

enable+Restart=always가 강력한 지속성을 만듭니다. 제거 시 disable·stop을 함께 해야 합니다.

8. SOC 관제 포인트

  • systemd 서비스·타이머는 부팅·재시작·주기 실행을 제공하는 현대 Linux 지속성입니다.
  • enabled(부팅 실행)·Restart=always(죽어도 부활)가 핵심 지속 메커니즘입니다.
  • 신규 유닛 등록(watch/FIM)·기준선 이탈·의심 ExecStart를 탐지합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,persistence,">
  <rule id="105190" level="13">
    <if_sid>105060</if_sid>
    <field name="audit.file" type="pcre2">/etc/systemd/system/.*\.(service|timer)$|/lib/systemd/system/</field>
    <description>systemd 서비스·타이머 지속성 등록·변경</description>
    <mitre><id>T1543.002</id></mitre>
  </rule>
</group>

유닛 내용(ExecStart 비표준·Restart=always)은 FIM으로 탐지합니다. 패키지 유닛은 기준선 예외로 둡니다.

10. 대응 방법

  1. 초기 확인 — 변경·등록된 systemd 유닛·ExecStart·enable 상태·주체를 확인합니다.
  2. 범위 확인 — 기준선 이탈·비표준 ExecStart·Restart=always를 확인합니다.
  3. 증거 확보 — 유닛 등록 이벤트·내용·실행 로그를 보존합니다.
  4. 차단/조치 — systemd 지속성 정탐이면 stop·disable·유닛 삭제·프로세스 종료를 진행합니다.
  5. 재발 방지 — systemd 유닛 전수 감시 지속성 탐지를 운영합니다.

11. 핵심 정리

systemd 요소지속 방식
*.service enabled부팅 실행
Restart=always죽으면 부활
*.timer주기 실행
ExecStart 악성악성 명령
면접 포인트"systemd는 현대 지속성 — enable+Restart=always, 제거 시 disable·stop 함께"

12. 다음 편 예고

다음 편 271. 프로세스·지속성 — 셸 초기화 파일(.bashrc 등) 지속성 탐지 에서는 셸 초기화 파일 지속성을 다루는 셸 초기화 파일(.bashrc 등) 지속성 탐지를 다룹니다.


이전 편: 269. 프로세스·지속성 — cron 기반 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글