프로그램이 할당된 RAM 외부를 읽지 못하도록 차단

프로그램이 할당된 RAM 외부를 읽지 못하도록 차단

프로그램 B가 무엇을 하고 있는지 모니터링할 필요가 없기 때문에 프로그램 A가 전체 램을 읽지 못하게 할 수 있는지 궁금합니다.

또한 저는 Windows 8.1 64비트를 사용하고 있습니다.

답변1

Windows에서 실행되는 프로그램은 RAM 주소를 직접 지정할 수 없습니다. 가상 주소에 액세스합니다. RAM에 액세스하려면 해당 목적에 맞게 작성된 커널 모드 드라이버의 도움이 필요합니다. (이것은 Mark Russinovich의 "sysinternals 도구" 중 일부가 수행하는 방식입니다. .exe 내의 리소스로 패키지로 제공되는 드라이버를 설치합니다.)

한 프로그램이 다른 프로그램에 액세스하는 경우 Windows의 모든 프로세스에는 이미 다른 모든 프로세스와 분리되고 연결되지 않은 자체 가상 주소 공간이 있습니다. 즉, 한 프로그램의 0x10000은 다른 프로그램의 0x10000과 완전히 다릅니다. 어떤 주소를 보려고 해도 항상 해당 주소에 대한 자신의 프로세스 인스턴스가 표시됩니다.

하지만:ReadProcessMemory 및 WriteProcessMemory API를 사용하면 프로그램이 프로세스 간 액세스(가상 주소 측면에서)를 수행할 수 있습니다. 이를 사용하려면 "액세스"를 수행하는 프로세스가 PROCESS_VM_READ 또는 PROCESS_VM_WRITE 권한이 부여된 다른 프로세스를 열어야 합니다. 사용자 세션 내에서 실행되는 프로세스에는 일반적으로 서로에게 이 작업을 수행할 수 있는 기능이 있습니다. 즉, 대부분의 프로세스에 대한 보안 설명자는 프로세스 작성자인 사용자에게 이 작업을 허용합니다.

그러나 한 프로그램은 관심 있는 항목이 다른 프로세스의 어디에 있는지 알 수 없습니다. 흥미로운 것을 찾는 것은 길고 피곤한 일이 될 것입니다. 대부분의 시도에서는 특히 64비트 시스템, 특히 Windows 8.1 이상에서 "주소가 정의되지 않음" 영역이 발생합니다. 가상 메모리의 정의된 영역 내에서도 프로그램이 일상적으로 "은행 계좌 번호가 여기에 있습니다."와 같이 해당 계좌 번호가 바로 뒤에 오는 것과 같은 컨텍스트 정보로 메모리 영역에 태그를 지정하는 것과는 다릅니다.

귀하의 프로세스 중 하나가 다른 프로세스의 "메모리"(느슨하게 해석됨)에 액세스할 수 있다는 것은 다소 무심하다고 생각할 수 있습니다. 그러나 하나의 로그인 ID와 인증으로 수행하는 모든 작업은 모두 단일 사용자가 수행하는 것으로 간주됩니다. 즉, 어쨌든 그것은 모두 귀하의 데이터입니다.

솔직히 말해서 디스크의 데이터에 대해 더 걱정할 것입니다. 귀하의 데이터가 포함된 모든 파일은 귀하의 보안 ID로 생성되었으므로 귀하의 보안 ID로 실행되는 모든 프로그램이 해당 파일에 모두 액세스할 수 있습니다. 더 나쁜 것은 Windows 기본적으로 "사용자" 그룹(기본적으로 모든 사람)에게 읽기 액세스 권한이 부여된 모든 파일을 생성하는 것입니다. 따라서 다른 보안 ID로 실행되는 프로그램도 이를 읽을 수 있습니다. 파일 이름이 잘 지정되고 이름이 잘 정리된 디렉터리에 저장되는 경우가 많기 때문에 account.txt와 같은 "흥미로운" 파일을 찾는 것이 그리 어렵지 않습니다. NTFS 파일 암호화는 자신의 계정으로 실행되는 스누퍼 프로그램에 대해서는 도움이 되지 않습니다. 이는 크로스 프로세스 메모리 액세스보다 훨씬 더 큰 노출입니다.

관련 정보