Linux新syscall:mseal,传统shellcode的克星

举报
老码小张 发表于 2024/11/05 18:40:04 2024/11/05
【摘要】 你有没有听过“内存密封”(memory sealing)这个概念?最近,Linux引入了一个名叫mseal的新系统调用,这个功能就像给内存加了一把“安全锁”,从根源上增加了系统的防护能力。它的作用是什么呢?就是“锁死”特定内存区域的权限变化,不让攻击者有可趁之机。今天,我们就来聊聊这个新功能到底有多厉害。1. 从“锁死内存”说起:mseal能干啥?先简单解释一下,mseal的主要用途是“密封...

你有没有听过“内存密封”(memory sealing)这个概念?最近,Linux引入了一个名叫mseal的新系统调用,这个功能就像给内存加了一把“安全锁”,从根源上增加了系统的防护能力。它的作用是什么呢?就是“锁死”特定内存区域的权限变化,不让攻击者有可趁之机。今天,我们就来聊聊这个新功能到底有多厉害。

图片

1. 从“锁死内存”说起:mseal能干啥?

先简单解释一下,mseal的主要用途是“密封”虚拟内存区域(VMA),一旦密封了,这个区域的权限就不能随便改了。举个例子,就像你家的大门一旦上了保险锁,别人就不能擅自进出。这对安全来说非常关键,特别是在防御利用内存漏洞的攻击上。

目前mseal最主要的两个用途是:

  • • 防止VMA权限被篡改:比如有的攻击手法会利用内存漏洞,把不允许执行的内存变成可执行的,这样就可以运行恶意代码。而mseal可以防止这些区域被设置为可执行。

  • • 阻止“打洞”式的内存利用:攻击者可能通过取消映射或重新映射来更改内存内容,mseal能封堵这种方法,让内存中的数据无法被攻击者随意篡改。

2. 防御老派的内存攻击:传统shellcode的克星

回到过去,老派的黑客喜欢使用“shellcode”攻击,通过向目标内存喷射恶意代码并改变其执行权限。现在,虽然有了代码重用攻击(ROP)等新技巧,但shellcode仍然是黑客的“回忆杀”。

图片

在mseal之前,攻击者可以利用mprotect等系统调用来解除非执行(NX)保护,而有了mseal,这些权限的改变会被直接拒绝,从而阻止攻击发生。

图片

打个比方,就像是给老房子加了一层防火墙,再怎么乱扔火柴也点不着了。

3. mseal对数据篡改的强力防护

除了防止代码执行,mseal还能对付数据篡改类的攻击。比如,在浏览器的JIT编译(即时编译)过程中,某些内存区域会在读写和执行权限之间来回切换,攻击者可以利用这个特点来篡改数据。然而,当你使用mseal将某些关键内存区域密封起来后,攻击者就再也无法利用这些技巧了。这种方式对数据保护尤其有效。

4. 实际应用场景:如何用mseal提高系统安全性

目前,mseal已经被集成到glibc 2.41+,开发者可以手动在代码中添加密封逻辑。最简单的做法是在易受攻击的内存区域添加一个mseal调用,比如:

#define SIMPLE_HARDEN_NX_SINGLE_PAGE(frame) \
  do { \
    void *frame_offset = (void *)((int64_t) &frame & ~(getpagesize() - 1)); \
    if (mseal(frame_offset, getpagesize()) == -1) { \
      handle_error("mseal"); \
    } \
  } while(0)

int main() {
    unsigned char buffer[1024] = {0};
    SIMPLE_HARDEN_NX_SINGLE_PAGE(buffer);
    return 0;
}

这个代码段可以有效防止未授权的数据篡改,并减少潜在攻击面的暴露。

5. mseal还有改进空间

当然,目前mseal还不完美,它对堆栈等动态增长的内存区域支持有限。未来我们可能会看到更智能的自动化内存密封工具,让开发者不必手动进行繁琐的安全配置。

一点思考:内存防护的新思路

随着mseal的普及,我们将看到更多基于该技术的安全防护方案。然而,再强大的技术也不能完全替代开发者的安全意识。开发者们需要保持警觉,结合多种防御措施,才能打造更安全的系统。未来,也许mseal会成为主流的防护手段之一,就像现在的ASLR和NX一样。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。