As long as humans are writing software, there will be coding mistakes for malicious hackers to exploit. A single bug can open the door to attackers deleting files, copying credit card numbers or carrying out political mischief.
A new program called Shuffler [pdf] tries to preempt such attacks by allowing programs to continuously scramble their code as they run, effectively closing the window of opportunity for an attack. The technique is described in a study [pdf] presented this month at the USENIX Symposium on Operating Systems and Design (OSDI) in Savannah, Ga.
“Shuffler makes it nearly impossible to turn a bug into a functioning attack, defending software developers from their mistakes,” said the study’s lead author, David Williams-King, a graduate student at Columbia Engineering. “Attackers are unable to figure out the program’s layout if the code keeps changing.”
[...] Designed to be user-friendly, Shuffler runs alongside the code it defends, without modifications to program compilers or the computer's operating system. It even randomizes itself to defend against possible bugs in its own code.
The researchers say Shuffler runs faster and requires fewer system changes than similar continuous-randomization software such TASR [pdf] and Remix [pdf], developed at MIT Lincoln Labs and Florida State University respectively.
[...] On computation-heavy workloads, Shuffler slows programs by 15 percent on average, but at larger scales -- a webserver running on 12 CPU cores, for example -- the drop in performance is negligible, the researchers say
[Security through obscurity? --Bytram]
(Score: 3, Insightful) by Pino P on Wednesday January 04 2017, @03:40AM
Why are you so interested in focusing on the places where it is not practical?
Because one of my jobs involves developing software for the devices that customers have, not the devices I wish they had. Thus I must squeeze software into a very small amount of memory.
technologies that would make it more practical, like memory dedupe
The objection is that Shuffler makes memory dedupe ineffective.