Linux.com

Feature: Security

SELinux: Comprehensive security at the price of usability

By Mayank Sharma on December 11, 2006 (8:00:00 AM)

Share    Print    Comments   

Operating system security revolves around controlling access. Linux distributions subscribe to the Discretionary Access Control (DAC) mechanism that lets resource owners decide who gets to access the resource and how. People soon realized that DAC is not an ideal solution, as it gives applications the same privileges of the user running them. One compromised application running as root effectively compromises the full system. This led security experts to develop Mandatory Access Control (MAC), which grants access to resources as defined by a security policy, regardless of the user running the application. The Security Enhanced Linux (SELinux) project is the first mainstream implementation of MAC.

The benefit of SELinux is twofold. First, it replaces the user-based model with a policy-centric model. Every action, like running an application or reading and modifying data, is controlled by a security policy. Actions that violate the policy are denied. Additionally, SELinux compartmentalizes the various applications and processes running on the system. This not only helps in isolating a break-in, but also confines the damage caused by one compromised service.

SELinux plugs into the Linux distribution through the Linux Security Module (LSM) hooks, which are available in the 2.6.x kernel series. LSM was designed to integrate security models to work with the kernel, instead of applying them as a patch.

The SELinux way of life

At the core of SELinux is its policy. When the National Security Agency (NSA) handed over SELinux to the open source community, they just had one policy called the strict policy. The strict policy follows the concept of a whitelist, meaning that the default policy is to deny applications access unless they're specifically allowed.

This policy shipped with Fedora Core 2. In FC2, SELinux locks down everything and the strict policy is a collection of Allow statements. But such a policy needs regular maintenance and has to be kept updated with every change to the configuration of the system. So, if you install new applications or use an existing application in a way the policy writer didn't predict, the strict policy would complain. The strict policy works best in a controlled, restricted environment but not at all well on a regular desktop.

Managing SELinux in Fedora Core 6
Managing SELinux in Fedora Core 6 - click to view

To overcome the issues of the strict policy, Fedora Core 3 introduced the targeted policy. In contrast to the strict policy, a targeted policy is a list of 'Deny' statements. Under it, by default SELinux allows all actions, which gives a desktop user the freedom to use the system as if SELinux wasn't turned on. And yet by restricting only certain targeted applications, it'll protect the critical network daemons. This policy also made its way into Red Hat Enterprise Linux (RHEL) 4.

That's also when the SELinux engineers at Red Hat turned their attention towards performance tuning. The SELinux Fedora Core 5 FAQ claims a 7% impact on performance when it was last benchmarked. I tried SELinux on Fedora Core 6, which boasts of several performance enhancements and there wasn't any noticeable difference in performance with or without SELinux enabled.

Type enforcement

Going a little deeper, SELinux's policies are actually based on the access control concept of Type Enforcement (TE). TE uses a "security context" attribute to make its access decisions. Under SELinux this security context has three elements, user, role, and type.

Now, TE uses an access matrix that contains rules about clearance. These are required to grant the different users and programs called subjects, rights over files, sockets, and network hosts, called objects, by matching their security context. So, for example, this is how SELinux determines if an application X (subject) is allowed to write (action) to the file Y (object).

SELinux modifies several common system utilities so that they can display the security context of the objects and subjects with the -Z option. For example, ls -Z will display the security context of the file system objects in the current directory, id -Z will display the security context of the user and ps -Z will display the security context of the current processes.

So how does it all translate into a policy file? Here's a rule from a targeted policy:

allow user_t bin_t : file {read execute getattr};

Here, applications with the type user_t (subject) are allowed to read, execute, and get attributes for all objects of class files that have the type bin_t in their security context.

The rule only applies to those file objects that have the type bin_t. It doesn't apply to objects that are of bin_t type but not of file class and neither to file objects that do not have bin_t as their type. It may seem confusing, but one has to appreciate the level of control SELinux allows.

Making SELinux easier to work with

I have written about SELinux earlier and the basics still remain the same. But policies are where the rubber hits the road, and they have been evolving with every release. Fedora Core now ships with targeted policies to cover all major network services. Additionally, SELinux under FC6 includes a new Multi-Category Security (MCS) policy based upon the Multilevel Security (MLS) access control mechanism. By tagging security labels on files, MLS can categorize them with different sensitivities.

