425. 지속성·재침투 — 셸 초기화 파일 지속성 탐지

changseop lee·2026년 10월 9일

시스템 보안 · 취약점

목록 보기
425/450

시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 25/50편 (전체 425/450)
학습 단계: 스케줄·서비스·부팅 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

셸 초기화 파일은 사용자가 로그인하거나 셸을 열 때마다 실행됩니다(T1546.004). 관리자가 로그인하는 순간 백도어가 다시 켜지도록 만들 수 있어, 관리자의 정상 행동이 지속성의 트리거가 됩니다.

셸 초기화 파일
 전역 : /etc/profile, /etc/profile.d/*.sh, /etc/bashrc (/etc/bash.bashrc)
 개인 : ~/.bash_profile, ~/.bashrc, ~/.profile, ~/.bash_logout
 흔한 삽입
  · (nohup /tmp/.x >/dev/null 2>&1 &)        ← 로그인 시 백도어 기동
  · alias sudo='/tmp/.s'                      ← 비밀번호 가로채기
  · export PROMPT_COMMAND='...'               ← 명령마다 실행

핵심: 전역 파일은 "모든 사용자", alias 변조는 "자격증명 수집"

특히 alias sudo나 PROMPT_COMMAND 변조는 지속성과 자격증명 수집을 동시에 노리는 패턴이라 우선순위가 높습니다.

2. 왜 중요한가

  • 관리자 로그인이 곧 백도어 재기동이 되어 근절 후에도 다시 살아납니다.
  • 개인 파일은 사용자가 자유롭게 바꾸므로 변경 자체만으로는 판단이 어렵습니다.
  • 전역 파일 변경은 모든 계정에 영향을 줘 파급이 큽니다.

3. 핵심 명령어 / 설정

확인명령포인트
해시 비교sha256sum /etc/profile.d/* /etc/bashrc기준선 diff
위험 패턴grep -nE 'nohup|alias sudo|PROMPT_COMMAND|/dev/tcp'삽입 줄
개인 파일find /home /root -maxdepth 2 -name '.bash*' -newer <기준>최근 변경
패키지rpm -qf /etc/profile.d/<file>미소유

4. 실습 (실습 예시)

# 셸 초기화 파일 점검 (분석 방법)
sudo sha256sum /etc/profile /etc/profile.d/* /etc/bashrc 2>/dev/null | diff /root/baseline/persist-*/shell.sha256 -
sudo grep -nE 'nohup|alias +(sudo|su|ssh)=|PROMPT_COMMAND|/dev/tcp|base64 -d|curl|wget' \
  /etc/profile /etc/profile.d/* /etc/bashrc /root/.bash* /home/*/.bash* 2>/dev/null
sudo find /root /home -maxdepth 2 -name '.bash*' -mtime -7 -ls 2>/dev/null

5. 정상 상태

/etc/profile.d/ : bash_completion.sh, colorls.sh, lang.sh (패키지 소유, 해시 일치)
위험 패턴: 없음

전역 파일이 패키지 소유·해시 일치이고, 개인 파일에 백그라운드 실행·alias 변조·네트워크 명령이 없는 상태가 정상입니다.

6. 이상 상태

/etc/profile.d/sys-locale.sh (미소유, 03:01 생성)
  (nohup /usr/lib/.x/agent >/dev/null 2>&1 &)
/root/.bashrc:31: alias sudo='/var/tmp/.s/sudo'
  • 미소유 profile.d 파일 + 백그라운드 실행 → 모든 로그인 시 백도어 기동
  • root의 sudo alias 변조 → 가짜 sudo로 비밀번호 수집
  • 정상 locale 설정처럼 보이는 파일명 → 위장

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

셸 초기화 파일 분석 흐름입니다(가상의 예시).

[변경 감지] profile.d·bashrc 감시 + 해시 기준선
   ↓
[패턴 검사] nohup/& · alias 변조 · PROMPT_COMMAND · 네트워크 명령
   ↓
[영향 범위] 전역(모든 사용자) vs 개인(해당 계정)
   ↓
[실행 흔적] 로그인 이후 생성된 백그라운드 프로세스·수집 파일
패턴목적
nohup ... &백도어 재기동
alias sudo비밀번호 수집
PROMPT_COMMAND명령마다 실행

가짜 sudo가 발견되면 그 이후 해당 계정으로 sudo를 쓴 모든 관리자의 비밀번호가 노출된 것으로 보고 교체 대상에 넣습니다.

8. SOC 관제 포인트

  • 전역 셸 초기화 파일은 FIM 실시간 감시 대상으로 둡니다.
  • 개인 파일은 위험 패턴 중심으로 정기 검사합니다.
  • alias 변조 발견 시 비밀번호 교체 범위를 즉시 산정합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108240" level="12">
    <if_sid>108000</if_sid>
    <field name="audit.key">persist_shell</field>
    <field name="audit.file.name" type="pcre2">^/etc/(profile|bashrc|bash\.bashrc)$|^/etc/profile\.d/|/\.(bashrc|bash_profile|profile|bash_logout)$</field>
    <description>셸 초기화 파일 변경(로그인 트리거 지속성 의심)</description>
    <mitre><id>T1546.004</id></mitre>
  </rule>
</group>

전역 파일은 모든 변경을 경보하고, 개인 파일은 변경이 잦을 수 있으므로 FIM diff의 위험 패턴 포함 여부로 하위 룰을 분리해 운영합니다.

10. 대응 방법

  1. 초기 확인 — 변경된 셸 초기화 파일과 삽입된 줄을 확인합니다.
  2. 범위 확인 — 같은 패턴이 다른 계정 파일에도 있는지, 가짜 바이너리가 있는지 확인합니다.
  3. 증거 확보 — 파일 사본·해시·감사 기록을 보존합니다.
  4. 차단/조치 — 삽입 줄과 가짜 바이너리를 제거하고 영향 계정의 비밀번호를 교체합니다.
  5. 재발 방지 — 전역 파일 FIM과 위험 패턴 점검을 운영합니다.

11. 핵심 정리

범위위치
전역/etc/profile(.d), /etc/bashrc
개인~/.bashrc, ~/.bash_profile
위험 패턴nohup·alias sudo·PROMPT_COMMAND
파급비밀번호 수집 가능
면접 포인트"관리자의 로그인이 트리거가 된다 — alias sudo 변조는 지속성이자 자격증명 탈취"

12. 다음 편 예고

다음 편 426. 지속성·재침투 — udev 규칙 지속성 탐지 에서는 장치 이벤트마다 명령을 실행하는 udev 규칙(RUN+=)을 악용한 지속성을 rules.d 감시와 규칙 내용 분석으로 탐지하는 방법을 다룹니다.


이전 편: 424. 지속성·재침투 — rc.local·init 스크립트 부팅 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글