본문으로 건너뛰기
피드

Linux 샌드박스와 Fil-C: 메모리 안전성과 샌드박싱을 동시에

security 약 7분
vote
0
댓글
북마크

메모리 안전 C/C++ 구현체 Fil-C에 OpenSSH의 seccomp-BPF 샌드박스를 포팅한 과정을 다룸. 메모리 안전성과 샌드박싱은 직교하는 개념이며 둘 다 필요함. GC 스레드 충돌 문제를 zlock_runtime_threads() API로 해결하고, seccomp 필터 3건만 수정하여 기존 보안 수준을 유지하면서 메모리 안전성을 확보함.

  • 1

    메모리 안전성과 샌드박싱은 직교 개념으로, 둘 다 갖추는 것이 최선의 방어임

  • 2

    Fil-C의 GC 백그라운드 스레드가 OpenSSH의 프로세스 생성 금지 규칙과 충돌하여 zlock_runtime_threads() API를 추가함

  • 3

    seccomp 필터 변경은 SECCOMP_RET_KILL_PROCESS, MAP_NORESERVE, sched_yield 3건뿐이었음

  • 4

    prctl 래핑으로 filc_runtime_threads_handshake를 통해 모든 스레드에 seccomp 필터를 적용함

메모리 안전성과 샌드박싱은 별개의 개념임

  • 메모리 안전성(memory safety)과 샌드박싱(sandboxing)은 직교(orthogonal)하는 개념임. 둘 중 하나만 있어도 되고, 둘 다 있을 수도 있음
  • 순수 Java 프로그램은 메모리 안전하지만 샌드박스 없이 파일 시스템에 자유롭게 접근 가능함. 사용자 파일을 마음대로 덮어쓸 수 있어 위험함
  • 반대로, 어셈블리로 작성된 프로그램이라도 OS에 모든 권한을 반납하면 메모리 버그가 있어도 파일 접근 자체가 불가능함
  • 실제 샌드박스에는 구조적 구멍이 있음. 더 높은 권한을 가진 브로커 프로세스(broker process)에 메시지를 보낼 수 있기 때문에, 메모리 버그로 악성 메시지를 만들어 브로커를 공격하는 시나리오가 가능함
quadrantChart
    title 메모리 안전성 vs 샌드박싱
    x-axis "샌드박싱 없음" --> "샌드박싱 있음"
    y-axis "메모리 안전하지 않음" --> "메모리 안전함"
    quadrant-1 "최선: Fil-C + seccomp"
    quadrant-2 "Java 프로그램 (파일 접근 가능)"
    quadrant-3 "일반 C/C++ (가장 위험)"
    quadrant-4 "어셈블리 + 권한 반납"

Fil-C란 무엇인가

  • Fil-C는 C/C++의 메모리 안전 구현체(memory safe implementation)임. 일반적인 메모리 안전 언어와 달리 Linux syscall 레벨까지 안전성을 보장함
  • init, udevd 같은 저수준 시스템 컴포넌트에서도 사용 가능할 만큼 런타임이 견고함
  • OpenSSH를 포함한 다수의 프로그램이 Fil-C에서 동작함

OpenSSH의 Linux 샌드박스 구조

  • OpenSSH는 비특권 sshd-session 프로세스에 다음 4가지 기술을 적용함:
    • chroot: 파일 시스템 접근 범위 제한
    • 사용자/그룹 분리: sshd 전용 사용자에게 권한 없음
    • setrlimit: 파일 열기, 프로세스 생성, 파일 쓰기 차단
    • seccomp-BPF: 허용된 syscall만 통과시키는 필터. 목록 외 syscall은 SIGSYS로 프로세스 종료

핵심 문제: Fil-C의 GC 스레드와 샌드박스 충돌

  • Fil-C 런타임은 가비지 컬렉션(GC)용 백그라운드 스레드를 사용하며, 사용하지 않을 때 자동으로 종료했다가 필요 시 재시작함
  • Linux에서 스레드는 경량 프로세스이므로, 스레드 생성은 OpenSSH의 "새 프로세스 금지" setrlimit 규칙을 위반함
  • clone3 같은 syscall도 seccomp 허용 목록에 없음

해결책: zlock_runtime_threads() API

  • <stdfil.h>에 새 API zlock_runtime_threads()를 추가함
  • 이 함수를 호출하면 런타임이 필요한 스레드를 즉시 모두 생성하고, 이후 자동 종료/재시작을 비활성화함
  • OpenSSH의 ssh_sandbox_child 함수에서 setrlimit이나 seccomp-BPF 호출 전에 이 함수를 먼저 호출하도록 수정함

