
mknod
일반 파일, FIFO 또는 Unix 소켓 이외의 노드를 생성할 때 명령에 루트 권한이 필요하다는 것을 알았습니다.
왜 그런 겁니까? 일반 사용자가 mknod
일반 파일을 생성할 때 사용할 수 없는 명령을 사용하여 어떻게 시스템에 해를 끼치거나 다른 사용자의 개인 정보를 침해할 수 있습니까?
답변1
mknod를 임의로 호출할 수 있으면 소유하고 액세스할 수 있는 장치 파일을 만들 수 있습니다.당신한테 달렸습니다모든 장치에 대해. 장치 파일은 해당 장치에 대한 무제한 액세스를 제공하므로 모든 사용자는 장치에 무제한 액세스할 수 있습니다.
예를 들어 /dev/sda1
액세스 권한이 없는 파일 시스템이 있다고 가정해 보겠습니다. (예를 들어, 에 설치되었습니다 /secret
). 여기서 블록 8,1은 특별하므로 예를 들어 mknod를 호출할 수 있으면 파일 시스템 제한에 관계없이 /dev/sda1
자신의 장치 file 을 통해 mknod ~/my_sda1 b 8 1
무엇이든 액세스 할 수 있습니다. (장치를 아무런 구조도 없는 플랫 파일로 받기 때문에 어떻게 해야 할지 알아야 하지만, 블록 장치 파일에 접근하기 위한 라이브러리가 있습니다.)/dev/sda1
/dev/sda1
/dev/sda1
마찬가지로, /dev/mem
또는 의 복사본을 만들 수 /dev/kmem
있으면 주 메모리의 모든 항목을 검사할 수 있습니다. /dev/tty*
또는 의 복사본을 만들 수 있으면 /dev/pts/*
키보드 입력 등을 기록할 수 있습니다.
따라서 mknod는 일반 사용자의 손에 해로우므로 사용을 제한해야 합니다.
참고 이것이 nodev
이동식 장치에 설치 옵션이 중요한 이유입니다. 그렇지 않으면 준비된 이동식 미디어에 자신의 장치 파일을 가져올 수 있습니다.
답변2
를 사용하면 mknod
다음을 허용하는 장치 특수 파일을 생성할 수 있습니다.하드웨어에 대한 원시 액세스. 즉, 커널은 장치 특수 파일에 대한 권한을 조사하여 특정 사용자에게 구성이나 그와 유사한 항목에 대한 액세스가 아닌 하드웨어에 대한 원시 액세스가 허용되는지 여부를 결정합니다.
예를 들어 Debian에서는 광 드라이브와 관련된 장치가 root
0660 권한 비트, 사용자 및 그룹으로 생성 됩니다 cdrom
.root
또는그룹 내에서 "마운트된 파일 시스템 대신을 사용하여 이미지 생성 cdrom
" 과 같은 작업을 수행할 수 있습니다 dd
. 쓰기 가 /dev/dvd
가능한 하드 드라이브(예:/dev/sda
장치 특수 파일은 일반적으로 이 디렉터리에 생성되지만 Linux 시스템에는 이 옵션을 사용하여 설치되지 않은 모든 파일 시스템이 장치 노드를 포함할 수 있는 /dev
고유한 요소가 없습니다 . nodev
장치 노드를 실제 장치에 연결하는 유일한 요소는 유형(블록 또는 문자)과 주요 노드 및 보조 노드입니다.
따라서 일반 사용자가 장치 특수 파일을 생성할 수 있다면 단순히 장치 특수 파일(예: 홈 디렉터리에)을 생성하고 해당 파일을 코어에 사용함으로써 모든 커널 보안을 우회하고 모든 하드웨어에 직접 액세스할 수 있습니다. 하드 드라이브를 공격합니다.
따라서 장치 특수 파일은 root
.
답변3
일반, FIFO 및 소켓 파일 유형 외에도 mknod는 장치 파일을 생성할 수 있습니다. 이는 장치에 액세스하는 데 사용됩니다.
장치에 대한 액세스 권한을 부여하는 것은 권한 있는 작업으로 간주됩니다. 일반적으로 우리는 임의의 장치 노드를 생성하여 일반 사용자가 액세스할 수 있도록 만들고 싶지 않습니다. 그것은 나쁜 것입니다.
[참고: 장치 액세스는 일반적으로 기존 장치 노드에 대한 권한을 변경하여 부여됩니다. 표준 Linux에서는 /dev/
이는 에 의해 제어되므로 udev
추가 udev 규칙을 사용할 수 있습니다].
예
$ mount|grep -w /
/dev/mapper/vg_fossil-root on / type ext4 (rw,seclabel,data=ordered)
$ ls -l /dev/mapper/vg_fossil-root
lrwxrwxrwx. 1 root root 7 Jan 18 08:46 /dev/mapper/vg_fossil-root -> ../dm-0
$ ls -l /dev/dm-0
brw-rw----. 1 root disk 253, 0 Jan 18 08:46 /dev/dm-0
루트 사용자로서:
# mknod root-partition b 253 0
# chmod a+rw root-partition # make file available as if created as a normal user
이제 파일 시스템이 저장된 장치에 직접 액세스할 수 있습니다.
$ ls -l root-partition
brw-rw-rw-. 1 root root 253, 0 Jan 18 15:05 root-partition
원래 권한이 없었던 파일에서 데이터를 읽을 수 있습니다.
$ grep secret root-parition
Binary file root-partition matches
또는 다음 명령 앞에 있는 "echo"를 제거하면 파일 시스템이 더 이상 존재하지 않게 됩니다.
$ echo dd if=/dev/zero of=root-partition
청소하다
사용할 추가 장치 파일을 생성한 후 손상 없이 안전하게 삭제할 수 있습니다.
$ rm root-partition
물론 실수를 해서 잘못된 파일을 삭제했거나 모든 파일을 삭제한 경우는 제외됩니다. 이 명령은 실행 취소/삭제 취소 또는 확인 메시지를 제공하지 않습니다. 명령줄은 용서할 수 없습니다 :). 유일한 보호는 -r
또는 가 없으면 *
디렉터리를 삭제하지 않습니다.
답변4
"감옥"(예: 루트 파일 시스템의 장치)에 있는 장치 파일 에 mknod
액세스하는 데 사용할 수 있습니다.chroot