Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

컨테이너 워크플로의 보안과 실행 제한

OCI(Open Container Initiative) 컨테이너는 여러 언어와 도구의 의존성을 묶어 애플리케이션을 배포하는 방식입니다. 복잡한 기존 애플리케이션이나 기본 런타임에 없는 라이브러리를 사용할 수 있지만, Foundry 밖에서 만든 이미지의 취약점과 공급망 위험도 함께 관리해야 합니다.

관리자는 사용하는 이미지를 정기적으로 감사하고 소프트웨어 공급망 통제를 운영해야 합니다. Foundry 컨테이너는 숫자로 지정한 non-root 사용자 ID로 실행해야 하며 커널 특권에 접근할 수 없습니다.

활성화와 취약점 회수

Control Panel의 Container governance > Settings에서 리소스 관리자가 컨테이너 워크플로를 켜거나 끕니다. 기본적으로 모두 꺼져 있으며 Rubix 기반 인프라가 필요합니다. Rubix를 사용하지 않는 환경에서는 토글을 사용할 수 없습니다.

Foundry는 실제로 사용 중인 사용자 업로드 이미지를 주기적으로 검사합니다. Vulnerabilities 탭에서 인스턴스에 영향을 주는 취약점을 확인합니다. 기본적으로 탐지 결과만으로 자동 조치하지는 않습니다.

리소스 관리자는 개별 취약점을 Recall하거나 회수를 해제할 수 있습니다. 회수한 취약점을 가진 컨테이너를 사용하는 Foundry 작업은 강제로 중지됩니다.

메타데이터의 가시성

컨테이너 이미지 이름과 태그, 리소스 식별자, product-group 및 product-name 같은 워크로드 메타데이터는 모니터링과 문제 조사를 위한 로그 및 운영 telemetry에서 Palantir 직원이나 환경 관리자에게 보일 수 있습니다. 비밀번호, 인증 토큰이나 민감한 업무 및 개인 정보를 이름에 넣지 않고 비밀정보 관리 기능으로 분리합니다.

Seccomp 처리 방식

Linux seccomp(Secure Computing Mode)는 프로세스가 호출할 수 있는 시스템 호출을 제한합니다. 일반적인 처리 모드는 다음과 같습니다.

모드의미
LOG허용 목록 밖 호출을 실행하되 auditd 또는 osquery에 기록합니다.
KILL허용 목록 밖 호출을 수행한 프로세스를 종료합니다.
ERRNO호출 실행을 차단하고 오류를 반환하며 별도 로깅 이벤트를 만들지 않습니다.

Palantir 플랫폼에서 아래의 차단 호출을 사용하면 프로세스가 종료되고 사고 대응팀에 알림이 전달됩니다. 애플리케이션이나 사용하는 라이브러리가 이 호출을 필요로 한다면 Palantir Support와 지원 가능 구성을 확인해야 합니다.

자동 차단 시스템 호출

Linux 호출기능
ACCTBSD 방식 프로세스 회계를 켜거나 끕니다.
ADD_KEY커널 키를 만들거나 기존 키를 갱신합니다.
AFS_SYSCALL구현되지 않은 인터페이스입니다.
BPFBerkeley Packet Filter 관련 연산을 수행합니다.
CLOCK_SETTIME지정한 clockid의 시각을 설정합니다.
CREATE_MODULE적재 가능한 커널 모듈 항목을 만드는 이전 인터페이스입니다. Linux 2.6 이후 사용 중단 대상입니다.
DELETE_MODULE이름으로 지정한 미사용 적재 모듈의 제거를 시도합니다.
FANOTIFY_INITFanotify 그룹과 이벤트 큐 descriptor를 만듭니다. CAP_SYS_ADMIN이 관련됩니다.
FINIT_MODULEELF 이미지를 커널에 적재하고 심벌 재배치를 수행합니다.
GETPMSG구현되지 않은 인터페이스입니다.
GET_KERNEL_SYMS커널 심벌을 테이블로 복사하는 이전 인터페이스입니다. Linux 2.6 이후 사용 중단 대상입니다.
GET_MEMPOLICY스레드의 NUMA 메모리 정책을 조회합니다.
INIT_MODULEELF 이미지를 커널 공간에 적재합니다.
IOPERMx86 계열의 I/O 포트 접근 권한을 설정합니다.
IOPLI/O 특권 수준을 바꾸는 이전 인터페이스입니다. IOPERM으로 대체하는 경로가 있습니다.
KCMP두 프로세스가 가상 메모리 등의 커널 리소스를 공유하는지 비교합니다.
KEXEC_FILE_LOAD재부팅으로 실행할 수 있는 새 커널을 파일에서 적재합니다.
KEXEC_LOAD이후 재부팅으로 실행할 새 커널을 적재합니다.
KEYCTL사용자 공간에서 커널 키 관리 기능을 조작합니다.
LOOKUP_DCOOKIE디렉터리 항목의 경로를 반환합니다.
MBIND메모리 범위의 NUMA 정책을 설정합니다.
MIGRATE_PAGES프로세스의 페이지를 다른 노드 집합으로 옮깁니다. CAP_SYS_NICE가 관련됩니다.
MSGRCVSystem V 메시지 큐에서 메시지를 받습니다.
MOUNT파일시스템을 마운트합니다. CAP_SYS_ADMIN이 관련됩니다.
MOVE_PAGES프로세스의 개별 페이지를 다른 노드로 옮깁니다.
NAME_TO_HANDLE_AT경로에 대응하는 파일 handle과 mount ID를 얻습니다. 파일을 여는 작업은 별도입니다.
NFSSERVCTL커널 NFS daemon의 이전 인터페이스입니다. Linux 3.1부터 사용 중단 대상입니다.
OPEN_BY_HANDLE_AT앞서 얻은 handle로 파일을 열고 파일 descriptor를 반환합니다.
PERF_EVENT_OPEN성능 모니터링을 설정합니다.
PIVOT_ROOT루트 mount를 바꿉니다. CAP_SYS_ADMIN이 관련됩니다.
PKEY_ALLOC메모리 보호 키를 할당합니다.
PKEY_FREE메모리 보호 키를 해제합니다.
PKEY_MPROTECT메모리 영역의 보호를 설정합니다.
PROCESS_VM_READV다른 프로세스의 주소 공간에서 데이터를 읽습니다.
PROCESS_VM_WRITEV다른 프로세스의 주소 공간으로 데이터를 씁니다.
PUTPMSG구현되지 않은 인터페이스입니다.
QUERY_MODULE커널 모듈 정보를 조회하는 이전 인터페이스입니다. Linux 2.6에서 사용 중단 대상이 되었습니다.
QUOTACTL디스크 할당량을 관리합니다. CAP_SYS_ADMIN이 관련됩니다.
REBOOT재부팅하거나 Ctrl-Alt-Del 재부팅 키 동작을 제어합니다.
REQUEST_KEY커널 키 관리 기능에 키를 요청합니다.
SECURITY구현되지 않은 인터페이스입니다.
SETDOMAINNAMENIS 도메인 이름을 설정합니다. CAP_SYS_ADMIN이 관련됩니다.
SETHOSTNAME호스트 이름을 설정합니다. CAP_SYS_ADMIN이 관련됩니다.
SETNS스레드를 지정한 namespace로 연결합니다. 대상 namespace의 CAP_SYS_ADMIN이 관련됩니다.
SETSID새 세션과 프로세스 그룹을 만듭니다.
SETTIMEOFDAY날짜, 시각과 시간대 정보를 설정합니다. CAP_SYS_TIME이 관련됩니다.
SET_MEMPOLICY기본 NUMA 메모리 정책을 설정합니다.
SWAPOFF파일 또는 장치의 swap을 끕니다. CAP_SYS_ADMIN이 관련됩니다.
SWAPON파일 또는 장치의 swap을 켭니다. CAP_SYS_ADMIN이 관련됩니다.
SYSFS파일시스템 종류의 정보를 조회합니다.
SYSLOG커널 메시지 ring buffer를 읽거나 지웁니다.
TUXCALL구현되지 않은 인터페이스입니다.
UMOUNT2파일시스템을 해제합니다. CAP_SYS_ADMIN이 관련됩니다.
UNSHARE실행 맥락의 일부를 다른 프로세스와 공유하지 않도록 분리합니다. 일부 옵션에는 CAP_SYS_ADMIN이 필요합니다.
USELIB호출 프로세스가 사용할 공유 라이브러리를 적재하는 이전 인터페이스입니다.
USERFAULTFD사용자 공간에서 page fault를 처리할 descriptor를 만듭니다.
USTAT파일시스템 통계를 얻는 이전 인터페이스입니다.
VHANGUP터미널을 가상으로 연결 해제합니다. CAP_SYS_TTY_CONFIG가 관련됩니다.
VSERVER구현되지 않은 인터페이스입니다.
_SYSCTL시스템 파라미터를 읽고 쓰는 이전 인터페이스입니다.

NUMA 관련 호출은 메모리의 노드별 배치와 접근 비용을 다룹니다. 일반 파일이나 사용자 공간 연산과 달리 호스트 및 커널 상태에 영향을 줄 수 있는 호출은 컨테이너 경계에서 제한됩니다. 로컬 Docker 실행 성공만으로 Foundry의 이 제한까지 충족했다고 판단하지 않습니다.