LWN:非特权容器中的系统调用拦截机制!

拦截系统调用 今天在ubuntu中玩了下“拦截系统调用”,记录下自己对整个实现的理解。 原理 在linux kernel中,系统调用都放在一个叫做“sys_call_table”的分配表里面,在进入一个系统调用的最后一步,会调用与eax中包含的系统调用号对应的特定服务例程: call *sys_call_table(,%eax,4) 因为分派表中的每个表项占4个字节,因此首先把系统调用号乘以 阅读详情

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

System call interception for unprivileged containers

By Jake Edge
June 29, 2022
LSSNA
DeepL assisted translation
https://lwn.net/Articles/899281/

在德克萨斯州奥斯汀举行的 2022 年北美 Linux 安全峰会(LSSNA)的第一天,Stéphane Graber 和 Christian Brauner 发表了关于使用系统调用拦截来实现安全容器(container security)的演讲。这是为了让没有特权的容器,即那些在 host 上没有提升过权限的容器,如果需要执行一些需要特权的任务的话,也仍然能够完成。目前已经做了相当多的工作来实现可行性,但仍有更多工作需要继续完成。

Graber 首先说,他在为 Canonical 工作,负责 LXD container manager 项目,而 Brauner 为微软工作,负责 Linux 安全的各个领域。Graber 说,现在有两种类型的容器,带有特权的和非特权的,"一种是无法接受的,另一种可以"。他指出,特权容器就是 Docker 容器、Kubernetes 等等, "很不幸的是大家都在使用的东西"。

Unpriviledged containers

LXD 默认使用非特权容器(unprivileged container);用户命名空间就是这些容器中 "主要的安全屏障了"。特权容器一直在进行一个持续的打地鼠式的工作方式,也就是使用 Linux 安全模块(LSM)、seccomp()过滤器以及其他一些机制来逐个关闭那些导致容器内的进程在 host 上获得权限的漏洞。他以及其他一些开发者希望能实现一个人人都使用无特权容器的世界;"有特权的容器不应该存在",他说。

ffbcf762f58966524fe1ba4379fe5a95.png

[Stéphane Graber]

但是有很多东西在非特权容器中是无法正常工作的。因为工作容器实际上是作为 host 系统上的很普通的用户在运行;"我们不会允许我们系统上的随便一个用户能做很多越界的事情"。使用其他类型的命名空间和添加新的命名空间就可以让非特权容器绕过其中的一些限制,但这种做法是有限制的,不确定能走多远。人们也并不喜欢在内核中增加更多的命名空间类型。

所以 LXD 项目开始研究 seccomp()过滤器,尤其是想看看用户空间的系统调用拦截是否可以利用。它可以提供一种方法,来允许容器做那些需要特殊权限的事情,但以一种受控的方式进行,由容器管理器(container manager)来管束。

Brauner 说,seccomp()在系统调用的特定代码被调用之前就已经在系统调用入口路径上了。在一些系统调用中,即使容器没有必需的权限,也应该能够成功地进行调用。例如,mknod()应该被允许用于某些类型的设备节点,如/dev/zero、/dev/null、/dev/console 等等。这些是 "没有什么大问题的设备节点",但是内核的权限模型要么允许创建任意的设备节点,要么就任何一个都不可以创建。

例如,没有特权的进程(或容器)不应该能够创建/dev/kmem 或一些随便什么 block 设备,因为这可能导致主机被攻破。但是,有几个简单的设备节点是容器中所需要的,它们目前是由 host 来 bind-mount 过来的。并没有什么理由说不可以直接在容器中创建。

Brauner 说,我们可以设想在内核中设置某种允许列表(allowlist),指定哪些设备节点是不需要权限来创建的。这种做法 "有点 hack",所以他尝试了其他解决方案。在这一过程中,他发现已经有一个功能比较有限制的 allowlist,那就是 Overlay 文件系统中使用的 whiteout 机制,用来标记在上层被删除的文件的 "留白 ",这实际上是具有特殊设备号(0/0)的字符设备节点。这些节点不需要额外的权限就可以被创建。他说,这削弱了那些反对在内核中为 mknod() 设置允许列表的论点,但这一方案并没有被采纳。

