|
|
Subscribe / Log in / New account

Security

Two LSS talks

By Jake Edge
October 9, 2013

Linux Security Summit

The 2013 Linux Security Summit (LSS) had many different talks over its first day. It started with Ted Ts'o's keynote, then had several "refereed" talks (two of which were covered here: Embedded integrity and Kernel ASLR). The day ended with a selection of short topics, which were mostly updates on various security subsystems (SELinux, Smack, and Integrity). Unfortunately, there isn't enough time to write all of them up, but we will complete our LSS coverage with reports from two kernel-related talks.

LSM composition

Composing (or stacking) Linux Security Modules (LSMs) has been a perpetual topic in kernel security circles. We have looked at the problem and solutions many times over the years (most recently in August). Casey Schaufler has been working on a solution to the problem over the last few years. He presented the problem and his solution to the assembled security developers looking for guidance on where to go from here.

The problem in a nutshell is that there can be only one LSM active on any given boot of the kernel. But there are multiple use cases for having more than one active. Many think that certain combinations (e.g. SELinux and Smack) do not make sense, but there are reports of people who want to be able to combine arbitrary LSMs. In addition, only allowing a single LSM restricts systems with multiple containers to only using one security model, when it might be desirable to support all of them for use in different containers.

There is also the problem of special-purpose LSMs. Whenever someone brings up an idea for a new way to tighten security in the kernel core, they are almost inevitably pointed in the direction of the LSM API. But, since many distributions already ship with the single LSM slot filled, those smaller LSMs are unlikely to be used. Yama started off as a special-purpose LSM, but it was eventually manually—unconditionally—stacked so that it could coexist. That was meant as a temporary change until stacking was added to the kernel, but without a stacking solution, its temporary nature is somewhat in question.

Schaufler's proposal still follows the broad outlines we described a year ago. It has added the ability to stack any and all of the existing LSMs, which was not working at that point. It has also added a user-space interface that has separate directories for each LSM under /proc/PID/attr. It now tries to deal with labeled networking by restricting the different mechanisms (NetLabel, XFRM, and secmark) each to a single LSM per boot. The first LSM that asks for a given network labeling scheme "gets it". The details are available in Schaufler's slides [PDF] as well as the patches. But the point of his talk was mostly to get feedback and ideas on whether it was an idea worth moving forward with.

Some were not particularly happy with the user-space interface and/or the networking changes, believing that they added too much complexity. Others seemed skeptical that stacking was ever a sensible thing to do. But several folks spoke up from the audience about how they currently use multiple LSMs and have to carry out-of-tree patches to make it all work. In addition, the standard stacking arguments were restated. There is a clear demand for the feature—whether that is enough to overcome the objections remains to be seen.

In a post-presentation discussion, Paul Moore and Schaufler explored the possibility of pushing forward the stacking core, while leaving some of the "messier" pieces (like the user-space interface and labeled networking handling) as later additions. Most or all of the stated use cases would be fully served by a "simplified stacking" solution. The other pieces could continue to be worked on, or possibly dropped if there were no real users for them. That sounded like the approach that will be tried next, but, so far, patches have not yet appeared.

Core kernel anti-patterns

There are lots of known "anti-patterns" for kernel code, like busy waiting or hardcoding values, but security anti-patterns are not as well-known, Kees Cook said at the beginning of his talk. He and others have been spending some time trying to find "obvious" bugs in the kernel, some of which fall into the anti-pattern category. His talk was meant to document some of them to hopefully avoid them in the future.

It is frustrating that he can so easily find security holes in the kernel, he said. In addition, Dan Carpenter has been using smatch to find more examples of these anti-patterns once someone has found the first instance. Cook suggested that perhaps checkpatch.pl could be extended to catch some of this bad code long before it ever reached the kernel. He also suggested that kernel developers just go look for other examples of "something ugly" when they find such bugs—surprisingly often they will find many more instances.

Format strings are one source of these errors. For example:

    printk(buffer);
If the user can influence what goes into the buffer, they can put format specifiers into it, which can cause havoc. Fixing the problem is as easy as:
    printk("%s", buffer);
GCC can be used to help find these kinds of problems, using the format and format-security warning/error flags, but it is, unfortunately, "dumb" about const char *, so it will complain even for static buffers that are not exploitable.

