seed-labs 竞态条件漏洞

2024-06-13 22:18
文章标签 seed labs 竞态 漏洞 条件

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

软件安全-竞态条件漏洞

  • 竞态条件漏洞
    • 概述
    • 一个常见的漏洞
      • 实验
    • 防御手段
      • 原子化
      • 重复检查和使用
      • 粘滞符号链接保护
      • 最小权限原则
    • problems

竞态条件漏洞

概述

竞态条件是指一个系统或程序的输出结果取决于其他不可控制事件执行的时间顺序

一个常见的漏洞

当一个程序的两个并发线程同时访问共享资源时,如果执行时间和顺序不同,会产生影响,这时就称作发生了竞态条件
检查时间和使用时间。如果条件检查和实际资源使用之间存在一小段时间,如果这段时间内发生变化,则建立在检查结果上的 使用的授权就有安全问题,这就是检查于使用时间差漏洞。

实验

#include <unistd.h>
#include <stdio.h>
#include <string.h>int main()
{char *fn = "/tmp/XYZ";char buffer[60];FILE *fp;scanf("%50s", buffer);if (!access(fn, W_OK)){fp = fopen(fn, "a+");fwrite("\n", sizeof(char), 1, fp);fwrite(buffer, sizeof(char), strlen(buffer), fp);fclose(fp);}else printf("No permission \n");return 0;
}
ubuntu 14/16: sudo sysctl -w fs.protected_symlinks=0
./attack_process

防御手段

1)消除时间差
2)阻止其他人在这个时间内做事情
3)增大攻击者的难度
4)在攻击者胜利后,阻止他造成破坏

原子化

如果是系统本身可以通过上锁来实现原子化,对于文件,在检查和使用之间把目标文件锁上,这样其他进程就没发使用了

重复检查和使用

让竞争者胜利变动艰难,一个有趣的方案被提出,在代码中加入更多的竞态条件,攻击者只有全赢才能成功

粘滞符号链接保护

大多数TOCTTOU竞态条件漏洞与/tmp目录中的符号链接有关,因此自带了一个内置保护机制防止程序在特定情况下跟随符号链接

在linux文件系统中,文件目录有个比较特殊的比特位,叫粘滞位比特,当设置这个比特位时,只有文件所有者,目录所有者,或者root用户才能重新命名

最小权限原则

通常漏洞问题包含了程序的权限大于实际需求权限,所有违反了最小权限原则,

seteuid
设置当前进程的有效用户ID,如果当前进程的有效用户ID是root,那么参数uid参数可以是任意值setuid 
它设置当前进程的用户ID,如果当前进程有效用户Id不是root,这个函数行为与seteuid一致,

problems

1 Does the following program have a race condition vulnerability?if (!access("/etc/passwd", W_OK)) {
/ the real user has the write permission/
f = open("/tmp/X", O_WRITE);
write_to_file(f);
}
else {
/ the real user does not have the write permission /
fprintf(stderr, "Permission denied\n");
}
不,/etc/passwd是一个受保护的文件,普通用户没有对它的写访问权限。所以if块永远不会被执行。2 How many race conditions does attackers have to win in the following program?int main()
{
struct stat stat1, stat2;
int fd1, fd2;
if (access("tmp/XYZ", O_RDWR)) {
fprintf(stderr, "Permission denied\n");
return -1;
}
else fd1 = open("/tmp/XYZ", O_RDWR);if (access("tmp/XYZ", O_RDWR)) {
fprintf(stderr, "Permission denied\n");
return -1;
}
else fd2 = open("/tmp/XYZ", O_RDWR);// Check whether fd1 and fd2 have the same inode.
fstat(fd1, &stat1);
fstat(fd2, &stat2);if(stat1.st_ino == stat2.st_ino) {
write_to_file(fd1);
}
else {
fprintf(stderr, "Race condition detected\n");
return -1;
}
return 0;
}假设所有文件名都是/tmp/XYZ,而不是tmp/XYZ,这在某些地方是不正确的。第一个竞争是access和fd1open之间的竞争,我们必须创建一个从/tmp/XYZ到要更改的文件的符号链接。第二个是在fd1 open和第二次访问之间,我们必须更新符号链接并将其指向用户可以访问的文件。第三种是在第二次访问和fd2开放之间,类似于第一次比赛。In the open() system call, it first checks whether the user has the required permission to access the target file, then it actually opens the file. There seems to be a check-and-then use pattern. Is there a race condition problem caused by this pattern?
在open()系统调用中,检查用户权限和打开文件是一个原子操作,因此只有open()调用不可能有竞争条件。The least-privilege principle can be used to effectively defend against the race condition attacks discussed in this chapter. Can we use the same principle to defeat buffer-overflow attacks? Why or why not? Namely, before executing the vulnerable function, we disable the root privilege; after the vulnerable function returns, we enable the privilege back.
如果问题是指在strcpy()调用之前禁用根权限,然后再启用它,那么它将不起作用,因为实际的攻击发生在我们从bof()函数返回时。如果我们在bof()调用之前禁用root权限,在调用之后启用它,那么我们就可以防止攻击。If we can lock a file, we can solve the race condition problem by locking a file during the check-and-use window, because no other process can use the file during the time window. Why don't we use this approach to solve the race condition problems discussed in this chapter?A file is locked out to other processes only if it's already open. During the check-and-open process, it's impossible to lock a file. Any locks created can be ignored by the malicious process.
只有文件已经打开时,它才会被锁定到其他进程。在检查和打开过程中,不可能锁定文件。恶意进程可以忽略创建的任何锁。**加粗样式**

