GN⁺: 애플 CPU에 대한 새로운 위험한 공격들 : SLAP, FLOP
(predictors.fail)SLAP: 데이터 추측 공격 (data Speculation attacks via Load Address Prediction)
- SLAP 공격은 Apple Silicon의 M2/A15 CPU에서 발생하는 새로운 추측 실행 공격임.
- 로드 주소 예측기(LAP) 를 통해 메모리 접근 패턴을 기반으로 다음 메모리 주소를 예측하여 성능을 향상시킴.
- 잘못된 예측 시, CPU가 접근해서는 안 되는 데이터를 추측 실행으로 처리하여 보안 위험을 초래함.
- 실제 사례로, Safari 웹 브라우저에서 원격 공격자가 이메일 내용과 브라우징 행동을 복구할 수 있는 공격을 시연함.
FLOP: 잘못된 로드 출력 예측(False Load Output Predictions)
- FLOP 공격은 Apple M3/A17 CPU에서 데이터 의존성을 예측하여 발생하는 또 다른 추측 실행 공격임.
- 로드 값 예측기(LVP) 를 통해 메모리 서브시스템이 반환할 데이터 값을 예측하여 성능을 향상시킴.
- 잘못된 예측 시, 메모리 안전을 위한 프로그램 논리의 중요한 검사를 우회하여 메모리에 저장된 비밀을 유출할 수 있는 공격 표면을 열게 됨.
- Safari와 Chrome 웹 브라우저에서 위치 기록, 캘린더 이벤트, 신용카드 정보 등을 복구하는 공격을 시연함.
데모
- Proton Mail의 받은 편지함 데이터 유출: M3 CPU의 LVP를 WebKit 내의 JavaScript 코드로 훈련하여 받은 편지함 내용을 주소 공간에 가져옴.
- 위대한 개츠비 읽기: Apple M2 CPU에서 LAP를 사용하여 비밀 문자열을 복구하는 개념 증명 시연.
- 해리 포터 읽기: Apple M3 CPU에서 LVP를 사용하여 잘못된 배열 인덱스를 예측하고 문자열의 문자를 참조하는 개념 증명 시연.
연구진
- Jason Kim, Jalen Chuang, Daniel Genkin (Georgia Institute of Technology)
- Yuval Yarom (Ruhr University Bochum)
SLAP 및 FLOP FAQ
Is my Apple device affected?
- Mac 노트북: 2022년 이후 출시된 모든 모델 (MacBook Air, MacBook Pro)
- Mac 데스크톱: 2023년 이후 출시된 모든 모델 (Mac Mini, iMac, Mac Studio, Mac Pro)
-
iPad: 2021년 9월 이후 출시된 모든 iPad Pro, Air, Mini 모델
- Pro 6세대 및 7세대, Air 6세대, Mini 6세대
-
iPhone: 2021년 9월 이후 출시된 모든 모델
- iPhone 13, 14, 15, 16 전 모델 및 SE 3세대
Why are the SLAP and FLOP attacks significant?
- 보호 메커니즘: 일반적으로 웹 브라우저는 두 개의 열린 웹페이지가 서로 격리되도록 하여 하나의 페이지가 다른 페이지의 콘텐츠를 읽지 못하도록 보호
-
취약점: SLAP 및 FLOP는 이러한 보호를 무력화하여, 공격자 페이지가 타겟 페이지의 민감한 데이터를 읽을 수 있게 만듦
- 노출되는 데이터: 위치 기록, 신용카드 정보 등
How can I defend against SLAP and FLOP?
- FLOP는 완화 방안이 있지만, 이는 소프트웨어 벤더의 패치가 필요하며 사용자가 직접 해결할 수 없음
- Apple은 향후 보안 업데이트에서 이 문제를 해결할 것이라 밝혔으며, 자동 업데이트를 활성화하고 최신 OS 및 애플리케이션을 유지하는 것이 중요함
What about other processor vendors?
- Intel, AMD, Qualcomm, Ampere 등의 제품에서는 아직 SLAP 또는 FLOP의 징후를 발견하지 못함
What about other web browsers?
- Firefox 등 기타 브라우저는 테스트하지 않음
Can I detect if someone is using SLAP or FLOP on my device?
- SLAP 및 FLOP는 마이크로아키텍처 기반 공격으로, 시스템 로그에 흔적을 남기지 않음
Are any malicious actors abusing SLAP or FLOP in the wild?
- 현재까지 SLAP 또는 FLOP가 실제로 사용된 증거는 없음
When did you notify Apple?
- SLAP: 2024년 5월 24일 Apple에 보고
- FLOP: 2024년 9월 3일 Apple에 보고
기술적 질문
사이드 채널(Side Channel)이란?
-
컴퓨터 하드웨어 구현의 취약점을 악용하는 공격
- 소프트웨어 버그 대신 하드웨어 동작에서 발생하는 정보 유출을 활용
-
데이터 유출 경로
- 소리, 전자기파, 열 발산 등의 물리적 현상
- CPU의 공유 자원(코어, 캐시, 내부 버퍼 등)에서 발생하는 경쟁(contention)
-
CPU 경쟁으로 인한 정보 노출
- 시간 측정, 전력 소비 등의 간접 변수를 통해 타겟의 행동 패턴을 유추
추론 실행(Speculative Execution) 공격이란?
-
추론 실행: CPU가 제어 흐름을 예측하여 명령을 미리 실행하는 최적화 기법
- 예측이 틀리면 상태를 되돌리지만, 캐시 등 미세한 흔적이 남음
-
Spectre 공격
- 잘못된 흐름으로 예측 실행을 유도
- 예측 실행 중 민감한 데이터를 사용하는 명령이 실행되면, 데이터 값이 간접적으로 노출됨
-
SLAP 및 FLOP에서의 확장
- Apple CPU는 제어 흐름뿐 아니라 데이터 흐름까지 예측
- FLOP는 잘못된 데이터 값에 대한 명령 실행을 유발
SLAP 동작 방식
-
Load Address Prediction (LAP) 분석
- 특정 메모리 주소 패턴을 학습시키면, LAP가 다음 주소를 예측하여 데이터 작업 실행
- 하드웨어 사전 가져오기(prefetching)와 다르게, 예측된 데이터로 명령 실행
-
Safari 취약점 악용
- iLeakage가 발견한 Safari의 격리 문제를 기반으로, 서로 다른 웹페이지가 동일 프로세스에서 처리되도록 강제
- 공격자 웹페이지가 타겟 웹페이지의 문자열 데이터에 접근
FLOP 동작 방식
-
Load Value Prediction (LVP) 분석
- 동일한 데이터 값이 반복 반환되면, LVP가 결과를 예측
- 잘못된 메모리 값을 사용하여 명령 실행
-
Safari 및 Chrome 공격
- Safari: JavaScript 데이터 구조의 유형 정보를 예측해 잘못된 데이터 구조로 명령 실행
- Chrome: WebAssembly 함수 호출 시 잘못된 인수로 인해 메모리 읽기 오류 발생
SLAP과 FLOP의 차이점
- SLAP: Load Address Predictor (LAP)를 사용해 문자열 할당 근접성을 악용
- FLOP: Load Value Predictor (LVP)를 사용해 데이터 무결성 검사를 우회
-
LAP vs LVP
- LAP: 다음 메모리 주소를 예측
- LVP: 다음 메모리 값 반환을 예측
- LAP는 긴 학습 과정이 필요하지만, 패턴 예측이 가능
JavaScript와 WebAssembly란?
- JavaScript: 웹 콘텐츠를 동적으로 업데이트하는 언어
- WebAssembly: 고성능 웹 애플리케이션을 위한 언어로, JavaScript와 연동
-
공격 영향
- 두 언어 모두 브라우저에서 자동 실행되므로, 악성 코드를 다운로드하지 않아도 공격 가능
Safari와 Chrome을 공격 대상으로 선택한 이유
-
Safari:
- 사이트 격리(Site Isolation)가 없어 서로 다른 도메인의 웹페이지가 동일 프로세스에서 실행 가능
- LAP 및 LVP 기반 공격 표면 확대
-
Chrome:
- 사이트 격리가 적용되었지만, 일부 경우에 동일 사이트의 서브도메인이 하나의 프로세스에서 처리됨
- LAP 및 LVP 공격이 여전히 가능
연구 지원
- 이 연구는 AFOSR, Alfred P Sloan Research Fellowship, ARC Discovery Project, DARPA, DFG, Qualcomm, Cisco, Zama의 지원을 받음.
Hacker News 의견
-
SLAP 데모는 방어 심층이 어떻게 취약점의 실행 가능성을 좌우할 수 있는지를 잘 보여줌. Safari의 취약점은
window.open
호출 시 새로운 창을 개별 프로세스로 격리하지 못하기 때문에 발생함 -
M3에서 LVP 존재를 역설계하는 부분이 흥미로움. 8바이트 로드 시 로드 값이 0일 때만 LVP가 활성화됨. 이는 메모리 안전을 위한 대책일 수 있음
-
Spectre와 Meltdown 공격 및 관련 논문은 처음 보는 사람들에게 읽어볼 가치가 있음
-
Safari에서 캐시 히트와 미스를 구분하기 위해 NOT 게이트 기반 캐시 증폭 원리를 사용함. 웹 환경에서도 캐시 히트와 미스를 구분할 수 있음
-
Chrome의 사이트 격리가 완벽한 완화책이 아님을 보여줌. 동일 사이트의 두 하위 도메인이 하나의 프로세스로 병합될 수 있는 코너 케이스가 존재함
-
하드웨어 취약점 발표를 위한 마케팅 문화가 이상하게 느껴짐. 왜 단순히 취약점을 보고하고 논문을 발표하는 대신 커스텀 도메인, 로고, FAQ 등을 만드는지 의문임
-
작년에 Intro to Cyber Security 수업에서 Daniel Genkin 교수를 만났음. Apple CPU에 대한 투기 공격을 연구 중이라고 했음. 보안은 거의 보장되지 않음을 이해하게 됨
-
신뢰할 수 없는 사이트에서 기본적으로 js를 비활성화하는 경향이 있음. 이는 우리가 기계에서 실행하는 누군가의 프로그램임
-
Apple이 최근 macOS와 iOS에 보안 수정을 포함한 마이너 버전 업데이트를 발표함. 이 취약점을 해결했는지 확인한 사람이 있는지 궁금함
-
RUB가 고급 공격 보안 작업의 글로벌 중심지가 된 것 같음. 10년 전에는 주의를 기울이지 않았던 것인지, 아니면 새로운 현상인지 궁금함