- Landlock은 애플리케이션이 접근 가능한 리소스를 명시적으로 선언해, 커널 수준에서 자체 샌드박싱을 수행하도록 하는 리눅스 보안 API임
- 기존 SELinux나 AppArmor보다 단순하며, 개발자 권한 없이 런타임에 정책을 생성하고 적용할 수 있음
- 정책은 접근 가능한 파일·디렉터리·포트 등을 명시적 허용 목록(allowlist) 형태로 정의하며, 계층적 제한을 통해 점진적 보안 강화 가능
- Rust, Go, Haskell 등에서 바인딩이 제공되며, GUI 앱·서버·데스크톱 프로세스 등 다양한 환경에서 세분화된 접근 제어 구현 가능
- 리눅스 보안 생태계에서 간단하고 실용적인 무권한 샌드박스 도구로서, 향후 데스크톱 보안 강화의 핵심 구성요소로 주목받고 있음
Landlock 개요
-
Landlock은 리눅스 애플리케이션이 자신이 접근할 수 있는 리소스를 명시적으로 선언하도록 하는 API
- OpenBSD의
unveil()및pledge()개념과 유사하며, “필요한 리소스만 허용하고 나머지는 차단”하는 원칙 기반
- OpenBSD의
- 기존 리눅스 보안 메커니즘보다 이해와 통합이 쉬운 개발자 친화적 방어 계층 제공
- 목적은 접근 가능한 소개와 함께 Landlock 사용을 장려하는 것임
작동 방식
- Linux Security Module(LSM) 형태로, Linux 5.13부터 사용 가능
-
SELinux나 AppArmor와 달리, 프로세스 단위의 일시적 제한(transient restriction) 적용
- 정책은 런타임에 생성되어 현재 스레드 및 자식 프로세스에만 적용되고, 프로세스 종료 시 사라짐
- 정책 구성 요소
- Handled accesses: 제한할 작업 범주(예: 파일시스템 읽기/쓰기)
- Access grants: 허용할 객체의 명시적 목록
- 예시 정책
-
/home/user읽기 전용 -
/tmp읽기/쓰기 - 포트
2222바인딩 허용
-
-
landlock_restrict_self()호출 시 해당 스레드와 자식 프로세스가 영구적으로 제한 영역에 진입- 제한은 해제 불가, 최대 16개 계층(layer) 중첩 가능
- 하위 계층은 접근을 더 줄일 수 있으나, 상위 계층에서 제거된 권한은 복원 불가
- 비권한(unprivileged) 방식으로, 일반 애플리케이션도 자체 샌드박싱 가능
- ABI 버전 관리를 통해 구형 커널에서도 가능한 범위 내에서 동작
- Stackable LSM으로, SELinux나 AppArmor와 병행 사용 가능
사용 이유
-
예측 가능한 파일 접근 패턴을 가진 애플리케이션에 적합
- 예: 웹 서버가
/var/www/html과/tmp만 접근하도록 제한
- 예: 웹 서버가
- 관리자 개입이나 시스템 전역 설정 불필요, 코드 내에서 직접 정책 정의 가능
- 권한 상승 없이 사용 가능, 대부분의 프로그램에 손쉽게 통합 가능
-
Rust, Go, Haskell용 바인딩 존재,
unveil스타일의 래퍼 프로젝트도 다수 - 공식 C 라이브러리는 아직 없으나, 여러 비공식 구현 사용 가능
- Rust 예시 코드에서는
/usr,/etc,/dev를 읽기 전용으로,/home,/tmp를 읽기/쓰기 가능하도록 설정
리눅스 샌드박싱 현황과 필요성
- 리눅스 사용 증가와 함께 데스크톱 대상 악성코드도 증가
- 리눅스의 상대적 안전성은 시장 점유율과 기술 장벽 덕분이지, 구조적 안전성 때문은 아님
- 일반 배포판의 문제점
- 신뢰되지 않은 바이너리 실행 가능
- 인터넷에서 스크립트를 직접 실행 가능
- 비밀번호 없는 sudo 사용
- 일반 애플리케이션이
$HOME내 민감 파일 접근 가능 - X11 환경에서 키 입력 감시 가능
- 임의 포트 바인딩 가능
기존 보안 도구의 한계
-
Containerization (Docker, Podman) : 서비스 격리에 적합하지만 데스크톱 앱에는 부적합,
--privileged옵션으로 격리 무력화 사례 존재 - Flatpak / Snap: GUI 앱에 적합하나 권한 범위 과도, CLI 도구에는 부적합
- Firejail: 앱별 프로파일 필요, 매 실행 시 명시적 호출 필요
개발자 관점의 기존 메커니즘
- seccomp: 강력하지만 설정이 복잡하고 블랙리스트 방식은 취약
- SELinux: 강력하지만 복잡하며 관리자 정책 필요, 기본 비활성화된 배포판 다수
- AppArmor: SELinux보다 단순하지만 여전히 관리자 프로파일 필요, 일부 배포판에서 비활성화
Landlock의 장점 요약
- 비권한, 애플리케이션 중심, 통합 용이, 기본 차단(deny-by-default)
- Linux 5.13 이후 광범위 지원, 하위/상위 호환성 유지
- 완벽하지는 않지만, 단순하고 독립적인 무권한 샌드박스 도구로서 공백을 메움
Landlock의 적용 가능성
- 고권한 데몬 프로세스의 장기 실행 시, Landlock으로 접근 범위 제한 가능
- PDF 리더, 이미지 뷰어, 웹 브라우저, 워드 프로세서 등은 열린 파일만 접근하도록 제한 가능
-
FTP/HTTP 서버는 필요한 파일만 접근하도록 설정 가능
- 예: nginx가 root로 실행 중이라도 공격자가 쉘을 획득해도 정책 외 파일 접근 불가
-
Supervisor 제안이 도입되면, 안드로이드 유사 권한 시스템을 리눅스 데스크톱에 구현 가능
- GUI 및 권한 저장 시스템과 결합 시, 보다 안전한 사용자 경험 실현 가능
Landlock의 진행 중 기능 개발
- Supervise Mode: 사용자 공간에서 접근 허용/거부를 상호작용적으로 결정, 안드로이드식 권한 프롬프트 유사
- Socket Restrictions: 프로세스가 사용할 수 있는 소켓 종류·포트에 대한 세밀한 제어
- LANDLOCK_RESTRICT_SELF_TSYNC: 제한을 프로세스 내 모든 스레드에 전파
- LANDLOCK_ADD_RULE_QUIET: 특정 객체에 대한 감사 로그 메시지 억제
- LANDLOCK_ADD_RULE_NO_INHERIT: 상위 디렉터리 권한이 하위로 상속되지 않도록 방지, 파일시스템 제어 세분화
요약
- Landlock은 단순하고 비권한 기반의 기본 차단형 샌드박스 메커니즘
- 이해와 통합이 용이하며, 리눅스 데스크톱 및 애플리케이션 보안 향상에 큰 잠재력 보유
- 개발자는 애플리케이션에 Landlock을 직접 적용해 보안 수준을 강화할 수 있음