请选择 进入手机版 | 继续访问电脑版

专注代码检测 - 阅镜

 找回密码
 立即注册
热搜: 安装 代码
查看: 86|回复: 0

注意Time-of-check Time-of-use (TOCTOU) 条件竞争

[复制链接]

70

主题

70

帖子

230

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
230
发表于 2021-9-10 20:00:13 | 显示全部楼层 |阅读模式
TOCTOU: 软件在使用某个资源之前检查该资源的状态,但是该资源的状态可以在检查和使用之间更改,从而使检查结果无效。当资源处于这种意外状态时,这可能会导致软件执行错误操作。

当攻击者可以影响检查和使用之间的资源状态时,此问题可能与安全相关。这可能发生在共享资源(如文件、内存 ,甚至多线程程序中的变量 )上。在编程时需要注意避免出现TOCTOU问题。

例如,下面的例子中,该文件可能已经在检查和lstat之间进行了更新,特别是因为printf有延迟。

  1. struct stat *st;

  2. lstat("...", st);

  3. printf("foo");

  4. if (st->st_mtimespec == ...) {
  5.   printf("Now updating things\n");
  6.   UpdateThings();
  7. }
复制代码

TOCTOU难以修复,但是有以下缓解方案:

限制对来自多个进程的文件的交叉操作。
如果必须在多个进程或线程之间共享对资源的访问,那么请尝试限制”检查“(CHECK)和”使用“(USE)资源之间的时间量,使他们相距尽量不要太远。这不会从根本上解决问题,但可能会使攻击更难成功。
在Use调用之后重新检查资源,以验证是否正确执行了操作。
确保一些环境锁定机制能够被用来有效保护资源。但要确保锁定是检查之前进行的,而不是在检查之后进行的,以便检查时的资源与使用时的资源相同。

关联漏洞:
  1.   高风险-内存破坏

  2.   中风险-逻辑问题
复制代码
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋| 阅镜 ( 京ICP备2020034574号 )|网站地图|网站地图点击这里给我发消息

GMT+8, 2021-10-27 02:21 , Processed in 0.063882 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表