| From: Alex Holst <a@area51.dk> | |
| Sent: 18 April 2002 03:49 | |
| To: dev@subversion.tigris.org | |
| Subject: Subversion and assurance. | |
| Hi. I've been bribed with bananas again. This time the guilty party is | |
| gstein who requested that I post a note with my thoughts about security | |
| and assurance, and what steps can be taken to reduce the possible number | |
| of security flaws in subversion 1.0. | |
| First, a brief introduction: When people ask you, as a developer, about | |
| security in Subversion, you might say Subversion is secure. Subversion | |
| has access control, it supports SSL, committers need no system accounts, | |
| and other nice things. These are _security_ features, not nessesarily | |
| _secure_ features. | |
| You may have access control, but what if the code implementing this | |
| access control was written poorly, and contains a buffer overflow? 2 | |
| hours ago you worried about who could read or write to a document in | |
| your repository. Now you discover that an attacker can execute arbitary | |
| code as the userid your service is running as. This is not ideal. | |
| Hence, we distinquish between "security features" and assurance. Brian | |
| Snow, a technical director at the NSA, defines assurance as follows: | |
| "Confidence-building activities that demonstrate that a system | |
| possesses the desired properties and only these properties and | |
| that functions are implemented correctly. Assurance can be | |
| provided through a structured design process, documentation, and | |
| testing." | |
| Assurance is what protects the user in the case of misuse or when faced | |
| with malice. Today, cars come with safety functions such as seatbelts, | |
| ABS breaks, airbags, etc, all of which means that you have a very good | |
| chance of walking away from accidents. This was not so 50 years ago. I | |
| strongly recommend listening to Brian Snow's full talk on assurance, | |
| which is available as a RealPlayer stream from Blackhat.com: | |
| <http://media.blackhat.com:5554/ramgen/blackhat/bh-usa-00/audio/bh-usa-00-brian-snow-audio.rm> | |
| The two most important steps that Subversion can take are: | |
| Establish secure coding guidelines that are communicated to all | |
| developers and enforced by the project leads. | |
| Improve the documentation: A diagram much like qmail's Big | |
| Picture which shows how code and data flows within the program. | |
| It allows for fast identification of security boundaries. | |
| These steps will enable greatly improved looks into the Subversion code | |
| for someone who has not spent the last few months getting familiar with | |
| the Subversion code. | |
| Additional steps include: | |
| Establish a QA section on the website containing documentation | |
| about the tests that are run against Subversion. | |
| Document how new tests for both server and client can be written | |
| and encourage users who are in need of assurance to participate | |
| in the QA process. The tests against the server should | |
| specifically include things like attempting to break ACLs, | |
| attempt to issue legal commands in an inproper order, use very | |
| long strings for filenames and arguments, etc. | |
| The more you document, the more likely it is that someone with | |
| the knowledge to spot problems will take a look at what you have | |
| done. | |
| Websites that help: | |
| "Secure Programming for Linux and UNIX" by David Wheeler | |
| http://www.dwheeler.com/secure-programs/ | |
| Software Quality Assurance: Documentation and Review | |
| http://hissa.ncsl.nist.gov/publications/nistir4909/ | |
| Books that help: | |
| "Safer C" by Les Hatton | |
| "Solid Software" by Hatton, Howell & Pfleeger | |
| "Building Secure Software" by Viega & McGraw | |
| "Writing Secure Code" by Howard & LeBlanc | |
| "Writing Solid Software" by Maguire | |
| I'll be delighted to answer any questions. Thanks for your time. | |
| -- | |
| I prefer the dark of the night, after midnight and before four-thirty, | |
| when it's more bare, more hollow. http://a.area51.dk/ |