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

위 사진의 zuc104 보드에서 빨간 네모로 표시된 부분이 바로 DRAM인 DDR4입니다.
이 DDR4의 모델명을 한번 살펴볼까요?

이 모델명에서 각각 의미하는 바를 정리해보면
여기에서 71, 52, 4는 이 DRAM의 capacity와 관련되어 있습니다!
쉽게 말해 한 row에 16bits씩 512M 만큼의 column이 존재하는 것이죠
그럼 하나의 칩은
512M x 16 bits = 8G bits = 1GB
의 용량을 가지는 겁니다!
이번에는 모듈 입장에서 살펴봅시다
하나의 모듈이
512M x 16 bits = 4GB
의 용량을 가지고,
자연스레 이 모듈은 총 4개의 chip을 가지는 것을 알 수 있습니다!
사실 여기서 이만큼의 capacity에 접근하는 주소체계까지 자세히 알아야하지만 이번 포스트는 'row hammering이 무엇인지'가 메인이기 때문에 다음 포스트에서 좀 더 자세히 다루도록 하겠습니다:)
그래서 지금 살펴본 DRAM에서는 총 4GB의 데이터를 저장할 수 있습니다.
데이터 1 bit는 각각 하나의 cell에 저장되고 이 cell은 DRAM에서 데이터를 저장하는 최소 단위입니다.

그림에서 보실 수 있듯이 하나의 셀은 Transistor, Capacitor, Ground로 이루어져 있습니다.
여기에서 중요한 것이 바로!!
데이터를 저장하는 Capacitor입니다!!
Capacitor의 전하가 충전 상태이면 1, 방전 상태이면 0의 데이터를 저장합니다.
즉, 이 Capacitor에 전하가 저장된 양에 따라 저장된 데이터가 달라집니다!
저장된 데이터의 내용과 관련되어 있으니 왜 중요하다고 했는지 이해가 되시나요?

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

이제 드디어 본론인 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을 어떻게 사용해서 데이터를 변경하는지는 다음 포스트에서 다루도록 하겠습니다-!
무시무시한데요.,. 어케 막죠