利用動態鏈接共享對象庫進行Linux提權
如果將RPATH和弱文件許可權提升到系統許可權?
Linux應用使用動態鏈接共享對象庫(dynamically linked shared object libraries)在不用重寫代碼的情況下,提供給應用同樣的功能——有點像Windows的DLL文件。與Windows中的DLL植入攻擊類似,Linux弱文件許可權的共享庫可以用來執行任意代碼,並黑進Linux系統。
OS怎樣找到共享庫?
當使用共享庫的應用運行時,操作系統就會以下面的順序尋找庫:
1. rpath-link選項中指定的目錄;
2. –rpath選項中指定的目錄;
3. LD_RUN_PATH;
4. LD_LIBRARY_PATH;
5. DT_RUNPATH或DT_RPATH中的目錄;
6. /lib and /usr/lib;
7. /etc/ld.so.conf下的目錄。
如何獲取Root許可權?
如果攻擊者可以用惡意的共享庫取代原來的共享庫,那麼當應用運行時,就可以載入惡意代碼,並以運行者的許可權運行惡意代碼。如果應用是以root用戶許可權運行的,那麼整個主機就淪陷了。
攻擊者可能需要耐心等待應用的運行,或者用社會工程學的技巧來誘導系統管理員執行運行惡意代碼的應用。如果應用在開始菜單中被調用,比如cron或者其他進程,那麼許可權提升利用過程會快很多。
可以用ldd工具來找出使用共享庫的二進位文件:
下面的攻擊路徑可以識別一個二進位文件有沒有使用易受攻擊的共享庫文件。
示例
用RPATH和弱文件許可權編譯的二進位文件可以進行root提權。
Ldd上運行二進位文件證明了該文件使用了共享庫:
當objdump運行時,可以看到它是被/tmp/program/main處的靜態RPATH編譯的:
/tmp分區默認是可寫的,如果創建分區時沒有NOEXEC標誌,攻擊者就可以在contextBinary運行時寫入惡意的共享庫。在有問題的伺服器上,有個root許可權的cron任務剛剛執行了有漏洞的二進位文件:
在這個例子中我們用metasploit框架來創建可以在系統上植入的共享庫。首先在攻擊者的主機上設立handler
這時,惡意庫就創建了。利用的第一步是操作系統尋找共享庫可以模仿的庫:
之前我用msfvenom創建的有相同payload的共享庫作為handler:
在被攻擊的主機上,創建了目錄結構而且庫在可寫的:
一旦cron任務運行,惡意庫就會執行。在metasploit控制台上有以root許可權運行的shell會話,如圖所示:
如何防禦?
如果是系統管理員:
通過若文件許可權來確保低許可權的用戶不能對下面位置進行寫操作:
· RPATH或RUNPATH特定的位置;
· LD_RUN_PATH和LD_LIBRARY_PATH環境變數的特定位置;
· /lib或/usr/lib;
· /etc/ld.so.conf中特定的位置。
如果是開發者:
如果庫用了RPATH或RUNPATH編譯,指定該目錄為只有擁有者和root可以寫入。或者庫可以移到/lib或/ur/lib目錄下,然後用chrpath工具從編譯的二進位文件中移除RPATH或RUNPATH。
· 以應用所需的最小許可權執行應用,root許可權調用的惡意二進位文件會黑掉整個主機。
· 考慮在/tmp分區中設定NOEXEC選項。
總結
文中證明了一種利用弱文件許可權和硬編碼的RPATH來進行Linux主機提權方法的可行性。當然,共享庫也可以以其他的方式被利用。
本文翻譯自:https://www.contextis.com/blog/linux-privilege-escalation-via-dynamically-linked-shared-object-library,如若轉載,請註明原文地址: http://www.4hou.com/system/9436.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※信息安全專業的發展會受到文憑的限制嗎?
※Web App攻擊之使用Web Scarab工具搜索目標
※對稱加密
※白帽黑客:我是如何用總裁座機給你打的電話!
※基於ios平台的滲透測試工具兵器譜
TAG:信息安全 |