seccomp 필터 수정사항 (3건만 변경)

  • SECCOMP_RET_KILL_PROCESS: 기존 SECCOMP_RET_KILL(해당 스레드만 종료) 대신 사용. 샌드박스 위반 시 Fil-C 백그라운드 스레드도 함께 종료시킴
  • MAP_NORESERVE: mmap 허용 목록에 추가. Fil-C 메모리 할당기가 사용하며, 공격자에게 의미 있는 권한이 아님
  • sched_yield: Fil-C 런타임 락 구현에 사용됨. 의미상 no-op에 가까운 syscall이라 보안 영향 없음
  • futex 관련 syscall은 기존 필터에 이미 포함되어 있어 변경 불필요했음

prctl 래핑: 모든 스레드에 필터 적용하기

  • seccomp 필터 설치에 사용되는 prctl syscall은 호출한 스레드에만 적용됨. 백그라운드 스레드에는 적용되지 않는 문제가 있음
  • Fil-C는 prctl을 래핑하여 내부 API filc_runtime_threads_handshake()로 모든 런타임 스레드에서 콜백을 실행함
  • PR_SET_NO_NEW_PRIVSPR_SET_SECCOMP 모두 이 핸드셰이크를 통해 전체 스레드에 설치됨
  • 복수의 사용자 스레드가 있을 경우 Fil-C 안전성 오류(safety error)를 발생시켜 모호한 상황을 방지함

핵심 포인트

  • 메모리 안전성만으로는 부족하고, 샌드박싱만으로도 부족함. 둘을 조합해야 진정한 방어가 됨
  • Fil-C + OpenSSH seccomp 조합에서 필요했던 변경은 최소한이었음: API 1개 추가, seccomp 필터 3건 수정, prctl 래핑 1건
  • 기존 샌드박스의 보안 수준을 전혀 후퇴시키지 않으면서 메모리 안전성을 확보한 사례임

메모리 안전 언어를 쓰더라도 샌드박싱 없이는 파일 시스템 접근 같은 위협을 막을 수 없고, 샌드박싱만으로는 브로커 프로세스를 통한 우회가 가능함. Fil-C가 최소한의 변경으로 OpenSSH 샌드박스를 통합한 점은 메모리 안전 C/C++의 실용성을 보여주는 사례임.

댓글

댓글

댓글을 불러오는 중...

security

엘에이 경찰, 사생활 침해 논란 끝에 플록 번호판 감시 계약 종료

엘에이 경찰이 번호판 인식 카메라 업체 플록 세이프티와의 3년 계약을 연장하지 않기로 했어. 시민권, 프라이버시, 데이터 보관과 공유 문제를 해결하지 못했다는 게 핵심 이유야. 플록은 미국 전역에 최소 8만 대 카메라망을 깔아 경찰과 연방기관이 차량을 추적할 수 있게 해왔고, 오탐·보안 사고·이민 단속 악용 의혹까지 겹치며 압박이 커졌어.

security

크로미움 148부터 Math.tanh 한 번으로 운영체제 지문이 새는 문제

크로미움 148 이후 V8이 Math.tanh 계산을 자체 구현 대신 운영체제의 수학 라이브러리에 맡기면서, 같은 입력값도 리눅스·맥·윈도우에서 마지막 비트가 달라지는 지문 신호가 생겼다. 이 차이는 User-Agent로 맥이라고 주장하면서 리눅스 수학 결과를 내는 식의 위장을 바로 들키게 만든다. CSS 삼각함수와 웹 오디오까지 보면 브라우저 수학 경로가 꽤 복잡하게 갈라지고, 제대로 흉내 내려면 실제 운영체제 라이브러리의 비트 단위 동작까지 맞춰야 한다.

security

출입통제도 클라우드 구독제로 간다…제로트러스트·AI 분석이 승부처

기업 출입보안이 사업장별 서버를 두는 방식에서 클라우드 기반 서비스형 출입통제(ACaaS)로 옮겨가고 있다. 시장은 2026년 17억8000만 달러에서 2030년 31억9000만 달러로 커질 전망이고, 제로트러스트·모바일 인증·AI 출입 분석·스마트빌딩 통합이 핵심 경쟁 포인트로 꼽힌다.

security

AWS·구글 클라우드, 양자컴퓨터 대비해 암호 체계 갈아엎는 중

AWS와 구글 클라우드가 양자컴퓨터 시대를 대비해 기존 공개키 암호와 양자내성암호를 함께 쓰는 하이브리드 전환을 시작했다. 핵심 배경은 지금 훔친 암호문을 나중에 양자컴퓨터로 푸는 ‘선수집·후해독’ 공격이고, 국내도 통신·금융·국방 등 5개 분야에 45억원을 투입해 실증에 들어간다.

security

보안 점검 맡긴 AI 에이전트가 악성코드를 직접 실행할 수 있다는 경고

AI 보안 에이전트가 저장소를 검사하다가 README 같은 문서에 숨은 프롬프트 인젝션에 속아 악성 바이너리를 실행할 수 있다는 연구가 나왔다. 클로드 코드와 코덱스의 자동 모드처럼 승인 없이 명령을 수행하는 구성에서 문제가 재현됐고, 여러 모델과 공급업체를 가로질러 같은 패턴이 통했다는 점이 핵심이다.