A related problem is the addition of the "%n" format specifier, which writes the number of characters written to an address that is passed as an argument on the stack. It was not added to the kernel until 2009 and is only used for padding calculations in procfs output. But it is the format specifier of choice for those performing format string attacks. He would like to see support for that specifier removed entirely: "I don't care about prettiness if it leaves %n as an attack vector."

String manipulation is another area with lots of low-hanging fruit. He noted that strncpy() is generally a safer call than some others (e.g. strcpy()), but you have to check the length of the destination, not the source.

    strncpy(dest, src, strlen(src));
can sometimes be found and it will leave the dest string without a NULL termination. He suggested that for purposely leaving the destination unterminated, one should use memcpy() to make it clear.

Another problem that is fairly easy to find is unchecked copy_*_user() calls. The return from those is the number of bytes not copied, which typically indicates some kind of error. So calling those routines without checking the return value can lead to security holes. Various graphics drivers are currently guilty, he said.

Reading from the same user-space location twice can lead to a race condition where the value changes between the two reads. It is a hard race to win, but still a problem. This often happens when the first part of a structure being read from user space is the length of the data. The length is read in, the structure is allocated, then the whole thing (length and all) is read into the new structure. If the length changes between the reads, it can lead to problems. He has found this anti-pattern in both the kernel and U-Boot.

A problem similar to the double-read occurs in drivers for unusual devices. USB human interface devices (HID) have a complex way of describing the data being delivered. In a week's time, he found 12 CVEs in that code using malicious hardware. He verified each using a Facedancer a software-defined USB device, which allows him to write a Python script that acts like a USB device. In the future, he plans to look for problems in the mass storage and webcam USB drivers.

Cook said these kinds of bugs are an indication that the "many eyes" theory is failing in some areas. He knows this because he keeps finding the same kinds of bugs whenever he has time to look. There are tools that could help, including stronger GCC default flags and using the GCC plugins from the PaX project. Coccinelle and smatch are also useful. It is important that we get more proactive, he said, and keep these anti-patterns from ever getting into the kernel to begin with.

[I would like to thank LWN subscribers for travel assistance to New Orleans for LSS.]

Comments (18 posted)

Brief items

Security quotes of the week

The NSA controls a set of servers codenamed "Quantum" that sit on the Internet backbone, and these servers are used to redirect targets away from their intended destinations to still other NSA-controlled servers that are responsible for the injection of malware. So, for example, if a targeted user visits "yahoo.com", the target's browser will display the ordinary Yahoo! landing page but will actually be communicating with a server controlled by the NSA. This malicious version of Yahoo!'s website will tell the victim's browser to make a request in a background to another server controlled by the NSA which is used to deploy malware.
— The EFF's Dan Auerbach looks at NSA malware deployment

It's also worth noting that the advocates for global surveillance do not themselves want to be surveilled, and that (for example) the NSA has tried to obscure as much of their operations as possible, by over-classifying documents, and making spurious claims of "national security". This is where the surveillance power dynamic is most baldly in play, and many parts of the US government intelligence and military apparatus has a long history of acting in bad faith to obscure its activities.

The people who have been operating these surveillance systems should be ashamed of their work, and those who have been overseeing the operation of these systems should be ashamed of themselves. We need to better understand the scope of the damage done to our global infrastructure so we can repair it if we have any hope of avoiding a complete surveillance state in the future. Getting the technical details of these compromises in the hands of the public is one step on the path toward a healthier society.

Daniel Kahn Gillmor

Is this a failure of crypto? Yes and no. While it’s true that Silk Road is now shut down and the alleged DPR [Dread Pirate Roberts] is in custody, it’s also true that Silk Road stayed up for a long time and processed hundreds of millions of dollars worth of transactions, and that DPR eluded identification for a long time. The lesson is that crypto can make it much harder for investigators to unravel an operation—but not impossible.
Ed Felten

However, the real problem with biometric security lies with its inability to replace a compromised authentication device. Once someone has a copy of your ten fingerprints, a drop of your blood from a stolen blood-sugar test, or a close-up video of your eye from a scoped video camera, there is no way to change this data. You can't ask helpdesk to send you new fingers, an eyeball, or DNA.
Stephen Gallagher

