커널: /dev/kmem 및 /dev/mem 비활성화

커널: /dev/kmem 및 /dev/mem 비활성화

나는 이를 이해 /dev/kmem하고 /dev/mem시스템 메모리(예: 원시 RAM)에 대한 액세스를 제공합니다. 나는 또한 /dev/kmem그것이 커널에서 완전히 비활성화될 수 있고 조절될 수 있다는 것을 알고 있습니다 /dev/mem.

메모리에 대한 원시 액세스 권한을 갖는 것은 개발자와 해커에게 유용할 수 있지만 왜 /dev/mem.AFAIK를 전달해야 합니까?( 와 달리) 커널에서 비활성화할 수 없습니다 /dev/kmem. 제 생각에는 남용/악용될 수 있는 원시 메모리에 액세스하는 것은 문제를 야기할 뿐입니다.

실용적인 용도가 있나요? 제대로 작동하는 데 필요한 사용자 프로그램이 있습니까?

답변1

Scale 7x 2009에는 다음과 같은 제목의 슬라이드가 있습니다.Linux 커널 손상: /dev/mem을 통해 악성 코드 삽입안에는 이 두 개의 총알이 있습니다.

누가 이것을 필요로 합니까?

  • X 서버(비디오 메모리 및 제어 레지스터)
  • 복용량 μ

지금까지 검색을 통해 찾은 모든 내용에 따르면 이 두 개의 글머리 기호가 법적 용도의 선두 주자로 보입니다.

인용하다

답변2

/dev/mem해당 메모리 를 비활성화하더라도 /dev/kmem해당 메모리를 덤프할 수 있다는 점은 man proc주목할 가치가 있습니다 /proc/kcore. 아주 좋은 포렌식 툴킷rekall에는 이를 수행하는 도구가 있습니다./boot; 분석할 수 있도록 메모리(및 파일)를 덤프합니다 .

사실은,Ubuntu에서는 기본적으로 비활성화되어 있습니다./dev/kmem:

/dev/kmem공격자가 커널 루트킷을 로드하는 데 사용하는 것 외에는 현대적인 용도가 없습니다. CONFIG_DEVKMEM"n"으로 설정합니다. /dev/kmem장치 노드는 Ubuntu 9.04를 통해 Ubuntu 8.04 LTS에 여전히 존재 하지만 실제로 커널의 어떤 항목에도 연결되어 있지 않습니다.

우분투는 비활성화되지 않습니다/dev/mem응용 프로그램에 필요하기 때문에.

일부 응용 프로그램(Xorg)은 사용자 공간에서 실제 메모리에 직접 액세스해야 합니다. 이 액세스를 제공하기 위해 특수 파일이 존재합니다 /dev/mem. 과거에는 루트 액세스 권한이 있는 공격자가 이 파일에서 커널 메모리를 보고 변경할 수 있었습니다. CONFIG_STRICT_DEVMEM비장치 메모리 액세스(원래 이름은 )를 방지하기 위해 커널 옵션이 도입되었습니다 CONFIG_NONPROMISC_DEVMEM.

비활성화하는 방법 /proc/kcore?

CONFIG_PROC_KCORE커널을 빌드할 때 활성화하지 마십시오.

어떻게 비활성화합니까 /dev/mem?

글쎄, 되돌아 보면 man mem그것이 어떻게 생성되었는지에 대한 세부 정보를 얻을 수 있습니다.

mknod -m 660 /dev/mem c 1 1
chown root:kmem /dev/mem

rm -rf /dev/mem커널 구축 단계에서 활성화하지 않으면 비활성화할 수 있습니다 CONFIG_STRICT_DEVMEM.

비활성화하는 방법 /dev/kmem?

CONFIG_DEVKMEM커널을 빌드할 때 활성화되어 있지 않은지 확인하세요 .

콜드 스타트 ​​공격을 방지하는 방법은 무엇입니까?

