436. 지속성·재침투 — 시스템 바이너리 교체(트로이목마화) 탐지

changseop lee·6일 전

시스템 보안 · 취약점

목록 보기
436/450

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

선행 학습

1. 개념

가장 은밀한 지속성 중 하나는 이미 있는 시스템 바이너리를 바꿔치기하는 것입니다(T1554). 변조된 sshd는 특정 비밀번호를 받으면 무조건 통과시키고, 변조된 passwd는 바뀐 비밀번호를 몰래 기록합니다. 파일 이름과 위치가 그대로라 목록 점검에는 걸리지 않습니다.

교체 대상과 효과
 sshd      → 마스터 비밀번호 백도어, 자격증명 기록
 passwd/su → 입력 비밀번호 수집
 ps/ls/ss  → 특정 프로세스·파일·연결 숨기기
 cron/systemd 관련 바이너리 → 숨은 작업 실행
 판별 근거: 패키지 DB 해시(rpm -V), 외부 기준 해시, 파일 시간·크기

핵심: 이름이 아니라 "해시"로 본다 — 패키지 DB 자체 변조 가능성도 고려

rpm -V 출력 예
 S.5....T.  /usr/sbin/sshd   (S=크기, 5=해시, T=수정 시각 다름)

A영역 25편이 패키지 무결성 점검을 다뤘다면, 이번 편은 교체된 바이너리가 지속성·재침투 수단으로 쓰이는 상황을 탐지·검증하는 데 집중합니다.

2. 왜 중요한가

  • 교체된 바이너리는 근절 후 정상 업무 중에 계속 백도어 역할을 합니다.
  • 목록·설정 기반 점검으로는 발견되지 않습니다.
  • 수집형 변조(passwd·sshd)는 근절 이후 새로 바꾼 비밀번호까지 유출합니다.

3. 핵심 명령어 / 설정

확인명령포인트
패키지 검증rpm -Va / debsums -s5 표시 바이너리
외부 비교sha256sum vs 동일 버전 깨끗한 시스템DB 변조 대비
수정 감사ausearch -k bin_change -i쓴 주체
실행 중 파일ls -l /proc/<pid>/exe(deleted) 여부

4. 실습 (실습 예시)

# 시스템 바이너리 교체 점검 (분석 방법)
sudo rpm -Va 2>/dev/null | grep -E '^..5' | grep -E ' /(usr/)?(s)?bin/'
sudo debsums -s 2>/dev/null | head
# 핵심 바이너리 해시를 외부 기준(골든 이미지)과 비교
for b in /usr/sbin/sshd /usr/bin/passwd /usr/bin/su /usr/bin/ps /usr/bin/ss; do sha256sum "$b"; done > /tmp/bin_now.sha256
diff /root/golden/bin.sha256 /tmp/bin_now.sha256
sudo ausearch -k bin_change -i 2>/dev/null | grep -E 'name=/usr/(s)?bin|exe=|auid=' | tail

5. 정상 상태

rpm -Va: 바이너리 해시 불일치 없음 (설정 파일 c 표시만)
골든 이미지 해시와 일치

패키지 검증에서 바이너리 해시 불일치가 없고, 외부 기준 해시와도 일치하는 상태가 정상입니다.

6. 이상 상태

S.5....T.    /usr/sbin/sshd
S.5....T.    /usr/bin/passwd
bin_change: name=/usr/sbin/sshd auid=webadmin exe=/usr/bin/cp (03:14)
  • sshd·passwd 크기·해시 불일치 → 바이너리 교체
  • cp로 덮어쓴 감사 기록 → 수동 교체(패키지 업데이트 아님)
  • 인증 관련 바이너리 → 백도어·자격증명 수집 의심(정탐)

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

바이너리 교체 분석 흐름입니다(가상의 예시).

[무결성 점검] rpm -Va / debsums → 해시 불일치 목록
   ↓
[교차 검증] 외부 기준 해시(DB 변조 대비)
   ↓
[교체 주체] bin_change 감사 → auid·exe·시각
   ↓
[영향] 교체 이후 해당 바이너리를 거친 인증·명령 → 노출 범위
표시의미
S크기 다름
5해시 다름
T수정 시각 다름
c설정 파일(정상 변경 가능)

공격자가 패키지 DB까지 고쳤다면 rpm -V가 깨끗하게 나올 수 있습니다. 그래서 핵심 바이너리는 외부에 보관한 기준 해시와 비교해야 합니다.

8. SOC 관제 포인트

  • /usr/bin·/usr/sbin 쓰기는 패키지 관리자 외에는 경보합니다.
  • 핵심 인증 바이너리의 해시를 외부(SIEM·골든 이미지)에 보관합니다.
  • 교체 확인 시 그 이후 바뀐 비밀번호까지 모두 노출된 것으로 봅니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108350" level="15">
    <if_sid>108000</if_sid>
    <field name="audit.key">bin_change</field>
    <field name="audit.file.name" type="pcre2">^/usr/(s)?bin/|^/(s)?bin/</field>
    <field name="audit.exe" negate="yes" type="pcre2">/(rpm|dnf|yum|dpkg|apt|unattended-upgrade)</field>
    <description>패키지 관리자 외 시스템 바이너리 쓰기(바이너리 교체 지속성 의심)</description>
    <mitre><id>T1554</id></mitre>
  </rule>
</group>

시스템 바이너리 디렉터리를 -p wa -k bin_change로 감시하고 패키지 관리자가 아닌 쓰기를 최고 수준으로 경보합니다.

10. 대응 방법

  1. 초기 확인 — 교체된 바이너리 목록과 교체 주체·시각을 확인합니다.
  2. 범위 확인 — 교체 이후 해당 바이너리를 거친 인증·명령의 노출 범위를 확인합니다.
  3. 증거 확보 — 변조 바이너리 사본·해시·감사 기록을 보존합니다.
  4. 차단/조치 — 패키지 재설치로 복원하고, 광범위하면 시스템 재설치를 진행하며 비밀번호를 전면 교체합니다.
  5. 재발 방지 — 외부 기준 해시와 바이너리 디렉터리 감시를 운영합니다.

11. 핵심 정리

확인근거
해시rpm -Va·debsums
DB 변조 대비외부 기준 해시
주체bin_change 감사
영향교체 이후 비밀번호 노출
면접 포인트"이름은 같고 내용만 다르다 — 바이너리는 해시로, 기준 해시는 서버 밖에 둔다"

12. 다음 편 예고

다음 편 437. 지속성·재침투 — 근절 후 재침투(복귀) 징후 탐지 에서는 사고 근절 이후 같은 공격자가 돌아오는 징후를 IOC 재출현·같은 기법 재사용·근절 전후 비교로 탐지하고 근절 실패 원인을 찾는 방법을 다룹니다.


이전 편: 435. 지속성·재침투 — 커널 모듈·루트킷 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글