GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menguji apakah biner Linux dikompilasi sebagai kode independen posisi?

Anda dapat menggunakan perl skrip yang terdapat dalam hardening-check paket, tersedia di Fedora dan Debian (sebagai hardening-includes ). Baca halaman wiki Debian ini untuk perincian tentang flag kompilasi apa yang diperiksa. Ini khusus untuk Debian, tetapi teorinya juga berlaku untuk Red Hat.

Contoh:

$ 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

Cukup gunakan file pada biner:

$ 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

Perhatikan jenis berbeda yang dicetak setelah informasi LSB.


Saya menggunakan readelf --relocs untuk menguji apakah perpustakaan statis atau dinamis adalah PIC di x86-64 dengan cara berikut:

$ 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

Kita lihat di sini R_X86_64_32 dan R_X86_64_32S . Ini berarti bahwa kode tersebut tidak berdiri sendiri. Ketika saya membangun kembali perpustakaan dengan -fPIC saya mendapatkan:

$ 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

Metode ini mungkin bekerja untuk executable, tapi saya belum pernah menggunakannya.


Linux
  1. Bagaimana Linux membuat sekolah siap menghadapi pandemi

  2. Bagaimana belajar Linux adalah bahasa cinta kita

  3. Bagaimana saya membuang OS lama saya dan beralih ke Linux

  1. Cara Menguji Kecepatan Pemuatan Situs Web di Linux

  2. Cara Menguji Paket Tanpa Menginstalnya Di Linux

  3. Cara Mengurutkan File di Linux menggunakan Perintah Sortir

  1. Bagaimana Anda memulai Linux?

  2. Bagaimana cara membongkar biner yang dapat dieksekusi di Linux untuk mendapatkan kode perakitan?

  3. Bagaimana cara mengidentifikasi apakah komputer Linux saya diretas?