보안 위협에 대한 또 다른 대책으로 MBR과 부트 체크섬을 계산한 후 이전 스크립트와 비교하는 작은 스크립트를 작성했습니다. 컴퓨터가 실행되는 동안에는 정상적으로 작동하지만 컴퓨터를 다시 시작하면 체크섬이 변경됩니다.
질문- 변화의 원인은 무엇이며, 이를 방지할 수 있는 방법은 무엇인가?
세부 사항:
openSUSE 13.2, noatime for /boot
set에서 부팅 파티션은 로그인하자마자 마운트 해제되는 별도의 파티션(루트 파일 시스템의 디렉터리가 아님)이며, 이는 체크섬이 계산되기 전의 첫 번째 단계입니다.
스크립트:
#!/bin/sh
sudo umount /boot
# MBR
sudo dd if=/dev/sda bs=512 status=noxfer count=1 | sha1sum | diff bootcheck_mbr.sha1 -
MBR_RES=$?
# boot partition
sudo dd if=/dev/sda1 bs=1M status=noxfer | sha1sum | diff bootcheck_boot.sha1 -
BOOT_RES=$?
if [[ $MBR_RES -ne 0 ]] || [[ $BOOT_RES -ne 0 ]]
then
kdialog --sorry "WARNING:\nBoot disk is changed." --title "BOOT CHECK" --geometry 0x0++300+400
else
kdialog --title "Boot check" --passivepopup "The disk is unchanged." 25 --geometry 0x0++300+400
fi
답변1
# tune2fs -l $(df -P /boot | awk 'NR==2 {print $1}') | grep Last
Last mounted on: /boot
Last mount time: Mon Mar 30 10:40:08 2015
Last write time: Mon Mar 30 10:40:08 2015
Last checked: Mon Mar 30 10:40:01 2015
파티션이 읽기-쓰기로 마운트될 때마다 마지막 마운트 시간이 업데이트됩니다(적어도 ext2/ext3/ext4 파일 시스템의 경우). 이런 일이 발생하지 않도록 하려면 /boot
부트로더나 커널을 업그레이드하지 않는 한 읽기 전용으로 마운트하세요.
MBR은 일반적으로 부트로더가 업그레이드되지 않는 한 업데이트되지 않습니다(종종 업데이트되지도 않음). MBR 변경의 일반적인 원인은 듀얼 부팅 시스템이 있고 마지막 부팅 시스템을 기록하여 다음번에 기본값으로 설정하도록 부트 로더를 구성했거나 다른 시스템으로 재부팅하라는 지침을 제공한 경우입니다(예: grub-set-default
).
이러한 검사를 통해 얻을 수 있는 보안은 최소화됩니다. 커널을 수정하는 유능한 공격자는 커널이 사용자가 기대하는 것을 보고하도록 준비할 것이며 /boot
, 이는 외부에서 시스템을 관찰해야만 알 수 있습니다.