| > The only way forward is by having the *computer* do this kind of
| > thing for us. The requirements of the task are very much like those
| > of low-level code optimization: We leave that to the compilers today,
| > because hardly anyone can do it well at all, much less competitively
| > with decent code generators, except in very special circumstances.
| > Code inspection tools are a necessary transitional step - just as
| > Purify-like tools are an essential transitional step to find memory
| > leaks in code that does manual storage management. But until we can
| > figure out how to create safer *languages* - doing for security what
| > garbage collection does for memory management - we'll always be
| > several steps behind.
|
| It is not adequate to *create* safer languages - it is necessary to
| have developers *use* those languages. Given the emphasis on C and
| C++ within posts on this list, that seems a long way off.
Fifteen years ago, the idea that a huge portion of new software would be
developed in garbage-collected languages with safe memory semantics
would have seemed a far-off dream. But in fact we are there today,
with Java and C#, not to mention even higher-level from Python to Ruby.
(Of course, then you can go to PHP. We know how secure that's turned
out to be... though that's not really a fair attack: The attacks against
PHP are "new style" - directory traversals, XSS - and nothing out there
provides any inherent protection against them either.)
Yes, there is still *tons* of C and C++ code out there, and more is still
being developed. But there are many places where you have to justify
using C++ rather than Java. (There are good reasons, because neither
Java no C# are really quite there yet for many applications.)
In any case, language is to a degree a misdirection on my part. What
matters is not just the language, but the libraries and development
methodologies and the entire development environment. Just as security
properties are *system* properties of the full system, "good for
development of secure systems" is a system property of the entire
development methodology/mechanism/environment. C/C++ plus static
analysis plus Purify over test runs with good code coverage plus
automated "fuzz" generation/testing would probably be close to as good
as you can get today - not that any such integrated system exists
anywhere I know of. Replacing some of the C/C++ libraries with
inherently safer versions could only help.
It's not that training in secure coding practices isn't important.
We're starting from such a low level today that this kind of low-lying
fruit must be picked. I'm looking out beyond that. I think security
awareness, on its own, will only get us so far - and it's not nearly
far enough.
-- Jerry
_______________________________________________
Secure Coding mailing list (SC-L)
[email protected]
List information, subscriptions, etc - http://krvw.com/mailman/listinfo/sc-l
List charter available at - http://www.securecoding.org/list/charter.php