시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 12/50편 (전체 412/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
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영역에서는 재침투 수단으로서의 키를 추적합니다. 키 추가 → 해당 지문 로그인까지 연결하는 것이 핵심입니다.
| 확인 | 명령 / 설정 | 포인트 |
|---|---|---|
| 지문 목록 | ssh-keygen -lf ~/.ssh/authorized_keys | 기준선 비교 |
| 변경 감시 | auditctl -w /root/.ssh -p wa -k account_persist | 작성 주체 |
| 사용 키 | LogLevel VERBOSE | Accepted publickey ... SHA256 |
| 전체 계정 | find / -name authorized_keys* 2>/dev/null | 비표준 위치 |
# 백도어 키 점검 (분석 방법)
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
== /root/.ssh/authorized_keys
256 SHA256:aB1...x2 admin@mgmt (ED25519) ← 기준선 지문
Accepted publickey for root from 10.10.1.5 ... SHA256:aB1...x2
등록된 키 지문이 기준선과 같고, 로그인에 쓰인 지문이 승인된 키이며 출발지가 관리망인 상태가 정상입니다.
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
키 추가 → 사용 연결 분석입니다(가상의 예시).
[키 추가] auditd account_persist (auid·exe·시각)
↓
[지문 계산] ssh-keygen -lf → 신규 지문 SHA256:Qm3...
↓
[사용 추적] secure의 Accepted publickey 지문 검색
↓
[결론] 추가 시각 < 사용 시각 + 외부 출발지 → 재침투 확정
| 단계 | 근거 |
|---|---|
| 추가 | auditd·FIM |
| 식별 | 키 지문 |
| 사용 | sshd VERBOSE 로그 |
키 사용 기록이 없더라도 키가 남아 있는 한 재침투 경로는 열려 있으므로, 사용 여부와 관계없이 제거 대상입니다.
<!-- 실습 예시 룰: 적용 전 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에 포함할 수 있습니다.
| 단계 | 방법 |
|---|---|
| 기준선 | 계정별 키 지문 |
| 추가 탐지 | auditd·FIM |
| 사용 확인 | VERBOSE 지문 로그 |
| 제거 | 키 삭제 + 세션 종료 |
| 면접 포인트 | "키 한 줄은 비밀번호와 무관한 출입증 — 추가된 지문과 그 지문의 로그인을 잇는다" |
다음 편 413. 지속성·재침투 — sshd 설정 변조를 통한 재침투 경로 탐지 에서는 AuthorizedKeysFile·PermitRootLogin·추가 Port·Match 블록 등 sshd 설정 변조로 만든 재침투 경로를 sshd -T 기준선과 감사 로그로 탐지하는 방법을 다룹니다.
이전 편: 411. 지속성·재침투 — 휴면 계정 재활성화 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점