69cacac851b8808f8805fb9cfd49a9cd.png

[Christian Brauner]

还有一些尝试是允许无特权的进程来创建设备节点,但不可以 open 这些节点。Brauner 说,这几乎破坏了所有的容器运行机制。有一个根深蒂固的假设是,如果一个进程可以创建一个设备节点,它就可以打开它。所以事实证明,允许创建无法打开的设备节点 "并不是一个好主意"。

但所有这些都集中在了一个唯一的系统调用上,事实上有必要支持系统调用的其他 "safe" 使用的情况。因此,系统调用拦截的想法在 2017 年的 Linux Plumbers 大会(LPC)上就诞生了,Brauner 认为。一个能够检查系统调用参数的机制就可以做一些工作了,例如拒绝对 block 设备和不在批准列表中的字符设备进行 mknod()调用。与其在内核中制定一些关于允许或拒绝的静态规则,不如将决定权下放给用户空间进程。

他说,因此 seccomp() 就被进行了扩展来支持这种用法。其中增加了一种新的 filter,以便在进行系统调用时就收到用户空间的通知;然后容器管理器进程可以取得一个文件描述符,它可以轮询系统调用 event。当容器管理器收到系统调用的通知时,可以使用 ioctl()命令来查询调用的参数,这些参数可以用来做决定。然后会把决定通过写入文件描述符的方式来返回给内核。

seccomp() filter 只能告诉内核继续调用,还是让调用失败并返回一个特定的错误代码给调用者,或者直接返回成功。如果容器管理器认为一个没有特权的容器应该可以成功进行系统调用,那么它不能直接通知内核来继续执行该系统调用,因为这个调用的发起者其实并没有相应的权限。因此,容器管理器必须执行该动作来模拟系统调用的发生,就好像该任务拥有相应的权限一样。在它完成这些工作并将结果提供给容器之后,它就可以告诉内核来直接返回成功。

他问与会者,是否能看到这个方案中有没有什么安全问题;有人很快提到了检查时间到使用时间的问题(TOCTTOU,time-of-check-to-time-of-use)的问题。Brauner 说,mknod()是一个 "相当无聊的系统调用,因为它只有整数参数"。其他的系统调用可能带有指针参数,也许会欺骗容器管理器在判定其安全之后就修改了这个地址上的参数。seccomp()过滤器是用 classic BPF 编写的,而不是扩展 BPF(eBPF),这意味着它们不能对指针进行解析和检查。因此,为了检查一个以指针引用方式传递的参数,管理器需要直接从进程的内存中读取数据(使用该地址作为/proc/PID/mem 的 offset)。这种做法 "可行",但它受到 TOCTTOU 的竞态冲突问题的影响。

在 seccomp()通知机制被加入之后,人们立即开始思考如何创建一个安全框架(security framework),例如,查看 open()系统调用的路径名参数来决定是否允许或拒绝访问某一个特定的文件。然后,如果文件名没有问题,它可以告诉内核继续进行系统调用。被过滤的进程可能已经拥有打开文件所需的权限,但如果过滤进程决定它不应该访问该文件的话就可能会被拒绝。不过,在检查完成后,该进程可以简单地修改这个参数,而内核也会很高兴地直接打开该文件。

这就限制了能够从 filter 来继续进行系统调用这个方案的用处。只有在最终的安全边界(也就是内核本身)无论如何都会拒绝这个动作的情况下,才能做到这一点,就像来自非特权容器的 mknod() 的处理那样。这意味着 seccomp() 通知机制不能用于给特权容器实现安全策略的场景。为了警告人们不要这样做,Brauner 说,他们在 seccomp.h 中加了注释来描述这些问题。

一般来说,seccomp()系统调用拦截需要在 host 上有一个受信任的、有特权的进程来监督这个调用。例如,在嵌套运行非特权容器的情况下,让外部容器的容器管理器监督来自内部容器的调用是没有什么用的,他说。在规划这一安全设施的用途时需要记住这一点。

Target system calls

