近日,Linux git中发布一个commit补丁,该补丁对应的漏洞是一个本地提权漏洞CVE-2019-8912,漏洞影响范围较广。根据git中的commit信息可知,该漏洞出现在内核’crypto/af_alg.c’中的af_alg_release函数中,可以通过sockfs_setattr函数触发,漏洞类型是use after free,可以导致本地代码执行进行权限提升。
脏牛(Dirty COW,编号:CVE-2016-5195)是2016年10月18日被曝出的存在于Linux内核中的一款0day漏洞。因为此漏洞是在Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时发生的,而又给Linux内核的使用带来烦恼,所以将其命名为“Dirty COW”。
又一个古老的Linux内核漏洞被曝光!这次的漏洞可以追溯到2009年,影响的linux发行版包括Red Hat、Debian、Fedora、OpenSUSE和Ubuntu。 这个Linux漏洞编号为CVE-2017-2636,根据CVSS v3标准漏洞评分为7.8分。漏洞在Linux内核已经存在7年了,它能够让本地无权限的用户获取root权限,或者发动DoS让系统崩溃。 Positive Technologies的研究员Alexander Popov发现了存在于N_HLDC linux内核驱动的竞争条件
上周,研究人员Phil Oester发现 “脏牛”漏洞,影响范围甚广,波及到2007年发布的Linux内核,一时间名声大噪。 脏牛漏洞,编号为CVE-2016-5195,是Linux内核运行时出现的竞争条件,允许攻击者实现本地提权。简而言之,攻击者利用脏牛可获得Linux设备的root权限。(详情请参考此前漏洞盒子发布的漏洞预警) 影响所有Android版本 脏牛刚被发现时,我们不清楚基于Linux内核的Android操作系统是否也受到了影响。发现脏牛的Phil Oester并没有检测Android系统上有
本专栏,用于记录我对Linux内核源码的学习,就像STL源码的那个专栏一样,我知道阅读源码对我的意义。 愿者上钩咯,共同进步。
研究人员发现,去年发现的脏牛漏洞(CVE-2016–5195)尚未被完全修复。 脏牛漏洞由竞争条件引发——Linux内核内存子系统在处理COW时存在问题。这个漏洞由Phil Oester发现,它会导致攻击者在目标系统内提权。 Linux内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。 竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代
这个名叫Dirty COW,也就是脏牛的漏洞,存在Linux内核中已经有长达9年的时间,也就说2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队已经对此进行了修复。据说Linus本人也参与了修复。:P 00x1 漏洞编号: CVE-2016-5195 00x2 漏洞危害: 低权限用户利用该漏洞可以在众多Linux系统上实现本地提权 00x3影响范围: Linux kernel >=2.6.22(2007年发行,到今年10月18日才修复) 00x4
在Linux 中,仅等待 CPU 时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为 TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个进程对 CPU 的控制权,并且从运行队列中选择一个合适的进程投入运行。
1 Linux 进程的睡眠和唤醒 在 Linux 中,仅等待 CPU 时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为 TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个进程对 CPU 的控制权,并且从运行队列中选择一个合适的进程投入运行。 当然,一个进程也可以主动释放 CPU 的控制权。函数 schedule() 是一个调度函数,它可以被一个进程主动调用,从而调度其它进程占用 CPU。一旦这个主动放弃 CPU 的进程被重新调度
当在try_to_wake_up/wake_up_process和wake_up_new_task中唤醒进程时, 内核使用全局check_preempt_curr看看是否进程可以抢占当前进程可以抢占当前运行的进程. 请注意该过程不涉及核心调度器.
在多年前,linux还没有支持对称多处理器SMP的时候,避免并发数据访问相对简单。
关于同步理论的一些基本概念 临界区(critical area): 访问或操作共享数据的代码段 简单理解:synchronized大括号中部分(原子性) 竞争条件(race conditions)两个线程同时拥有临界区的执行权 数据不一致:(data unconsistency) 由竞争条件引起的数据破坏 同步(synchronization)避免race conditions 锁:完成同步的手段(门锁,门后是临界区,只允许一个线程存在) 上锁解锁必须具备原子性 原子性(象原子一样不可分割的操作) 有序
在评估漏洞影响时,人们关注的往往是漏洞风险,而实际上,漏洞潜伏的时间也是一个非常重要的因素。时间跨度大,也就意味着在此期间使用这些含有漏洞的软件的设备更多,影响的设备就更多;而时间跨度长,也就意味着被
该漏洞是 Linux 内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞, 导致可以破坏私有只读内存映射。黑客可以在获取低权限的的本地用户后,利用此漏洞获取 其他只读内存映射的写权限,进一步获取 root 权限。
例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。
许多人都认为Linux是最安全的操作系统,因此在对Linux的安全问题上也放松了警惕。那么事实真的如此吗?其实安全从来都只是相对的,Linux也不例外。虽然它加载了强大的安全机制,但仍可能受到来自各方面带来的安全威胁。本文我们主要将讨论有关Linux架构的主要利用技术,以及相关的安全防御措施。
渗透测试中的提权是指在获取到目标系统的低权限后,由于所配置的用户权限可能不是特权用户或用户权限较低,操作的局限性很大。渗透人员通过各种手段提升权限,以获取更高级别的访问权限或系统控制权。
运行了Linux发行版的计算机设备,如果内核版本小于5.0.8的话,将有可能受到一个内核竞争条件漏洞的影响,并导致系统无法抵御远程网络攻击。
Linux 6.8 内核已经升级至 Rust 1.75,而最新的补丁则将内核的 Rust 代码迁移到 Rust 1.76,并准备好迎接即将发布的 Rust 1.77。 Rust 1.77 稳定了内核 Rust 代码使用的单字段 "offset_of" 功能,并添加了一个"--check-cfg" 选项,内核 Rust 代码未来可能会过渡到这个选项。这符合 Rust for Linux 跟踪上游 Rust 版本升级的政策,直到确定了所有使用的功能都被认为是稳定的最低版本为止。预计将在即将到来的 Linux 6.9 内核合并窗口中进行对 Rust 1.77 的升级。
漏洞编号: CVE-2016-5195 漏洞名称: 脏牛(Dirty COW) 漏洞危害: 高危 影响范围: Linux内核 >=2.6.22(2007年发行)开始就受影响了 漏洞描述: 低权限用户利用该漏洞技术可以在全版本Linux系统上实现本地提权。 Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞,导致可以破坏私有只读内存映射。低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,导致可以进一步提权,甚至提升到root级权限。 漏洞验证测试: 测试环境UB
Docker是当今使用范围最广的开源容器技术之一,具有高效易用的优点。然而如果使用Docker时采取不当安全策略,则可能导致系统面临安全威胁。
现如今,一个服务端应用程序几乎都会使用到多线程来提升服务性能,而目前服务端还是以linux系统为主。一个多线程的java应用,不管使用了什么样的同步机制,最终都要用JVM执行同步处理,而JVM本身也是linux上的一个进程,那么java应用的线程同步机制,可以说是对操作系统层面的同步机制的上层封装。这里我说的操作系统,主要是的非实时抢占式内核(non-PREEMPT_RT),并不讨论实时抢占式内核(PREEMPT_RT) 的问题,二者由于使用场景不同,因此同步机制也会存在差异或出现变化。
在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(sem aphore)、读写信号量(rw_sem aphore)、spinlock、BKL(Big Kernel Lock)、rwlock、brlock(只包含在2.4内核中)、RCU (只包含在2.6内核中)和seqlock(只包含在2.6内核中)
随着越来越多的企业开始上“云”,开始容器化,云安全问题已经成为企业防护的重中之重。
在Linux系统中,进程间的同步和通信是一个复杂而关键的话题。为了维护系统资源的正确访问和分配,Linux提供了多种同步机制,其中锁机制是其中之一。然而,当多个进程试图同时访问同一资源时,可能会出现死锁或竞争条件。为了有效地诊断和解决这些问题,Linux提供了lslocks命令,该命令可以显示系统上的活动锁信息,帮助系统管理员和开发者深入了解系统资源的使用情况。
在上一则发表的关于 Linux 的文章中,叙述了 Linux 的相关概念,其中就包括进程的资源,进程的状态,以及进程的属性等相关内容,在本则教程中,将着重叙述 Linux 进程管理的内容,其中就包括 Linux 进程的创建,进程的终止,进程的等待相关内容。
译自 Tetragon 1.0 Promises a New Era of Kubernetes Security and Observability 。
开篇我先考大家一个小问题,如果你的服务器上已经有个进程在 listen 6000 这个端口号了。那么该服务器上其它进程是否还能 bind 和 listen 该端口呢?
Linkerd 数据平面的代理是多线程(multithreaded)的, 并且能够运行可变数量的工作线程, 以便它们的资源使用(resource usage)与应用程序工作负载(application workload)相匹配。
大家好,又见面了,我是你们的朋友全栈君。 引子 在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你”不选这个内核不一定能正确的运行使用glibc的程序”,那futex是什么?和glibc又有什么关系呢? 1. 什么是Futex Futex 是Fast Userspace muTexes的缩写,由Hubertus Franke, Matthew Kirkwood, Ingo Molnar and Rusty Russell共同设计完成。几位都是linux领域的专家,其中可能Ingo Molnar大家更熟悉一些,毕竟是O(1)调度器和CFS的实现者。 Futex按英文翻译过来就是快速用户空间互斥体。其设计思想其实 不难理解,在传统的Unix系统中,System V IPC(inter process communication),如 semaphores, msgqueues, sockets还有文件锁机制(flock())等进程间同步机制都是对一个内核对象操作来完成的,这个内核对象对要同步的进程都是可见的,其提供了共享 的状态信息和原子操作。当进程间要同步的时候必须要通过系统调用(如semop())在内核中完成。可是经研究发现,很多同步是无竞争的,即某个进程进入 互斥区,到再从某个互斥区出来这段时间,常常是没有进程也要进这个互斥区或者请求同一同步变量的。但是在这种情况下,这个进程也要陷入内核去看看有没有人 和它竞争,退出的时侯还要陷入内核去看看有没有进程等待在同一同步变量上。这些不必要的系统调用(或者说内核陷入)造成了大量的性能开销。为了解决这个问 题,Futex就应运而生,Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享 的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不 用再执行系统调用了。当通过访问futex变量告诉进程有竞争发生,则还是得执行系统调用去完成相应的处理(wait 或者 wake up)。简单的说,futex就是通过在用户态的检查,(motivation)如果了解到没有竞争就不用陷入内核了,大大提高了low-contention时候的效率。 Linux从2.5.7开始支持Futex。 2. Futex系统调用 Futex是一种用户态和内核态混合机制,所以需要两个部分合作完成,linux上提供了sys_futex系统调用,对进程竞争情况下的同步处理提供支持。 其原型和系统调用号为 #include <linux/futex.h> #include <sys/time.h> int futex (int *uaddr, int op, int val, const struct timespec *timeout,int *uaddr2, int val3); #define __NR_futex 240 虽然参数有点长,其实常用的就是前面三个,后面的timeout大家都能理解,其他的也常被ignore。 uaddr就是用户态下共享内存的地址,里面存放的是一个对齐的整型计数器。 op存放着操作类型。定义的有5中,这里我简单的介绍一下两种,剩下的感兴趣的自己去man futex FUTEX_WAIT: 原子性的检查uaddr中计数器的值是否为val,如果是则让进程休眠,直到FUTEX_WAKE或者超时(time-out)。也就是把进程挂到uaddr相对应的等待队列上去。 FUTEX_WAKE: 最多唤醒val个等待在uaddr上进程。 可见FUTEX_WAIT和FUTEX_WAKE只是用来挂起或者唤醒进程,当然这部分工作也只能在内核态下完成。有些人尝试着直接使用futex系统调 用来实现进程同步,并寄希望获得futex的性能优势,这是有问题的。应该区分futex同步机制和futex系统调用。futex同步机制还包括用户态 下的操作,我们将在下节提到。 3. Futex同步机制 所有的futex同步操作都应该从用户空间开始,首先创建一个futex同步变量,也就是位于共享内存的一个整型计数器。 当 进程尝试持有锁或者要进入互斥区的时候,对futex执行”down”操作,即原子性的给futex同步变量减1。如果同步变量变为0,则没有竞争发生, 进程照常执行。如果同步变量是个负数,则意味着有竞争发生,需要调用futex系统调用的futex_wait操作休眠当前进程。 当进程释放锁或 者要离开互斥区的时候,对futex进行”up”操作,
本文主要是《Linux内核设计与实现》这本书的读书笔记,这本书我读了不下十遍,但依然感觉囫囵吞枣。我结合自己的理解,从这本书中整理出了一些运维应该了解的内核知识,希望对大家能够有所帮助。另外,推荐大家读下这边书,这本书主要讲内核设计、实现原理和方法,有利于理解内核的一些机理。
Linux操作系统概述 Q1.什么是GNU?Linux与GNU有什么关系? A: 1)GNU是GNU is Not Unix的递归缩写,是自由软件基金会(Free Software Foundation,FSF)的一个项目,该项目已经开发了许多高质量的编程工具,包括emacs编辑器、著名的GNU C和C++编译器(gcc和g++); 2)Linux的开发使用了许多GNU工具,Linux系统上用于实现POSIX.2标准的工具几乎都是由GNU项目开发的;Linux内核、GNU工具以及其它一些自由软件组成
虽然我们在区分Linux进程类别, 但是我还是想说Linux下只有一种类型的进程,那就是task_struct,当然我也想说linux其实也没有线程的概念, 只是将那些与其他进程共享资源的进程称之为线程。
锁,大家应该很熟悉了,用来避免竞争,实现同步。本文以 $xv6$ 为例来讲解锁本身是怎么实现的,废话不多说先来看一些需要了解的概念:
一、功能上的区别 posix和system v有什么区别/?现在在应用时应用那一标准 浮云484212 | 浏览 243 次 2014-11-06 10:36 2014-11-19 22:36 最佳答案 它们是有关信号量的两组程序设计接口函数。POSIX信号量来源于POSIX技术规范的实时扩展方案(POSIX Realtime Extension),常用于线程;system v信号量,常用于进程的同步。这两者非常相近,但它们使用的函数调用各不相同。前一种的头文件为semaphore.h,函数调用为sem_
背景 国外安全研究员champtar[1]在日常使用中发现Kubernetes tmpfs挂载存在逃逸现象,研究后发现runC存在条件竞争漏洞,可以导致挂载逃逸[2]。 关于条件竞争TOCTOU和一些linux文件基础知识可见这篇文章《初探文件路径条件竞争 - TOCTOU&CVE-2019-18276》[3]。 CVE-2021-30465在Redteam的研究者视角中比较鸡肋,因为需要K8S批量创建POD的权限。但在产品安全的视角恰恰相反,针对Caas(Container as a service)类
本文主要探讨了在Linux系统中,文件锁的概念、实现方式、相关命令和应用场景。文件锁主要用于保护文件系统,避免因多个进程并发访问同一文件而导致的竞争条件。通过使用锁命令和工具,可以有效地管理文件锁,确保文件系统的安全性和稳定性。
导读:文章内容较多,也有不少代码,但是作者写的也很认真,对理解并发编程会有帮助,值得一读。 阅读完大约需要15分钟,如果对 linux 实在不太感冒,也可以选择性从 double-check 章节开始看起。
本文基于OSDI-18收录的《Arachne: Core-Aware Thread Management》翻译整理而成。
许多人认为10月5日是 Linux 系统的周年纪念日,因为这是 Linux 在1991年首次对外公布的时间。不过,你可能不知道的是,早在1991年8月25日,当年还是大学生的 Linus Torvalds 就向 comp.os.minix 新闻组的人透露了由于“业余爱好”他正在研究操作系统的消息。因此,该时间也被许多爱好者视为 Linux 的真正诞生日期。
Go分为数据类型分为值类型和引用类型,其中值类型是 int、float、string、bool、struct和array,它们直接存储值,分配栈的内存空间,它们被函数调用完之后会释放;引用类型是 slice、map、chan和值类型对应的指针 它们存储是一个地址(或者理解为指针),指针指向内存中真正存储数据的首地址,内存通常在堆分配,通过GC回收。
上一篇文章,我们详细介绍了通过 goroutine 和通道来实现并发编程: GoLang 的并发编程与通信 — goroutine 与通道
综述 近日,Intel CPU中曝出Meltdown(熔断)和Spectre(幽灵)两大新型漏洞,包括Intel、AMD、ARM等主流CPU在内,几乎近20年发售的所有使用上述CPU的设备都受到影响,包括手机、电脑、服务器以及云计算产品。漏洞的CVE ID分别为: Meltdown漏洞:CVE-2017-5754; Spectre漏洞:CVE-2017-5753,CVE-2017-5715。 漏洞分析 漏洞起因 Intel在支持指令乱序执行时,在内存内容载入缓存到内存地址权限检查之间存在竞争条件,
许多人认为 10 月 5 日是 Linux 系统的周年纪念日,因为这是 Linux 在 1991 年首次对外公布的时间。不过,你可能不知道的是,早在 1991 年 8 月 25 日,当年还是大学生的 Linus Torvalds 就向 comp.os.minix 新闻组的人透露了由于 “业余爱好” 他正在研究操作系统的消息。因此,该时间也被许多爱好者视为 Linux 的真正诞生日期。
之前GitHub上有人整理过一个叫Awesome-Fuzzing的资料,整理了关于Fuzzing技术的电子书、视频、工具、教程以及用于练习的漏洞程序。整体上不错,但工具上还是不够全,有些不错且希望阅读代码学习的工具,发现未在其中,因此重新整理出下面这一份资源,其中有些还曾二次开发过,有些是还未来得及学习的,写出来权且当作学习计划。
【引子】没有忘记,目前从事的是DingOS 操作系统相关工作,没有因为LLM 而迷失。LLM 会成为基础设施,LLM 会为操作系统赋能,但是操作系统的价值是客观存在的,除非,计算机体系结构发生了翻天覆地的变化。
Bionic库是Android的基础库之一,也是连接Android系统和Linux系统内核的桥梁,Bionic中包含了很多基本的功能模块,这些功能模块基本上都是源于Linux,但是就像青出于蓝而胜于蓝,它和Linux还是有一些不一样的的地方。同时,为了更好的服务Android,Bionic中也增加了一些新的模块,由于本次的主题是Androdi的跨进程通信,所以了解Bionic对我们更好的学习Android的跨进行通信还是很有帮助的。
runC是一个开源项目,由Docker公司(之前称为Docker Inc.)主导开发,并在GitHub上进行维护。它是Docker自版本1.11起采用的默认容器运行时(runtime),也是其他容器编排平台(如Kubernetes)的基础组件之一。因此在容器生态系统中,runC扮演着关键的角色。runC是一个CLI工具,用于根据Open Container Initiative(OCI)规范在Linux系统上生成和运行容器。它是一个基本的容器运行时工具,负责启动和管理容器的生命周期,包括创建、运行、暂停、恢复和销毁容器。通过使用runC,开发人员和运维人员可以更加灵活地管理容器,并且可以在不同的容器平台之间实现容器的互操作性。
领取专属 10元无门槛券
手把手带您无忧上云