ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DRAM RowHammer
    공부/시스템 2015. 3. 11. 17:54

    최근 4월 9일 구글 프로젝트 제로에서 Row Hammer 을 이용한 익스플로잇에 대한 포스팅을 했다.

    http://googleprojectzero.blogspot.kr/2015/03/exploiting-dram-rowhammer-bug-to-gain.html?m=1&utm_content=buffera7b38&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer

    한글로 설명해준 블로그가 아직 없는 것 같아서 글을 써본다.


    What is DRAM RowHammer?

    DRAM은 다들 잘 알고 있다 싶이 동적램으로 우리가 일반적으로 컴퓨터에 꽂는 램이다.

    콘덴서로 구성해서 주기적으로 refresh가 필요하고 집적도가 낮고 낮은 전력 소모 등등.. 컴퓨터 하드웨어 이론에 나오는 이야기 이다.

    그렇다면 램(DRAM)에서는 어떻게 메모리에 값을 쓸까? 간단하게 DRAM의 구조에서 알아보자.




    (사진 1 - DRAM BANK의 구조 - 출저 : http://egloos.zum.com/nooriry/v/950940)

    먼저 DRAM은 사진 2 같이 생긴 여러개의 방(Banks)로 이루어져 있고 하나의 방은

    row와 colums 간단하게 가로, 세로로 구성되어있다.

    데이터에 접근하는 방법은 로우 어드레스 칼럼 어드레스를 보내면 램에서

    데이터를 보내준다.(간단하게 이정도만 알고있으면 된다)


    그렇다면 램에서 발생한다는 RowHammer 은 어떤 에러인 걸까?


    (사진 2 - 간략한 dram)


    램 내부가 저렇게 데이터가 있다고 하자.

    그리고 어셈을 이용해서 메모리에 접근하는 코드를 작성한다.


    code1a: mov (X), %eax // X에서 값 읽어오기 mov (Y), %ebx // Y에서 값 읽어오기 clflush (X) // X주소에 대한 캐시 flush (캐쉬 히트가 아닌 메모리에 직접 접근하기위해) clflush (Y) // Y주소에 대한 캐시 flush jmp code1a //무한루프

    참 간단하고 별 일 없을것 같이 생긴 코드다. 하지만 계속 해서 돌리게 되면 이상한 현상이 나타나게 된다.


    (사진3 - 바뀐 메모리)

    접근한 적도 없는 위 아래(addr +1, addr -1) 메모리 값들이 바뀌는(flip) 현상이 일어난다.

    원인은 DRAM의 용량을 늘리고 소비전력을 줄이기 위해 집적도를 높힌 것 그리고 셀의 크기가 작아졌기 때문에 셀간에 영향을 주는 것으로 알려져있다.


    http://users.ece.cmu.edu/~omutlu/pub/dram-row-hammer_kim_talk_isca14.pdf

    다음 자료를 보면 RowHammer에 대해 잘 설명 해주고 있다.

    댓글

Designed by Tistory.