2011-01-20 2 views
1

예상 된 동작이라고 생각했습니다.Linux 및 일반 OS의 Nvidia Information Disclosure/Memory 메모리 보안

에서 : http://classic.chem.msu.su/cgi-bin/ceilidh.exe/gran/gamess/forum/?C35e9ea936bHW-7675-1380-00.htm

구절을 읊었 요약 :. "우리가 cudaHostAlloc/cuMemHostAlloc CUDA API 호출이 초기화되지 않은 고정 된 메모리를 반환 발견 리눅스 포트에서 작업이 구멍은 잠재적으로 하나가 이전에 사용하는 메모리의 영역을 검사 할 수 있습니다 다른 프로그램 및 리눅스 커널을 포함하고 있습니다. 모든 멀티 유저 시스템에서 CUDA 드라이버의 실행을 중단하는 것이 좋습니다. "

나의 이해는 "일반"의 malloc은 초기화되지 않은 메모리를 반환했다, 그래서 나는

내가 메모리 할당 작품이 일어날 다음 있도록 할 방법을 이해하는 방법 ... 여기의 차이가 무엇인지 표시되지 않습니다 :

-userA는 중요한 정보가 포함 된 시스템에서 프로그램을 실행합니다. 계산이 완료되면 결과가 디스크에 기록되고 프로세스가 종료되며 userA는 로그 오프합니다.

-userB 다음에 로그인하십시오. userB는 시스템에서 사용 가능한 모든 메모리를 요청하는 프로그램을 실행하고 RAM에 남겨진 userA의 중요한 정보가 들어있는 초기화되지 않은 메모리의 내용을 디스크에 씁니다.

여기에 뭔가 빠져 있어야합니다. 이게 뭐야? 메모리가 어딘가에 있지 않습니까? 관련 방법으로 커널/고정 메모리가 특별합니까?

답변

1

malloc()에 의해 반환 된 메모리는 동일한 프로세스의 다른 코드에서 사용 및 해제 된 후에 만 ​​0이 아니어도됩니다. 절대로 다른 과정. 운영체제는 프로세스가 종료 된 후에도 프로세스간에 메모리 보호를 엄격하게 시행해야합니다.

커널/고정 메모리는 분명히 커널 모드 드라이버에게 OS의 프로세스 보호 보증을 위반할 기회를 제공한다는 점에서 특별합니다.

아니요, 이것은 예상되는 동작이 아닙니다. 예, 이것은 버그였습니다. NVIDIA에게 이렇게 빨리 행동하는 것에 대한 찬사!

1

CUDA를 설치하기 위해 루트 권한이 필요한 유일한 부분은 NVIDIA 드라이버입니다. 결과적으로 NVIDIA 컴파일러와 링크를 사용하여 수행되는 모든 작업은 일반 시스템 호출과 표준 컴파일을 사용하여 수행 할 수 있습니다 (적절한 정보가 제공 되었다면 -lol-). 보안 구멍이 있으면 cudaHostAlloc/cuMemHostAlloc가 수정되거나 남아 있지 않습니다.

나는이 게시물에 표시된 첫 번째 대답에 대해 모호하다. malloc의 man 페이지는 메모리가 지워지지 않도록 지정합니다. 무료 설명서 페이지에는 메모리 지우기에 대한 언급이 없습니다. 메모리 지우기는 예기치 않은 (드문) 종료 문제를 남기는 민감한 섹션 -lol-의 코더의 책임성에있는 것 같습니다. VMS (널리 사용되는 OS는 좋지만 널리 사용되지 않음)를 제외하고는 OS가 시스템 클리어링의 성능 비용을 허용하지 않는다고 생각합니다. 이전에 프로세스 영역에서 새로 할당 된 메모리의 힙에서 시스템이 추적 할 수있는 방법에 대해 명확하지 않으며 무엇이 그렇지 않은지는 분명하지 않습니다.

결론 : 엄격한 수준의 개인 정보가 필요하면 다중 사용자 시스템 을 사용하거나 VMS를 사용하지 마십시오.

관련 문제