目录:
数据泄露
未经授权的数据修改/删除
资源消耗
具有可预测名的临时文件
任意用户可读写的命名管道
文件竞争
1. 数据泄露: 一般有以下几个危险> 配置数据的泄露,敏感应用程序的信息泄露,数据库架构与连接详悉信息的泄露,未授权的访问与网络窃听。用户和程序在/tmp建文件,如果用户没有指定的用户权限,一般也就应用了默认中umask,值为022,这时这个文件被赋予了所有人都可读的许可权。在一个多用户系统中,很容易在/tmp中找到一些包含数据库的口令,机密的商业数据,敏感的登入信息和包含加密口令的内核文件等脚本的副本。目录与共享区域同样有类似的问题也很容易渗透。
如果是将tmpdir环境变量设置为私人的,单用户临时目录。保证在系统脚本启动时系统范围内umask是027,可以在(~user/.profile文件)中指定umask 值。再增加cron作业,检查启动脚本中不合适的umask设置。在看下服务器上的/tmp和其他的目录,对/tmp执行spot检查。更好的就是用一个软件(tmpwatch)来监视/tmp目录下的可预测文件名。调用 umask(2) 来强制将文件设置为受限的值,只需要调用库函数 mkstemp(3),就可以打开文件。要注意的是, mkstemp(3) 不直接支持 TMP 或 TMPDIR 环境变量
2. 未经授权的数据修改/删除:这种风险分2种(1)由于用户的疏忽,将文件的的写权限对所有用户开放(2)目录的写权限对所有用户开放。如果在一个写权限对所有用户都开放的目录中创建了一个文件,那么任意用户都可以修改。删除该文件。在通过NFS共享的文件系统中在存在这样的问题,这种情况中的唯一例外是目录设置有粘代(sticky)位。如果文件的许可权限是被锁住的,那只有文件的拥有者可以对文件进行操作。这种情况一般不明显,因为可写的目录可能是当前目录的父目录,也可能是父目录的父目录的父目录。一个很极端的可能就是,如果根目录(/)是任何人可写的,这样攻击者就可以替换文件系统中的任何文件。任何直接属于根目录(/)下的目录都会发生这样的情况
只要是禁用系统内核中通过ulimit命令创建文件的方式(不要同内核的crash dumps命令弄混)。目前的UNIX系统内核在set-uid程序出现问题时会拒绝转储内核,这是因为有可能回泄露敏感信息。但是,特权守护程序中和应用程序进程也会转储内核,从而将大量的敏感信息写入所有用户可读的内核文件。想验证是不是有这样的漏洞可以同过发一个QUIT信号来检查无法工作的网络服务,查看是否在当前的工作目录中转储存了内核(/proc或者lsof)
PS:AIX set-uid set-gid 中的安全漏洞[来自绿盟]
setuid root 程序:
/usr/bin/setsenv *
[ x=$s ]
/usr/lib/lpd/digest *
[ $s x ]
/usr/sbin/portmir *
[ -t $s -d x ]
/usr/bin/enq
[ -M $s ]
/usr/bin/setclock
[ $s ]
/usr/lib/lpd/pio/etc/pioout
[ PIO{DEVNAME,PTRTYPE}=$s ]
setgid printq 程序:
/usr/lib/lpd/piobe *
[ PIOSTATUSFILE=x PIO{TITLE,VARDIR}=$s ]
/usr/lib/lpd/pio/etc/piomkapqd *
[ -p $s ]
/usr/bin/splp
[ $s ]
后面标*号的程序表明已经被证实确实可以被用来攻击的程序。
在内核配置文件中设置chown_restricted变量为真来预防文件权限的移交,但是许多的UNIX版本不允许文件giveaways。也可以考虑通过getfacl与setfacl命令(也就是sloaris)使用扩展ACL(在被支持的部分),这样可以扩展在inode中存放的访问信息 [ 有关set-uid程序中的编程错误,是UNIX一个重要的安全威胁 ]
3. 资源消耗:每个文件系统都有固定的文件节点。不论系统是不是还有剩余空间,当所有的节点被分配时,系统就无法创建任何新文件,有写系统中不可写涉及到/tmp文件时,就会使整个系统崩溃。除非在系统内核中已经将文件giveaways(非ROOT用户修改文件所有权的能力)设置为无效,否则恶意用户为了嫁祸于其他用户而通过运行chown命令将自己创建的文件修改成被攻击用户的所有权,占用系统中的所有的剩余空间。这个问题就好解决了关闭一些起不常用却存在安全隐患的应用、对一些保存有用户信息及其口令的关键文件(如/.rhost、etc/host、passwd、shadow、group)等,再就是把系统升级
4. 具有可预测文件名的临时文件:如果一个程序在other用户具有写权限的目录中(一般是/tmp)创建的是可以预测名字的文件,那么该程序就可以利用来改写或者删除文件。其他用户可以提前猜测文件的名字并创建一个到系统文件的符号连接。当该程序运行时,就会向系统文件中写入数据,造成系统崩溃。如果这是一个用户口令文件,用户就会遭到拒绝服务攻击。不要信任可以被黑客设置的文件名。Linux 和 Unix 允许用任意的字符序列来作为文件名,所以,如果正在使用一个来自攻击者的目录或者接受他的一个文件名,一定要有所准备。黑客可以创建以"-"开头的文件名,或者含有"&"等特殊字符的文件名。
检查下自己的shell脚本,将所有公共可写的目录引用更改成自己的/tmp目录。在创建文件时不要依据时间,日期或者进程ID,或者一个功能很小的伪随机数产生器起名。还有要注意的就是umask 命令是一个内置的shell 命令,可以从shell 提示符下直接运行( umask 027 )
[1]
文章来源于领测软件测试网 https://www.ltesting.net/