首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用memfd_create和fexecve从内存中运行ELF

是一种在Linux系统中实现内存执行的方法。下面是对这个问答内容的完善和全面的答案:

  1. memfd_create是一个Linux系统调用,用于创建一个匿名的、可用于共享的文件描述符。它可以用于将一个ELF文件加载到内存中,而无需将其写入磁盘。
  2. fexecve是一个Linux系统调用,用于在一个新的进程中执行指定的程序。它可以用于从内存中执行一个已加载的ELF文件。
  3. ELF(Executable and Linkable Format)是一种可执行文件格式,广泛用于Linux和UNIX系统。它定义了可执行文件的结构和组织方式,包括代码段、数据段、符号表等。
  4. 使用memfd_create和fexecve从内存中运行ELF的优势包括:
    • 提高执行效率:由于ELF文件已加载到内存中,无需从磁盘读取,可以减少IO操作,提高执行效率。
    • 增强安全性:由于ELF文件不会写入磁盘,可以减少被恶意软件篡改或被未授权访问的风险。
    • 简化部署过程:无需将ELF文件写入磁盘,可以简化部署过程,减少配置和文件管理的复杂性。
  • 使用memfd_create和fexecve从内存中运行ELF的应用场景包括:
    • 安全领域:用于执行加密的或需要保护的代码,以防止被恶意软件或攻击者获取。
    • 反病毒软件:用于执行病毒扫描引擎,以避免病毒对磁盘上的文件进行感染。
    • 沙箱环境:用于在隔离的环境中执行不受信任的代码,以防止对主机系统的损害。
  • 腾讯云相关产品和产品介绍链接地址:
    • 腾讯云计算产品:https://cloud.tencent.com/product
    • 腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm
    • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
    • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
    • 腾讯云安全产品:https://cloud.tencent.com/product/safety
    • 腾讯云人工智能产品:https://cloud.tencent.com/product/ai
    • 腾讯云物联网产品:https://cloud.tencent.com/product/iot
    • 腾讯云移动开发产品:https://cloud.tencent.com/product/mad
    • 腾讯云存储产品:https://cloud.tencent.com/product/cos
    • 腾讯云区块链产品:https://cloud.tencent.com/product/baas
    • 腾讯云元宇宙产品:https://cloud.tencent.com/product/vr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux无文件渗透执行ELF

02 技术核心 这里向大家介绍一个linux系统的底层调用函数memfd_create(2),它在内核3.17引入,会创建一个匿名文件并返回一个文件描述符指向它,该文件表现常规文件类同, 可以进行修改...这就是可以被攻击者所利用的,如果有办法将需要执行elf通过memfd_create(2)写入内存中进行执行的话就可以达到我们的目的。 ?...当然我们使用perl传递memfd_create(2)的原始系统调用号MEMFD_CLOEXEC的数字常量, 这两个都可以在/usr/include的头文件中找到。...这里我们已经获取到了memfd_create(2)的系统调用码(在64位操作系统为319)MFD_CLOEXEC(0x0001U),这时候我们就可以使用perl的syscall函数来调用memfd_create...可以看到我们的elf文件最终以匿名文件的方式在内存中被加载执行了,匿名文件运行的程序与运行于普通文件的程序之间唯一真正的区别是/proc/pid/exe符号链接。

