2011.10.12 00:47
     

간만에 재미있는 질문을 받았습니다. 보안 관련 기술 쪽에 ASLR(Address Space Layout Randomization) 기법이 있는데, 이를 어떻게 MNIT64 OS에 적용할 수 있을까를 묻는 내용이었습니다.

저도 보안 쪽은 좀 생소하여 ASLR을 잠시 찾아봤는데, 응용프로그램을 로딩할 때 항상 정해진 어드레스가 아닌 매번 다른 어드레스로 로딩하여 크래커로부터 보호하는 기법이더군요. 사실 어드레스를 매번 변경한다고 해도 찾아서 뚫을려고 마음 먹으면 어쩔 수 없기 때문에 완벽한 방법은 아닙니다만, 나름대로 괜찮은 아이디어라는 생각이 들었습니다.

그래서, 어떻게 하면 MINT64 OS에도 이를 적용할 수 있을까 생각을 해봤는데 의외로 답은 간단했습니다. ^^;;; MINT64 OS는 응용프로그램을 메모리에 로딩할 때 동적 메모리 관리 모듈에서 먼저 메모리를 할당 받은 뒤에 그 메모리에 올려서 응용프로그램을 동작시킵니다. 따라서, 많은 응용프로그램이 실행되고 종료되는 상황이라면, 저절로 어드레스가 랜덤하게 할당되는 것이지요.

물론, 응용프로그램 하나만 계속 생성되었다가 종료되는 상황이라면 여전히 문제가 있습니다. 이 문제도 사실은 간단히 해결할 수 있습니다. 동적 메모리 관리 모듈에서 메모리를 할당받을 때, 메모리 블록을 항상 인덱스 0번부터 검색할 것이 아니라 랜덤한 인덱스부터 검색하도록 하면 됩니다. ^^;;; 나중에 여유가되면 한번 기능을 추가해봐야겠군요. ^^)/~

그럼 즐거운 밤 되세요 ;)
Mittm

Android App

Posted by kkamagui

댓글을 달아 주세요

  1. cheru2 2011.10.12 10:30  댓글주소  수정/삭제  댓글쓰기

    RSS 구독 하다가 ASLR 용어가 나와서 댓글까지 남기게 되네요. ^^
    PaX라는 ASLR solution은 mmap의 base address에 random 값을 이용한 delta를 더해서 메모리를 할당하더군요.
    Buddy allocation 방식에서는 적용 못한다고도 합니다.

    • Favicon of http://www.mint64os.pe.kr BlogIcon kkamagui 2011.10.13 01:32  댓글주소  수정/삭제

      cheru2님 안녕하세요
      만나뵈서 반갑습니다. ^^

      제가 잘 몰라서 그런데...
      Buddy Allocation 방식에서는 적용하지 못하는 이유가 있나요?

      응용프로그램을 로딩할 때 로딩되는 어드레스를 바꿔주고, 스택 어드레스를 바꿔주는 것 외에 혹시 다른 기능이 더 있는건지요? ㅠㅠ

  2. 2011.10.14 15:09  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://kkamagui.tistory.com BlogIcon kkamagui 2011.10.15 22:13 신고  댓글주소  수정/삭제

      헛~ 그랬군요.

      Buddy Block Algorithm으로 메모리 Allocation을 할 때 나오는
      규칙성을 생각한다면 사실 하나마나일수도 있겠군요. ^^;;;

      좋은 글 감사합니다. ;)