샌드박싱 사이클 예시
sandboxing은 시스템 보안 측면에서 보안 위험을 초소화합니다.
핵심만 적고 싶은데 기본 개념을 정리해 버려서.. 어쩔 수 없네요.
궁금하신 분은 아래에 더보기 버튼을 눌러 펼쳐주세요.
Sandbox 기본 개념
애플리케이션, 코드, 프로세스 등을 독립된 환경에서 실행하여 시스템 장애 및 소프트웨어 취약점의 확산으로부터 완화하기 위한 격리 매커니즘
이를 통해 악성 코드가 시스템 전체에 피해를 주는 것을 방지하고, 안전하게 의심스러운 코드나 애플리케이션을 실행할 수 있다.
쉽게 설명하기 위해 간단한 예시를 들고 왔다.
- 웹 브라우저 : 한 탭에서 발생한 문제를 전체 브라우저에 영향끼치지 않게 하기 위해 샌드박스 환경에서 실행
- 모바일 앱 : iOS, Android 등 앱이 시스템의 다른 부분에 접근하지 못 하도록 샌드박스 환경에서 실행
- 클라우드 서비스 : 애플리케이션 등을 샌드박스에서 실행하여 잠재적인 보안 위협으로부터 보호
헷갈리지 말자. Sandbox vs Virtualization
- 격리 수준 : Sandbox는 애플리케이션 단위로 격리하는 반면, Virtualization은 운영체제 단위로 격리한다.
- 오버헤드 : Sandbox는 오버헤드가 비교적 적지만, Virtualization은 높은 수준의 격리와 기능성으로인해 더 많은 오버헤드가 존재
- 사용 사례 : Sandbox는 주로 보안 테스트나 애플리케이션 격리에 사용되지만, Virtualizaiton은 다양한 운영체제를 동시에 사용하거나 서버 통합, 클라우드 컴퓨팅 등에 사용
sandbox를 고도로 제어되는 환경을 제공할 경우 이는 가상화(virtualization)로 간주할 수 있다.
Sandbox의 기술적 구현
- 운영체제 레벨의 격리 : 운영체제 자체 기능을 이용해 애플리케이션 격리. Linux의 chroot jail, macOS의 App Sandbox 등
- 가상 머신 : 더 강력한 격리를 위해 VMware, VirtualBox와 같은 가상 머신 사용
- 컨테이너 : Docker, LXC 같은 컨테이너 기술은 가벼운 격리 환경을 제공
- 브라우저 샌드박싱 : Google Chrome의 V8 엔진은 자바스크립트를 샌드박스 안에서 실행
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 우회 기법 실습들도 포스팅하겠다
'Computer Security > System Hacking' 카테고리의 다른 글
[ptmalloc] 리눅스 동적할당 heap 하게 공부하자 (2) : Boundary Tag, Binning편 (0) | 2024.07.03 |
---|---|
[ptmalloc] 리눅스 동적할당 heap 하게 공부하자 (1) : chunk편 (0) | 2024.07.03 |
[Privilege Escalation] pwnable 관점에서 chroot jail 탈옥하기 (0) | 2024.06.29 |
재밌게 하는 시스템해킹 학습 방법 (0) | 2024.06.25 |
[Pwnable] ELF Segment Sections 빠르게 구하기 (.init_array, .fini_array, .dynamic, .got, .data) (0) | 2024.06.20 |