这篇关于seed-labs 竞态条件漏洞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SQL Server中,添加数据库到AlwaysOn高可用性组条件

1、将数据添加到AlwaysOn高可用性组,需要满足以下条件: 2、更多具体AlwaysOn设置,参考:https://msdn.microsoft.com/zh-cn/library/windows/apps/ff878487(v=sql.120).aspx 注:上述资源来自MSDN。

【漏洞复现】畅捷通T+ keyEdit.aspx SQL漏洞

0x01 产品简介 畅捷通 T+ 是一款灵动,智慧,时尚的基于互联网时代开发的管理软件,主要针对中小型工贸与商贸企业,尤其适合有异地多组织机构(多工厂,多仓库,多办事处,多经销商)的企业,涵盖了财务,业务,生产等领域的应用,产品应用功能包括: 采购管理、库存管理、销售管理、生产管理、分销管理、零售管理、往来管理、现金银行管理、总账、移动应用等,融入了社交化、移动化、电子商务、互联网信息订阅等元素

汽车网络安全 -- 漏洞该如何管理

目录 1.漏洞获取途径汇总 2.CAVD的漏洞管理规则简析 2.1 通用术语简介 2.2 漏洞评分指标 2.3.1 场景参数 2.3.2 威胁参数  2.3.3 影响参数 2.3 漏洞等级判定 ​3.小结 在汽车网络安全的时代背景下,作为一直从事车控类ECU基础软件开发的软件dog,一直在找切入点去了解车联网产品的各种网络安全知识。 特别是历史上各种汽车网络安全事件、

线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))

1通信机制:互斥与同步 线程的互斥通过线程的互斥锁完成; 线程的同步通过无名信号量或者条件变量完成。 2  互斥 2.1 何为互斥?         互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢到资源,它可以访问这个变量,没有争抢到资源的线程不能够访问这个变量。那这种只有一个线程能够访问到这个变量的现象称之为线程间互斥。 2.2互斥锁API 1.

XSS跨站攻击漏洞

XSS跨站攻击漏洞 一 概述 1 XSS概述 xss全称为:Cross Site Scripting,指跨站攻击脚本,XSS漏洞发生在前端,攻击的是浏览器的解析引擎,XSS就是让攻击者的JavaScript代码在受害者的浏览器上执行。 XSS攻击者的目的就是寻找具有XSS漏洞的网页,让受害者在不知情的情况下,在有XSS漏洞的网页上执行攻击者的JavaScript代码。 XSS是提前埋伏好

力扣SQL50 销售分析III having + 条件计数

Problem: 1084. 销售分析III 👨‍🏫 参考题解 Code select s.product_id,p.product_namefrom sales s left join product pon s.product_id = p.product_idgroup by product_idhaving count(if(sale_date between

yii2数据条件查询-where专题

yii2数据条件查询-where专题 条件查询 c u s t o m e r s = C u s t o m e r : : f i n d ( ) − > w h e r e ( customers = Customer::find()->where( customers=Customer::find()−>where(cond)->all(); $cond就是我们所谓的条件,条件的写法也根

修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)

修复漏洞 漏洞风险等级评定标准主机风险等级评定标准漏洞概括利用注册表修复漏洞查看修复后的漏洞 漏洞风险等级评定标准 危险程度危险值区域危险程度说明高7 <=漏洞风险值<= 10攻击者可以远程执行任意命令或者代码,或对系统进行远程拒绝服务攻击。中4 <=漏洞风险值< 7攻击者可以远程创建、修改、删除文件或数据,或对普通服务进行拒绝服务攻击。低0 <=漏洞风险值< 4攻击者可以获取

编程参考 - GCC的条件编译

4 Conditionals 条件是一种指令,它指示预处理器选择是否在传递给编译器的最终标记流中包含一段代码。预处理器条件可以测试算术表达式,也可以测试名称是否定义为宏,或者使用特殊的defined操作符同时测试这两种表达式。 A conditional is a directive that instructs the preprocessor to select whether o

Python武器库开发-武器库篇之ThinkPHP 5.0.23-RCE 漏洞复现(六十四)

Python武器库开发-武器库篇之ThinkPHP 5.0.23-RCE 漏洞复现(六十四) 漏洞环境搭建 这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装,我们进入 ThinkPHP漏洞环境,可以 cd ThinkPHP,然后通过 ls 查看可以搭建的靶场,目前 vulhub关于 ThinkPHP漏洞。可以搭建的靶场有五个。我们拿 5.0.