2017-03-26 17 views
0

我想了解共享/動態庫如何工作。我認爲我有一個普遍的把握,但我很難理解他們如何被保護以防止利用。共享庫如何安全地被利用?

如果一個程序使用共享庫,我知道它在執行時是鏈接的。因此,鏈接程序將所有缺少的符號解析爲它們各自的庫。

當共享庫的函數被實際調用時,我的理解是執行跳轉到共享庫的可執行文件中。

這是我的困惑從何而來。難道只有通過「猜測」來指定要跳轉到的地址才能調用庫中的私有方法並可能獲得升級的權限?

我很感謝任何幫助更好地理解這一點。由於

+0

_「...獲得升級權限?」_否共享庫在與主程序相同的權限下運行。 –

回答

0

總之,是的。啓動進程的程序擁有地址空間,並可以做任何喜歡的事情。如果您的圖書館與另一個具有可能導致升級的特權的進程存在危險的交互,則另一個進程需要自己的防禦。沒有任何東西可以阻止某人在你的庫中調用私有方法或靜態函數,任何可能會做的方法都可以被繞過。

1

不能只是一個指定的地址通過「猜測」在 爲了跳轉到調用私有方法

是。但是,如果你不信任該計劃,那麼它可以做的事情就更糟了。簡單的解決方案:不要執行你不信任的程序。

並可能獲得升級權限?

不。進程使用的庫沒有比進程本身更多的特權。

-1

當然這是可能的,但有像ASLR這樣的機制阻礙任何「猜測」方法。此外,如果您正在討論操作系統範圍內的特權升級問題,那麼就存在分頁問題,​​它禁止用戶代碼操縱和執行內核的數據和代碼。

+0

ASLR不會阻止進程訪問自己的合法庫(包括其內容)。分頁和/或可執行標記(它們不完全相同) – deviantfan

-1

在太監和風箏世界中出現的人們錯過了更好設計的系統。有些系統明確地管理共享庫,以減少他們的利用。這些共享庫將由系統安裝。事實上,相同的安裝程序將用於具有提升特權的程序。例如,像需要訪問內核數據的進程監視器這樣的良性程序可以以用戶自己不具有的權限來安裝。

+0

a)如何命名這樣的系統? b)如何用適當的語氣(「太監和風箏」)編寫可理解的句子(「爲了減少被剝削的人」)? c)這與Unix&co和Windows有什麼不同?以不同於用戶的特權運行一些程序正是他們所做的。 – deviantfan