GB | BIG5
|
| 首頁 > 安全技術 > 系統 > 正文 |
 |
| FreeBSD系統中procfs文件系統存在多個安全漏洞 |
| 本文出自: 作者: (2001-09-02 09:05:01) |
類別:core
程序:procfs
發布日期:2000-12-18
受影響的系統: 問題 #1: 所有在更正日期之前的FreeBSD 4.x系統.
問題 #2, #3: 所有在更正日期之前的FreeBSD 4.x和3.x系統.
更正日期:2000-12-16 (FreeBSD 4.2-STABLE)
2000-12-18 (FreeBSD 3.5.1-STABLE)
驗証者:Frank van Vliet <karin@root66.org>
Joost Pol <nohican@niets.org> (Problem #1, #2)
Esa Etelavuori <eetelavu@cc.hut.fi> (Problem #3)
只限FreeBSD:非
描述:
procfs是進程文件系統,它與一些相關數據一起構成一個對系統進程表的文件
系統接口。
在BSD系列的procfs代碼中發現存在一些安全問題:
1) 由缺乏對/proc/<pid>/mem和/proc/<pid>/ctl進行全面的訪問控制檢查,
未授權本地用戶可能獲得超級用戶權限。如果用戶可以控制這些文件,就可以
對訪問該進程的地址空間並執行很多控制操作。
攻擊的過程如下所示:攻擊者可以fork()出一個子進程,然在父進程中映射
子進程的地址空間。子進程然再用exec()去執行一個以root身份運行的程序。
父進程將獲得對子進程地址空間的讀寫權限,盡管子進程現在是以更高權限在
運行。父進程可以通過修改子進程地址空間中的數據來以子進程權限執行任意
代碼。
2) 通過mmap()一個擁有/proc/<pid>/mem文件的進程,未授權的本地用戶可以
造成本地拒絕服務攻擊。可能導致系統內核陷入死循環,系統停止響應,必須
在控制台手工重啟動系統。
3) 本地主機上擁有超級用戶權限的用戶,包括在jail(8)虛擬機上的超級用戶,
可以在內核中造成一個緩沖區溢出,並繞過對超級用戶權限的訪問控制。這包括
突破"jail"環境,不需重啟就可以降低系統安全等級,將惡意代碼裝入系統內核
(即使系統已經禁止可裝載模塊)
<*來源: Frank van Vliet (karin@root66.org)
Joost Pol (nohican@niets.org)
Esa Etelavuori (eetelavu@cc.hut.fi)
FreeBSD-SA-00:77 Several vulnerabilities in procfs
*>
--------------------------------------------------------------------------------
建議:
臨時解決方法:
1) 為了解決問題1和問題2,以root身份按照下列步驟執行:
使用umount卸載procfs文件系統:
# umount -f -a -t procfs
在/etc/fstab中禁止自動裝載procfs系統,刪除或者注釋下列行:
proc /proc procfs rw 0 0
2) 解決第3個問題更為困一些難,因為這需要限制超級用戶權限,但下列步驟
可能已經足夠了。
* 在jail環境中卸載所有的procf文件系統。這可以阻止jail root用戶進一步
入侵整個系統。因為jail用戶不能重新裝載文件系統,因此即使攻擊者成功
的獲取jail環境中的root權限,他也不能突破jail.
* 在內核配置文件中刪除"options PROCFS"行,並重新編譯一個新的內核。
具體方法可以參見:
http://www.freebsd.org/handbook/kernelconfig.html
注意:卸載procfs可能對系統操作產生一些負面影響:在一些較老的版本中,
ps命令需要使用procfs文件系統。這也可能導致某些用戶級的進程調試器例如
gdb不能使用。其他安裝的二進制文件包括仿真Linux的二進制文件可能需要訪
問procfs文件系統才能正確運行。
廠商補丁:
更新你的有問題的FreeBSD系統到更正日期之的4.2-STABLE版本,或者自行
打補丁並重構。
為了修復自己的系統:從下列地址下載相關補丁,並以root身份執行下列命令:
[FreeBSD 3.5.1-RELEASE]
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-00:77/procfs.3.5.1.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-00:77/procfs.3.5.1.patch.asc
用你的PGP工具校驗PGP簽名。
[FreeBSD 4.1-RELEASE and FreeBSD 4.1.1-RELEASE]
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-00:77/procfs.4.1.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-00:77/procfs.4.1.patch.asc
用你的PGP工具校驗PGP簽名。
[FreeBSD 4.2-RELEASE]
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-00:77/procfs.4.2.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-00:77/procfs.4.2.patch.asc
用你的PGP工具校驗PGP簽名。
# cd /usr/src/sys
# patch -p < /path/to/patch
如果procfs被靜態編譯進內核(例如,內核配置文件中包含有'options PROCFS'
)行,您應當重建並重新安裝內核,並用新內核來重新啟動系統以使補丁生效。
如果procfs被KLD動態加載(可以使用kldstat命令檢查是否使用KLD加載),並
且安全等級沒有提高,系統可以被即使修補,並不需要重新啟動。在patch了源
碼之,您應當按照下列步驟執行:
# cd /usr/src/sys/modules/procfs
# make all install
# umount -f -a -t procfs
# kldunload procfs
# kldload procfs
# mount -f -a -t procfs
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |