Apple M프로세서 DMP를 타겟으로 하는 부채널 공격, GoFetch 공개

M3 프로세서 발표키노트의 스크린샷

데이터 메모리 의존 프리페처를 타겟으로 하는 부채널 공격법이 공개됐다.
이름하여 GoFetch.

홈페이지에는 정리된 논문이 PDF파일로 공개중이고, 조만간 구현코드를 공개하기 위한 GitHub 페이지를 마련해 두고 있었다.
아래 내용은 홈페이지에 나와 있는 내용을 정리한 것이다.


GoFetch

GoFetch는 어떤 공격방법?

Apple 프로세서를 타겟으로 실증 가능한 수준을 구현한 부채널 공격으로,
애플 프로세서의 데이터 메모리 의존 프리패처(DMP)가 탑재된 CPU에서 실행 가능한 공격법이다.

이 방법을 연구한 이들은 DMP 구동방식을 리버스 엔지니어링 하여,
애플의 CPU가 데이터와 메모리 접근 패턴의 혼합을 금지하는 상수시간 프로그래밍 패러다임 요구사항을 명시적으로 위반하고 있음을 알아냈다고 한다.
(이에 대해선 아래 다시 설명한다)

이를 토대로 프로그램을 설치하여 비밀키의 일부 비트를 추측하는 작업을 시행.
포인터와 같은 값이 나타나면 이를 토대로 암호화 작업에 필요한 값을 만든다고.
캐시 타이밍 분석을 통해 DMP가 역참조를 수행하는지 여부를 다시 모니터링하여 이러한 추측을 검증.
올바른 추측을 한 것이 확인되면, 다음 핵심 비트 배치를 추측한다.
이러한 절차를 통해 OpenSSL Diffie-Hellman 키 교환, Go RSA 복호화, CRYSTALS-Kyber 및 CRYSTALS-Dilithium 방식들의 엔드 투 엔드 키 추출 공격을 할 수 있었다 한다.

문제의 대상이 되는 하드웨어는?

이들은 M1 기본 프로세서가 탑재된 하드웨어에 GoFetch를 설치하여 작업했으며.
이를 토대로 M2, M3 기본 프로세서에서도 시도해 본 결과,
악용가능한 DMP동작 수행에 성공했다 한다.

이들은 M프로세서의 다른(Pro, Max와 같은)모델에서는 테스트하지 않았으나,
동일 아키텍쳐를 이용하므로 같은 결과를 낼 것으로 추정한다 한다.

끝으로 인텔 렙터 레이크에도 같은 종류의 DMP가 탑재된 것을 확인했는데,
이쪽은 조금 더 복잡한 방식으로 작동하는 것으로 보였다고.

과거 Augury가 공개한 방법과는 어떻게 다를까?

Augury가 공개했던 위험가능성 시사는 범용적이지 못한 방법론이었다고 판단.
(실제 구현도 잘 안 됐단다)

GoFetch의 방식은 실증가능하여 더 공격적이므로, 훨씬 더 큰 보안 위험을 초래할 것으로 본단다.

메모리에서 로드된 모든 값이 역참조될 후보라는 것을 알 수 있었는데.
Augury의 많은 한계를 회피하고 실제 엔드투엔드 공격을 시연할 수 있음을 입증해 냈다고.

캐시 부채널 공격이란 무엇인가?

CPU가 메모리에서 데이터를 불러와 보존하는 캐시메모리는 동일한 시스템에서 실행되는 프로세스에 의해 공유된다.
그 말은, 다시말해
동일한 시스템에 공동 위치하는 공격자는 캐시 상태를 모니터링하여 공격대상의 액세스 패턴을 추론하는 것도 가능하다.

상수 시간 프로그래밍이란?

피연산자에 관계없이 모든 작업에 동일한 시간이 걸리게 해, 부채널 공격에 대한 코드를 강화하는 것을 목표로 하는 프로그래밍 패러다임이다.
상수 시간 코드에는 비밀 종속 분기, 루프 또는 기타 제어 구조가 포함되어선 안된다.
CPU는 공격자가 관찰할 수 있는 대기 시간으로 다양한 주소를 캐시하므로
상수 시간 코드는 어떤 방식으로든 데이터와 주소를 혼합하면 안되며,
보안 종속 메모리 액세스 또는 배열 인덱스의 사용을 금지하고 있다.

이들은 대상체가 상수 시간 패러다임에 따라 주소에서 데이터를 올바르게 분리하더라도,
DMP를 이용해 보안 종속 메모리 액세스를 생성하므로, 키 추출 공격에 취약한 가변 시간 코드가 생성된다는 것을 입증했다.

DMP: 데이터 메모리 종속 프리페처란?

프리페처는 액세스할 메모리 주소를 예측하고 주 메모리에서 데이터를 캐시로 가져오는 하드웨어 아키텍쳐다.
예측을 위해 기존 프리페처는 이전 요구 액세스의 주소 추적을 사용한다.
이 방식은 연결된 불규칙한 액세스 패턴의 경우 제대로 수행되지 않는데, 이러한 불규칙한 패턴을 처리하기 위해.
데이터 메모리 의존 프리페처(DMP)가 메모리 내용을 고려하여 무엇을 가져올지 결정한다,
이런 특성을 이용해 간접 액세스 패턴을 캡처할 수도 있는 것.

