gpt4 book ai didi

linux - Linux内核中的sscanf函数是否容易受到缓冲区溢出攻击?

转载 作者:太空狗 更新时间:2023-10-29 11:15:11 26 4
gpt4 key购买 nike

据我了解,当攻击溢出堆栈上的内存缓冲区时,就会发生典型的缓冲区溢出攻击,从而允许攻击者注入(inject)恶意代码并重写堆栈上的返回地址以指向该代码。

当使用函数(例如 sscanf)盲目地将数据从一个区域复制到另一个区域时,这是一个常见的问题,检查一个区域的终止字节:

char str[8];                               /* holds up to 8 bytes of data */
char *buf = "lots and lots of foobars"; /* way more than 8 bytes of data */
sscanf(buf, "%s", str); /* buffer overflow occurs here! */

我注意到 Linux 内核中的一些 sysfs_ops store 函数是使用 Linux 内核版本的 sscanf 函数实现的:

static char str[8];    /* global string */
static ssize_t my_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t size)
{
sscanf(buf, "%s", str); /* buf holds more than 8 bytes! */
return size;
}

假设这个store回调函数被设置为一个可写的sysfs属性。恶意用户是否能够通过 write 调用故意溢出缓冲区?

通常,我希望防范缓冲区溢出攻击——例如限制读取的字节数——但我在很多函数中都没有看到(例如在 drivers/scsi/scsi_sysfs.c 中)。

sscanf 的 Linux 内核版本的实现是否可以防止缓冲区溢出攻击?还是有其他原因——考虑到 Linux 内核的工作原理,缓冲区溢出攻击可能是不可能的?

最佳答案

Linux sscanf()容易受到缓冲区溢出的影响;对来源的检查表明了这一点。您可以使用 width specifiers限制 %s 允许写入的数量。在某些时候,您的 str 也必须在其上运行 copy_from_user()用户空间可能会将一些垃圾指针传递给内核。

在您引用的 Linux 版本中,scsi_sysfs.c确实有缓冲区溢出。最新版本没有。 committed fix应该可以解决您看到的问题。

关于linux - Linux内核中的sscanf函数是否容易受到缓冲区溢出攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16324626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com