/proc/kcore, /dev/mem, 암호화된 스왑 파티션을 비활성화하거나 스왑 파티션을 전혀 사용하지 않을 수 있다면 /dev/kmem어떻게 될까요 ? 훌륭한,당신의 기억이 얼어붙을 수도 있습니다이 방법으로 액세스하세요. 이 공격을 방지하는 방법은 무엇입니까? RAM을 암호화합니다. RAM을 어떻게 암호화합니까? 당신은 할 수 없습니다.자세한 내용은 TRESOR를 참조하세요..

답변3

아시다시피 /dev/mem실행 중인 시스템의 물리적 메모리에 대한 액세스를 제공합니다. /dev/kmem커널 가상 메모리에 대한 액세스를 제공합니다. 이 두 가지 문자 장치영구적으로 비활성화될 수 있음커널 구성 옵션을 통해(코드는 가장 권위 있는 정보 소스이므로 참조용으로만 사용) 아래 처음 두 옵션을 설정 해제하면 해당 장치가 비활성화됩니다.

배포판에 따라 zless /proc/config.gz또는 같은 것을 사용하여 현재 커널 구성을 볼 수 있습니다 less /boot/config-$(uname -r).

생각하다원래 목적 /dev/mem은 지원이었는데메모리 맵주변 장비. 이러한 가상 장치(예: 공격자가 다른 프로세스 또는 심지어 커널의 메모리를 즉시 패치할 수 있음)를 갖는 것의 명백한 부정적인 보안 영향은 적어도 10년 동안 알려져 왔습니다. /dev/mem메인라인 커널은 이미 제한된 액세스를 지원합니다.2008년 초부터, /dev/kmem또한 선택 사항그때부터또한.

10년 전에는 이것이 X의존적인 것처럼 보였고 /dev/mem지금도 그렇습니다. X필요성에 대한 주장을 테스트하기 위해 /dev/mem어제 노트북에서 가상 장치를 제거했는데 그 이후로 겉으로는 완벽하게 실행되고 있습니다. 2017년에는 있어요이러한 장치는 실용적인 목적이 없는 것으로 보입니다.연구와 개발을 넘어.

보안 관점에서 볼 때 이러한 장치를 제거하는 것이 좋습니다. 여전히 주목할 가치가 있는 것은외딴높은 권한을 가진 공격자는 자신의 주소 공간 외부의 메모리를 읽을 수 있습니다. 다른 사용자 공간 응용 프로그램의 메모리는 다음을 사용하여 액세스할 수 있습니다./proc/<pid>/mem. 커널 메모리는 다음을 사용하여 액세스할 수 있습니다./proc/kcore.

답변4

/dev/mem나는 처음부터 그것을 내 시스템에 포함시키지 않았습니다. 저는 Gentoo Linux를 사용하므로 이 Linux 배포판을 사용하면 실제로 Linux 커널을 포함한 모든 패키지를 직접 빌드할 수 있으므로 이는 놀라운 일이 아닙니다.

X.org X11을 사용하더라도 X11이 부족해서 어떤 문제도 발견하지 못했습니다 /dev/mem. 바로 오늘 나는 한 가지를 발견했습니다.나타나다패키지는 다음과 같이 x11-drivers/xf86-video-vesa필수라는 메시지를 인쇄합니다 /dev/mem.

* This driver requires /dev/mem support in your kernel
*   Device Drivers --->
*     Character devices  --->
*       [*] /dev/mem virtual device support

VESA 드라이버를 설치하지 않아서X 서버고의로 또는 대체 수단으로, 저는 실제로 이 기능을 사용한 적이 없으므로 지금까지 눈치채지 못했습니다.

하지만 이것은 뭔가를 증명한다ㅏ)X11은 더 이상 필요하지 않습니다 /dev/mem.비)일부 X11 비디오 드라이버는 여전히 이 작업을 수행할 수 있습니다.

특정 하드웨어용 최신 비디오 드라이버는 드라이버 없이도 작동할 가능성이 높습니다. 최신 X.org-X11(Gentoo의 경우 x11-base/xorg-server)처럼 꼭 그럴 필요도 없습니다.물뿌리더 이상은 아닙니다. 이것이 발전의 모습입니다…

관련 정보