<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:paulmoore</id>
  <title>Playing with Packets</title>
  <subtitle>My thoughts on network security, labeled networking and Linux</subtitle>
  <author>
    <name>Paul Moore</name>
  </author>
  <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom"/>
  <updated>2011-09-09T06:55:34Z</updated>
  <lj:journal userid="12685992" username="paulmoore" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://paulmoore.livejournal.com/data/atom" title="Playing with Packets"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:6886</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/6886.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=6886"/>
    <title>Wrapping Up The 2011 Linux Security Summit</title>
    <published>2011-09-09T06:55:34Z</published>
    <updated>2011-09-09T06:55:34Z</updated>
    <category term="userspace"/>
    <category term="selinux"/>
    <category term="smack"/>
    <category term="kernel"/>
    <content type="html">We just closed the doors on the 2011 Linux Security Summit a few hours ago and I wanted to jot down a few notes while everything was still fresh in my mind. Once again, a big thanks to all of our presenters, James Morris and the rest of the organizing committee; my personal opinion is that the summit was a success this year and I look forward to doing this again in 2012.&lt;br /&gt;&lt;br /&gt;Just as in the past, presentations will be posted at the wiki below once kernel.org comes back online.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://security.wiki.kernel.org/index.php/LinuxSecuritySummit2011" rel="nofollow"&gt;http://security.wiki.kernel.org/index.php/LinuxSecuritySummit2011&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Smack is Alive and Well, Casey Schaufler&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;This presentation started with a brief introduction to Smack and then moved on to presenting the recent users, motivations and focus. While Smack has been incorporated into at least one general purpose Linux Distribution, Ubuntu, over the past year or two Smack has grown increasingly focused on small and embedded devices. Functionality wise, Smack has gained several new additions including process labels and transmutable directories. Process labels allow an executable file to be started with a label specified in the file&amp;#39;s xattrs and not the parent process&amp;#39;s attributes. Transmutable directories allow two differently labeled processes to write into each other&amp;#39;s directories without&amp;nbsp;requiring full write access to the other label; this should make it much easier&amp;nbsp;to share files and data between labels. Beyond the new functionality,&amp;nbsp;performance improvements, increased Linux Test Project coverage and improved&amp;nbsp;consistency between AF_UNIX and AF_INET sockets have seen their way, or will&amp;nbsp;soon see their way into Smack.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:smaller;"&gt;MeeGo platform security, including Smack userspace: &amp;nbsp;&lt;/span&gt;&lt;a href="http://meego.gitorious.org/meego-platform-security/" rel="nofollow"&gt;&lt;span style="font-size:smaller;"&gt;http://meego.gitorious.org/meego-platform-security&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;The Case for SE Android, Stephen Smalley&lt;/u&gt;&lt;div style="text-align: left; "&gt; &lt;br /&gt;This presentation discussed a recent effort to prototype a SELinux&amp;nbsp;implementation for Android. While SELinux is well known in desktop and server&amp;nbsp;Linux environments, it is still rare in mobile and embedded systems due to&amp;nbsp;concerns around resource usage and differences in both the kernels and&amp;nbsp;userspace. This talk explained the basic Linux/Android differences and what&amp;nbsp;was needed to enable SELinux on the Android platform. Resource issues around&amp;nbsp;policy size were addressed through a greatly simplified SELinux policy which&amp;nbsp;avoided per-application policy and relied on a relatively simple rule set.&amp;nbsp;Finally, the effectiveness of the prototype was evaluated by examining&amp;nbsp;a recent Android vulnerability with a known exploit and determining the&amp;nbsp;effectiveness of the SELinux Android port in preventing the exploit. In the&amp;nbsp;end, this remains a prototype at present, designed to investigate Android&amp;#39;s&amp;nbsp;security capabilities, but it shows quite a bit of promise and has a lot to&amp;nbsp;offer beyond the current Android security functionality.&lt;/div&gt;&lt;br /&gt;&lt;u&gt;Overview of the Linux Integrity Architecture, David Safford and Mimi Zohar&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The Linux Integrity Architecture project has seen a lot of activity over the&amp;nbsp;past few years and the presentation started off with an overview of project,&amp;nbsp;including a status update on where each piece of functionality stood with&amp;nbsp;respect to upstream and established distributions. The good news is that&amp;nbsp;almost all of the IMA project is either currently upstream or patches have been&amp;nbsp;submitted and are being discussed on the related mailing lists. One of the&amp;nbsp;presentation highlights was a demo tying together the IMA principals and&amp;nbsp;virtualization to demonstrate a &amp;quot;Trusted Cloud&amp;quot;. While there is work to be&amp;nbsp;done, the IMA project has made great strides and already offers some impressive&amp;nbsp;functionality.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:smaller;"&gt;IMA project website:&amp;nbsp;&lt;a href="http://linux-ima.sf.net" rel="nofollow"&gt;http://linux-ima.sf.net&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Digital Signature Support for IMA/EVM, Dmitry Kasatkin and Casey Schaufler&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;This presentation addressed a problem common to system and device manufacturers&amp;nbsp;who install a single &amp;quot;golden image&amp;quot; on each system they ship: how do you&amp;nbsp;reconcile the business need of a single install image with a TPM based EVM HMAC&amp;nbsp;which uses a per-device key stored in the TPM? One potential answer is to&amp;nbsp;expand on the EVM mechanism to support public key digital signatures in&amp;nbsp;addition to the TPM based HMAC. When the devices are initially installed, a&amp;nbsp;public key certificate is installed into the Linux Kernel keyring via an initrd&amp;nbsp;with the filesystem using digital signatures for the EVM xattr in place of the&amp;nbsp;traditional HMAC. As the files are accessed, the EVM digital signature is&amp;nbsp;verified, and if correct, it is replaced by a TPM generated HMAC. If the EVM&amp;nbsp;digital signature verification fails, access is denied in the same way as if&amp;nbsp;the EVM HMAC verification had failed.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Protecting the Filesystem Integrity of a Fedora 15 Virtual Machine from&amp;nbsp;Offline Attacks using IMA/EVM, Peter Kruus&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;This presentation covered some work being done to better secure Fedora 15&amp;nbsp;guests running on VMWare ESXi while the guests were both running and offline. &amp;nbsp;All systems are vulnerable to offline attacks, but in the case of virtual&amp;nbsp;systems, offline vulnerabilities can sometimes be much easier to exploit due to&amp;nbsp;the availability of the host system and guest storage volumes. In order to&amp;nbsp;help mitigate this problem, the presenter leveraged the existing IMA/EVM&amp;nbsp;support in Fedora 15 to verify the integrity of critical system files, but&amp;nbsp;unfortunately due to missing vTPM support in VMWare ESXi the presenter was&amp;nbsp;unable to leverage TPM based HMACs in the EVM attributes. The solution was to&amp;nbsp;use a passphrase protected key which was loaded at boot through a combination&amp;nbsp;of the system&amp;#39;s initrd and dracut. While this solution does provide an&amp;nbsp;increased level of protection against attack, for this approach to be truly&amp;nbsp;successful, full vTPM support is needed in the hypervisor to allow the guest to&amp;nbsp;utilize the TPM. While vTPM patches have been submitted for QEMU/KVM, the&amp;nbsp;state of the vTPM in VMWare ESXi is unknown.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Integrity-checked Block Devices with Device Mapper,&amp;nbsp;Will Drewry and Mandeep Baines&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;This presentation dealt with an enhancement to the Linux Kernel Device Mapper&amp;nbsp;to perform block level integrity verification. This solution was designed&amp;nbsp;primarily for the Linux based Chromium OS running on modest netbook class&amp;nbsp;hardware where boot performance was a significant requirement. Helping to&amp;nbsp;simplify the solution was the fact that the system is very well defined and&amp;nbsp;operates in a read-only mode such that the integrity verification mechanism&amp;nbsp;does not need to worry about online updates to the storage volume. The&amp;nbsp;solution, dm-verity, uses a slightly modified hash tree, with the root hash&amp;nbsp;specified on the kernel command line to quickly verify the integrity of the&amp;nbsp;entire block device. Optimization is ongoing, but already the developers are&amp;nbsp;able to boot a ~800MB Chromium OS root partition in ~1.2s on an Atom CPU using&amp;nbsp;a SSD storage volume. While this integrity verification solution may not lend&amp;nbsp;itself quite as well to general purpose systems as the TPM/IMA based solutions,&amp;nbsp;it presents a novel solution that helps solve Chromium OS&amp;#39;s needs in a a high&amp;nbsp;performance, low cost manner.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Kernel Hardening Roundtable, Kees Cook and Will Drewry&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;This roundtable started with a discussion on the different kernel interfaces&amp;nbsp;where the kernel is exposed to user input, malicious or otherwise. From here&amp;nbsp;the focus shifted to how the existing security mechanisms, such as DAC, LSM and&amp;nbsp;capabilities, impact the kernel&amp;#39;s exposed interfaces - for better or worse. At&amp;nbsp;this point it was clear, if it wasn&amp;#39;t already, that the Linux Kernel remains&amp;nbsp;far too exposed to malicious users/applications and some additional hardening&amp;nbsp;techniques are needed.&lt;br /&gt;&lt;br /&gt;While many hardening ideas were discussed, the two main points of discussion&amp;nbsp;revolved around system call filtering/reduction and the hardening techniques&amp;nbsp;found in grsecurity. With respect to system call filtering, work has been&amp;nbsp;ongoing this year to expand the mainline seccomp functionality to be more&amp;nbsp;flexible and useful for a wider range of applications. Plenty of discussion&amp;nbsp;has already occurred on the mailing lists and more is expected as the enhanced&amp;nbsp;seccomp developer has promised a new round of patches soon. Similarly, work&amp;nbsp;has recently been ongoing to decompose the rejected grsecurity patch and&amp;nbsp;repackage it in a series of patches which will hopefully be acceptable to the&amp;nbsp;upstream kernel maintainers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:smaller;"&gt;Sandbox powered by the current mainline seccomp:&amp;nbsp;&lt;a href="http://code.google.com/p/seccompsandbox" rel="nofollow"&gt;http://code.google.com/p/seccompsandbox&lt;/a&gt;&lt;br /&gt;Ubuntu Linux Kernel hardening tasks:&amp;nbsp;&lt;a href="http://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#Upstream_Hardening" rel="nofollow"&gt;http://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#Upstream_Hardening&lt;/a&gt;&lt;br /&gt;Linux Kernel hardening mailing lists:&amp;nbsp;&lt;a href="http://www.openwall.com/lists" rel="nofollow"&gt;http://www.openwall.com/lists&lt;/a&gt; (see the kernel-hardening list)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;LSM Architecture Roundtable, Kees Cook and Casey Schaufler&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;This roundtable dealt primarily with the issues related to multiple LSMs, from&amp;nbsp;APIs and determining which LSM was enabled in the kernel to architectural issues&amp;nbsp;blocking multiple concurrent LSMs. With respect to determining the active LSM&amp;nbsp;and LSM APIs, the discussion was largely a group brainstorming session with&amp;nbsp;developers discussing the pros and cons of various solutions; while most agreed&amp;nbsp;the a general LSM userspace API was more problem than it was worth, there was&amp;nbsp;some general agreement on LSM conventions that should help unify some of the&amp;nbsp;most basic LSM API functionality in the future.&lt;br /&gt;&lt;br /&gt;This discussion around running multiple concurrent LSMs was much more focused,&amp;nbsp;with patches being proposed as recently as February, although everyone did&amp;nbsp;agree that the patches had serious limitations due to shortcomings with the LSM&amp;nbsp;hooks/blobs in the kernel. In the end, several inherent blockers to concurrent&amp;nbsp;LSM operation remained, but the &amp;quot;religious&amp;quot; arguments against the idea seemed&amp;nbsp;to be less than in past years.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:6463</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/6463.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=6463"/>
    <title>Twitter Too</title>
    <published>2011-08-15T22:39:18Z</published>
    <updated>2011-08-15T22:39:18Z</updated>
    <category term="announcements"/>
    <content type="html">To add to the recent email updates, I thought I would mention that I'm now on twitter too at &lt;a href="http://twitter.com/#!/paul_via_tweet" rel="nofollow"&gt;@paul_via_tweet&lt;/a&gt;.  Not much there right now, but since all the "cool kids" are on the twitter these days, how could I resist?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:6360</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/6360.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=6360"/>
    <title>New Email Address Part Two</title>
    <published>2011-08-10T18:08:11Z</published>
    <updated>2011-08-10T18:08:11Z</updated>
    <category term="announcements"/>
    <content type="html">Hello again, last week I made a quick post to say that my @hp.com email address was going away; the reason for that, as many had guessed, was that I was leaving HP for a new employer.  As of this past Monday, August 8th, 2011, I'm happy to say that I am now working for Red Hat.  This should be good news for anyone interested in the Linux labeled networking bits and the assorted LSM network access controls as my new employer should allow me to spend more time maintaining and working on these things than I have over the past few years.&lt;br /&gt;&lt;br /&gt;So, with a new job comes a new email address; you can continue to send me email at paul@paul-moore.com, but now you can also reach me at pmoore@redhat.com.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:6109</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/6109.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=6109"/>
    <title>New Email Address</title>
    <published>2011-08-01T21:16:45Z</published>
    <updated>2011-08-01T21:16:45Z</updated>
    <category term="announcements"/>
    <content type="html">Just a quick update to let everyone know that my @hp.com email address is going to stop working on Friday, August 5, 2011.  If you need to get in touch with me please send me email at paul@paul-moore.com.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:5886</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/5886.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=5886"/>
    <title>Layered Network Interfaces</title>
    <published>2010-11-08T20:53:16Z</published>
    <updated>2010-11-08T20:53:16Z</updated>
    <category term="selinux"/>
    <category term="kernel"/>
    <content type="html">If you've ever configured a tagged VLAN on a Linux system you know that for each VLAN ID on the system there exists a matching network interface, this is a nice feature that helps ease the pain of managing multiple VLANs but it presents an interesting question for SELinux administrators: how do the interface level access controls work?  Since the individual VLAN interfaces are "layered" on top of the underlying physical interface, do the SELinux access controls happen at the physical interface, the VLAN interfaces or both?&lt;br /&gt;&lt;br /&gt;It turns out the answer is quite simple and applies regardless of how many layers of network interfaces you have configured; the SELinux interface level network access controls are applied to traffic as it pass through the top most interface layer.  In the case of a system configured with multiple tagged VLANs, the access controls are applied at the VLAN interface layer.  In the case of a system configured with multiple tagged VLANs running on top of a bonded interface running on top of a pair of physical interfaces, the access controls are applied at the VLAN interface layer.  Regardless of the number of interface layers, the SELinux access controls are always applied to the top most interface layer.&lt;br /&gt;&lt;br /&gt;Further, assigning SELinux security labels to these pseudo-interfaces is done the same way you would for a regular physical interface: using the semanage tool.  Once you have the interfaces labeled, you can start defining your network access control policy just as if you were working with a physical interfaces.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:5536</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/5536.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=5536"/>
    <title>Enabling the Network Ingress/Egress Controls</title>
    <published>2010-01-22T22:35:42Z</published>
    <updated>2010-01-22T22:35:42Z</updated>
    <category term="userspace"/>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="documentation"/>
    <content type="html">There have been quite a few questions lately about how to enable the SELinux network ingress/egress controls on recent Fedora releases.  This is good because it means people actually want to use this stuff, but it is also bad because it tells me that I haven't done a very good job explaining how to use them.  Actually, looking back on this site I see that while I've written about the &lt;a href="http://paulmoore.livejournal.com/2128.html"&gt;ingress/egress controls&lt;/a&gt; I haven't described how you would enable them on a modern Linux distribution.  Ooops.&lt;br /&gt;&lt;br /&gt;However, fear not faithful readers and confused administrators, for this is post shall explain, in four easy steps, how to enable the SELinux network ingress/egress controls.  Without further ado, let's begin ...&lt;br /&gt;&lt;br /&gt;The first step is to ensure you have the &lt;i&gt;netlabel_tools&lt;/i&gt; package installed.  This is necessary because the &lt;i&gt;netlabel_tools&lt;/i&gt; package contains the &lt;i&gt;netlabelctl&lt;/i&gt; application which we will be using to configure NetLabel in the final step.  Using &lt;i&gt;yum&lt;/i&gt; you should be able to install &lt;i&gt;netlabel_tools&lt;/i&gt; with the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# yum install netlabel_tools
&lt;/pre&gt;&lt;br /&gt;After you have installed the &lt;i&gt;netlabel_tools&lt;/i&gt; package the next step is to ensure you have a SELinux policy module loaded which defines at least two new types: one to be assigned to a network interface and another to be assigned to network traffic.  To be honest, you'll probably want to create more than just those two types but that will be dependent on your particular configuration; for more information I suggest you look at my &lt;a href="http://paulmoore.livejournal.com/2128.html"&gt;original post on the ingress/egress controls&lt;/a&gt; where I go into more detail on the policy aspect of these controls.  Regardless of what you decide, for the example here I will be using "foo_netif_t" for the network interface type and "foo_peer_t" for the network traffic type.&lt;br /&gt;&lt;br /&gt;With the SELinux policy module loaded and our new types defined, it is time to assign our new network interface type to an interface on the system.  We use the &lt;i&gt;semanage&lt;/i&gt; tool to manipulate the SELinux types assigned to network interfaces, in order to add a type to an interface, "eth2" in this example, we use the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# semanage interface -a -t foo_netif_t eth2
&lt;/pre&gt;&lt;br /&gt;We can verify that the interface is assigned the correct type with the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# semanage interface -l
SELinux Interface              Context
eth2                           system_u:object_r:foo_netif_t:s0
&lt;/pre&gt;&lt;br /&gt;Now that we have the network interface labeled the final step is to setup some form of peer labeling on the network.  For many of you not using CIPSO or labeled IPsec, this means configuring &lt;a href="http://paulmoore.livejournal.com/1758.html"&gt;NetLabel's static/fallback labels&lt;/a&gt;.  In this example, we are going to configure all of the IPv4 and IPv6 traffic entering the system via "eth2" as having the "foo_peer_t" label; we do this with the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# netlabelctl unlbl add interface:eth2 address:0.0.0.0/0 label:system_u:object_r:foo_peer_t:s0
# netlabelctl unlbl add interface:eth2 address:::/0 label:system_u:object_r:foo_peer_t:s0
&lt;/pre&gt;&lt;br /&gt;We can verify the configuration with the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# netlabelctl -p unlbl list
Accept unlabeled packets : on
Configured NetLabel address mappings (2)
 interface: eth2
   address: 0.0.0.0/0
    label: "system_u:object_r:foo_peer_t:s0"
   address: ::/0
    label: "system_u:object_r:foo_peer_t:s0"
