* Getting full path from dentry in LSM hooks
@ 2004-09-03 12:12 Kristian Sørensen
2004-09-03 12:32 ` Christoph Hellwig
` (2 more replies)
0 siblings, 3 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-03 12:12 UTC (permalink / raw)
To: Linux Kernel Mailing List; +Cc: umbrella-devel
Hi!
I have a short question, concerning how to get the full path of a file
from a LSM hook.
- If the "file" of the dentry is located in the root filesystem: no
problem - simply traverse the dentrys, to generate the path.
- If the "file" is mounted from another partition, you do not get the
full path by traversing the dentrys.
Example:
If we have a system with a normal root (/) and a seperate boot partition
(mounted on /boot :). In the LSM hook inode_permission, you get the
arguments (struct inode *inode, int mask, struct nameidata *nd).
Finding the path, we traverse the dentrys from (nd->dentry). But if the
inode is a file in /boot we only get the filename (e.g. kernel-2.6.8.1
instead of /boot/kernel-2.6.8.1)
Can some one reveal the trick to get the full path nomater if the
filesystem is root or mounted elsewhere in the filesystem?
Best regards,
Kristian Sørensen.
The Umbrella Project -- http://umbrella.sf.net
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Getting full path from dentry in LSM hooks
2004-09-03 12:12 Getting full path from dentry in LSM hooks Kristian Sørensen
@ 2004-09-03 12:32 ` Christoph Hellwig
2004-09-03 12:38 ` [Umbrella-devel] " Kristian Sørensen
2004-09-03 12:43 ` Andrea Arcangeli
2004-09-03 14:14 ` Alan Cox
2 siblings, 1 reply; 22+ messages in thread
From: Christoph Hellwig @ 2004-09-03 12:32 UTC (permalink / raw)
To: Kristian Sørensen; +Cc: Linux Kernel Mailing List, umbrella-devel
On Fri, Sep 03, 2004 at 02:12:21PM +0200, Kristian Sørensen wrote:
> I have a short question, concerning how to get the full path of a file
> from a LSM hook.
>
> - If the "file" of the dentry is located in the root filesystem: no
> problem - simply traverse the dentrys, to generate the path.
>
> - If the "file" is mounted from another partition, you do not get the
> full path by traversing the dentrys.
There is no canonical full path for a given dentry.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 12:32 ` Christoph Hellwig
@ 2004-09-03 12:38 ` Kristian Sørensen
2004-09-03 13:04 ` Christoph Hellwig
0 siblings, 1 reply; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-03 12:38 UTC (permalink / raw)
To: umbrella-devel; +Cc: Linux Kernel Mailing List
Hi Christoph!
Christoph Hellwig wrote:
> On Fri, Sep 03, 2004 at 02:12:21PM +0200, Kristian Sørensen wrote:
>
>>I have a short question, concerning how to get the full path of a file
>>from a LSM hook.
>>
>>- If the "file" of the dentry is located in the root filesystem: no
>> problem - simply traverse the dentrys, to generate the path.
>>
>>- If the "file" is mounted from another partition, you do not get the
>> full path by traversing the dentrys.
>
>
> There is no canonical full path for a given dentry.
Is there another way to get it? We also get an inodepointer from the LSM
hook. As far as I know, the file struct has an entry called vfs_mount,
which has an entry called root_mnt - could this be used? (and if so, how
do I get from the Inode to the file struct? :-/ )
KS.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Getting full path from dentry in LSM hooks
2004-09-03 12:12 Getting full path from dentry in LSM hooks Kristian Sørensen
2004-09-03 12:32 ` Christoph Hellwig
@ 2004-09-03 12:43 ` Andrea Arcangeli
2004-09-03 14:14 ` Alan Cox
2 siblings, 0 replies; 22+ messages in thread
From: Andrea Arcangeli @ 2004-09-03 12:43 UTC (permalink / raw)
To: Kristian Sørensen; +Cc: Linux Kernel Mailing List, umbrella-devel
On Fri, Sep 03, 2004 at 02:12:21PM +0200, Kristian Sørensen wrote:
> Hi!
>
> I have a short question, concerning how to get the full path of a file
> from a LSM hook.
>
> - If the "file" of the dentry is located in the root filesystem: no
> problem - simply traverse the dentrys, to generate the path.
>
> - If the "file" is mounted from another partition, you do not get the
> full path by traversing the dentrys.
>
> Example:
> If we have a system with a normal root (/) and a seperate boot partition
> (mounted on /boot :). In the LSM hook inode_permission, you get the
> arguments (struct inode *inode, int mask, struct nameidata *nd).
> Finding the path, we traverse the dentrys from (nd->dentry). But if the
> inode is a file in /boot we only get the filename (e.g. kernel-2.6.8.1
> instead of /boot/kernel-2.6.8.1)
>
>
> Can some one reveal the trick to get the full path nomater if the
> filesystem is root or mounted elsewhere in the filesystem?
fix d_path, I need that too ;)
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 12:38 ` [Umbrella-devel] " Kristian Sørensen
@ 2004-09-03 13:04 ` Christoph Hellwig
2004-09-03 13:20 ` Kristian Sørensen
0 siblings, 1 reply; 22+ messages in thread
From: Christoph Hellwig @ 2004-09-03 13:04 UTC (permalink / raw)
To: Kristian Sørensen; +Cc: umbrella-devel, Linux Kernel Mailing List
On Fri, Sep 03, 2004 at 02:38:12PM +0200, Kristian Sørensen wrote:
> Is there another way to get it? We also get an inodepointer from the LSM
> hook. As far as I know, the file struct has an entry called vfs_mount,
> which has an entry called root_mnt - could this be used? (and if so, how
> do I get from the Inode to the file struct? :-/ )
Witch a struct file you can use d_path which gives you a canonical path
in the _current_ _namespace_.
What do you want to do with the path anyway?
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 13:04 ` Christoph Hellwig
@ 2004-09-03 13:20 ` Kristian Sørensen
2004-09-03 14:01 ` Christoph Hellwig
2004-09-03 15:38 ` Stephen Smalley
0 siblings, 2 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-03 13:20 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: umbrella-devel, Linux Kernel Mailing List
Christoph Hellwig wrote:
> On Fri, Sep 03, 2004 at 02:38:12PM +0200, Kristian Sørensen wrote:
>
>>Is there another way to get it? We also get an inodepointer from the LSM
>>hook. As far as I know, the file struct has an entry called vfs_mount,
>>which has an entry called root_mnt - could this be used? (and if so, how
>>do I get from the Inode to the file struct? :-/ )
>
>
> Witch a struct file you can use d_path which gives you a canonical path
> in the _current_ _namespace_.
But we do not have a struct file - just an inode or a dentry :((
> What do you want to do with the path anyway?
We are working on a project called Umbrella, (umbrella.sf.net) which
implements processbased mandatory accesscontrol in the Linux kernel.
This access control is controlled by "restriction", e.g. by restricting
some process from accessing any given file or directory.
E.g. if a root owned process is restricted from accessing /var/www, and
the process is compromised by an attacker, no mater what he does, he
would not be able to access this directory.
KS
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 13:20 ` Kristian Sørensen
@ 2004-09-03 14:01 ` Christoph Hellwig
2004-09-03 19:54 ` Kristian Sørensen
2004-09-03 15:38 ` Stephen Smalley
1 sibling, 1 reply; 22+ messages in thread
From: Christoph Hellwig @ 2004-09-03 14:01 UTC (permalink / raw)
To: Kristian Sørensen
Cc: Christoph Hellwig, umbrella-devel, Linux Kernel Mailing List
On Fri, Sep 03, 2004 at 03:20:55PM +0200, Kristian Sørensen wrote:
> But we do not have a struct file - just an inode or a dentry :((
Then you can't generate a full path.
> We are working on a project called Umbrella, (umbrella.sf.net) which
> implements processbased mandatory accesscontrol in the Linux kernel.
> This access control is controlled by "restriction", e.g. by restricting
> some process from accessing any given file or directory.
>
> E.g. if a root owned process is restricted from accessing /var/www, and
> the process is compromised by an attacker, no mater what he does, he
> would not be able to access this directory.
mount --bind /var/www /home/joe/p0rn/, and then?
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Getting full path from dentry in LSM hooks
2004-09-03 12:12 Getting full path from dentry in LSM hooks Kristian Sørensen
2004-09-03 12:32 ` Christoph Hellwig
2004-09-03 12:43 ` Andrea Arcangeli
@ 2004-09-03 14:14 ` Alan Cox
2004-09-03 20:05 ` [Umbrella-devel] " Kristian Sørensen
2 siblings, 1 reply; 22+ messages in thread
From: Alan Cox @ 2004-09-03 14:14 UTC (permalink / raw)
To: Kristian Sørensen; +Cc: Linux Kernel Mailing List, umbrella-devel
On Gwe, 2004-09-03 at 13:12, Kristian Sørensen wrote:
> I have a short question, concerning how to get the full path of a file
> from a LSM hook.
The full path or a full path. It may have several. They may also have
changed under you.
> Can some one reveal the trick to get the full path nomater if the
> filesystem is root or mounted elsewhere in the filesystem?
You can get the namespace and the name within that namespace that
represents at least one of the names of the file within the vfs layer
(this is what the VFS itself uses for the struct nameidata).
There may be multiple links to a file, it may be mounted in multiple
places and someone on a seperate NFS server may have moved it while you
are thinking about it.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 13:20 ` Kristian Sørensen
2004-09-03 14:01 ` Christoph Hellwig
@ 2004-09-03 15:38 ` Stephen Smalley
1 sibling, 0 replies; 22+ messages in thread
From: Stephen Smalley @ 2004-09-03 15:38 UTC (permalink / raw)
To: Kristian Sørensen
Cc: Christoph Hellwig, umbrella-devel, Linux Kernel Mailing List
On Fri, 2004-09-03 at 09:20, Kristian Sørensen wrote:
> E.g. if a root owned process is restricted from accessing /var/www, and
> the process is compromised by an attacker, no mater what he does, he
> would not be able to access this directory.
Control access to objects, not names. Assign security attributes to the
objects, and use those attributes in your access control checks, not a
useless pathname. Otherwise, your "security" system will always be
trivially bypassable.
--
Stephen Smalley <sds@epoch.ncsc.mil>
National Security Agency
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 14:01 ` Christoph Hellwig
@ 2004-09-03 19:54 ` Kristian Sørensen
2004-09-04 11:09 ` Christoph Hellwig
0 siblings, 1 reply; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-03 19:54 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: umbrella-devel, Linux Kernel Mailing List
Christoph Hellwig wrote:
> On Fri, Sep 03, 2004 at 03:20:55PM +0200, Kristian Sørensen wrote:
>
>>But we do not have a struct file - just an inode or a dentry :((
>
>
> Then you can't generate a full path.
>
>
>>We are working on a project called Umbrella, (umbrella.sf.net) which
>>implements processbased mandatory accesscontrol in the Linux kernel.
>>This access control is controlled by "restriction", e.g. by restricting
>> some process from accessing any given file or directory.
>>
>>E.g. if a root owned process is restricted from accessing /var/www, and
>>the process is compromised by an attacker, no mater what he does, he
>>would not be able to access this directory.
>
>
> mount --bind /var/www /home/joe/p0rn/, and then?
Actually this "attack" is avoided, because restrictions are enherited,
from parent proces to its children.
Okay, this is how it works in basic:
------------------
ks@qbox:~/umbrella-devel/userspace
$ touch /tmp/a
ks@qbox:~/umbrella-devel/userspace
$ ./umbrella_restricted_sh
sh-2.05b$ touch /tmp/a
touch: setting times of `/tmp/a': Operation not permitted
sh-2.05b$ exit
Restricted child died
Thank you for testing!
Concider joining the development at http://umbrella.sourceforge.net
------------------
- the "umbrella_restricted_sh" just forks a new shell, which is
restricted from /tmp
Now let's try your suggestion:
------------------------
root@qbox:~/umbrella-devel/userspace
$ id
uid=0(root) gid=0(root)
groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
root@qbox:~/umbrella-devel/userspace
$ mkdir new-tmp
root@qbox:~/umbrella-devel/userspace
$ mount --bind /tmp new-tmp
root@qbox:~/umbrella-devel/userspace
$ mount
/dev/discs/disc1/part2 on / type ext3 (rw)
none on /dev type devfs (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw)
/dev/discs/disc0/part1 on /home type ext3 (rw)
/dev/discs/disc0/part2 on /media type ext3 (rw)
none on /dev/shm type tmpfs (rw)
none on /proc/bus/usb type usbfs (rw)
/tmp on /home/ks/umbrella-devel/userspace/new-tmp type none (rw,bind)
root@qbox:~/umbrella-devel/userspace
$ ./umbrella_restricted_sh
sh-2.05b# touch /tmp/a
touch: setting times of `/tmp/a': Operation not permitted
sh-2.05b# touch new-tmp/a
touch: setting times of `new-tmp/a': Operation not permitted
sh-2.05b# ls new-tmp/
ls: new-tmp/: Operation not permitted
sh-2.05b# exit
Restricted child died
Thank you for testing!
Concider joining the development at http://umbrella.sourceforge.net
------------------------
As you can see, the bind-mount fails to succeed in accessing the files
in /tmp.
Best regards, Kristian.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 14:14 ` Alan Cox
@ 2004-09-03 20:05 ` Kristian Sørensen
2004-09-03 20:39 ` Valdis.Kletnieks
` (2 more replies)
0 siblings, 3 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-03 20:05 UTC (permalink / raw)
To: umbrella-devel; +Cc: Linux Kernel Mailing List
Alan Cox wrote:
> On Gwe, 2004-09-03 at 13:12, Kristian Sørensen wrote:
>
>>I have a short question, concerning how to get the full path of a file
>>from a LSM hook.
>
>
> The full path or a full path. It may have several. They may also have
> changed under you.
>
>
>>Can some one reveal the trick to get the full path nomater if the
>>filesystem is root or mounted elsewhere in the filesystem?
>
>
> You can get the namespace and the name within that namespace that
> represents at least one of the names of the file within the vfs layer
> (this is what the VFS itself uses for the struct nameidata).
>
> There may be multiple links to a file, it may be mounted in multiple
> places and someone on a seperate NFS server may have moved it while you
> are thinking about it.
Umbrella is mostly designed for embedded systems (where selinux is
overkill) and also it is very easy to understand. Most restrictions will
be made to e.g. stop viruses from spreading, and it is quite easy, yet
very effective:
If an email client receives an malformed email (like the countless
attacks on outlook), a simple restriction could be for the process
handeling the mail would be "$HOME/.addressbook", furthermore, you could
specify that attachments executed _from_ the emailprogram would not have
access to the network. Thus the virus cannot find mail addresses to send
itself to - and it cannot even get network access. Simple and effective.
Also simple bufferoverflows in suid-root programs may be avoided. The
simple way would to set the restriction "no fork", and thus if an
attacker tries to fork a (root) shell, this would be denied. Another way
could be to heavily restrict access to the filesystem. If the program is
restricted from /var, the root shell spawned by the attack would not
have access either. (restrictions are enherited from parent to children).
Best regards, Kristian.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 20:05 ` [Umbrella-devel] " Kristian Sørensen
@ 2004-09-03 20:39 ` Valdis.Kletnieks
2004-09-04 9:06 ` Kristian Sørensen
` (2 more replies)
2004-09-04 2:41 ` Horst von Brand
2004-09-04 16:56 ` Alan Cox
2 siblings, 3 replies; 22+ messages in thread
From: Valdis.Kletnieks @ 2004-09-03 20:39 UTC (permalink / raw)
To: Kristian Sørensen; +Cc: umbrella-devel, Linux Kernel Mailing List
[-- Attachment #1: Type: text/plain, Size: 1174 bytes --]
On Fri, 03 Sep 2004 22:05:03 +0200, =?UTF-8?B?S3Jpc3RpYW4gU8O4cmVuc2Vu?= said:
> Also simple bufferoverflows in suid-root programs may be avoided. The
> simple way would to set the restriction "no fork", and thus if an
> attacker tries to fork a (root) shell, this would be denied.
All this does is stop fork(). I'm not sure, but most shellcodes I've seen
don't bother forking, they just execve() a shell....
It doesn't stop a buffer overflow that does this:
f1 = open("/bin/bash");
f2 = open("/tmp/bash", O_CREAT);
while ((bytes = read(f1,buffer,sizeof(buffer))) > 0)
write(f2,buffer,bytes);
fchmod(f2,4775);
close(f1); close(f2);
Papering over *that* one by restricting fchmod just means the exploit needs to
append a line to /etc/passwd, or create a trojan inetd.conf or crontab entry,
or any of the other myriad ways a program can leave a backdoor (there's a
*reason* SELinux ends up with all those rules - this isn't an easy task)...
Remember - just papering over the fact that most shellcodes just execve() a
shell doesn't fix the fundemental problem, which is that the attacker is able
to run code of his choosing as root.
[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 20:05 ` [Umbrella-devel] " Kristian Sørensen
2004-09-03 20:39 ` Valdis.Kletnieks
@ 2004-09-04 2:41 ` Horst von Brand
2004-09-04 19:01 ` Kristian Sørensen
2004-09-04 19:06 ` Kristian Sørensen
2004-09-04 16:56 ` Alan Cox
2 siblings, 2 replies; 22+ messages in thread
From: Horst von Brand @ 2004-09-04 2:41 UTC (permalink / raw)
To: Kristian Sørensen; +Cc: umbrella-devel, Linux Kernel Mailing List
=?UTF-8?B?S3Jpc3RpYW4gU8O4cmVuc2Vu?= <ks@cs.aau.dk> said:
[...]
> Umbrella is mostly designed for embedded systems (where selinux is
> overkill) and also it is very easy to understand. Most restrictions will
> be made to e.g. stop viruses from spreading, and it is quite easy, yet
> very effective:
> If an email client receives an malformed email (like the countless
> attacks on outlook), a simple restriction could be for the process
> handeling the mail would be "$HOME/.addressbook",
A mail handling process with the adressbook off-limit sounds _real_ useful.
> furthermore, you could
> specify that attachments executed _from_ the emailprogram would not have
> access to the network.
I.e., no child of the email program could access the network, not even to
answer a message. Sounds restrictive.
> Thus the virus cannot find mail addresses to send
> itself to - and it cannot even get network access. Simple and effective.
Right.
> Also simple bufferoverflows in suid-root programs may be avoided.
How?
> The
> simple way would to set the restriction "no fork", and thus if an
> attacker tries to fork a (root) shell, this would be denied.
A simple exec(2) will do. Or overwriting a file. Or... If you restrict all
potentially dangerous operations, you have nothing useful left.
> Another way
> could be to heavily restrict access to the filesystem. If the program is
> restricted from /var, the root shell spawned by the attack would not
> have access either. (restrictions are enherited from parent to children).
Just delete /var. Oops, it is there for a purpose...
--
Dr. Horst H. von Brand User #22616 counter.li.org
Departamento de Informatica Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria +56 32 654239
Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 20:39 ` Valdis.Kletnieks
@ 2004-09-04 9:06 ` Kristian Sørensen
2004-09-04 10:50 ` Emmanuel Fleury
2004-09-07 14:19 ` Kristian Sørensen
2 siblings, 0 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-04 9:06 UTC (permalink / raw)
To: umbrella-devel; +Cc: Linux Kernel Mailing List
Valdis.Kletnieks@vt.edu wrote:
> On Fri, 03 Sep 2004 22:05:03 +0200, =?UTF-8?B?S3Jpc3RpYW4gU8O4cmVuc2Vu?= said:
>
>
>>Also simple bufferoverflows in suid-root programs may be avoided. The
>>simple way would to set the restriction "no fork", and thus if an
>>attacker tries to fork a (root) shell, this would be denied.
>
>
> All this does is stop fork(). I'm not sure, but most shellcodes I've seen
> don't bother forking, they just execve() a shell....
I was not precise enough - it is not just fork, but the LSM catches
every time a new process is created - so we do have some way of generic
catching creation of processes, and denying so, if prohibited.
> It doesn't stop a buffer overflow that does this:
>
> f1 = open("/bin/bash");
> f2 = open("/tmp/bash", O_CREAT);
> while ((bytes = read(f1,buffer,sizeof(buffer))) > 0)
> write(f2,buffer,bytes);
> fchmod(f2,4775);
> close(f1); close(f2);
You are right! ... as long as a new process is not created, this may do
some damage ... but:
> Papering over *that* one by restricting fchmod just means the exploit needs to
> append a line to /etc/passwd, or create a trojan inetd.conf or crontab entry,
Not mny suid programs would really need to be able to access the /etc
and everything below... E.g. cdrecord (there were a bug a year ago or
something)... it should definitely not have access to the possiblílities
you mention!
> Remember - just papering over the fact that most shellcodes just execve() a
> shell doesn't fix the fundemental problem, which is that the attacker is able
> to run code of his choosing as root.
Good point!
Best, Kristian.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 20:39 ` Valdis.Kletnieks
2004-09-04 9:06 ` Kristian Sørensen
@ 2004-09-04 10:50 ` Emmanuel Fleury
2004-09-07 14:19 ` Kristian Sørensen
2 siblings, 0 replies; 22+ messages in thread
From: Emmanuel Fleury @ 2004-09-04 10:50 UTC (permalink / raw)
To: umbrella-devel
On Fri, 2004-09-03 at 22:39, Valdis.Kletnieks@vt.edu wrote:
>
> All this does is stop fork(). I'm not sure, but most shellcodes I've seen
> don't bother forking, they just execve() a shell....
I think you totally misunderstood the thing...
Umbrella is a scheme that allow the user to restrict the capabilities of
a process within his own processes. Preventing the process to fork is
ONE thing that can be restricted but they might be plenty of others.
The idea is that each process originating from this process will inherit
from this restriction (and possibly have some more) and can NEVER been
granted to restore this capability again.
Now, this has a direct application to restrict the harm that can cause a
buffer-overflow, but nobody said that it would stop them... As Kristian
say all the time: « We can't prevent the rain, but we don't get wet. »
> Remember - just papering over the fact that most shellcodes just execve() a
> shell doesn't fix the fundemental problem, which is that the attacker is able
> to run code of his choosing as root.
Right.
Wonderful ! You just volunteered to find a simple and yet efficient
solution to this problem ! :)
Regards
--
Emmanuel Fleury
Computer Science Department, | Office: B1-201
Aalborg University, | Phone: +45 96 35 72 23
Fredriks Bajersvej 7E, | Fax: +45 98 15 98 89
9220 Aalborg East, Denmark | Email: fleury@cs.auc.dk
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 19:54 ` Kristian Sørensen
@ 2004-09-04 11:09 ` Christoph Hellwig
2004-09-04 18:52 ` Kristian Sørensen
0 siblings, 1 reply; 22+ messages in thread
From: Christoph Hellwig @ 2004-09-04 11:09 UTC (permalink / raw)
To: Kristian Sørensen; +Cc: umbrella-devel, Linux Kernel Mailing List
On Fri, Sep 03, 2004 at 09:54:23PM +0200, Kristian Sørensen wrote:
> >>We are working on a project called Umbrella, (umbrella.sf.net) which
> >>implements processbased mandatory accesscontrol in the Linux kernel.
> >>This access control is controlled by "restriction", e.g. by restricting
> >> some process from accessing any given file or directory.
> >>
> >>E.g. if a root owned process is restricted from accessing /var/www, and
> >>the process is compromised by an attacker, no mater what he does, he
> >>would not be able to access this directory.
> >
> >
> > mount --bind /var/www /home/joe/p0rn/, and then?
> Actually this "attack" is avoided, because restrictions are enherited,
> from parent proces to its children.
If you restrict your process on the path /var/ww/ but the same objects
are also available below a different path, what does that have to do with
child processes?
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 20:05 ` [Umbrella-devel] " Kristian Sørensen
2004-09-03 20:39 ` Valdis.Kletnieks
2004-09-04 2:41 ` Horst von Brand
@ 2004-09-04 16:56 ` Alan Cox
2004-09-04 18:47 ` Kristian Sørensen
2 siblings, 1 reply; 22+ messages in thread
From: Alan Cox @ 2004-09-04 16:56 UTC (permalink / raw)
To: Kristian Sørensen; +Cc: umbrella-devel, Linux Kernel Mailing List
On Gwe, 2004-09-03 at 21:05, Kristian Sørensen wrote:
> If an email client receives an malformed email (like the countless
> attacks on outlook), a simple restriction could be for the process
> handeling the mail would be "$HOME/.addressbook", furthermore, you could
> specify that attachments executed _from_ the emailprogram would not have
> access to the network. Thus the virus cannot find mail addresses to send
> itself to - and it cannot even get network access. Simple and effective.
ln /tmp/bwhahaha $HOME/.addressbook
more /tmp/bwhahaha
As the nice man from the NSA said ;) label content not paths. Use xattrs
to say "this is an addressbook" and then the path games go away.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-04 16:56 ` Alan Cox
@ 2004-09-04 18:47 ` Kristian Sørensen
0 siblings, 0 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-04 18:47 UTC (permalink / raw)
To: Alan Cox; +Cc: umbrella-devel, Linux Kernel Mailing List
Alan Cox wrote:
> On Gwe, 2004-09-03 at 21:05, Kristian Sørensen wrote:
>
>>If an email client receives an malformed email (like the countless
>>attacks on outlook), a simple restriction could be for the process
>>handeling the mail would be "$HOME/.addressbook", furthermore, you could
>>specify that attachments executed _from_ the emailprogram would not have
>>access to the network. Thus the virus cannot find mail addresses to send
>>itself to - and it cannot even get network access. Simple and effective.
>
>
> ln /tmp/bwhahaha $HOME/.addressbook
> more /tmp/bwhahaha
>
> As the nice man from the NSA said ;) label content not paths. Use xattrs
> to say "this is an addressbook" and then the path games go away.
Just as Christop Hellwig's suggestion (in this thread) this will not
work due to the placement of the LSM hooks :-) (he suggested making an
"mount -o bind").
KS.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-04 11:09 ` Christoph Hellwig
@ 2004-09-04 18:52 ` Kristian Sørensen
0 siblings, 0 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-04 18:52 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: umbrella-devel, Linux Kernel Mailing List
Christoph Hellwig wrote:
> On Fri, Sep 03, 2004 at 09:54:23PM +0200, Kristian Sørensen wrote:
>
>>>>We are working on a project called Umbrella, (umbrella.sf.net) which
>>>>implements processbased mandatory accesscontrol in the Linux kernel.
>>>>This access control is controlled by "restriction", e.g. by restricting
>>>> some process from accessing any given file or directory.
>>>>
>>>>E.g. if a root owned process is restricted from accessing /var/www, and
>>>>the process is compromised by an attacker, no mater what he does, he
>>>>would not be able to access this directory.
>>>
>>>
>>>mount --bind /var/www /home/joe/p0rn/, and then?
>>
>>Actually this "attack" is avoided, because restrictions are enherited,
>>from parent proces to its children.
>
>
> If you restrict your process on the path /var/ww/ but the same objects
> are also available below a different path, what does that have to do with
> child processes?
Well nothing :-) The point was, that links and mount bindings are
handled, and if the parent is restricted from accessing a file, the
child is too.
KS.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-04 2:41 ` Horst von Brand
@ 2004-09-04 19:01 ` Kristian Sørensen
2004-09-04 19:06 ` Kristian Sørensen
1 sibling, 0 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-04 19:01 UTC (permalink / raw)
To: Horst von Brand; +Cc: umbrella-devel, Linux Kernel Mailing List
Horst von Brand wrote:
>>Also simple bufferoverflows in suid-root programs may be avoided.
>
>
> How?
You can (naturally) not avoid the attack and thereby the process from
crashing - but you can avoid the effects of it. E.g. if you restrict the
suid-root process form spawning new processes, it would not be able to
spawn a root shell, programs liks passwd and cdrecord would be good
candidates to this restriction.
>> The
>>simple way would to set the restriction "no fork", and thus if an
>>attacker tries to fork a (root) shell, this would be denied.
>
>
> A simple exec(2) will do. Or overwriting a file. Or... If you restrict all
> potentially dangerous operations, you have nothing useful left.
>
>
>> Another way
>>could be to heavily restrict access to the filesystem. If the program is
>>restricted from /var, the root shell spawned by the attack would not
>>have access either. (restrictions are enherited from parent to children).
>
>
> Just delete /var. Oops, it is there for a purpose...
Sure... but not all programs really need access to this. My calendar on
my PDA for one do not. It (restricting /var) was, as I hope you
guessed?, an example!
A cool thing is also, that if you restrict the init process from
accessing a secific directory, then all processes in the system will be
restricted from this. This will be utilized by Umbrella, to introduce
signed files (public key cryptography). The area of the public keys will
be protected by the kernel - simply by restricting Init from this location.
KS.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-04 2:41 ` Horst von Brand
2004-09-04 19:01 ` Kristian Sørensen
@ 2004-09-04 19:06 ` Kristian Sørensen
1 sibling, 0 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-04 19:06 UTC (permalink / raw)
To: Horst von Brand; +Cc: umbrella-devel, Linux Kernel Mailing List
Just forgot something:
Horst von Brand wrote:
>> furthermore, you could
>>specify that attachments executed _from_ the emailprogram would not have
>>access to the network.
>
>
> I.e., no child of the email program could access the network, not even to
> answer a message. Sounds restrictive.
You misunderstood this. The restrictions are introduced by a "restricted
fork", to which you specify the restrictions the mext process should
have + those inherited from the parent. So if you execute an attachment
from the thread that views the email, THIS should be restricted from
e.g. addressbook and network.
Anyway, when you answer a message - in most cases you put the message in
an "outbox", which the main thread of the mail program sends, when told
to, and as the main thread is not restricted from the network
(supprise!) it will succeed in sending the mails.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Umbrella-devel] Re: Getting full path from dentry in LSM hooks
2004-09-03 20:39 ` Valdis.Kletnieks
2004-09-04 9:06 ` Kristian Sørensen
2004-09-04 10:50 ` Emmanuel Fleury
@ 2004-09-07 14:19 ` Kristian Sørensen
2 siblings, 0 replies; 22+ messages in thread
From: Kristian Sørensen @ 2004-09-07 14:19 UTC (permalink / raw)
To: Valdis.Kletnieks; +Cc: umbrella-devel, Linux Kernel Mailing List
Valdis.Kletnieks@vt.edu wrote:
> On Fri, 03 Sep 2004 22:05:03 +0200, =?UTF-8?B?S3Jpc3RpYW4gU8O4cmVuc2Vu?= said:
>
>
>>Also simple bufferoverflows in suid-root programs may be avoided. The
>>simple way would to set the restriction "no fork", and thus if an
>>attacker tries to fork a (root) shell, this would be denied.
>
>
> All this does is stop fork(). I'm not sure, but most shellcodes I've seen
> don't bother forking, they just execve() a shell....
I think you totally misunderstood the thing...
Umbrella is a scheme that allow the user to restrict the capabilities of
a process within his own processes. Preventing the process to fork is
ONE thing that can be restricted but they might be plenty of others.
The idea is that each process originating from this process will inherit
from this restriction (and possibly have some more) and can NEVER been
granted to restore this capability again.
Now, this has a direct application to restrict the harm that can cause a
buffer-overflow, but nobody said that it would stop them...
> Papering over *that* one by restricting fchmod just means the exploit needs to
> append a line to /etc/passwd, or create a trojan inetd.conf or crontab entry,
> or any of the other myriad ways a program can leave a backdoor (there's a
> *reason* SELinux ends up with all those rules - this isn't an easy task)...
>
> Remember - just papering over the fact that most shellcodes just execve() a
> shell doesn't fix the fundemental problem, which is that the attacker is able
> to run code of his choosing as root.
Right. Now who wants to volunteered to find a simple and yet efficient
solution to this problem? :-)
KS.
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2004-09-07 14:19 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-09-03 12:12 Getting full path from dentry in LSM hooks Kristian Sørensen
2004-09-03 12:32 ` Christoph Hellwig
2004-09-03 12:38 ` [Umbrella-devel] " Kristian Sørensen
2004-09-03 13:04 ` Christoph Hellwig
2004-09-03 13:20 ` Kristian Sørensen
2004-09-03 14:01 ` Christoph Hellwig
2004-09-03 19:54 ` Kristian Sørensen
2004-09-04 11:09 ` Christoph Hellwig
2004-09-04 18:52 ` Kristian Sørensen
2004-09-03 15:38 ` Stephen Smalley
2004-09-03 12:43 ` Andrea Arcangeli
2004-09-03 14:14 ` Alan Cox
2004-09-03 20:05 ` [Umbrella-devel] " Kristian Sørensen
2004-09-03 20:39 ` Valdis.Kletnieks
2004-09-04 9:06 ` Kristian Sørensen
2004-09-04 10:50 ` Emmanuel Fleury
2004-09-07 14:19 ` Kristian Sørensen
2004-09-04 2:41 ` Horst von Brand
2004-09-04 19:01 ` Kristian Sørensen
2004-09-04 19:06 ` Kristian Sørensen
2004-09-04 16:56 ` Alan Cox
2004-09-04 18:47 ` Kristian Sørensen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox