Playing whack-a-mole is losing
Posted by surprisetalk 3 days ago
Comments
Comment by matthewdgreen 3 days ago
The second phase is when engineers realize that just whacking specific vulnerabilities is not going to end bugs -- that you need to take systematic actions to close entire vulnerability classes. That's where formal verification, sandboxing, MTE etc. come from. But in practice so far, this doesn't end vulnerabilities, it just leads to a bunch of new and more exciting ones.
I want to believe that with enough of a push we can get AIs to finish all of this and we'll be security-bug free. But if we can't, at least we can get to the point where new vulnerabilities are costly again.
Comment by RGamma 3 days ago
It's like eyeballing the dimensions of a building and saying it should hold. That said, I see the discipline excused. The stakes weren't that high and it was all very new... And e.g. mechanical engineering went through this as well, except a lot of people actually died.
Time to shine, theoretical CS, time to shine.
Comment by xtajv 1 day ago
Emphasis on "licensed" as in "you need to complete an ABET-accredited program and pass a licensure exam and complete continuing education courses to practice, because there are standards and regulations to prevent accidents".
The phrase "regulations written in blood" also comes to mind.
Comment by dataflow 3 days ago
I kind of wish you wrote "potentially worse" rather than "exciting", because that happens too, and it's deceptively subtle and underappreciated.
To make this very concrete with a programming example, C and C++ are (somewhat counterintuitively) examples here, because if you guaranteed the absence of an entire classes of vulnerabilities - say, guaranteeing that uninitialized memory is zero, to prevent secret leaks - then you simultaneously make it much harder to detect logic bugs that this would've surfaced, since you no longer have that degree of freedom to detect logic bugs (say, via sanitizers). Say, an initialized UID that would've appeared as 0xDEADBEEF might now be well-defined as UID 0, giving you root access instead of tripping an alarm...
In other words, it's like natural selection and antibiotics: being too good at solving one class of problems selects for other classes that are more resilient and harder to find, whereas in some of those cases, whack-a-mole would've actually uncovered the root cause. Like with antibiotics, that's sometimes worth it, but definitely not always! Some infections just aren't worth preventing at all costs.
I'm obviously not saying we should write unsafe code or that we shouldn't try to eliminate entire classes of bugs, but that HOW we do it matters. We don't want to end up in a situation where problems still lurk but we push their detection beyond our ability because of the way we "solved" other problems.
(C++ was just for illustration here; this extends far beyond programming.)
Comment by OrderlyTiamat 3 days ago
You can initialise a UID to 0 whether or not you're using a compiler or checks for initialisation. Do you have another example?
Comment by dataflow 3 days ago
class User {
explicit User(const char* name) {
if (!look_up_uid(&uid, name)) {
abort();
}
}
bool is_root() const {
return uid == 0;
}
int uid;
};
Let's say look_up_uid() forgot to fill in uid for certain special kinds of users. Like maybe you have a dummy 'nobody' user that was introduced specially after the fact and which is not in the database like the rest.As C++ is right now, uid would contain garbage. Which means that, at run time, you would often get invalid UIDs if you attempted to log in with such a user, triggering some logging or reporting you to Santa or whatever. And which means that sanitizers would immediately tell you that you forgot to initalialize the field if you ever try to use it (say, in is_root()). Both of these would flag the bug the moment that that kind of user attempts to log in, and make you dig into look_up_uid()'s body to figure out why it's not returning the UID when it's supposed to.
However, if C++ were to zero-initialize everything by default, then neither of those would be true - you would silently get a root user, which is capable of doing everything that nobody can do. And someone who reads the code wouldn't immediately know that you have such a bug; it would sit there idly until someone exploits it.
Comment by OrderlyTiamat 3 days ago
Going back to GP:
> being too good at solving one class of problems selects for other classes that are more resilient and harder to find
Rather than this being too good at solving this class of problem, it seems to me that zero-initialization is the wrong approach; if the default value were present in the program, it'd be eas(y|ier) to spot. Initializer checks can do that without introducing this issue. You're also using the fact that non-initialized values are "random" by default- we could also use fuzzer checkers for that.
I think the general lesson from the example is that the way you solve a class of problems could introduce more pernicious ones, rather than the fact that it's solved.
Comment by dataflow 3 days ago
That's exactly why I wrote this here:
>> I'm obviously not saying we should write unsafe code or that we shouldn't try to eliminate entire classes of bugs, but that HOW we do it matters.
After you get past the hurdle of noticing this problem (which, as you saw, is very much not obvious), the harder question becomes: what is the right approach?
In this particular case it's not too hard to think of a better approach once you concede the obvious solution isn't so great, but in other cases it is, and often the better alternatives put some kind of selection pressure too... just less frequently. And even in this case, it's not at all obvious that this approach is bad - plenty of people think it's better to force a default value you can rely on, and they want to remove undefined behavior from C++ by forcing initialization on everything. For longstanding examples elsewhere, just look at how Java and C# initialize fields, for example.
Outside of programming it's even harder to notice and find a better alternative, but selection pressure has these kinds of effects in other areas too.
Comment by gumby 3 days ago
If you automatically initialize variables with a garbage value, use-before-initialization (the program’s initialization) them the use of that variable will likely fail due to error. By using what turns out to be a legit UID on every system you have the opportunity for this case not to be detected, perhaps causing a problem immediately or else allowing some nefarious actor to write what they want into that variable instead.
Comment by h3lp 3 days ago
Comment by mikewarot 3 days ago
The only verifiable invariants that are going to work in the long run are:
air gaps
data diodes
Interposing relays used to be used with PLCs[1] to prevent motor control systems from energizing both forward and reverse power to a large motor in the unlikely but possible event of control systems failure. We need to apply the same amount of engineering rigor to our computer systems.We simply shouldn't trust software to a job that belongs in hardware.
[1] https://en.wikipedia.org/wiki/Programmable_logic_controller
Comment by mentalgear 3 days ago
Maybe you can upgrade digital systems until they are 'fully fortified' in theory, but humans have an upper limit what they can understand / perceive / critically analyse (not to even speak about engineered high pressure situations) that can't be upgraded.
Comment by js8 3 days ago
There is an answer to that - simplify and abstract. Lots of human software is unnecessarily complex, often caused by backwards compatibility and general human creativity.
Take sendmail vs postfix as an example of this process.
Comment by SoftTalker 3 days ago
Comment by classified 3 days ago
That's an interesting theory. I'll believe it when I see it.
Comment by protocolture 2 days ago
I mean there are literally controls for this. PIM? You can build systems where your administrators need approval to literally log into the environment. Where their privilege escalation is logged and alerted on. Change Management? "Hey what are you doing logging in, theres no scheduled change for your account". Social Engineering, even of the most critical elements of your engineering team, is a solved problem. What people lack is the willpower and commitment to implement these solutions.
Applies to users too. I sometimes think that a lot of HN commenters havent read a security doc in 20 years.
>keep them from exfiltrating any information they want by targeting not the system, but the users:
User tries to log in to download sensitive information to hand it to the guy on the phone. IT gets an alert, discusses the situation with the user and begins investigating the incident.
Even just SoD mitigates this risk by like 99%.
https://hightable.io/iso-27001-annex-a-5-3-segregation-of-du...
You throw modern PIM/TBAC/RBAC tools, Logging and Alerting on to that and the LLM is just as busted as any other scammer.
"Hey guys I need to elevate my account privileges to download all our important company data and send it to our CEO who is currently in Russia for some reason"
"No"
The problem isn't that we cant solve these problems, the problem is that most businesses couldnt be assed to even try. Unless they are enforced by compliance, 99% of businesses wouldnt begin implement this stuff. They need the pain of getting busted before they go "Hey lets not lose more money". Your average startup derived business is just some guy with admin rights to everything and a certificate auth if you are lucky.
Most businesses will have a locked box, and registration forms to check out important Keys to access different areas of the building, but you ask them to go through the process of lodging a request to access their most sensitive information and its just "Nah mate just give them god rights".
Comment by mentalgear 2 days ago
A swarm of AI agents will just grind that down, target/blackmail multiple users at the same time to loosen up security as they will have identified all the vulnerabilities.
(That's not even mentioning the swiss-cheese OSes are in general due to kernel that are way too permissive).
People are seeing the uptick in attacks already, and soon they will target critical services resulting in chaos.
I'm afraid the base problem is that people have limited computation versus a digital LLM that doesn't as long as it has enough resources.
Comment by protocolture 2 days ago
Prove it.
Swarm is the new thought terminating cliche to come out of Open Anthropic labs to try and force the government to stifle competition.
If 20 people suddenly request PIM elevation thats more likely to lead to a general halt than if it was only 1.
"Identified all the vulnerabilities"
Doesnt really matter. Assuming its even true, which is unlikely, even if they have 3 novel vulnerabilities for your environment, Security is not predicated on software working perfectly all the time. You implement multiple, overlapping security controls. Nothing modifies your firewall config without tripping an alert, no one dirwalks your website without your waf firing off an alert. Nothing modifies your config files, docker images, registries anything without firing off an alert. Your docker containers are running rootless anyway. There's no horizontal movement in your environment except for the explicit application ports. Everything is centrally logged. By the time the LLM is creeping about an OS you have the environment forensically isolated and you are updating your waf config to block/ban any successful strings while you wait for vulns to be patched.
Of course, not everyones running best practice security, but if you build it right you have nothing to worry about. Because you are already not placing a mountain of trust on your software being invulnerable.
>(That's not even mentioning the swiss-cheese OSes are in general due to kernel that are way too permissive).
If it can say hello to an OS without tripping 3 alarms you are doing it wrong obviously.
>I'm afraid the base problem is that people have limited computation versus a digital LLM that doesn't as long as it has enough resources.
You are assuming infinite computation? Lmao. That shits expensive. No, Security has basically been solved so you do all the work ahead of time. Its Asymmetric, but not in the favour of the expensive LLM.
Comment by mentalgear 9 hours ago
Asymmetric it is indeed, but against cyber defense, especially the bigger the org/company the more inert it is.
And one thing we can agree on is, that there's a tiny fraction of entities that have best practices put in place, airtight, as you would need them.
Again, I really which it wasn't like that, but the trajectory of cyber penetrations is telling a different story.
Comment by Animats 3 days ago
So is "swiss cheese" security. AI systems have the patience and breadth of skill set to work their way through layers of weak security. Attacks that used to take funded teams can now be carried out by individuals.
Comment by _tk_ 3 days ago
Comment by keybored 3 days ago
Comment by quietraster 3 days ago
Comment by jimz 3 days ago
The correct way to address this had always been to modify or entirely get rid of the CFAA and start from scratch with a framework that actually works, that isn't punitive, that make some sense, that did not come into existence thanks to Ronald Reagan's admiration for the uncanny realism in the 1983 film WarGames. But we have a constituency now that relies on the inefficiency machine for their living and their votes will be in their self-interest, security be damned. The best people have been sent on a fool's errand for generations. The incentive structures are entirely misaligned now. I published a PoC last weekend that indirectly but pretty clearly shows that the FBI was relying on an anonymous twitter's account's assertions, none of which were going to be admissible in court in the alternate universe where that matters, to avoid saying "I don't know" by blaming North Korea, something that someone with open source tooling that existed back then, who have never taken a STEM course past 11th grade AP Stats, whose terminal degree is a JD, could whip up and test in under an hour, probably shorter except my home lab with the GPU was occupied. We go through the motions but really, those with power are relying on the inherent imbalance of power and well, lying, essentially, to keep order. How is that sustainable?
The whole model needs to go but it likely never will and that's perhaps the real legacy of Reagan and our moribund power structure. Looking at the payout rate in hackerOne's heyday, why would anyone ever report anything to the companies? My assumption is that people who have any rationality are doing just that. Most data breaches are never disclosed officially but at best passed in rumors. I have no hard evidence that I can disclose, but the least leaky operation is a one-man operation and attorney-client is forever.
By the way, your AI benchmarks in the legal realm aren't tested on criminal matters because how do you benchmark two probablistic systems that are both subject to the prisoner's dilemma and imperfect information? If they did the score would likely be low. You'd need to build out so much back-knowledge just to set up any scenario that really any answer is "it depends" is not a joke but the best answer. Any suggestion that we simply take the status quo as is and run with it cannot be taken seriously. It's a foolish system made by clueless men who hit the lottery and didn't even see the ticket until years after. It was then exacerbated by politically ambitious AUSAs who do not care about getting the right person behind bars but someone behind bars. Fast forward 30 years and this is the state of things. Your sophisticated defenses may have been thoroughly hand-reversed years ago but to dodge the DMCA the source was put somewhere like Gitee instead of Github. I'm not sure if you can finish the signup flow without a Chinese ID at this point, but a decade ago you can, at least. Those are outliers too, but outliers in charity. Good luck with the rest. I'm not being cheeky: just because there's a vulnerability does not imply knowledge to how to maximize its impact. Data breaches are put in the open frequently because of petty feuds and a failure to recognize the importance of the data. After all, China does not run on private credit, and hence, your identity being stolen there is virtually meaningless, as meaningless as you having next to the biometric ID card data of all of their citizens. Like harm, value is contextual, and constructed so that it's framework dependent, and we at least know the frameworks that exist broadly. And what you don't know, well, you don't know.
Comment by lhk931122 3 days ago