亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Linux 和 Unix 安全編程:環境變量

2019-11-17 05:39:47
字體:
來源:轉載
供稿:網友

  環境變量
缺省情況下,環境變量從進程的父進程繼續而來。但是,在程序執行另一個程序時,調用程序可以把環境變量設置為任意值。這對setuid/setgid程序而言很危險,因為其入侵者可以完全控制它們得到的環境變量。由于環境變量一般是繼續來的,同樣可以傳遞使用;安全程序可能調用某些其它程序,在沒有非凡措施的情況下,這會把有潛在危險的環境變量值傳遞給調用的程序。

有些環境變量是危險的
有些環境變量是危險的,因為很多庫和程序被環境變量以某些隱含、模糊或未公開的方式所控制。例如,sh和bash shell使用IFS變量來決定哪個字符被用來分隔命令行參數。由于shell是被若干底層調用(如C中的system(3)和popen(3),或Perl中的back-tick算符)執行的,把IFS設置為不平常的值就會攪亂那些看起來安全的調用。該行為在bash和sh里有說明,但不引人注目;許多長時間的用戶知道IFS,只不過是因為了解IFS可用來破壞安全性,而不是因為有意經常使用的緣故。更糟的是,不是所有的環境變量都有文檔說明,而且即使有,其它的程序也可以改變和增加危險的環境變量。所以唯一的真正解決方案(下文有描述)是只選擇所需要的環境變量,不理會其余的環境變量。

環境變量的存儲格式是危險的
一般來說,程序應該使用標準的訪問例程來訪問環境變量。例如,在C里應使用getenv(3)獲取環境變量的值,使用POSIX標準例程putenv(3)或BSD擴展setenv(3)來設置環境變量的值,使用unsetenv(3)來清除環境變量。需要說明的是,linux下也實現了setenv(3)。但黑客不會這么善良;黑客可以用execve(2)直接控制傳遞給程序的環境變量數據區。這就可能進行一些骯臟的攻擊,只有那些了解環境變量工作實質的人才能理解這些攻擊。在Linux下可以閱讀environ(5)來了解環境變量工作實質的概要。簡而言之,環境變量在內部作為一個指向字符的指針數組的指針來存儲;該數組按順序存儲并以NULL指針結尾(這樣就可以知道何時數組結束)。指向字符的指針每個都依次指向一個形式為“NAME=value”的以NIL結尾的字符串值。這包含若干意義,例如,環境變量名不能包含等號,而且name或value都不能含有NIL字符。但是,這種格式有一個很危險的含義,就是答應多個入口使用同一個變量名而值不同(如SHELL有多個值)。雖然典型的命令shell禁止這么做,本地操作的黑客可以使用execve(2)制造出這樣的情況來。