불행히도 본질적으로 이 동작은 하드웨어 레벨의 데이터와 메모리 주소를 뒤섞기 때문에 전체 컴퓨팅 스택을 일정하지 않게 만든다.
그러면서, 퍼포먼스를 유지하기 위해 DMP같은 걸 마련해두다보니 이러한 공격을 가능하게 하는 것이다.

DMP공격법이 듣지 않는 안전한 암호화 구현법도 있을까?

이 연구를 진행한 그룹은 일단 이에 대해 모른다고 답했다.
이 공격방법 자체도 프로세싱 중간 단계에 제어를 위한 입력을 구현해
이 키에 의존해 메모리 주소를 포함하게 만들 수 있다는 가정하에.
DMP가 프로세싱 중간 단계에 있는 데이터를 실제로 포인터처럼 보이게 하여 비밀 키 비트가 유출되는지 여부를 아는 방식으로 수행하는 것이란다.
따라서 이런 방식의 구현에 취약한지 평가하려면,
프로세싱 중간 단계상의 데이터를 모니터링하며 보안키를 유출하는 방식으로
포인터처럼 보이도록 만드는 시기와 방법을 이해하기 위해 암호 분석 및 코드 검사가 필수적으로 동반된다.
이 프로세스는 수동으로 진행되기 때문에 속도가 느리다고.

DMP공격을 무력화할 수 있는가?

가능하다.
그런데 일부 프로세서에서만 가능하다.

M3 CPU에 설정된 DIT 비트가 DMP를 효과적으로 비활성화하는 것은 관찰됐다고 한다.
그러나 M1과 M2의 경우에는 그렇지 않았다고.

인텔도 대응 비트인 DOIT 비트를 사용하여 랩터 레이크 프로세서에서 DMP를 비활성화할 수 있는 게 확인됐단다.

이 공격으로부터 보호하려면 어떻게 해야 하나?

(늘 그렇듯) 최신 버전의 소프트웨어로 정기적으로 업데이트를 수행.
암호화 라이브러리 개발자는 DOIT 비트DIT 비트를 이용해 비활성화할 수 있었다.

입력 블라인드 방식은 일부 암호화 체계에서 공격자가 제어하는 중간 값을 방지하고,
키 종속 DMP 활성화를 방지하는 데 도움이 될 수 있다.

마지막으로, 하드웨어 공유방지하는 등,
공격자가 처음부터 DMP 활성화를 측정하지 못하도록 하면,
암호화 프로토콜의 보안을 더욱 강화할 수 있다.

개념 증명 코드가 있는가?

있다.
조만간 GitHub를 통해 공개할 것.

Apple에는 이를 알렸나?

2023년 12월 5일 (공개 107일 전)에 결과를 Apple에 공개했다.


프로그래밍 지식이 있는 사람들은 쭉 읽으며 대강 눈치챘겠지만.
GoFetch 애플프로세서를 타겟으로 만든 해킹 논문과 그 결과물이라 할 수 있다.
또, DMP를 이용하는 현대적인 프로세서는 위의 방법론에 따라
모델을 특정하고, 모니터링해 분석후. 성공했다 판단되면.
해당 방식으로 특정 프로세서군을 대상으로 무조건 작동될 것이라 기대하는 방법론인 셈이다.

매우 위협적이지만, 일단 완성된 공격툴을 특정대상에 설치해야만 한다.
이상한 어플 받아서 설치하는 사람들은 사실상 0순위 타겟이 될 사람들이고,
검증된 개발사와 재검증 가능한 채널을 통해 소프트를 공급받아 이용하는 사람에게는 상당히 먼 방법이다.
또, 공유PC등에서는 각별히 개인정보를 이용하는 행위를 하지않도록 해야 한다는 내용이다.

약 10년 전, 내가 프로그래밍 과정에 하트블리드와 같은 방식이 가능하다는 것을 알게됐던 일이 떠오른다.
이러쿵저러쿵 개념적으로 안된다느니 막고 있다더니 하던, 현대적인 프로세서에서
어떤식으로든 프로그래머는 모든 종류의 메모리에 접근하고 이를 볼 수 있다는 걸 알게 됐던 일이다.
컴퓨터는 기본적으로 마이크로코드를 구동하기 위해 준비된 회로군집에 지나지 않는다.
안전한 컴퓨터 생활, 컴퓨터 환경은,
검증되고 안전한 이용법에서 시작된다는 걸 잊으면 안 될 것이다.

이 연구는 공군 과학 연구 사무소(AFOSR), 국방 고등 연구 계획국(DARPA), 국립 과학 재단(NSF), 알프레드 P. 슬로언 연구 펠로우십,
인텔, 퀄컴, 시스코로부터 부분적으로 지원받아서 이뤄졌다 한다..


출처: GoFetch사이트.
https://gofetch.fail
Next Post Previous Post
No Comment
Add Comment
comment url