The bug was found by Sean Dillon, senior security researcher at RiskSense, who with his colleague Zach Harding made the presentation at DEFCON, according to Threat Post.
Microsoft said it would not patch the flaw, which has been given the name SMBloris. A remote attacker can use it to take down a Windows server using about 20 lines of Python code and a Raspberry Pi.
The name of the flaw is a play on Slowloris, an attack developed in 2009 by researchers Robert Hansen. The difference is that Slowloris targets Web servers.
|
“Similar to Slowloris, it requires opening many connections to the server, but these are low-cost connections for the attacker, so a single machine is able to perform the attack,” he was quoted as saying.
“While working on ETERNALBLUE, we observed a pattern in the way memory allocations were done on the non-paged pool of the Windows kernel. The non-paged pool is memory that has to be reserved in physical RAM; it can’t be swapped out.
“That’s the most precious pool of memory on the system. We figured out how to exhaust that pool, even on servers that are very beefy, even 128 GB of memory. We can take that down with a Raspberry Pi.”
Dillon and Harding informed Microsoft about the issue in early June, but were told that the company's internal security teams had concluded that the the flaw was an issue of moderate severity and was unlikely to be fixed.
The two researchers gave their talk at DEFCON on Saturday, 60 days after sending the initial report to Microsoft and 45 days after the company responded.
Dillon told Threat Post that fixing the bug would probably be a difficult task.
“I think that’s the problem is that it’s not the easiest fix; it’s the way they’ve done SMB memory allocation for over 20 years. So everything relies on the fact the client says ‘I have a buffer that I’m sending that’s this big. The server reserves that much memory so it can handle it,” he said.
“What we did we say I have a huge buffer and never send the buffer. There’s still a lot of components that rely on the fact that buffer is already allocated and the size is already known.”