宋宝华: 用代码切身实践体会meltdown漏洞

本文作者宋宝华通过实际的代码演示,深入浅出地解析了著名的Meltdown漏洞。读者将跟随作者的步骤,了解该漏洞如何利用处理器的推测执行机制,突破了内存隔离,对系统的安全性造成严重威胁。通过这次实践,读者不仅能理解Meltdown的工作原理,还能增强对计算机系统安全性的认识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是我在Ubuntu 14.04上面进行的meltdown漏洞的亲测。meltdown漏洞,使得我们可以在用户空间读到内核空间的数据,做越权访问。

我感觉每天YY看技术文章,而不去亲自试验,总是无法切身体会,因此我们来把它实例化,直接写代码看效果!

本文暂时不涉及技术细节,只贴相关的代码。详细的原理,希望后面有机会再叙述。文章中涉及到的所有代码,我都放在了我的github上面:
https://github.com/21cnbao/meltdown-example.git

首先写一个内核模块,包含一个很简单的proc接口,里面有个内核全局变量variable=0x12345678,这个proc接口暴露这个全局变量。

我待会尝试用一个应用程序meltdown-baohua.c来把这个内核空间变量从用户空间偷出来。

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/init.h>

#include <linux/version.h>

#include <linux/proc_fs.h>

#include <linux/seq_file.h>

#include <asm/uaccess.h>


static unsigned int variable=0x12345678;

static struct proc_dir_entry  *test_entry;


static int test_proc_show(struct seq_file *seq, void *v)

{

unsigned int *ptr_var = seq->private;

seq_printf(seq, "%u\n", *ptr_var);

return 0;

}


static int test_proc_open(struct inode *inode, struct file *file)

{

return single_open(file, test_proc_show, PDE_DATA(inode));

}


static const struct file_operations test_proc_fops =

{

.owner = THIS_MODULE,

.open = test_proc_open,

.read = seq_read,

.llseek = seq_lseek,

.release = single_release,

};


static __init int test_proc_init(void)

{

printk("variable addr:%p\n", &variable);


test_entry = proc_create_data("stolen_data",0444, NULL, &test_proc_fops, &variable);

if (test_entry)

return 0;


return -ENOMEM;

}

module_init(test_proc_init);


static __exit void test_proc_cleanup(void)

{

remove_proc_entry("stolen_data", NULL);

}

module_exit(test_proc_cleanup);


MODULE_AUTHOR("Barry Song <baohua@kernel.org>");

MODULE_DESCRIPTION("proc exmaple");

MODULE_LICENSE("GPL v2");

这个模块对应的Makefile如下:

把它编译执行并加载:

#make

#sudo insmod proc.ko

然后dmesg看出来printk("variable addr:%p\n", &variable);这一行打印的variable地址是:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值