linux ptrace,Linux ptrace如何不安全或包含竞争条件?

主要问题是许多系统调用参数(如文件名)作为用户空间指针传递给内核.任何允许同时运行且对指针指向的内存具有写访问权限的任务可以在主管检查这些参数并在内核对其进行操作之前有效地修改这些参数.当内核跟随指针时,指向的内容可能已被另一个可访问该内存的可调度任务(进程或线程)故意更改.例如:

Thread 1 Supervisor Thread 2

-----------------------------------------------------------------------------------------------------

strcpy(filename,"/dev/null");

open(filename,O_RDONLY);

Check filename - OK

strcpy(filename,"/home/user/.ssh/id_rsa");

(in kernel) opens "/home/user/.ssh/id_rsa"

阻止这种情况的一种方法是禁止使用CLONE_VM标志调用clone(),另外防止创建可写的MAP_SHARED内存映射(或至少跟踪它们,以便拒绝任何尝试直接引用来自此类数据的系统调用一个映射).在允许系统调用继续之前,您还可以将任何此类参数复制到非共享跳出缓冲区中.这将有效地防止任何线程应用程序在沙箱中运行.

另一种方法是SIGSTOP跟踪每个潜在危险系统调用中的其他进程,等待它们实际停止,然后允许系统调用继续进行.返回后,然后SIGCONT它们(除非它们已经停止).不用说,这可能会对性能产生重大影响.

(在堆栈上传递的syscall参数和共享打开文件表也存在类似的问题).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值