TWI856881B - 可執行檔與共享庫之保護方法及保護系統 - Google Patents
可執行檔與共享庫之保護方法及保護系統 Download PDFInfo
- Publication number
- TWI856881B TWI856881B TW112144797A TW112144797A TWI856881B TW I856881 B TWI856881 B TW I856881B TW 112144797 A TW112144797 A TW 112144797A TW 112144797 A TW112144797 A TW 112144797A TW I856881 B TWI856881 B TW I856881B
- Authority
- TW
- Taiwan
- Prior art keywords
- executable file
- page
- file
- encrypted
- protection method
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/554—Detecting local intrusion or implementing counter-measures involving event detection and direct action
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1416—Event detection, e.g. attack signature detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computing Systems (AREA)
- Storage Device Security (AREA)
Abstract
一種可執行檔與共享庫之保護方法及保護系統,係將可執行檔與共享庫之部分內容加密,於執行該等可執行檔與共享庫時即時解密,且禁止被偵錯的行程執行可執行檔與共享庫中之已被加密的部分內容,以避免攻擊者獲取可執行檔與共享庫中之該部分內容。
Description
本發明係有關可執行檔與共享庫之保護技術,且特別係有關可執行檔(executable file)及共享庫(shared library)之反逆向工程(anti-reverse engineering)及反偵錯(anti-debugging)技術。
電腦可執行的軟體通常包裝成可執行檔或共享庫的形式。對可執行檔或共享庫進行二進制混淆(binary obfuscation)的目的是增加軟體的安全性和防止逆向工程。透過二進制混淆,可以使軟體的執行邏輯更難以理解和分析,使攻擊者難以分析和瞭解程式的內部運作。這可以防止竊取知識產權,並阻礙逆向工程,或使攻擊者難以找出可攻擊的弱點。
目前,代碼重組和指令替換是兩種常見的代碼混淆方法。
代碼重組即重組二進制程式碼的結構,以使其更難以理解。這可以包括改變程式的函數順序、調整程式碼塊的位置、插入無效指令或無用的程式碼片段,以干擾分析人員對程式碼的流程和邏輯的理解。
指令替換即替換原始二進制指令,以使程式的執行路徑和邏輯更加隱晦而難以理解。上述替換可以基於固定的轉換規則或動態生成的規則進行。例如,將二進制指令替換為等效但更複雜的指令序列,或使用相似的指令進行替換,以使程式的行為更難以預測。
這些方法可以與其他混淆技術結合使用,例如指令插入、虛假控制流、無效指令或數據插入等。混合使用多種技術可以增加分析人員理解和解析二進制程式碼的難度,以提高軟體的安全性和抵抗逆向工程的能力。
儘管代碼重組和指令替換是常見的二進制代碼混淆方法,但它們並不能完全阻止攻擊者分析執行中的行程(process),且存在下列缺點:
其一,增加執行時間和效能開銷:混淆技術通常會引入額外的計算和運行時處理,這可能會增加程式的執行時間和效能開銷。例如,代碼重組和指令替換可能導致執行時的額外計算,以恢復原始的程式流程和邏輯,這可能導致性能下降。
其二,增加開發和維護成本:對程式碼進行混淆可能增加開發和維護的複雜性。混淆技術可能需要特殊的工具和流程以處理混淆的程式碼。此外,由於混淆後的程式碼可能難以理解,在開發和維護過程中可能需要更多的勞力和時間。
其三,可逆性:大多數混淆技術是可逆的,這意味著攻擊者能進行逆向工程以還原原始的程式碼。例如,代碼重組和指令替換可以通過相應的反混淆技術進行逆向工程,以恢復原始的程式結構和邏輯。
其四,指標和資料處理困難:一些混淆技術可能會導致指標和資料的處理變得困難。例如,指令替換可能會改變使用指標或操作資料的方式,而使指標和資料的處理更加困難。
其五,不完全的保護:混淆技術可以增加分析和逆向工程的難度,但不能提供絕對的保護。只要經過足夠時間和努力,有經驗的攻擊者仍有可能解碼或還原混淆的程式碼。混淆技術應該作為安全策略的一部分,與其他防禦措施(例如加密、完整性檢查和授權機制)結合使用,以提高軟體的整體安全性。
綜上,目前需要更嚴密的保護技術。
為解決上述問題,本發明提供一種可執行檔與共享庫之保護方法,由一電子裝置之至少一處理器執行於該電子裝置之一作業系統中,該保護方法包括下列步驟:由該電子裝置判斷一第一行程是否正在被偵錯或者是否係一第二可執行檔被執行後所形成者,其中,若該第一行程正在被偵錯,且即將執行一第一可執行檔,且該第一可執行檔已被加密,則拒絕該第一行程執行該第一可執行檔;若該第一行程正在被偵錯,且即將對一共享庫進行記憶體映射,且該共享庫已被加密,則拒絕該第一行程對該共享庫進行該記憶體映射;以及,若該第一行程係該第二可執行檔被執行後所形成者,而該第二可執行檔已被加密,且一第二行程即將對該第一行程進行偵錯,則拒絕該第二行程對該第一行程進行該偵錯。
在一實施例中,在該第一行程已對該共享庫進行該記憶體映射之後,該資料保護方法復包括:若該共享庫已被加密,且該第二行程即將對該第一行程進行偵錯,則拒絕該第二行程對該第一行程進行該偵錯。
本發明另提供一種電腦可讀取儲存媒體,係儲存有複數指令,該等指令由電子裝置讀取以執行上述之保護方法。
本發明又提供一種可執行檔與共享庫之保護系統,包括:一儲存裝置,安裝有一作業系統;以及至少一處理器,用於執行該作業系統,且在該作業系統中執行上述之保護方法。
本發明使用反逆向工程和反偵錯技術保護可執行檔和共享庫,以避免攻擊者經由逆向工程或偵錯而取得可執行檔和共享庫中的解密後的內容。此外,本發明同樣適用對於已經過二進制混淆的可執行檔和共享庫。
11~14,21~24,31~34,41~43,51~58,601~618,71~78:步驟
80:電子裝置
81:處理器
82:記憶體
83:儲存裝置
圖1至圖5為本發明一實施例之保護方法的流程圖。
圖6A、圖6B及圖7為本發明另一實施例之保護方法的流程圖。
圖8為本發明一實施例之保護系統的方塊圖。
以下藉由特定的具體實施例說明本發明之實施方式,在本技術領域具有通常知識者可由本說明書所揭示之內容輕易地瞭解本發明之其他優點及功效。
本發明的保護方法適用於Linux作業系統。在詳述本發明的保護方法之前,先說明以下的Linux作業系統的技術細節,以便理解本發明的保護方法。
可執行檔
可執行檔是一種二進制格式的電腦檔案,包含了編譯後的程式碼和相關的資源,可以直接在電腦上運行。
在軟體開發中,程式碼通常會經過編譯的過程,以將高階語言(如C、C++、Java等)轉換為機器碼,這些機器碼是處理器可以直接執行的二進制指令。編譯過程包括語法檢查、語意分析、代碼生成和最佳化等步驟,最終生成一個或多個可執行檔。
可執行檔的格式和結構可能因作業系統和執行環境而有所不同。例如,在Linux和UNIX作業系統中,常見的可執行檔格式為可執行與可鏈結格式(Executable and Linkable Format,ELF),而在視窗(Windows)作業系統中,常見的可執行檔格式是可移植可執行(Portable Executable,PE)格式。
共享庫
共享庫(shared library)也稱為動態連結庫(Dynamic Link Library,DLL),是一種可被多個可執行檔共享使用的程式庫。它是一種二進制檔案,包含多個可執行檔所需的函式和資源。
常見的共享庫格式包括Linux和UNIX作業系統的ELF格式和Windows作業系統的DLL格式。共享庫可以由開發者提供,也可以由作業系統或第三方提供,並且可以通過連結器(linker)或可執行檔執行時的動態連結使用。
ELF檔案格式
ELF檔案格式廣泛使用於Linux和UNIX作業系統中的可執行檔、共享庫和目標檔案(object file)。它定義了檔案的結構和組織,以便於作業系統中載入、執行和連結程式碼。以下是ELF格式的一些主要組成部分:
ELF檔案標頭(header):ELF檔案標頭位於檔案的開頭,包含了描述整個ELF檔案的重要資訊,例如檔案類型、目標體系結構、進入點位址、段表和旗標(flags)等。
程式段(program segment):程式段定義了可執行檔在記憶體中的佈局。每個程式段描述了可執行檔執行時所需的記憶體區塊,例如代碼段、資料段和堆疊段。每個段有自己的屬性,例如位置、大小、存取權限等。
節表(section table):節表包含所有節的描述和屬性。它提供了對程式段、共享庫、符號表、重定位表和其他資訊的索引和連結。每一節也包含一旗標欄位以標示該節的屬性。
ELF格式具有可擴展性和靈活性,且支援各種類型的目標檔案,包括可執行檔、共享庫、目標檔案和核心轉儲(core dump)檔案。
執行ELF可執行檔
當一個ELF可執行檔被執行時,它需要被映射到虛擬記憶體的虛擬位址空間中,以便處理器能執行其中的指令和存取其中的資料。這個映射過程涉及兩個主要的步驟:頁表映射(page table mapping)和需求分頁(demand paging)。
關於頁表映射:
每個可執行檔被執行時所形成的行程(process)都有自己的虛擬位址空間,該空間通常被劃分為多個頁(page)或段(segment)。每個頁或段的大小通常是固定的,例如4KB。
實體記憶體的實體位址空間被劃分為多個頁框(page frame),與頁或段的大小相同。頁框是實體記憶體中的連續區域,通常大小也是固定的,例如4KB。
頁表(page table)是一個資料結構,用於將虛擬位址空間中的頁映射到實際的頁框。頁表中的每個頁表項(page table entry)對應虛擬位址空間中的一頁。每個頁表項包含有關頁和頁框之間的映射關係的訊息,例如頁框的起始位址和權限等。
當一個ELF可執行檔被載入記憶體時,作業系統將根據ELF檔案的結構和節(section)的訊息創建相應的頁表項,將虛擬位址空間中的頁映射到實際的頁框。藉此,可執行檔的指令和資料就可以通過虛擬位址進行存取。
關於需求分頁:
當一個ELF可執行檔被映射到虛擬位址空間時,並不是所有的頁都被立即載入記憶體中。相反,只有在需要存取特定頁的內容時,該
頁才會被從磁碟等儲存裝置讀取到記憶體中。這種按需求載入的機制稱為需求分頁。
需求分頁通常通過分頁機制實現。當行程被執行到一個尚未載入記憶體的頁時,處理器會觸發一個尋頁錯失(page fault)中斷,作業系統接收到這個中斷後,會負責將該頁從儲存裝置讀取到空閒的頁框中,然後更新頁表項,將該頁的映射指向新的頁框。
需求分頁的好處是節省記憶體空間,因為僅當需要時才載入頁的內容。同時,它還允許更多的可執行檔被載入虛擬位址空間中,這些可執行檔的行程的虛擬位址空間的大小可以超出實際可用的記憶體。
總結起來,當一個ELF可執行檔被執行時,它會被映射到該可執行檔的行程的虛擬位址空間中,這個映射過程涉及頁表映射和需求分頁機制。頁表映射將虛擬位址空間中的頁映射到實際記憶體的頁框,而需求分頁則按需求載入頁的內容到記憶體中,以節省記憶體空間,並允許更多的可執行檔的內容被載入虛擬位址空間。
頁快取
在Linux核心(kernel)中,頁快取(page cache)是一個用於暫存檔案系統中的頁的機制。它提供了一個以頁為基本單位的快取系統,用於加速檔案的讀取和寫入操作。頁快取的主要特點如下:
其一,頁級別的快取:頁快取以頁(大小通常為4KB)為單位進行快取。當一個檔案被讀取時,相關的頁會從硬碟等儲存裝置讀取到頁快取中;而當檔案被寫入時,相關的頁會先暫存在頁快取中,並稍後寫回儲存裝置。
其二,快速讀取:如果檔案中的某個頁已經存在於頁快取中,當需要讀取該頁時,可以直接從頁快取中讀取,而無需存取儲存裝置,從而提高讀取效率。
其三,延遲寫入:當檔案被寫入時,相關的頁首先被寫入頁快取中,而不是立即寫入儲存裝置。這種延遲寫入策略可合併多個分散的寫操作,再一併寫入,從而提高寫入效率。
其四,預取(pre-fetch):頁快取可以根據預測演算法預先讀取檔案中的頁到頁快取中,以提前加載可能需要的頁,從而減少後續讀取操作的延遲。
其五,共享:頁快取是可共享的,即開啟同一檔案的多個行程可以共享頁快取中的同一個頁。這樣可以節省記憶體,並提高檔案的共享和協作效率。
頁快取在Linux中有重要作用,它通過提供以頁為單位的快取機制,加速了檔案的讀取和寫入操作。它不僅提供了高效的讀取能力,還通過延遲寫入和預取等策略而優化寫入性能。通過共享特性,多個行程可以共享頁快取中的頁,以提高檔案共享和協作的效率。
Linux虛擬檔案系統
Linux將檔案系統分為兩層,即虛擬檔案系統(virtual file system,VFS)與實體檔案系統。
Linux作業系統支援多種實體檔案系統,例如常見的ext2,ext3,ext4,xfs,zfs檔案系統等。
虛擬檔案系統屬於Linux核心軟體層,為實作於實體檔案系統之上的軟體抽象層,用於接受檔案系統相關的系統呼叫(system call),且將系統呼叫轉送到實體檔案系統所實作的系統介面。Linux虛擬檔案系統包含索引節點(index node,inode)與目錄項(directory entry,dentry)等重要物件。
Linux的檔案結構
在Linux核心中,檔案結構(struct file)是代表已開啟的檔案的資料結構。在核心中的每一個檔案結構被用於管理一個已開啟的檔案,並儲存有關該檔案的各種訊息。每一個檔案結構至少包括三個指標(pointer),即f_op、f_security及f_inode。
f_op為指向該檔案的檔案操作結構的指標。該檔案操作結構包含與該檔案的各種操作相關的函式(function)的指標,例如讀取、寫入、定位等操作的函式指標。通過f_op指標,Linux核心可以呼叫合適的函式以操作開啟的檔案。
f_security為指向強制存取控制(mandatory access control,MAC)模組所使用的安全本文(security context)的指標。
f_inode為指向該檔案的索引節點的指標。該索引節點包含該檔案的元資料(metadata),例如該檔案的大小與存取權限等。
檔案結構在Linux核心中有關鍵作用,它允許Linux核心追踪並操作檔案的開啟狀態、目前存取位置和權限等訊息。
Linux的工作結構
Linux核心中的工作結構(task_struct)是用於代表行程(process)或執行緒(thread)的資料結構,且用於儲存與行程或執行緒相關的基本訊息和狀態。以下是工作結構的一些用途和功能:
執行緒管理:工作結構用於管理Linux的執行緒。它儲存有關執行緒的狀態、優先級和排程(scheduling)屬性的訊息。它允許核心在執行緒之間進行排程和切換,以確保公平高效的執行。
執行緒標識:工作結構包括行程識別碼(pid)和執行緒組識別碼(tgid)等欄位,用於唯一地標識作業系統中的每個行程或執行緒。這些識別碼用於執行緒管理、以及執行緒間的通信和資源分配。
安全本文:工作結構包括一個指標,指向該工作結構所屬的行程或執行緒的安全本文。該安全本文被Linux安全模組用於記載一些狀態。
ptrace:工作結構包括ptrace欄位,用於記載行程或執行緒的偵錯資訊。
Linux安全模組
Linux安全模組(Linux Security Module,LSM)是Linux核心中用於支援各種電腦安全模型的框架(framework)。Linux安全模組提供強制存取控制(MAC)所需的功能,同時能盡量減少對Linux核心的修改。此框架提供一種可將多種安全檢查掛勾到Linux核心中的機制。
LSM為Linux核心的重要物件(例如工作結構和索引節點)提供了名為安全本文的記憶體區塊,以供各種安全模型的實作可以存放各自的資訊。
實施細節:以下透過實施例說明本發明的保護方法
本發明的保護方法可由電腦、伺服器或網路附接儲存器(network attached storage,NAS)等電子裝置的一或多個處理器執行於該電子裝置的作業系統(例如Linux)中。以下說明本發明的保護方法的實施細節。
以ELF檔案為例,首先,可利用工具程式對ELF檔案中需要保護的一部分內容加密,ELF檔案可為可執行檔或共享庫。加密的範圍通常為存放程式碼的“.text”節或存放字串常值(string literals)的“.strtab”節或“shstrtab”節。
當一個ELF檔案的某個節被加密後,利用該工具程式於節表中該節之旗標欄位設定一個特別的標籤,以標示該節已被加密。
當一個ELF檔案有至少一個節被加密,則利用該工具程式於該ELF檔案的標頭(header)設定另一個特別的標籤,例如可將該標籤設定在該標頭的旗標欄位,以標示該ELF檔案已被加密以及必須用何種方法解密。
圖1至圖3為本發明一實施例之保護方法的流程圖。本發明在作業系統的核心中提供一個MAC模組,用以執行圖1至圖3所示的流程。在一實施例中,該電子裝置係判斷一第一行程是否正在被偵錯或者是否係一第二可執行檔被執行後所形成者,以分別執行圖1至圖3所示的流程。
每當一個執行中的行程(以下稱為目前行程)即將執行一個可執行檔,該MAC模組就會執行圖1的流程。
首先,在步驟11,檢查該可執行檔是否已被加密。若該可執行檔已被加密,則流程進入步驟12,否則流程進入步驟14。
在步驟12,檢查該目前行程是否正在被偵錯(debugging)。若該目前行程正在被偵錯,則流程進入步驟13,否則流程進入步驟14。
在步驟13,拒絕該目前行程執行該可執行檔。由於該可執行檔的內容在執行時會被解密,此拒絕可避免在偵錯過程中洩漏該可執行檔的內容。
在步驟14,允許該目前行程執行該可執行檔。
此外,在步驟14中,該MAC模組可解析該可執行檔的節表,以獲知該可執行檔的加密範圍(有哪些節已被加密),再將該可執行檔的加密範圍記錄於該可執行檔所對應的檔案結構的安全本文內。
再者,在步驟14中,該MAC模組可檢查該可執行檔的檔案結構是否連結到頁快取。若該檔案結構連結到頁快取,則該MAC模組將該可執行檔移出該頁快取,以避免其他行程透過該頁快取而取得該可執行檔的解密後的內容。
在執行一個可執行檔之前,需要將該可執行檔映射至該可執行檔所形成的行程的虛擬位址空間中。另外,在一個行程執行一個共享庫中的函式之前,需要將該共享庫映射至該行程的虛擬位址空間中。前述的兩種映射均可簡稱為記憶體映射。
每當一個執行中的行程(以下稱為目前行程)即將對一個共享庫進行記憶體映射,則該MAC模組會執行圖2的流程。
首先,在步驟21,檢查該共享庫是否已被加密。若該共享庫已被加密,則流程進入步驟22,否則流程進入步驟24。
在步驟22,檢查該目前行程是否正在被偵錯。若該目前行程正在被偵錯,則流程進入步驟23,否則流程進入步驟24。
在步驟23,拒絕該目前行程對該共享庫進行記憶體映射。由於該共享庫的內容在執行時會被解密,此拒絕可避免在偵錯過程中洩漏該共享庫的內容。
在步驟24,允許該目前行程對該共享庫進行記憶體映射。
此外,在步驟24中,該MAC模組可解析該共享庫的節表,以獲知該共享庫的加密範圍(有哪些節已被加密),再將該共享庫的加密範圍記錄於該目前行程及/或該共享庫所對應的檔案結構的安全本文內。
再者,在步驟24中,該MAC模組可檢查該共享庫的檔案結構是否連結到頁快取。若該檔案結構連結到頁快取,則該MAC模組將該共享庫移出該頁快取,以避免其他行程透過該頁快取而取得該共享庫的解密後的內容。
每當有另一行程即將對前述的目前行程進行偵錯,則該MAC模組會執行圖3的流程。
例如,在Linux作業系統,該另一行程必須經由ptrace系統呼叫(system call)對該目前行程進行偵錯,而MAC模組可以在作業系統核心對該系統呼叫進行強制存取控制,以先用圖3流程處理該系統呼叫。
首先,在步驟31,檢查該目前行程是否為一個已被加密的可執行檔被執行後所形成者;若是,則流程進入步驟33;若否,則流程進入
步驟32。例如,該MAC模組可在作業系統的核心中,對可執行檔的記憶體映射做強制存取控制,且在該目前行程的可執行檔被映射到該目前行程的虛擬位址空間時,該MAC模組可檢查該可執行檔的標頭中是否有表示已被加密的標籤,若有該標籤,則該MAC模組可在該目前行程所對應的工作結構的安全本文中設定相應的標籤。然後,在步驟31,該MAC模組可檢查該安全本文中是否設有該相應標籤,以判斷該目前行程是否源自已被加密的可執行檔。
在步驟32,檢查該目前行程是否已對至少一個已加密的共享庫進行記憶體映射;若是,則流程進入步驟33;若否,則流程進入步驟34。例如,該MAC模組可在作業系統的核心中,對共享庫的記憶體映射做強制存取控制,若有共享庫被映射到該目前行程的虛擬位址空間時,該MAC模組可檢查該共享庫的標頭中是否有表示已被加密的標籤,若有該標籤,則該MAC模組可在該目前行程所對應的工作結構的安全本文中設定相應的標籤。然後,在步驟32,該MAC模組可檢查該安全本文中是否設有該相應標籤,以判斷該目前行程是否已對已加密的共享庫進行記憶體映射。
在步驟33,拒絕該另一行程對該目前行程進行偵錯,以避免在偵錯過程中洩漏可執行檔或共享庫中應當保護的內容。
在步驟34,允許該另一行程對該目前行程進行偵錯。
以下說明請參照圖4。當作業系統對一ELF檔案(可執行檔或共享庫)做記憶體映射之後,該MAC模組可執行圖4流程。
首先,在步驟41,檢查該ELF檔案的記憶體映射範圍是否包括該ELF檔案的已被加密的部分。若該映射範圍包括已被加密部分,則流程進入步驟42,否則流程結束。
在步驟42,記錄原有的該ELF檔案所在的檔案系統提供給作業系統核心的尋頁錯失處理函式A的進入點。
在步驟43,用該MAC模組提供的尋頁錯失處理函式B取代原有的尋頁錯失處理函式A。
以下說明請參照圖5。當一個執行中的行程發生尋頁錯失時,該MAC模組可執行圖5的流程。
圖5流程接續圖4流程,且適用於存放在不同種類檔案系統(例如ext2,ext3,ext4,zfs,xfs等檔案系統)的已被加密的可執行檔及已被加密的共享庫。
首先,在步驟51,該行程發生尋頁錯失。
在步驟52,由於該尋頁錯失,作業系統的尋頁錯失處理程序呼叫尋頁錯失處理函式B。之後的步驟53~57均屬於尋頁錯失處理函式B。
在步驟53,尋頁錯失處理函式B呼叫原有的尋頁錯失處理函式A,以令尋頁錯失處理函式A將導致尋頁錯失的頁的內容從檔案系統載入該行程的虛擬位址空間。
在步驟54,檢查該頁的內容是否已成功載入該行程的虛擬位址空間。若已成功載入,則流程進入步驟55,否則流程進入步驟58。
在步驟55,檢查導致尋頁錯失的該頁的內容是否已被解密。若已被解密,則流程進入步驟58,否則流程進入步驟56。
在步驟56,依據被映射至該頁的ELF檔案的標頭所標示的解密方法,解密該頁的內容。詳言之,在該頁的內容中,僅解密被映射至該頁的ELF檔案的檔案結構的安全本文內已記錄的加密範圍。例如,該解密方法係將該頁的內容交由該電子裝置內建的信任平台模組(trusted platform module,TPM)解密。該TPM模組係為一種內含密鑰的硬體元件,可用該密鑰進行重要資料的加密和解密。
在步驟57,在該頁中設定一標籤,以標示該頁已被解密。
在步驟58,返回作業系統的尋頁錯失處理程序。
下文另舉一實施例說明本發明的保護方法。在本實施例中,該電子裝置為網路附接儲存器(NAS)。NAS是一種網路儲存設備,可提供網路上的檔案共享和儲存服務。NAS通常是一個專用的硬體設備,其內部包含一個或多個硬碟驅動器(hard disk driver),並運行特定的作業系統及廠商特有的軟體及韌體,以提供檔案管理、存取控制和網路通訊等功能。NAS的作業系統通常是Linux。
在本實施例中,NAS的作業系統映像檔案(image file,包含前述的MAC模組)、其他核心模組及其他軟體和韌體程式可經由編譯器(compiler)編譯成為可執行檔或共享庫。然後,可利用一工具程式將需要保護的可執行檔或共享庫的“.text”節加密,可依可執行檔和共享庫是否易於遭受網路攻擊以選擇是否加密。這些可執行檔和共享庫均為ELF檔案,經過加密之後仍為ELF檔案。
對一個ELF檔案加密時,該工具程式可於該ELF檔案的檔案標頭(file header)的旗標欄位將某些位元(bit)設定為1以作為解密方法的
識別標籤。例如,若設定該旗標欄位的第31位元,表示該ELF檔案需使用高級加密標準(Advanced Encryption Standard,AES)演算法解密;若設定該旗標欄位的第30位元,表示該ELF檔案需使用資料加密標準(Data Encryption Standard,DES)演算法解密;若設定該旗標欄位的第29位元,表示該ELF檔案需使用信任平台模組(trusted platform module,TPM)解密。此外,該工具程式可於該ELF檔案的節表中,設定已被加密的節(section)的旗標欄位的某一特定位元為1,以作為識別標籤。
NAS的上述可執行檔和共享庫,經過該工具程式的加密後,可封裝成安裝包,用於安裝或更新NAS的作業系統、核心模組及其他軟體與韌體。在安裝或更新完畢,且NAS重開機後,其作業系統內的MAC模組會比已被加密的ELF檔案先被執行。
在本實施例中,該NAS設備已設置有硬體的TPM安全晶片,該晶片可以保存密鑰,並用於在執行ELF檔案時解密其內容,而前述的加密可用另一TPM晶片加密或用該工具程式使用同一密鑰加密。加密係於安全的軟體編譯與封裝環境內進行,以降低洩漏密鑰的風險。
在某一情況下,該NAS設備中的一個可執行檔1所形成的行程1決定執行另一個可執行檔2。圖6A及圖6B為行程1執行可執行檔2的流程圖。以下說明請參照圖6A及圖6B。
首先,在步驟601,行程1執行可執行檔2,例如,行程1可呼叫Linux的execve等系統呼叫以執行可執行檔2。Linux作業系統的核心負責處理此系統呼叫。
在步驟602,Linux核心的可執行檔載入器會讀取可執行檔2的標頭以辨識可執行檔2的格式。在本實施例中,可執行檔2為ELF格式,故使用ELF載入器以載入可執行檔2。
在步驟603,ELF載入器請求Linux核心的MAC模組執行強制存取檢查。
在步驟604,該MAC模組執行強制存取檢查,其流程繪示於圖7中,以下參照圖7說明該強制存取檢查之流程。
首先,在步驟71,該MAC模組率先檢查可執行檔2之檔案標頭的旗標欄位之第29、30或31位元是否被設定為1,以判斷可執行檔2是否已被加密。若可執行檔2已被加密,則流程進入步驟72。反之,若可執行檔2未被加密,則流程進入步驟78。
在步驟72,該MAC模組檢查行程1是否正在被偵錯。該MAC模組可以檢查行程1之工作結構以判斷行程1是否正在被偵錯。若行程1正在被偵錯,則流程進入步驟73。若行程1未被偵錯,則流程進入步驟74。
在步驟73,該MAC模組將拒絕執行可執行檔2的數值回傳給ELF載入器。
本實施例中,可執行檔2的檔案標頭的旗標欄位的第29位元被設定為1,表示可執行檔2已被加密且應交由TPM解密。另外,行程1並未被偵錯,故流程將進入步驟74。
在步驟74,該MAC模組讀取可執行檔2的節表,以取得可執行檔2的加密範圍,即可執行檔2有哪些節已被加密且必須解密,再將該加密範圍記錄於可執行檔2的檔案結構所指向的安全本文內。
在步驟75,該MAC模組將可執行檔2的檔案結構內記錄的記憶體映射處理函式M替換為該MAC模組所提供的記憶體映射處理函式N。
除非可執行檔2以特別方式被開啟,否則對於可執行檔2的讀寫操作都會經由Linux核心的頁快取。為了避免解密後的可執行檔2的內容通過頁快取而洩漏,在步驟76,該MAC模組將可執行檔2移出頁快取。
在步驟77,該MAC模組在可執行檔2執行時生成的行程2的工作結構所指向的安全本文內設定一個標籤Z,以標示行程2係執行自一個已被加密的可執行檔。
在步驟78,該MAC模組將允許執行可執行檔2的數值回傳給ELF載入器。
回到圖6A所繪示的流程,在步驟605,ELF載入器根據該MAC模組回傳的數值決定是否繼續執行可執行檔2。本實施例中,該MAC模組回傳的數值為允許執行可執行檔2,故ELF載入器繼續執行可執行檔2。
在步驟606,ELF載入器進行可執行檔2的記憶體映射。詳言之,ELF載入器會將執行可執行檔2所需的節映射進入可執行檔2所生
成的行程2的虛擬記憶體的虛擬位址空間內。ELF載入器會以前述的需求分頁的方式進行記憶體映射。
在步驟607,ELF載入器呼叫替換後的記憶體映射處理函式N。本實施例中,記憶體映射處理函式N實作於該MAC模組內。
在步驟608,該MAC模組內的記憶體映射處理函式N呼叫原有的記憶體映射處理函式M。
在步驟609,該MAC模組內的記憶體映射處理函式N將原有的可執行檔2所在的檔案系統提供給Linux核心的尋頁錯失處理函式A替換為實作於該MAC模組內的尋頁錯失處理函式B。
在步驟610,ELF載入器啟動可執行檔2所形成的行程2。行程2會被安排從可執行檔2的檔案標頭所記載的進入點(entry point)開始執行,且該進入點位於可執行檔2的“.text”節內。後續的流程步驟繪示於圖6B。
在步驟611,NAS的處理器會抓取位於該進入點的虛擬記憶體位址的指令,以執行該指令。
然而,在步驟612,因為該虛擬記憶體位址所對應的頁不存在,所以發生尋頁錯失。
在步驟613,Linux核心的尋頁錯失處理程序呼叫該MAC模組內的尋頁錯失處理函式B。
在步驟614,尋頁錯失處理函式B先呼叫原有的尋頁錯失處理函式A。尋頁錯失處理函式A會將導致尋頁錯失的該指令所在的頁的內容載入NAS的實體記憶體,以供處理器抓取。
在步驟615,尋頁錯失處理函式B檢查該頁的內容是否已被加密且尚未被解密,若該頁的內容已被加密且尚未被解密,則將該頁交由NAS的TPM解密。
TPM完成該頁的解密後,在步驟616,尋頁錯失處理函式B在該頁中設置一個標籤以標示該頁已被解密,以避免該頁被重複解密。
在步驟617,Linux核心的尋頁錯失處理程序喚起行程2。
在步驟618,由於該指令所在的頁已經載入,處理器可以繼續該指令的抓取與執行。
若有另一偵錯程式的行程3使用ptrace系統呼叫欲對行程2進行偵錯,則Linux作業系統的核心於處理該系統呼叫時,會呼叫該MAC模組的另一函式C以進行強制存取許可檢查。函式C會檢查行程2所對應的工作結構所指向的安全本文內是否已設定標籤Z,且在發現該安全本文內已設定標籤Z後,會拒絕行程3的偵錯請求。
本發明的保護方法不限於應用在Linux作業系統,也可以應用在能支援該保護方法的技術方案的其他作業系統。另外,本發明的保護方法不限於保護ELF格式的可執行檔與共享庫,也能用於保護支援該保護方法的技術方案的其他格式的可執行檔與共享庫。
圖8為本發明一實施例之一種電子裝置80的方塊圖。電子裝置80包括彼此電性連接的處理器81、記憶體82及儲存裝置83。儲存裝置83可包括至少一個非揮發性(non-volatile)的記憶體或硬碟機等資料儲存裝置,安裝有作業系統,例如Linux,且用於儲存檔案系統中的可執行檔與共享庫。處理器81可為至少一個處理器,用於執行該作業系統,且在該
作業系統中執行上述任一實施例的保護方法,以防止該等可執行檔與共享庫的內容洩漏。記憶體82可為揮發性(volatile)的隨機存取記憶體,用作該等可執行檔與共享庫的記憶體映射的實體記憶體,且用於暫存執行該保護方法所需的資料以及該保護方法執行時產生的資料。
在一實施例中,本發明提供一種電腦可讀取儲存媒體。該電腦可讀取儲存媒體可為記憶體、軟碟、硬碟或光碟,用於儲存複數指令,且該等指令可由電子裝置讀取以執行上述之任一實施例的保護方法。例如,該電腦可讀取儲存媒體可為圖8中之儲存裝置83,該等指令可為前述之安裝包中的指令,且該等指令可由電子裝置80的處理器81讀取以執行上述之任一實施例的保護方法。在另一實施例中,該電腦可讀取儲存媒體係為非暫時性(non-transitory)電腦可讀取儲存媒體。
綜上,本發明使用反逆向工程和反偵錯技術保護可執行檔和共享庫,以避免攻擊者經由逆向工程或偵錯而取得可執行檔和共享庫中的解密後的內容,並提供解決上述缺點至少一者之更嚴密的保護技術。此外,本發明同樣適用對於已經過二進制混淆的可執行檔和共享庫。
上述實施形態僅例示性說明本發明之原理及其功效,而非用於限制本發明。任何在本技術領域具有通常知識者均可在不違背本發明之精神及範疇下,對上述實施形態進行修飾與改變。因此,本發明之權利保護範圍,應如後述之申請專利範圍所列。
11~14:步驟
Claims (10)
- 一種可執行檔與共享庫之保護方法,由一電子裝置之至少一處理器執行於該電子裝置之一作業系統中,該保護方法包括下列步驟:由該電子裝置判斷一第一行程是否正在被偵錯或者是否係一第二可執行檔被執行後所形成者,其中,若該第一行程正在被偵錯,且即將執行一已被加密之第一可執行檔,則拒絕該第一行程執行該第一可執行檔;若該第一行程正在被偵錯,且即將對一已被加密之共享庫進行記憶體映射,則拒絕該第一行程對該共享庫進行該記憶體映射;以及若該第一行程係該第二可執行檔被執行後所形成者,而該第二可執行檔已被加密,且一第二行程即將對該第一行程進行偵錯,則拒絕該第二行程對該第一行程進行該偵錯。
- 如請求項1所述之保護方法,其中,在該第一行程已對該共享庫進行該記憶體映射之後,該保護方法復包括:若該共享庫已被加密,且該第二行程即將對該第一行程進行偵錯,則拒絕該第二行程對該第一行程進行該偵錯。
- 如請求項1所述之保護方法,復包括下列步驟:根據該第一可執行檔之標頭的旗標欄位判斷該第一可執行檔是否已被加密。
- 如請求項1所述之保護方法,復包括下列步驟:根據該共享庫之標頭的旗標欄位判斷該共享庫是否已被加密。
- 如請求項1所述之保護方法,其中,若該第一行程係該第二可執行檔被執行後所形成者,則該保護方法復包括:在執行該第二可執行檔時,根據該第二可執行檔之標頭的旗標欄位判斷該第二可執行檔是否已被加密,其中,若該第二可執行檔已被加密,則在該第一行程之工作結構所指向的安全本文內設定一標籤;以及在該第二行程即將對該第一行程進行該偵錯時,檢查該第一行程之該安全本文內是否已設定該標籤,其中,若該安全本文內已設定該標籤,則拒絕該第二行程對該第一行程進行該偵錯。
- 如請求項1所述之保護方法,其中,若該第一行程係該第二可執行檔被執行後所形成者,而該第二可執行檔已被加密,則該保護方法復包括:將該第二可執行檔之檔案結構內所記錄之第一記憶體映射處理函式替換為第二記憶體映射處理函式,其中,該第二記憶體映射處理函式包括:呼叫該第一記憶體映射處理函式;以及將該第二可執行檔所在之檔案系統所提供之第一尋頁錯失處理函式替換為第二尋頁錯失處理函式。
- 如請求項6所述之保護方法,其中,該第二尋頁錯失處理函式包括:呼叫該第一尋頁錯失處理函式,以將導致該第一行程之尋頁錯失的頁自該檔案系統載入該第一行程之虛擬位址空間;檢查該頁之內容是否已被解密;以及若該頁之內容尚未被解密,則解密該頁之內容。
- 如請求項7所述之保護方法,復包括:若該頁之內容尚未被解密,則使用該第二可執行檔之標頭的旗標欄位所標示之解密方法解密該頁之內容。
- 如請求項1所述之保護方法,復包括:若該第一可執行檔已被加密,且該第一行程被允許執行該第一可執行檔,則將該第一可執行檔移出該作業系統之頁快取;以及若該共享庫已被加密,且該第一行程被允許對該共享庫進行該記憶體映射,則將該共享庫移出該頁快取。
- 一種可執行檔與共享庫之保護系統,包括:一儲存裝置,安裝有一作業系統;以及至少一處理器,用於執行該作業系統,且在該作業系統中執行如請求項1至9之任一者所述之保護方法。
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| TW112144797A TWI856881B (zh) | 2023-11-20 | 2023-11-20 | 可執行檔與共享庫之保護方法及保護系統 |
| CN202410021044.6A CN120020776A (zh) | 2023-11-20 | 2024-01-05 | 可执行文件与共享库的保护方法及保护系统 |
| US18/432,263 US20250165587A1 (en) | 2023-11-20 | 2024-02-05 | Protection method and protection system for executable files and shared libraries |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| TW112144797A TWI856881B (zh) | 2023-11-20 | 2023-11-20 | 可執行檔與共享庫之保護方法及保護系統 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TWI856881B true TWI856881B (zh) | 2024-09-21 |
| TW202522276A TW202522276A (zh) | 2025-06-01 |
Family
ID=93649177
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW112144797A TWI856881B (zh) | 2023-11-20 | 2023-11-20 | 可執行檔與共享庫之保護方法及保護系統 |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US20250165587A1 (zh) |
| CN (1) | CN120020776A (zh) |
| TW (1) | TWI856881B (zh) |
Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN103136458B (zh) * | 2013-01-21 | 2016-03-16 | 中标软件有限公司 | 一种Linux操作系统动态库代码保护方法及其装置 |
| CN105825087A (zh) * | 2016-03-16 | 2016-08-03 | 福建联迪商用设备有限公司 | Elf共享库保护方法及其系统 |
| CN105683990B (zh) * | 2013-10-10 | 2018-11-09 | Inka安特沃客有限公司 | 用于保护动态库的方法和装置 |
| CN110088736A (zh) * | 2016-12-05 | 2019-08-02 | 耐瑞唯信有限公司 | 自调试 |
| US11061998B2 (en) * | 2017-11-24 | 2021-07-13 | Inka Entworks, Inc. | Apparatus and method for providing security and apparatus and method for executing security to protect code of shared object |
| CN114398598A (zh) * | 2021-12-31 | 2022-04-26 | 乐鑫信息科技(上海)股份有限公司 | 一种库文件加密方法、解密方法以及加密装置 |
| EP3814961B1 (en) * | 2018-06-28 | 2023-08-09 | CrowdStrike, Inc. | Analysis of malware |
-
2023
- 2023-11-20 TW TW112144797A patent/TWI856881B/zh active
-
2024
- 2024-01-05 CN CN202410021044.6A patent/CN120020776A/zh active Pending
- 2024-02-05 US US18/432,263 patent/US20250165587A1/en active Pending
Patent Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN103136458B (zh) * | 2013-01-21 | 2016-03-16 | 中标软件有限公司 | 一种Linux操作系统动态库代码保护方法及其装置 |
| CN105683990B (zh) * | 2013-10-10 | 2018-11-09 | Inka安特沃客有限公司 | 用于保护动态库的方法和装置 |
| CN105825087A (zh) * | 2016-03-16 | 2016-08-03 | 福建联迪商用设备有限公司 | Elf共享库保护方法及其系统 |
| CN110088736A (zh) * | 2016-12-05 | 2019-08-02 | 耐瑞唯信有限公司 | 自调试 |
| US11061998B2 (en) * | 2017-11-24 | 2021-07-13 | Inka Entworks, Inc. | Apparatus and method for providing security and apparatus and method for executing security to protect code of shared object |
| EP3814961B1 (en) * | 2018-06-28 | 2023-08-09 | CrowdStrike, Inc. | Analysis of malware |
| CN114398598A (zh) * | 2021-12-31 | 2022-04-26 | 乐鑫信息科技(上海)股份有限公司 | 一种库文件加密方法、解密方法以及加密装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| TW202522276A (zh) | 2025-06-01 |
| CN120020776A (zh) | 2025-05-20 |
| US20250165587A1 (en) | 2025-05-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| KR100918530B1 (ko) | 어드레스 매핑 캐시들의 엔트리 소거 방법, 및 사용 관리 시스템 | |
| US11841956B2 (en) | Systems and methods for data lifecycle protection | |
| CN103959247B (zh) | 虚拟化计算机程序中的安全 | |
| US9934166B2 (en) | Hard object: constraining control flow and providing lightweight kernel crossings | |
| JP4759059B2 (ja) | メモリページをプログラムに対応付けるページカラーリング | |
| US20120151184A1 (en) | Hard object: constraining control flow and providing lightweight kernel crossings | |
| CN109002706A (zh) | 一种基于用户级页表的进程内数据隔离保护方法和系统 | |
| US20010018736A1 (en) | Tamper resistant microprocessor | |
| Gu et al. | A {Hardware-Software} co-design for efficient {Intra-Enclave} isolation | |
| Lee et al. | Lord of the x86 rings: A portable user mode privilege separation architecture on x86 | |
| CN108090346A (zh) | 一种基于数据流监控的代码复用攻击防御方法及系统 | |
| US8452740B2 (en) | Method and system for security of file input and output of application programs | |
| Jiang et al. | Uranus: Simple, efficient sgx programming and its applications | |
| CN114266036B (zh) | 一种基于Intel CET机制的保护通用内存完整性的方法 | |
| CN110532767A (zh) | 面向sgx安全应用的内部隔离方法 | |
| Lei et al. | Put your memory in order: Efficient domain-based memory isolation for WASM applications | |
| TW202439129A (zh) | 標籤保護指令 | |
| Momeu et al. | Islab: Immutable memory management metadata for commodity operating system kernels | |
| TWI856881B (zh) | 可執行檔與共享庫之保護方法及保護系統 | |
| CN107330336B (zh) | Linux操作系统内存页面即时加解密方法和系统 | |
| Xia | Capability memory protection for embedded systems | |
| KR20220156028A (ko) | 메모리 액세서 무효화 | |
| JP2004272594A (ja) | データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム | |
| KR102795981B1 (ko) | 리소스 보안 방법 및 이를 수행하기 위한 컴퓨팅 장치 | |
| Arora et al. | Enhancing security through hardware-assisted run-time validation of program data properties |