[apparmor] IPC syntax - again

Ángel González ingenit at zoho.com
Wed Jul 10 11:35:35 UTC 2013


Replying to differenet mails:
> now what of abstract sockets? They are the same as unix domain but
> begin with \0. We could use this notation or chose an alternate way
> of expressing it.
>    network unix name=\0foo,
> or maybe
>    network unix abstract=foo,
>

Use an @, ie.
  network unix @/tmp/.X11-unix/X0

This is the syntax used on other places, such as netstat(1) output.


> File will be extended to support the
>
>   <prefix> file [<perm>] <path>,

Good. I find this syntax cleaner. :)


>> One very useful AppArmor profile for FTP would prevent FTP "bounce"
>> scanning:
>>
>> profile ftpd {
>>    network inet stream (bind, listen, accept) subject=(port=21),
>>    network inet stream (bind, listen, accept) subject=(port=20),
>>    network inet stream (connect),
>>    # deny access to internal hosts
>>    deny network inet stream (connect) peer=(address4=192.168.0.0/16),
>>    deny network inet6 stream (connect) peer=(address6=fe80::/64),
>>    deny network inet6 stream (connect) peer=(address6=2001:db8::/32),
>> }
>>
> Haha, again! Where are we going to stick those pesky permission
>
> So this will work with active ftp but not passive. Nor does it provide
> a binding between the connect and the peer that did the initial connection
>
> Do I have a good suggested syntax for doing those things? Not yet just
> saying this really isn't sufficient for ftp, at least in passive mode
> as we need to be able to accept a connection on N>  1024 from the host
> that made the initial connection to port 21.
>
> Some thing along the lines of (and no I am not proposing doing this)
>    network inet stream (bind, list, accept) subject=(port=20) {
>      network inet stream (bind, list, accept) peer=(address=@{peeraddress} port=@{peerport}+1)
>      network inet stream (connect) peer=(address=@{peeraddress} port=@{peerport}+1)
>    }
>
> yes tcp is an awful protocol, but that is one reason its interesting to
> look at.
>
> Is doing this with in the apparmor policy the correct place to do stuff
> like this? I'm inclined to say no when we have the conntracker that
> already has rules for dealing with ftp's weirdness.  And we could get
> away with something like
>
>    network inet stream label=ftp_t connected,
>
> or some such.

I would use specific types for them, so you could for instance have 
rules like:
  ftp server 0.0.0.0:21
  ftp connect ftp.ubuntu.com
  http get http://ftp.ubuntu.com/ubuntu/dists/saucy/*

Those rules would currently alias a simple rule like "fetch anything on 
port 80" but could also transparently add a label with a magic name, or 
redirect the connection to a protocol-specific proxy (or even support a 
system switch so they have a different meaning when there is a company 
proxy).


>   network inet,   # all inet allowed
>   inet,           # the inet keyword equivalent of network inet,
>
>   inet bind address=192.168.1.10,   # a finer grained inet rule

Will ‘inet’ mean af_inet and af_inet6 or only af_inet? I'm not fond on 
the abbreviation, but I understand rules would get quite long. Perhaps 
network could be abbreviated to "net" instead.






More information about the AppArmor mailing list