[Sandbox] 샌드박스 보안 이해하기 : 보호 기법과 우회 방법 + Linux

https://xkcd.com/2044

샌드박싱 사이클 예시

sandboxing은 시스템 보안 측면에서 보안 위험을 초소화합니다.

 

 

핵심만 적고 싶은데 기본 개념을 정리해 버려서.. 어쩔 수 없네요. 

궁금하신 분은 아래에 더보기 버튼을 눌러 펼쳐주세요.

 

더보기

Sandbox 기본 개념

애플리케이션, 코드, 프로세스 등을 독립된 환경에서 실행하여 시스템 장애 및 소프트웨어 취약점의 확산으로부터 완화하기 위한 격리 매커니즘

 

이를 통해 악성 코드가 시스템 전체에 피해를 주는 것을 방지하고, 안전하게 의심스러운 코드나 애플리케이션을 실행할 수 있다.

 

쉽게 설명하기 위해 간단한 예시를 들고 왔다.

  • 웹 브라우저 : 한 탭에서 발생한 문제를 전체 브라우저에 영향끼치지 않게 하기 위해 샌드박스 환경에서 실행
  • 모바일 앱 : iOS, Android 등 앱이 시스템의 다른 부분에 접근하지 못 하도록 샌드박스 환경에서 실행
  • 클라우드 서비스 : 애플리케이션 등을 샌드박스에서 실행하여 잠재적인 보안 위협으로부터 보호

 

헷갈리지 말자. Sandbox vs Virtualization

  • 격리 수준 : Sandbox는 애플리케이션 단위로 격리하는 반면, Virtualization은 운영체제 단위로 격리한다.
  • 오버헤드 : Sandbox는 오버헤드가 비교적 적지만, Virtualization은 높은 수준의 격리와 기능성으로인해 더 많은 오버헤드가 존재
  • 사용 사례 : Sandbox는 주로 보안 테스트나 애플리케이션 격리에 사용되지만, Virtualizaiton은 다양한 운영체제를 동시에 사용하거나 서버 통합, 클라우드 컴퓨팅 등에 사용
sandbox를 고도로 제어되는 환경을 제공할 경우 이는 가상화(virtualization)로 간주할 수 있다.

 

 

Sandbox의 기술적 구현

  1. 운영체제 레벨의 격리 : 운영체제 자체 기능을 이용해 애플리케이션 격리. Linux의 chroot jail, macOS의 App Sandbox 등
  2. 가상 머신 : 더 강력한 격리를 위해 VMware, VirtualBox와 같은 가상 머신 사용
  3. 컨테이너 : Docker, LXC 같은 컨테이너 기술은 가벼운 격리 환경을 제공
  4. 브라우저 샌드박싱 : Google Chrome의 V8 엔진은 자바스크립트를 샌드박스 안에서 실행

https://v8.dev/

 

V8 JavaScript engine

What is V8? V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows, macOS, and Linux systems that use

v8.dev

 

Sandbox의 한계

  • 성능 오버헤드 : 샌드박스 환경을 유지하는데 추가적인 자원이 필요할 수 있다.
  • 완벽한 격리 불가능 : 모든 공격을 차단하기엔 어려울 수 있고, 샌드박스를 우회하는 공격이 있을 수 있다.
  • 복잡성 : 샌드박스의 잘못된 설정은 보안 취약점을 초래할 수 있다.

 

 

Sandbox 보호기법 및 우회기법

