[방어] 분석 — CVE-2023-51384
CVE‑2023‑51384 allows unconstrained PKCS#11 keys to be added to ssh-agent on OpenSSH <9.6, and the immediate mitigation is to disable execution of the pkcs11-helper binary (chmod 700) while monitoring for abnormal key‑addition events.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00426 · 악용난이도 hard
🔍 공격 기법
OpenSSH 8.9‒9.5의 ssh‑agent에서 PKCS#11 토큰을 통해 여러 개인키를 추가할 때, 목적지 제약이 첫 번째 키에만 적용되고 나머지는 제한 없이 남습니다. 로컬 사용자가 ssh-add -s <pkcs11.so> 명령으로 토큰을 등록하면, 제약이 적용되지 않은 두 번째·이후 키가 ssh‑agent에 그대로 저장되어 이후 인증 시 무제한으로 사용할 수 있게 됩니다.
💥 영향 분석
공격자가 제한 없이 추가된 PKCS#11 개인키를 이용해 SSH 인증을 우회하거나, 해당 키로 서명된 데이터를 위조할 수 있습니다. 특히 내부 시스템에서 하드웨어 토큰을 공유하는 경우, 권한이 낮은 계정이 높은 권한의 키를 탈취하여 승격 또는 무단 접근이 가능해집니다.
🔗 관련 취약점·체이닝
- OpenSSH 7.x‑8.x 대역에 존재하던
ssh-agent메모리 누수(CVE‑2018‑15473)와 결합하면, 악성 키를 지속적으로 유지하면서 탐지를 회피할 수 있습니다. - 현재 알려진 직접적인 체이닝 CVE는 없으며, 별도 취약점과 연계 시 권한 상승·세션 하이재킹 위험이 증가합니다.
🔎 탐지
- 로그 위치:
/var/log/auth.log,journalctl -u ssh-agent(systemd 기반), 또는 사용자 세션 로그(~/.ssh/agent.*). - 주요 필드:
msg="Added identity",key_fingerprint=...,pkcs11_provider=...,timestamp. - SIEM 규칙 예시 (Splunk)
text1index=linux sourcetype=syslog ("ssh-agent" AND "Added identity")2| eval is_pkcs11 = if(match(_raw,"pkcs11.so"),1,0)3| stats count by host,user,_time,is_pkcs11,fingerprint4| where is_pkcs11=1 AND count > 1
- 정규식 예시
ssh-agent.*Added (?:identity|key): (\S+) \(provider: .*pkcs11\.so\)– 동일 세션 내에서 여러 피그너트가 연속으로 기록될 경우 경보. - 오탐 튜닝: 정상적으로 다중 키를 보유한 HSM/스마트카드 사용자는 화이트리스트에 추가하고,
pkcs11_provider경로와 사용자 계정을 기준으로 허용 범위를 제한합니다. 또한 5분 이내에 동일 세션에서 3개 이상 키가 추가되는 경우만 알림을 발생시켜 잡음 감소를 꾀합니다.
🛡️ 완화 방안
-
즉시(긴급 차단)
chmod 700 /usr/libexec/openssh/pkcs11-helper로 pkcs11‑helper 실행 권한을 root 전용으로 제한합니다. 이는 모든 비특권 사용자가 PKCS#11 기반 키를 ssh‑agent에 등록하는 것을 즉시 차단합니다.- 난이도: 낮음 – 단일 명령어 실행만 필요합니다.
- 운영 영향: PKCS#11 토큰을 사용하는 정상 서비스가 일시 중지됩니다.
- 검증:
ssh-add -s /usr/libexec/openssh/pkcs11-helper실행 시 “Permission denied” 오류 확인.
-
단기(완화)
/etc/ssh/sshd_config에서AllowAgentForwarding no를 설정하고 sshd를 재시작합니다. 원격 세션에서 에이전트 포워딩을 차단해 공격자가 다른 호스트에 키를 전파하는 경로를 제거합니다.- 난이도: 중간 – 구성 파일 수정 및 서비스 재시작 필요.
- 운영 영향: 기존에 에이전트 포워딩을 활용하던 개발·관리 작업에 제한이 발생할 수 있습니다.
- 검증:
ssh -vv user@host로 연결 시 “Agent forwarding disabled” 메시지 확인.
-
근본(해결)
- OpenSSH 9.6 이상으로 업그레이드하거나, 해당 버전의 패치를 적용합니다. 배포판 제공 업데이트가 없을 경우 소스 컴파일 후
/usr/sbin/sshd·/usr/libexec/openssh/ssh-agent를 교체합니다. - 난이도: 높음 – 서비스 중단 및 테스트 환경 검증 필요.
- 운영 영향: 재시작 시 일시적인 SSH 접속 불가, 버전 호환성 점검 필요.
- 검증:
ssh -V로 9.6 이상 확인 후 동일 키 추가 실험을 수행해 제약이 모든 키에 적용되는지 검증합니다.
- OpenSSH 9.6 이상으로 업그레이드하거나, 해당 버전의 패치를 적용합니다. 배포판 제공 업데이트가 없을 경우 소스 컴파일 후
-
잔여 리스크
- 패치 전까지 pkcs11‑helper 실행 제한 외에 다른 경로(예: 사용자 정의 PKCS#11 라이브러리)로 우회 가능성이 남아 있습니다. 따라서 위 즉시 차단과 함께 정기적인 로그 모니터링을 유지해야 합니다.
-
인시던트 대응 플레이북
- 알림 발생 시
journalctl -u ssh-agent로 최근 키 추가 기록 확인. - 해당 세션의 UID와 실행된 pkcs11‑provider 경로를 식별.
- 의심되는 키 피그너트를
ssh-keygen -l -f <keyfile>로 검증하고, 필요 시ssh-add -D로 모든 에이전트 키를 제거. - 침해 가능성이 확인되면 해당 계정의 SSH 인증서와 토큰을 폐기하고, 시스템 전체에 패치를 적용 후 재검증.
- 알림 발생 시
우선순위 근거: 다중 소스 교차검증 결과 일관성을 확인했으며([교차검증] 신뢰도 1.0), EPSS 0.00426은 실제 악용 가능성이 낮지만 CVSS 5.5·AV:L·AC:L·PR:L·UI:N 로 로컬 권한을 가진 공격자에게 위험이 존재함을 나타냅니다. KEV에 등재되지 않았고 exploit 난이도가 hard인 점을 고려해 “monitor” 전략으로 우선순위를 설정했습니다([우선순위 결정]). 따라서 즉시 차단과 동시에 로그 기반 모니터링을 강화하는 것이 최적 대응입니다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00426 · exploit=hard · in_scope=None