&lt;/pre&gt;&lt;br /&gt;At this point the SELinux network ingress/egress control should be up and running on your system.  As a reminder, you'll want to be sure to have all the right allow rules for these new controls in your SELinux policy as simply adding the types without the allow rules could result in a total loss of network access; because of this I recommend you do this with SELinux in permissive mode until you are comfortable with how the system operates.&lt;br /&gt;&lt;br /&gt;Good luck, and as usual, if you have any problems or questions feel free to leave a comment below.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:5194</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/5194.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=5194"/>
    <title>LinuxCon NetLabel Presentation</title>
    <published>2010-01-22T21:47:06Z</published>
    <updated>2010-01-22T21:47:06Z</updated>
    <category term="netlabel"/>
    <category term="documentation"/>
    <content type="html">I'm more than a little late posting this, but below you'll find a copy of the NetLabel presentation I gave at this past year's LinuxCon.  Sure, it is old news, but if you ever wanted to know what NetLabel does and why it exists in the first place this is still good stuff.&lt;br /&gt;&lt;br /&gt;Presentation download: &lt;a href="http://free.linux.hp.com/~pmoore/files_lj/netlabel-linuxcon-09212009.pdf" rel="nofollow"&gt;NetLabel: What, Why &amp; Where&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:4969</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/4969.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=4969"/>
    <title>NetLabel Presentation and Tutorial at LinuxCon</title>
    <published>2009-09-03T22:04:02Z</published>
    <updated>2009-09-03T22:04:23Z</updated>
    <category term="netlabel"/>
    <category term="announcements"/>
    <content type="html">In a few weeks I'll be giving a &lt;a href="http://events.linuxfoundation.org/lc09d3" rel="nofollow"&gt;presentation&lt;/a&gt; and &lt;a href="http://events.linuxfoundation.org/lc09td3" rel="nofollow"&gt;tutorial&lt;/a&gt; on NetLabel at &lt;a href="http://events.linuxfoundation.org/events/linuxcon" rel="nofollow"&gt;LinuxCon&lt;/a&gt;.  Both as a speaker and as a member of the audience I've always felt that the best presentations/tutorials are the ones that cover what the audience is really interested in hearing.  The only problem is that in most cases the presentation material needs to be generated before the presenter ever meets the audience.  With that in mind, I'd like to reach out to all of you reading this entry and ask two simple questions:&lt;br /&gt;&lt;br /&gt; * What would you like to see in a NetLabel presentation?&lt;br /&gt; * What would you like to learn in a NetLabel tutorial?  &lt;br /&gt;&lt;br /&gt;Don't be shy now ;)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:4733</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/4733.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=4733"/>
    <title>Labeled Networking in Linux 2.6.30 and 2.6.29.4</title>
    <published>2009-06-11T18:35:31Z</published>
    <updated>2009-06-19T20:43:06Z</updated>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="smack"/>
    <category term="kernel"/>
    <content type="html">The labeled networking changes in &lt;a href="http://kernelnewbies.org/Linux_2_6_30" rel="nofollow"&gt;2.6.30&lt;/a&gt; are fairly significant but not because of new features or functionality.  The changes to 2.6.30 are largely fixes for &lt;a href="http://paulmoore.livejournal.com/3213.html"&gt;bugs discussed previously&lt;/a&gt; as well as some minor improvements to Smack's internal labeled networking code.  From a labeled networking user's point of view 2.6.30 doesn't do anything new, but it does everything it already does much better.&lt;br /&gt;&lt;br /&gt;It is also worth noting that the TCP labeled networking bug fixes in 2.6.30 have been included in the 2.6.29.4 stable kernel release.  I strongly encourage all of you running 2.6.28 or 2.6.29 kernels who aren't comfortable jumping to the 2.6.30 kernel to move your system to a 2.6.29.4 kernel as soon as possible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; I forgot to mention that the older "compat_net" network access controls have finally been removed in the 2.6.30 release.  For those of you who may still be relying on the "compat_net" behavior, I've written a &lt;a href="http://paulmoore.livejournal.com/4281.html"&gt;short guide&lt;/a&gt; on how to transition to the new Secmark based controls.  If you run into any problems go ahead and drop a note in the comments.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:4605</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/4605.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=4605"/>
    <title>Call For Security Proposals - LinuxCon and The Linux Plumbers Conference 2009</title>
    <published>2009-06-09T21:31:59Z</published>
    <updated>2009-06-09T21:31:59Z</updated>
    <category term="announcements"/>
    <content type="html">The week of September 20th is going to be a busy one with both &lt;a href="http://events.linuxfoundation.org/events/linuxcon" rel="nofollow"&gt;LinuxCon&lt;/a&gt; and the &lt;a href="http://linuxplumbersconf.org/2009/" rel="nofollow"&gt;Linux Plumbers Conference&lt;/a&gt; co-located in Portland, Oregon.  However, having both conferences in the same place on the same week should make it much easier for people to justify the travel.  If you are planning on attending one or both of the conferences you should know that each conference has a dedicated security track or mini-summit which you probably want to attend (and submit a proposal too!).&lt;br /&gt;&lt;br /&gt;On the day before LinuxCon starts, we will be holding this year's &lt;a href="http://selinuxproject.org/page/Developer_Summit_2009" rel="nofollow"&gt;SELinux Developer's Summit&lt;/a&gt;.  The SELinux Developer Summit is always a great opportunity to meet several of the SELinux developer's in person and discuss anything and everything SELinux.  To get a better idea of what to expect you can check out the &lt;a href="http://selinuxproject.org/page/Developer_Summit_2008" rel="nofollow"&gt;main page&lt;/a&gt; and &lt;a href="http://selinuxproject.org/page/Developer_Summit_2008/Schedule" rel="nofollow"&gt;talks&lt;/a&gt; from last year.  For those of you interested in presenting a topic this year, the &lt;a href="http://selinuxproject.org/page/Developer_Summit_2009/CFP" rel="nofollow"&gt;Call for Proposals&lt;/a&gt; is open until July 1st, so get your abstract in soon.&lt;br /&gt;&lt;br /&gt;During the Linux Plumbers Conference there will be a dedicated &lt;a href="http://linuxplumbersconf.org/ocw/events/2009/tracks/2" rel="nofollow"&gt;security track&lt;/a&gt; for anything related to Linux security.  The security track is new this year and promises to have some interesting talks, if you would like to add to that list James Morris put together a nice &lt;a href="http://marc.info/?l=linux-security-module&amp;amp;m=124389430608979&amp;amp;w=2" rel="nofollow"&gt;post&lt;/a&gt; with all the information you need; just beware the deadline for new proposals is June 15th.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:4281</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/4281.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=4281"/>
    <title>Transitioning to Secmark</title>
    <published>2009-05-21T22:10:26Z</published>
    <updated>2009-05-27T15:16:08Z</updated>
    <category term="secmark"/>
    <category term="selinux"/>
    <category term="documentation"/>
    <category term="kernel"/>
    <content type="html">Back in the &lt;a href="http://kernelnewbies.org/Linux_2_6_18" rel="nofollow"&gt;2.6.18&lt;/a&gt; timeframe James Morris developed a replacement for the now-named "compat_net" SELinux access controls which filtered packets based on network attributes, the replacement was called &lt;a href="http://james-morris.livejournal.com/11010.html"&gt;Secmark&lt;/a&gt;.  Secmark was introduced to fix two major issues with the aging compat_net access controls; the first problem being that they were not as flexible as iptables/netfilter rules and the second, very related problem, was that the compat_net controls were slow and likely would always be slow due to fundamental design issues.  The solution to both these problems was to leverage the existing iptables/netfilter mechanism to label packets and replace the crude packet matching mechanisms of the compat_net design.  As of &lt;a href="http://kernelnewbies.org/Linux_2_6_29" rel="nofollow"&gt;2.6.29&lt;/a&gt; release the compat_net functionality is deprecated and patches completely removing it from the kernel have been merged into the 2.6.30 release candidates.&lt;br /&gt;&lt;br /&gt;Secmark works by using iptables/netfilter to assign a label, or "security mark" aka Secmark, to specific packets which are later used by SELinux when the per-packet access controls are applied.  This approach allows administrators to match packets based not only on the existing compat_net attributes such as port and host, but also any network attribute supported by iptables/netfilter, including stateful connection matching.  The article by James Morris (linked above) is an excellent introduction to Secmark and for those of you looking to get the most out of the new functionality I encourage you to head over there first.  What I hope to do here is not duplicate James' article, but rather provide a quick guide on how to duplicate basic compat_net functionality using the new Secmark controls.&lt;br /&gt;&lt;br /&gt;Before we start it is important to first identify if the system you are using has Secmark enabled, you can do this by looking at the value in "/selinux/compat_net".  If the file does not exist on your system and you have SELinux enabled then you are either using a &lt;i&gt;very&lt;/i&gt; old kernel which does not support Secmark, or a new kernel (2.6.30 or greater) that &lt;i&gt;only&lt;/i&gt; supports Secmark.  However, for those systems that do have the file, if the contents are "0" then Secmark is enabled, otherwise you are still using the older compat_net controls.  If you want to enable Secmark you can do so by writing a "0" to the file but you may first want to ensure that your SELinux policy and iptables/netfilter toolchain are up to date and provides Secmark support.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# cat /selinux/compat_net
