LWN:让GNU C库的可调参数更安全!

glibc 知:手册38:可调参数 Tunables可调参数GNU C 中的一项功能,它允许应用程序作者和分发维护者改运行时行为以匹配他们的工作负载。这些被实现为一组可以以不同方式修改的开关。当前执行此操作的默认方法是通过 GLIBC_TUNABLES 环境变量,将其设置为一串以冒号分隔的名称=值对。例如,以下示例启用 malloc 检查并将 malloc 修剪阈值设置为 128 字节: 可调参数不是 GNU C 稳定 ABI 的... 阅读详情

关注了就能看到更多这么棒的文章哦~

Toward safer GNU C Library tunable handling

By Jonathan Corbet
October 19, 2023
ChatGPT translation
https://lwn.net/Articles/947736/

在讨论GNU C库(glibc)提供的接口时,自然会考虑到POSIX规范所对应的这些编程接口(programming interface),以及多年来添加的许多扩展功能。但是,glibc还提供了一个“可调整参数(tunables)”接口,用于控制库的操作方式;与由C API管理不同,可调参数是通过 GLIBC_TUNABLES 环境变量设置的。 Glibc的可调参数曾经是涉及到setuid二进制文件的一些安全问题的一部分,最近10月初披露的“Looney Tunables”漏洞中就有包含。 glibc开发人员现在正在考虑对可调参数处理进行重大更改,以期望在将来避免此类问题。

可调参数机制允许在运行时调整库的各个方面的行为。提供的许多旋钮都跟 malloc() 背后隐藏的内存管理算法有关,但也有其他参数。可以通过运行以下命令来查看当前系统上可用的可调参数列表:

/lib64/ld-linux-x86-64.so.2 --list-tunables

glibc并没有为设置或查询可调参数值提供公共函数;相反,用户可以在运行程序之前通过设置 GLIBC_TUNABLES 来设置它们。此变量在启动例程的早期进行处理,远在调用程序的 main() 函数之前。 因此,程序对应用于其哪些可调参数几乎没有控制;在某种意义上来说,glibc的可调参数允许在程序毫不知情的情况下调整库的行为。

当关注的程序设置了setuid或setgid权限时,具有这种调整能力就引发了一些明显警告。这些程序构成了系统内的安全边界,因此允许位于边界的非特权用户来调整特权环境下的行为将充满风险。 Glibc长期以来一直认为在程序设置为setuid或setgid时,某些可调参数应不再可以进行更改;为了强制执行这一限制,glibc中的每个可调参数都带有“安全级别”标记。 如果一个可调参数标记为 SXID_ERASE ,则在特权程序中将被忽略并从 GLIBC_TUNABLES 完全移除,也就不会出现在由该程序创建的任何子进程中。 另一种标记 SXID_IGNORE ,会导致忽略可调参数但保留在原地。如果没有设置这两个标记的话,可调参数就会在特权程序中仍然生效。

即使有了这一机制,可调参数和特权程序的交集仍然被证明是安全性漏洞的可靠来源。 因此,glibc开发人员正在寻找完全消除此交集的方法。 Siddhesh Poyarekar在最新的漏洞披露后不久,提交了一组补丁,将所有可调参数设置为 SXID_ERASE ,从根本上完全禁用特权程序的可调参数机制。 随后进行了一些讨论,一周后,Adhemerval Zanella提出了一组更深层次的更改,旨在消除此类问题。

Zanella系列的第一步是消除特殊的 /etc/suid-debug 文件的支持。 如果该文件存在(可以为空),那么 glibc.malloc.check 可调参数可以在特权程序中打开 malloc() 检查,哪怕在这些特权程序中通常禁用了此功能来避免生成标准错误流的输出从而被攻击者滥用。尽管此调试功能可能很有用,但自2.34版本以来, /etc/suid-debug 检查已经不再能正常工作,因为内存分配被推到了一个单独的库中;因此不再修复此功能,而是彻底删除了该支持。

下一步是在特权程序中忽略所有可调参数,从根本上将它们全部设置为 SXID_IGNORE 。 后续的补丁将 GLIBC_TUNABLES 添加到不传递给子进程的环境变量列表中,从本质上改变了该设置,通过不同的方式将其设置为 SXID_ERASE 。 还有另一组环境变量可以更改许多 malloc() 可调参数; 例如, MALLOC_MMAP_THRESHOLD 可以用于更改 glibc.malloc.mmap_threshold 。 所有这些变量也被添加到“不安全的变量”列表中。

这消除了特权程序中可调参数的处理,但该补丁集还进行了另一组更改。 目前的glibc版本对于无效的 GLIBC_TUNABLES 设置相对宽容; 此系列中的一些补丁结束了这种宽容处理,当发现格式错误的可调参数设置时,会中止可调参数解析并发出警告。 最后,还有一个补丁会导致 GLIBC_TUNABLES 在原地解析,而不是复制到一个单独的字符串中去。 这个改动旨在避免由于内存分配失败可能会出现的问题;在glibc的内存管理初始化之前就会进行这些处理,因此在这个阶段的分配会变得更加棘手。

最终的结果应该是未来glibc版本中可调参数相关的错误和漏洞明显减少,当然前提是这组patch被接受。 这种更改可能会对那些希望为特权程序设置这些可调参数的用户产生额外开销,如果存在这样的用户的话。 但是glibc文档明确指出,可调参数不被视为ABI的一部分,可以随时更改。 在这种情况下,大多数用户可能会得出结论,这些改动是迫在眉睫的,如果可以减少未来的漏洞,那么付出的代价是值得的。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

format,png

一次glibc 提权漏洞的分析与调试 这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。具体来说,这段代码的作用是将原始的 libc 的加载路径修改为攻击者指定的路径,然后使用这个修改后的路径来加载恶意的。攻击者可以通过修改** 阅读详情

相关推荐

glibc编译安装

glibc编译安装文档

aolitianya的博客 1753

glibc TCache机制

TCache机制 相关的宏 #if USE_TCACHE /* We want 64 entries. This is an arbitrary limit, which tunables can reduce. */ # define TCACHE_MAX_BINS 64 # define MAX_TCACHE_SIZE tidx2usize (TCACHE_MAX_BINS-1) /* Only used to pre-fill the tunables. */ # define tidx

huzai9527的博客 1513

glibc 知:内容

文章目录前言内容Error Reporting 错误报告Memory 内存Character Handling 字符处理String and Array Utilities 字符串和数组Character Set Handling 字符集处理Locales 本地化Searching and Sorting 搜索和排序Pattern Matching 模式匹配I/O Overview 概述I/O on StreamsLow-Level I/OFile System Interface 文件系统接口Pipes

canpool 1968

LWN:在GNU C实现内存封印!

关注了就能看到多这么棒的文章哦~Memory sealing for the GNU C LibraryBy Jonathan CorbetJune 12, 2024Gemini-1.5-flash translationhttps://lwn.net/Articles/978010/mseal()系统调用允许进程阻止其地址空间未来进行任何改(因此被称为“密封 sealing”);它借鉴了...

Linux News搬运工 1732

LWNGNU工具链项目的安全规则!

关注了就能看到多这么棒的文章哦~Security policies for GNU toolchain projectsBy Jonathan CorbetSeptember 28, 2023CauldronChatGPT translationhttps://lwn.net/Articles/945536/创建CVE流程,是为了能应对真实存在的问题的,但越来越清楚,CVE编号本身也正在制造问题...

Linux News搬运工 681

LWN: GNU Octave发布新版本!

关注了就能看到多这么棒的文章哦~A new release for GNU OctaveDecember 15, 2020This article was contributed by...

Linux News搬运工 726

LWNGNU C 2.39 版本!

