前言
自今年初以來發生了許多病毒攻擊的事件,諸如︰CIH、Melissa與ILOVEYOU等,病毒似乎防不勝防。筆者記得就讀大學二年級時碰到的第一隻病毒是C_BRAIN,當時要防止病毒的肆虐是輕而易舉、相當容易─就是不要隨便執行來路不明的檔案。幾曾何時,這個定律在Internet時代已不再成立。Internet雖然帶來了便利,產生了許多商機,但也萌生了許多安全問題。如何維護網路的安全,不僅重要,而且複雜。當然病毒只是網路安全的一部份,也不是本文討論的重點。網路安全性這個問題的範圍相當大,可以從內部/外部、人為/軟硬體、使用者資訊安全教育、電腦/網路安全管理、重要資料備份/完整備份管理政策,以及機房進出管制等方面來討論。
Internet普及,為公司架設一個WWW伺服器,製作漂亮的Homepage已成為各大公司必備工作。稍具規模的公司甚至擁有兩個以上的網站。再加上許多網路公司年輕員工一夕致富的例子,吸引許多人紛紛投入這個行業。以筆者服務的公司而言,尋求一位Programmer所收到的網路履歷表中,100封網路求職信大概有75封是應徵網頁設計,這些人又以非資訊科系及社會新鮮人佔大多數。即使是資訊科系畢業生,問起他們是否懂得C/C++程式設計,通常得到的答案為「學校修過,但精通Dreamweaver、Frontpage及ASP」。你很難想像在日益複雜的網路時代,這會有多大的弊端產生。因此,本文試著從Linux-based Web Server的安全建置作個粗淺的討論。文中所討論的係以Apache為主,但也會比較到一切其他的Web Server。
Linux-based Web Server的優缺點
Netscape的技術總監Eric Hahn在其Heresy Document中曾提到Linux的五大優點:免費、技術優異、原始碼開放、有較多的開發者及能提供較佳支援。以筆者所用的Linux為例,1200元新台幣的盒裝版內附9片光碟與兩本說明書,還加送一隻可愛的企鵝,其中包含了眾多功能強大的Server軟體如︰Apache Server、Mail Sever、Ftp Server、Firewall + Proxy and Commercial Database,可說物超所值。而Linux當中所附的Apache Server是Internet中使用最廣的Web Server,我們從Apache與微軟IIS的比較(表一),以及Apache的規格說明(表二)可以得到一些概念。
《表一 June 1999 Market Penetration》 |
|
由表一與表二可以看出免費並不代表功能不完整或不實用。當然,除了Apache Server外,Linux上還有許多Web Server,且各有各的優點。不同於Windows NT,由於Microsoft的強勢Marketing策略,配合完整的發展工具,因此Microsoft的IIS幾乎成為Windows NT的唯一選擇。但反觀Linux,於Linux上的Web Server可以說是蓬勃發展,而且大多免費且為Open Source。以下列舉常用的Web Server︰
●AOLserver a full-featured web server from AOL
●Apache HTTP Server a public domain HTTP server for UNIX and Linux
●Apache-SSL secure webserver, based on Apache and SSLeay
●Boa a fast, lightweight web server for unix-alike computers
●Hawkeye a complete, highly extensible Internet/Intranet server suite
●NCSA httpd Server web server from the developers of Mosaic
●Roxen a modularised, object oriented World Wide Web server
●Stronghold commercial version of Apache web-server which uses SSL
●XS-HTTPD 2.3 very small and fast UNIX WWW server
●W3C (CERN) httpd web server from the World Wide Web Consortium (CERN)
眾所皆知,Linux的特點為開放原始碼(Open Source Code),平心而論,Open Source是武器也是罩門,對許多使用Open Source的WWW Server之機構而言,系統管理者可以迅速找到程式的漏洞而加以補救,但這也意味著入侵者可以檢視原始碼而尋找後門。
有一個相當有名的小故事,Netscape於釋出Mozilla時,曾小心翼翼地將程式中有關於加密技術的模組拿掉,原因很簡單,因為美國政府基於安全理由,不允許此類的技術輸出美國本土。但就在Mozilla釋出不到15個小時,有個名為Mozilla Crypto Group的團體在Netscape的模組中,以SSLeay為基礎,提供了美國政府所不允許的全功能加密編碼系統。這個團體有12個成員,其中9個在澳洲,3個在英國。藉由網路團體的支援和其他的Open Source,在短短的15個小時中解掉一個重大的安全問題。但你可以想像相同的情況在Window NT4.0 + IIS4.0的狀況了。以下列舉一些提供加密技術的網站︰
●SSLeay︰http://www2.psy.uq.edu.au/~ftp/Crypto
●OpenSSL︰http://www.openssl.org
●Apatch-SSL︰http://www.apache-ssl.com/
相同的,Open Source的缺點也為業界所熟知,最有名的就是發生在1988年,被一位名叫Robert T. Morris的人利用的finger臭蟲。原來的fingerd程式有下列幾行:
char line[512];
line[0]='\0';
gets(line);
程式似乎很簡單,但Morris利用get()函數不檢查文字行長度的漏洞,寫了一段程式讓fingerd執行shell程式,再加上fingerd通常以root執行,等於讓入侵者取得所有控制權。
Open Source的開發者來自全球各地是不爭的事實,但即使如此,是否能提供較佳的技術支援,筆者認為這是見仁見智的問題。其實提供較佳的支援與Open Source是相輔相成的,由表一亦可以看出國外對Apache的評價,但國內使用者經常將Free Software的Free範圍擴大到技術支援,也因此造成國內從事Linux Service廠商的困擾。其實以Open Source所省下的軟硬體費用(Linux+Apache所需的硬體需求較小),可以買到物超所值的技術支援,更何況NT所需的技術支援費用更加昂貴且無效率。
建置安全的Linux-based Web Server
在爭奇鬥艷的網路環境中,如何製作一個又炫又酷的Home Page往往反而比起網路安全更令公司所重視。在電子交易還未普及之際,或許看不出問題,但當電子交易成為企業的必須時,安全其實是第一要務。有些建置安全Web Server的問題是經常被忽視的:
CGI的安全問題
Home Page因有Web Server的支援而功能更佳,但也因此而對Client Users和WWW Server產生安全漏洞,例如原本WWW Server只允許存取某些特定的資料夾,但沒有安全概念的CGI Script或Program卻可能無意破壞其他目錄的檔案。無經驗的Web Programmer所寫的CGI Script可能包含某些安全漏洞而被入侵者拿來執行Server上的任何程式。
單純的環境
由於Linux有眾多的網路資源,使其成為相當優秀的網路伺服器,您可以使用Linux來執行Ftp、Telnet、Printer Server、File Server與Mail Server等。但越多的Service在同一台機器上執行,代表可能的漏洞越多,也越容易讓入侵者得逞。
不要以root執行Web Server
在Apache之config檔httpd.conf中有一段設定:
# User/Group: The name (or #number) of the user/group to run httpd as.
# On SCO (ODT 3) use User nouser and Group nogroup
# On HPUX you may not be able to use shared memory as nobody, and the
# suggested workaround is to create a user www and use that user.
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group nobody on these systems!
User nobody
Group nobody
這代表無論Http Service要用什麼使用者來啟動它,千萬不要將其設為root,雖然這會有些小小的不便,但您可以想像所有的CGI Script都以root權力執行的後果。
正確的設定存取權
許多使用者並沒有注意到正確的設定存取權,以CGI執行的目錄而言,如果我們將其存取權設定為:
drwx-x--x 5 root www 1024 Aug 8 00:01 cgi-bin/
則httpd可以執行其底下的CGI程式,但除非以root登入,否則無法對其進行修改或觀看。同樣的道理,Apache Server 以httpd.conf來控制伺服器的組態、檔案的讀取權及伺服器資源表(早期的Apache將其分為三個檔案httpd.conf、access.conf與srm.conf)。如果入侵者知道這個檔案的內容,將可以輕易地找出伺服器組態的漏洞。若我們將其存取權設定為:
-rw------ 1 root www 1024 Aug 8 00:01 httpd.conf
則可限制只有root能對其修改及觀看。
正確的設定伺服器組態
在Apache Server的httpd.conf中,有些組態是必須小心設定的。如
Automatic directory listing, Symbolic-link following, Server-side including。你必須了解這些設定的意義並且小心地使用,例如將Automatic directory listing設定為ON,則當瀏覽器Browser到一個沒有index.htm的目錄時,使用者可以清楚的看到伺服器的檔案組態,這是多麼危險的一件事。
別假設上網的人都是無惡意的
別認為使用者都會遵守規則,惡意的入侵者會想盡一切辦法破壞規則,因此網頁設計者要確實檢查如Selection List 傳回值,使用者直接執行CGI程式或使用者故意傳回不合法的Cookie。
預防竊聽
為了預防入侵者竊聽網路資訊(在TCP/IP的環境中是輕而易舉的),通常你必須對你的資料加密,一種方法是直接加密檔案本身,一種是Client/Server使用相同的加密技術對IP Package進行加密。無論如何,別低估Internet的開放性。
適時的升級Linux Kernel
Linux核心至2.2.15以前的版本﹐都含有一個嚴重的臭蟲,以讓一般使用者取得root權限。2.2.15系列的使用者只要升級到最新的Linux 2.2.16版核心,就可以解決。這個漏洞只要系統裡有setuid root的程式,可能被利用。主要問題發生在一個少有說明的函式-setcap,etcap函式可以讓使用者獲得任意setuid程式的能力,進而入侵系統。因此適時的升級Linux Kernel是必要的。系統管理者應經常注意這方面的資訊,必要時也要自行編譯Kernel以防止漏洞。
結語
由於版面的因素,許多問題都只能點到為止,以CGI為例,可以討論的安全問題就可以寫一本書,有興趣的讀者可以上百資網站(http://www.linpus.com.tw)。筆者會在上面發表一系列文章。倒是對於許多急於學習網頁設計的新鮮人而言,筆者倒是建議多了解一些系統架構及安全問題。筆者其實可以大膽預測,由於開發工具的進步,未來製作網頁將有如使用Word打文件一般,是必須的技能而非工作的專長,反而是網路安全專家奇貨可居。