0
&lt;/pre&gt;&lt;br /&gt;The first step in using Secmark is to define a new SELinux label for the network traffic we are labeling and write the corresponding SELinux policy to handle the newly labeled traffic.  This highlights the major difference between compat_net and Secmark: with the compat_net controls you assign labels to ports and hosts, but with Secmark you label the packets themselves.  The second step is to determine which network attributes you want to match on when you are labeling packets.  Both compat_net and Secmark can match on any combination of port and host so you should be able to transition all of your existing compat_net rules to Secmark; the only difference here is that with compat_net each port and host entry received its own label but with Secmark each combination of port and host receives a label.  In the example below, we are going to configure Secmark to label SSH packets from host foo.lan with the label "foo_ssh_packet_t" and allow it to connect to the SSH daemon running on our local system with label "sshd_t".  Careful observers will note that I currently have the MLS policy installed but the same procedure will work equally well with the default targeted policy.&lt;br /&gt;&lt;br /&gt;Since we using a custom SELinux label the first thing we need to do is write a SELinux policy module to define the new type and the policy allowing this type to be received by the SSH daemon over the network.  The policy we are using is shown below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# policy header
policy_module(secmark_example,0.1.0)
gen_require(`
        type sshd_t;
')

# our new secmark packet type
type foo_ssh_packet_t;

# allow sshd_t to receive our new packet type
allow sshd_t foo_ssh_packet_t:packet recv;
&lt;/pre&gt;&lt;br /&gt;We can quickly compile and install our new policy module with the following commands:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# cp /usr/share/selinux/devel/Makefile .
# make                                  
Compiling mls secmark_example module                      
/usr/bin/checkmodule:  loading policy configuration from tmp/secmark_example.tmp
/usr/bin/checkmodule:  policy configuration loaded                              
/usr/bin/checkmodule:  writing binary representation (version 10) to tmp/secmark_example.mod                                                                    
Creating mls secmark_example.pp policy package                                  
rm tmp/secmark_example.mod tmp/secmark_example.mod.fc                           
# ls                                                          
Makefile            secmark_example.if  secmark_example.te                      
secmark_example.fc  secmark_example.pp  tmp                                     
# semodule -i secmark_example.pp
# semodule -l | grep secmark_example
secmark_example 0.1.0
&lt;/pre&gt;&lt;br /&gt;The next and final step is to setup the iptables/netfilter Secmark rules to label the packets correctly:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# host foo.lan
foo.lan has address 192.168.0.16
# iptables -t mangle -A INPUT -p tcp --src 192.168.0.16 --dport 22 -j SECMARK --selctx system_u:object_r:foo_ssh_packet_t:s0
# iptables -t mangle -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
SECMARK    tcp  --  foo.lan              anywhere            tcp dpt:ssh SECMARK selctx system_u:object_r:foo_ssh_packet_t:s0

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
&lt;/pre&gt;&lt;br /&gt;At this point we are finished, packets coming from foo.lan and destined for port TCP/22 on our system will be labeled as "foo_ssh_packet_t" with SELinux providing assurance that only "sshd_t" can read "foo_ssh_packet_t" packets.  You can verify this quite easily be removing the allow rule from the custom SELinux policy and watching SSH traffic from foo.lan stop, you will also see new SELinux AVC denial messages with the "foo_ssh_packet_t" type.&lt;br /&gt;&lt;br /&gt;One final note, remember that with modern Linux Kernels there are two types of SELinux security labels assigned to a packet, the Secmark labels described here and the &lt;a href="http://paulmoore.livejournal.com/1863.html"&gt;peer&lt;/a&gt; labels described previously.  These two types of packet labels operate differently and subject to their own, independent set of SELinux access controls.  The Secmark packet labels are used to represent the network attributes of a packet such as IP addresses and ports, while the peer packet labels are used to represent the security attributes of the sender such as the SELinux label of the process which generated the network packet.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; Laszlo Beres has been kind enough to provide a Hungarian &lt;a href="http://sys-admin.hu/cikkek/20090526/secmark" rel="nofollow"&gt;translation&lt;/a&gt;.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:3917</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/3917.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=3917"/>
    <title>Email Difficulties Part Two</title>
    <published>2009-05-09T16:07:37Z</published>
    <updated>2009-05-21T14:42:01Z</updated>
    <content type="html">It appears that my email account has hit internal routing issues yet again which means I haven't been receiving email since sometime on Friday evening.  The truly unfortunate part of this (other than the fact that it happened _again_) is that with this being the weekend it is unlikely that this will get resolved until sometime next week.  Sigh.&lt;br /&gt;&lt;br /&gt;For the near future if you need to reach me you can do so at pmoore at ldl dot fc dot hp dot com.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; this should be resolved now, you can reach me either at either address in the future.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:3644</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/3644.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=3644"/>
    <title>Email Difficulties</title>
    <published>2009-05-04T20:13:05Z</published>
    <updated>2009-05-04T20:13:05Z</updated>
    <content type="html">There was a problem with my email account last Friday, May 1st, which caused all mail sent to my account to bounce leading to lost mail and automatic forced removal from many mailing lists.  Everything should be back to normal now, including my mailing list subscriptions, but if you sent me mail during the past few days and you haven't heard back from me yet I would recommend resending the original mail.&lt;br /&gt;&lt;br /&gt;Sorry about that.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:3509</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/3509.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=3509"/>
    <title>Labeled Networking in Linux 2.6.29</title>
    <published>2009-03-25T15:26:59Z</published>
    <updated>2009-03-25T15:26:59Z</updated>
    <category term="smack"/>
    <category term="kernel"/>
    <content type="html">While the 2.6.28 release of the Linux Kernel brought a lot changes to the labeled networking code the &lt;a href="http://kernelnewbies.org/Linux_2_6_29" rel="nofollow"&gt;2.6.29 release&lt;/a&gt; is much smaller with only a handful of fixes and a partially implemented new feature, single label host support for Smack.  The new single label host support for Smack allows users to specify a single, static security label for a network or single host which is used when network labeling protocols are not supported or can not be used.  It essentially brings NetLabel's &lt;a href="http://paulmoore.livejournal.com/1758.html"&gt;fallback label&lt;/a&gt; functionality to Smack for the first time.  Unfortunately, there were some problems in the implementation that were not spotted in time to be resolved for the 2.6.29 release which means that TCP connections may not behave as you expect when using the new single label functionality in Smack.  UDP should work as expected as well as TCP connections made when the single label support is not configured.&lt;br /&gt;&lt;br /&gt;Hopefully we will have a fix in place before the 2.6.30 merge window closes, if so I'll work to get the fix backported to the -stable trees so that the Smack single label support in Linux 2.6.29 will work correctly.  Once that it settled I'll post a quick How-To here so you can try it yourself (I expect this to be a very popular addition to Smack).</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:3213</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/3213.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=3213"/>
    <title>Problems with NetLabel's Native SELinux Labeling in 2.6.28</title>
    <published>2009-03-18T18:22:40Z</published>
    <updated>2009-03-18T18:22:40Z</updated>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="kernel"/>
    <content type="html">One of the &lt;a href="http://paulmoore.livejournal.com/2702.html"&gt;new features&lt;/a&gt; added in Linux 2.6.28 was the ability to send full SELinux labels/contexts over local connections using NetLabel.  Unfortunately a bug was recently discovered in how NetLabel applies on-the-wire security labels to responses of incoming TCP connections which significantly affects the native labeling added in 2.6.28.  The bug has likely been present since 2.6.25 (I haven't verified this yet) and only affects the on-the-wire label of packets sent by a TCP application which accepts incoming connections.  Because of this I'm going to refrain from posting the How-To on how to make use of the new native labeling capabilities until the bug is fixed.&lt;br /&gt;&lt;br /&gt;Patches are currently under development which should solve this issue and I expect the fix to be included in the 2.6.30 release of the Linux Kernel.  Once the issue has been resolved in the 2.6.30 release candidates I will work on developing a set of patches to address the problems in the stable kernel trees (2.6.27 and 2.6.28 at the time of this writing) but that will likely lag the mainline fix by a week or two due to the re-engineering needed for the stable trees.&lt;br /&gt;&lt;br /&gt;Sorry about this; I hope to have it fixed soon, in the meantime I ask for your patience.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:2884</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/2884.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=2884"/>
    <title>NetLabel Address Selectors Explained</title>
    <published>2009-02-13T22:50:59Z</published>
    <updated>2009-02-13T22:50:59Z</updated>
    <category term="netlabel"/>
    <category term="documentation"/>
    <category term="kernel"/>
    <content type="html">One of the biggest differences between NetLabel and the labeled networking mechanisms of existing Trusted OSs is how outbound traffic is selected for labeling.  Ever since NetLabel was first introduced in kernel 2.6.19 the on-the-wire outbound labeling protocol was determined by the label of the sending application's socket.  Despite the departure from legacy approaches, this was a concious choice designed to make the implementation smaller and less invasive in an attempt to gain acceptance into the mainstream Linux Kernel.  While ultimately this approach proved to be successful, NetLabel was accepted, it did have its drawbacks.  The most significant was that all traffic from a single socket, or application if it was not label aware, was limited to the same on-the-wire label; if you think about this for a minute you quickly realize how limiting this could become.  Thankfully with kernel 2.6.28 this is no longer the case.&lt;br /&gt;&lt;br /&gt;In kernel 2.6.28 we introduced the concept of address selectors to NetLabel.  NetLabel address selectors allow administrators to specify the on-the-wire label format based on both the sending application and the destination address.  This is a huge usability boost as administrators are no longer forced to use the same on-the-wire label format for a single application, making deployment much easier.  To help make things a bit more concrete, let's examine the following configuration:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# netlabelctl cipsov4 add pass doi:16 tags:1
# netlabelctl map add domain:apache_t protocol:cipsov4,16
# netlabelctl -p map list
Configured NetLabel domain mappings (2)
 domain: "apache_t"
   protocol: CIPSOv4, DOI = 16
 domain: DEFAULT
   protocol: UNLABELED
&lt;/pre&gt;&lt;br /&gt;Before kernel 2.6.28 this is how you used to enabled NetLabel based labeling for an application.  In this particular example we are configuring Apache (apache_t) to label outbound traffic with a CIPSO label using CIPSO DOI 16.  This configuration would apply CIPSO labeling to all traffic regardless of destination; DNS queries, Windows clients, other Linux hosts, everything would receive CIPSO labeled traffic.  However, starting with Linux Kernel 2.6.28 and NetLabel Tools 0.19 there are some new parameters to the netlabelctl map command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# netlabelctl cipsov4 add pass doi:17 tags:5
# netlabelctl map add domain:firefox_t address:0.0.0.0/0 protocol:unlbl
# netlabelctl map add domain:firefox_t address:10.0.0.0/8 protocol:cipsov4,17
# netlabelctl map add domain:firefox_t address:192.168.4.5 protocol:cipsov4,16
# netlabelctl -p map list
Configured NetLabel domain mappings (3)
 domain: "apache_t"
   protocol: CIPSOv4, DOI = 16
 domain: "firefox_t"
   address: 192.168.4.5/32
    protocol: CIPSOv4, DOI = 16
   address: 10.0.0.0/8
    protocol: CIPSOv4, DOI = 17
   address: 0.0.0.0/0
    protocol: UNLABELED
 domain: DEFAULT
   protocol: UNLABELED
&lt;/pre&gt;&lt;br /&gt;Using the new address option to the netlabelctl map command allows us to add a destination address selector to the NetLabel LSM domain mapping configuration.  In this particular example we've configured Firefox (firefox_t) to send CIPSO DOI 16 labeled packets to host 192.168.4.5 and CIPSO DOI 17 labeled packets to the entire 10.0.0.0/8 network while everyone else, specified by 0.0.0.0/0, is sent unlabeled packets.  You will also notice that the new address selectors can coexist with the existing configuration, e.g. our Apache configuration is untouched, but you can only add address selectors to domains which make use of address selectors, e.g. you can't add address selectors to the above Apache configuration.  If you want to add address selectors to an existing domain configuration you first need to delete it and recreate it using address selectors as show below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# netlabelctl map add domain:apache_t address:192.168.3.5 protocol:unlbl
netlabelctl: error, invalid argument or parameter
# netlabelctl map del domain:apache_t
# netlabelctl map add domain:apache_t address:0.0.0.0/0 protocol:cipsov4,16
# netlabelctl map add domain:apache_t address:192.168.3.5 protocol:unlbl
# netlabelctl -p map list
Configured NetLabel domain mappings (3)
 domain: "apache_t"
   address: 192.168.3.5/32
    protocol: UNLABELED
   address: 0.0.0.0/0
    protocol: CIPSOv4, DOI = 16
 domain: "firefox_t"
   address: 192.168.4.5/32
    protocol: CIPSOv4, DOI = 16
   address: 10.0.0.0/8
    protocol: CIPSOv4, DOI = 17
   address: 0.0.0.0/0
    protocol: UNLABELED
 domain: DEFAULT
   protocol: UNLABELED
&lt;/pre&gt;&lt;br /&gt;That covers the new NetLabel address selectors in kernel 2.6.28, however there are a few things you should make note of before you start playing with this new feature.  The most important is that the address selectors require NetLabel Tools version 0.19 or higher, information on where to get version 0.19 can be found &lt;a href="http://paulmoore.livejournal.com/2355.html"&gt;here&lt;/a&gt;.  The next thing to keep in mind is that when you are configuring NetLabel using address selectors you will almost always want to have a 0.0.0.0/0 address configured as a "catch all" address, otherwise you could run into problems if you try to send traffic to an address not explicitly configured.  Other than that, have fun and let me know if you have any problems in the comments.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:2702</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/2702.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=2702"/>
    <title>Labeled Networking in Linux 2.6.28</title>
    <published>2009-01-06T22:25:15Z</published>
    <updated>2009-01-06T22:25:15Z</updated>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="kernel"/>
    <content type="html">Yesterday I announced a &lt;a href="http://paulmoore.livejournal.com/2355.html"&gt;new release of the NetLabel Tools package&lt;/a&gt; and promised a post detailing the new labeled networking features in Linux 2.6.28.  &lt;a href="http://james-morris.livejournal.com"&gt;James Morris&lt;/a&gt; saw that and called me out in his nice &lt;a href="http://james-morris.livejournal.com/37583.html"&gt;summary&lt;/a&gt; of the security relevant changes in the 2.6.28 release, so I guess I had better make good on my promise.&lt;br /&gt;&lt;br /&gt;The 2.6.28 release of the Linux Kernel is the biggest labeled networking update since 2.6.25.  There are only two major new features in this kernel release but they are likely to be some of the most welcomed changes since NetLabel was first introduced in Linux 2.6.19.  The first feature added to the kernel was the ability to specify the NetLabel labeling configuration not only by LSM domain but also by destination address.  The second feature added was a new CIPSO tag type which allows native LSM/SELinux security labels to be carried over local connections (yes, this means full SELinux context support, not just the MLS attributes).  &lt;br /&gt;&lt;br /&gt;I'll go into more detail in later posts, but for those of you eager to get started you'll need to grab Linux Kernel 2.6.28 and &lt;a href="https://sourceforge.net/project/showfiles.php?group_id=174379&amp;amp;package_id=199951&amp;amp;release_id=651654" rel="nofollow"&gt;NetLabel Tools version 0.19&lt;/a&gt; (or later).  If you check out the netlabelctl man page you will find information on using the new features and examples for each; if you have any questions drop a comment below.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:2355</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/2355.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=2355"/>
    <title>NetLabel Tools 0.19 Released</title>
    <published>2009-01-05T22:19:36Z</published>
    <updated>2009-01-05T22:19:36Z</updated>
    <category term="userspace"/>
    <category term="netlabel"/>
    <content type="html">A &lt;a href="https://sourceforge.net/project/showfiles.php?group_id=174379&amp;amp;package_id=199951&amp;amp;release_id=651654" rel="nofollow"&gt;new version&lt;/a&gt; of the &lt;a href="http://netlabel.sf.net" rel="nofollow"&gt;Netlabel Tools&lt;/a&gt; package has been released.  Version 0.19 includes support for the new features found in Linux Kernel &lt;a href="http://kernelnewbies.org/Linux_2_6_28" rel="nofollow"&gt;2.6.28&lt;/a&gt; (more on that later) as well as a number of improvements to the code which aren't always user-visible.  Hit the links in this post to get the latest bits.&lt;br /&gt;&lt;br /&gt;NetLabel userspace download: &lt;a href="https://sourceforge.net/project/showfiles.php?group_id=174379&amp;amp;package_id=199951&amp;amp;release_id=651654" rel="nofollow"&gt;netlabel_tools version 0.19&lt;/a&gt;&lt;br /&gt;Fedora bugzilla entry: &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=478903" rel="nofollow"&gt;RH BZ #478903&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:2128</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/2128.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=2128"/>
    <title>Network Ingress/Egress Controls Explained</title>
    <published>2008-12-05T23:37:42Z</published>
    <updated>2008-12-05T23:37:42Z</updated>
    <category term="selinux"/>
    <category term="documentation"/>
    <category term="kernel"/>
    <content type="html">I've already talked about &lt;a href="http://paulmoore.livejournal.com/1758.html"&gt;Fallback Labels&lt;/a&gt; and &lt;a href="http://paulmoore.livejournal.com/1863.html"&gt;Network Peer Controls&lt;/a&gt; now I'm going to explain the last major labeled networking feature included in the &lt;a href="http://kernelnewbies.org/Linux_2_6_25" rel="nofollow"&gt;2.6.25&lt;/a&gt; release of the Linux Kernel, the network ingress/egress controls.  One of the longstanding problems with the SELinux network access controls was that they lacked any ability to control packets at the network interface level, limiting our ability to provide access control based on the physical network and making it impossible to provide access control for forwarded packets.  The network ingress/egress controls were designed to solve these problems by placing SELinux network access controls at the network interface level.&lt;br /&gt;&lt;br /&gt;The new ingress/egress controls are fairly simple: each packet entering the system must pass an ingress access control and each packet leaving the system must pass an egress access control.  Forwarded packets must also pass an additional forwarding access control, but I'm going to leave that for another time and focus on the ingress/egress cases.  In both the ingress and egress access controls the network packet is subjected to network interface and network address checks.  In order to allow incoming network traffic to enter the system you need the following two allow rules (where network_if_t is the network interface's label, network_addr_t is the remote host's network address label and peer_t is the traffic's peer label):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
allow peer_t network_if_t:netif ingress;
allow peer_t network_addr_t:node recvfrom;
&lt;/pre&gt;&lt;br /&gt;Network traffic leaving the system requires similar allow rules:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
allow peer_t network_if_t:netif egress;
allow peer_t network_addr_t:node sendto;
&lt;/pre&gt;&lt;br /&gt;As a reminder the &lt;a href="http://paulmoore.livejournal.com/1863.html"&gt;peer labels&lt;/a&gt;, peer_t in the above examples, are derived from the original sender's security label.  In the case of incoming network traffic the peer label is taken from the network labeling protocol, if available, and in the case of outgoing network traffic the peer label is taken from the application/socket which generated the traffic.  The network interface and address labels are defined as part of the SELinux policy and can be modified on-the-fly using the semanage tool.&lt;br /&gt;&lt;br /&gt;Moving on to a more concrete example, imagine a web server running Apache with the eth0 network interface labeled as "wwwsrv_if_t", no explicitly labeled network addresses (which means addresses will be represented by the default address label, "node_t") and a "private_net_t" &lt;a href="http://paulmoore.livejournal.com/1758.html"&gt;fallback label&lt;/a&gt; defined for addresses that match 192.168.0.0/16.  If we want to allow network traffic from 192.168.0.0/16 over the eth0 interface into the system and allow responses back from Apache we need to write the following allow rules:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
allow private_net_t wwwsrv_if_t:netif ingress;
allow private_net_t node_t:node recvfrom;
allow apache_t wwwsrv_if_t:netif egress;
allow apache_t node_t:node sendto;
&lt;/pre&gt;&lt;br /&gt;Like the new network peer controls, the ingress/egress controls are currently not enabled, protected by the same policy capability flag which protect the peer controls, "network_peer_controls".  I am currently testing a small patch which should solve the remaining policy issues and allow us to finally enable this new functionality.  In the meantime if you want to try it yourself you need to uncomment the "policycap network_peer_controls;" line in the policy_capabilities file found in the &lt;a href="http://oss.tresys.com/projects/refpolicy" rel="nofollow"&gt;SELinux Reference Policy&lt;/a&gt; sources and rebuild the policy.  Good luck, and if you hit any snags don't hesitate to drop a comment below and I'll help you sort it out.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:1863</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/1863.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=1863"/>
    <title>Network Peer Controls Explained</title>
    <published>2008-10-06T22:00:45Z</published>
    <updated>2008-10-07T21:20:36Z</updated>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="ipsec"/>
    <category term="documentation"/>
    <category term="kernel"/>
    <content type="html">In addition to &lt;a href="http://paulmoore.livejournal.com/1758.html"&gt;Fallback Labels&lt;/a&gt; another new feature added to the &lt;a href="http://kernelnewbies.org/Linux_2_6_25" rel="nofollow"&gt;2.6.25&lt;/a&gt; release of the Linux Kernel was the consolidation of the access control permissions for the different peer labeling mechanisms supported by SELinux.  This consolidation has several benefits including better handling of traffic with multiple peer labels (all of the labels must be the same), elimination of confusing and duplicated per-packet access checks, and the creation of a new object class which abstracts away the underlying labeling protocol making policy development easier and more consistent.&lt;br /&gt;&lt;br /&gt;Prior to the new network peer controls each peer labeling mechanism, NetLabel and Labeled IPsec, had separate access controls.  In the early days of NetLabel this made sense as it allowed NetLabel development to proceed without impacting the existing Labeled IPsec mechanism, however, as time has progressed the additional access controls have proven problematic both from a code and policy management point of view.  Those familiar with the old system know that in order to receive network traffic labeled with either NetLabel or Labeled IPsec you needed the following two allow rules (where socket_t is the receiving socket's label and peer_t is the packet's peer label):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
allow socket_t peer_t:{ tcp_socket udp_socket rawip_socket } recvfrom;
allow socket_t peer_t:association recvfrom;
&lt;/pre&gt;&lt;br /&gt;The first allow rule allows NetLabel traffic whereas the second allow rule allows Labeled IPsec traffic.  This duplication of access checks led to some interesting situations when only one peer labeling mechanism was in use, which happens to be the common case.  The problem is that if you were using Labeled IPsec to browse the web you would need the following permissions:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
allow firefox_t unlabeled_t:tcp_socket recvfrom;
allow firefox_t apache_t:association recvfrom;
&lt;/pre&gt;&lt;br /&gt;You notice how the first access check requires access to unlabeled_t?  This makes sense as NetLabel is not in use for this particular connection and is not able to generate a peer label, but it can be very confusing for users, policy writers and pretty much everyone else.  The same problem happens when NetLabel is used and Labeled IPsec is not.&lt;br /&gt;&lt;br /&gt;The solution to this was to consolidate the two access controls into a single access control.  Doing so would not only simplify SELinux policy but also allow us to cleanup and consolidate much of the related SELinux kernel code.  The new network peer controls work by deriving a single peer label for a network packet and then applying a single access check.  In the rare case that multiple peer labels are present on a packet they must be equivalent for the packet to be considered valid; invalid packets are dropped.  The resulting single access check looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
allow socket_t peer_t:peer recv;
&lt;/pre&gt;&lt;br /&gt;The new access check behaves exactly like the previous checks in that socket_t is the security label of the receiving socket and peer_t is the packet's peer label (unlabeled_t when no peer labeling is in use).  The difference being that it is only evaluated once per packet and is protocol agnostic; a big improvement on both counts.&lt;br /&gt;&lt;br /&gt;While I believe most would agree that the new network peer controls are a welcome change, the fact remains that they are a change and a mechanism must exist to allow a smooth transition between the old and new controls.  To solve this problem the concept of "policy capabilities" (yes, I know it is a poor name) was introduced which allows policy writers to selectively enable or disable kernel features.  As of right now I am not aware of any SELinux policy, including the &lt;a href="http://oss.tresys.com/projects/refpolicy" rel="nofollow"&gt;Reference Policy&lt;/a&gt; which enables the new controls.  You can check your own system by running the following command (0 means the legacy controls are in use, 1 means the new controls are in use):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# cat /selinux/policy_capabilities/network_peer_controls
&lt;/pre&gt;&lt;br /&gt;Later on I'll explain how to enable the new network peer controls, but first I need to describe the new network ingress/egress access controls which are also enabled by the "network_peer_controls" policy capability.  I don't want anyone having a nasty surprise :)  More on the ingress/egress controls in the next post.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:1758</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/1758.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=1758"/>
    <title>Fallback Label Configuration Example</title>
    <published>2008-08-13T22:00:43Z</published>
    <updated>2008-08-13T22:00:43Z</updated>
    <category term="userspace"/>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="documentation"/>
    <content type="html">One of the new features added to the &lt;a href="http://kernelnewbies.org/Linux_2_6_25" rel="nofollow"&gt;2.6.25&lt;/a&gt; release of the Linux Kernel was the ability to specify fallback peer labels using NetLabel.  This made it possible for system administrators to specify a peer label to be used in the absence of a peer labeling protocol such as CIPSO or Labeled IPsec.  In this post I'll try to provide a quick introduction on how to configure NetLabel to provide fallback peer labels.&lt;br /&gt;&lt;br /&gt;The first step is to make sure you have all the right kernel and userspace bits in place.  Any standard Linux distribution kernel 2.6.25 or greater that has NetLabel support should work.  In addition to the kernel you will need to make sure the userspace utility, &lt;i&gt;netlabelctl&lt;/i&gt;, supports the new configuration options; this requires &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=174379" rel="nofollow"&gt;netlabel_tools&lt;/a&gt; version 0.18 or greater.  Once you have verified that you have the right versions installed and running, you can verify everything by running the following commands.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# netlabelctl -p mgmt version
NetLabel protocol version : 2
# netlabelctl -h
NetLabel Control Utility, version 0.18 (libnetlabel 0.18)
 Usage: netlabelctl [&amp;lt;flags&amp;gt;] &amp;lt;module&amp;gt; [&amp;lt;commands&amp;gt;]

 Flags:
   -h        : help/usage message
   -p        : make the output pretty
   -t &amp;lt;secs&amp;gt; : timeout
   -v        : verbose mode

 Modules and Commands:
  mgmt : NetLabel management
    version
    protocols
  map : Domain/Protocol mapping
    add default|domain:&amp;lt;domain&amp;gt; protocol:&amp;lt;protocol&amp;gt;[,&amp;lt;extra&amp;gt;]
    del default|domain:&amp;lt;domain&amp;gt;
    list
  unlbl : Unlabeled packet handling
    accept on|off
    add default|interface:&amp;lt;DEV&amp;gt; address:&amp;lt;ADDR&amp;gt;[/&amp;lt;MASK&amp;gt;]
                                label:&amp;lt;LABEL&amp;gt;
    del default|interface:&amp;lt;DEV&amp;gt; address:&amp;lt;ADDR&amp;gt;[/&amp;lt;MASK&amp;gt;]
    list
  cipsov4 : CIPSO/IPv4 packet handling
    add trans doi:&amp;lt;DOI&amp;gt; tags:&amp;lt;T1&amp;gt;,&amp;lt;Tn&amp;gt;
            levels:&amp;lt;LL1&amp;gt;=&amp;lt;RL1&amp;gt;,&amp;lt;LLn&amp;gt;=&amp;lt;RLn&amp;gt;
            categories:&amp;lt;LC1&amp;gt;=&amp;lt;RC1&amp;gt;,&amp;lt;LCn&amp;gt;=&amp;lt;RCn&amp;gt;
    add pass doi:&amp;lt;DOI&amp;gt; tags:&amp;lt;T1&amp;gt;,&amp;lt;Tn&amp;gt;
    del doi:&amp;lt;DOI&amp;gt;
    list [doi:&amp;lt;DOI&amp;gt;]
&lt;/pre&gt;&lt;br /&gt;The first command checks to see that the kernel speaks version 2 of the NetLabel control protocol which means that it understands the new fallback peer label configuration options.  The second command verifies that you have &lt;i&gt;netlabelctl&lt;/i&gt; version 0.18 installed and that it supports the fallback configuration commands that we will be using.  If everything looks okay it is time to move on to the next step, building a test tool that we can use to verify the configuration.  Obviously this isn't a strict requirement for configuring the fallback label mechanism but it is a nice way to verify that your configuration is correct.  The test tool I will be using here is a simple little test program I wrote some time ago to test basic peer label functionality for IPv4 TCP sockets, I call it &lt;a href="http://free.linux.hp.com/~pmoore/files_lj/getpeercon_server.c" rel="nofollow"&gt;getpeercon_server&lt;/a&gt;.  Once you have downloaded the C source file you will need to compile it with the following command, if you are on a Fedora system make sure you have the libselinux-devel package installed.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# gcc -o getpeercon_server getpeercon_server.c -lselinux
# ./getpeercon_server
usage: ./getpeercon_server &amp;lt;port&amp;gt;
&lt;/pre&gt;&lt;br /&gt;As you can see the tool is very simple and takes a single argument, the TCP port to bind to a listen for connections.  If you start the server on port 5000 and connect to it with telnet, netcat, or some other simple TCP application you should see something similar to what is shown below.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# ./getpeercon_server 5000
-&amp;gt; creating socket ... ok
-&amp;gt; listening on TCP port 5000 ... ok
-&amp;gt; waiting ... connect(127.0.0.1,NO_CONTEXT)
Hello NetLabel Fans!
-&amp;gt; connection closed
-&amp;gt; waiting ...
&lt;/pre&gt;&lt;br /&gt;In the example above we can see that a client connected from localhost, 127.0.0.1, and there was no peer label information provided with the connection, NO_CONTEXT.  Now lets configure a fallback peer label for localhost and try it again.  Adding a fallback label is relatively simple and can be done with a single command.  However, the example below executes two commands.  The first command adds a fallback label, "system_u:object_r:netlabel_peer_t:s0", to all traffic coming over the loopback interface, "lo", from localhost, 127.0.0.1.  The second command displays all of configured fallback labels; not a necessary step but helpful to ensure that you configured everything correctly.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# netlabelctl unlbl add interface:lo address:127.0.0.1 \
                        label:system_u:object_r:netlabel_peer_t:s0
# netlabelctl -p unlbl list
Accept unlabeled packets : on
Configured NetLabel address mappings (1)
 interface: lo
   address: 127.0.0.1/32
    label: "system_u:object_r:netlabel_peer_t:s0"
&lt;/pre&gt;&lt;br /&gt;Now, lets try our simple connection test again with our newly established fallback label configuration.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
# ./getpeercon_server 5000
-&amp;gt; creating socket ... ok
-&amp;gt; listening on TCP port 5000 ... ok
-&amp;gt; waiting ... connect(127.0.0.1,system_u:object_r:netlabel_peer_t:s0)
Fallback Labels Are Really Cool!
-&amp;gt; connection closed
-&amp;gt; waiting ...
&lt;/pre&gt;&lt;br /&gt;If you look at the output you will notice almost everything is the same except for one important thing, instead of NO_CONTEXT the test tool is displaying the fallback label we just configured.  The kernel treats the NetLabel fallback label just the same as a normal peer label taken from a CIPSO tag or Labeled IPsec Security Association.  This means that not only is the fallback label passed to applications that request it, it is also used when enforcing the LSM's network security policy; in this case SELinux.  However, it is important to remember that the fallback labels are overridden by peer labeling protocols.  As a result, if both fallback peer label information and Labeled IPsec peer label information is available then the kernel will use the Labeled IPsec peer label information and ignore the fallback peer labels.  Fallback peer labels can be configured based on the network interface, network address, and netmask or just network address and netmask when the default network interface is chosen.&lt;br /&gt;&lt;br /&gt;Before you start making use of the NetLabel fallback labels, there are a few things you should take into consideration.  First, while the fallback functionality was included in Linux Kernel 2.6.25 there was a small bug which prevented some IPv6 fallback labels from being displayed correctly using the &amp;quot;netlabelctl -p unlbl list&amp;quot; command; this has been &lt;a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=59d88c00cafe5192b058abf4f3ce17c2e27d1c09" rel="nofollow"&gt;fixed&lt;/a&gt; in kernel 2.6.26.  Second, Fedora has not yet adopted version 0.18 of &lt;i&gt;netlabel_tools&lt;/i&gt; which means that you will need to download and build &lt;i&gt;netlabelctl&lt;/i&gt; separately to take advantage of the new fallback functionality.  A Red Hat bugzilla &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=439833" rel="nofollow"&gt;entry&lt;/a&gt; has been filed to get the latest &lt;i&gt;netlabel_tools&lt;/i&gt; package included in Fedora.&lt;br /&gt;&lt;br /&gt;Test tool download: &lt;a href="http://free.linux.hp.com/~pmoore/files_lj/getpeercon_server.c" rel="nofollow"&gt;getpeercon_server&lt;/a&gt;&lt;br /&gt;NetLabel userspace download: &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=174379" rel="nofollow"&gt;netlabel_tools version 0.18&lt;/a&gt;&lt;br /&gt;Fedora bugzilla entry: &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=439833" rel="nofollow"&gt;RH BZ #439833&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:1329</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/1329.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=1329"/>
    <title>Linux Foundation Presentation Video</title>
    <published>2008-08-04T23:07:27Z</published>
    <updated>2008-08-04T23:07:27Z</updated>
    <category term="secmark"/>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="ipsec"/>
    <category term="documentation"/>
    <category term="smack"/>
    <content type="html">Thanks to James Morris for pointing out that the &lt;a href="http://paulmoore.livejournal.com/964.html"&gt;Linux Foundation Japan&lt;/a&gt; videos are now &lt;a href="http://www.linux-foundation.jp/modules/tinyd5/index.php?id=9" rel="nofollow"&gt;online&lt;/a&gt;.  I've put a copy at the link below.  All I ask is that you remember I had been in Japan less than a day when this was filmed and was still dealing with a 13 hour time difference :)&lt;br /&gt;&lt;br /&gt;Video download: &lt;a href="http://free.linux.hp.com/~pmoore/files_lj/labeled_networking-lfjapan-07092008.flv" rel="nofollow"&gt;Introduction to Labeled Networking on Linux&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:1162</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/1162.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=1162"/>
    <title>SELinux Developer's Summit 2008</title>
    <published>2008-07-24T23:26:17Z</published>
    <updated>2008-07-25T01:41:02Z</updated>
    <category term="secmark"/>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="ipsec"/>
    <category term="documentation"/>
    <content type="html">I'm at &lt;a href="http://www.linuxsymposium.org" rel="nofollow"&gt;OLS&lt;/a&gt; right now, but the day before OLS started we held this year's &lt;a href="http://www.selinuxproject.org/page/Developer_Summit_2008" rel="nofollow"&gt;SELinux Developer's Summit&lt;/a&gt; as part of OLS's mini-summit program.  This year's summit was a bit of a departure from previous years in that the summit consisted of several short presentations and was open to everyone.  Personally, I thought it went very well, with lots of good work-in-progress presentations, my favorite kind, and plenty of discussion.  My own contribution, an update on the state of SELinux Labeled Networking, can be found below.  James Morris has posted all of the slides on the &lt;a href="http://www.selinuxproject.org/page/Developer_Summit_2008/Schedule" rel="nofollow"&gt;schedule&lt;/a&gt; page, so you can check out what was discussed if you weren't able to make it to Ottawa this year.&lt;br /&gt;&lt;br /&gt;Hopefully we will be able to continue having regular SELinux Developer Summits in the future that are similar to the one this year.  There is even some talk about extending future summits to include both a presentation day and a hack-fast day.  I can't remember who proposed the hack-fest day, but I like it.  Especially if we hold it in Hawaii :)&lt;br /&gt;&lt;br /&gt;Presentation download: &lt;a href="http://free.linux.hp.com/~pmoore/files_lj/labeled_networking-ols-07222008.pdf" rel="nofollow"&gt;State of SELinux Labeled Networking&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:paulmoore:964</id>
    <link rel="alternate" type="text/html" href="http://paulmoore.livejournal.com/964.html"/>
    <link rel="self" type="text/xml" href="http://paulmoore.livejournal.com/data/atom/?itemid=964"/>
    <title>The Importance of Documentation</title>
    <published>2008-07-11T11:16:25Z</published>
    <updated>2008-07-24T23:00:53Z</updated>
    <category term="secmark"/>
    <category term="selinux"/>
    <category term="netlabel"/>
    <category term="ipsec"/>
    <category term="documentation"/>
    <category term="smack"/>
    <content type="html">When I think about all of the items on my Linux Labeled Networking todo list one of the items that stands out the most is the lack of good, useful documentation.  Oh sure, there is some documentation available, for instance Joshua Brindle's &lt;a href="http://securityblog.org/brindle/2007/05/28/secure-networking-with-selinux" rel="nofollow"&gt;blog post&lt;/a&gt; about Labeled IPsec on SELinux, but most of it is quickly becoming dated and no longer a good fit with current kernels and tools.  A big part of the problem is the amount of ongoing development which makes it difficult to spend much time writing documentation.  I've managed to convince myself that development of user requested features is more important than documentation, but I suppose that does little to help people who are trying to use and configure the existing labeled networking features.&lt;br /&gt;&lt;br /&gt;While I still think development is more important, we still have a lot of usability functionality to implement, I am going to try and do a better job of documenting the Linux Labeled Networking features.  Part of that effort is the creation of this blog where I plan to talk about Linux Labeled Networking development and related topics.  To kick things off I've posted slides from a presentation I gave earlier this week at the &lt;a href="http://www.linux-foundation.jp/modules/eguide" rel="nofollow"&gt;Linux Foundation's Japan Symposium&lt;/a&gt;, the presentation is designed to be a quick introduction to labeled networking on Linux including overviews of Secmark, NetLabel, and Labeled IPsec.&lt;br /&gt;&lt;br /&gt;Presentation download: &lt;a href="http://free.linux.hp.com/~pmoore/files_lj/labeled_networking-lfjapan-07092008.pdf" rel="nofollow"&gt;Introduction to Labeled Networking on Linux&lt;/a&gt;</content>
  </entry>
</feed>