Comments (2 posted)

Attacking Tor: how the NSA targets users' online anonymity (The Guardian)

Writing at The Guardian, Bruce Schneier explains in his latest Edward Snowden–related piece that the US National Security Agency (NSA) had tried unsuccessfully to mount an attack against the Tor network, in hopes of bypassing the service's anonymity protections. Nevertheless, the NSA is still able to identify Tor traffic and track individual Tor users (despite not knowing their identities), which can lead to further surveillance. "After identifying an individual Tor user on the internet, the NSA uses its network of secret internet servers to redirect those users to another set of secret internet servers, with the codename FoxAcid, to infect the user's computer. FoxAcid is an NSA system designed to act as a matchmaker between potential targets and attacks developed by the NSA, giving the agency opportunity to launch prepared attacks against their systems." By targeting a Tor user, the agency could then leverage attacks like browser exploits to get into the user's system; nevertheless, so far the design of Tor itself seems to be functioning as planned.

Comments (52 posted)

New vulnerabilities

aircrack-ng: code execution

Package(s):aircrack-ng CVE #(s):CVE-2010-1159
Created:October 7, 2013 Updated:October 18, 2013
Description: From the Gentoo advisory:

A buffer overflow vulnerability has been discovered in Aircrack-ng. A remote attacker could entice a user to open a specially crafted dump file using Aircrack-ng, possibly resulting in execution of arbitrary code with the privileges of the process or a Denial of Service condition.

Alerts:
Mandriva MDVSA-2013:251 aircrack-ng 2013-10-18
Mageia MGASA-2013-0307 aircrack-ng 2013-10-17
Gentoo 201310-06 aircrack-ng 2013-10-07

Comments (none posted)

kfreebsd-9: multiple vulnerabilities

Package(s):kfreebsd-9 CVE #(s):CVE-2013-5691 CVE-2013-5710
Created:October 8, 2013 Updated:October 9, 2013
Description: From the CVE entries:

The (1) IPv6 and (2) ATM ioctl request handlers in the kernel in FreeBSD 8.3 through 9.2-STABLE do not validate SIOCSIFADDR, SIOCSIFBRDADDR, SIOCSIFDSTADDR, and SIOCSIFNETMASK requests, which allows local users to perform link-layer actions, cause a denial of service (panic), or possibly gain privileges via a crafted application. (CVE-2013-5691)

The nullfs implementation in sys/fs/nullfs/null_vnops.c in the kernel in FreeBSD 8.3 through 9.2 allows local users with certain permissions to bypass access restrictions via a hardlink in a nullfs instance to a file in a different instance. (CVE-2013-5710)

Alerts:
Debian DSA-2769-1 kfreebsd-9 2013-10-08

Comments (none posted)

nginx: code execution

Package(s):nginx CVE #(s):CVE-2013-2028
Created:October 7, 2013 Updated:October 9, 2013
Description: From the CVE entry:

The ngx_http_parse_chunked function in http/ngx_http_parse.c in nginx 1.3.9 through 1.4.0 allows remote attackers to cause a denial of service (crash) and execute arbitrary code via a chunked Transfer-Encoding request with a large chunk size, which triggers an integer signedness error and a stack-based buffer overflow.

Alerts:
Gentoo 201310-04 nginx 2013-10-06

Comments (none posted)

poppler: denial of service

Package(s):poppler CVE #(s):CVE-2013-1789
Created:October 7, 2013 Updated:October 9, 2013
Description: From the CVE entry:

splash/Splash.cc in poppler before 0.22.1 allows context-dependent attackers to cause a denial of service (NULL pointer dereference and crash) via vectors related to the (1) Splash::arbitraryTransformMask, (2) Splash::blitMask, and (3) Splash::scaleMaskYuXu functions.

Alerts:
openSUSE openSUSE-SU-2014:0255-1 poppler 2014-02-19
Gentoo 201310-03 poppler 2013-10-06

Comments (none posted)

rubygems: denial of service

Package(s):rubygems CVE #(s):CVE-2013-4363
Created:October 4, 2013 Updated:October 9, 2013
Description:

