Police are credited with making arrests, but are almost never credited with treating people with respect.
By your logic, police should be encouraged to treat those they're supposed to protect and serve with disrespect and err on the side of locking people up, rather than trying to create a safer, more prosperous community.
Doing the right thing for the right reasons is (or should be) a thing. That it isn't doesn't say much for those who ignore an important aspect of software design.
I've always striven to meet the ideal that "if it's worth doing, it's worth doing properly."
I suppose that I shouldn't hold others to the standards I set for myself, but sometimes I still do.
Feel free to be offended, but I stand by my original statement:
"4. But the most egregious offenders are software developers, who often just bolt on weak security measures or just ignore security altogether, rather than design with security as a primary consideration."
> By your logic, police should be encouraged to treat those they're supposed to protect and serve with disrespect and err on the side of locking people up, rather than trying to create a safer, more prosperous community.
No, by their argument, to the extent your first quoted sentence is true, police are (not “should be”) encouraged to treat those they're supposed to protect and serve with disrespect and err on the side of locking people up, rather than trying to create a safer, more prosperous community.
Which seems pretty accurate.
Exactly. Which is why it was a good analogy WRT the lack of security baked into the design of most software.
Blame always rises. Management knows that any product without extensive review is going to be bad. They push it out the door without that review because quality costs. Stockholders know. Software is bad because you can't sue the companies that made it.
I get that a variety of pressures are put on developers to add features and ship quickly.
But whether it's corporate development done internally (e.g., LOB applications), a web app or a SaaS offering, not designing security into the software is a disaster waiting to happen.
So many times I've seen businesses have their crown jewels ripped off due to poorly implemented/weak or non-existent security practices in application design/development.
Even when the infrastructure is reasonably well secured, with defense-in-depth, including strong authn/authz, separation of duties, as well as strong security processes and policies in place, software that lacks designed-in security can render all of it useless.
Whether that's because the software doesn't/can't integrate with the security tools in use (often requiring applications to run with much higher privilege than they should) or because little or no thought was given to secure coding mechanisms or access controls.
I absolutely understand that there are always security trade-offs, regardless of where in a multi-layered infrastructure/management/application environment.
And it's always important not to expend resources beyond what's appropriate for the assets being secured.
That said, application software is the most frequent culprit in enabling compromises (followed closely by poor security implementation in the infrastructure and a lack of policy/process in securing it -- usually through ignorance/incompetence).
My argument is not that developers are stupid or ignorant, but that security isn't baked-in to their design decisions as a guiding principle.
And that often leads to insecure software and/or sloppy/insecure integration of security after the fact.
If more developers thought about security as a feature rather than an inconvenience to be given little thought or just lip service, that would make a big difference.
Edit: Clarified verbiage and fixed typos.
I love the architecture weenie role. It's tons of fun. But eventually you need to build something and only with experience do you discover the first set of complications, then marketing starts promising features and you've got the next, and management refuses to allocate more time.
Did you do something wrong at step 1 by building a prototype before knowing it would be perfect? And if so, how could you know that and what would you do to get there?
I write the code, and tag releases, but I don't determine what ships. I, and 95% of us, are not engineers and even those who are have abrogated their responsibility to make the bridge stand - we're all just building individual struts because someone told management that things done in a vacuum will all fit together properly in the end.
So I agree I guess, but don't at the same time.
I suppose I do too.
While a lack of designed-in security is often the (sometimes disastrous) result, I posit that it's more about a lack of knowledge/education around good software security design/implementation than spec changes or scope creep.
If good security design practices were stressed when teaching software development (and/or included in resources for autodidacts) and given the same value as other development concepts, developers would incorporate those concepts from the start, rather than having to bolt them on (or not) later on.
As such, it's more about lack of knowledge/focus/value placed on security in software design/development.
Given the value of data that being secured with software, good security practices should be, if not just as integral, to software development as performance or UX design, it should at least be a consideration before prototyping.
It probably depends on what your team is good at. I tend to work in fairly security conscious teams. They check the length of buffers, don't rely on anything from the user, etc. So most of our issues tend to be from our architecture being drastically changed to integrate our solution into something else, or vice versa. Stuff is dropped on us, opaque libraries and internal code, and entirely new goals created around the big stuff, data persistence, key management, and so on.
But when I had an actual stable product that could not get spec changes (it was custom hardware) we knew from the beginning how the project would go and how all of the pieces would fit and it went together cleanly. But, it turns out many embedded engineers don't (didn't maybe, it was a while ago) program as defensively because they're used to owning the entire scope. If they put a value somewhere they expect it to be there, unmolested, when they want it. That project was full of buffer overflows and bad crypto.
> If good security design practices were stressed when teaching software development (and/or included in resources for autodidacts)
Yeah. I'm not sure how but it does tend to be lacking. Everyone probably needs a different hook. For me it was quality. How could I say my software does X if you have a way to break it?
The reasons you list for a weak defense posture don't really apply to a government. Also the GAO has issued a constant stream of reports saying US government agencies have poor security. It was likely only a matter of time before something like this incident happened. Similarly it's probably only a matter of time until the IRS, Social Security, and other agencies are successfully attacked on a large scale.
Perhaps I'm a little dense, but I'm not sure what you're arguing here.
Are you asserting that since sophisticated threat actors exist, security processes and procedures are useless, and as such, shouldn't be adhered to or implemented?
That isn't even close to being true. In fact, that statement is ridiculous on its face.
Research into detecting, mitigating and countering such attacks go back at least 30 years.
That APT actors have often been successful is more a function of effective execution and poor security practices than lack of knowledge/research around such attacks.
That ship sailed a long time ago.
It was normal back in the 1990s for InfoSec folk to assume that "if it's connected to the Internet, eventually, it will be compromised."
The goal (then, as now) is to implement layered (defense-in-depth) mechanisms to deter such activities -- at perimeters, network and systems infrastructure platforms and software implementation.
This is (and has been for a long time), a well-defined, although usually poorly (if at all) implemented set of processes and procedures.
The levels of complexity for Internet resources have vastly increased over the past 25 years. Info Security techniques have advanced as well, but again are often poorly or not at all implemented.
However, far too many organizations implement a "Skittles" type defensive posture rather than defense-in-depth posture.
There are a variety of reasons for this:
1. Those responsible are ignorant of good security practice;
2. Those responsible are aware of the risks, but ignore it as it negatively impacts profit;
3. Those responsible are aware of the risks, but implement inadequate defenses because of the impact on time-to-market and/or profit.
4. But the most egregious offenders are software developers, who often just bolt on weak security measures or just ignore security altogether, rather than design with security as a primary consideration.
There are other reasons, but those are the big ones, IMHO.