[Osiris-devel]Osiris Auth Scheme
Paul Holman
pablos at shmoo.com
Fri Jun 21 05:56:52 EDT 2002
Brian and I have discussed the crypto requirements for Osiris 2.0 over
the last couple months, and tonight I outlined for him, the general
approach that I think we should take. I won't cover all the supporting
data at how we've arrived at this here, but if any part of it concerns
or interests you, please feel free to ask me about it.
There are effectively three components in Osiris 2.0:
osirismd - Osiris Management Daemon
osirisd - Osiris Daemon (client component for scanning hosts)
osiris - Command line UI
Each of these components communicates with the others via the network.
The osirismd is meant to run on one or more management hosts, osirisd
must be installed on every client you want to scan, and osiris is a
feature-complete but not feature-rich reference UI that will someday be
supplanted by a full GUI. Note that communication between components is
as such:
osiris <---> osirismd <---> osirisd
First, I propose that each of these components talk to each other using
HTTPS (SSL secured HTTP). This is very easy to do thanks to OpenSSL.
Second, I believe the most important thing is for the clients to
authenticate the management host. You don't want them responding to
impostors. So osirismd will have the equivalent of a web server cert,
and osirisd instances will only communicate with an osirismd that they
trust.
Third, the osiris UI will also communicate with the osirismd vi HTTPS,
authenticating the server's cert. The osirismd will authenticate these
UI users via user/pass over that secured connection. This should all be
viewed as identical to a typical secured browser/web server
interaction. Eventually, osirismd will offer various user management
and ACL functions.
A more detailed description of the procedures follows:
osirismd - This app needs to implement a feature for generating a
keypair. Ideally, this is performed once per site. I suggest that we
use OpenSSL to generate a keypair and a self-signed server cert, like
the snake-oil cert typically generated for an Apache install. There is
no root cert, this cert must be trusted on it's own merits. We can make
up our own X.509 extension to indicate that a cert is valid for use with
Osiris. If people wish to integrate with their own PKI, they can swap
out this cert for one they generated on their own. The cert should be
stored in $OSIRISHOME/certs and the key in $OSIRISHOME/private. All the
same conventions as Apache should apply, if a user wants to keep the
private key encrypted, then a password will be needed when osirismd is
started, otherwise it can start anytime. The osirismd needs it's own
user/pass database with ACL support to control which hosts/configs a
given user can run. Personally, I'd like to see this hooked into the
operating system's user accounts, just create an "osirisadmin" group
that is allowed to login. The osirismd must have the ability to
generate a random session key per host and store hashes of them in
$OSIRISHOME/hosts/$HOSTNAME/host.conf.
osirisd - This application will be installed in various ways, depending
on platform and user preference. The first time it is run, it will
allow connections from any osirismd but will save the cert on disk and
permission it read only. All future connections from an osirismd will
be authenticated by this cert. Think of this as an initialization
process similar to what you experience with SSH the first time you
connect to a new host. The key fingerprint can be shown in syslog and
manually verified. The client can be reset to it's virgin state by
simply deleting this cert from the filesystem. The osirisd should be
built to trust either a cert, or a root. It should also check for the
Osiris extension in the cert. This cert should be stored in
$OSIRISHOME/certs on the client. Note that no private key or config
exists on the client filesystem. When osirisd starts up, osirismd must
connect to it, providing a new symmetric session key and logging an
alert that the osirisd instance has been cycled. The session key is
made persistent on the osirismd server, but is stored only in RAM on the
osirisd client, this ensures that the server can always tell if osirisd
has been cycled. Additionally, a scan of the osirisd binary, and cert
should be added at the beginning of every scan and compared to a
reference in $OSIRISHOME/hosts/$HOSTNAME/host.conf on the osirismd host
to ensure that the software hasn't been tampered with. Failure to pass
this test generates dire log events and any scans performed must be
flagged as "untrusted."
osiris - This app works just like osirisd as described above except that
it initiates a connection to osirismd instead of the other way around.
It should have the same server cert stored in $OSIRISHOME/certs. The
osiris UI app must provide a facililty for sending username/password
credentials to osirismd.
Please keep in mind that Osiris is a host based intrusion detection
tool, so it is paramount for us to identify changes to the client hosts
which run osirisd. At the same time, we don't want to provide a false
sense of security by attempting to obscure, inveigle and obfuscate
authentication credentials in the client. This is truly impossible
without the aide of tamper-proof crypto devices (Hardware Security
Module). In our scheme, a client is trusted only as long as it is
running, and we "do our best" to revalidate it after it is cycled. We
believe the best authentication of the client is going to be the scan
history stored on the osirismd machine. The greatest challenge we can
present an attacker is having to spoof an entire osiris scan.
Thanks, please feel free to talk to me more about this anytime.
pablos.
--
Paul Holman
The Shmoo Group
pablos at shmoo.com
415.420.3806
More information about the osiris-devel
mailing list