Linux nx merujuk kepada "No-eXecute", yang merupakan mekanisme perlindungan dalam Linux, iaitu, data tidak boleh laku untuk menghalang kod shell penyerang daripada cuba melaksanakan dalam kawasan data akibat limpahan semasa program keadaan operasi.
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
Apakah itu linux nx?
Beberapa mekanisme perlindungan yang biasa digunakan oleh program Linux
NX: No-eXecute, <.>DEP: Pencegahan Laksana Data
gcc -o test test.c // 默认情况下,开启NX保护 gcc -z execstack -o test test.c // 禁用NX保护 gcc -z noexecstack -o test test.c // 开启NX保护
PI: Kedudukan-. Boleh Diekstrak Bebas, ASLR: Rawak Susun Letak Ruang Alamat
-pie
-fpic Generate position-independent code (PIC) suitable for use in a shared library, if supported for the target machine. Such code accesses all constant addresses through a global offset table (GOT). The dynamic loader resolves the GOT entries when the program starts (the dynamic loader is not part of GCC; it is part of the operating system). If the GOT size for the linked executable exceeds a machine-specific maximum size, you get an error message from the linker indicating that -fpic does not work; in that case, recompile with -fPIC instead. (These maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k and RS/6000. The x86 has no such limit.) Position-independent code requires special support, and therefore works only on certain machines. For the x86, GCC supports PIC for System V but not for the Sun 386i. Code generated for the IBM RS/6000 is always position-independent. When this flag is set, the macros `__pic__` and `__PIC__` are defined to 1. -fPIC If supported for the target machine, emit position-independent code, suitable for dynamic linking and avoiding any limit on the size of the global offset table.This option makes a difference on AArch64, m68k, PowerPC and SPARC. Position-independent code requires special support, and therefore works only on certain machines. When this flag is set, the macros `__pic__` and `__PIC__` are defined to 2. -fpie -fPIE These options are similar to -fpic and -fPIC, but the generated position-independent code can be only linked into executables. Usually these options are used to compile code that will be linked using the -pie GCC option. -fpie and -fPIE both define the macros `__pie__` and `__PIE__`. The macros have the value 1 for `-fpie` and 2 for `-fPIE`.
gcc -fpie -pie -o test test.c // 开启PIE gcc -fPIE -pie -o test test.c // 开启PIE gcc -fpic -o test test.c // 开启PIC gcc -fPIC -o test test.c // 开启PIC gcc -no-pie -o test test.c // 关闭PIE
/proc/sys/kernel/randomize_va_space
0 - bermaksud mematikan proses rawak ruang alamat.1 - bermaksud mengacak alamat asas halaman mmap, tindanan dan vdso.
2 - bermakna meningkatkan rawak timbunan (timbunan) berdasarkan 1. (Lalai)
Tukar kaedah nilainya: echo 0 > /proc/sys/kernel/randomize_va_spacevDSO: objek kongsi dinamik maya; >mmap: pemetaan ingatan.
bertanggungjawab untuk rawak alamat asas program boleh laku.
Yang berikut diambil daripada Wiki: PIE
PIE ialah sebahagian daripada ASLR, ASLR ialah fungsi sistem dan PIE ialah pilihan kompilasi.
Nota:
Apabila memperuntukkan timbunan, terdapat dua cara: dan , yang dipanggil apabila mmap()
memperuntukkan memori Apabila peruntukan kecil, brk, jika tidak mmap, 128k perbezaan. brk()
malloc()
3. Canary (Perlindungan Tindanan)
gcc -o test test.c //默认关闭 gcc -fno-stack-protector -o test test.c //禁用栈保护 gcc -fstack-protector -o test test.c //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码 gcc -fstack-protector-all -o test test.c //启用堆栈保护,为所有函数插入保护代码
. RELRO separa didayakan secara lalai dalam Linux. ”Partial RELRO“
”Full RELRO“
Arahan kompilasi:
gcc -z norelro -o a a.c // RELRO dimatikan, iaitu Tiada RELRO
Nota:
Atas ialah kandungan terperinci apa itu linux nx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!