Let me paraphrase the concerns I brought up at the LSM BoF last week. The
main LSM thrust is to beat a deadline for 2.5.X kernels and get LSM approved
and integrated into those kernels. Everyone is working diligently towards
that goal.
In my 20 years of experience porting security to mainstream UNIX-type
systems, the initial port is only half of the battle. In the first port,
one is concerned
about the security architecture, optimum placement of the hooks, and other
aspects
of smooth integration. The more challenging political problems come later.
Either the security team gets the main developers to adopt the security
hooks in
the mainstream code, or the porting continues anew, on the next rev of the
mainstream kernel.
Unfortunely, most of the cases I've seen are the latter,
where the mainstream kernel developers ignore security, and leave it to the
security group to repeatedly re-integrate the same security hooks into the
kernel.
The only "challenging" work is when mainstream code changes. This can be as
small
a change as an optimized version of a local routine, or as pervasive as
changing
from BSD sockets to STREAMS.
The couple of times I've seen attempts to integrate security into the
mainstream
kernel after the initial port, I've not seen it succeed. The average kernel
developer does not understand security, and it shows in the resulting
kernel.
Even those who try to "get it right" can fail in subtle, yet disasterous,
ways.
I've seen that on the larger rewrites, the security code is just missing.
The
same is true when new functionality is put in. With it typical that
everyone is
under deadline, the sad choice for the security team is to 1) have the
security
hooks taken out of the mainstream kernel altogether, forcing the typical
security
port after-the-fact, 2) leave them in the kernel with an ifdef that is never
turned on in the production kernel (and forcing the same
after-the-fact-port), or
3) holding up the release. This last option is political dynamite, because
the
security team is seen as holding the release. (It appears the last in line
in a
release is typically the accused.)
Because I didn't read any of this type of discussion on the LSM list, I
brought it
up at the BoF. Someone asked me what could we do to prevent this from
occuring
to LSM. My response, after some discussion, was the best we could do was a
three-pronged strategy. First, develop a LSM test module. (More on that
below.)
Second, diligence by the LSM group in making sure, as early as possible in
development, that the LSM hooks are preserved and also integrated properly
into
new code. Third, this being open source development, some of the political
pressures found in closed software shops may not be as readily
counterproductive
to maintaining LSM hooks by the kernel developers.
The LSM test module I proposed has a dual purpose: 1) to ensure all the LSM
hooks
exist in the kernel, and 2) that they are called in the appropriate places.
The
LSM test module would need a small application to exercise it. The LSM test
module is not intended to implement yet-another-security-module, but instead
to
aid in the integrity of the hooks. My intention was that it be used by
developers of security modules, but also kernel developers. At the present
time,
kernel developers have a reason for dropping or misplacing security hooks --
there is no tool or document that explains the purpose of the hook or helps
check
to see if it is invoked properly. (Remember, some developers may throw up
any
flag they can to see LSM fail. Others will just make mistakes in forgetting
about
security.) Because of some reluctance in getting LSM
approved by the powers-that-be, I would think a test tool would mitigate
some of
those types of arguments. (A LSM functional spec would also help, but I'm
not
going there [yet].)
Another reason for the test tool is to make test tools for the various
security
projects easier themselves. That a LSM test tool validates security hooks
in
the kernel is one less test scaffold required to be written by the
individual
security implementations.
The LSMExample module that jmjones is a start in implementing the type of
test
module I am describing. With an appropriate "driver app", it provides
coverage
of all the LSM hooks. Clearly, that would be useful as a first step in
future
kernel development. What it lacks is a validation of the manner in which
those
hooks are called. The a driver app for the LSMExample, as written, would
not
distinguish if the LSM hooks were distributed throughout the kernel as they
are now, or if they were all bunched up in main(). The LSMExample module
needs
to have the ability to return multiple values (minimally 0,1 on straight
conditional hooks - maybe more on those returning other values) on those
routines
that can do so. It's not enough for a LSM hook in a conditional to be
merely
counted. In other words, the mere presence of the LSM hook does not
guarantee
that is is invoked properly within the kernel.
The test tool needs to have the app/module validate rudimentary control
flow. For
example, one wants to validate that this hook (from kernel/sys.c) is placed
correctly:
no_nice = security_ops->task_ops->setnice(p, niceval);
if (no_nice) {
error = no_nice;
continue;
}
A simple counter would not detect the erroneous hook:
(void) security_ops->task_ops->setnice(p, niceval);
The app would need to invoke nice(2) minimally twice, resulting in no_nice
being 0 and non-zero so that the "if" code is tested. The app would of
course
need to detect that the result from nice(2) corresponded with the expected
value.
(Similar discussion for detecting the hook in an incorrect place.)
Steve Kramer
> -----Original Message-----
> From: jmjones@jmjones.com [mailto:jmjones@jmjones.com]
> Unless I misunderstand, LSMEXAMPLE already pretty much covers
> this need...
> every hook is intercepted and a count is maintained of how many times
> each is called. A simple revision can reduce that to a
> vector as another
> result available to user-land.
>
>
_______________________________________________
linux-security-module mailing list
linux-security-module@wirex.com
http://mail.wirex.com/mailman/listinfo/linux-security-module
This archive was generated by hypermail 2b30 : Thu Jul 05 2001 - 09:59:55 PDT