애플리케이션 메모리 무작위화 또는 파쇄

애플리케이션 메모리 무작위화 또는 파쇄

특정 응용 프로그램의 수명이 끝난 후 또는 더 나은 방법으로는 일부 메모리를 해제할 때마다 특정 응용 프로그램의 메모리를 무작위화하거나 파쇄하는 것이 가능합니까?

다음과 같은 명령줄 유틸리티가 완벽할 것입니다.

파쇄 메모리 [옵션] [{응용 프로그램 매개변수...}]

답변1

Linux(제가 희망하는 모든 최신 다중 프로세스 OS와 마찬가지로)는 메모리 할당 시 페이지가 0으로만 처리되도록 합니다. 따라서 한 프로세스는 이전에 다른 프로세스에서 사용했던 메모리를 읽을 수 없습니다.

Linux에서는 페이지가 해제될 때가 아니라 페이지가 할당될 때 제로화가 발생합니다. 이로 인해 프로세스에서 이전에 사용했던 메모리를 읽는 두 가지 방법이 남습니다.

  • 커널 버그 악용
  • RAM 또는 스왑의 콘텐츠 덤프(루트 또는 물리적 액세스 필요)

누군가 페이지가 해제되자마자 페이지를 0으로 만들 수 있는 Linux 커널 패치를 제안했습니다(sanitize_mem에피소드 1,sanitize_mem에피소드 2) 그러나 제가 아는 한 그것은 받아들여지지 않습니다.

실제로 가장 큰 공격 창은 스왑 공간(오랜 기간 동안 데이터를 보관하는 공간)이며, 이마저도 공격자에게는 사소한 문제가 아닙니다(디스크를 훔치고 어수선한 페이지를 정리해야 함). 가장 해결하기 쉬운 방법이기도 합니다. 암호화된 스왑 공간을 사용하세요 dm-crypt.

답변2

Giles의 답변 외에도 :

  • 당신은 할 수메모리에 잠긴 페이지스와핑 방지(무엇을 하고 있는지 모르는 경우(예: 비밀번호 저장)는 좋지 않은 생각이며 시스템 성능에 영향을 미칠 수 있습니다.)
  • free다음을 사용하여 수동으로 메모리를 정리하는 기능을 재정의 할 수 있습니다.LD_LIBRARY_PRELOAD

답변3

메모리를 지울 수 있는 유틸리티가 있지만 관련 프로그램이 종료되고 메모리가 해제된 후에만 가능합니다. 특정 프로그램에서 할당한 메모리를 구체적으로 지울 수 있는 방법은 없습니다.

다음 사이트에서 "secure_delete" 제품군의 "smem"(및 기타)을 확인하세요.thc.org라이브 시스템에서 사용 가능한 메모리를 지우는 데 사용됩니다.

관련 정보