Умные товарищи уже ответили, спасибо им, я только добавлю пять копеек, что через TTF взламывают уже очень давно именно из-за его встроенного интерпретатора. Кажется в 2015 был баг, которым вначале взламывали браузер подгружаемым шрифтом, а потом из песочницы браузера, тем же самым багом выполняли код в ядре, ибо в то время win32k.sys обрабатывал графику и рендерил шрифты из ядра.
Это просто очень удобно для атакующих, им не нужно weird machine изобретать, у них сразу есть интерпретатор. JavaScript ломают бесконечно, по той же самой причине.
Да все так, вы абсолютно правы, приложение должно быть даже не слинковано, а скомпилировано с -fPIE (у вас в Windows это /DYNAMICBASE у линкера), что бы его рантайм-линкер мог загрузить по любому адресу.
Статья задумывалась научно-популярной, пересказ же сотни аббревиатур кого угодно загонит в сон.
К тому же по многим из них, если углубляться в детали, можно по отдельной статье написать. Те же нюансы реализации ASLR: что библиотеки друг относительно друга не рандомизируются, а только общая база, что в Windows библиотеки рандомизируются один раз при загрузке lol, что fork() на корню убивает смысл ASLR (привет Android), а так же что рандомизировать можно не только библиотеки, но и объектники/функции, да и структуры. Ну и Kernel ASLR просто беспомощен для любого сайдченела.
Умные товарищи уже ответили, спасибо им, я только добавлю пять копеек, что через TTF взламывают уже очень давно именно из-за его встроенного интерпретатора. Кажется в 2015 был баг, которым вначале взламывали браузер подгружаемым шрифтом, а потом из песочницы браузера, тем же самым багом выполняли код в ядре, ибо в то время win32k.sys обрабатывал графику и рендерил шрифты из ядра.
Это просто очень удобно для атакующих, им не нужно weird machine изобретать, у них сразу есть интерпретатор. JavaScript ломают бесконечно, по той же самой причине.
Ну а вместо 1000 слов про TTF, на нем запустили Doom:
https://github.com/4RH1T3CT0R7/ttf-doom
https://4rh1t3ct0r7.github.io/ttf-doom/
Да все так, вы абсолютно правы, приложение должно быть даже не слинковано, а скомпилировано с -fPIE (у вас в Windows это /DYNAMICBASE у линкера), что бы его рантайм-линкер мог загрузить по любому адресу.
Статья задумывалась научно-популярной, пересказ же сотни аббревиатур кого угодно загонит в сон.
К тому же по многим из них, если углубляться в детали, можно по отдельной статье написать. Те же нюансы реализации ASLR: что библиотеки друг относительно друга не рандомизируются, а только общая база, что в Windows библиотеки рандомизируются один раз при загрузке lol, что fork() на корню убивает смысл ASLR (привет Android), а так же что рандомизировать можно не только библиотеки, но и объектники/функции, да и структуры. Ну и Kernel ASLR просто беспомощен для любого сайдченела.