[시스템 아키텍처] 가상화 기반의 보안 아키텍처
- 유저 모드와 커널 모드 간의 구분은 유저 모드로부터 OS에 대한 보호를 제공한다.
- == 모든 커널 코드는 전체 시스템에 완전히 접근할 수 있다.
- 바람직하지 않은 커널 모드 코드가 시스템에 침투한다면 시스템은 기본적으로 위태롭게 된다.
- 패치가 이뤄지지 않은 커널이나 드라이버 취약점 등.
- 공격에 대한 추가적인 보장을 제공하기 위해 하이퍼바이저를 이용하는 것은 가상화 신뢰 수준(VTL; Virtual Trust Level)의 도입을 통한 고유 특권을 기반으로 하는 분리를 확장시켜주는 가상화 기반의 보안(VBS; Virtualization-Based Security) 능력으로 구성된다.
- VTL은 메모리와 하드웨어, 프로세스 자원에 대한 접근을 분리하는 새로운 방법을 단순히 소개하는 것을 넘어서 좀 더 높은 신뢰 수준을 관리하기 위한 새로운 코드와 컴포넌트도 필요로 한다.
- VTL 0에서 실행하는 일반적인 커널과 드라이버는 VTL 1 자원을 제어하고 규정할 수 없다.
- VBS가 구동중일 때의 Windows 10 Enterprise와 Server 2016의 아키텍처
- 유저/커널 코드는 Hyper-V의 상단에서 실행한다. VBS가 활성화됐고 특권 프로세서 모드(Ring 0)에서 실행 중인 자신만의 안전한 커널을 가진 VTL 1이 존재한다는 점이 다르다.
- 비특권 모드(Ring 3)에서 실행하는 격리된 유저 모드(IUM; Isolated User Mode)로 불리는 런타임 유저 환경 모드가 존재한다.
- 안전한 커널은 디스크에
securekernel.exe
라는 이름으로 존재하는 바이너리이다.- IUM은 일반 유저 모드 DLL이 호출할 수 있는 허용된 시스템 호출을 제한하는 환경이며, VTL 1에서만 실행하는 특수한 보안 시스템 호출을 추가하는 프레임워크이기도 하다.
- 추가적인 시스템 호출은 일반적인 시스템 호출과 유사하게
Iumdll.dll
,Iumbase.dll
에 공개되어 있다. - 동일한 표준 Win32 API 라이브러리를 대부분 공유하므로 메모리 오버헤드가 적다. 동일한 유저 모드 코드가 상응하는 VTL 0에도 존재하기 때문이다.
- VBS에 적용되는 유저와 커널의 규칙
- VTL 0에서 실행 중인 커널 모드 코드는 VTL 1에서 실행하는 유저 모드를 접근할 수 없다. (VTL 1이 특권이 더 높다.)
- VTL 1에서 실행 중인 유저 모드는 VTL 0에서 실행하는 커널 모드를 접근할 수 없다. (유저가 커널에 접근할 수 없기 때문)
- VTL 1 유저 모드 애프리케이션은 일반적인 윈도우 시스템 호출을 통과해야 하며, 접근하고자 하는 자원이 있다면 접근 검사를 거쳐야 한다.
- 특권 수준이 능력을 강제하고, VTL은 격리를 강제한다.
- VTL 1에서 실행하고, 커널 모드에 존재하는 안전한 커널은 VTL 0 메모리와 자원에 대한 완전한 접근이 가능하다.
- 안전한 커널은 하이퍼바이저를 이용해 VTL 0 OS가 특정 메모리 위치에 접근하는 것을 제한할 수 있다.
- 이때 2단계 주소 변환(SLAT; Second Level Address Translation)으로 알려진 CPU 하드웨어 지원을 이용한다.
- 일반 디바이스 드라이버가 직접 메모리에 접근하기 위해 하드웨어 장치를 이용하는 것을 차단하기 위해 시스템은 장치에 대한 메모리 접근을 효과적으로 가상화해주는 I/O 메모리 관리 유닛으로 알려진 하드웨어를 사용한다.
- 하이퍼바이저는 부트로더에 의해 시작되는 첫 번째 시스템 컴포넌트이므로, SLT과 I/O MMU를 원하는 대로 프로그램하고 VTL 0과 VTL 1의 실행 환경을 정의할 수 있다. VTL 1 상태인 동안 부트로더는 다시 실행돼 필요에 따라 시스템을 구성할 수 있는 안전한 커널을 로드한다.
- VTL 1에서 실행하는 유저 모드 프로세스는 격리되어 있으므로, 잠재적으로 악의적인 코드가 실행돼 안전한 시스템 호출을 시도하고 VTL 1 프로세스나 스마트 커널과의 나쁜 상호작용을 초래할 수 있다.
- 엄밀히 말해서 트러스트릿(Trustlets)으로 불리는 특별하게 서명된 바이너리의 특수 클래스만이 VTL 1에서 실행이 허용된다.
- 각 트러스트릿은 고유한 식별자와 서명을 가지며, 안전한 커널은 어떤 트러스트릿이 생성됐는지에 대한 하드코딩된 정보를 가진다.
- 안전한 커널에 대한 접근 없이는 새로운 트러스트릿을 생성할 수 없으며, 기존 트러스트릿은 어떠한 방식으로도 패치되지 않는다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.