Sandbox 보호 기법 설명 우회 기법 설명
실행 환경 격리 애플리케이션과 프로세스를 독립된 환경에서 실행하여 시스템 전체에 영향을 미치지 않도록 함 샌드박스 탈출 (escape) 커널 취약점을 이용하여 샌드박스 제한을 벗어남
최소 권한 원칙 프로세스가 필요한 최소한의 권한만 가지도록 하여 영향을 줄임 권한 상승(privilege escalation) 취약점 잘못된 설정이나 버그를 이용하여 관리자 권한을 획득
시스템 호출 필터링 애플리케이션이 사용할 수 있는 시스템 호출을 제한하여 공격 표면을 줄임 (seccomp 등) 허용된 시스템 호출 조작 제한된 시스템 호출을 필요로 하지 않는 방법을 사용
네트워크 격리 외부 네트워크와의 통신을 차단하여 데이터 유출 및 원격 제어를 방지 DNS 터널링 및 코버트 채널 사용 비정상적인 통신 방법을 이용하여 네트워크 격리 우회
파일 시스템 격리 제한된 파일 시스템 영역만 접근할 수 있도록 하여 중요한 데이터 보호 가상 파일 시스템 계층 공격 및 공유 메모리 이용 격리된 파일 시스템 외부의 파일에 접근



Linux에 사용되는 Sandbox 보안 기법

Seccomp (Secure Computing Mode) 

리눅스 커널에서 제공하는 보안 기능으로, 특정 시스템 호출을 제한한다.

seccomp-bpf (Berkeley Packet Filter)를 통해 시스템 호출 필터를 더 정교하게 설정할 수 있다.

 

Seccomp 우회기법

Bypass through Allowed Syscalls : 허용된 시스템 호출을 악용하여 악의적인 행위를 수행한다. mmap과 munmap 시스템 호출을 사용하여 메모리 영역을 조작할 수 있다.

Kernel Exploits : 커널 취약점을 이용하여 seccomp 제한을 무력화한다. 특정 커널 버전에서 발견된 취약점을 악용하여 권한을 상승시키고 seccomp 제한을 벗어날 수 있다.

 

Chroot Jail

chroot는 프로세스와 자식 프로세스의 루트 디렉터리를 변경하여 파일 시스템의 특정 부분만 접근하도록 제한시킨다.

이 방법으로 애플리케이션이 시스템의 나머지 부분에 접근하는 것을 방지합니다.

 

Chroot Jail 탈출 방법

Directory Traversalchroot : 디렉토리 내부에서 심볼릭 링크를 사용해 루트 디렉토리로 탈출한다.

Root Privileges : chroot는 root 권한으로 실행되기에, 공격자가 root 권한을 획득하면 chroot 환경을 벗어날 수 있다.

 

Namespaces

프로세스를 격리된 환경에서 실행하여 시스템 리소스(프로세스 ID, 사용자 ID, 네트워크, 파일 시스템 등)를 분리한다. 각 네임스페이스는 독립된 리소스 뷰를 제공합니다.

 

Namespaces 우회 방법

Namespace Isolation Flaws : 네임스페이스 격리의 결함을 이용하여 다른 네임스페이스나 호스트 시스템에 접근하는 방법이다. 네임스페이스 간의 불완전한 격리로 인해 다른 네임스페이스로의 접근이 가능할 수 있습니다.

Privilege Escalation : 네임스페이스 내부에서 권한을 상승시켜 호스트 네임스페이스에 접근하는 방법이다. 네임스페이스가 완벽히 격리되지 않은 경우, 권한 상승을 통해 네임스페이스 경계를 넘어설 수 있다.

 

Cgroups (Control Groups)

리눅스 커널 기능으로, 프로세스 그룹이 사용할 수 있는 CPU, 메모리, 디스크 I/O 등의 리소스를 제한한다. 이를 통해 리소스 과다 사용을 방지한다.

 

Cgroups 우회 방법

Resource Limit Manipulation : cgroups 설정의 결함이나 잘못된 설정을 악용하여 리소스 제한을 우회하는 방법이다. cgroups의 설정 파일을 조작하여 더 많은 리소스를 확보할 수 있다.

Kernel Exploits : 커널 취약점을 이용하여 cgroups 제한을 무력화하는 방법이다. 커널 코드의 취약점을 이용하여 cgroups 설정을 변경하거나 제한을 무효화할 수 있다.

 

 

 


추후 sandbox 우회 기법 실습들도 포스팅하겠다