GNU/Linux >> Linux の 問題 >  >> Linux

Linux バイナリが位置に依存しないコードとしてコンパイルされているかどうかをテストする方法は?

perl を使用できます hardening-check に含まれるスクリプト Fedora と Debian で利用可能なパッケージ (hardening-includes として) )。チェックされるコンパイル フラグの詳細については、この Debian wiki ページを参照してください。これは 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

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

LSB 情報の後に異なるタイプが出力されていることに注意してください。


readelf --relocs を使用しました 次の方法で、x86-64 で静的ライブラリまたは動的ライブラリが PIC であるかどうかをテストします。

$ 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

この方法はおそらく実行可能ファイルで機能する可能性がありますが、私はそのように使用したことはありません.


Linux
  1. Linuxにインストールせずにパッケージをテストする方法

  2. Linux –ブロックデバイスが/sysまたは/procから読み取り専用かどうかをテストする方法は?

  3. Sort コマンドを使用して Linux でファイルをソートする方法

  1. Linuxがどのようにして学校をパンデミック対応にしたか

  2. Linux でバイナリ実行可能ファイルを逆アセンブルしてアセンブリ コードを取得する方法は?

  3. Linux コンピューターがハッキングされたかどうかを確認する方法は?

  1. Linuxを学ぶことは私たちの愛を伝える方法です

  2. LinuxにAnsibleをインストールしてテストする方法

  3. Linux – Linuxバイナリが位置独立コードとしてコンパイルされたかどうかをテストする方法は?