0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

设计LSM钩子提升Linux漏洞安全性

Linux阅码场 来源:Linux阅码场 作者:Linux阅码场 2022-07-11 10:55 次阅读

Tracee是一个用于Linux的运行时安全性和取证的开源项目,用于解决常见的Linux安全性问题。通过利用Linux扩展的Berkeley Packet Filter (eBPF)的技术优势,在内核运行时跟踪系统和应用程序,以便获取相应的数据信息。Tracee分析收集的事件可以用来检测可疑的行为模式,在本文中,我将分享从使用eBPF和Linux安全模块(LSM)钩子的角度,来分析在解决Linux漏洞(如TOCTOU类型)中学到的经验教训。

设计LSM钩子来提升安全性

在正在运行的应用程序中,通常是通过系统调用与操作系统进行交互。出于这个原因,安全从业者会使用系统调用来分析运行中的应用程序的行为。重点在于选择收集系统调用的方法,因为获取到的参数值和操作系统实际使用的参数值之间可能存在差距。

eBPF允许在无需更改内核源代码或加载内核模的情况下,在Linux内核中运行沙盒程序。通过使用kprobes附加到Linux Security Module (LSM)挂钩上,我们可以收集内核实际使用的参数值。下面是具体使用LSM钩子需要克服的一些问题:

准确理解相对路径

在Linux中,当从用户程序中读取信息时,path参数可以包含一个相对路径。

例如,当调用一个程序时,Tracee可以使用以下参数获取一个系统调用:

·open(“。./。./directory/file”, O_RDONLY)

·open(“。/test/。./。./directory/file”, O_RDONLY)

这些系统调用中的路径可能指向相同的位置,但问题来了,根据给定的参数,很难精确定位绝对且始终唯一的规范路径。在构建安全策略时,规范路径的重要性变得更加明显,因为相对路径的意图和效果可能太过模糊。

找出链接文件

例如,用户程序给出的某个文件的参数值可能会包含指向其他文件的链接。在Linux中,我们可以创建到一个文件的符号链接,其方式是一个文件充当另一个文件或目录的引用。操作系统使用符号链接到达被链接的文件,并执行给定的命令。请看下面的例子,创建了一个名为python的文件,并将其链接到一个恶意的二进制文件my_malware:

1b2be154-00c1-11ed-ba43-dac502259ad0.png

当运行python时,我们可以看到Tracee跟踪了两个事件。其一是带有参数值的系统调用 。/python。但实际上,python是象征性地链接到~/bin/my_malware,第二个就是被Tracee捕获的security_bprm_check事件返回了实际执行的文件的路径名。

1b406f3e-00c1-11ed-ba43-dac502259ad0.png

TOCTOU分析

当试图获取用户程序的参数值时,如果只分析系统调用参数,结果可能会受到条件竞争的影响而错过关键细节。这是因为在获取信息后,用户程序可以基于另一个并发线程,来进行更改系统调用参数。

例如,当调用一个程序时,Tracee可以使用以下参数获取一个系统调用:

execve(“/bin/ls”, NULL, 0)

1b54634a-00c1-11ed-ba43-dac502259ad0.png

在进程中某一线程和内核调用执行Syscall之间会存在同一时间点。在这个时间点开始阶段,通过使用指向进程地址空间中内存位置的指针,pathname参数被传递给内核。在这个期间,进程的另一个线程可以快速更改路径名,最后内核来更新路径名。

继续我们的例子,另一个线程可以将第一个参数从/bin/ls更改为/bin/malicious,后者将由内核执行,而前者将由Tracee记录。这个场景被称为TOCTOU竞态。攻击者可以利用它来影响检查和真正使用之间的记录值,这样会导致收集到的数据不准确,并误导安全研究人员或自动检测工具。

基于上面的原因,决定在Tracee中连同Syscall数据一起使用LSM钩子来进行追踪。像security_file_open这样的事件,包含内核实际使用的路径名,并与上报的常规Syscall事件交叉引用。

简化分析过程

