想要实现通过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=...
是我们误操作改动了前一页的数据,