You have to start from somewhere. There's Rust. I'd like to see some more language (and tooling) competition with systems that can prove functionality at compile time in practical situations.
Not impressed with current C/C++ static analysis landscape. I've used a ton of static analysis for writing Windows kernel drivers for instance — from known tools like Microsoft's Prefast (requires a ton of annotation, sigh!) to clang. And others. And fuzzing on top.
But it still doesn't come anywhere near replacing a good pair of eyes and some hard thinking. And I'm not talking about logic bugs here, but for example concurrency and memory safety related issues. I've had plenty of "quality time" (not!) with the kernel debugger...
I'm very seriously considering to use Rust instead of C/C++ whenever I have my next Windows (or other OS) kernel mode project. Even though some consider it a bit unproven in this space. At this point, I don't feel like C/C++ is proven either...
To a bit lesser degree, same for anything that touches untrusted inputs, directly or indirectly. Even if you can sandbox it.
I do need to work around some issues with Rust. Like to learn how to minimize code size for those situations where it is a constraint. Like device firmware. However I feel that's easier than writing bulletproof C/C++ code.
Kernel bugs are obviously a part of modern bugchains, but they're used to escalate privileges, and usually not to gain native code execution in the first place. The enabling code execution arises from code that doesn't need to be in C/C++ at all.
But when it comes to software reliability, you rarely if ever should be worrying about kernel or driver bugs.
Given the above, writing your code using a memory safe language is still a huge net benefit.
Not quite sure what you mean. For an application developer, yeah, you don't need to worry.
In general... If I had a dime just for all various types of kernel memory read/write vulnerabilities due to kernel bugs and bad drivers, I'd have a lot of dimes.
Besides, libraries that were optimized for HW 20-30 years ago don't age all that well and are far from optimal these days. They also tend to still have a ton of bugs.
Now, I'm not saying there aren't cases where you really need to build on legacy library base. Merely that it's a bit rare case.
Now there are cases where libraries have ossified and there is room for a new library to come and eat their cake (look at ripgrep for an example), but there are also a lot of cases where they are going to be very hard to beat (a lot of boost is in this area, I believe, and there are many other examples in specialized domains).
Mixed language development experience in Java and .NET IDEs, UI frameworks, game engines and GPGPU shaders.
Even the new Universal C runtime is written in C++ using extern "C".
On Android, C is reserved for the Linux kernel and "legacy drivers" (pre-Treble), everything else is C++ and Java/Kotlin.
On Apple OSes, C is left for the UNIX style compatibility layer, everything else is a mix of Objective-C, Swift and C++.
By the way it is either C or C++, not C/C++.
Objective-C is C, with extensions. Swift interoperates with C, not C++.
Visual C++ focus is naturally C++.
C with extensions, by definition, is not C, rather something else.
Swift interoperates with Objective-C, thus C interoperability comes for free.
IO Kit, DriverKit, Metal Shaders, LLVM make all use of C++.
Do you really feel that way considering what is internet (or other accessible networks) connected today compared to 1995?
Personally I feel the opposite (although I haven't been in the game as long) because of a lot of critical infrastructure is getting connected without a lot of security. A lot of surveillance cameras, door stations, networks that in 1995 would be localized failures are now national or global. People find open, password-less VNC into control panels for powerplants just by scanning the internet. Equifax, Turkeys MERNIS and on and on and on.
I don't get the sentiment that things are getting better in this area.
Zetter's Countdown to Zero Day points to that with skepticism and also talks about Kosovo as one of earliest cases, as does Sandworm.
Do you think this is roughly correct?
[1] https://nunatsiaq.com/stories/article/government-of-nunavut-...
[2] https://en.wikipedia.org/wiki/Stuxnet#Iran_as_a_target
[3] https://www.forbes.com/sites/leemathews/2017/08/16/notpetya-...
[4] https://en.wikipedia.org/wiki/Northeast_blackout_of_2003
I think I'll call this the "lightbulb effect" since in 1995 the lightbulbs in everyone's home were secure against all RCE vulnerabilities, while in 2020, this is no longer true.
Do you know for sure your mouse is safe from this kind of thing? What about your monitor? Even things like sticks of memory and case fans have little controllers now to do some kind of programmable RGB lighting; everything is getting filled with relatively small amounts of computing power for no good reason, and it seems to be an accelerating trend.
Attacks on various hash functions are not really a thing. We've known not to use SHA-1 for over a decade, and cryptographers working in the space have started saying we may never find a viable preimage attack on MD5, let alone SHA-1. We are on pretty sound footing with hash functions; what you were doing in a competent system 10 years ago (using SHA-2) is still the right thing today.
I've been a vulnerability researcher since around 1995. I feel significantly better about security today than I have at any point in the past. We've been doing an imperfect but steady job of shutting down bug classes for decades, with the obvious and most important factor being the deprecation of insecure systems languages.