我们都知道在Linux中,Everything is a file这句著名的口号(https://en.wikipedia.org/wiki/Everything_is_a_file),是的,所有东西都是文件,需要使用文件描述符才能与之交互。当打开一个文件时(例如使用open),你会收到一个文件描述符。使用这些系统调用openat, unlinkat, execveat, accept, connect, bind, listen等等来与打开的文件进行交互。由于这个原因,如果我们想要分析在一个文件上执行的操作,那就必须跟踪其打开的文件描述符,而Socket允许在不同的程序之间传递打开的文件描述符,这样就会使分析更加困难。

对于使用Tracee的LSM钩子事件,跟踪文件描述符变得无关重要,因为LSM事件已经包含了相关的数据,比如完整的路径名。这使得在分析问题时可以避免上述的影响,更加简化分析流程。

结论

Tracee是一个易于使用的Linux运行时安全和取证工具,采用了目前最为火热功能更为强大的eBPF技术,可以让我们更好地理解程序的运行时行为,并打破对类似安全软件构成困难和挑战的桎梏,为安全分析人员提供进一步深入分析的方案。

原文标题:利用LSM钩子打破系统调用跟踪桎梏

文章出处:【微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10988

    浏览量

    206725
  • 源代码
    +关注

    关注

    94

    文章

    2926

    浏览量

    66057
  • 应用程序
    +关注

    关注

    37

    文章

    3133

    浏览量

    56372

原文标题:利用LSM钩子打破系统调用跟踪桎梏

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    KVM矩阵的智能化管理:提升运维效率与安全性

    随着信息技术的飞速发展,KVM矩阵作为数据中心运维的重要工具,正逐渐融入智能化管理的理念。智能化管理不仅提升了KVM矩阵的运维效率,更在保障系统安全性方面发挥了重要作用。本文将探讨KVM矩阵的智能化
    的头像 发表于 02-18 14:51 119次阅读

    如何消除内存安全漏洞

    “MSL 可以消除内存安全漏洞。因此,过渡到 MSL 可能会大大降低投资于旨在减少这些漏洞或将其影响降至最低的活动的必要性。
    发表于 12-12 10:29 189次阅读
    如何消除内存<b class='flag-5'>安全漏洞</b>

    求助,为什么说电气隔离安全性比较高?

    为什么说电气隔离安全性比较高?
    发表于 11-02 08:22

    MCU是怎么为物联网端点设备提高安全性的?

    MCU 是怎么为物联网端点设备提高安全性的?
    发表于 10-17 08:53

    简仪科技助力提升电池安全性

    当今社会,电池作为各种便携式电子设备的重要能源供应源,其安全性能一直备受关注。
    发表于 10-11 16:37 148次阅读
    简仪科技助力<b class='flag-5'>提升</b>电池<b class='flag-5'>安全性</b>能

    系统逻辑漏洞挖掘实践

    当谈及安全测试时,逻辑漏洞挖掘一直是一个备受关注的话题,它与传统的安全漏洞(如SQL注入、XSS、CSRF)不同,无法通过WAF、杀软等安全系统的简单扫描来检测和解决。这类
    的头像 发表于 09-20 17:14 339次阅读
    系统逻辑<b class='flag-5'>漏洞</b>挖掘实践

    STM32H5 MCU系列提升性能与信息安全性

    强大的Arm® Cortex®-M33 MCU运行频率高达250 MHz的Arm®Cortex®-M33内核32位MCU满足绝大多数工业应用的需求安全性可扩展,满足各类需求从基本的安全构建模块到经过
    发表于 09-06 06:29

    新唐工业计算机/服务器安全智联升级方案

    关于设备联网,您最在意的是什么? 安全性 系统整合 投资回报 公布答案: 以上皆是。 企业采用物联网最在意安全性、系统整合与投资回报。 IoT Business News引述贝恩顾问公司
    发表于 08-25 08:07

    用于缓解高速缓存推测漏洞的固件接口

    称为变体4,是某些ARM CPU设计中的漏洞,可能允许对内存位置的推测读取在最近一次写入该内存位置之前读取数据值。 推测读取的数据可能是攻击者控制的,并被转发到以后的推测访问,这
    发表于 08-25 07:36

    MCU应用安全性

    MCU应用安全性
    的头像 发表于 08-10 11:04 405次阅读
    MCU应用<b class='flag-5'>安全性</b>

    适用于Android操作系统的MTE用户指南

    Arm引入了内存标记扩展(MTE)作为Armv8.5体系结构的一部分。MTE是Arm架构的显著增强。它提高了连接设备的安全性通过检测和减轻与内存相关的漏洞。 本指南介绍MTE。它向开发人员展示了如何使用MTE来提高健壮和他们软
    发表于 08-08 06:45

    空闲任务钩子函数详解

    空闲任务钩子函数详解 1、钩子函数 FreeRTOS中有多个钩子函数,钩子函数类似回调函数,当某个功能(函数)执行的时候就会调用钩子函数,至
    的头像 发表于 07-30 10:57 610次阅读
    空闲任务<b class='flag-5'>钩子</b>函数详解

    STM32助力新产品设计提升安全性

    电子发烧友网站提供《STM32助力新产品设计提升安全性.pdf》资料免费下载
    发表于 07-29 11:44 0次下载
    STM32助力新产品设计<b class='flag-5'>提升</b><b class='flag-5'>安全性</b>

    最常见的网络安全12种漏洞扫描类型

    数据库扫描技术主要用于评估数据库系统的安全性,该类型会全面查找数据库设置、访问控制和存储数据的漏洞,比如不安全的权限、漏洞注入问题或不安全
    发表于 07-12 12:41 1000次阅读
    最常见的网络<b class='flag-5'>安全</b>12种<b class='flag-5'>漏洞</b>扫描类型

    RISC-V如何保证高权限模式程序及外设的安全性

    RISC-V有机器模式、监管模式和用户模块,但无论在哪个模式下当TRAP发生时都会转到机器模式,是不是也就意味着在用户模式下进入中断服务程序也会拥有机器模式的权限,那我们如何保证高权限模式程序及外设的安全性
    发表于 05-26 08:11