Проверьте, скомпилирован ли бинарный файл Linux как независимый от позиции код

Недавно я узнал, что (по крайней мере, в Fedora и Red Hat Enterprise Linux) исполняемые программы, которые скомпилированы как независимые от позиции (PIE), получают более высокую защиту от рандомизации в адресном пространстве (ASLR).

Итак: Как проверить, был ли конкретный исполняемый файл скомпилирован как независимый от позиции, в Linux?

3 Solutions collect form web for “Проверьте, скомпилирован ли бинарный файл Linux как независимый от позиции код”

Вы можете использовать скрипт perl содержащийся в пакете hardening-check , доступный в Fedora и Debian (в качестве hardening-includes ). Ознакомьтесь с этой вики-страницей Debian для получения подробной информации о том, какие флажки компиляции проверены. Это особенность Debian, но теория относится и к Red Hat.

Пример:

 $ hardening-check $(which sshd) /usr/sbin/sshd: Position Independent Executable: yes Stack protected: yes Fortify Source functions: yes (some protected functions found) Read-only relocations: yes Immediate binding: yes 

Я использовал readelf --relocs чтобы проверить, является ли статическая или динамическая библиотека PIC на x86-64 следующим образом:

 $ readelf --relocs /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a |\ awk '$3~/^R_/ && $5!~/^\.debug/{print $3}' |sort -u R_X86_64_32 R_X86_64_32S R_X86_64_64 R_X86_64_DTPOFF32 R_X86_64_GOTPCREL R_X86_64_PC32 R_X86_64_PLT32 R_X86_64_TLSLD R_X86_64_TPOFF32 

Мы видим здесь R_X86_64_32 и R_X86_64_32S . Это означает, что код не зависит от положения. Когда я перестраиваю библиотеку с -fPIC, я получаю:

 $ readelf --relocs libstdc++.a |\ awk '$3~/^R_/ && $5!~/^\.debug/{print $3}' |sort -u R_X86_64_64 R_X86_64_DTPOFF32 R_X86_64_GOTPCREL R_X86_64_PC32 R_X86_64_PLT32 R_X86_64_TLSGD R_X86_64_TLSLD 

Возможно, этот метод работает для исполняемых файлов, но я не использовал его таким образом.

Просто используйте file в двоичном формате:

 $ file ./pie-off ./pie-off: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=0dc3858e9f0334060bfebcbe3e854909191d8bdc, not stripped $ file ./pie-on ./pie-on: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=962235df5bd188e1ec48c151ff61b6435d395f89, not stripped 
  • Каковы недостатки использования policy_any в openssl.cnf?
  • Shell Script - как scp на удаленный сервер и загружать файлы и защищать пароль
  • Ошибка при создании libxcrypt
  • Обнаружение эскалации привилегий?
  • Я столкнулся с огромной атакой слоя 7 на порт 3306, может ли кто-нибудь мне помочь?
  • В каких сценариях я хочу установить бит SUID?
  • Может ли кто-нибудь привести пример, почему я хотел бы вызвать панику ядра с помощью auditd?
  • Почему способность определять функции в переменной окружающей среды не является угрозой безопасности сама по себе?
  • Как обновить все пакеты Debian из исходного кода?
  • Нужно ли инкапсулировать переменные awk в кавычки для их дезинфекции?
  • Как я могу настроить SELinux, когда команда semanage не найдена?
  • Linux и Unix - лучшая ОС в мире.