Trends in exploits
While reading what is fast becoming one of my favorite blogs, KSplice, I came across an article on exploiting NULL pointers in Linux. The article mentioned that some sources have called 2009 “year of the kernel NULL pointer dereference flaw.” While I might think of other notable announcements from the year that was, there is no doubt that this class of vulnerability enjoyed a certain amount of popularity recently.
This sort of surge in the numbers of attacks against a class of vulnerabilities is hardly unique, or even new. When “Smashing The Stack For Fun And Profit” came out in Phrack, the low-hanging fruit of buffer overflows enjoyed great popularity. When they dried up, hackers moved down the stack into Layer 2 with a number of creative abuses for ARP. There has been no shortage of effort put into higher-level protocols either, as the current number of XSS, SQLI, CSRF, and other web/Ajax hacks show. There are even signs that the human mind is pretty far from safe. The implication of this is that an observer can follow the trend and predict, roughly, where next year’s feast of vulnerability will be – usually one layer up or down the stack from where the current crop is found.
The common thread, of course, is that attackers can and will leverage the reactionary nature of the security industry. When a new vulnerability becomes known, there is a great hue & cry, or at least a patch release, and then everyone goes back to being ‘safe’. Even when a trend becomes well-known, as is the case for several types of web application vulnerabilities, the reaction is limited to mitigating the specific class of issues shown to be an immediate threat.
When I was a sysadmin, this was known as ‘fire-fighting mode’ and, when it constituted the majority of the technical staff’s time, a sure sign of administrative incompetence. Certainly, emergencies arise – that’s the nature of life, especially when dealing with complex machines. However, a spot of pre-planning could automate the admin’s repetitive tasks, ensure that most failures never become emergencies, and mitigate most of those that do; all of which free up staff hours for the important things, like playing Quake. Er, I mean keeping up on new technology and how best to make it serve the enterprise.
This concept can be applied to the development of secure systems, from the product to the architecture level. It isn’t possible, usually, for developers to predict what new classes of bugs will be discovered to be exploitable, however, a certain degree of caution in where one accepts data from, how information is passed and stored, what portions of the mechanism are exposed for inspection, and thinking carefully about what the mechanisms that process data are capable of would go a long way towards assuring that the shiny new bug will have minimal impact in the world. In the real world, where resources are limited, immediate attention should be concentrated on the areas where bugs are currently being found and those that are likely coming up. This is precisely the sort of thinking that a good Secure Software Development Life Cycle will implement. This happens less often than it should (hint: if your SSDLC is limited to running a scanner to detect known classes of bugs, you’re doing it wrong) but I am happy to see more and more companies beginning to develop some consciousness that it is cheaper to fix bugs before the software ships. From here, we need to assist companies in seeing that an SSDLC is an important facet of modern software development, and those groups that are only doing code audit for known bugs are helped to see that there is a better way, and that the costs for doing it right are lower than those of developing and distributing a patch, both in real dollars and corporate good-will.
Posted: April 13th, 2010 under Uncategorized.
Comments: none