C/asm程序在没有特权的用户运行时对Linux有什么害处?

Yng*_*dal 5 c linux security benchmarking assembly

我一直在考虑一个场景,让用户(可能是任何人,可能有不良意图)提交在Linux PC上运行的代码(让我们称之为基准节点).目标是为单线程例程创建一种自动基准测试环境.假设一个网站将一些代码发布到代理.此代理将此代码交给基准节点,基准节点只有代理的以太网连接,而不是互联网本身.

如果允许任何用户发布C/asm代码在基准节点上运行,那么面临哪些安全挑战?做出以下假设:

  • 该程序作为非特权用户运行
  • 代理将有机会终止基准节点上的进程(例如,采用无限循环的方案)
  • 代理能够重启基准节点(如果它回复...)

那么,实际上这个用户空间程序是否可能导致操作系统崩溃,或者使机器对代理不可用?通过汇编,程序员基本上可以做任何他想做的事情(例如操纵堆栈指针),我想知道Linux在这方面有多么限制/强大.我也知道进程有可能请求共享内存区域与其他进程(shm),这可能也在这里发挥作用?

任何有关此主题的文献或文章都是非常受欢迎的.

沙盒解决方案也可能很有趣,但重要的是CPU必须在基准测试期间执行100%的能力(至少在运行基准测试的核心上).

Mic*_*ski 5

只是快速列出我的头脑.从本质上讲,如果你至少不信任用户,你就会陷入困境:

  • 文件系统操作:删除或覆盖属于运行该进程的用户的文件
  • 窥探系统中发现的各种数据(文件,有时是同一用户的网络流量)
  • 杀死用户的其他进程
  • 消耗内存,直到OOM Killer开始杀死随机进程或(如果启用了交换),直到机器减速到爬行
  • 生成大量I/O以减慢系统速度
  • 随意执行攻击(你肯定会在某处有一些未修补的特权升级漏洞)
  • 利用用户能够运行的任何软件中的漏洞
  • 在您的计算机上托管DDoS网络或儿童色情文件服务器
  • 使用您的计算机作为代理来启动对CIA和FBI服务器的攻击
  • 天空才是极限...

听起来不是一个好主意.


Ben*_*igt 3

那么,在实践中,这个用户空间程序是否可能导致操作系统崩溃,或者使机器对代理不可用?

是的,诸如生成过多进程、分配过多内存(导致交换文件使用)或对大量磁盘 I/O 进行排队等技术都会使计算机无响应,从而使您的主管进程无法及时运行。

如果您的管理程序代码最终被换出到磁盘,那么即使它具有高优先级,它也不会运行,直到磁盘可用为止,由于寻道时间,这可能会导致很长的延迟。

Linux 确实ulimit可以防范其中的一些问题,请参阅限制 Linux 中用户可用的内存和 cpu 并且同样可以阻止恶意网络活动。您还可以禁用交换并将chroot程序装入tmpfs安装中。但一些恶作剧仍然是可能的。