Есть ли способ отключить использование vsyscalls / vDSO для одного процесса или, если это невозможно, для всей операционной системы?
Оказывается, есть IS способ эффективно отключить связывание vDSO для одного процесса без его отключения в масштабе всей системы с помощью ptrace
!
Все, что вам нужно сделать, это остановить отслеживаемый процесс до его возврата из execve
и удалить запись AT_SYSINFO_EHDR
из вспомогательного вектора (который идет непосредственно после переменных среды в области памяти, указанной в rsp
) , PTRACE_EVENT_EXEC
хорошее место для этого.
AT_SYSINFO_EHDR
- это то, что ядро использует, чтобы сообщить системному компоновщику, где vDSO отображается в адресном пространстве процесса. Если эта запись отсутствует, ld
, похоже, действует так, как если бы система не отображала vDSO.
Обратите внимание, что это каким-то образом не отображает vDSO из памяти ваших процессов, оно просто игнорирует его при связывании других общих библиотек. Вредоносная программа все равно сможет взаимодействовать с ней, если автор этого действительно хотел.
Я знаю, что этот ответ немного запоздал, но я надеюсь, что эта информация избавит какую-то бедную душу от головной боли