DRAM 공격 기법, Row Hammering

제유·2025년 1월 1일
post-thumbnail

컴공 전공생들에게도 row hammering은 초면인 경우가 많을 텐데요.
이번 포스트에서 이 row hammering에 대해 간단하게 소개해볼려고 합니다-!

DRAM

그 전에 먼저 row hammering의 공격 대상인 DRAM에 대해 알아봅시다!

위 사진의 zuc104 보드에서 빨간 네모로 표시된 부분이 바로 DRAM인 DDR4입니다.

이 DDR4의 모델명을 한번 살펴볼까요?

이 모델명에서 각각 의미하는 바를 정리해보면

  • M : Memory Module
  • 4 : SODIMM (Small-Outline Dual In-line Memory Module)
  • 71 : x64 (모듈 입장에서)
  • A : DDR4
  • 52 : 512M
  • 4 : x16 (칩 입장에서)
  • C : 4th Generation
  • TD : DDR4-2666 (1333MHz)

여기에서 71, 52, 4는 이 DRAM의 capacity와 관련되어 있습니다!


우선 칩 입장에서 capacity를 볼까요?
  • 52 : 512M (Depth)
  • 4 : x16 (Width)

쉽게 말해 한 row에 16bits씩 512M 만큼의 column이 존재하는 것이죠

그럼 하나의 칩은
512M x 16 bits = 8G bits = 1GB
의 용량을 가지는 겁니다!


이번에는 모듈 입장에서 살펴봅시다

  • 52 : 512M (Depth)
  • 71 : x64 (Width)

하나의 모듈이
512M x 16 bits = 4GB
의 용량을 가지고,
자연스레 이 모듈은 총 4개의 chip을 가지는 것을 알 수 있습니다!


사실 여기서 이만큼의 capacity에 접근하는 주소체계까지 자세히 알아야하지만 이번 포스트는 'row hammering이 무엇인지'가 메인이기 때문에 다음 포스트에서 좀 더 자세히 다루도록 하겠습니다:)

DRAM - cell

그래서 지금 살펴본 DRAM에서는 총 4GB의 데이터를 저장할 수 있습니다.
데이터 1 bit는 각각 하나의 cell에 저장되고 이 cell은 DRAM에서 데이터를 저장하는 최소 단위입니다.

그림에서 보실 수 있듯이 하나의 셀은 Transistor, Capacitor, Ground로 이루어져 있습니다.

  • Transistor : 데이터의 읽기 및 쓰기를 제어하는 스위치 역할
  • Capacitor : 데이터를 저장하는 역할
  • Ground : 기준 전압(0V)

여기에서 중요한 것이 바로!!
데이터를 저장하는 Capacitor입니다!!

Capacitor의 전하가 충전 상태이면 1, 방전 상태이면 0의 데이터를 저장합니다.

즉, 이 Capacitor에 전하가 저장된 양에 따라 저장된 데이터가 달라집니다!

저장된 데이터의 내용과 관련되어 있으니 왜 중요하다고 했는지 이해가 되시나요?

좀 전에 capacity 계산할 때 depth와 width 기억나시나요?
DRAM에서 하나의 칩에 한 bit마다 하나의 셀이 width x depth 형태로 배열되어 있다고 생각하시면 됩니다.

Row Hammering

이제 드디어 본론인 Row Hammering으로 들어가봅시다!

우선 Row Hammering이 무엇일까요? 단어 뜻 그대로 생각해봅시다.

row hammering = row를 망치질하다 = row를 두드리다 = row에 접근하다 = row를 read하다

쉽게 말하자면 row를 read하는 것입니다!

이게? 공격기법? 메모리는 당연히 read해야하지 않나?
아직은 감이 잘 안오시죠? 이제 앞에서 다룬 내용들을 써먹어봅시다.

DRAM의 저장단위인 cell은 capacitor에 저장된 전하가 충전 상태인지, 방전 상태인지에 따라 0 또는 1을 저장합니다.

그런데 이 전하는 cell에 자주 접근할수록 점점 방전이 됩니다!
이게 무슨 말일까요?
매우 반복적으로 특정 cell에 자주 접근하면 이 cell의 데이터가 변경될 수도 있다는 것이죠

Row Hammering이 바로 이 취약점을 이용한 공격기법입니다.


위 그림에서와 같이 두 개의 row에 반복적으로 접근(즉, read)하여 그 사이 row에 bit flip을 유발시키는 것을 row hammering이라고 합니다.

놀랍지 않나요?
row hammering을 사용하면 write를 하지 않고 메모리에 저장된 데이터를 변경할 수 있습니다!
다시 말해, 나에게 write 권한이 없어도 row hammering을 이용하면 write가 가능하다는 것이죠😱

이 row hammering을 어떻게 사용해서 데이터를 변경하는지는 다음 포스트에서 다루도록 하겠습니다-!

profile
연구하며 개발하기

1개의 댓글

comment-user-thumbnail
2025년 1월 4일

무시무시한데요.,. 어케 막죠

답글 달기