首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏绿盟科技研究通讯

    安全容器也存在逃逸风险

    从上图可以得出结论,在不考虑其他因素的情况下,如果Kata Containers内部的攻击者想要逃逸到宿主机上,他必须至少经过两次逃逸——「容器逃逸」和「虚拟机逃逸」,才能达到目的。 它让我们意识到,即使是采用了独立内核的“安全容器”,也存在逃逸风险。换句话说,安全没有银弹。 本文将对该议题中的逃逸过程(Container-to-Host)及相关的三个漏洞进行详解和复现。 漏洞分析 如「简介」部分所述,从容器到宿主机的逃逸涉及三个漏洞的使用,由「容器逃逸」和「虚拟机逃逸」两部分组成。 接着,从Kata Containers官方Github仓库[10]下载1.10.0版本的静态程序包kata-static-1.10.3-x86_64.tar.xz,下载后进行安装即可,具体可参考如下步骤 community/blob/master/VMT/KCSA/KCSA-CVE-2020-2026.md [9] https://docs.docker.com/engine/install/ubuntu/ [10

    2.7K30发布于 2020-10-09
  • 来自专栏java系列

    Java基础】This逃逸( This引用逃逸详解)

    【Java基础】This逃逸( This引用逃逸详解)1、This逃逸中的关键词This引用逃逸对象在还没有构造完成时,This引用已经发布出。发布对象发布是指一个对象在作用域范围之外被使用。 ,但是不一定发生,而线程B发生this逃逸这是因为:由于JVM的指令重排序存在,实例变量i的初始化被安排到构造器外(final可见性保证是final变量规定在构造器中完成的)类似于this逃逸,线程A中构造器构造还未完全完成 3、什么情况下会This逃逸发生This逃逸一般会有两种情况:在构造器中启动线程:启动的线程任务是内部类,在内部类中 xxx.this 访问了外部类实例,就会发生访问到还未初始化完成的变量在构造器中注册事件 void onEvent(Event e) { doSomething(e); } } ); var = 10 ; }5、总结This逃逸一般发生在多线程中,引起This逃逸的问题是在多线程滥用引用。

    65230编辑于 2023-06-09
  • 来自专栏JavaEdge

    10-风险管理:如何应对暗礁风险?系统化风险管理让你安心!

    风险概率,每个具体风险发生的可能性 风险影响,风险对项目目标(进度、成本、范围、质量)的潜在影响 上图是《项目管理知识体系指南》给出的,风险对项目目标影响程度的评估量表,可对照量表来计算相应的风险指数, 可通过访谈或会议进行风险概率和影响的评估,参与人员包括: 熟悉相应风险类别的人员 项目外部的经验丰富人员 风险登记册示例: 2 暗礁风险 最大风险,不是那些显而易见的风险,而是暗礁看不见的风险,才最要命 很快你就能扩展自己对暗礁风险的理解。 你识别出的风险越多,项目风险就越低。 3 风险应对措施 你要为识别出的每个风险,制定相应风险应对措施。 项目执行期间,已识别风险会不断变化,新风险也会产生,你要在每周项目状态同步会议,对风险再评估,并通过 周期性的风险审查,识别新风险。 根据风险概率和影响,你需要召集项目组成员完成风险登记册以及风险具体评估,制定相应的风险应对措施及应急预案,同时对冰山下的风险保持敏感。

    84620编辑于 2023-06-10
  • 来自专栏冰河技术

    逃逸分析,yyds!!

    大家好,我是冰河~~ 在JVM的实现中,为了提高JVM的性能和节省内存空间,JVM提供了一种叫做 “逃逸分析” 的特性,而且对于“逃逸分析” 这种特性,也是近年来大厂面试常问的知识点。 今天,我们就一起来聊聊什么是逃逸分析 逃逸分析的概念 先以官方的形式来说下什么是逃逸分析。逃逸分析就是:一种确定指针动态范围的静态分析,它可以分析在程序的哪些地方可以访问到指针。 在JVM的即时编译语境下,逃逸分析将判断新建的对象是否逃逸。即时编译判断对象是否逃逸的依据:一种是对象是否被存入堆中(静态字段或者堆中对象的实例字段),另一种就是对象是否被传入未知代码。 对象逃逸示例 一种典型的对象逃逸就是:对象被复制给成员变量或者静态变量,可能被外部使用,此时变量就发生了逃逸。 我们可以用下面的代码来表示这个现象。 还没完,我们继续看下逃逸分析的优点,以便于小伙伴们能够更好的理解逃逸分析。 逃逸分析的优点 逃逸分析的优点总体上来说可以分为三个:对象可能分配在栈上、分离对象或标量替换、消除同步锁。

    43710编辑于 2022-06-15
  • 肿瘤免疫逃逸

    (2)白介素-10(IL-10):IL-10在很多人类肿瘤中都有过量表达,如肾癌、结肠癌、黑色素瘤及神经母细胞瘤等,其过量分泌会导致负向调节功能增强,打破机体的免疫自稳。 能抑制TH1、NK细胞和Mφ的抗肿瘤活性,并上调TH2相关细胞因子如IL-10的产生。 此后Treg在肿瘤免疫逃逸中的作用备受关注。人体内,Treg是一个异质性的群体,主要包括 CD4+CD25highTreg,Tr1(IL-10+T细胞)以及TH3(TGF-β+T细胞)细胞。 肿瘤中的DC有多种诱导肿瘤免疫逃逸的机制:①低抗原提呈能力,低表达抗原提呈分子和共刺激分子,高分泌IL-10等抑制型细胞因子,低分泌 IL-2;②影响 Treg 的产生和功能;③通过活性氧、 IDO 炎症反应与肿瘤发生的关系体现为外因和内因两个方面:外因是指炎症反应可增加肿瘤发生的风险,例如幽门螺杆菌与胃癌,慢性病毒性肝炎与肝癌,炎症性肠病与肠癌的发生;内因是指驱动肿瘤发生的基因改变会影响组织中的炎症反应

    52810编辑于 2024-02-28
  • 来自专栏Golang语言社区

    Golang逃逸分析

    Golang逃逸分析 介绍逃逸分析的概念,go怎么开启逃逸分析的log。 以下资料来自互联网,有错误之处,请一定告之。 Output: # command-line-arguments escape_analysis/main.go:11: &z escapes to heap escape_analysis/main.go:10 main.go:13: leaking param: y escape_analysis/main.go:13: ref z does not escape escape_analysis/main.go:10 : &i escapes to heap escape_analysis/main.go:9: moved to heap: i escape_analysis/main.go:10: main &x does not escape 这里的z没有逃逸,而i却逃逸了,这是因为go的逃逸分析不知道z和i的关系,逃逸分析不知道参数y是z的一个成员,所以只能把它分配给堆。

    1.9K51发布于 2018-07-26
  • 来自专栏腾讯云安全专家服务

    Docker逃逸原理

    逃逸思路1.因配置特权模式逃逸(--privileged,--cap-add与SYS_ADMIN结合)2.docker.sock通信传输逃逸(容器A新建一个容器B,再使用容器B进行逃逸)3.结合linux 内核提权漏洞逃逸(脏牛dirty cow)4.docker中的/proc传输,/fd传输逃逸(CVE-2019-5736)Docker是当今使用范围最广的开源容器技术之一,具有高效易用的优点。 图片.png一.配置特权模式时的逃逸情况(一)--privileged(特权模式)特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限 因此,当容器访问docker socket时,我们可通过与docker daemon的通信对其进行恶意操纵完成逃逸。 /bin/bash可以看见@符号后的Docker ID已经发生变化:image.png5.在新容器/aa路径下完成对宿主机资源的访问:ls /aaimage.png三、存在Dirty Cow漏洞时的逃逸情况

    3.9K61编辑于 2023-03-01
  • 来自专栏数据小冰

    内存逃逸

    如果函数外没有引用,则优先放到栈中 如果函数外有引用,则必须放到堆中 逃逸分析实例 暴露引用到函数外部 func escapeDemo1() *int { i := 10 return &i } s") printHeader(&s) s = append(s, 5) println("add 5 to s") printHeader(&s) } func escapeDemo10 () } 执行go build -gcflags="-m -l" escape.go得到如下输出, 可以看到escapeDemo10中的s发生了逃逸,很容易理解,因为函数返回的s的引用。 escapeDemo10中切片自身和数据都分配在堆上。 func escapeDemo11() { s := make([]*int, 0, 4) v := 10 s = append(s, &v) } 执行下逃逸检查看下输出,得到的输出为 # command-line-arguments

    53920编辑于 2022-08-15
  • 来自专栏sunsky

    Golang内存逃逸是什么?怎么避免内存逃逸

    逃逸分析是怎么完成的 Go逃逸分析最基本的原则是:如果一个函数返回对一个变量的引用,那么它就会发生逃逸。 任何时候,一个值被分享到函数栈帧范围之外,它都会在堆上被重新分配。 参考 http://npat-efault.github.io/programming/2016/10/10/escape-analysis-and-interfaces.html 尽管能够符合分配到栈的场景 http://npat-efault.github.io/programming/2016/10/10/escape-analysis-and-interfaces.html type Stringer 对于Go程序员来说,编译器的这些逃逸分析规则不需要掌握,我们只需通过go build -gcflags '-m'命令来观察变量逃逸情况就行了。 但其实当参数为变量自身的时候,复制是在栈上完成的操作,开销远比变量逃逸后动态地在堆上分配内存少的多。 最后,尽量写出少一些逃逸的代码,提升程序的运行效率。

    6.4K12发布于 2020-10-28
  • 来自专栏红蓝对抗

    Docker容器逃逸

    Linux 进程,而容器逃逸的过程我们完全可以将其理解... 前言: 我认为docker容器逃逸也算是提权的一种手法,要更好的理解容器逃逸的手法,应该知道从本质上看容器内的进程只是一个受限的普通 Linux 进程,而容器逃逸的过程我们完全可以将其理解为在一个受限进程中进行一些操作来获取未受限的完整权限 privileged 特权容器的权限其实有很多,所以也有很多不同的逃逸方式,挂载设备读写宿主机文件是特权容器最常见的逃逸方式之一 如何判断当前容器是以Privileged 特权模式启动的呢? ,容器逃逸的利用手段会比大部分情况下的命令执行漏洞利用要灵活。 需要注意的是,使用该端口需要确保防火墙设置正确,以避免潜在的安全风险

    1.1K30编辑于 2023-12-28
  • 来自专栏Golang语言开发栈

    Go 语言逃逸分析

    02 查看对象是否发生逃逸 Go 语言工具链提供了查看对象是否逃逸的方法,我们在执行 go build 时,配合使用参数 -gcflags 开启编译器支持的额外功能,例如: go build -gcflasg /main.go:8:2: moved to heap: res 阅读上面这段代码,我们发现 sum 函数中的变量 res 逃逸到堆,也就是说 Go 编译器通过逃逸分析,决定将变量 res 分配到堆空间 03 逃逸分析的作用 Go 语言编译器通过逃逸分析优化,将对象合理分配到栈空间和堆空间。 因为栈内存分配比堆内存分配更快,所以 Go 语言在编译时通过逃逸分析优化将不会发生逃逸的对象优先分配到栈空间。 因此,不仅降低堆空间内存分配的开销,同时,也可以降低垃圾回收占用的系统资源。 所以,我们在实际项目开发中,可以借助 Go 工具链分析对象是否会发生逃逸,尽量避免一些不必要的对象逃逸。 推荐阅读: Go 语言怎么使用对称加密?

    35930编辑于 2022-10-28
  • 来自专栏技术研究和应用

    Go逃逸分析

    逃逸分析输出:. 栈空间不足整个系统的栈空间本身就不大,本测试环境的栈空间为8M,Goroutine的占用空间不到10KB,分配给栈的空间更小,一旦某个对象的占用空间过大,此时就发生了内存逃逸。 当栈内单个对象大小超过64KB,则会发生内存逃逸,channel空间不足也会发生逃逸逃逸代码片段举例如下:func stackSpace() { length := 10 space3 := make([]int, length) for i := 0; i < len 局部变量name因为匿名函数返回出去后,编译器认为应该分配在堆上,也发生了逃逸。取消逃逸分析编译器默认会进行逃逸分析,会通过规则判定一个变量是分配到堆上还是栈上。一些函数虽然逃逸分析将其存放到堆上。

    67171编辑于 2022-09-06
  • 来自专栏LinkinStar's Blog

    Golang逃逸分析

    /main.go:10:11: make([]int64, 8192) escapes to heap ./main.go:11:13: ... argument does not escape . int func foo151(x *int) { // ERROR "leaking param: x$" save151 = x } func bar151b() { var a [10 doesMakeSlice(x *string, y *string) { // ERROR "leaking param: x" "leaking param: y" a := make([]*string, 10 ) // ERROR "make\(\[\]\*string, 10\) does not escape" a[0] = x b := make([]*string, 65537) // ERROR 也是会分配到堆上的,因为你不知道这个 slice 会扩容成什么大小 func nonconstArray() { s1 := make([]int, 0) for i := 0; i < 10

    61320编辑于 2022-09-01
  • 来自专栏Khan安全团队

    Docker逃逸漏洞

    Docker逃逸漏洞复现(CVE-2019-5736) ? 因为Docker所使用的是隔离技术,就导致了容器内的进程无法看到外面的进程,但外面的进程可以看到里面,所以如果一个容器可以访问到外面的资源,甚至是获得了宿主主机的权限,这就叫做“Docker逃逸”。

    81140发布于 2021-03-24
  • 来自专栏涓流

    go逃逸分析

    /main.go:13:10: inlining call to foo . /main.go:7:10: leaking param: s ./main.go:8:10: new(A) escapes to heap . /main.go:13:10: main new(A) does not escape ./main.go:14:11: main a.s + " world" does not escape . (*File).close .this does not escape 内存逃逸的例子 指针逃逸 func createPointer() *int { x := 10 return & interface{} 动态类型逃逸 func interfaceEscape() interface{} { x := 10 return x // x 逃逸到堆 } 接口类型包含指向具体数据的指针和类型信息

    24200编辑于 2025-05-16
  • 来自专栏sunsky

    Golang逃逸分析

    Golang逃逸分析 介绍逃逸分析的概念,go怎么开启逃逸分析的log。 以下资料来自互联网,有错误之处,请一定告之。 如果指针存储在全局变量或者其它数据结构中,它们也可能发生逃逸,这种情况是当前程序中的指针逃逸逃逸分析需要确定指针所有可以存储的地方,保证指针的生命周期只在当前进程或线程中。 go消除了堆和栈的区别 go在一定程度消除了堆和栈的区别,因为go在编译的时候进行逃逸分析,来决定一个对象放栈上还是放堆上,不逃逸的对象放栈上,可能逃逸的放堆上。 Output: # command-line-arguments escape_analysis/main.go:11: &z escapes to heap escape_analysis/main.go:10 这里的z没有逃逸,而i却逃逸了,这是因为go的逃逸分析不知道z和i的关系,逃逸分析不知道参数y是z的一个成员,所以只能把它分配给堆。

    62500发布于 2020-08-20
  • 来自专栏golang分享

    golang逃逸分析

    /main.go:10:15: leaking param: z to result ~r0 level=0 第一行是z变量是流经某个函数的意思,仅作为函数的输入,并且直接返回,在 identity() /main.go:9:10: moved to heap: z ref()的参数 z是通过值传递的,所以 z是 main()函数中 x的一个值拷贝,而 ref()返回了 z的引用,所以 z不能放在 ref /main.go:10:10: leaking param: y ./main.go:10:18: z does not escape . = 0; i < len(nums); i++ { nums[i] = rand.Int() } } func NonConstant() { number := 1010 package main import "fmt" type A struct { s string } // 这是上面提到的 "在方法内把局部变量指针返回" 的情况 func foo

    4.7K20编辑于 2023-07-30
  • 来自专栏终有链响

    HotSpot逃逸分析

    逃逸分析及其优化 逃逸分析是JIT编译器中的一个高级特性,它分析对象的生命周期和作用域,判断对象是否“逃逸”出其创建的方法或线程,以此来决定是否可以采取进一步的优化措施。 逃逸的两种情况包括: 方法逃逸:对象被作为参数传递给其他方法,其引用超出创建方法的范畴。 线程逃逸:对象被赋予了全局变量或类变量,有可能被其他线程访问。 当分析得知对象未发生逃逸时,可以执行以下优化: 同步消除:如果确定一个对象不会被多线程访问,那么针对该对象的同步操作(如加锁解锁)可以安全地被消除,减少不必要的性能开销。 栈上分配:对于生命周期短且未逃逸的对象,直接在栈上分配内存,而非堆上,栈的分配速度快于堆,且对象生命周期结束时自动释放内存,减少了GC负担。 分层编译和逃逸分析在1.8中是默认是开启的 编译阈值与OSR编译解析 在即时编译(JIT)的背景下,编译阈值是一个关键参数,它决定了代码从解释执行过渡到编译执行的时机。

    26310编辑于 2024-07-29
  • 来自专栏红蓝对抗

    Docker容器逃逸

    ,要更好的理解容器逃逸的手法,应该知道从本质上看容器内的进程只是一个受限的普通 Linux 进程,而容器逃逸的过程我们完全可以将其理解...前言:我认为docker容器逃逸也算是提权的一种手法,要更好的理解容器逃逸的手法 限制权限的进程获取更多权限,当清晰的理解了这一点,接下来的容器逃逸学习将会易如反掌容器逃逸环境搭建作者这里选择的是Ubuntu-18.04和Ubuntu22.04,推荐使用Ubuntu18.04首先安装 privileged 特权容器的权限其实有很多,所以也有很多不同的逃逸方式,挂载设备读写宿主机文件是特权容器最常见的逃逸方式之一如何判断当前容器是以Privileged 特权模式启动的呢? ,不建议将逃逸的行为当成可以写入宿主机特定文件 (如 /etc/cron*, /root/.ssh/authorized_keys 等文件) 的行为,应该根据目标选择更趋近与业务行为的手法,容器逃逸的利用手段会比大部分情况下的命令执行漏洞利用要灵活 需要注意的是,使用该端口需要确保防火墙设置正确,以避免潜在的安全风险

    1.4K21编辑于 2023-12-25
  • 来自专栏FreeBuf

    OWASP发布10大开源软件风险清单

    基于此,OWASP发布了开源软件风险清单TOP 10,旨在解决帮助企业用户更好地解决开源软件组件安全问题,帮助安全从业者更成熟地治理和安全使用OSS。 风险清单TOP 10由Endor Labs首创,该公司专注于OSS安全、CI/CD管道和漏洞管理、软件供应链安全等。 为了更好地应对风险,管理开源软件漏洞,网安人必须关注风险的先行指标,以便更快发现特定OSS库、组件和项目之间存在的威胁。 以下OWASP发布10大开源软件风险清单。 1. 导致OSS组件未维护的另一个关键因素是,有25%的OSS项目只有一个开发者贡献代码,94%的项目维护者/开发者低于10人。如果一个项目只有一个维护者,风险是显而易见的。 此外,为了减轻组件在传输中被妥协的风险,组织应使用安全协议来传输和网络流量通信。 10.

    50810编辑于 2024-04-17
领券