作为针对安全威胁的另一种对策,我编写了一个小脚本来计算 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
,你只能通过从外部查看系统才能知道。