
하드닝된 컨테이너 스테이징 프레임워크로, seccomp 시스템 콜 화이트리스트와 eBPF 텔레메트리를 통해 컨테이너 탈출 및 커널 ULP 손상 시도를 탐지하고 차단합니다.
엔터프라이즈급, 심층 방어 컨테이너 격리 및 런타임 보안 원격 측정 프레임워크. Cisco 수석 사이버보안 아키텍트의 관점에서 설계된 Charantej 아키텍처는 스테이징 런타임을 격리하고, 시스템 콜 표면을 제한하며, 호스트 수준 감사를 사용하여 실시간 커널 원격 측정을 계측함으로써 현대 리눅스 컨테이너 배포를 보호합니다.
Charantej 아키텍처는 격리, 최소 권한 격리 및 대역 외 모니터링을 적용하여 보안 경계가 호스트 커널 손상 벡터에 대해 탄력적으로 유지되도록 보장합니다.
flowchart TD
subgraph HostOS ["호스트 OS (보안 리눅스 노드)"]
subgraph Docker ["도커 컨테이너 런타임"]
App["감사된 앱 네임스페이스"]
end
subgraph Auditor ["호스트 감사기 (Falco 엔진)"]
eBPF["eBPF 프로브"]
end
Kernel["호스트 리눅스 커널"]
end
SIEM["SIEM / 로그 저장소"]
App -->|시스템 콜| Kernel
Kernel -->|추적 이벤트| eBPF
eBPF --> Auditor
Auditor -->|원격 측정 로그| SIEM
style HostOS fill:#1e1e1e,stroke:#333,stroke-width:2px
style Docker fill:#2a2a2a,stroke:#007bff,stroke-width:2px
style Auditor fill:#2a2a2a,stroke:#dc3545,stroke-width:2px
style Kernel fill:#333,stroke:#ffc107,stroke-width:2px
style SIEM fill:#1e1e1e,stroke:#28a745,stroke-width:2px,stroke-dasharray: 5 5CAP_SYS_ADMIN, CAP_NET_ADMIN, CAP_NET_RAW 등)을 제거하여 원시 시스템 수준 네트워크 조작을 차단합니다.저수준 설계는 운영상의 시스템 콜 검증 논리, 필터 경로 및 커널 경계 내의 모니터링 엔드포인트를 정의합니다.
flowchart TD
subgraph ContainerSpace ["컨테이너 네임스페이스 (사용자 공간)"]
App["감사된 프로세스"]
end
subgraph SeccompBoundary ["Seccomp 시스템 콜 필터 경계"]
Syscall["시스템 콜 호출"]
Filter{"시스템 콜이 허용 목록에 있는가?"}
Block["SCMP_ACT_ERRNO (차단 및 실패)"]
Allow["허용 및 통과"]
end
subgraph KernelSpace ["리눅스 호스트 커널 공간"]
Handler["시스템 콜 처리기"]
Subsystem["대상 하위 시스템 (예: 네트워크/메모리)"]
end
subgraph TelemetryLayer ["호스트 감사 계층"]
eBPF["eBPF 프로브 계측"]
Falco{"이벤트가 규칙과 일치하는가?"}
Alert["syslog 로그 / SIEM 알람"]
end
App -->|1. 시스템 콜 호출| Syscall
Syscall --> Filter
Filter -->|아니오: 예: setsockopt/socket| Block
Filter -->|예: 예: read/write| Allow
Allow --> Handler
Handler --> Subsystem
Handler -->|2. 실행 추적| eBPF
eBPF --> Falco
Falco -->|예| AlertCharantej 아키텍처는 보안 경계를 적용하기 위해 서로 연결된 세 가지 구성 계층으로 구성됩니다.
오케스트레이션 구성은 런타임 플래그를 통해 다음과 같은 보안 제어를 직접 구현합니다:
--cap-drop=ALL: 모든 기본 리눅스 커널 기능을 제거하여 컨테이너가 낮은 수준의 관리 권한을 얻지 못하도록 방지합니다.--security-opt no-new-privileges:true: setuid 또는 setgid 바이너리를 통해 자식 프로세스가 부모 프로세스보다 더 많은 권한을 얻지 못하도록 방지합니다.--security-opt seccomp=seccomp-profile.json: 허용 목록 기반 시스템 콜 필터링을 구현합니다.seccomp-profile.json)기본적으로 Docker의 seccomp 필터는 광범위한 시스템 콜 목록을 허용합니다. Charantej 아키텍처는 이를 기본 프로세스 실행에 필요한 절대 최소로 제한합니다:
SCMP_ACT_ERRNO): 프로필에 명시적으로 허용되지 않은 모든 시스템 콜을 차단합니다.read, write, exit, exit_group, futex, nanosleep, mmap, munmap, mprotect, close)만 허용합니다.socket 조작, setsockopt 네트워크 변경, 네임스페이스 참여(setns), 기능 집합(capset)을 명시적으로 차단하여 권한 없는 로컬 권한 상승(LPE) 시도를 무력화합니다.호스트 수준 추적 규칙은 프로세스 및 시스템 콜 경계를 개념적으로 모니터링합니다:
Det_Anomalous_Networking: 소켓 옵션을 감사하고 컨테이너화된 프로세스가 상위 계층 프로토콜 또는 ULP 속성(TCP_ULP optname)을 수정하려고 시도하면 즉시 CRITICAL ALERT를 플래그합니다.Container_Privilege_Escalation_Attempt: 네임스페이스 참여(setns) 또는 기능 집합(capset) 수정에 대한 권한 없는 시도를 경고합니다.이 저장소에는 CVE-2026-46300에 대한 라이브 익스플로잇 시뮬레이션이 포함되어 있어 Charantej 아키텍처의 효과를 실제로 보여줍니다. 이 익스플로잇은 두 가지 벡터를 시도합니다:
setns()를 사용하여 호스트 마운트 네임스페이스를 하이재킹하려고 시도합니다.setsockopt(TCP_ULP)를 통해 권한 없는 ULP 메모리 조작을 시도합니다.헬퍼 스크립트가 제공되어 자동으로 익스플로잇을 빌드하고, 완화되지 않은 컨테이너(취약한 시스템을 나타냄)와 Charantej로 보호된 컨테이너에 대해 실행합니다.
bash run_exploit.sh
익스플로잇이 setns()와 setsockopt()를 모두 성공적으로 실행하여 "VULNERABLE" 상태를 보고합니다.
sequenceDiagram
participant App as 권한 없는 앱 (Fragnesia 페이로드)
participant Cap as 기능 확인 (커널)
participant NS as /proc/self/ns/mnt (호스트 네임스페이스)
participant Sys as 시스템 콜 인터페이스
participant ULP as 커널 ULP 메모리
Note over App,ULP: 1단계: 네임스페이스 하이재킹
App->>Cap: 1. setns(FD, 0)
Cap-->>App: 허용됨 (cap_drop 없음)
App->>NS: 호스트 네임스페이스 하이재킹
NS-->>App: 성공: 컨테이너 격리 우회
Note over App,ULP: 2단계: ULP 메모리 손상 (CVE-2026-46300)
App->>Sys: 2. socket(AF_INET, SOCK_STREAM, 0)
Sys-->>App: FD 할당됨
App->>ULP: 3. setsockopt(FD, IPPROTO_TCP, TCP_ULP, "tls")
Note right of ULP: 권한 없는 메모리 수정 시도
ULP-->>App: 성공: 악성 페이로드 주입됨
Note over App,ULP: 영향: 호스트 커널 메모리 손상됨!익스플로잇이 차단됩니다. setns()는 기능 드롭(EPERM)에 의해 차단되고, socket() / setsockopt()는 Seccomp 시스템 콜 필터 경계(또는 실행 프로필에 따른 기능 드롭)에 의해 명시적으로 무력화되어 "BLOCKED" 상태를 보고합니다. 이는 Fragnesia 페이로드가 실행되더라도 Charantej 아키텍처가 호스트를 익스플로잇으로부터 안전하게 격리함을 확인합니다.
sequenceDiagram
participant App as 권한 없는 앱 (Fragnesia 페이로드)
participant Cap as 기능 드롭 (ALL)
participant NS as /proc/self/ns/mnt (호스트 네임스페이스)
participant Sec as Seccomp 필터 경계
participant ULP as 커널 ULP 메모리
Note over App,ULP: 1단계: 네임스페이스 하이재킹 시도
App->>Cap: 1. setns(FD, 0)
Cap-->>App: 차단됨 (EPERM - 작업이 허용되지 않음)
Note left of Cap: 방어 트리거됨: 네임스페이스 이스케이프 무력화됨
Cap-xNS: 호스트 네임스페이스에 도달할 수 없음
Note over App,ULP: 2단계: ULP 메모리 손상 시도
App->>Sec: 2. socket() / setsockopt(TCP_ULP)
Sec-->>App: 차단됨 (EPERM - 작업이 허용되지 않음)
Note left of Sec: 방어 트리거됨: 소켓 작업 무력화됨
Sec-xULP: 커널 ULP 컨텍스트에 도달할 수 없음
Note over App,ULP: 영향: 익스플로잇이 완전히 격리됨. 호스트는 안전합니다!