一、Checksec 簡介
Checksec 是一個非常實用的 Linux 命令行工具。它可以顯示 ELF 可執行文件的各種安全特性,例如執行時的內存保護設置,如 ASLR、 NX、 PIE 等等。
使用 Checksec 工具可以快速地檢查一個 ELF 文件的安全性。對於二進制安全研究人員、逆向工程師和開發人員來說,這個工具可以為他們提供非常有用的信息。
二、Checksec 的安裝和使用
在 Ubuntu 和 Debian 系統中,可以通過以下命令安裝 Checksec:
sudo apt-get install checksec
安裝完畢後,就可以使用 Checksec 命令來檢查 ELF 文件的安全特性。
下面是一個使用 Checksec 命令檢查文件安全特性的示例:
checksec filename
其中,filename 是要檢查的二進制文件的名稱。執行命令後,將會輸出一個表格,顯示該文件的各項安全特性。
例如,下面是一個示例輸出:
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 33 Symbols
輸出內容包含了 ELF 文件的 RELRO、堆棧保護、不可執行內存(NX)等特性的信息。通常,對於一個良好設計的 ELF 文件,這些特性應該都是開啟的。
三、Checksec 的功能說明
1. RELRO
RELRO 是可執行文件中一個常見的保護特性。它的全稱是 Relocation Read-Only(重定位只讀),它的作用是防止針對 GOT 表的攻擊。
RELRO 可以分為三種級別:
- Partial RELRO(部分 RELRO):在 program 的初始化階段,只有 GOT 表中未被初始化的部分被保護起來。如果一個地址被初始化後,那麼它就成為了漏洞的可能入口。
- Full RELRO(完全 RELRO):在 program 的初始化階段,GOT 表所有項都被標記為只讀。這樣一來,攻擊者就無法改變 GOT 表中的地址來實現攻擊。
- Canary RELRO:這是 Full RELRO 的升級版,它還增加了內存區域的隨機化,提高了安全性。
2. 堆棧保護
堆棧保護是一種通過檢查函數返回地址是否被修改的技術。在執行函數時,函數返回地址會被壓入棧中。堆棧保護插入了一個被稱為“堆棧守衛”的隨機值到返回地址之前,防止它被篡改。
如果堆棧保護是開啟的,Checksec 將會顯示“Canary found”。
3. 不可執行內存(NX)
NX 是可執行文件中的一項重要安全特性,它通過將某些內存區域標記為不可執行來防止緩衝區溢出等攻擊。
如果 NX 是開啟的,Checksec 將會顯示“NX enabled”。
4. 在常量區中隨機化內存位置(PIE)
PIE(Position Independent Executables)是在程序執行時將程序和依賴的庫加載到內存中並且將其具體位位置放置在隨機的內存地址中。這樣,攻擊者想要利用已知的內存位置來執行攻擊時就很難了。
PIE 是增加安全性的有力手段。如果開啟了 PIE,Checksec 將會顯示“PIE enabled”。
四、小結
通過 Checksec 工具,我們可以快速地檢查 ELF 文件的安全性,了解其中各項安全特性的開關情況。對於二進制安全研究人員來說,這個工具是非常有用的。
通過本文的講解,我們詳細介紹了 Checksec 的安裝和使用方法,對 RELRO、堆棧保護、不可執行內存和內存位置隨機化等各種安全特性進行了說明。相信讀者可以通過使用 Checksec 更好地了解 ELF 文件的安全性。
原創文章,作者:GFKTR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/334567.html