From the Fedora advisory:

Previously a security flow was found on rubygems for validating versions with a regular expression which is vulnerable to denial of service due to backtracking. Although this was thought to be fixed in the previous rubygems, the fix was found to be incomplete and the incompleteness is now assigned as CVE-2013-4363.

Alerts:
openSUSE openSUSE-SU-2013:1611-1 ruby19 2013-10-30
Oracle ELSA-2013-1441 rubygems 2013-10-18
Mageia MGASA-2013-0297 ruby-RubyGems 2013-10-10
Fedora FEDORA-2013-17662 rubygems 2013-10-04
Fedora FEDORA-2013-17649 rubygems 2013-10-04

Comments (none posted)

torque: authentication bypass

Package(s):torque CVE #(s):CVE-2013-4319
Created:October 9, 2013 Updated:October 20, 2014
Description: From the Debian advisory:

John Fitzpatrick of MWR InfoSecurity discovered an authentication bypass vulnerability in torque, a PBS-derived batch processing queueing system.

The torque authentication model revolves around the use of privileged ports. If a request is not made from a privileged port then it is assumed not to be trusted or authenticated. It was found that pbs_mom does not perform a check to ensure that connections are established from a privileged port.

A user who can run jobs or login to a node running pbs_server or pbs_mom can exploit this vulnerability to remotely execute code as root on the cluster by submitting a command directly to a pbs_mom daemon to queue and run a job.

Alerts:
Gentoo 201412-47 torque 2014-12-26
Fedora FEDORA-2014-11989 torque 2014-10-18
Fedora FEDORA-2014-12059 torque 2014-10-18
Mandriva MDVSA-2013:252 torque 2013-10-18
Mageia MGASA-2013-0308 torque 2013-10-17
Debian DSA-2770-1 torque 2013-10-09

Comments (none posted)

xen: information leak

Package(s):xen CVE #(s):CVE-2013-1442
Created:October 7, 2013 Updated:October 9, 2013
Description: From the CVE entry:

Xen 4.0 through 4.3.x, when using AVX or LWP capable CPUs, does not properly clear previous data from registers when using an XSAVE or XRSTOR to extend the state components of a saved or restored vCPU after touching other restored extended registers, which allows local guest OSes to obtain sensitive information by reading the registers.

Alerts:
Debian DSA-3006-1 xen 2014-08-18
Gentoo 201407-03 xen 2014-07-16
SUSE SUSE-SU-2014:0446-1 Xen 2014-03-25
openSUSE openSUSE-SU-2013:1953-1 xen 2013-12-25
CentOS CESA-2013:X013 xen 2013-11-25
openSUSE openSUSE-SU-2013:1636-1 xen 2013-11-07
Fedora FEDORA-2013-17689 xen 2013-10-06
Fedora FEDORA-2013-17704 xen 2013-10-06

Comments (none posted)

xinetd: privilege escalation/code execution

Package(s):xinetd CVE #(s):CVE-2013-4342
Created:October 8, 2013 Updated:November 15, 2016
Description: From the Red Hat advisory:

It was found that xinetd ignored the user and group configuration directives for services running under the tcpmux-server service. This flaw could cause the associated services to run as root. If there was a flaw in such a service, a remote attacker could use it to execute arbitrary code with the privileges of the root user.

Alerts:
Gentoo 201611-06 xinetd 2016-11-15
openSUSE openSUSE-SU-2014:0517-1 xinetd 2014-04-11
openSUSE openSUSE-SU-2014:0494-1 xinetd 2014-04-08
Fedora FEDORA-2013-18243 xinetd 2013-10-11
Mandriva MDVSA-2013:248 xinetd 2013-10-10
Mageia MGASA-2013-0302 xinetd 2013-10-10
Scientific Linux SLSA-2013:1409-1 xinetd 2013-10-09
Oracle ELSA-2013-1409 xinetd 2013-10-07
Oracle ELSA-2013-1409 xinetd 2013-10-07
CentOS CESA-2013:1409 xinetd 2013-10-07
Red Hat RHSA-2013:1409-01 xinetd 2013-10-07

Comments (none posted)

Page editor: Jake Edge
Next page: Kernel development>>


Copyright © 2013, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds