분류 : 가져온 문서/넥스32 위키
이 문서의 내용 중 전체 또는 일부는 넥스32 위키에서 가져왔으며 GNU Free Documentation License 1.3에 따라 이용할 수 있습니다.
본 문서의 원본은 링크에서 확인할 수 있습니다.
본 문서의 원본은 링크에서 확인할 수 있습니다.
DMA 공격이란, 암호화 된 환경에서 DMA - 즉 직접적인 메모리 접근에 의한 암호화 키 탈취를 통한 사이드 채널 어택을 일으키는 것을 지칭한다.
1. 문제 제기 ✎ ⊖
현대의 컴퓨터 운영체제(OS)에서 응용프로그램은 물리적 메모리 상에서 운영되는 형태를 버리고 가상 주소로 이루어진 메모리 상에서 작동되고 있다. 이러한 구조는 물리적 메모리의 용량에 제한받지 않고 운영체제가 관리하는 시스템 하에서 (예를 들면 페이징 시스템 등의 관리를 통해 확장된) 리소스를 운용할 수 있게 해줌으로서 좀 더 유연한 구조를 통해 개발 및 관리에 큰 편리함을 가져오게 해 주었다. 이러한 가상 메모리 주소의 관리는 운영체제의 핵심 보안요소 중 하나로서 관리된다.
이 문제가 중점적으로 제기된 것은 OHCI 규격으로 주창된 IEEE1394 규격으로 인한 것이었다. IEEE1394 규격은 성능적인 향상을 목적으로 운영체제의 관리를 통하지 않고 직접적으로 메모리에 접근할 수 있도록 함으로서 복잡한 입출력 작업에서 CPU의 점유율을 낮추고 전송 속도를 높이는데 성공한 인터페이스였다. 이러한 접근 방식은 당연히 운영체제와 CPU의 관리를 벗어나 있기 때문에, 그만큼 아무런 통제없이 시스템에 접근할 수 있도록 만드는 문제를 가져왔다. 즉 운영체제가 관리하는 범주 밖의 공간에서 관리범위의 메모리에 접근할 수 있는 길이 열리게 되는 것이다.
이 문제가 중점적으로 제기된 것은 OHCI 규격으로 주창된 IEEE1394 규격으로 인한 것이었다. IEEE1394 규격은 성능적인 향상을 목적으로 운영체제의 관리를 통하지 않고 직접적으로 메모리에 접근할 수 있도록 함으로서 복잡한 입출력 작업에서 CPU의 점유율을 낮추고 전송 속도를 높이는데 성공한 인터페이스였다. 이러한 접근 방식은 당연히 운영체제와 CPU의 관리를 벗어나 있기 때문에, 그만큼 아무런 통제없이 시스템에 접근할 수 있도록 만드는 문제를 가져왔다. 즉 운영체제가 관리하는 범주 밖의 공간에서 관리범위의 메모리에 접근할 수 있는 길이 열리게 되는 것이다.
2. 접근 방식 ✎ ⊖
운영체제는 메모리에 접근하는 장치 및 접근에 대한 제어 기능을 갖추고 있으며, 접근하는 장치 및 접근자에 대한 무결성 검사를 거친다. 이를 통해 허가 없는 장치 및 접근자가 커널 디버깅 상태 변경을 하려는 접근을 막고 시스템의 안정성과 제어권을 보호한다. 그러나 IEEE1394 방식의 장비는 IEEE1394의 통신 방식인 SBP-2(Serial Bus Protocol 2) 방식을 통해 데이터를 주고 받는데, 이 중간에 SBP-2 하드웨어의 ID를 검사하여 무결성을 인증한 이후에 운영체제 범위 밖의 장치에서 하드웨어 ID를 스푸핑할 수 있다. 운영체제에서 인증되어 DMA 접근을 허가받은 SBP-2 방식의 장비는 운영체제의 관리를 벗어나 직접 메모리에 접근, 읽기와 쓰기를 할 수 있게 된다. 이를 통해 접근된 물리 메모리 상에서 운영체제의 암호화 키를 탈취하는 것이 가능하며, 이를 통해 운영체제의 전체 권한을 탈취하는 것이 가능하다.
이러한 취약점을 공격하는 것을 ‘DMA 공격’이라고 부르는 것이다.
이러한 취약점을 공격하는 것을 ‘DMA 공격’이라고 부르는 것이다.
3. 취약 장비 ✎ ⊖
이러한 취약점을 가지는 장비는 DMA방식으로 시스템에 접근하는 인터페이스, 특히 외부 인터페이스에서 공통적으로 존재한다. PCI 및 PCI-Express에서도 마찬가지로 이러한 문제는 동일하게 발생할 수 있으나, 해당 인터페이스는 기본적으로 시스템을 분해하여 장치를 연결해야만 성립되는 구조인만큼 큰 위협으로 받아들여지지 않고 있다.
그러나 외장 인터페이스인 IEEE1394 방식과 PCI의 플러그 앤 플레이 규격인 PCMCIA, PCI-Express의 플러그 앤 플레이 규격인 ExpressCard는 이러한 문제로부터 자유롭지 못하다. 이것은 PCI-Express 기반의 확장 인터페이스인 썬더볼트 (ThunderBolt) 인터페이스 또한 마찬가지이다.
그러나 외장 인터페이스인 IEEE1394 방식과 PCI의 플러그 앤 플레이 규격인 PCMCIA, PCI-Express의 플러그 앤 플레이 규격인 ExpressCard는 이러한 문제로부터 자유롭지 못하다. 이것은 PCI-Express 기반의 확장 인터페이스인 썬더볼트 (ThunderBolt) 인터페이스 또한 마찬가지이다.
4. 해결책 ✎ ⊖
AMD에서는 이러한 문제를 해결하기 위해 하이퍼 트랜스포트 방식을 만들 때 가상화 기능의 일환으로 IOMMU라는 요소를 추가하는 방식으로 DMA 접근을 하는 장치 또한 가상 메모리 영역에만 접근할 수 있도록 하는 방식을 제안했다. 인텔에서도 VT-d라는 명령어를 통해서 이러한 문제를 해결하고 있다.
그러나 IOMMU는 어디까지나 해당 기능을 갖춘 시스템에서만 효용을 볼 수 있는 기능이기 때문에 해당 장치가 갖춰지지 않은 시스템에서는 해결책으로서 활용이 불가능하다.
때문에 이러한 기능이 갖춰지지 않은 시스템에서 중요 데이터 및 작업을 관리할 필요가 있을 경우 바이오스 등에서 해당 인터페이스의 접근을 막아두는 것을 권장하고 있다.
그러나 IOMMU는 어디까지나 해당 기능을 갖춘 시스템에서만 효용을 볼 수 있는 기능이기 때문에 해당 장치가 갖춰지지 않은 시스템에서는 해결책으로서 활용이 불가능하다.
때문에 이러한 기능이 갖춰지지 않은 시스템에서 중요 데이터 및 작업을 관리할 필요가 있을 경우 바이오스 등에서 해당 인터페이스의 접근을 막아두는 것을 권장하고 있다.