Проверьте, скомпилирован ли бинарный файл 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 
  • Ход взлома, процесс выполняется под пользователем apache
  • Должен ли я запускать демон NTP на моем персональном компьютере для дополнительной безопасности?
  • Могу ли я доверять изображениям initramfs и vmlinuz?
  • Грязный COW эксплоит CVE-2016-5195
  • как записывать всех, кто входит в мои Linux-машины, и записывать их
  • Пересмотр пользователей, у которых установлены настройки по умолчанию / bin / bash
  • Как зашифровать мою систему, чтобы приостановить работу в ОЗУ, а также зашифровать
  • Является ли мой Linux-ящик уязвимым для атак Shell-Shock? Как я могу это исправить?
  • Как предотвратить процесс записи файлов
  • Является ли Vim иммунным для атаки с копией-пастой?
  • Как отслеживать имена загруженных файлов на серверах Linux?
  • Interesting Posts

    извлечение определенной информации с вывода

    Установка клиента PostgreSQL (psql) только на CentOS

    Два разных / etc / hosts в зависимости от времени

    Как я могу заглушить аудиоинтерфейс в гнезде?

    Есть ли способ обмена между рабочими пространствами одним ключом?

    Повторите задачу с помощью команды «at» каждый день в 6 вечера

    Как отправлять SMS-сообщения с мобильного телефона или маршрутизатора? (Linux / Textmode)

    Сохранять соотношение экрана при максимальном использовании mplayer

    Нужны ли мне модули pata_atiixp или ata_generic ядра в системе SATA?

    Преобразовать mysql count (*) в int в bash?

    Есть ли инструмент, который может контролировать использование полосы пропускания для одного процесса?

    Как я могу эффективно очистить установленный вручную пакет?

    Проблема с форматированием даты «sed»

    нечувствительный к регистру sed – OpenWrt

    Asus G752VS, GTX 1070 – аудиоустройство PCI-e (вторая функция) отсутствует

    Linux и Unix - лучшая ОС в мире.