417. 지속성·재침투 — SSH 인증서·신뢰 CA 악용 탐지

changseop lee·6일 전

시스템 보안 · 취약점

목록 보기
417/450

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

선행 학습

1. 개념

대규모 환경에서는 개별 공개키 대신 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 지문이 남으므로 이를 기준으로 추적합니다.

2. 왜 중요한가

  • CA 한 줄은 수많은 인증서를 만들 수 있는 "발급 권한"이라 영향 범위가 큽니다.
  • authorized_keys 점검만으로는 발견되지 않습니다.
  • 인증서 기반 환경이 늘어나면서 새로운 지속성 위치가 되고 있습니다.

3. 핵심 명령어 / 설정

확인명령포인트
CA 설정sshd -T | grep -i trustedusercakeys파일 경로
CA 지문ssh-keygen -lf /etc/ssh/ca.pub기준선 비교
principalscat /etc/ssh/principals/*허용 principal
사용 로그grep 'Accepted publickey.*CA' /var/log/secure인증서 ID·CA 지문

4. 실습 (실습 예시)

# 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

5. 정상 상태

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가 실제 사용자와 일치하는 상태가 정상입니다.

6. 이상 상태

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
  • 신뢰 CA 파일에 미승인 CA 추가 → 공격자 인증서 발급소
  • serial 1, 업무와 무관한 ID의 인증서로 root 접속 → 공격자 발급 인증서
  • authorized_keys 변화 없음 → 키 점검으로는 발견 불가

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

SSH CA 악용 분석 흐름입니다(가상의 예시).

[CA 파일 변경] FIM·auditd persist_ssh
   ↓
[CA 지문 비교] 기준선 외 CA 확인
   ↓
[로그인 추적] secure의 "CA ... SHA256:<지문>" 검색
   ↓
[범위] 그 CA로 서명된 인증서로 접속한 모든 계정·출발지
필드의미
ID인증서 발급 시 지정한 식별자
serial발급 번호
CA 지문서명한 CA

인증서 ID와 serial은 발급자가 임의로 정하므로 신뢰할 근거는 CA 지문뿐입니다. 기준선 외 CA 지문의 로그인은 모두 정탐 후보입니다.

8. SOC 관제 포인트

  • 신뢰 CA 파일과 principals 디렉터리를 키 파일과 같은 수준으로 감시합니다.
  • 인증서 로그인 로그의 CA 지문을 필드로 파싱해 대시보드화합니다.
  • CA 침해가 의심되면 RevokedKeys로 해당 CA·인증서를 폐기합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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 지문의 로그인을 별도 룰로 탐지합니다.

10. 대응 방법

  1. 초기 확인 — 추가된 CA 지문과 principals 변경 내용을 확인합니다.
  2. 범위 확인 — 해당 CA로 서명된 인증서의 모든 로그인을 조사합니다.
  3. 증거 확보 — CA 파일 사본·sshd 로그를 보존합니다.
  4. 차단/조치 — 미승인 CA를 제거하고 RevokedKeys에 등록한 뒤 sshd를 재시작합니다.
  5. 재발 방지 — CA·principals 감시와 CA 지문 기준선을 운영합니다.

11. 핵심 정리

위치위험
TrustedUserCAKeys발급소 추가
principals허용 대상 확대
근거CA 지문
폐기RevokedKeys
면접 포인트"CA 한 줄은 인증서 발급소 — 키 파일이 아니라 CA 지문을 본다"

12. 다음 편 예고

다음 편 418. 지속성·재침투 — 계정·인증 지속성 종합 분석 에서는 I09~I17의 계정·인증 지속성(백도어 계정·UID 0·휴면 계정·SSH 키·sshd·PAM·sudoers·자격증명·CA)을 하나의 점검 체계로 종합합니다.


이전 편: 416. 지속성·재침투 — 자격증명 재설정·해시 교체 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글