Rowhammer 공격 설명

소개



rowhammer 공격이라고 하는 메모리의 값을 무리 재기록해 버리는 수법에 대해 조사해 보았습니다.

취약성 내용



전제 지식



DRAM의 원리와 CPU cache에 대해 알아야합니다. 도움이 될 것 같은 자료를 열거해 두므로 읽어 잡아 주세요.

메모리에 관한 화제(1)-cache

【wikipedia】Dynamic Random Access Memory

DRAM이란?
이 그림이 중요합니다. 「랭크」와 「뱅크」의 관계에 대해서는 말씀드립니다.


지금도 들을 수 없는 메모리의 기초지식 FP~BEDO DRAM편

【PDF】DDR 메모리 입문

Ryzen에서 화제가 된 메모리의 "Rank"는 무엇입니까?
「랭크」의 설명입니다

rowhammer



DRAM과 CPU cache에 대해 이해할 수 있었다고 해서, 본제에 들어갑니다.


보라색 행이 값을 다시 쓰고 싶은 메모리 셀의 행, victim row입니다.
그 위아래에 노란색 행이 있습니다.
이 노란색 행에 격렬하게 값을 쓰면 노이즈가 많이 발생하고 victim row의 메모리 셀 커패시터의 전하가 영향을 받고 결과 값이 다시 쓰여집니다. 이것이 rowhammer입니다.

노이즈 맡기기 때문에 victim row의 어느 메모리 셀이 영향을 받는지, 값이 1이 되는지 0이 되는지는 제어할 수 없습니다.
(전하가 빠지는 방향이 주가 된다고 생각하기 때문에 값은 0이 되기 쉽다고 생각합니다만, 1이 되는 경우도 있는 것 같습니다. 그래서 1차 자료에서는 bit flip 라고 하는 표현을 사용하고 있습니다)

PoC는 이하. CPU cache를 타고 있으면 DRAM까지 닿지 않기 때문에 clflush로 CPU cache를 플래시 해, 쫓아내고 있습니다.
code1a:
mov(X)、%eax //アドレスXから読み込み
mov(Y)、%ebx //アドレスYから読み込み
clflush(X)//アドレスXのキャッシュをフラッシュする
clflush(Y)//アドレスYのキャッシュをフラッシュする
jmp code1a

이 공격을 성공하려면
1. DDR3, DDR4에 ECC 없음 버전
2. DRAM의 구성을 알고 있는 것
3. 새로 고침이 발생하기 전에 공격
필요합니다.

1은, rowhammer가 노이즈 맡기기 때문에 미세 가공의 진화에 의한 곳이 크다고 합니다. 미세 가공에 의해 노이즈에 약해지니까요. "DDR은 DDR2 SDRAM 모듈에 거의 또는 전혀 영향을 미치지 않습니다. 많은 DDR3 및 DDR4 SDRAM 모듈에는 영향을 미칩니다."또 ECC로 에러 정정하는 것은 효과가 높다고 합니다.

2는 소프트웨어로 액세스할 수 있는 주소는 논리 주소입니다만, rowhammer의 원리로부터 해서 물리 주소로 변경해, 한편 같은 뱅크내에 있는 상하행의 물리 주소를 특정할 필요가 있습니다.
리눅스라면$sudo decode-dimms에서 조사할 수 있는 것 같습니다. (macOS에서는 decode-dimms는 없었습니다. 시스템 리포트에서도 모릅니다)

3은, 리프레시가 행해지면 victim row의 전하가 충전되어 건강하게 되어 버리므로 다시 한다. 그렇군요.

감상



재미있는 공격이있는 것입니다.

참고



Rowhammer 문제 사적 요약

【Project Zero】Exploiting the DRAM rowhammer bug to gain kernel privileges

wikipedia

JVNVU # 92147586 통합 GPU에 대한 WebGL을 이용한 사이드 채널 공격 및 Rowhammer 공격

히스토리



2018/8/12 초판

좋은 웹페이지 즐겨찾기