Как стать автором
Обновить
12
0
Сергей Гридасов @grindars

Пользователь

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

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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность