DRAM 3분 소요

램을 스파게티처럼 늘려버린다: 패치할 수 없는 실리콘의 구멍

컴퓨터 보안에서 제일 무서운 취약점은 뭘까요. 제로데이? 아닙니다. 패치가 불가능한 취약점입니다. 요즘 다시 도는 “DRAM 스파게티화(Spaghettifying DRAM)” 이야기가 딱 그 부류입니다. 우리가 의심 한 번 안 해본 “메모리에 1을 쓰면 1이 읽힌다"는 전제를 흔드는 연구죠.

미리 밝혀두면, 이번 주제는 최근 30일 커뮤니티 데이터가 거의 잡히지 않았습니다. 그래서 실시간 반응을 정리하기보다 이 계열 연구가 왜 자꾸 다시 화제가 되는지를 짚어보겠습니다.

램은 사실 아주 불안정한 물건입니다

DRAM은 이름부터 “Dynamic"입니다. 동적이라는 말이 낭만적으로 들리지만, 뜻은 하나입니다. 가만히 두면 데이터가 사라진다.

셀 하나는 트랜지스터 하나와 커패시터 하나로 이뤄집니다. 커패시터에 전하가 차 있으면 1, 비어 있으면 0. 문제는 이 커패시터가 새는 바가지라는 겁니다. 그래서 DRAM은 보통 64밀리초마다 모든 셀을 읽고 다시 써주는 리프레시(refresh)를 반복합니다. 초당 열다섯 번 넘게 전체 메모리를 갱신하면서 겨우 데이터를 붙잡고 있는 셈입니다.

여기서 공격의 실마리가 나옵니다. 물리 법칙에 기대어 아슬아슬하게 버티는 상태라면, 물리 법칙으로 무너뜨릴 수도 있으니까요.

로우해머: 옆방 문을 두드려서 벽을 뚫는다

2014년 카네기멜론과 인텔 연구진이 발표한 로우해머(Rowhammer)가 이 분야의 출발점입니다. 원리는 황당할 만큼 단순합니다.

DRAM의 특정 행(row)을 아주 빠르게, 반복해서 읽습니다. 그러면 전기적 간섭이 생겨 인접한 행의 커패시터가 예상보다 빨리 방전됩니다. 리프레시가 오기 전에 전하가 빠져나가면 건드리지도 않은 옆줄의 비트가 1에서 0으로 뒤집힙니다.

내 메모리만 만졌는데 남의 메모리가 바뀝니다. 이게 왜 치명적이냐. 구글 프로젝트 제로가 2015년에 답을 보여줬습니다. 페이지 테이블 엔트리의 비트 하나를 뒤집어 커널 권한을 따냈거든요. 브라우저에서 자바스크립트만으로 이 공격을 재현한 Rowhammer.js도 나왔습니다.

공정이 미세해질수록 상황은 나빠집니다. 셀이 작아지고 간격이 좁아지니 간섭은 커지죠. DDR4에 도입된 TRR(Target Row Refresh) 방어도 2020년 TRRespass 연구로 뚫렸고, DDR5도 안전지대가 아니라는 결과가 계속 나옵니다.

‘스파게티화’가 가리키는 것

블랙홀 물리학에서 스파게티화는 조석력 때문에 물체가 길게 늘어나 찢어지는 현상을 말합니다. 이 비유를 메모리에 갖다 대면 뜻은 분명합니다. 물리적 실체가 추상화 계층을 늘려서 찢어버린다.

우리는 메모리를 배열처럼 생각합니다. 주소 0x1000에 값을 쓰면 그 자리에 값이 있고, 옆 주소는 상관없다고 믿죠. 하지만 실리콘 위에서 그 두 주소는 몇 나노미터 옆의 이웃입니다. 논리적 격리는 물리적 격리가 아닙니다.

이런 시각의 공격을 널리 퍼뜨린 사람이 xoreaxeaxeax라는 핸들을 쓰는 크리스토퍼 도마스입니다. 2017년 데프콘에서 발표한 sandsifter는 x86 프로세서의 명령어 공간을 무차별 탐색해 문서화되지 않은 명령어를 찾아냈습니다. 몇몇 CPU에서는 링 3 코드가 하드웨어를 멈춰버리는 명령이 실제로 나왔죠. “칩이 데이터시트대로 동작한다"는 믿음을 정면으로 깬 작업이었습니다.

로우해머든 스파게티화든 sandsifter든, 질문은 하나로 모입니다. 우리가 믿는 하드웨어 스펙은 어디까지가 사실인가.

소프트웨어로는 못 막습니다

멜트다운과 스펙터는 그래도 마이크로코드 업데이트와 커널 패치로 완화할 수 있었습니다. 성능 손실을 감수하면서요. 그런데 DRAM 셀 사이의 전기적 간섭은 소프트웨어가 끼어들 자리가 없습니다.

대응책이 아예 없진 않습니다. ECC 메모리는 1비트 오류를 정정합니다. 다만 2016년 ECCploit 연구가 다중 비트 플립으로 ECC도 우회할 수 있다는 걸 보여줬습니다. DDR5의 온다이 ECC, 리프레시 주기 단축, 메모리 컨트롤러 차원의 접근 빈도 감시 같은 방법도 있지만 전부 완화해결이 아닙니다. 리프레시를 자주 돌리면 전력과 성능을 같이 잃고요.

진짜 해결은 셀 구조를 바꾸는 겁니다. 그러려면 새 공정, 새 설계, 새 팹이 필요합니다. 시간 단위는 년입니다. 그리고 지금 서버실에 꽂혀 있는 램은 그대로 남습니다.

클라우드에서는 남의 이야기가 아닙니다

혼자 쓰는 노트북이라면 로우해머를 크게 걱정할 일은 아닙니다. 이미 그 기계를 만질 수 있는 사람이 굳이 비트를 뒤집을 이유가 없으니까요.

문제는 멀티테넌트 환경입니다. 클라우드 인스턴스는 물리 서버 하나를 여러 고객이 나눠 씁니다. 하이퍼바이저가 메모리를 격리하지만 그 격리는 논리적입니다. 내 VM과 옆 VM의 데이터가 같은 DRAM 뱅크의 인접한 행에 놓일 수 있습니다. 크로스 VM 로우해머 공격 연구도 여러 편 나왔고요.

AI 인프라 쪽으로 오면 더 흥미로워집니다. GPU에 붙는 HBM도 결국 DRAM입니다. 수백 기가바이트 메모리에 수십억 달러짜리 모델 가중치가 올라가 있습니다. 비트 몇 개를 정밀하게 뒤집어 모델 동작을 바꾸는 시나리오는 이미 학계에서 논의하는 이야기입니다.

마무리

로우해머가 발표된 지 12년입니다. 그동안 방어가 나오면 우회가 나오는 순환만 반복됐지 근본 해결은 없었습니다. 물리 법칙을 상대로 하는 싸움이라 그렇습니다.

이런 연구가 알려주는 건 신뢰를 어디에 두느냐입니다. 우리는 소프트웨어 스택을 쌓아 올릴 때 맨 아래 하드웨어를 공리처럼 취급합니다. 그 공리가 확률적이라면, 그 위에 세운 증명은 다 뭐가 되는 걸까요.

여러분이 지금 쓰는 서비스의 보안은 어느 계층까지 검증됐다고 보시나요.

DRAM 하드웨어보안 로우해머 메모리 보안취약점

댓글

    댓글을 불러오는 중...