Linux是一種當今世界上廣為流行的免費操作系統,它與UNIX完全兼容,但以其開放性的平台,吸引著無數高等院校的學生和科研機構的人員紛紛把它作為學習和研究的對象。這些編程高手在不斷完善LINUX版本中網絡安全功能。下面介紹Linux的Internet安全漏洞與防范措施,希望對大家有一定的幫助。
在LINUX的Internet安全中,主要包括的就是FTP安全、電子郵件安全、Telnet安全、Web服務器安全和安全Web協議。
FTP安全
對LINUX網絡來說能實現傳輸文件十分重要,因此最常用的工具和協議是文件傳輸協議(FTP)。在這裡簡單介紹一下FTP安全。文件傳輸協議是把文件從一個系統傳輸到另一個系統的標准方法,其目的是:
①促進文件的共享(包括計算機的程序和數據);
②鼓勵通過程序間接或隱含使用遠程計算機;
③使用戶感覺不到主機間文件存儲系統的差別;
④可靠、高效地傳輸數據。
但是,FTP有幾個關鍵性的安全缺陷:
FTP使用標准的用戶名/口令的認證方法。這就使服務器不能可靠地確定一個用戶是否他所聲稱的那個人。
默認情況下,口令以明文方式傳輸。這就使攻擊者通過電子竊聽獲得口令。
FTP會話沒有加密因此沒有隱蔽性。
FTP易受的攻擊有:
FTP的跳"(bounce)"攻擊。
文件許可權限錯誤。
SITE EXEC漏洞。
FTP"跳"攻擊的目標是配置為拒絕來自指定IP地址(或IP地址掩碼)連接的主機。通常一個入侵者的IP地址正好在限制區域,因此他不能訪問FTP服務器的目錄。為了克服這種限制,入侵者使用另一台機器來訪問目標機器。
為了實現這種方法,入侵者向中介FTP目錄寫一個文件,該文件包含有連接到目標機器並獲得一些文件的命令。當該中介連接目標主機時,使用它自己的地址(而不是入侵者的地址)。因此,目標主機信任該連接請求並返回要求的文件。
權限錯誤就是攻擊者發現目標主機上錯誤的文件和目錄權限獲得特權甚至
根用戶訪問權來達到入侵的目的。
SITE EXEC漏洞就是在早期的wu-ftpd版本允許遠程用戶通過向21端口發起telnet會話獲得shell。為了檢查有沒有該漏洞,啟動一個與21端口的telnet對話並發出命令SITE EXEC。如果獲得shell,就存在該漏洞。
FTP的安全措對於小型、封閉的、沒有與Internet連接的網絡(和沒有同其它局域網環境相連)來說是足夠了。但對廣域網環境(尤其是與Internet連接)的網絡環境來說,普通FTP實在是不安全,應使用SSLftp。SSLftp實現具有SSL的FTP客戶和服務器。SSL為安全套接層,是采用RSA和DES認證和加密以及MD5會話完整性檢查的一種第三層協議和API函數。
如同telnet一樣,FTP(或類似FTP的服務)在LINUX網絡中使用最多,但正如所指明的那樣,FTP不真正安全。如果打算小范圍使用普通FTP,應盡量嚴格地設置訪問權限並記錄任何事。這至少可以確保可以控制哪個主機能訪問你的FTP服務並且當出了問題時有最近的審計跟蹤。
電子郵件安全
今天使用最廣的E-mail傳輸協議是簡單郵件傳輸協議(SMTP)。每天,SMTP用於傳輸成千上萬的E-mail消息到世界各地。
SMTP服務器工作規程很少:
接收進來的消息。
檢查消息的地址。
如果消息的地址為本地地址,保存消息以便檢索。
如果是遠程地址,轉發該消息。
SMTP服務器功能同包路由器一樣,除了SMTP服務專用於郵件。大部分SMTP服務器可以按需要存儲以及轉發消息。
SMTP服務器在兩個不同任務上提出了安全要求:
保護服務器以免被攻破。必須給服務器加上防護盔甲防止外部進攻,如果外部進攻成功會使進攻者未經授權便能進入你的系統。
保護SMTP服務以免錯誤使用,例如外人利用你的電子郵件服務器發送假的郵件和垃圾。
在這當中第二項問題更為可怕。有些人不假思索地使用未受保護的SMTP服務器來向Internet郵件帳號轉發成千份的廣告。如果他們使用了你的機器就會使網絡負擔過重。
除非特別指明,否則LINUX在安裝時會把sendmail作為你的郵件傳輸代理。可以用telnet到端口25來觀察確定sendmail的版本。輸出結果的例子如下:
[jray@pointy jray] $ telent poisontooth.com 25
Trying 24.93.119.226…
Conneted to poisontooth.com.
Escape character is
220 pointy. poisontooth.com ESMTP Sendmail 8.9.3/8.9.3
→Sat, 10 Jul 1999 16:27:14-0400
這裡可以看出pointy.poisontooth.com正在運行sendmail/8.9.3。
入侵者對sendmail發起攻擊主要是因為:
sendmail是公共服務,一旦它運行,任何人都能連接和使用它。
sendmail通常以root身份運行。因此如果入侵者發現了一個可利用的漏洞,就可獲得優先級高的訪問權限。
sendmail非常難配置,入侵者因此假設你會在安裝中出問題(通常都成功)。
以下是一些典型的sendmail攻擊:
首先是MIME緩沖溢出漏洞。這種攻擊不影響sendmail本身,而是sendmail發送郵件的客戶。在這裡,sendmail是工具而不是目標。計算機緊急反應小組是這樣描述該攻擊的:
攻擊者向一個脆弱的系統發送一個精心設計的郵件消息,在某種情況下,攻擊者選擇的代碼會在該系統上執行。另外,攻擊者可以是脆弱的郵件程序突然崩潰。根據郵件客戶正在運行的操作系統以及有問題的郵件客戶程序的用戶權限,攻擊都可以使整個系統崩潰。如果一個權限高的用戶用一個容易受攻擊的郵件用戶代理來閱讀郵件,那麼攻擊者就可以獲得進入系統的管理權限。
再來看一下HELO緩沖溢出。在早於sendmail8.9的版本中,攻擊者可以利用HELO命令傳送非正常長度的字符串來偽裝自己的發起的地址。如果一個攻擊者發送HELO後面有至少1024字節的abc,那麼消息頭會如下所示:
From
[email protected] Web Feb 5 22 31:51 1998
Received: from abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcab→abcabcabcabcabcabc
Date: Wed, 5 Feb 1998 12:32:22 +0300
From
[email protected] 非正常字符串隱藏了應正常顯示發信者IP地址的信息。這種攻擊方法,盡管不具危險,但攻擊者可以利用它讓sendmail轉發郵件垃圾和創建難以跟蹤的郵件。
還有口令文件/Root訪問,這是一個更可怕的攻擊,它影響的是sendmail8.8.4。本地用戶可以利用鏈接來獲得root訪問。這種攻擊方法依賴於sendmail在/var/tmp/dead.letter後保存未投遞的消息。
1. 參考CA-98.10站點http://www.cert.org/advisories/CA-98.10.mime_buffer_overflows.htm。
所有用戶都可對/var/tmp進行寫操作,因此本地攻擊者可在/etc/passwd和/var/tmp/dead.letter間創建一個硬鏈接。然後向sendmail服務器發送一個不能投遞的消息。在該消息體內,攻擊者插入可被加到口令文件的一個用戶帳號。
當消息標記為不可投遞,就會加到/var/tmp/dead.letter裡面,而在/var/tmp/dead.letter有一個與/etc/passwd的硬鏈接。這就導致產生一個擁有Root權限的新系統帳號。
Sendmail作為一個突出並且訪問頻繁的服務器,經常是攻擊的目標。最近的一個攻擊方法集中在sendmail報頭解析代碼上的一個漏洞。通過創建有大量TO:報頭的消息,進攻者可使服務器停止運行。這種攻擊方法對sendmail8.9.2和更早的版本有效,因此連最近安裝的sendmail也受到影響。
以上就是常用的對sendmail的攻擊,因為sendmail本身安裝不方便,還有很多安全漏洞,用戶也可選擇更好的工具Qmail。
Telnet安全
不象許多其他服務,telnet(或一個類似服務)是絕對需要的。用telnet可以很容易完成許多工作,如果不用telnet則這些工作會難以完成。除非有更好的理由,否則不應該允許有公共telnet或shell訪問。
普通telnet有很多安全問題,一個值得LINUX用戶注意的攻擊是傳遞環境變量攻擊。過去幾年裡,安全專家已認識到這是一個問題。因此,開發者設計了setuid 和setgid程序來忽略敏感的環境變量。例如LD_LIBRARY_PATH。
對telnet還有以下攻擊:
對於早期LINUX一些版本,攻擊者可以用telnet迫使內核轉儲,該轉儲會暴露已隱蔽的口令。[4]
在Red Hat Linux4.0,攻擊者可以通過暴力強迫登錄來判斷有效用戶名。在Red Hat Linux4.0中的telnet包可在連接時如果輸入無效的用戶名時切斷該連接。但如果用戶名有效而口令不正確,服務器會重新返回登錄提示符用於重新登錄。
雖然這些攻擊很少發生,因為大多數telnet已經加強了對付這類攻擊,但不
2.可訪問http://www.hoobie.net/security/exploits/hacking/telnet_core.txt
意味著我們就可以使用標准telnet服務而不加強它的安全,因為telnet有幾個嚴重缺陷:
口令沒有加密,第三者可用嗅探器捕獲到口令。
Telnet沒有采用強用戶認證。
Telnet不進行會話完整性檢查。
Telnet會話沒有加密。
以上都是可能被惡意人員利用的漏洞。因此,如果用戶不願意或不能使用Secure Shell就需要其它的安全telnet系統,常用的有deslogin,SSLTelnet等。
Web服務器安全
保護Web主機安全首先就要去掉不必要的服務。去掉不必要的服務之前首先要明確的是:你要建立的是什麼類型的主機。主機有三種類型:
Intranet Web主機--無Internet連接的主機,通常與一個局域網連接。
私人或外部Web主機--與Internet相連但只對非常有限的客戶提供服務的主機。
公共或犧牲Web主機--知道或不知道的用戶可以通過Internet,全天候公共訪問的普通Web主機。
每種不同的主機類型就決定了要提供不同的服務,不需要的服務一律屏蔽掉。這是因為將運行的服務很可能會打開安全漏洞。對於要運行的服務,就要實施訪問控制,可以使用TCPWrapper工具包,這個工具提供對遠程服務基於模式匹配的訪問控制,可以利用它禁止或允許對某些用戶的服務。減少服務後,就應在Web服務器上建立訪問控制和認證。Apache是在LINUX中最流行的Web服務器。為網絡訪問控制建立規則,就要用到以下命令:
#Controls who can get stuff from this server.
Order allow,deny
Allow from all
這些命令提供了三條控制通道,allow命令控制哪台主機可以連接,deny控制哪台主機不可以連接,order命令則控制allow/deny命令執行的順序。通過這些命令可以明確允許授權主機和阻止未授權主機。
Apache的安全設置有很多選項,這些設置已足夠嚴格,但是選項的不同配置方法都會引起安全問題。例如,ExecCGI選項,是選擇是否允許CGI程序運行,CGI程序很不安全,所以,能不用執行CGI程序,就盡量不執行。還有別的選項會有不同的問題,安裝時要注意。目前Apache除了提供基本類型認證,還支持使用MD5的基於摘要的加密認證。
安全Web協議
上文所提到的安全Shell是用來防止愛打聽的用戶(本地或遠程)用嗅探器捕獲系統口令,可以極大地增強內部網絡安全。但是如果把LINUX系統作為一個電子商務服務器,就必須向客戶提供從服務器外部的Web浏覽器向服務器建立安全連接。
一般基於Web的通信有幾個弱點:
HTTP沒有提供加密機制,因此第三方可以在客戶和服務器之間竊聽通訊。
HTTP是一個無狀態協議不保存有關用戶的信息,因此不能證實用戶的身份。
HTTP沒有提供方法來認證正在進行的會話。因此不能判斷是否有第三方竊聽了會話。
為了解決這些缺陷,Netscape Communications開發了安全套接層協議SSL。
安全套接層是采用RSA和DES認證與加密以及MD5完整性檢查而包裝起來的方法。使用這些方法,SSL解決了基於Web通訊的三個問題:
在連接期間,客戶和服務器定義和交換秘密密鑰,該密鑰用於加密傳輸的數據。因此,即使SSL的通訊可被竊聽,由於經過加密於是難以破解。
SSL支持公開密鑰加密,因此服務器可以使用公共方案如RSA和數字簽名標准(DSS)來認證用戶。
服務器可以使用消息摘要算法,如MD5和SHA來檢驗正在進行會話的完整性,因此SSL可以防止第三方劫持會話。
SSL通過兩層和兩個步驟保護數據。開始,客戶和服務器進行握手(與TCP握手相同)。在這一過程中,它們交換密鑰並在它們之間建立並同步一個加密狀態。接下來,SSL獲得應用數據(在記錄層)並加密數據。然後,在接收端這一過程以相反的方式執行。這些性能使得SSL成為在所控制的服務器和未知用戶之間進行安全電子商務交易的出色工具。
HTTP沒有提供方法來認證正在進行的會話。因此不能判斷是否有第三方竊聽了會話。
為了解決這些缺陷,Netscape Communications開發了安全套接層協議SSL。
安全套接層是采用RSA和DES認證與加密以及MD5完整性檢查而包裝起來的方法。使用這些方法,SSL解決了基於Web通訊的三個問題:
在連接期間,客戶和服務器定義和交換秘密密鑰,該密鑰用於加密傳輸的數據。因此,即使SSL的通訊可被竊聽,由於經過加密於是難以破解。
SSL支持公開密鑰加密,因此服務器可以使用公共方案如RSA和數字簽名標准(DSS)來認證用戶。
服務器可以使用消息摘要算法,如MD5和SHA來檢驗正在進行會話的完整性,因此SSL可以防止第三方劫持會話。
SSL通過兩層和兩個步驟保護數據。開始,客戶和服務器進行握手(與TCP握手相同)。在這一過程中,它們交換密鑰並在它們之間建立並同步一個加密狀態。接下來,SSL獲得應用數據(在記錄層)並加密數據。然後,在接收端這一過程以相反的方式執行。這些性能使得SSL成為在所控制的服務器和未知用戶之間進行安全電子商務交易的出色工具。