Intrusion Detection Systems mailing list archives
RE: How about digital signed binaries?
From: "Andreas Haug" <andreas.haug () this net>
Date: Wed, 2 Aug 2000 18:21:18 +0200
Archive: http://msgs.securepoint.com/ids FAQ: http://www.ticm.com/kb/faq/idsfaq.html IDS: http://www-rnks.informatik.tu-cottbus.de/~sobirey/ids.html HELP: Having problems... email questions to ids-owner () uow edu au NOTE: Remove this section from reply msgs otherwise the msg will bounce. SPAM: DO NOT send unsolicted mail to this list. UNSUBSCRIBE: email "unsubscribe ids" to majordomo () uow edu au -----------------------------------------------------------------------------
From: Vinmcius da Silveira Serafim
[...]
So I've been thinking on a server that just executes signed binaries, and I want hear you about that...
Not really a new idea. Check for example http://www.securebsd.org/
When we root any server, in most cases, we compile some toolz and execute them, deploy some trojan binaries, etc... How about if you got in a server and you cannot execute any of your tools or change the binaries?
Someone might break a box with just using what is on the box. However, wouldn't it be a good idea to have sh/csh only
run signed scripts and/or signed command lines?
This would be fun. Imagine someone uses a buffer overflow to root a box. He succeeds and gets back a shiny '#' prompt.
Now he types something, but instead of executing, the shell says "No signature found on given command. Administrator
has been notified. Your session will be terminated. Thanks for trying".
Instead of signing scripts, you could write a preprocessor which would turn any script into a script in which the lines
are signed.
Bonus points:
- Implement a 'run this program bug don't check the args' mode (dangerous, but perhaps needed)
- Implement it in the kernel (exec call, see footnote).
- Build a working system which is tied down using this approach
But perhaps this idea is flawed, too (I am still suffering a headache caused by a jetlag of 9 hours. The downside of
attending BlackHat/Defcon...).
Thinking about it: An attacker could code everything in the payload and not use exec at all... So this solution
wouldn't be very effective. On the other hand, it would stop those who can't write their own 'shellcode'...
Ultimate Idea:
Signed syscall programming. Require every syscall to include
(1) a bitmask showing which of the parameters
are fixed and which are variable
(2) a signature authorizing the use of the
syscall with the given (code, mask, fixed) parameters
Thinking more: Wouldn't it be nice to have 'blessed' non-root binaries?
mybox# bless httpd
bless> allow bind
Enter domain [PF_INET]: PF_INET
Enter type [SOCK_STREAM]: SOCK_STREAM
Enter IP address, use ANY for allowing bind to any [ANY]: 1.2.3.4
Enter port: 80
bless> sign
The current blessings are:
Bind a tcp stream at address 1.2.3.4 port 80
md5 for blessings is d8e8fca2dc0f896fd7cb4cb0031ba249
Enter signature for the above md5: 88354053212d6f123f8313f6d3baa266
Verifying signature: ok.
Thank you. Signature has been noted.
bless> save /usr/local/bin/httpd-blessed
Saving to /usr/local/bin/httpd-blessed. Done.
md5 for new file is: 01adc9c2bc3ea6c6300b93cef9e17e0c
bless> quit
Now you could run httpd as nobody.
But wait: Doesn't this look an awful lot like a trusted-os? ;-)
andreas.
Footnote: The signature should include the name (really? Perhaps the md5 of the executing image would be better) of the
calling process. Imagine: Named could only exec named-xfer because it lacks the signature to exec anything other.
Current thread:
- RE: How about digital signed binaries? Andreas Haug (Aug 03)
- <Possible follow-ups>
- Re: How about digital signed binaries? Michael Meier (Aug 03)