Graber 在这时接手描述了他们一直在努力拦截的系统调用,这与他们在洛杉矶 LPC 开始时的 list 完全不同。这并不奇怪,因为即使在那个时候,他们也早就知道 list 上的一些东西很难或不可能处理好。目前的列表是 mknod(),如前所述,setxattr(),bpf(),sched_setscheduler(),mount(),和 sysinfo()。这些都是为 LXD 实现的。其他项目一直在使用 LXD 所做的工作,并且可能正在努力拦截其他系统调用。

拦截 mknod()/mknodat() 允许 LXD 在非特权容器中运行 debootstrap 等工具。这意味着可以在这些容器中构建发行版镜像了。这些调用需要被拦截的另一个原因是允许容器为 overlayfs 创建 whiteouts。例如,这允许 Docker 将其 layer 解压到一个无特权的容器中。Graber 说,他认为在 LXD 的限制下拦截 mknod() 是 "相对安全"的。他没有发现任何问题,但 LXD 容器中默认不启用该功能。不过项目组认为大多数容器都可以启用该功能。

setxattr()在 overlayfs 中提供了一种标记已删除目录的方法,所以 LXD 也需要支持它。有一个扩展属性(xattrs)的允许列表,可以在无特权的容器中设置。显然,只有一些属性是可以 allow 的,因为在某些命名空间设置这些属性,如 "security.*" 这些 xattrs "会是非常糟糕的",Graber 说。

Brauner 随后描述了 mount() 调用的情况。他说,在 mknod()的情况下,没有必要在 supervisor/manager 中 "对权限级别或安全级别进行任何调整"。它可以直接访问容器的 mount 命名空间并在其中创建设备节点。对于 mount()来说,事情并不那么简单。

在代表容器来执行 mount()时,有许多安全属性需要处理,如 Linux capability、LSM profile、UID 和 GID 等用户 ID、各种命名空间(如 mount、PID 或 user 命名空间)等等。管理器中模拟的调用需要对容器中请求进程的身份进行假设,这样在执行 mount 时就不会出现额外的权限。他说:"要做到这一点真的很棘手"。

鉴于此,他问道:"为什么要拦截 mount()系统调用?" 在有些情况下,host 为容器提供了一个文件系统,而容器管理器可以证明这一点。在这些很有限的情况下,允许文件系统被 mount 是确实有用的。然而,你不能允许在容器内任意进行 mount,因为有可能出现恶意的文件系统映像(malicious filesystem image)。

容器管理器可以模拟 mount()调用,所以它可以避免可能发生的 TOCTTOU 竞争问题,因为大多数参数都是指针。mount()系统调用也有问题,因为它是一个 "可怕的多路复用的功能",除了 mount 一个 block 设备上的文件系统外,还可以执行各种各样的操作:bind-mount、mount 一个伪文件系统、改变 mount 或改变 superblock 属性等等。拦截系统调用目前是有价值的,尽管如果能在虚拟文件系统(VFS)层实现 "delegated mounting" 功能在未来可能是一个更好的解决方案。

Graber 说,LXD 允许容器内的 mount 自动实现用户和组 ID 的重新映射。它也有一种模式可以拦截 mount,并将其变成使用用户空间的文件系统(FUSE)的等效 mount。这使得它 "相当安全",因为文件系统实际上没有直接通过内核 mount,而是由容器内的一个用户空间进程来处理的。

Brauner 说,他已经实现了一个 bpf()拦截的原型验证,其中使用了他在过去几年中完成的 pidfd 工作。要模拟那些返回文件描述符的系统调用(如 open()和 bpf())会有一个困难,因为文件描述符需要与请求进程共用。pidfd API 就可以将描述符安全地提供给另一个 task 了。LXD 限制了容器中可以运行的程序;它允许的一个程序可以让容器进一步限制对其中设备的访问。

Graber 说,sched_setscheduler() 拦截在 LXD 看来并不安全;"我觉得它很可疑",Brauner 说。但是,Graber 说,Android 经常使用这个调用,所以当在非特权容器中运行 Android 时,它就可以被启用。然而,这可能会导致各种问题,所以应该谨慎使用,当然尽量别用。

