|
Message-ID: <20110728104134.GA4133@albatros> Date: Thu, 28 Jul 2011 14:41:35 +0400 From: Vasiliy Kulikov <segoon@...nwall.com> To: kernel-hardening@...ts.openwall.com Cc: security@...nel.org Subject: Re: kernel infoleaks (CC'ed security@...nel.org. This is not a high severity and security@ might already know about it, but better safe than sorry.) On Fri, Jul 22, 2011 at 18:49 +0400, Vasiliy Kulikov wrote: > Hi, > > On Tue, Jul 19, 2011 at 13:27 +0400, Vasiliy Kulikov wrote: > > Now about newly created tasks. While thinking about arguments to > > agitate to restrict world access to procfs files and taskstats, I've > > identified some sources of possible infoleaks that could be used in side > > channel attacks. The files/interfaces are as follows: > > > > /proc/PID/{limits,sched_*,stat,statm,status,wchan} > > inotify_add_watch(2) > > ustat(2) > > *statfs(2) > > *statvfs(2) > > sysinfo(2) > > > > I didn't precisely investigate in what situations these infoleaks might > > be useful to an attacker, but I found some cases where inotify > > disclosures somewhat private information. I'll post about it in a few > > days when I adjust my thoughts. > > This is a follow up of kernel possible infoleaks. I've divided them > into groups. > > * procfs > > Historically almost all /proc/PID/* files are readable by all users, IMO > without actual need. > > > - sched_* files might be used to simplify timing attacks. "classical" > timing attack would measure the time delta, but such measurement might > be smashed by a scheduler. Here the kernel grants already measured > numbers. > > - status reveals memory usage. It might reveal whether a mmap() is > done, how much stacks was used, how much memory is locked. If > malloc() expands the heap, it is visible too. > > Also I think the knowledge of task's capabilities is something other > users should not care of (the same for limits). > > - stat, statm reveal process' times and rss. > > - mountinfo, mounts might reveal path information of private namespaces. > > > * inotify_add_watch(2) > > From the manpage: "The inotify API provides a mechanism for monitoring > file system events.". It allows users to monitor fs changes (e.g. for > re-indexing) and accesses. I see 2 issues here: > > 1) While fs changes are monitor'able via getdents(2)/*stat(2), it is a > poll'able mechanism and it is exposured to races (unlike inotify > delivery "for sure"). If it is *known* that some fs activity exposes > some private information then inotify simplifies gathering this > information. Surely it depends on scheduler load, disk load, number of > files in the directory, etc. etc. But if the event is very rare (e.g. > a daily/weekly cron job) even the 20x decrease of race win chance is > good. > > 2) Inotify exposes information not gather'able (AFAICS) via other means: > file reads, file writes, the file descriptor associated with the file is > closed (and closing of RO fd and RW fd are different events). > > Some ways to (ab)use inotify: > > - If there is a PAM module with "requisite" control field, the > following modules read some /etc/ files and the directories where > these files are located are readable by a user, he may learn that this > specific requisite module failed. This might be a /etc/pam.d/ > misconfiguration though. > > - If there is a PAM module that checks user's authority against 2 files > sequentially, then watching for accesses of the second file reveals > information whether the first check failed (similar to requisite). > This might be a PAM module infoleak though, which is probably > identifiable via time measurement. > > - Watching for /etc/passwd and /etc/.pwd.lock might reveal information > whether a user changes his password. It is not inotify specific, the > same can be learned via stat'ing the lock file. (Note: watching for > passwd process in /proc/ is not sufficient as a user is able to > terminate passwd without actual pass change.) > > - Watching for /dev/null opening/closing may reveal whether significant > events happened (e.g. privilege dropping). I couldn't find any such > event that is not visible via procfs (euid change). > > - Watching for /lib/ reveals DSO usage. It differs from $PATH > running binaries monitoring as the latter is identifiable via > /proc/PID/cmdline. If DSO is used for handling specific file type (e.g. > media/compression format), the information that such file is opened is > revealed. > > - Watching for / reveals root's "ls /root/". > > - Watching for /var/run/screen/ can be used to monitor "screen -r" > events. Poll variant is still procfs. > > - Bash uses /etc/bash_completion.d/* to initialize completion engine at > the start time. However, some db files can be used for actual > completion. Watching for these db files reveals user's will to run > this command (compared to /proc/pid/cmdline it happens _before_ the > command is run and even if it is not run at all). > > - Watching for /tmp/ may reveal private (not accessable by world) > /tmp/*/ directories activity. > > > * ustat(2), statfs(2), statvfs(2). > > It's possible to learn the precise free inodes number and free blocks > number. It's possible to call statvfs() in a loop and get somewhat > precise information about other users' activity. If there are 2 users > logged in, one may learn other user created/removed files number and how > much data (rounded to a block size) he did removed/added (the mistake is > daemons' acitivity, but anyway). On SMP it's possible to get every > inode creation/deletion event information. > > * sysinfo(2). > > The same as *stat*, but now with free memory. Also it is related to > kernel activity, so if there is a correlation of a significant memory > allocation and a private event, the event might be disclosured. > > > Suggestions about what to do with these things or how they can be abused > another way are welcomed. -- Vasiliy Kulikov http://www.openwall.com - bringing security into open computing environments
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.