Комментарии 9
Я бы искал во внутренних структурах ld-linux*.
Собственно, именно он и занимается обработкой LD_PRELOAD и аналогичной фигни.
Поэтому факт загрузки по LD_PRELOAD чего-то оставит в нем следы.
Собственно, именно он и занимается обработкой LD_PRELOAD и аналогичной фигни.
Поэтому факт загрузки по LD_PRELOAD чего-то оставит в нем следы.
+1
Спасибо за труд! Статья впечатляющая, чем дальше читал — тем сильнее она будоражила воображение.
Но всё-же, выглядит как вечная борьба меча и щита. Не хватает резюме — есть ли универсальное гарантированное не-заменяемое хаками обнаружение LD_PRELOAD
? Если нет, то почему?
+4
Нет, универсальных методов не бывает, ну кроме разве что статической линковки ключевых функций, что мешает переносимости кода.
И причина этому — сам механизм динамической линковки. Мы имеем возможность в юзерспейсе динамически использовать функционал другой программы. И это положительно сказывается на переносимости нашей программы. Мы даём возможность окружению самому сообщить нам, откуда можно дёрнуть какой-нибудь open() или rand(). Если завтра найдут баг в open() и выпустят патч, то нашу программу не надо будет пересобирать, она даже не узнает, что open() изменили. Но в этой инкапсуляции есть и беда: если это будет не патч безопасности, а злонамеренные изменения, то наша программа ровно так же не заметит этих изменений. Мы не можем заранее отличить плохие изменения от хороших.
И причина этому — сам механизм динамической линковки. Мы имеем возможность в юзерспейсе динамически использовать функционал другой программы. И это положительно сказывается на переносимости нашей программы. Мы даём возможность окружению самому сообщить нам, откуда можно дёрнуть какой-нибудь open() или rand(). Если завтра найдут баг в open() и выпустят патч, то нашу программу не надо будет пересобирать, она даже не узнает, что open() изменили. Но в этой инкапсуляции есть и беда: если это будет не патч безопасности, а злонамеренные изменения, то наша программа ровно так же не заметит этих изменений. Мы не можем заранее отличить плохие изменения от хороших.
+5
Если найдут баг в open() — то можно вешать ласты на гвоздь.
+2
Если машина, на которой запускается программа, контролируется атакующим, он может внести изменения в libc, или даже в kernel, перекомпилировать, и добиться изменения поведения без каких-либо LD_PRELOAD.
0
А теперь то же самое на Солярисе, БэЭсДэ...
+2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
В поисках LD_PRELOAD