最近添加了 sysinfo()拦截,从而可以进一步支持 LXCFS 的一个功能,它可以根据容器的 cgroup 限制,而不是根据系统范围内的相应数值来报告有多少内存可用等信息。这很好,但有很多工具还在使用 sysinfo()来获取报告值,所以它们仍然会显示 host 范围的全局数值。通过拦截这个调用,就可以在容器内报告出来通常的运行时间、内存数量等信息。

Graber 随后演示了 LXD 容器中的各种拦截。作为一个例子,他展示了 sysinfo()的拦截。他以 256MB 的内存限制启动了容器,在容器内,free 命令确实正确显示了这个信息。这是因为 LXCFS 被挂载在/proc/meminfo 上,所以它可以拦截对该文件的读取。但是,运行一个查询 sysinfo() 的二进制文件,报出来的却是他的笔记本上的 16GB。重新启动带有拦截功能的容器之后,就可以解决这个小问题了。

Brauner 说,sysinfo() 拦截所使用的所有信息都来自 LXCFS 已经收集的信息却不通过系统调用报告,这导致了多个 bug report。例如,Java 通过 sysinfo()查看可用的内存,并会在此基础上进行内存预分配。此外,Graber 说, Alpine Linux 中的 free 使用(或曾经使用过)sysinfo(),从而导致了 LXD cgroup limit 相关的 bug report。

最后,他们对未来的工作提出了一些想法。Brauner 说,他想探索在 seccomp() filter 中至少添加一些有限的对 eBPF 的支持。长期以来,带有指针参数的新系统调用都被拒绝了,因为 seccomp()不能解析指针。这种情况已经改变了,所以一些多功能的 API,如 io_uring 以及新的可扩展系统调用方案(extensible system call scheme)并没有被阻止。但这导致了另一个问题。

GNU C 库(glibc)想转而使用 clone3()系统调用,但触犯了许多容器中安装的 seccomp() filter 的限制。这些 filter 根本不允许 clone3(),因为所有的参数都在指针之后,不能被检查到。旧的 clone()系统调用有一个直接传递的 flags 参数,因此可以用来决定系统调用是否应该继续。所以 Brauner 希望看到一些机制来检查指针后的那些参数,而如果能有限地支持 eBPF 就可以符合这一要求。在过去,seccomp() 的维护者 Kees Cook 一般都反对这样做,但 Cook 今年没有出席 LSSNA 会议。

除此之外,Graber 说,可能会对内核 module 加载来提供某些有限的支持。这个想法让很多人感到害怕,却是也应该害怕,但它将会是严格限制在对 init_module()/finit_module() 的拦截。并不会允许容器实际加载 module;相反,容器将传入它想加载的内容,如果该 module 通过了一些检查,容器管理器将加载该 module 的 host 版本。这方面的一个应用是容器中需要各种网络模块的防火墙。他说,现在,有一个 module 列表会在容器启动时被加载,但如果能按需加载 module 就更好了。

关于 seccomp() filter 的一个有趣的事情是,拦截甚至在查询系统调用表之前就已经完成了,这意味着新的系统调用可以完全在用户空间创建。新的系统调用将简单地被定义为一个未被使用的系统调用编号,它将被 filter 拦截从而可以调用新的代码。这可以用来作为新系统调用的实现原型方案了。他还没有看到有人真的这样做,但这是一种可能性。

[作者要感谢 LWN 的用户支持才能去奥斯汀参加 LSSNA。]

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

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

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

format,png

使用项目管理画布启动项目 许多人对商业模式画布并不陌生,它是亚历山大·奥斯特瓦德(Alexander Osterwalder)、伊夫·皮尼厄(Yves Pigneur)在《商业模式新生代》(Business Model Generation)中提出的一种用来描述商业模式、可视化商业模式、评估商业模式以及改变商业模式的通用语言。 在我们做敏捷软件项目inception(项目启动规划)的时候经常会用到商业画布,此时它的作用是帮助我们快速了解客户的业务、产品和市场,帮助客户梳理自己的资源、优势和盈利模式,总的来说,商业画布是一种简单实用的 阅读详情

相关推荐

机器学习第五章之决策树模型