這種存儲格式(以及設置方式)的問題在于程序可能會檢查某個值(看看是否合法)而實際上使用的卻是另一個不同的值。在Linux下,GNU的glibc庫試圖保護程序免受此影響:在實現glibc 2.1的getenv時,總是獲取第一個匹配的入口,setenv和putenv總是設置第一個匹配的入口,而unsetenv實際上會清除所有匹配入口的設置(應該祝賀GNU的glibc實現者如此實現unsetenv?。?。但是,有些程序直接訪問環境變量,重復遍歷所有環境變量;在這種情況下,它們可能會使用最后一個匹配的入口,而不是第一個。其結果就是假如檢查的是第一個匹配的入口,但實際使用的是最后一個匹配的入口,黑客就可以以此來繞過保護例程。

解決方案 -- 提取和清除
對于安全的setuid/setgid程序,應該小心提取需要作為輸入(假如需要的話)的簡短的環境變量列表。然后應該清除整個環境,再重新設置一小組必需的環境變量作為安全的值。假如調用了下一級的程序,這實際上并不是什么更好的辦法;因為沒有可行的辦法來列出“所有的危險值”。即使對直接或間接調用的每一個程序的源碼都進行了仔細檢閱,還是有人可以在你編寫完代碼后加入新的未公開的環境變量,其中就可能有一個可利用的環境變量。

清除環境的簡單方式是把全局變量environ設置為NULL。全局變量environ在中定義,C/C++用戶需要#include該頭文件。在產生線程前需要處理該值,但這幾乎不成問題,因為在程序執行的開始階段就需要進行這些處理。另一個清除環境的方式是使用未公開的函數clearenv()。clearenv()有個希奇的歷史;有人建議在POSIX.1中定義它,但不知什么原因它沒有進入標準。盡管如此,POSIX.9(綁定POSIX的Fortran 77)中定義了clearenv(),所以它具有了半官方的地位。clearenv()定義在,但在使用#include包含它之前,必須確定__USE_MISC已經#defined。

一個幾乎可以確定會不斷添加的值是PATH,一個查找程序的目錄列表;PATH應該不包括當前目錄,一般應該像“/bin:/usr/bin”那樣簡單。一般還會設置IFS(其缺省值為“ /t/n”)和TZ(時區)。假如不提供IFS或TZ,Linux也不會死機,但沒有TZ值時有些基于System V的系統會出問題,而且據傳言某些shell需要IFS值被設置。在Linux下,參見environ(5)以了解可能需要設置的通用環境變量列表。

假如確實需要用戶提供的值,首先要檢查這些值(以保證這些值與合法值的模式相匹配,而且在某些合理的最大長度之內)。理想情況是在/etc下有些標準的可信賴文件,包含“標準的安全環境變量值”的信息,但是現在沒有為此目的定義的標準文件。與此相似,可能需要在那些具有PAM模塊的系統里檢查PAM模塊的pam_env。


假如采用不答應直接重新設置環境的語言編寫setuid/setgid程序,一個方法是建立一個“包裹”程序。包裹程序把環境程序設置為安全值,然后調用其它程序。注重:確定包裹程序會實際執行預期的程序;假如它是個解釋程序,要確定不會出現可能的競爭狀態,使得解釋器能夠載入另一個與授予了非凡的setuid/setgid權限的程序不同的程序。

全文:www.linux.org.tw

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品久久久久国产| 两个人的视频www国产精品| 97精品一区二区视频在线观看| 亚洲国模精品一区| 久久久久久久久久久人体| 国产日韩欧美在线观看| 8090成年在线看片午夜| 国产精品一区二区久久国产| 在线日韩日本国产亚洲| 色多多国产成人永久免费网站| 神马国产精品影院av| 91亚洲精品一区二区| 97精品在线观看| 国产在线98福利播放视频| 国产大片精品免费永久看nba| 欧美精品日韩www.p站| 久久精品国产电影| 久久99久国产精品黄毛片入口| 国产精品手机播放| 亚洲一区二区日本| 欧美激情精品久久久久久久变态| 日韩成人激情在线| 久久人人爽人人爽人人片av高请| 国产精品网红福利| 亚洲最大成人免费视频| 国产精品一区二区女厕厕| 国产婷婷成人久久av免费高清| 亚洲成**性毛茸茸| 国内精品视频久久| 2019中文字幕在线免费观看| 欧美成人精品在线播放| 欧美网站在线观看| 91欧美视频网站| 欧美性色19p| 97国产精品免费视频| 亚洲天堂网站在线观看视频| 日韩在线视频线视频免费网站| 亚洲综合在线小说| 亚洲精品久久7777777| 欧美人成在线视频| 91网站免费看| 国产精品日日摸夜夜添夜夜av| 91精品国产色综合久久不卡98| 亚洲精品久久久久中文字幕欢迎你| 久久久免费观看| 69久久夜色精品国产69| 久久久免费精品视频| 欧美另类在线观看| www日韩中文字幕在线看| 日韩视频免费看| 亚洲第一天堂av| 国产精品久久久久久av| 久久久噜噜噜久久中文字免| 亚洲第一网站男人都懂| 欧美日韩一区二区精品| 日韩在线播放视频| 国产欧美精品在线播放| 久久久久久97| 久久久最新网址| 亚洲欧美国产一区二区三区| 亚洲一区二区三区视频| 性欧美长视频免费观看不卡| 国产精品美女免费看| 韩国美女主播一区| 国产精品国产三级国产aⅴ9色| 亚洲国产精品一区二区三区| 欧美视频中文字幕在线| 国产精品久久久久久中文字| 国产色视频一区| 日韩精品视频在线免费观看| 92福利视频午夜1000合集在线观看| 97国产一区二区精品久久呦| 久久中文字幕在线视频| 欧美性猛交xxxxx水多| 成人av色在线观看| 欧美黄网免费在线观看| 色悠悠久久久久| 91免费欧美精品| 国产精品一区二区久久国产| 成人在线视频福利| 国产欧美va欧美va香蕉在线| 亚洲高清在线观看| 久久成人免费视频| 国产精品九九九| 精品视频在线播放| 成人伊人精品色xxxx视频| 91成人免费观看网站| 亚洲一级片在线看| 国产精品第一第二| 午夜免费久久久久| 欧美一级视频一区二区| 91欧美视频网站| 国产91ⅴ在线精品免费观看| 久久天天躁夜夜躁狠狠躁2022| 国产成人精品视频在线| 亚洲最大福利视频网站| 日韩美女在线观看| 国内免费久久久久久久久久久| 日韩成人中文电影| 久久久天堂国产精品女人| 久久久成人av| 国产在线观看精品一区二区三区| 精品国产91乱高清在线观看| 亚洲日本aⅴ片在线观看香蕉| 日韩av电影在线播放| 国产99在线|中文| 欧美中文在线免费| 亚洲精品自拍第一页| 久久亚洲春色中文字幕| 成人97在线观看视频| 日韩免费电影在线观看| 国产999精品久久久影片官网| 亚洲精品videossex少妇| 亚洲一区制服诱惑| 欧美精品aaa| 久久综合网hezyo| 欧美大全免费观看电视剧大泉洋| 久久精品男人天堂| 2018中文字幕一区二区三区| 97人洗澡人人免费公开视频碰碰碰| 久久久久国色av免费观看性色| 在线视频欧美日韩精品| 国产一区二区三区视频| 最近2019好看的中文字幕免费| 中文字幕亚洲综合| 欧美乱妇高清无乱码| 亚洲国产美女久久久久| 91亚洲精品一区二区| 欧美精品一二区| 亚洲精品丝袜日韩| 久久免费精品视频| 亚洲国产中文字幕在线观看| 欧美大尺度电影在线观看| 日韩黄色高清视频| 高跟丝袜一区二区三区| 亚洲精品在线观看www| 91成品人片a无限观看| 日本精品久久久| 九九精品视频在线观看| 中文字幕成人在线| 日韩经典中文字幕在线观看| 欧美另类极品videosbest最新版本| 亚洲国产精品高清久久久| 亚洲欧美激情精品一区二区| xvideos亚洲| 91精品国产91久久久久久久久| 久久久国产精品亚洲一区| 555www成人网| 国产精品青草久久久久福利99| 亚洲高清福利视频| 欧美精品午夜视频| 欧美国产亚洲视频| 国产+人+亚洲| 国产91精品久久久| 亚洲偷欧美偷国内偷| 欧美精品久久一区二区| 欧美贵妇videos办公室| 国产精品久久久久久久久| 亚洲黄页网在线观看| 成人自拍性视频| 国产精品丝袜一区二区三区| 亚洲精品国产福利| xvideos成人免费中文版| 国产亚洲精品成人av久久ww|