关注了就能看到多这么棒的文章哦~GNU C Library version 2.39By Daroc AldenFebruary 6, 2024Gemini translationhttps://lwn.net/Articles/960309/GNU C (glibc)发布了 2.39 版,1 月 31 日,其中包含了些新特性。值得一提的重要内容包括用于孵化(spawning)子进程的新函...

Linux News搬运工 718

LWN:用Rust实现GNU Coreutils!

关注了就能看到多这么棒的文章哦~Rewriting the GNU Coreutils in RustJune 8, 2021This article was contributed b...

Linux News搬运工 884

LWN: GNU项目谁在管理?

Rethinking the governance of the GNU ProjectByJonathan CorbetOctober 24, 2019本文译自:ht...

Linux News搬运工 399

LWN:对2024所做预测的回顾!

关注了就能看到多这么棒的文章哦~A 2024 retrospectiveBy Jonathan CorbetDecember 25, 2024Gemini-1.5-flash translationhttps://lwn.net/Articles/1002368/通常人们说的疯狂(insanity),就是重复同样的行为却期待不同的结果。尽管如此,LWN 每年年初都会进行一组预测,然后在年末不得不...

Linux News搬运工 954

c语言编程基础------0.4GNU C 函数glibc

这篇文章主要来自维基百科 GNU C函式庫 (重定向自GlibcGNU C函式庫 初始版本 1987年[1] 穩定版本 2.20[2](2014年9月7日,4個月前)[±] 開發狀態 活跃 操作系统 跨平台 类型 运行时 许可协议 LGPL 網站 http://w

Allen.Yao的专栏 2727

LWNGNU Tools Cauldron 上的内核开发者们!

关注了就能看到多这么棒的文章哦~Kernel developers at CauldronBy Jonathan CorbetSeptember 18, 2024CauldronGemini-1.5-flash translationhttps://lwn.net/Articles/990379/Linux 系统由大量相互依赖的组件组成,所有组件都必须良好地相互支持。因此,令人惊讶的是,似乎这些...

Linux News搬运工 1045

LWN:在kernel中安全地使用可变长度数组!

关注了就能看到多这么棒的文章哦~Safer flexible arrays for the kernelBy Jake EdgeSeptember 22, 2022LSS EUDeepL assisted translationhttps://lwn.net/Articles/908817/在 2022 年欧洲 Linux 安全峰会(LSS EU)上,Gustavo A. R. Silva 报告...

Linux News搬运工 962

LWN:让Autoconf重焕生机!

关注了就能看到多这么棒的文章哦~Rejuvenating AutoconfOctober 23, 2020This article was contributed by Sumana ...

Linux News搬运工 373

LWN: FreeBSD已经26周年啦!

点击上方蓝色字关注我们~FreeBSD turns 26June 21, 2019This article was contributed bySean KernerF...

Linux News搬运工 542

LWN:AWK近况如何?

关注了就能看到多这么棒的文章哦~The state of the AWKMay 19, 2020This article was contributed by Ben Hoyt原文来自...

Linux News搬运工 384

LWN:使用可重启序列来改进C的大规模应用场景下的性能!

关注了就能看到多这么棒的文章哦~Improving C-library scalability with restartable sequencesBy Jonathan CorbetOctober 17, 2023CauldronChatGPT translationhttps://lwn.net/Articles/946870/自 2018 年以来,Linux 内核就支持可重启序列(有时称为...

Linux News搬运工 1137

LWN:Rust重写Linux最基本的软件包!

关注了就能看到多这么棒的文章哦~Rewriting essential Linux packages in RustBy Joe BrockmeierFebruary 12, 2025FOSDEMGemini-1.5-flash translationhttps://lwn.net/Articles/1007907/大多数 Linux 系统都依赖于一套核心实用程序,这些程序是GNU Proje...

Linux News搬运工 1150
上一篇: LWN:2023 Image-Based Linux 峰会!
下一篇: LWN:mseal() 以及后续方案!
LinuxNews搬运工
博客等级 码龄7年 419粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值