清空SWAP分区时遇到的问题

想要实现通过swap对swap out的程序进行攻击,就需要从swap分区搜索相应的二进制代码或数据。但是swap分区中只保存有换出的数据代码的内容,而没有它们与进程的对应的关系,所以很难找到它们之间的关系来进行攻击。所以我觉得要做一些准备工作,首先想到的是把swap分区清零,就是把不是用来管理的分区数据全都填充"0x00"。

网上提到的用swapoff -a和swapon -a来刷新swap分区的方法是不能奏效的,这两个操作只是把交换到swap分区的进程数据重新交换回内存,并清除了进程和swap分区数据的映射关系,而没有将swap分区的数据清零。这样做是无可厚非的,因为下次用到的时候不用关心之前是什么数据,直接去写就好了,而我们的实验由于特殊性,需要找到数据和进程的对应关系,swap分区上的残留数据会对我们的实验造成影响,所以需要将它清空。

我翻看swap分区的资料得知,在swap分区的第一页(每页4096字节)保存了swap分区信息,所以我们不可以修改这部分,把后面的内容清空就可以了

#cat /proc/swaps

可以看到我当前的swap分区是/dev/sda5

#sudo swapoff -a

把swap分区停掉,因为我们要修改其中的内容

#sudo dd if=/dev/zero of=/dev/sda5 bs=4096 seek=1

用dd对/dev/sda5做0填充,跳过前4096字节

#sudo swapon -a

再次启用swap分区时,出现了错误:

swapon: cannot find the device for UUID=...

是我们误操作改动了前一页的数据,还是除了前一页的分区信息外还有其他的分区信息?

从报错信息上来看,是找不到对应UUID的设备了,那么我们可以尝试重新制作swap分区,再修改fstab

#sudo mkswap -L SW-sda5 /dev/sda5

重新制作swap分区,并将分区卷标设置成SW-sda5

#sudo vim /etc/fstab

修改分区信息表,将swap分区那行记录修改为

/dev/sda5 swap swap defaults 0 0

保存退出,再次

#sudo swapon -a

没有报错

#free

看下内存使用信息


swap分区正常了

我们重新执行最开始的对swap分区的填零操作

#sudo swapoff -a

#sudo dd if=/dev/zero of=/dev/sda5 bs=4096 seek=1

#sudo swapon -a



你可能感兴趣的:(清空SWAP分区时遇到的问题)