go get a yubikey! yubi.co/lowlevellearning-2024 Edit: I may have caused some confusion about the derived Private Key. When you generate the private key using 'ssh-keygen -K', you're not actually downloading the key itself. You're create a key that stores the credential ID of the Yubikey. You never have access to the private key within the Yubikey. Sorry for the mixup!
Right, me and most of my family is using Firefox for over 20 years now. Well my family essentially had not really a choice as I have setup most of their PCs :) Though it's not like they care or know anything about what a browser actually is. It's "the internet". The only cases where I use chrome was on my old Nexus tablet and my smartphone. Though I do have FF on them as well. But chrome runs a bit faster on those weak devices :P Though whenever I need actual customization, I switch to FF. My FF in my phone also has an altered User-Agent to pretend to be a PC and not a mobile device. Can be really handy in many cases. Websites nowaday are really great in messing up themselfs in an attempt to "adjust" to your device.
Between the name "mseal makes linux hella safer" and "this new update makes Linux impossible to hack", yeah, this one is a clickbait. Would you click on the first one tho.
@ It’s a very editorialized title, there’s nothing that makes hacking impossible and any security researcher worth their salt will tell you that. The title is nonspecific and leads you to click on it via the draw of grandiose claims. It’s not a BuzzFeed headline but I don’t think it has to be that bad to be clickbait
I could imagine ways to use this even if the spawned child process seals all it's allocations and then runs out of memory. The child process would just fail and the main process would create a new one with more memory. Given how file reading code for old formats also lack much attention this could be useful for more than just browsers.
@@jfbeam but when the userspace is so tightly locked down, it makes it much harder for an attacker to get kernel level privilege. once he has that, there's really not much you can do. at least not with software
@@not_kode_kun Writing the kernel in Ada would make it very hard. Harder than on a CHERI system. Though I guess the point of CHERI is meant to be that it is easier to port Linux to CHERI than to re-write it. Though I'm not sure if it completely supports OS functionality or not. I think CHERI does.
This man unlocked early game marker tech at level 50. Edit : This just made me realize he has never known the joy of making a sword out of many markers, and then whacking a classmate with it
Doesn't this also vary by specific type of marker? For example, his is the type where the cap has a "peg" that inserts into the top of the barrel, which allows you to chain several markers together, but I've also seen markers where the cap stores the other way around, and does not chain? Visual example below. Marker with nesting caps: (barrel -> cap) ===>- |>| capped |>|===>- uncapped Marker with non-nesting caps: ===>- |>| capped |- uncapped
@@smitcher you should do some research on the big boy words you're trying to use there, buddypal (hint: look up the words "we", "nerd" and if you're feeling super brave with your homework: "mansplain")
While mseal provides robust security by preventing any modifications to sealed memory, it comes with significant downsides. Long-running services cannot effectively use this syscall because they would retain all sealed memory until the process terminates, leading to increased memory usage over time. This could eventually exhaust available memory, forcing the kernel to kill the process to free up resources. Therefore, using mseal in long-running applications is not practical due to the risk of memory retention and potential system instability. Additionally, the most common exploits target long-running services because they need to be persistently running. This makes mseal ineffective for protecting these services, as they cannot afford to retain memory indefinitely. So, what exactly is this protecting?
The main purpose of this is to be used by the kernel itself, to protect the stack and other shared areas. Not sure if there's of any use on userland (Or even if it can be used there)
the person who sponsored this change works with the V8 engine. Will I see the chromium browsers eat more memory on Linux now and require periodic restarts for simple garbage collection? worrying, but also, restarts are how updates are done so, idk if it is a problem for that specific use.
In the case of V8, the user heap is already sandboxed in order to limit the ability to exploit the software via memory corruption. However, if someone manages to escape the sandbox, nothing prevents it from remapping it executable, then jumping to the payload stored there (since the heap is, by design under user control and relatively big, we must consider it tainted). The stack size being relatively limited and already partially protected via canaries, it's way harder to store a full payload on it, so protecting the sandboxed heap against being remapped already does a lot
Used on OpenBSD for over a decade without ballooning issues AFAIK but probably does require a slower/more secure free() implementation to complement it. Which the Linux kernel has also had for years.
Or a hardware implemented shadow stack. Of course that's gonna put hard limits on the level of recursion supported and how's that work with with each process needing its own stack. You might need a way to read the hardware stack for debuggers but there should be no need to modify it. I haven't seen any modern architectures use this but I think some older architectures did it.
@@treyquattro but trying to return to the stack would make the program crash, because the address on top of the stack wouldn't match with the one on top of the shadow stack.
It would be cool if you made a video walking through the actual steps of the example you showed, writing "malicious" code, overflowing the stack and setting the return address to the malicious code for example
Numerous examples on UA-cam if you search. FT did a good DNS RCE where they pretty much explain the steps they took to overflow the buffer and the stack return address and then built a ROP chain to execute the code that they sent ua-cam.com/video/YCOoc1U7kPA/v-deo.htmlsi=XE6DQFjG94BZJ7G5&t=430
all this knowledge and smarts, but you just learned the marker cap thing? There is hope for me, yet! just pulling your leg, love your channel, I always learn something new... but not this marker thing, I knew that already.
Another fun fact about those markers, it's the same ink as in a sharpie. It just has a different solvent that prevents it from drying out rapidly. You can use an expo marker and go over a sharpie mark on a whiteboard, then wipe it off, and after a few cycles it'll get cleared off.
The marker thing is probably an indicator of someone who grew up with a cellphone, versus someone who did not...and was bored...and tried all the things including how many markers you can stick together before it collapses under its own weight as a bridge.
Chromium "The only browser engine" Firefox: Screaming on a market place inbetween banners of ads. Servo: Scouring bins and baskets trying to find support. Ditto: _shrug_ IE: WHY ARE YOU RUNNING
I didn't understand most of the technicality's in the video, but I feel intellectually superior to Low Level, since he just figured out the marker cap trick.
Embedded boy here. Have you ever heard about writing past the canary ? Alto this is a nice feature that will decrease the attack vector we're not out of the woods yet. On of the biggest problems is mixing data with program.
@@ManuFortis I don’t know much about NetBSD so I didn’t wanna comment, but hey, looking at the charts now, I guess one day Linux can catch up with NetBSD, when it comes to portability, aye? :D
@@AntranigVartanian Fair enough. I'm mostly interested in it for its ability to be put onto basically anything. Which I think is going to come in really handy for my intended use. Also, some of the most successful companies use BSD for their systems, and it seems NetBSD is probably the original basis or is closest to the original basis for most if not all of them. Nintendo uses their own version of BSD as I understand, as has Sony many times, especially for the PS3. Apple, well, MacOS is based on Darwin, which is an offshoot of yet another BSD OS. Sometimes the best way to copy success, is to copy the methods, right? Making my own game, and I'm thinking at this point my own console too to support a proper gaming platform that respects the right to own property properly; well those are going to need an OS that has a proven track record already. So BSD it is, I guess. I decided to start with NetBSD, because why not, since it has the best compatbility with whatever I end up making my proof of concept/prototype rig hosting whatever fork of NetBSD I end up creating in due time. (Probably going to be a nanoBSD version of NetBSD altered to favor gaming and communications. Nothing too fancy, just enough to do the job.) That portability you mention is where that comes in. The smaller the OS can be made, the more resources are left over for the actual game being played. Can do that with Linux, but there is too much chaos in the Linux community as of late for my liking. And certainly doesn't make sense to do it with Windows. I did ponder the possibility of using an offshoot of MikeOS, the assembly based OS; but it's 32 bit only. So BareMetalOS would be the next to look at for that. But that's still a work in progress really. Kind of too early to be used for something that requires dedicated stable reliability as I see it. As in it will do exactly what you expect every time bar only the more extreme circumstances which it cannot be expected to withstand, etc. Side note: I personally think gaming and computing needs to have a return to its roots in some regards, and not just in the playing retro games side of things either. Consoles have become computers in their own right, which is great in some ways, but terrible due to others. IMHO, game consoles should do one thing mostly, really well, with whatever else added on being made to exemplify the main function; not degrade it. That one thing being their main function. Everything else, can take a second seat at the very least, or not be included at all if it can't meet those standards. We have tablets, laptops and desktops for the things consoles don't need to be doing. And likewise, consoles should be doing the things that the others don't really make sense to include for. Like physical media for instance, with games. Nintendo does this right, even if they aren't everyones favourite right now. They include physical media in a day and age when it would probably make more sense economically for them to stop doing that. Meanwhile the others are trying to do away with it, all because digital licensing offers bigger profit margins. I can't begrudge them of that too much, since they do need to make a profit. I just wish they would be smarter about it in a way that isn't anti-consumerist. What era of graphics would this target? I'm thinking something in the realm of PS1 era graphics in regards to the RPG's aesthetics of the day, but upgraded as much as the console can handle to allow for larger games while not reducing graphical aesthetic quality more than necessary. I figure this should give plenty of indie devs a stable starting point for their own games, where they don't want to have to compete with AAA's pretending to be Indies on places like Steam. Anyways. This is getting longer than necessary, so I'll end it there for now.
It's funny that a week ago, I hadn't even heard of Yubikey. Then, 3 days ago I got a new laptop from my employer with a USB Yubikey plugged in, and now, all of the sudden, we also have video featuring a Yubikey 😁
@@blenderpanzi but that is precisely the meaning of "like" as an adverb in such a sentence structure. Taken from Merriam Webster: "Nearly, approximately; used interjectionally in informal speech with expressions of measurement". So not only it is a valid excuse, it is the most likely meaning of the sentence.
I fail to see how this makes hacking “impossible”. With the nature of the stack, it makes it impossible to make it immutable. This doesn’t inherently stop ROP or make it any harder either. I’d argue if you had a ROP primitive and the gadgets to be able to call mprotect on the stack or another memory region to make it executable, you’d have the gadgets to escalate a limited ROP primitive into something more useable (I.e increasing allowed ROP chain size, where it’s placed, or pivot to another primitive entirely). This definitely can be an obstacle in some attack vectors, but I don’t think it’s going to nearly have the same security impact that stuff like stack canaries, ASLR, seccomp, etc presented. Sandboxing or permissioning will never make memory corruption “impossible”. If that were the case, we would’ve seen binary exploitation die long ago.
This is an interesting idea, but I'll say it again, the actual biggest source of errors is not checking user input. If you use gets() or if you use scanf() in that way, you are not checking user input at all. That is the real error. The memory corruption is merely a side effect of what you've already done wrong.
Honestly the 2 things I'll levy at whoever is in charge of C's specification at this point is why do header files exist in 2024, and a hard deprecation of use of pointers as arrays never happened. An array should be pointer + length. Then bounds checks can be done.
@@chainingsolid Dramatically changing the C spec is essentially not going to happen, it has to retain legacy computability. That said, newer languages obviously dont need headers anymore and some (like Rust and Zig) implement slices that are as you say pointers + length
@@futuza Typing stuff twice. And being forced to predeclare anything before you can use it. They have a great use in supplying an API, but normally are just duplicate information.
@@steffennilsen2132 I agree backwards compact is super important. I'm not implying they should stop compiling old code. They should be making an easy to use replacement for pointers pretending to be arrays that can be used for future code.
I’m learning low level programming from a guy who just figured out expo caps click on the end. You never stacked expos in school? Love your content by the way, it’s some of the best.
LowLevel : Linus is very passionate Linus on this patch discussion: Stop this. I do not want to hear your excuses for garbage any more. We're done. If I hear any more arguments for this sh*t, I will literally put you in my ignore file, and will auto-NAK any future patches.
the yubikey has cryptography hardware to encrypt your ssh key and do the authentication of the public key with the key never leaving the yubi key itself. A normal USB drive would have to copy the private key to the computer's RAM, thus exposing it.
@@godofpotatos4691 yes, but only if you want to download it locally (i.e. if you manually execute that command from the video). Normally you don't do that, since it's considered insecure. You want to let the Yubi key do its own thing
His implementation is even worse than storing the key temporarily in RAM. He's storing it to disk each time he wants to use it, nullifying the reason to even have a Yubikey or smart-card in the first place. At the very least, if a security program, service, or framework supported the Yubikey/smart-card, it could store the key in protected RAM and securely communicate with the Yubikey/smart-card in a way that doesn't require the program programmers or user that needs it to be an expert in cryptography, in order to prevent side-channel attacks. But, the way he does it is terrible.
Nice! You caused me to have an epiphany - That moment where the overflow refuses to crash and gives control to a hacker's program. That makes so much sense to me :) thanks
crashing is bad, it should only occur when something impossible for the computer to do or continue doing. low level control allows you to do almost anything with memory. Security is tricky because the computer can't guess what you expect to happen. that is why you setup the rules yourself when dealing with low level code. otherwise use something like rust for the attempts at automating the rules for you as most use cases don't need to be that free with how to handle memory.
The main problem seems to me to be that exploitable functions are STILL available. Instead, one could offer secure alternatives and rigorously abort the compilation process with a corresponding error message and FORCE the maintainer to remove vulnerabilities from existing code instead of constantly tinkering around it. If you compare this approach to the analog world, it's a bit like continuing to distribute guns that are more likely to explode for self-defense instead of taking them out of circulation. Another problem is that just because a system integration is available, there is no guarantee that it will be used. Nevertheless a great informative video.
I thought this comment section was about mseal(), but it's all about markers. I don't get the reference, did I just end up in the wrong comment section? Some UA-cam memory leak somewhere? Please, help!🙏
Idk if you legit don't understand the marker command but it's hilarious six people liked the comment without replying with an explanation Edit: mark that seven
no, what you found is proof of the average IQ of the average social media comment section. Not many know what the mseal will do, but many more know what a marker sword is. which one do you think people will be able to talk about? the one with least resistance and confidently know enough to post about as if there are not other 100s of comments letting the youtuber and other viewers know about the markers they know so well. I on the other hand can't deny that I will miss the days I use mprotect to gain code execution. V8 is already strong in protections and require so much to get close to a working POC. most of the time relying on old versions of chromium to have fun with as the more recent ones are too complex to enjoy that quick satisfaction that one gets from solving a challenge. Even CVEs dont offer enough info, which is fine as I doubt many want their systems to be easily broken into. I sometimes do miss the days before AMD64 for which in a x86 environment would allow you to just load all the ROPs and the needed arguments in the stack instead of worrying about having to find gadgets to ROP the arguments into the registers. sometimes I am lazy, and want to find enjoyment in something that is getting progressively harder in the modern age. RIP tbh, if anyone did care about ROP security, we would be using shadow stacks that are separate from our modifiable variables to hold the return addresses. its been a solved problem for a long time, but its definitely slowing down execution a little. I wonder if mseal is truly going to solve it without the loss of performance.
Not a memory leak, go back to the beginning of the video. You read the comments while the audio is background noise and missed the part where he didn't know how that you can put the cap on the marker in the back of the marker and that's why people are talking about marker swords
Dudes chill, I was joking. I got the marker reference and was as equally surprised as everyone else that he didn't know that OP feature. I just saw a perfect opportunity to make the joke ;)
Fascinating topic and approach to a solution, good of you to demonstrate and summarize, thank you! Unrelated, but what font are you using there, @3:02?
The private key still lives on the Yubikey. You can never “extract” the private key from the Yubikey. He mis-spoke there. The command he ran just tells your SSH Client that it needs to ask the Yubikey for the secret. You still need to physically have the key (+ pin/touch optionally) every single time you try to authenticate. This is exactly how “Passkeys” work but in theory is more secure because it’s a hardware token.
Nvidia - Feb 2021: "Our crypto hash rate limiter is unhackable!" Hackers - Mar 2021: "I just hacked it..." Moral of the story: If it's software, it's hackable.
@2:50 I just have to ask, I'm not certain I follow with Yubikey. What happens if someone gets ahold of my yubikey? Wouldn't that present a security risk?
@@tony-does-stuff technically yes but generally that’s a lower risk than sending ssh keys other ways. Any attacker that has physical access to steal your yubikey can just use a good ol’ fashioned crowbar attack and get whatever they want from you anyway.
I'm a frontend developer using frameworks to build HelloWorld websites. Still, I thoroughly enjoy your videos, even if I don't comprehend the most of it.
"Memory corruption has been responsible for 70% of hacks in the last 20 years" Do you have a source for that? Are you talking about the google and Microsoft study of 2017 (I think?)?
Well drivers are the primary way to get a rootkit functioning with these complex A/V system. The main way to enable this is attach to a firmware level driver and overflow and break the services associated then move on from there.
I've used Chromium browsers for years but have grown tired of poor integration with my desktop. I recently discovered Zen Browser, and I'm actually quite enjoying it. I'm also watching the development of Ladybird browser with great interest. We need more diversity and competition back in the browser market.
Nerds don't realize that an astonishing percent of people use whatever is default. 90+% of all Android traffic is through stock browser aka chromium. As in, 90+% of Android users never install any other browser. At all. Ever.
Haven't we learned by now that calling something unhackable is just begging someone out there to crack something just to prove you wrong lmao Also I think it's very debatable that memory corruption is the "#1 cause" when so many prominent hacks lately have been due to social engineering. Yes I know memory corruption is still common and abused a lot, I just don't think it's fair to say it's #1
Its not unhackable, but if i understood the feature correctly, then it will be a pain in the ass for hackers to get around if it becomes widely used. Also the thing is, we cant really fight against social engineering. People will always keep clicking on links and will always post everything they can about their life online, so we cant do much about that. I would guess aside from social engineering, memory corruption has got to be one of the top 3 at least
@@SergeantExtremeno for a few reasons - microsoft goes out of its way to make its users tech-illiterate - windows loves showing dialogs all the time that people will learn to click away without reading (nothing to do with linux vs dos, but the de and the culture should be considered too) - windows encourages running as admin, which most linux distros don't - windows comes with lots of juicy telemetry data ready for the successful attacker (recall is a particularly egregious example), which most linux distros don't collect
Linux is just as easy to leave a port open, windows automatically handles a lot of measures automatically whereas with Linux you have the sole responsibility of securing and ensuring good security practices
@@yjlom 1. I could argue the same about Linux. A great example is the push to force users to download and install software only from "stores". When I complained about this in the distro forums, I was told that installing software from outside of stores was a "power user" move, and it's something a regular person shouldn't be doing. You can't get more tech illiterate than that. 2. Windows doesn't encourage running as admin with the exception of highly specialized software such as anti-virus, data recovery software, and driver software. 3. I don't necessarily agree that Windows shows a lot of dialogs. For the most part, pop ups only occur if something goes wrong. This is especially true in this day and age. 4. Although, I do agree with your point on telemetry.
not only you can put the buffer size with scanf via the string formatter, the compiler is smart enough to detect if the size provided to scanf is too big
1:01 No, Chromium is *NOT* the basis for all the browsers on the internet. For most, sadly, it is, but not all. Firefox and Safari still have their own rendering engine.
Just a thought: it might be possible to make stack-smashing attacks impossible by a simple ABI change. The stack is already handled with 2 registers: RSP and RBP (stack pointer and base pointer) which frame the memory used for a function calls local variables with register saves and call return addresses. They could be used a little differently: use the stack pointer in the usual way for storing call return addresses and saving registers, but have the base pointer point at an entirely separate memory area, a second stack used only for functions local variables. Use RSP in the usual way with push/pop call/ret, and manage RBP by subtracting the required memory for the function, then adding it back before return (or alternatively push/popping it with the other callee-saved registers). There may still be other memory corruption attack vectors possible, but overwriting a return address to get arbitrary code execution isn't one of them. A global implementation would require the OS to provide the 2 extensible stack areas, and debuggers would need to be rewritten to handle the different method of call-stack unwinding, but all in all not a huge change. And it wouldn't even be required to have a compliant OS: a software creator could implement the different ABI within their own program, by just allocating an alternate stack space and using it as described: it would just need a compiler option to use the alternate stacking method.
Why would I ever want to turn the X bit back on a memory region I've declared NX? Like, what's the use case here? Honestly it might just be easier to run a hardened kernel that just disallows that by default.
Nice feature to have, yet of course it needs adoption in software. Would be nice to see a video on Seccomp, which has been around in Linux longer (introduced in Linux 2.6.12 back in 2005) and does have good adoption.
If GETS is so vulnerable, why isn't that command disabled by default, so only people running ancient code that requires GETS will have it enabled by manual user intervention in the kernel settings?
There was a time when computing resources were so scarce that memory that was both writable and executable was a feature. "Self-Modifying code" as it was called back then was always black magic, but it could do amazing things. It's obvious though that in the modern world we live in security is way more important than this level of code optimization and I'm glad to see it finally fall by the wayside.
Yes, self modifying code was also used by some programs as an elaborate anti-copying technique I seem to remember something called 'Magic Pencil' but it was a long time ago and my memory is probably wrong
We shouldn't protect ourselves so as to disable some ways of coding. Self modifying code could be a good idea too sometimes. Issue is actually having functions that are not checked for external input - otherwise you would not be able to exploit this out of the program.
Oh, linux caught up to what openBSD has had for 14 years now. Cool. but it being on linux means it's a trash security feature that's going to be forgotten about in 3 years
BSD had a first version this from 2022. Linux made its own version in 2023 with some extra features. After a year, changes on both systems end up being very similar solutions. (THat's not 14 years)
It's not *exactly* what has been in OpenBSD for yonks, but I'd bet the idea comes from OpenBSD's work, it was implemented there first. What is really galling is the Power architecture has stuff like access ordering (PROT_SAO) since kernel 2.6 that Intel/AMD world still without AFAIK.
If CPUs just had an separate stack hardneded to oblivion.. - Push a return address, the address vanishes into a black hole and can't be later modified or inspected by user-space. The pushed address could be checked that is it in a r-x page or you would get a segfault. - Pop-and-jump: get a return address, the address is pulled from a magical CPU register.
That's nothing. Starting with Windows 10, Microsoft made hacking completely obsolete by integrating spyware directly into the operating system rather than forcing black hat hackers from adding it later.
I think you mentioned the right point at the end... if it's a software implemented feature, then it's just a matter of time (unfortunately not much I guess), that it will be bypassed.
when I was in gradeschool, I'd connect a bunch of those markers together by using the cap connection thing that you mentioned in the video and make a "sword." obviously when I hit something, it all shattered, but it was very fun :3
0:39 I suspect "the number one way that hackers get into your computer" has not been through memory corruption bugs for many years. Nowadays exploiting users is much easier and probably far more common: phishing, installing from dubious sources, social engineering...
I don't program in assembly, but I absolutely understand how buffer overflows into arbitrary code execution work, having watched numerous videos on glitchy speedruns where the pointer you jump to is the address defined by the position of a Koopa shell.
Here is a curious challenge i don't see people commenting on, try making a "vulnerable C program" that compiles using security features of Clang or GCC. OpenBSD users rise 🍷🗿
I have a note, half of the video is taken for explaining the basic idea of binary exploitation not a lot of time was taken in explaining the mseal syscall more in depth, plus the clear clickbait “make hacking impossible”.
go get a yubikey! yubi.co/lowlevellearning-2024
Edit: I may have caused some confusion about the derived Private Key. When you generate the private key using 'ssh-keygen -K', you're not actually downloading the key itself. You're create a key that stores the credential ID of the Yubikey. You never have access to the private key within the Yubikey. Sorry for the mixup!
Best Yubikey ad yet
what's your source, I want to read the blog myself
I have one and I actually love them for gpg
Please do a longer video where you show the many applications of yubikeys! That's the kind of add that I would LOVE!
Now we're learning about pen caps? How low we going? I'm going to start a Limbo code channel. It'll just be a reaction channel. :) Have a great day!
Firefox: Excuse me? 🤨
Yea that chromium statement is not nice
I'm using Firefox based Zen Browser and loving it. 😃
@@ContemplativeCat same lol, its pretty nice
But realistically though, firefox has a smaller share of browser users then linux has of desktop OS users
Right, me and most of my family is using Firefox for over 20 years now. Well my family essentially had not really a choice as I have setup most of their PCs :) Though it's not like they care or know anything about what a browser actually is. It's "the internet". The only cases where I use chrome was on my old Nexus tablet and my smartphone. Though I do have FF on them as well. But chrome runs a bit faster on those weak devices :P Though whenever I need actual customization, I switch to FF. My FF in my phone also has an altered User-Agent to pretend to be a PC and not a mobile device. Can be really handy in many cases. Websites nowaday are really great in messing up themselfs in an attempt to "adjust" to your device.
If chromium was the only browser engine left the web would be TOAST
its 90% there
Yeah, good thing we also have Microsoft edge, opera, brave, Vivaldi...
@@echoptic775 Firefox?
@@echoptic775this is joke right?
yeah the insane competition of 3 browser engines
The title is a real clickbait. This feature would make hacking harder but certainly not impossible
Starting to realize this dude is just clickbait. Him and Prime are rocking Programmer UA-cam with the clickbait, hard.
Duh
youtubers who don't clickbait are all dead. it's natural selection of social media
I propose naming this time period, starting from say 2010 to whenever this shit ends, the Age of Clickbait.
Between the name "mseal makes linux hella safer" and "this new update makes Linux impossible to hack", yeah, this one is a clickbait.
Would you click on the first one tho.
does this mean he never made an expo marker sword?
@@hatacoyama1246 Inconceivable!
Nooooooo!!!!
what is that
he never had tried to balance a pen tower on the palm of his hand, having to dodge the projectiles on their in evitable way down.
Not everyone has twenty of these. Now we have two, and one is dead.
0:10 Elementary school. Thats how long ago I learned that. I'm 30.
Reported. Dude. Not okay.
@@robnobert ??????????
@@robnobertlmaooooo
I don’t know what happened to you that early in life, but I’m sorry bruh.
What's with these replies? There's nothing wrong with OP's comment.
too busy hacking your preschools web server to pick up the marker cap beta? insane
for you to call someone a beta is funny AF. Nice stache sweetie
I think the beta was referring to software versions. Like the beta version of the marker cap technology 😂
@@blankexpression2u @voltairesarmy6702 more so 'beta' used in climbing terminology to mean techniques used. also thanks, i grew it myself
@@blankexpression2u lol dude, beta as in the climbing term which means technique or instructions. also thanks i grew it myself
@@shanoian It's probably a bot.
Boo for clickbait title but solid video that’s super interesting as always.
how is that title clickbait?
@ It’s a very editorialized title, there’s nothing that makes hacking impossible and any security researcher worth their salt will tell you that. The title is nonspecific and leads you to click on it via the draw of grandiose claims. It’s not a BuzzFeed headline but I don’t think it has to be that bad to be clickbait
i usually just seal the marker by putting it back in my nose.
@@MissMyMusicAddiction or somewhere else 😏😏
@@AL-eu4ey yee i usually put it in mi butt when im done
lmao
@@AL-eu4ey Sharpie
Reported.
I would say give it a couple months, someone will figure out how to disable it, work around it, or use it to their advantage. 1337s gonna 1337
yup... there was some dude(s) who would go through intel architecture for fun and......... spectre.
@@PoseidonDiver God Bless Them.
What
Its like trying to make an unpickable lock.
OpenBSD uses methods like this and no major CVE since 2006
A summary of what this function does is pretty much:
See this memory? never ever ever EVER let me edit the permissions of this memory EVER again!
I could imagine ways to use this even if the spawned child process seals all it's allocations and then runs out of memory. The child process would just fail and the main process would create a new one with more memory. Given how file reading code for old formats also lack much attention this could be useful for more than just browsers.
At least _in userspace_ ... (hint: the kernel can screw with those flags all it wants.)
@@jfbeam but when the userspace is so tightly locked down, it makes it much harder for an attacker to get kernel level privilege. once he has that, there's really not much you can do. at least not with software
@@not_kode_kun Writing the kernel in Ada would make it very hard. Harder than on a CHERI system. Though I guess the point of CHERI is meant to be that it is easier to port Linux to CHERI than to re-write it. Though I'm not sure if it completely supports OS functionality or not. I think CHERI does.
This man unlocked early game marker tech at level 50.
Edit : This just made me realize he has never known the joy of making a sword out of many markers, and then whacking a classmate with it
fr 😭
Doesn't this also vary by specific type of marker? For example, his is the type where the cap has a "peg" that inserts into the top of the barrel, which allows you to chain several markers together, but I've also seen markers where the cap stores the other way around, and does not chain? Visual example below.
Marker with nesting caps: (barrel -> cap)
===>- |>| capped
|>|===>- uncapped
Marker with non-nesting caps:
===>- |>| capped
|- uncapped
@@smitchertech nerds rejoice in superfluous diagrams on niche topics
@@smitcher you should do some research on the big boy words you're trying to use there, buddypal
(hint: look up the words "we", "nerd" and if you're feeling super brave with your homework: "mansplain")
I'm not convinced this guy has ever used a marker ever
While mseal provides robust security by preventing any modifications to sealed memory, it comes with significant downsides. Long-running services cannot effectively use this syscall because they would retain all sealed memory until the process terminates, leading to increased memory usage over time. This could eventually exhaust available memory, forcing the kernel to kill the process to free up resources. Therefore, using mseal in long-running applications is not practical due to the risk of memory retention and potential system instability. Additionally, the most common exploits target long-running services because they need to be persistently running. This makes mseal ineffective for protecting these services, as they cannot afford to retain memory indefinitely. So, what exactly is this protecting?
The main purpose of this is to be used by the kernel itself, to protect the stack and other shared areas. Not sure if there's of any use on userland (Or even if it can be used there)
the person who sponsored this change works with the V8 engine. Will I see the chromium browsers eat more memory on Linux now and require periodic restarts for simple garbage collection? worrying, but also, restarts are how updates are done so, idk if it is a problem for that specific use.
@@framegrace1 I was under the impression the V8 engine will use this new feature to strengthen the chromium browser security
In the case of V8, the user heap is already sandboxed in order to limit the ability to exploit the software via memory corruption. However, if someone manages to escape the sandbox, nothing prevents it from remapping it executable, then jumping to the payload stored there (since the heap is, by design under user control and relatively big, we must consider it tainted).
The stack size being relatively limited and already partially protected via canaries, it's way harder to store a full payload on it, so protecting the sandboxed heap against being remapped already does a lot
Used on OpenBSD for over a decade without ballooning issues AFAIK but probably does require a slower/more secure free() implementation to complement it. Which the Linux kernel has also had for years.
"Shadow stack" is also something that prevents these kinds of attacks, by having a separate stack for return addresses
Like Forth?
I was thinking the same, but of course that won't protect against someone flipping the NX bit on the stack via mprotect (or any other rw memory pages)
Or a hardware implemented shadow stack. Of course that's gonna put hard limits on the level of recursion supported and how's that work with with each process needing its own stack. You might need a way to read the hardware stack for debuggers but there should be no need to modify it. I haven't seen any modern architectures use this but I think some older architectures did it.
@@vk3fbab shadow stack is a hardware level protection by definition
@@treyquattro but trying to return to the stack would make the program crash, because the address on top of the stack wouldn't match with the one on top of the shadow stack.
Man, I used to make giant rods full of markers by putting them end to end like that. The Sword fights in the offices were EPIC.
brings me back to school.
Sounds like an epic place to work in
Cringe
It would be cool if you made a video walking through the actual steps of the example you showed, writing "malicious" code, overflowing the stack and setting the return address to the malicious code for example
Numerous examples on UA-cam if you search. FT did a good DNS RCE where they pretty much explain the steps they took to overflow the buffer and the stack return address and then built a ROP chain to execute the code that they sent ua-cam.com/video/YCOoc1U7kPA/v-deo.htmlsi=XE6DQFjG94BZJ7G5&t=430
That would require skill.
@@moamber1 not really... finding the vulnerability vector is the most difficult part
"... makes hacking IMPOSSIBLE" ... famous last words.
Clickbait, given the ultimate meaning of hacking...
all this knowledge and smarts, but you just learned the marker cap thing? There is hope for me, yet!
just pulling your leg, love your channel, I always learn something new... but not this marker thing, I knew that already.
Could you not be so clickbaity? Could you put at least the name of the feature in the title or in the thumbnail, please?
DeArrow is a great extension for exactly this reason! it’s by the same guy who made sponsorblock. it even works in mobile safari
No
Sorry but vague titles are proven to get more clicks. UA-cam lets you do A\B testing with different titles and thumbnails
Welcome to UA-cam.
@@b33thr33kay he started explaining the method before the first minute of video my man
Another fun fact about those markers, it's the same ink as in a sharpie. It just has a different solvent that prevents it from drying out rapidly. You can use an expo marker and go over a sharpie mark on a whiteboard, then wipe it off, and after a few cycles it'll get cleared off.
Oh that's nest, I suppose that's why if you leave expo on for too long it becomes permanent lol
The marker thing is probably an indicator of someone who grew up with a cellphone, versus someone who did not...and was bored...and tried all the things including how many markers you can stick together before it collapses under its own weight as a bridge.
no it isnt lol
@@deltamir_ it was partially a joke, but there certainly a strong correlation, though not mutually exclusive either.
Of all the system that I've broken into, I've never used memory corruption, just people corruption.
Chromium "The only browser engine"
Firefox: Screaming on a market place inbetween banners of ads.
Servo: Scouring bins and baskets trying to find support.
Ditto: _shrug_
IE: WHY ARE YOU RUNNING
wine gecko:
Well, IE is a deadend, but Safari and others are running Webkit, not Blink (Chromium)
WebKit dusting in the corner
Ladybird: vibing in the corner
netscape navigator: rotting away
not hackable sounds very like unsinkable
Just an iceberg away.
Quite the clickbait headline. Does not seem all that useful, Intel CET is a much more effective mitigation without the downsides of mseal.
I perfectly agree, the only advantage to this is that it doesn't need hardware support, but you can achieve this kind of protection with seccomp rules
Very true.
Does AMD have an equivalent?
@@WeisenbergTKMrWhite Yes! All Zen3 processors have shadow stack protection
I didn't understand most of the technicality's in the video, but I feel intellectually superior to Low Level, since he just figured out the marker cap trick.
Impossible, you say? .....And that is the sound of "challenge accepted" around the world.
0:32 All the hackers from thousands of years ago were using this method too, so you were correct.
Embedded boy here. Have you ever heard about writing past the canary ? Alto this is a nice feature that will decrease the attack vector we're not out of the woods yet.
On of the biggest problems is mixing data with program.
Good to see Linux catching up with OpenBSD on the security side and FreeBSD on the performance side.
Yep I came here just to say 'but OpenBSD has done this for like two decades'
Curious, but why no mention of NetBSD? Just installed it on a side rig to tinker with, so am curious why it's not mentioned.
@@yukkuriwa Important aspects in which way? Feel free to explain at length if you feel you must to get the jist of things across. I'll read it.
@@ManuFortis I don’t know much about NetBSD so I didn’t wanna comment, but hey, looking at the charts now, I guess one day Linux can catch up with NetBSD, when it comes to portability, aye? :D
@@AntranigVartanian Fair enough. I'm mostly interested in it for its ability to be put onto basically anything. Which I think is going to come in really handy for my intended use.
Also, some of the most successful companies use BSD for their systems, and it seems NetBSD is probably the original basis or is closest to the original basis for most if not all of them. Nintendo uses their own version of BSD as I understand, as has Sony many times, especially for the PS3. Apple, well, MacOS is based on Darwin, which is an offshoot of yet another BSD OS.
Sometimes the best way to copy success, is to copy the methods, right?
Making my own game, and I'm thinking at this point my own console too to support a proper gaming platform that respects the right to own property properly; well those are going to need an OS that has a proven track record already.
So BSD it is, I guess. I decided to start with NetBSD, because why not, since it has the best compatbility with whatever I end up making my proof of concept/prototype rig hosting whatever fork of NetBSD I end up creating in due time. (Probably going to be a nanoBSD version of NetBSD altered to favor gaming and communications. Nothing too fancy, just enough to do the job.)
That portability you mention is where that comes in. The smaller the OS can be made, the more resources are left over for the actual game being played.
Can do that with Linux, but there is too much chaos in the Linux community as of late for my liking. And certainly doesn't make sense to do it with Windows.
I did ponder the possibility of using an offshoot of MikeOS, the assembly based OS; but it's 32 bit only. So BareMetalOS would be the next to look at for that. But that's still a work in progress really. Kind of too early to be used for something that requires dedicated stable reliability as I see it. As in it will do exactly what you expect every time bar only the more extreme circumstances which it cannot be expected to withstand, etc.
Side note: I personally think gaming and computing needs to have a return to its roots in some regards, and not just in the playing retro games side of things either. Consoles have become computers in their own right, which is great in some ways, but terrible due to others. IMHO, game consoles should do one thing mostly, really well, with whatever else added on being made to exemplify the main function; not degrade it. That one thing being their main function. Everything else, can take a second seat at the very least, or not be included at all if it can't meet those standards.
We have tablets, laptops and desktops for the things consoles don't need to be doing. And likewise, consoles should be doing the things that the others don't really make sense to include for. Like physical media for instance, with games. Nintendo does this right, even if they aren't everyones favourite right now. They include physical media in a day and age when it would probably make more sense economically for them to stop doing that.
Meanwhile the others are trying to do away with it, all because digital licensing offers bigger profit margins. I can't begrudge them of that too much, since they do need to make a profit. I just wish they would be smarter about it in a way that isn't anti-consumerist.
What era of graphics would this target?
I'm thinking something in the realm of PS1 era graphics in regards to the RPG's aesthetics of the day, but upgraded as much as the console can handle to allow for larger games while not reducing graphical aesthetic quality more than necessary.
I figure this should give plenty of indie devs a stable starting point for their own games, where they don't want to have to compete with AAA's pretending to be Indies on places like Steam.
Anyways. This is getting longer than necessary, so I'll end it there for now.
It's funny that a week ago, I hadn't even heard of Yubikey. Then, 3 days ago I got a new laptop from my employer with a USB Yubikey plugged in, and now, all of the sudden, we also have video featuring a Yubikey 😁
Note: Chromium isn't the only browser engine on the internet.
no one said that it was, chromium is just the world's most popular engine
@@s4ytoHe literally does at 0:57. I don't think you can use the "like" as an excuse, given how that word is used these days, just as a filler word.
@@blenderpanzi but that is precisely the meaning of "like" as an adverb in such a sentence structure. Taken from Merriam Webster: "Nearly, approximately; used interjectionally in informal speech with expressions of measurement". So not only it is a valid excuse, it is the most likely meaning of the sentence.
For thousands of years… Ladders were high tech ways to break in.
They still are.
Someone clearly never made marker swords when they were a kid.
Only as kids, right @djsmeguk?
0:59 he just insulted firefox like that
I fail to see how this makes hacking “impossible”. With the nature of the stack, it makes it impossible to make it immutable.
This doesn’t inherently stop ROP or make it any harder either. I’d argue if you had a ROP primitive and the gadgets to be able to call mprotect on the stack or another memory region to make it executable, you’d have the gadgets to escalate a limited ROP primitive into something more useable (I.e increasing allowed ROP chain size, where it’s placed, or pivot to another primitive entirely).
This definitely can be an obstacle in some attack vectors, but I don’t think it’s going to nearly have the same security impact that stuff like stack canaries, ASLR, seccomp, etc presented.
Sandboxing or permissioning will never make memory corruption “impossible”. If that were the case, we would’ve seen binary exploitation die long ago.
That's what I said! If you can call mprotect you could probably call mmap and create a new page entirely
Such an interesting history, please consider doing a deep dive on memory vulnerabilities. Learnt a lot 🙂
This is an interesting idea, but I'll say it again, the actual biggest source of errors is not checking user input. If you use gets() or if you use scanf() in that way, you are not checking user input at all. That is the real error. The memory corruption is merely a side effect of what you've already done wrong.
Honestly the 2 things I'll levy at whoever is in charge of C's specification at this point is why do header files exist in 2024, and a hard deprecation of use of pointers as arrays never happened. An array should be pointer + length. Then bounds checks can be done.
@@chainingsolid Dramatically changing the C spec is essentially not going to happen, it has to retain legacy computability. That said, newer languages obviously dont need headers anymore and some (like Rust and Zig) implement slices that are as you say pointers + length
@@chainingsolidwhat's wrong with header files?
@@futuza Typing stuff twice. And being forced to predeclare anything before you can use it. They have a great use in supplying an API, but normally are just duplicate information.
@@steffennilsen2132 I agree backwards compact is super important. I'm not implying they should stop compiling old code. They should be making an easy to use replacement for pointers pretending to be arrays that can be used for future code.
I’m learning low level programming from a guy who just figured out expo caps click on the end. You never stacked expos in school?
Love your content by the way, it’s some of the best.
LowLevel : Linus is very passionate
Linus on this patch discussion: Stop this. I do not want to hear your excuses for garbage any more.
We're done. If I hear any more arguments for this sh*t, I will
literally put you in my ignore file, and will auto-NAK any future
patches.
Cool Video!!
What Font is it that you use?
if you've never had a 'lightsaber' fight with about 7 expo markers stuck together, you haven't lived brother
Hi lowlevel. Interesting video. I was wondering what keyboard you are using? Sounds really nice.
Im sorry if this is a stupid question, but whats the difference between a yubi key and storing the ssh key encrypted on a normal usb drive?
the yubikey has cryptography hardware to encrypt your ssh key and do the authentication of the public key with the key never leaving the yubi key itself. A normal USB drive would have to copy the private key to the computer's RAM, thus exposing it.
@@monad_tcp but he says that it downloads the ssh key locally
@@godofpotatos4691 yes, but only if you want to download it locally (i.e. if you manually execute that command from the video). Normally you don't do that, since it's considered insecure.
You want to let the Yubi key do its own thing
I misspoke here, you don't actually get the key, you get a derived Private Key that associates to the credential in the Yubikey.
His implementation is even worse than storing the key temporarily in RAM. He's storing it to disk each time he wants to use it, nullifying the reason to even have a Yubikey or smart-card in the first place.
At the very least, if a security program, service, or framework supported the Yubikey/smart-card, it could store the key in protected RAM and securely communicate with the Yubikey/smart-card in a way that doesn't require the program programmers or user that needs it to be an expert in cryptography, in order to prevent side-channel attacks. But, the way he does it is terrible.
Nice! You caused me to have an epiphany - That moment where the overflow refuses to crash and gives control to a hacker's program. That makes so much sense to me :) thanks
crashing is bad, it should only occur when something impossible for the computer to do or continue doing. low level control allows you to do almost anything with memory. Security is tricky because the computer can't guess what you expect to happen. that is why you setup the rules yourself when dealing with low level code. otherwise use something like rust for the attempts at automating the rules for you as most use cases don't need to be that free with how to handle memory.
3:53 please go super deep into the details in another video, if you haven't already
What keyboard/switches do you use? It sounds very smooth.
Love your stuff man!
OMG your marker trick made my day, glad I had a marker nearby I could try it with or would be convinced it was pure old VFX.
This sponsored segment contains one of the only products shilled by a youtuber I actually want to buy
yeah, I liked the way it was incorporated into the rest of the content with examples too!
And for those who already have them, I learned a new feature!
The main problem seems to me to be that exploitable functions are STILL available. Instead, one could offer secure alternatives and rigorously abort the compilation process with a corresponding error message and FORCE the maintainer to remove vulnerabilities from existing code instead of constantly tinkering around it.
If you compare this approach to the analog world, it's a bit like continuing to distribute guns that are more likely to explode for self-defense instead of taking them out of circulation.
Another problem is that just because a system integration is available, there is no guarantee that it will be used.
Nevertheless a great informative video.
I thought this comment section was about mseal(), but it's all about markers. I don't get the reference, did I just end up in the wrong comment section? Some UA-cam memory leak somewhere? Please, help!🙏
Idk if you legit don't understand the marker command but it's hilarious six people liked the comment without replying with an explanation
Edit: mark that seven
no, what you found is proof of the average IQ of the average social media comment section. Not many know what the mseal will do, but many more know what a marker sword is. which one do you think people will be able to talk about? the one with least resistance and confidently know enough to post about as if there are not other 100s of comments letting the youtuber and other viewers know about the markers they know so well. I on the other hand can't deny that I will miss the days I use mprotect to gain code execution. V8 is already strong in protections and require so much to get close to a working POC. most of the time relying on old versions of chromium to have fun with as the more recent ones are too complex to enjoy that quick satisfaction that one gets from solving a challenge. Even CVEs dont offer enough info, which is fine as I doubt many want their systems to be easily broken into. I sometimes do miss the days before AMD64 for which in a x86 environment would allow you to just load all the ROPs and the needed arguments in the stack instead of worrying about having to find gadgets to ROP the arguments into the registers. sometimes I am lazy, and want to find enjoyment in something that is getting progressively harder in the modern age. RIP
tbh, if anyone did care about ROP security, we would be using shadow stacks that are separate from our modifiable variables to hold the return addresses. its been a solved problem for a long time, but its definitely slowing down execution a little. I wonder if mseal is truly going to solve it without the loss of performance.
Not a memory leak, go back to the beginning of the video. You read the comments while the audio is background noise and missed the part where he didn't know how that you can put the cap on the marker in the back of the marker and that's why people are talking about marker swords
You really weren’t paying attention to this amazing presentation about markers?
Dudes chill, I was joking. I got the marker reference and was as equally surprised as everyone else that he didn't know that OP feature. I just saw a perfect opportunity to make the joke ;)
In fact one of my oldest memories is an older kid showing me how you could make a mega pen by joining several smaller pens together
@0:33 you could say thousands of years, starting in the second millennium(1990s) and still continuing into the third millennium(2020s)
Fascinating topic and approach to a solution, good of you to demonstrate and summarize, thank you!
Unrelated, but what font are you using there, @3:02?
2:35 this sounds a lot like cheap usb drive 😂 (I know you can do a lot more with yubikey, this is just a bad example)
@@ItsRaelx yeah right whats stopping me from just storing it on a normal USB drive
The private key still lives on the Yubikey. You can never “extract” the private key from the Yubikey.
He mis-spoke there. The command he ran just tells your SSH Client that it needs to ask the Yubikey for the secret. You still need to physically have the key (+ pin/touch optionally) every single time you try to authenticate.
This is exactly how “Passkeys” work but in theory is more secure because it’s a hardware token.
@@pratheekrebala well setting pass phrase on ssh key would do the same thing and you can store it on cheap usb drive
Nvidia - Feb 2021: "Our crypto hash rate limiter is unhackable!"
Hackers - Mar 2021: "I just hacked it..."
Moral of the story: If it's software, it's hackable.
@2:50 I just have to ask, I'm not certain I follow with Yubikey. What happens if someone gets ahold of my yubikey? Wouldn't that present a security risk?
@@tony-does-stuff technically yes but generally that’s a lower risk than sending ssh keys other ways. Any attacker that has physical access to steal your yubikey can just use a good ol’ fashioned crowbar attack and get whatever they want from you anyway.
@@tony-does-stuff
If I recall correctly, you set a password during onboarding, and only after verification a key may be extracted.
I love sponsorblock telling me that I don't need 7 minutes of this 10 minute video. Thanks for saving me 7 minutes of my life.
That keyboard sound is pure eargasm. It's rare when not on a specialized keyboard channel.
@@jonathaningram8157 came to the comments to find out which keyboard it is, no luck though. Does anyone know?
I'm a frontend developer using frameworks to build HelloWorld websites. Still, I thoroughly enjoy your videos, even if I don't comprehend the most of it.
"Memory corruption has been responsible for 70% of hacks in the last 20 years"
Do you have a source for that? Are you talking about the google and Microsoft study of 2017 (I think?)?
I'm sceptical as well. I want to know the definition of 'Hacks' being used.
I was told the nr. 1 vulnerability was always social engineering related.
Well drivers are the primary way to get a rootkit functioning with these complex A/V system. The main way to enable this is attach to a firmware level driver and overflow and break the services associated then move on from there.
It's not that 70% of hacks are caused by memory corruption, but 70% of CVEs are a consequence of it.
what's your keyboard? it sounds great
What about the physical NSA backdoors implanted in the silicon chips?
Great info. I teach things like PIE/NX/ASLR overrides (and more) to masters students. So seeing the base overflow concepts iterated here is gold
no way, saying that Chromium browser is the basis of all browsers on the internet is not only wrong. But also delusional.
It's the basis of all browsers that people actually use
I've used Chromium browsers for years but have grown tired of poor integration with my desktop. I recently discovered Zen Browser, and I'm actually quite enjoying it. I'm also watching the development of Ladybird browser with great interest. We need more diversity and competition back in the browser market.
Nerds don't realize that an astonishing percent of people use whatever is default. 90+% of all Android traffic is through stock browser aka chromium. As in, 90+% of Android users never install any other browser. At all. Ever.
It's most, I think the second non-Chromium based browser is Safari.
Can't trust this video based on that alone. Been looking through the comments for the tldr but can't find it
Very nice video, I.
Wish I had seen this ten years ago. Your explanation on buffer overflogs is incredible..
0:59 - Firefox RIP in peace
pepperoni
More ads like this please! Maybe an ad-only video about the yubi key(s)?
Haven't we learned by now that calling something unhackable is just begging someone out there to crack something just to prove you wrong lmao
Also I think it's very debatable that memory corruption is the "#1 cause" when so many prominent hacks lately have been due to social engineering.
Yes I know memory corruption is still common and abused a lot, I just don't think it's fair to say it's #1
Its not unhackable, but if i understood the feature correctly, then it will be a pain in the ass for hackers to get around if it becomes widely used. Also the thing is, we cant really fight against social engineering. People will always keep clicking on links and will always post everything they can about their life online, so we cant do much about that. I would guess aside from social engineering, memory corruption has got to be one of the top 3 at least
If most hacks are done with social engineering, then wouldn't that make Windows just as secure as Linux?
@@SergeantExtremeno for a few reasons
- microsoft goes out of its way to make its users tech-illiterate
- windows loves showing dialogs all the time that people will learn to click away without reading (nothing to do with linux vs dos, but the de and the culture should be considered too)
- windows encourages running as admin, which most linux distros don't
- windows comes with lots of juicy telemetry data ready for the successful attacker (recall is a particularly egregious example), which most linux distros don't collect
Linux is just as easy to leave a port open, windows automatically handles a lot of measures automatically whereas with Linux you have the sole responsibility of securing and ensuring good security practices
@@yjlom 1. I could argue the same about Linux. A great example is the push to force users to download and install software only from "stores". When I complained about this in the distro forums, I was told that installing software from outside of stores was a "power user" move, and it's something a regular person shouldn't be doing. You can't get more tech illiterate than that.
2. Windows doesn't encourage running as admin with the exception of highly specialized software such as anti-virus, data recovery software, and driver software.
3. I don't necessarily agree that Windows shows a lot of dialogs. For the most part, pop ups only occur if something goes wrong. This is especially true in this day and age.
4. Although, I do agree with your point on telemetry.
@LowLevelTV whick keyboard you use? It's sounds so thocky !
Not a mechanical keyboard
Wow, that title is some serious grade-A click bait!! Nice job!
not only you can put the buffer size with scanf via the string formatter, the compiler is smart enough to detect if the size provided to scanf is too big
1:01 No, Chromium is *NOT* the basis for all the browsers on the internet. For most, sadly, it is, but not all. Firefox and Safari still have their own rendering engine.
Just a thought: it might be possible to make stack-smashing attacks impossible by a simple ABI change.
The stack is already handled with 2 registers: RSP and RBP (stack pointer and base pointer) which frame the memory used for a function calls local variables with register saves and call return addresses. They could be used a little differently: use the stack pointer in the usual way for storing call return addresses and saving registers, but have the base pointer point at an entirely separate memory area, a second stack used only for functions local variables. Use RSP in the usual way with push/pop call/ret, and manage RBP by subtracting the required memory for the function, then adding it back before return (or alternatively push/popping it with the other callee-saved registers).
There may still be other memory corruption attack vectors possible, but overwriting a return address to get arbitrary code execution isn't one of them.
A global implementation would require the OS to provide the 2 extensible stack areas, and debuggers would need to be rewritten to handle the different method of call-stack unwinding, but all in all not a huge change. And it wouldn't even be required to have a compliant OS: a software creator could implement the different ABI within their own program, by just allocating an alternate stack space and using it as described: it would just need a compiler option to use the alternate stacking method.
Finally a youtube ad for a genuine good product.
Why would I ever want to turn the X bit back on a memory region I've declared NX? Like, what's the use case here? Honestly it might just be easier to run a hardened kernel that just disallows that by default.
I think it done, it better to learn a new field other than cyber security.
I think you need to learn more about cyber security and Penetration testing
@@ijames-bond007 lol
@cybertrojan especially considering that his mother knows a lot about penetration testing already.
Nice feature to have, yet of course it needs adoption in software.
Would be nice to see a video on Seccomp, which has been around in Linux longer (introduced in Linux 2.6.12 back in 2005) and does have good adoption.
The V8 Engine...
why does the V8 need so much sandboxing ? why can't them fix their JIT compiler not to generate insecure code like the JVM does ?
@@monad_tcp probably because no one runs actively malicious code on the jvm? v8 needs to be protected against everything
@@monad_tcpJVM is not secure at all. Remember log4j? It is not used as much as V8 not even close.
Early web days of arbitrary code injection and execuction from pc to pc is the reason
lol gotta make sure those XmlHttpRequests you arbitrarily let any domain make are secure
If GETS is so vulnerable, why isn't that command disabled by default, so only people running ancient code that requires GETS will have it enabled by manual user intervention in the kernel settings?
Is it like... memory safety for C? Nooo....
There was a time when computing resources were so scarce that memory that was both writable and executable was a feature. "Self-Modifying code" as it was called back then was always black magic, but it could do amazing things. It's obvious though that in the modern world we live in security is way more important than this level of code optimization and I'm glad to see it finally fall by the wayside.
Yes, self modifying code was also used by some programs as an elaborate anti-copying technique
I seem to remember something called 'Magic Pencil' but it was a long time ago and my memory is probably wrong
We shouldn't protect ourselves so as to disable some ways of coding. Self modifying code could be a good idea too sometimes. Issue is actually having functions that are not checked for external input - otherwise you would not be able to exploit this out of the program.
Oh, linux caught up to what openBSD has had for 14 years now. Cool. but it being on linux means it's a trash security feature that's going to be forgotten about in 3 years
BSD had a first version this from 2022. Linux made its own version in 2023 with some extra features. After a year, changes on both systems end up being very similar solutions.
(THat's not 14 years)
@@framegrace1 OpenBSD introduced write-or-execute (W^X) about 2002. procmap -a will show what flags a process has on what regions.
It's not *exactly* what has been in OpenBSD for yonks, but I'd bet the idea comes from OpenBSD's work, it was implemented there first. What is really galling is the Power architecture has stuff like access ordering (PROT_SAO) since kernel 2.6 that Intel/AMD world still without AFAIK.
If CPUs just had an separate stack hardneded to oblivion..
- Push a return address, the address vanishes into a black hole and can't be later modified or inspected by user-space. The pushed address could be checked that is it in a r-x page or you would get a segfault.
- Pop-and-jump: get a return address, the address is pulled from a magical CPU register.
Linus is right. This is going to cause major unnecessary issues.
please tell me the name of your keyboard... and great explanation btw !
Oh, wow. Thanks for this take! Really fun!
That's nothing. Starting with Windows 10, Microsoft made hacking completely obsolete by integrating spyware directly into the operating system rather than forcing black hat hackers from adding it later.
I think you mentioned the right point at the end... if it's a software implemented feature, then it's just a matter of time (unfortunately not much I guess), that it will be bypassed.
when I was in gradeschool, I'd connect a bunch of those markers together by using the cap connection thing that you mentioned in the video and make a "sword."
obviously when I hit something, it all shattered, but it was very fun :3
I enjoyed writing self-modifying machine code back in the days.
Ok, i give up! This episode made me a subscriber. Keep going!
awesome primer on memory corruption! ❤
If I had to make a bold prediction for the future, it will introduce more unexpected vulnerabilities than it fixes expected ones
0:39 I suspect "the number one way that hackers get into your computer" has not been through memory corruption bugs for many years. Nowadays exploiting users is much easier and probably far more common: phishing, installing from dubious sources, social engineering...
I don't program in assembly, but I absolutely understand how buffer overflows into arbitrary code execution work, having watched numerous videos on glitchy speedruns where the pointer you jump to is the address defined by the position of a Koopa shell.
Here is a curious challenge i don't see people commenting on, try making a "vulnerable C program" that compiles using security features of Clang or GCC.
OpenBSD users rise 🍷🗿
Firefox: *exists*
LowLevel: I'm about to end this man's whole career
I have a note, half of the video is taken for explaining the basic idea of binary exploitation not a lot of time was taken in explaining the mseal syscall more in depth, plus the clear clickbait “make hacking impossible”.