机器学习专题系列

wangyutao12345的博客 5182

LWN:丢弃文件系统的page cache!

关注了就能看到更多这么棒的文章哦~Dropping the page cache for filesystemsBy Jake EdgeJune 11, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/977486/VFS 维护者 Christian Brauner 在 2024 年的Linux 存储、文件系统、...

Linux News搬运工 1687

告别专业软件!用QGIS+GDAL免费搞定S-57电子海图,附全套符号库和样式文件

本文详细介绍了如何利用免费开源工具QGIS和GDAL处理S-57电子海图,包括数据转换、符号库配置和专业可视化方案。通过实战指南,用户无需依赖昂贵的商业软件,即可实现从S-57到SHP的转换及专业级海图制作,特别适合预算有限的个人和小型机构。

weixin_33701294的博客 391

docker run:--privileged=true选项解析(特权模式:赋予容器几乎与主机相同的权限)

在默认情况下,Docker对容器的权限进行了严格的限制,只提供了有限的capabilities。因此,我们需要谨慎地使用这个选项,只在必要的情况下才启用它,并尽量使用其他更细粒度的权限控制手段。选项为容器提供了强大的功能,但它也带来了一些严重的安全隐患。由于privileged容器具有几乎与主机相同的权限,所以如果容器被恶意代码控制,那么攻击者就可以轻易地突破容器的边界,对主机进行任意操作。Docker默认情况下会赋予容器一些必要的capabilities,但不包括全部的能力,从而降低了被攻击的风险。

Dontla的博客 4万+

【Python机器学习实战】 | 基于PCA主成分分析技术读入空气质量监测数据进行数据预处理并计算空气质量综合评测结果

主成分分析(Principal Component Analysis, PCA)是一种常用的机器学习和数据分析技术,用于降低数据维度、识别数据中的模式、发现变量之间的关系等。

一伦明悦的博客 1263

【具身算法】VLA算法-Diffusion Policy

《扩散策略:多模态机器人控制的新方法》摘要 本文提出了一种基于扩散模型的机器人控制策略(DiffusionPolicy),用于解决视觉运动控制中的多模态行为、高维动作空间和训练稳定性问题。该方法利用去噪扩散概率模型(DDPM)生成动作序列,通过迭代优化处理复杂动作分布,显著提升了性能。实验表明,在15项机器人操作任务中,扩散策略平均性能提升46.9%,有效解决了传统显式/隐式策略的局限性。其核心优势在于:1)优雅建模多模态动作分布;2)适应高维动作空间;3)训练过程稳定。未来工作将探索与强化学习的结合及计算

puzhinan7781的博客 1389

Docker容器的root用户

Docker 是 Linux 平台上容器的管理引擎,其提供的容器服务一方面可以很好地分配物理资源,不论是资源还是权限都能够达到隔离的效果;另一方面,Docker 的设计把更多的目光投向了「应用」本身,简化了应用从开发、测试、发布等迭代发展的生命周期。 Docker 带着「重新定义应用」的豪言,冲击着大家对软件的理解,在云计算领域更是如此。然而,新技术的诞生往往需要接受行业千锤百炼似的考验,安全无疑是业界最关心的因素之一。传统的硬件虚拟化等技术发展了数十年,逐渐步入成熟期,成为如今云计算技术的中坚技术,其高隔

demon7552003的小本本 3490

构建家庭NAS之三:在TrueNAS SCALE上安装qBittorrent

以qBittorrent为例,说明如何在TrueNAS SCALE上使用docker来安装应用。

luoqingyong的博客 7005

docker容器权限设置--cap-add | --cap-drop | privileged

1.privileged,权限全开,不利于宿主机安全2.cap-add/cap-drop,细粒度权限设置,需要什么开什么。

HCIE 数通、RHCE、HCIP 欧拉、MySQL OCP 持证工程师。 4793

【ADCU详解】PMIC电源管理集成电路详解

