본문 바로가기

카테고리 없음

썬더볼트 DMA 취약점

보안꿈나무의 공부 일기 썬더볼트 취약점

오늘은 과거에 인텔에서 매우 시끄러웠고 현대 맥북이나 고성능 노트북에서 필수 인터페이스로 사용되는

DMA( Direct Memory Access)취약점에 대해서 조사해보고 그 사례와 해결법을 알아보려고 합니다.

 

 

1. 썬더볼트와 DMA(직접 메모리 Access)란?

썬더볼트(Thunderbolt)는 하나의 케이블로 40Gbps가 넘는 대역폭의 데이터 전송, 디스플레이 출력, 전력 공급까지 처리할 수 있는 역할을 하는 Intel 의 고속 인터페이스 인데요

이런 빠른 속도가 가능한 핵심 이유 중 하나가 바로 DMA(Direct Memory Access)로 일컫어 지는

직접 메모리 접근 입니다.

 

이러한 썬더볼트는 Pcle 라는 (PCI Express) 프로토콜을 기반으로 작동하고 있으며 우리가 실생활에 흔히 사용하는 외장 하드, 외부 그래픽카드(eGPU), 초고속 모니터 연결 단자 등이 해당 프로토콜을 사용하고 있습니다.

 

 

그럼 이게 왜 위험해요?

바로 빠르게 작동하는 근원적인 부분이 보안적 관점에서 매우 큰 위협으로 작동하기 때문이라고 할 수 있습니다.

일반적으로 데이터 처리 방식은

외부 장치 ➔ CPU 인터럽트 ➔ OS 제어 ➔ RAM 메모리 전달 방식으로 이루어져 속도가 다소 느리지만

DMA의 데이터 처리 방식은

외부 장치 ➔ CPU/OS를 거치지 않고 직접 RAM 메모리 접근 ➔ 데이터 전송 방식으로 이루어져 있습니다.

 

데이터 처리 방식의 차이점

 

이걸 다시 생각해보자면

CPU와 OS의 간섭을 받지 않고 메모리로 슝~ 하고 바로 들어가 버리는 고속도로를 타는 것과 다름이 없습니다

이때 이 고속도로에 보안 검증이 빠져 있으면

외부 장치가 OS의 패스워드 검증, 파일 접근 권한, 암호화 키 보호 등을 모두 무시하고 RAM에 접근할 수 있게 되는 것이죠

 

이제 이 관점에서 썬더볼트를 다시한번 살펴 봅시다

 

썬더볼트는 내부적으로 PCIe(PCI Express)프로토콜을 사용하다고 했었습니다. 

썬더볼트 포트에 뭔가를 연결한다는 것 == 노트북 내부 PCIe 슬롯에 카드를 하나 꽂는 것과 비슷한 수준의 권한을 외부 장치에 부여 하는것 과 다름이 없죠

 

그럼 이 상황에서 PCIe 장치는 원칙적으로 운영체제 커널과 동등한 수준으로 메모리에 접근할 수 있는데 악의적으로 조작된 장치(예: 개조된 도크, 충전기, 외장 그래픽카드 등)를 연결하면 어떻게 될까요?

 

잠금 화면 우회 및 로그인 자격 증명 탈취

디스크 암호화 키를 메모리에서 직접 추출

운영체제 커널 메모리를 조작해 임의 코드 실행

VPN 트래픽 등 평문 데이터 스니핑

 

Evil Maid Attack 계열의 공격이 가능하게 되는 것 입니다.

 

그럼 대체 어떻게 해야 이 취약점을 해결하고 현대의 저희가 사용하고 있을까요?

이런 위협에 대응하기 위해 나온 하드웨어적 방어 장치를 알아보도록 합시다.

 

2.IOMMU 방어대책

Intel이 도입한 첫 번째 방어 대책인 IOMMU 입니다.

 

인텔 플랫폼에서는 이를 VT-d(Virtualization Technology for Directed I/O) 라는 이름으로 구현하고 있습니다.

 

CPU와 메인 메모리 사이에 MMU(가상 메모리 관리자) 가 존재하듯이

외장 입출력 장치와 메인 메모리 사이에도 IOMMU라는 가상화 장벽을 구축해서 그 해결책을 도입했습니다.

 

DMA 장치가 메모리에 직통으로 접근하지 못하게 하고

OS가 허용한 특정 영역만 가상 주소로 할당받아 접근할 수 있도록 격리 시켰습니다.

 

이론적으로 IOMMU가 제대로 활성화되어 있다면, 악성 주변장치가 연결되더라도 운영체제가 허용한 특정 버퍼 영역 외에는 접근할 수 없어야 합니다만

 

세상엔 수많은 이론이 존재하지만 그 이론을 증명하는건 또 다른 문제죠

