시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 17/50편 (전체 417/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
대규모 환경에서는 개별 공개키 대신 SSH 인증서(CA 서명)로 접속을 관리합니다. 서버가 신뢰하는 CA 목록에 공격자 CA 공개키를 추가하면, 공격자는 원하는 계정용 인증서를 마음대로 발급해 들어올 수 있습니다.
SSH 인증서 신뢰 구조
sshd_config
TrustedUserCAKeys /etc/ssh/ca.pub ← 신뢰 CA 목록
AuthorizedPrincipalsFile /etc/ssh/principals/%u
공격
· ca.pub에 공격자 CA 한 줄 추가
· principals 파일에 임의 principal 추가
결과: authorized_keys 변경 없이 모든 계정에 접속 가능
핵심: authorized_keys만 감시하면 보이지 않는 "발급소" 지속성
이 방식은 키 파일을 전혀 건드리지 않아 키 기준선 점검을 우회합니다. sshd 로그에는 인증서 ID와 CA 지문이 남으므로 이를 기준으로 추적합니다.
| 확인 | 명령 | 포인트 |
|---|---|---|
| CA 설정 | sshd -T | grep -i trustedusercakeys | 파일 경로 |
| CA 지문 | ssh-keygen -lf /etc/ssh/ca.pub | 기준선 비교 |
| principals | cat /etc/ssh/principals/* | 허용 principal |
| 사용 로그 | grep 'Accepted publickey.*CA' /var/log/secure | 인증서 ID·CA 지문 |
# SSH CA 신뢰 설정 점검 (분석 방법)
sudo sshd -T | grep -iE 'trustedusercakeys|authorizedprincipals|revokedkeys'
CA=$(sudo sshd -T | awk '/^trustedusercakeys/{print $2}')
[ -f "$CA" ] && sudo ssh-keygen -lf "$CA"
# 인증서 로그인 기록: 인증서 ID와 서명 CA 지문 확인
sudo grep -E 'Accepted publickey .* (CERT|cert)|ID .* serial' /var/log/secure | tail
trustedusercakeys /etc/ssh/ca.pub
256 SHA256:CAok...1 corp-ssh-ca (ED25519) ← 기준선 CA 1개
Accepted publickey ... ED25519-CERT SHA256:... ID kim.dev (serial 1201) CA ED25519 SHA256:CAok...1
신뢰 CA가 조직 CA 하나이고, 로그인 인증서의 CA 지문이 기준선과 같으며 인증서 ID가 실제 사용자와 일치하는 상태가 정상입니다.
256 SHA256:CAok...1 corp-ssh-ca (ED25519)
256 SHA256:Zz9...7 (no comment) (ED25519) ← 추가된 CA
Accepted publickey for root ... ID svc-backup (serial 1) CA ED25519 SHA256:Zz9...7 from 203.0.113.50
SSH CA 악용 분석 흐름입니다(가상의 예시).
[CA 파일 변경] FIM·auditd persist_ssh
↓
[CA 지문 비교] 기준선 외 CA 확인
↓
[로그인 추적] secure의 "CA ... SHA256:<지문>" 검색
↓
[범위] 그 CA로 서명된 인증서로 접속한 모든 계정·출발지
| 필드 | 의미 |
|---|---|
| ID | 인증서 발급 시 지정한 식별자 |
| serial | 발급 번호 |
| CA 지문 | 서명한 CA |
인증서 ID와 serial은 발급자가 임의로 정하므로 신뢰할 근거는 CA 지문뿐입니다. 기준선 외 CA 지문의 로그인은 모두 정탐 후보입니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108160" level="13">
<if_sid>108000</if_sid>
<field name="audit.key">persist_ssh</field>
<field name="audit.file.name" type="pcre2">ca\.pub$|/principals/|trusted.*ca</field>
<description>SSH 신뢰 CA·principals 파일 변경(인증서 발급 지속성 의심)</description>
<mitre><id>T1098.004</id></mitre>
</rule>
</group>
CA·principals 파일은 거의 바뀌지 않으므로 변경 자체를 고위험으로 경보하고, 로그 측에서는 기준선 외 CA 지문의 로그인을 별도 룰로 탐지합니다.
| 위치 | 위험 |
|---|---|
| TrustedUserCAKeys | 발급소 추가 |
| principals | 허용 대상 확대 |
| 근거 | CA 지문 |
| 폐기 | RevokedKeys |
| 면접 포인트 | "CA 한 줄은 인증서 발급소 — 키 파일이 아니라 CA 지문을 본다" |
다음 편 418. 지속성·재침투 — 계정·인증 지속성 종합 분석 에서는 I09~I17의 계정·인증 지속성(백도어 계정·UID 0·휴면 계정·SSH 키·sshd·PAM·sudoers·자격증명·CA)을 하나의 점검 체계로 종합합니다.
이전 편: 416. 지속성·재침투 — 자격증명 재설정·해시 교체 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점