自动驾驶域控制器(ADCU)中的电源管理集成电路(PMIC)是高度集成的关键部件,负责为计算核心、传感器等提供高效稳定的多路电源。其核心特点包括:符合车规AEC-Q100标准、支持功能安全ASIL等级、精确的时序控制及强抗干扰能力。PMIC由开关稳压器、LDO、时序控制器、监控保护电路等模块组成,通过分层电源树框架实现电能分配。设计需考虑效率、功率密度、噪声性能等关键维度,底层基于Buck转换器和LDO原理工作。使用中需满足严苛的车规环境要求,并通过静态/动态测试及故障注入测试进行验证,确保系统可靠性和安全

qq_40844444的博客 841

YOLOv8改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块

许多证据表明层次化网络对图像恢复(IR)任务通常不太有效,因为IR的目标是逐个预测像素值(密集预测),而缩小特征图会丢失重要的像素级信息。然而,层次化结构有降低时间复杂度以及学习语义级和像素级特征表示的优点。为了弥补缺点并利用优点,设计了H - RAMi层。

Limiiiing的博客 377

20 | 容器安全(2):在容器中,我不以root用户来运行程序可以吗?

本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。

草办的学习记录 2901

102、栅极驱动芯片选型与设计

文章摘要 本文分享了栅极驱动芯片选型与设计的实战经验。通过一次因驱动芯片选型不当导致的炸管事故,作者总结了栅极驱动芯片选型的五个关键参数:峰值驱动电流、驱动电压范围、传播延迟匹配、欠压锁定和隔离等级。文章详细分析了自举电路设计中的常见陷阱,以及栅极电阻对开关特性的影响,并强调了PCB布局布线的重要性。最后,作者提供了七条实用建议,包括避免通用型驱动芯片、关注CMTI参数、使用插件电阻等。核心观点是:栅极驱动设计需要综合考虑参数匹配、电路布局和实际调试,示波器实测波形是验证设计的唯一标准。

2401_88858637的博客 43

容器安全技术容器启动安全配置

那么在 启动容器的时候,同样建议使用该安全选项,通过为 Docker 容器创建或导入 SELinux策略模板,实现其安全防护。容器以进程的形式运行在主机上,运行的容器进程是隔离的,它拥有自己的文件系统、网络以及独立于主机 的进程树。要正确的使用容器,一定要有容器化的思维,正确的认识容器。如果在容器中运行了 SSH、TELNET 等服务,不仅不会增加该微服务的功能,反而会带来一系列的安全威胁 以及增加安全运维的复杂度。中,容器的本质就是 一个或少数进程以及运行进程所需要的各种依赖,即运行时环境的最小集。

m0_73803866的博客 960

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LWN: 让container更加安全

点击上方蓝色“Linux News搬运工”关注我们~Making containers saferByJake EdgeLSS-NA在Linux Security Su...

Linux News搬运工 598

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

在docker容器中调用和执行宿主机的docker

