412. 지속성·재침투 — SSH authorized_keys 백도어 키 탐지

changseop lee·4일 전

시스템 보안 · 취약점

목록 보기
412/450

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

선행 학습

1. 개념

SSH 공개키 한 줄은 비밀번호가 바뀌어도 유지되는 출입증입니다(T1098.004). 공격자는 root나 서비스 계정의 authorized_keys에 자신의 키를 추가해 언제든 다시 들어옵니다.

authorized_keys 백도어 키
 /root/.ssh/authorized_keys
   ssh-ed25519 AAAA...(관리자)  admin@mgmt
   ssh-ed25519 AAAA...(추가됨)  (주석 없음)  ← 백도어
 변형
  · 옵션 숨기기: command="...",no-pty 등
  · 다른 경로: AuthorizedKeysFile 변경(다음 편)

핵심: 키 지문 목록을 기준선으로 두고 "추가된 지문"을 본다

B영역 16~17편에서 키 구조와 변조 탐지를 다뤘다면, I영역에서는 재침투 수단으로서의 키를 추적합니다. 키 추가 → 해당 지문 로그인까지 연결하는 것이 핵심입니다.

2. 왜 중요한가

  • 키 기반 접속은 비밀번호 변경·계정 잠금 해제 없이도 유지됩니다.
  • 주석은 임의로 쓸 수 있어 이름만으로 정상 키를 판단할 수 없습니다.
  • sshd VERBOSE 로그의 지문으로 "어떤 키가 쓰였는지" 확정할 수 있습니다.

3. 핵심 명령어 / 설정

확인명령 / 설정포인트
지문 목록ssh-keygen -lf ~/.ssh/authorized_keys기준선 비교
변경 감시auditctl -w /root/.ssh -p wa -k account_persist작성 주체
사용 키LogLevel VERBOSEAccepted publickey ... SHA256
전체 계정find / -name authorized_keys* 2>/dev/null비표준 위치

4. 실습 (실습 예시)

# 백도어 키 점검 (분석 방법)
for f in $(sudo find /root /home -name 'authorized_keys*' 2>/dev/null); do
  echo "== $f"; sudo ssh-keygen -lf "$f"
done
# 키 파일 변경 주체
sudo ausearch -k account_persist -f authorized_keys -i 2>/dev/null | grep -E 'exe=|auid=' | tail
# 실제 사용된 키 지문 (LogLevel VERBOSE 필요)
sudo grep 'Accepted publickey' /var/log/secure | grep -oE 'for [^ ]+ from [^ ]+|SHA256:[^ ]+' | paste - - | sort | uniq -c

5. 정상 상태

== /root/.ssh/authorized_keys
256 SHA256:aB1...x2 admin@mgmt (ED25519)   ← 기준선 지문
Accepted publickey for root from 10.10.1.5 ... SHA256:aB1...x2

등록된 키 지문이 기준선과 같고, 로그인에 쓰인 지문이 승인된 키이며 출발지가 관리망인 상태가 정상입니다.

6. 이상 상태

256 SHA256:Qm3...k9 (no comment) (ED25519)   ← 신규
type=PATH name=/root/.ssh/authorized_keys auid=webadmin exe=/usr/bin/bash (echo >>)
Accepted publickey for root from 203.0.113.50 ... SHA256:Qm3...k9
  • 기준선에 없는 주석 없는 키 추가 → 백도어 키 후보
  • 셸 리다이렉션(echo >>)으로 추가 → 수동 삽입
  • 같은 지문으로 외부 IP root 로그인 → 재침투에 사용됨(정탐)

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

키 추가 → 사용 연결 분석입니다(가상의 예시).

[키 추가] auditd account_persist (auid·exe·시각)
   ↓
[지문 계산] ssh-keygen -lf → 신규 지문 SHA256:Qm3...
   ↓
[사용 추적] secure의 Accepted publickey 지문 검색
   ↓
[결론] 추가 시각 < 사용 시각 + 외부 출발지 → 재침투 확정
단계근거
추가auditd·FIM
식별키 지문
사용sshd VERBOSE 로그

키 사용 기록이 없더라도 키가 남아 있는 한 재침투 경로는 열려 있으므로, 사용 여부와 관계없이 제거 대상입니다.

8. SOC 관제 포인트

  • authorized_keys 변경은 계정마다 드물어 모든 변경을 경보로 다뤄도 부담이 적습니다.
  • sshd LogLevel VERBOSE를 켜야 키 지문 기반 추적이 가능합니다.
  • 키 추가와 같은 지문의 로그인을 상관 룰로 묶습니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108110" level="12">
    <if_sid>108000</if_sid>
    <field name="audit.key">account_persist</field>
    <field name="audit.file.name" type="pcre2">authorized_keys2?$</field>
    <description>authorized_keys 변경(백도어 SSH 키 추가 의심)</description>
    <mitre><id>T1098.004</id></mitre>
  </rule>
</group>

키 파일 변경을 auditd로 잡고, Wazuh FIM(whodata)을 함께 쓰면 변경 전후 내용 diff까지 Alert에 포함할 수 있습니다.

10. 대응 방법

  1. 초기 확인 — 추가된 키의 지문·주석·옵션과 추가 주체를 확인합니다.
  2. 범위 확인 — 모든 계정의 authorized_keys와 해당 지문의 로그인 기록을 확인합니다.
  3. 증거 확보 — 키 파일 사본·auditd 기록·sshd 로그를 보존합니다.
  4. 차단/조치 — 미승인 키를 제거하고 해당 지문으로 접속한 세션을 종료합니다.
  5. 재발 방지 — 키 지문 기준선과 VERBOSE 로깅을 상시 운영합니다.

11. 핵심 정리

단계방법
기준선계정별 키 지문
추가 탐지auditd·FIM
사용 확인VERBOSE 지문 로그
제거키 삭제 + 세션 종료
면접 포인트"키 한 줄은 비밀번호와 무관한 출입증 — 추가된 지문과 그 지문의 로그인을 잇는다"

12. 다음 편 예고

다음 편 413. 지속성·재침투 — sshd 설정 변조를 통한 재침투 경로 탐지 에서는 AuthorizedKeysFile·PermitRootLogin·추가 Port·Match 블록 등 sshd 설정 변조로 만든 재침투 경로를 sshd -T 기준선과 감사 로그로 탐지하는 방법을 다룹니다.


이전 편: 411. 지속성·재침투 — 휴면 계정 재활성화 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글