我一直在想一个场景,让用户(可以是任何人,可能是坏的意图)提交在linux PC上运行的代码(我们称之为基准节点)。 目标是为单线程例程创build一种自动化的基准testing环境。 假设一个网站向代理发布一些代码。 这个代理把这个代码交给基准节点,基准节点只有一个到代理的以太网连接,而不是互联网本身。
如果让一个用户在C / ASM代码上运行基准节点,会面临什么样的安全挑战? 做出以下假设:
该程序作为非特权用户运行
代理将有机会杀死基准节点上的进程(例如以无限循环为例)
代理能够重新启动基准节点(如果它回复…)
那么,这个用户空间程序实际上可能会使 *** 作系统崩溃,还是使代理不可用? 通过汇编,程序员可以基本上做他想做的任何事情(例如 *** 纵堆栈指针),我想知道linux在这方面的限制/强大。 我也知道进程可能需要与其他进程(shm)共享内存区域,这也可能在这里起作用。
任何有关这个问题的文献或文章都非常受欢迎。
如何在htaccess重写规则中将一个秘密令牌作为查询string附加安全性?
从应用程序调用命令行实用程序创build安全问题?
autoblock ip上暴力破解root(linux)
无法在windows 7中安装第三方windows服务
是linux fork不安全
沙盒解决scheme也可能是有趣的,但重要的是,cpu必须执行它在基准testing期间的100%的能力(至less在基准testing的核心上)。
如何在不显示密码的情况下在terminal中接受密码
在bash中有什么注射漏洞,如何防止它们?
在wordpress中,主题文件夹内的.PHP文件不运行,但返回404错误
Active Directory如何在设置新密码时比较用户以前的密码?
找出如果一个进程中断了当前进程
只是一个快速列表,我的头顶。 从本质上讲,如果你不相信用户至少有一点,你是在深陷困境:
文件系统 *** 作:删除或覆盖属于运行进程的用户的文件
侦听系统上发现的各种数据(文件,有时是同一用户的网络流量)
杀死用户的其他进程
直到OOM杀手开始杀死随机进程或(如果您有交换启用),直到机器减速到爬行
生成大量I / O以减慢系统速度
随意执行攻击(你肯定会在某个地方有一些未经修补的特权升级漏洞)
利用用户能够运行的任何软件的漏洞
在您的机器上托管DDoS网络或儿童色情文件服务器
将您的机器用作针对CIA和FBI服务器的攻击代理
天空才是极限…
听起来不是一个好主意。
那么,这个用户空间程序实际上可能会使 *** 作系统崩溃,还是使代理不可用?
是的,诸如产生大量进程,分配过多内存(导致使用交换文件)或排队大量磁盘I / O等技术将使机器不响应,导致您的主管进程无法及时运行。
如果你的主管代码最终被换出到磁盘上,那么即使它具有高优先级,它也不会运行,直到磁盘变得可用为止,由于寻道时间,这可能是非常长的延迟。
linux确实有ulimit可以防止其中的一些,请参阅限制linux中的用户可用的内存和cpu可以同样阻止恶意网络活动。 你也可以禁用swap并把程序chroot成tmpfs挂载。 但是一些恶作剧仍然是可能的。
那么,这个用户空间程序实际上可能会使 *** 作系统崩溃,还是使代理不可用?
那么从理论上说,你应该很难让 *** 作系统崩溃。 但是,那里有很多的错误报告说,在实践中比我们想的更可能。
另一方面,如果没有特别的预防措施,实现拒绝服务将是相当容易的。 想象一下,一个用户程序什么都不做,只是用数据包泛滥代理; 如果不能彻底拒绝服务,那么就会让事情变得令人尴尬的缓慢。
通过汇编,程序员可以基本上做任何他想做的事情(例如 *** 作堆栈指针),我想知道linux在这方面有多严格/强大。
但是,我们比这个好很多。 如果所有你需要的特权升级是“堆栈指针”安全作为一个字段将是一个总的笑话。 内核的目的是编写程序,不管程序如何,都可能导致内核崩溃。 如上所述,这是不完美的。
这个故事的寓意是,你真的不想在你关心的计算机上运行不可信的代码。 这里的股票答案将是一个检查点虚拟机:启动虚拟机,在虚拟机上运行不受信任的代码,然后在完成或超时之后,将虚拟机吹走。 这样持续的伤害是不可能的。 至于其他滥用行为,您的代理将阻止他们托管肮脏的互联网服务,这是很好的。 根据您的虚拟机情况,可能有很好的工具来限制cpu消耗和网络使用,这将有助于消除其他拒绝服务的可能性。
您提到需要cpu以满负荷运行。 硬件虚拟化是相当不错的,性能应该合理地反映在真实的系统上。
顺便说一句,以上没有任何特定于linux的东西; 所有可信的通用 *** 作系统都应该是真实的。
编辑:如果你真的坚持直接在硬件上运行,那么:
从只读设备启动(livecd或writeblocked硬盘驱动器)
系统中没有可写介质
添加一个熄灯服务器,可以根据代理的请求强制重置机器,以防拒绝服务; 为此存在商业解决方案
这本质上是给你虚拟机解决方案的功能,但在硬件上。
如果代码在正确配置的计算机上以受限帐户运行,则应该抵御许多基本类型的攻击(意外或恶意)。
程序员可以使用汇编的事实是无关紧要的 – 攻击可以用许多不同的语言编译 – 编译或其他。
主要问题是未知的安全问题或0day漏洞。 允许任何未经授权的程序运行是一种风险,如果有人设法利用允许提升权限的问题,那么就搞砸了。
一般建议使用沙盒,因为它们都限制了应用程序的功能,并且(如果设计正确的话)将流氓行为的损害降至最低。
程序组可以施加内存压力,导致机器无响应(尤其是当交换磁盘开始发生时)。 示例代码: perl -e '$_.="x"x1000000 while fork'
总结以上是内存溢出为你收集整理的C / asm程序在由非特权用户运行时对Linux有什么危害?全部内容,希望文章能够帮你解决C / asm程序在由非特权用户运行时对Linux有什么危害?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)