首先这个帖子,献给docker新手。当然如果你是一个老手,文中分割线后的操作方法也是一种思路。 首先说一下,如何在docker中执行宿主机的docker操作,我们管它叫docker in docker。 至于为什么要在docker中操作宿主机的docker,优点不言而喻,你既可以将你的具体需求容器化部署,又不用直接在宿主机上安装(假设我们没有办法在docker中操作宿主机的docker,那么我们只...

小单的博客专栏 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

kubernetes--分析容器系统调用:Sysdig

Sysdig是一个非常强大的系统监控分析和故障排查工具。汇聚strace+tcpdump+iftop+lsof工具功能为一身。sysdig除了能获取系统资源利用率、进程、网络连接、系统调等信息,还具备了很强的分析能力,例如:1.按照CPU使用率对进程排序2.按照数据包对进程排序3.打开最多文件描述符进程4.查看进程打开了哪些文件5.查看进程HTTP请求报文6.查看机器上容器列表及资源使用情况项目地址:https://github.com/draios/sysdig。

m0_57911290的博客 3586

[译] 玩转ptrace (一)

[本文翻译自这里:http://www.linuxjournal.com/article/6100?page=0,0,作者:Pradeep Padaia] 你是否曾经想过怎样才能拦截系统调用?你是否曾经想过通过修改一下系统调用的参数来耍一把内核?你是否想过调试器是怎样把一个进程停下来,然后把控制权转移给你的?如果你以为这些都是通过复杂的内核编程来实现的,那你就错了,事实上,Linux 提...

weixin_34360651的博客 335

探索高效系统调用拦截:syscall_intercept 开源库

探索高效系统调用拦截:syscall_intercept 开源库 项目介绍 syscall_intercept 是一个强大的用户空间系统调用拦截库,它允许你在用户空间内自定义 Linux 系统调用的行为。通过热补丁技术,该库能够实现在运行时替换标准 C 库中的系统调用,提供了一种低级别的接口来实现你的回调函数。 项目技术分析 syscall_intercept 使用 libcapstone 这个著...

gitblog_00037的博客 798

上手 seccomp

NAME seccomp - operate on Secure Computing state of the process SYNOPSIS #include <linux/seccomp.h> #include <linux/filter.h> #include <linux/audit.h> #include <linux/signal.h> #include <sys/ptrace.h> int seccomp(unsigned i

龙瑜的博客 3276

容器安全 - 非特权/非root用户运行容器,提升容器的运行安全

$ sudo docker run -ti --privileged -v /etc:/mnt centos bash [root@e21f07ad1509 /]# fdisk -l Disk /dev/vda: 98.7 GiB, 105931341824 bytes, 206897152 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size

多恩斯基的博客 3316

非特权容器(unprivileged containers)的进展

简而言之,用户命名空间允许进程及其后代将命名空间内的用户 ID (UID) 和组 ID (GID) 映射到托管命名空间(即“根命名空间”)的真实 Linux 系统中的不同值。一些挂载在挂载和用户命名空间组合内的文件系统,例如 tmpfs 或 FUSE,实际上确实使用映射的 ID,但访问使用不同 ID 编写的现有文件系统仍然存在问题。它已经存在了近十年,最近发现的错误不在用户命名空间代码中,而是在内核的其他地方,只是被该功能暴露出来,但它仍然是攻击面的增加. 因此,人们正在寻找限制其使用的方法。

爱死亡机器人 903

容器:特权容器 VS 非特权容器

使用特权容器虽然提供了更大的灵活性和能力,但同时也大大增加了安全风险。容器逃逸攻击(即容器内的攻击者获取宿主机权限)在特权容器中更容易发生。因此,除非绝对必要,否则不推荐使用特权容器,而应尽量采用非特权容器并根据需要授予特定权限。在设计和部署容器时,始终需要权衡灵活性、功能需求和安全性。容器以特权方式启动意味着它几乎拥有宿主机上的所有权限,与宿主机上的普通进程几乎没有区别。这与非特权容器形成对比,后者的权限受到限制,以减少潜在的安全风险。

十年运维开发经验的王义杰在此分享自己的知识和经验 1269

分析容器系统调用:Sysdig

分析容器系统调用:Sysdig Sysdig:一个非常强大的系统监控、分析和故障排查工具。 汇聚 strace+tcpdump+htop+iftop+lsof 工具功能于一身!(核心的功能就是将工具整合在一块) sysdig 除了能获取系统资源利用率、进程、网络连接、系统调用等信息, 还具备了很强的分析能力,例如: • 按照CPU使用率对进程排序 • 按照数据包对进程排序 • 打开最多的文件描述符进程 • 查看进程打开了哪些文件 • 查看进程的HTTP请求报文 • 查看机器

小楼一夜听春雨,深巷明朝卖杏花 1345

《Linux Shell脚本攻略》学习笔记-第十三章

《Linux Shell脚本攻略》学习笔记-第十三章 在云端

Protocol Stack | 传输与通信 394

拦截系统调用的实现以及要注意的问题

在2.6.32实现拦截系统调用 1.获取sys_call_table的地址 方法1:从/boot/System.map中取到sys_call_table的地址 由上图所看:第一:sys_call_table是只读的,下面是如何使得它变为RW。                      第二:这种方法获取的sys_call_table只是针对本机的,可移植性差 方法2:参考来源于:ht

WU.GJ 1345
上一篇: LWN: Git 里面的SHA-256 支持怎么样了?
下一篇: LWN:删除调度器中功耗差异幅度的检查!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值