실제로 이제 알아볼 두 가지의 대표적인 사례처럼 이 방어선이 여러 차례 뚫렸습니다.

 

사례 1 — Thunderclap (2019)

썬더볼트 취약점의 첫 번째 사례 Thunderclap 입니다

 2019년 케임브리지 대학교, 라이스 대학교, SRI 인터내셔널의 공동 연구팀이 NDSS에서 최초로 발표한 취약점 내용 입니다.

 

해당 취약점의 발표 사례는 IOMMU만 켜면 안전하다 라는 당시의 관념을 아예 부숴버린 취약점 이였는데요 

연구팀은 FPGA 기반의 자체 플랫폼(Thunderclap)을 만들어

정상적인 주변장치인 척 행동하다가 운영체제가 Trust를 부여한 순간 메모리 접근 범위를 악용하는 방식으로 공격을 진행 했습니다.

 

그 결과

 

IOMMU가 켜져 있어도 뚫릴 수 있음

 

운영체제가 IOMMU를 사용하는 방식 자체에 결함이 있어

IOMMU가 활성화되고 올바르게 설정된 상태에서도 공격이 가능했죠

 

애초에 IOMMU가 기본적으로 꺼져 있는 경우가 많다

 

당시 대부분의 운영체제에서 IOMMU 보호 기능은 기본값이 비활성화 상태로 설정 되었고

macOS 10.10~10.13 정도만 예외적으로 기본 값이 활성 상태 였습니다.

 

여러 외부 장치로 공격이 가능하다

 

위조된 네트워크 카드, USB-C 도크 등을 넘어서  충전기처럼 보이는 장치를 통해서도 공격이 성공 했습니다.

USB-C가 충전과 데이터, 영상 출력을 겸하게 되면서  전 그냥 충전기 인데용? 라고 하던 장치가

실제로는 완전한 썬더볼트/PCIe 장치일 수 있다는 가능성을 성립 시켰습니다.

 

 

 

사례 2 — Thunderspy (2020)

다음으론 2020년에 공개된 두 번째 사례인 Thunderspy 취약점 입니다.

 

Thunderspy는 2020년 네덜란드 에인트호번 공과대학교의 연구자 Björn Ruytenberg가 공개한 취약점 인데요

인텔 썬더볼트 3 구현 자체의 취약점 7가지를 통 틀어서 만든 이름입니다

 

Spy가 Clap과 다른 가장 근본적 이유는 소프트웨어만으로는 근본적으로 패치가 불가능한, 하드웨어/펌웨어 설계 결함 입니다

 

우선 연구팀의 공격 시나리오를 먼저 살펴봅시다

 

1. 임의의 썬더볼트 장치 ID를 위조해 시스템에 인증된 장치처럼 위장

 

2. 사용자가 이미 승인한 정상 장치의 신원을 복제

 

3.펌웨어를 조작해 PCIe 연결을 확보한 뒤 DMA 공격 수행

 

4.인증 없이 보안 레벨 설정 자체를 영구적으로 무력화

심지어 DisplayPort/USB만 허용하도록 제한된 SL3 상태 에서도 이 취약점을 통해 우회 가능 했습니다

 

5.펌웨어 업데이트를 영구적으로 차단

 

 

 

사실 이 취약점의 가장 큰 문제점은 바로 이것인데요

 

피싱이나 사회공학 기법이 필요 없다는 것입니다.

 

별도의 하드웨어 도구만 있으면 화면 잠금·디스크 전체 암호화(FDE)가 적용된 컴퓨터에서도 5분 안에 실행 가능했습니다

심지어 그 도구 또한 약 400$로 리스크에 비하면 상대적으로 매우 저렴한 편이죠

 

영향을 받는 범위 또한 2011년부터 2020년 사이 출시된 썬더볼트 탑재 기기 대부분이 사정거리에 들어 왔습니다

 

그럼 대체 이러한 취약점을 어떻게 막을 수 있었을까요?

Thunderbolt 보안 레벨(Security Level) 체계

 

Intel은 보안레벨(SL)을 도입하여 썬더볼트 컨트롤러부터 단계적 보안 모델을 도입했습니다

레벨 이름 작동 방식
SL0 None 사용자 승인 없이 모든 장치를 자동 허용 
SL1 User Authorization 장치 UUID 기반, 최초 연결 시 사용자 팝업 승인 필요 (기본값)
SL2 Secure Connect UUID + 챌린지-리스폰스 암호화 인증 추가, 장치 ID 복제 공격 방지
SL3 DisplayPort/USB Only PCIe 터널링 자체를 차단, 영상·USB만 통과
SL4 USB Only 도크 하위 PCIe 링크를 모두 제거, USB 컨트롤러만 노출

 

