Linux不可读的文件跟踪
受影响的系统:Linux内核2.2.17
Linux内核2.2.16
Linux内核2.2.15
Linux内核2.2.14
Linux内核2.2.13
Linux内核2.2.12
Linux内核2.2.10
受影响的系统:
Linux内核2.4
描述:
是一个UNIX系统调用ptrace。它通常用于分析断点调试中的运行过程。GDB,strace和其他调试工具使用这个系统调用,Linux 2.2改成实现。x内核的内核,甚至更早的版本,有一个漏洞,允许攻击者获取敏感信息的未授权访问。
出于安全原因,普通用户不能使用ptrace()系统调用跟踪分析setuid程序,而不能使用这些调试工具与其他用户运行的进程。如果二进制文件是不可读的酒吧用户foo(R权限删除)、foo用户无权使用ptrace()系统调用跟踪条执行程序。
所有这些限制是在实施检查的ptrace(pt_attach,…)。然而,当ptrace()用于跟踪的子进程,它不能正确地检查安全限制。bar程序可以为富用户执行。即使它们不可读,它们也可以根据子进程跟踪bar程序的执行过程。在这个时候,我们可以观察栏程序内存映射,恶意用户可以利用这个技术来获取敏感信息,这原本是敏感信息通过chmod go-r防止这种窥探像琴弦吧。这个漏洞可以被用来进一步损害系统的安全性。
试验方法:
警告
下列程序(方法)可能是攻击性的,仅供安全研究和教学使用,用户的风险自负!
下一个例子是使用ptrace(pt_attach,…)来追踪一个非可执行文件:
$ ls -l测试文件
——————×1×rwx根216916个12月4日11:59
美元/个。
等待...假设测试文件不能运行后,立即结束
从另一个shell执行跟踪命令:
11535个信息元P 11535是假设的过程
附:ptrace(ptrace_attach,…):不允许操作
因为测试文件是不可读的,跟踪失败,这是正确的安全限制。
--------------------------------------------------------------------------
下一个例子成功的跟踪不可读的文件使用子过程:
$ strace测试文件
sys_197(0x3,0xbffff650,0x40197d40,0x80cca38,0x3)= - 1 enosys(功能未实现)
fstat(3,{ st_mode = s_ifreg | st_size = 0644,1744,…})= 0
mmap(0, 4096,prot_read | prot_write,map_private | map_anonymous,- 1, 0)= 0x40015000
…
建议:
将内核升级到2.4