Pull to refresh
12
0
Сергей Гридасов @grindars

User

Send message
Имя библиотеки тут исключительно для создания уникального имени в пределах процесса. ld.so ищет файл в первую очередь по абсолютному пути, так что он сразу натыкается на псевдофайл и не грузит ничего с диска.
Многие коммерческие программы под линукс таскают с собой заведомо рабочие копии библиотек, чтобы такого не было.
Вот про дамп-то я и не подумал. Значит, подумаю в сторону чего-нибудь SaaS-подобного.
Если вы знаете, как она должна выглядеть и где она — ничего. Абсолютной защиты не бывает, любая защита отсекает людей ниже определенного уровня.
Именно поэтому нужен дополнительный контроль целостности основного эльфа, что я и написал в комментарии выше.
А вообще, самый красивый способ сделать это — написать свой ELF-загрузчик. Это не особо сложно и не зависит от внутренностей системы, но зависит от платформы. Но мне нужен был именно загрузчик в ld.so.
Да, для защиты от копирования. В ответе на комментарий выше я расписал подробнее.
Запускаем программу под отладчиком, ставим бряк на open. Снимаем флаг блокировки. Ставим бряк на dlopen. Продолжаем выполнение. Меняем файл, как угодно. Продолжаем выполнение. Непроверенный код успешно загружен. Это можно даже скриптом gdb автоматизировать. Так что нет, нельзя.
А кто мешает эту самую дату изменить на любую другую? И проверить после загрузки нельзя, о чем я и написал в статье: еще до возврата из dlopen вызываются конструкторы, которые могут делать, что угодно. Например, конструктором можно пропатчить проверку, чтобы плагин прошел проверку и нормально загрузился.
Здесь моей целью было защитить программу от несанкционированного копирования и снятия ограничений, а не от подмены кода вредоносной программой. Да, я не доверяю руту. Насчет «о безопасности можно забыть»… в чем-то вы правы. Обеспечить проверку доверенности всего выполняемого кода достаточно сложно.

Для загрузки постороннего кода в приложение в линуксе есть как минимум следующие пути:
1. Банальный LD_PRELOAD. От него можно защититься, модифицировав загрузчик.
2. Подмена системных библиотек. Слинковать с библиотеками в рантайме, перед загрузкой проверяя подпись собственных копий библиотек.
3. ptrace. В качестве побочного эффекта этот код препятствует отладке, но этого недостаточно.
4. Запись через /dev/mem или /proc/../mem. От этого не защититься, поэтому надо контролировать целостность образа достаточно хитрым образом.
5. Патч исполняемого файла на диске. Контроль такой же, как в случае 4.
5. Экзотические варианты типа ядерного модуля. Ну тут уже делать нечего.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity