由於許可證問題,很少有庫不能靜態鏈接。如何防止LD_PRELOAD或ld.so.preload配置?
那麼是否可以通過LD_PRELOAD環境變量或通過/etc/ld.so.preload配置來防止/檢測預加載的庫?
以前可以通過getenv()檢測到。但我不知道其他方法。
我認爲可能有一個通用的方法來做到這一點,是嗎?
由於許可證問題,很少有庫不能靜態鏈接。如何防止LD_PRELOAD或ld.so.preload配置?
那麼是否可以通過LD_PRELOAD環境變量或通過/etc/ld.so.preload配置來防止/檢測預加載的庫?
以前可以通過getenv()檢測到。但我不知道其他方法。
我認爲可能有一個通用的方法來做到這一點,是嗎?
是否可以通過LD_PRELOAD環境變量或通過/etc/ld.so.preload配置來防止/檢測預加載的庫?
您似乎試圖實施某種反黑客保護。如果是這樣,那麼研究現有的防裂技術是值得的。 This book描述了一些。
請注意,除了LD_PRELOAD
和/etc/ld.so.preload
之外,還有許多其他技術將「外部」代碼注入到您的應用程序中。立即想到的一對是:LD_AUDIT
,在調試器下運行,並且重命名/替換libc.so
。
你幾乎沒有希望阻止一箇中等複雜的攻擊者。在Linux上,我可以構建我自己的libc.so.6
,並且我可以將LD_PRELOAD
重命名爲其他內容。我也可以構建自己的內核,並讓它自動將myhack.so
注入到您的進程中,而沒有任何用戶空間可見的效果。或者,我可以簡單地讓系統調用在應用程序執行時執行其他操作。
...的LD_PRELOAD ......可以通過
getenv()
進行檢測,將停止只有至少熟練的攻擊者,原因有二:
getenv()
,並且可以從您的應用程序中隱藏LD_PRELOAD
,而LD_PRELOAD
僅在進程啓動時很重要。處理過程開始後,預先加載的庫可以在應用程序有機會檢查它之前,輕鬆地從環境中刪除LD_PRELOAD
。