5.5K80
  • fireELF:无文件Linux恶意代码框架

    默认情况下附带了'memfd_create',这是一种内存完全运行linux elf可执行文件的新方法。 截图 ? ?...能够缩小payloads 能够通过将payloads上传到pastebin来缩小payloads,然后创建一个与python <= 2.7兼容的非常小的stager 输出已创建的payloads到文件 能够URL...或本地二进制文件创建payloads 包含的 payload memfd_create 这是一个linux系统的底层调用函数,它在内核3.17引入,会创建一个匿名文件并返回一个文件描述符指向它,该文件表现常规文件类同..., 可以进行修改,截断,内存映射等等,但不同的是,它存在于RAM当中。...这就是可以被攻击者所利用的,如果有办法将需要执行elf通过memfd_create写入内存中进行执行的话就可以达到我们的目的。 创建 Payload 除此之外,用户还可以开发自己的payload。

    1.1K10

    runc 1.0-rc7 发布之际

    如果你还不了解 runc 是什么,以及如何使用它,请参考我那篇文章。本文中,不再对其概念用法等进行说明。...重新执行 runc ; (这是为了确保之后即使被攻击/替换也操作的还是内存的这个只读的 runc) 经过以上的操作,就基本修复了 CVE-2019-5736 。...涉及到了系统调用 memfd_create(2) fcntl(2) 增加了系统调用,那自然就要看内核是否支持了。...注意: memfd_create 等相关系统调用,也被加入到了 Debian 3.16 Ubuntu 14.04 updates ,当然也被反向移植到了 CentOS 7.3 内核 3.10.0-...(Red Hat 给 CentOS 7.x 的 3.10 内核上反向移植了很多特性) 内存相关 从上面的说明,也很容易可以看到, 内存使用上会有所增加,不过之后已做了修复。这里不再进行展开。

    68830

    emp3r0r:dropperELF加密壳

    根据sektor7的文章,思路大致是: 加载libc到当前python进程 使用mmap分配一块具有写入执行权限的内存区域 把shellcode写进去 cast我们的shellcode buffer...首先,在linux,大部分情况下,我们可以修改子进程的内存(/proc/pid/mem)。...思路是把agent的ELF文件进行AES加密,拼接到stub上,stub运行的时候,会定位原ELF的位置,将它解密。 解密之后用memfd_create给它找个匿名内存fd,写进去,并执行。 ?...内存启动 自Linux 3.17之后,memfd_create可以返回一个匿名的内存区块,让用户可以像使用普通的FILE *一样使用它。所以我们的packer首选这个启动方式。 ?...这个功能让你进一步运行cobalt strike或其它工具变得更加方便隐蔽 3.用dd实现的一个dropper

    1.1K10

    新的 PyPI 包提供无文件 Linux 恶意软件

    但经过仔细分析观察,该软件包在用户 Linux 机器上暗中运行加密矿工(直接用户的 RAM ),这种技术主要由无文件的恶意软件和加密器采用。...该软件包可以远程服务器获取 Linux 可执行文件并执行,以将 ELF 文件(“memfd”)直接放入内存,它是一个可能通过“memfd_create”系统调用创建的门罗币加密矿工。...研究人员发现了其它恶意软件包 研究人员发现,“像 memfd_create”这样的 Linux 系统调用使程序员能够在 RAM 投放 “匿名 ”文件,而不是将文件写入磁盘。...此外,由于“secretslib”包在运行时会立即删除“tox”,并且“tox”注入的加密货币代码驻留在系统的易失性内存(RAM),而不是硬盘驱动器,因此恶意活动几乎没有留下任何痕迹,某种意义上讲可以说是相当...“secretslib”背后的威胁攻击者使用了为阿贡国家实验室(ANL.gov)工作的工程师名字,该实验室是位于伊利诺伊州的科学工程研究实验室,由 UChicago Argonne LLC 为美国能源部运营

    93010

    使用 Bash 脚本 SAR 报告获取 CPU 内存使用情况

    大多数 Linux 管理员使用 SAR 报告监控系统性能,因为它会收集一周的性能数据。但是,你可以通过更改 /etc/sysconfig/sysstat 文件轻松地将其延长到四周。...脚本 1: SAR 报告获取平均 CPU 利用率的 Bash 脚本 该 bash 脚本每个数据文件收集 CPU 平均值并将其显示在一个页面上。...SAR 报告获取平均内存利用率的 Bash 脚本 该 bash 脚本每个数据文件收集内存平均值并将其显示在一个页面上。...SAR 报告获取 CPU 内存平均利用率的 Bash 脚本 该 bash 脚本每个数据文件收集 CPU 内存平均值并将其显示在一个页面上。...它在同一位置同时显示两者(CPU 内存)平均值,而不是其他数据。 # vi /opt/scripts/sar-cpu-mem-avg.sh#!

    1.9K30

    无文件执行:一切皆是shellcode (上)

    有一个大胆的想法: ELF文件能否直接转化为shellcode 毕竟开发ELF的门槛还是挺低的 于是我就搜了一下elf2shellcode,没找到什么有用的项目,在寻找的过程,找到了windows上的...使用说明 这个项目有趣的地方是 将exe转化为shellcode,转化后的文件依然是完整的PE文件,不仅可以单独运行,也可以通过shellcode的方式运行。...在项目的release页面,根据自身的系统下载runshc pe2shc文件: ?...使用pe2shc.exe转换您选择的PE: pe2shc.exe [output path] 使用runshc.exe运行输出文件,并检查转换是否正常: runshc.exe...主要做了三件事: 读取exe文件到缓冲区 给exe文件分配可读可写可执行的内存,并将缓冲区的内容复制到这段内存 内存执行代码 基本上shellcode的执行方式是一样的,看来真的是将PE文件转化为了

    3.9K20

    运行原理及使用场景看ApacheNginx

    Apache 概述 Apache HTTP Server是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数计算机操作系统运行,由于其跨平台安全性。...Apache还有一个重要的组件就是APR(Apache portable Runtime Library),即Apache可移植运行库,它是一个对操作系统调用的抽象库,用来实现Apache内部组件对操作系统的使用...在Unix系统,父进程通常以root身份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。UserGroup指令用于配置子进程的低特权用户。...等)系统资源初始化(例如日志文件、共享内存段等)工作。...Web server将CGI环境变量标准输入发送到FastCGI子进程。 FastCGI子进程完成处理后将标准输出错误信息同一连接返回Web Server。

    49820

    运行原理及使用场景看ApacheNginx

    Apache 概述 Apache HTTP Server是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数计算机操作系统运行,由于其跨平台安全性。...Apache还有一个重要的组件就是APR(Apache portable Runtime Library),即Apache可移植运行库,它是一个对操作系统调用的抽象库,用来实现Apache内部组件对操作系统的使用...在Unix系统,父进程通常以root身份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。UserGroup指令用于配置子进程的低特权用户。...系统资源初始化(例如日志文件、共享内存段等)工作。...Web server将CGI环境变量标准输入发送到FastCGI子进程。 FastCGI子进程完成处理后将标准输出错误信息同一连接返回Web Server。

    2K70

    无命令反弹shell-逃逸基于execve的命令监控(上)

    优点 高定制化,系统调用层面获取完整信息。 缺点 开发难度大,非常考验开发人员的技术功底。 兼容性差,需针对不同发行版内核版本进行定制测试。...memfd_create()会创建一个匿名文件并返回一个指向这个文件的文件描述符.这个文件就像是一个普通文件一样,所以能够被修改,截断,内存映射等等.不同于一般文件,此文件是保存在RAM.一旦所有指向这个文件的连接丢失...,那么这个文件就会自动被释放 这就是说memfd_create创建的文件是存在与RAM,那这个的文件名类似 /proc/self/fd/%d,也就是说假如我们把 ls命令bin文件使用memfd_create...写到内存,然后在内存使用execve执行,那看到的不是 ls,而是执行的 /proc/self/fd/%d ,从而实现了进程名称混淆 无文件。...4.1 elf loader elf loader的作用,简单来讲是将elf文件读到内存,然后将eip指针指向elf的入口即可,这样就和shellcode一样直接运行了。

    1.6K20

    如何在 Linux 内存 CPU 使用率查找运行次数最多的进程

    大多数 Linux 用户使用预装的默认系统监控工具来检查内存、CPU 使用率等。在 Linux ,许多应用程序作为守护进程在系统后台运行,这会消耗更多的系统资源。...在 Linux ,您可以使用各种小工具或终端命令,也可以使用一个命令按内存 CPU 使用率显示所有正在运行的进程。检查 RAM CPU 负载后,您可以确定要杀死的应用程序。...在这篇文章,我们将看到使用这些命令按内存 CPU 使用率显示正在运行的进程的ps命令。 在 Linux ,ps 代表进程状态。...以下ps命令将按内存 CPU 使用情况打印正在运行的进程的总体状态。 图片 您还可以运行一个简短的命令来查看特定包的 CPU 内存使用情况。...请您的软件包列表打开该应用程序并检查基于图形用户界面的系统使用情况。 小结 ps是一个预装系统工具,所以我们不需要在我们的 Linux 机器上进行任何额外的安装。

    3.9K20

    宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇)

    你在Linux敲ipcs命令看到的share memory就是这种共享内存: ? 下面写一个最简单的程序来看共享内存的写端sw.c: ? 以及共享内存的读端sr.c: ? 编译准备运行: ?...下面运行swsr: ? 我们发现sr打印出来的sw写进去的是一致的。这个时候我们再看下free: ?...POSIX的共享内存,仍然符合我们前面说的tmpfs的特点,在运行了sw,sr后,再运行pswpsr,我们发现free命令再次戏剧性变化: ?...采用memfd_create()的场景下,我们同样可以用某种法器,来控制共享内存的shrink、growwrite。...在支持memfd_create()后,我们应尽可能地使用这种方式来替代传统的POSIXSYS V,基本它也是一个趋势,比如我们在wayland相关项目中能看到这样的patch: ?

    45.6K1313

    Linux 阻碍国产操作系统进程?

    在《攻克 Linux 系统编程》,我们解释了的 ELF 文件头中指定的程序入口地址,各个节区在程序运行时的内存排布地址等,指的都是在进程虚拟空间中的地址。...栈堆分别向相对的方向增长,系统会有相应的保护措施,阻止越界行为发生。 在 Linux 系统使用如下命令可查看一个运行的进程的内存排布。 ?...以上输出的内容,可以直观看到进程的段、堆区,动态链接库加载区,栈区的逻辑地址排布,以及每块内存区分配到的权限等。 除此之外,还有两块 vdso vsyscall 内存区。...02 进程的启动 用户角度来看,启动一个进程有许多种方式,可以配置开机自启动,可以在 Shell 手动运行,也可以脚本或其他进程启动。...2.3 fexecve() 函数 glibc 2.3.2 版本开始提供 fexecv() 函数,它与 execve() 的区别在于,第一个参数使用的是打开的文件描述符,而非文件路径名。

    2K30

    「Linux 底层原理」理解进程内存布局,掌握程序动态

    在《攻克 Linux 系统编程》,我们解释了的 ELF 文件头中指定的程序入口地址,各个节区在程序运行时的内存排布地址等,指的都是在进程虚拟空间中的地址。...栈堆分别向相对的方向增长,系统会有相应的保护措施,阻止越界行为发生。 在 Linux 系统使用如下命令可查看一个运行的进程的内存排布。 ?...以上输出的内容,可以直观看到进程的段、堆区,动态链接库加载区,栈区的逻辑地址排布,以及每块内存区分配到的权限等。 除此之外,还有两块 vdso vsyscall 内存区。...02 进程的启动 用户角度来看,启动一个进程有许多种方式,可以配置开机自启动,可以在 Shell 手动运行,也可以脚本或其他进程启动。...2.3 fexecve() 函数 glibc 2.3.2 版本开始提供 fexecv() 函数,它与 execve() 的区别在于,第一个参数使用的是打开的文件描述符,而非文件路径名。

    2K30

    2.2 堆在整个jvm内存运行流程以及jvisualvm工具的使用

    内存回收的角度来看, 由于现在收集器基本都采用分代收集算法, 所以Java堆可以细分为:新生代(Young)老年代(Old)。...JVM 每次只会使用 Eden 其中的一块 Survivor 区域来为对象服务,所以无论什么时候,总是有一块 Survivor 区域是空闲着的。...Eden from 区域中存活的对象 ),则使用复制算法将这些仍然还存活的对象复制到另外一块 Survivor 区域 ( 即 to 区域 ) ,然后清理所使用过的 Eden 以及 Survivor...找局部变量, 方法区找静态变量. GC Root出发, 找到所有的引用变量. 这些变量可能会引用其他的变量, 变量还会引用其他变量....那就是没有对象引用他了.通常会回收这块内存空间地址 这个时候, 如果主线程也在运行, 刚好有一个变量存放在这个内存地址了, 而你并行的触发了GC, 这时候程序就发生混乱了.

    1.1K20

    KCon议题讲解——进退维谷:runC的阿克琉斯之踵

    该方案的原理是利用memfd_create内存创建一个宿主机runC的复制体,加入容器内执行的是该内存文件,而不是真正的宿主机runC。...其中,ELF头是非常重要的数据结构,它记录了整个ELF文件的元信息。我们可以使用Linux系统的readelf文件来解析ELF数据结构。...思路二并不修改原ELF文件的入口地址,而是修改runC的控制流改变点(如jmp、call等指令),runC代码逻辑中间转向执行载荷,载荷执行完后跳转到原控制流改变点处继续执行。...结合思路一,这些发现进一步演绎成两个更直接的问题: 问题一:修改EP后,如何顺利完成控制流载荷到OEP的转移? 由于PIEASLR的存在,runC加载到内存后的实际入口地址是随机变化的。...如图13所示,两种场景分别涉及到DevOps流程的开发、依赖解决运行三个方面。

    61030
    领券