컨테이너 워크플로의 보안과 실행 제한
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 호출 | 기능 |
|---|---|
ACCT | BSD 방식 프로세스 회계를 켜거나 끕니다. |
ADD_KEY | 커널 키를 만들거나 기존 키를 갱신합니다. |
AFS_SYSCALL | 구현되지 않은 인터페이스입니다. |
BPF | Berkeley Packet Filter 관련 연산을 수행합니다. |
CLOCK_SETTIME | 지정한 clockid의 시각을 설정합니다. |
CREATE_MODULE | 적재 가능한 커널 모듈 항목을 만드는 이전 인터페이스입니다. Linux 2.6 이후 사용 중단 대상입니다. |
DELETE_MODULE | 이름으로 지정한 미사용 적재 모듈의 제거를 시도합니다. |
FANOTIFY_INIT | Fanotify 그룹과 이벤트 큐 descriptor를 만듭니다. CAP_SYS_ADMIN이 관련됩니다. |
FINIT_MODULE | ELF 이미지를 커널에 적재하고 심벌 재배치를 수행합니다. |
GETPMSG | 구현되지 않은 인터페이스입니다. |
GET_KERNEL_SYMS | 커널 심벌을 테이블로 복사하는 이전 인터페이스입니다. Linux 2.6 이후 사용 중단 대상입니다. |
GET_MEMPOLICY | 스레드의 NUMA 메모리 정책을 조회합니다. |
INIT_MODULE | ELF 이미지를 커널 공간에 적재합니다. |
IOPERM | x86 계열의 I/O 포트 접근 권한을 설정합니다. |
IOPL | I/O 특권 수준을 바꾸는 이전 인터페이스입니다. IOPERM으로 대체하는 경로가 있습니다. |
KCMP | 두 프로세스가 가상 메모리 등의 커널 리소스를 공유하는지 비교합니다. |
KEXEC_FILE_LOAD | 재부팅으로 실행할 수 있는 새 커널을 파일에서 적재합니다. |
KEXEC_LOAD | 이후 재부팅으로 실행할 새 커널을 적재합니다. |
KEYCTL | 사용자 공간에서 커널 키 관리 기능을 조작합니다. |
LOOKUP_DCOOKIE | 디렉터리 항목의 경로를 반환합니다. |
MBIND | 메모리 범위의 NUMA 정책을 설정합니다. |
MIGRATE_PAGES | 프로세스의 페이지를 다른 노드 집합으로 옮깁니다. CAP_SYS_NICE가 관련됩니다. |
MSGRCV | System 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 | 구현되지 않은 인터페이스입니다. |
SETDOMAINNAME | NIS 도메인 이름을 설정합니다. 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의 이 제한까지 충족했다고 판단하지 않습니다.