The setroubleshoot utility
The setroubleshoot utility - click to view

Auditing support in SELinux is also being worked on. Access Vector Cache (AVC) messages are the audit messages generated by SELinux as a result of access denials, but many admins had a difficult time making sense of all the "avc: denied" messages filling up their system logs in FC2/FC3. Now, admins have several easy to use tools to make sense of all the SELinux audit messages.

Tresys bundles several graphical and command-line tools for policy and audit message analysis in its SETools package. Another useful tool is the SELinux Troubleshooter that debuted in FC6. It scans the audit logs looking for AVC messages. When it finds one, it alerts the user with a brief and easy to follow description of the denial, and also suggests a fix.

Still, understanding and creating a new custom SELinux policy is not child's play. The reference policy is designed to be an easy to use and understand base to write new policies. FC5 uses policies based on this schema. SLIDE is an Integrated Development Environment (IDE) that plugs into the Eclipse SDK and helps in creating a policy based on the reference policy.

Conclusion

SELinux is a very mature product. NSA had been working on it for several years before releasing it to the Open Source community in December 2000. Even now it has been worked on by many individuals and companies. People in charge of application and data security will appreciate SELinux's robustness in dealing with zero-day exploits and poorly designed applications. Red Hat and Tresys both seem to be pretty interested in making SELinux easy to use and manage. Apart from RHEL and Fedora Core, users of Gentoo, Debian, and Ubuntu can also reap the benefits of SELinux.

In addition to people interested in securing their desktop or their enterprise computer, SELinux is a good subject for students studying operating system security. While it does take some getting used to, SELinux is here to stay and keep watch.

SELinux is a vast topic, and the idea of this article is to give you an overview of SELinux's access control features and to show its level of control. If you are interested in diving deeper into SELinux, you might want to refer to the SELinux FAQ and to one of the several books written on the topic.

Share    Print    Comments   

Comments

on SELinux: Comprehensive security at the price of usability

Note: Comments are owned by the poster. We are not responsible for their content.

Hmm

Posted by: Anonymous Coward on December 12, 2006 03:58 AM
This SELinux seems pretty cool. It seems extremely secure. Sounds like something very useful on a server.

But on the other hand it seems pretty damn complex and difficult to setup and understand. Much hassle and possible performance penalty?
I am not sure its so good to run it on a home computer.

grsecurity is another interesting thingymabob, seems less secure but more easier.

#

Re:Hmm

Posted by: Anonymous Coward on December 12, 2006 10:51 AM
First off, grsecurity is fundamentally different from SELinux. Whereas SELinux attempts to contain Bad Stuff (TM) from spreading throughout the system, grsecurity aims to prevent Bad Stuff (TM) from happening (by stack protection, bounds-checking, randomization, and rootkit prevention) and contain it (through access controls).

Second, grsecurity is much easier to setup than SELinux (though to get the full benefit is very difficult, as your entire userspace must be compiled as position-independent code — a problem for certain large programs like X.

Another thing with SELinux is its use of LSM’s, which make visible information about a running kernel that would aide a potential rootkit very much.

#

2 Questions

Posted by: Anonymous Coward on December 12, 2006 04:47 AM
Thank you for the article. I have two questions:

... I tried SELinux on Fedora Core 6, which boasts of several performance enhancements and there wasn't any noticeable difference in performance with or without SELinux enabled.

1. How did you measure this?

2. Is it possible for a normal user to define a policy for a program? For example, an unprivileged user configuring SELinux to deny their browser from reading or writing outside the browser settings directory.

#

Re:2 Questions

Posted by: Anonymous Coward on December 14, 2006 11:44 AM
Well I have ONE question: Has anybody looked at this marvelous piece of security software to see whether it opens erm any backdoors?

Sorry for being impolite and pointing to the big white elephant sitting on our pink panama hat.

#

Re:2 Questions

Posted by: Anonymous Coward on December 18, 2006 07:38 AM
OMG WTF? It is GPLed!

#

This story has been archived. Comments can no longer be posted.



 
Tableless layout Validate XHTML 1.0 Strict Validate CSS Powered by Xaraya