From: Alex R. <al...@se...> - 2002-06-14 16:37:18
|
Hey all, Just wanted to quickly introduce myself (I'm sure Matt will do the same soon). I've just finished reading most of the archives for this list and I've had a look at the CVS checkins thus far. Since this project is fairly important (Matt and I were working on similar before we heard of OWASP), I've gotten permission from my employer to work on this "on the clock". I have a couple of thoughts right off the bat, and I expect them to be contentious, so please hear me out before flaming me into oblivion. 1.) IDMEF is more trouble than it's worth. IDS reporting integration might be a good thing (debatable for a first version), but IDMEF is absolutely the wrong way IMO to deal with that eventuality. The spec is vage, unimplementable (not that that's going to keep people from trying), and in reality doesn't buy us much. If we are hell-bent on doing IDS integration right off the bat, I suggest we look at SnortML's DTD, as it's significantly more sane. Better yet, let's just use syslog for the time being. It's there for a reason, it works, it can be network transparent, and it's used/understood by thousands of security professionals. 2.) filter categories. Developers aren't security people (by and large). Yes, they could figure out every corner case and come up with their own "filter" rules where they need them, but I think that if we put the onus on them to come up with match/reject classes, then we've done nothing more than give them a slower regexp engine. I honestly beleive we have a chance to enshrine best-practice filtering rules in code that people can just call based on what the "threat category" they are trying to avoid is. So, say someone is concerned about cross-site scripting and wants to store their data in a SQL database, we might provide a set of functions that they could composite like this (using python for example): def myFilter(str): str = OWASP_filter_xss(str) return OWASP_filter_db(str) obviously there might be some (optional) arguments to these functions that constrain their behaviour, but we should go for sane defaults and not provide more options than are strictly necessaray to safely strip out offending input. This can be thought of as a Huffman encoding problem to some extent: if we define an entire grammar that developers have to wrap their head around, then we're not lowering the bar any in providing secure input to their internal systems. Trickier things should have longer names, etc, but filtering on a basic set of threat classes should be made drop-dead simple. 3.) default behaviour. Reject everything by default, accept what matches. Doing things any other way says some very unflattering things about our understanding of what building secure software is all about. 4.) simplicity. Let's put togeather some _really useful_ filters right off the bat in the prototype language (whatever that might be) and start using/improving them. Once we've got some experience with what works and doesn't we can iterate and improve things as it fits. No need to engineer a solution to problems that might not even exist (except in our heads). -- Alex Russell al...@se... al...@ne... |