하지만 ThunerSpy 취약점을 살펴보면 SL3 까지 우회가 가능하다 라는 점이 있었습니다

즉 보안 레벨만으로는 충분한 방어가 되지 못한다는 취약점을 방어하기 위해 새로운 방식을 도입하게 되죠

 

Kernel DMA Protection

Intel이 도입한 취약점 방어 대책으로 2019년부터 주요 운영체제들은 해당 방식이 모두 도입되어 사용되고 있습니다.

 

Windows 10 버전 1803(RS4) 이상

Linux 커널 5.x 이상

macOS 10.12.4 이상

 

 

 

IOMMU를 활용해 썬더볼트로 연결된 장치를 애초에 커널 메모리 영역과 격리된, OS가 통제하는 좁은 메모리 범위에만 접근하도록 강제하는 방식으로 동작합니다.

 

PC가 부팅된 후 OS가 상주하는 동안, 인증되지 않거나 DMA Remapping을 지원하지 않는 외부 썬더볼트 장치를 원천 차단하며

 

사용자가 화면을 잠그면(Lock) 즉시 외장 DMA 장치의 새로운 연결을 거부합니다.

 

이 보호 기능이 활성화된 시스템에서는 Thunderspy 연구팀도 성공적인 DMA 공격을 시연하지 못했습니다.

다만 Kernel DMA Protection이 있어도 Thunderspy가 지적한 취약점 전부가 사라지는 것은 아니였죠

BadUSB 유형의 위장 공격 등 일부 위험은 여전히 남는다는 한계가 존재했으며

 

하드웨어(펌웨어)와 OS가 모두 이를 지원해야만 동작한다.

라는 치명적인 단점이 존재 했습니다.

 

즉 2019년 이전 출시된 기기, 또는 지원 컨트롤러가 탑재되지 않은 기기는

단순 소프트웨어 업데이트 만으로 적용 할 수 없다 라는 치명적인 단점을 가지게 되었습니다.

 

Thunderbolt 4 - DMA 보호 의무화

Intel은 위에서 나왔던 모든 단점들을 해결하기 위해 2020년 ThunderBolt4를 새롭게 공표 했습니다.

아예 인증 요건 자체에 DMA 보호 기능을 의무화 시켜서 적용을 한 것이죠

 

인증을 받으려는 모든 호스트 PC에 대해 VT-d 기반 DMA 보호 지원을 필수 요건으로 가져야 해요 라는 규정을 세웠습니다.

 

Thunderbolt 4 로고가 붙은 정품 인증 기기는 최소한 Kernel DMA Protection급 보호가 기본적으로 탑재되어 있다고 볼 수 있게 된 것이죠

 

그럼 우리 사용자들은 해당 취약점을 어떻게 점검할 수 있을까요?

 

 

1. Kernel DMA Protection 지원 여부 확인

내가 윈도우를 사용한다! 라고 하면

 

Windows 설정 > 개인정보 및 보안 > Windows 보안 > 디바이스 보안 > 코어 격리 세부 정보에서 메모리 무결성/DMA 보호 상태 확인하면 됩니다

 

필자는 Window를 사용했습니다

 

나는 맥을 사용하는데요 라고 하면

 

 Apple Silicon Mac에서 기본적으로 하드웨어 수준의 IOMMU 격리가 적용 되었는지를 확인해 보면 됩니다

 

썬더볼트를 쓰지 않는다면 BIOS/UEFI에서 비활성화 하는 방법도 존재합니다

 

신뢰할 수 없는 주변장치(공용 충전기, 대여 도크 등)는 함부로 연결하지 않기 

특히 Evil Maid 시나리오처럼 잠깐이라도 기기를 벗어난 뒤 물리적 접근이 있었다면 주의가 필요합니다.

 

펌웨어/OS를 최신 상태로 유지 

Kernel DMA Protection, 보안 레벨 관련 패치는 대부분 펌웨어와 OS 업데이트를 통해 배포됩니다.

 

신형 기기 구매 시 Thunderbolt 4/USB4 인증 여부 확인 

VT-d 기반 DMA 보호가 인증 필수 조건이므로 상대적으로 안전한 기본값을 기대할 수 있습니다.

 

Ref.

 

  • Thunderclap 연구팀 공식 사이트 (thunderclap.io) 및 NDSS 2019 논문
  • Björn Ruytenberg, Breaking Thunderbolt Protocol Security: Vulnerability Report, thunderspy.io (2020)
  • Intel Thunderbolt 4 보안 브리프 및 발표 자료
  • Apple 공식 보안 가이드 – Direct memory access protections
  • Linux Kernel Documentation, Documentation/admin-guide/thunderbolt.rst