駭客攻擊模式探討與木馬程式進階技術
摘要
近幾年來隨著網路寬頻時代的來臨,以及電子商務交易的興起,網路安全也逐漸慢慢受到人們的重視,人們透過各種方式以更快更方便的技術連上網路,人與人之間的種種行為模式幾乎都轉變到網路上,帶來的方便與快捷讓你我的生活離不開網路。然而在此同時網路安全乃至於個人隱私的保密這個以往不受重視的一環也逐漸因為越來越多的兩岸駭客攻防,或是情書病毒,乃至於木馬程式的危害等漸漸受到人們的重視。
本文會介紹駭客攻擊技術手法,以及下一代木馬程式的會採取的技術,以及系統安全防護者防衛之道。此外也會描述木馬程式是如何突穿防火牆的防禦,並分析時下防火牆軟體的缺失與特點。
關鍵字:駭客,木馬程式,電子商務,防火牆,駭客攻擊技術
第一節 前言
在以往人們通常會認為只要公司裝設了防火牆,就不必太擔心駭客的入侵,至於撥接上網的用戶只不過是上網個一兩個小時就下線,也不太在意網路安全的問題,然而這一切都因為寬頻網路的來臨而有所改變,以目前Cable modem越來越朝低價化的市場趨勢乃至於中華電信提供ADSL的寬頻服務的競爭,人們只會花越來越多的時間上網,同時在網路上有許多方便好用的駭客入侵的Tool免費供人下載使用,甚至附上操作說明,許多年輕的網路族在好奇的心理下往往會想嘗試看看,不管是用拙劣的手法騙取他人執行含有特洛伊木馬的程式,或是寄發郵件炸彈給他人,或是用個字典檔案試圖破解密碼檔以入侵他人主機以窺探秘密,我想類似的問題行為只會隨著網路頻寬的增加以及上網年齡的普及而會越來越多,相對的網路也會變成一個相當沒有安全的保障,乃至於成為另一個殺人不流血的戰場。
第二節 駭客攻擊步驟
1.目標鎖定,資源搜尋
要如何防止駭客的入侵就要從駭客的攻擊手法以及駭客的心理開始研究起。首先駭客想要攻擊一個目標,往往會先蒐集目標公司或網域的相關資訊,其手法不外乎是上目標機構或組織的網站,或是透過搜尋引擎搜查相關的資訊,最後是透過許多的whois的資料庫(例如:http://www.arin.net)來幫助達到目標決定與縮小範圍的動作[1]。
在這裡駭客比較在意的資訊包括組織坐落的地址,相關的公司或機構,網域名稱,管理聯絡人,登記者,DNS Server的名稱等等……凡是你認為不重要的資訊說不定都會提供給駭客們一個很重要的入侵線索。
2.掃描
當決定好目標之後,接下來駭客通常會進行掃描的動作,聰明的駭客也知道你有裝設防火牆,在沒有十全把握之前不會貿然的對目標主機進行掃描的動作,就算要掃描也會透過一個跳板主機來對目標主機進行掃描。由於大部分的主機或是防火牆都會接受外界主機Ping的request封包,因此駭客會用Ping的手法來看看你對Ping的回應,也會用Traceroute這個工具來觀察在目標主機與自己之間有多少主機存在,哪些可能是防火牆,哪些是router,在依狀況不同來擬定攻擊手法。
3.windows資源列舉
如果你的電腦是安裝微軟的windows系列的作業系統,那麼這裡提供的列舉方式將會把你電腦裡面的秘密開放出來讓駭客參考。駭客可以對目標NT主機建立一個空連線[1],只要目標主機Port135~139有開啟,那麼就可以透過這個方式來得到目標的主機名稱,網路卡編號,群組,帳號等資訊,如果進一步的猜出你的NT系統管理員密碼,它更可以遠端連上你的主機,擁有一切的權限,這對系統的危害相當的大。幸好在Windows2000裡面只要將Port135~139關閉之後,駭客就不能透過這種方式對你主機加以攻擊了。但是NT資源分享所帶來的方便卻是超乎其他作業系統所提供的,因此這種手法往往也能奏效。
在其他列舉技術方面,駭客可以利用一些軟體來對你開啟的port作連線,觀看你的作業系統對這些連線的回應訊息就可以知道你安裝哪些服務程式[1],同時也可以知道你的網路芳鄰資源分享檔案名稱,來進行密碼的猜測攻擊。
在Unix下駭客可以透過簡單的指令像是finger或是last來觀察使用者或是root的資訊[10],同時也可以透過SATAN這個強大的軟體來勘查目標網路的系統安全漏洞,當然在unix下一切的所作所為都是以竊取/etc/shadow為目標,再進行密碼的破解。
4.入侵系統
當一切都準備妥當之後,就是重頭戲入侵的時刻了。在這裡我不可能列出駭客所有的攻擊手法,有些手法只能用一次,有些技巧是針對某些OS或是OS提供的service的漏洞,有些手法是透過低劣的社交手法來欺騙,駭客入侵系統的手法從充滿高深軟硬體技術到用低劣的欺騙手法都有,在這裡我只提幾個大項出來,而不涉及關鍵實作技術部分。
l 密碼破解
傳統的駭客是以破主機帳號密碼為達成自我成就感的方式之一,現今風行的linux採用的DES演算法如果拿到加密後的密文早已可以使用字典檔的方式用暴力方式加以破解[10],成功與否只是時間問題。至於NT上的密碼檔也可以用DumpACL以及pwdump等工具來破解SAM密碼檔[1],同時也有在網路上竊聽SMB密碼hash的軟體出現,一再顯示NT在密碼保護上是多麼的不堪一擊。
l 特洛伊木馬
攻擊手法主要是騙取被害人執行特定的程式(不外乎是偷拐哄騙)來植入木馬程式,再透過clinet端的程式來竊取對方主機的資源。但隨著網路安全的意識逐漸增加,許多人也懂得開始不隨意執行來歷不明的程式,但是木馬程式就此消失了嗎?請看本文後面的深入介紹便能了解。
l 應用程式漏洞或系統服務漏洞
駭客可以利用你系統的應用程式的漏洞或是主機上提供服務的程式的漏洞來入侵你的系統,例如NT上的IIS Server或是IE瀏覽器[1],linux上的snmp等[10],只要你沒有更新最新的patch程式,就可能成為別人的目標。許多遠端遙控的程式像是PC-anywhere或是VNC等都存在著安全上的問題[1]。
l Sniffer(監聽器)監聽
監聽器的出現來自於網管人員對於網路流量的管理監控需求,因此需要一套軟體來記錄LAN裡面傳遞的封包資訊,流量等紀錄。但被有心人士拿來當作竊取資訊的手法,目前解決的方法有很多種,像是安裝SSH或是其他建立遠端連線加密的服務便能夠有效防止sniffer的危害[10],同時市面上也有許多防sniffer軟體可以檢查自己網路是否有人架設sniffer。
l DoS/DDoS攻擊
這個攻擊手法不外乎是利用TCP/IP協定當初設計的缺失[2],以及作業系統針對TCP/IP協定實際implement方式的不同來設計攻擊方式[1][10],駭客會使用大量的封包或是特異畸形的封包來癱瘓目標主機上的服務,結果輕則使目標主機服務停止,重則讓主機當機,而防止的手法大都是即時更新OS的patch以及隨時注意新的DoS/DDoS的攻擊新技術在搭配Router端對傳入防火牆的封包作有系統的過濾便能對這類攻擊加以抵擋,但針對DDoS的攻擊則往往很難抵擋,事後也很難追查真正的攻擊發起人。
l Buffer Overflow(緩衝區溢位)攻擊
一個高明的駭客,往往不屑使用上面的手法,因為對真正的高手而言,什麼木馬程式或是sniffer乃至於DDoS手法都不能展現他對作業系統的了解與程式語言的天份,他會選擇所謂的Buffer Overflow來實施攻擊[9],因為這種攻擊存在於任何一套軟體甚至是作業系統中,也可能是你我寫的程式或是你我天天在用的程式,最厲害的駭客可以精心設計出造成Buffer Overflow之後跳到他設計好的程式程序裡面,此時如果這個程序有SETUID的程式將會使駭客擁有root的權限,他可以為所欲為而你卻完全無法察覺。目前針對這方面攻擊的預防不外乎就是程式設計時不光以功能為導向,還要注意系統安全的環節,而不是趕著交差了事的心設計程式,此外要善選安全的compiler,對會造成問題的函式盡量不要使用。
l 人為因素造成安全政策漏洞
再好的系統安全政策都離不開人的因素,高明的駭客很可能會因為系統管理者的一時疏忽而入侵系統,你我都有可能因為沒有遵照安全政策對你的規範而成為駭客入侵的跳板。舉個例子來說,有人在公司防火牆內架設撥接Server,直接替公司防火牆開了一個大後門,使駭客可以利用撥接的手法入侵系統,你也可能把系統密碼取的很簡單,讓駭客用你的帳號入侵,這些種種都告訴我們世上絕對沒有一個保證安全的系統,所有的系統安全都離不開人的因素,人為疏失所造成系統安全的漏洞是佔駭客入侵成功最大的百分比。
5.消除痕跡
俗語說,凡走過必留下痕跡。高明的駭客懂得怎麼消除他留下的痕跡,以便保留為下次再次侵入的機會。在NT下會記錄許多系統安全的log檔案,當駭客成功入侵系統後可以到紀錄這些檔案的位置來消除自己的紀錄[1]。至於linux或unix也一樣有許多demon紀錄連線訊息甚至下過的指令,駭客只要消除相關的訊息就可以成功侵入而不留下痕跡[10],就算留下也只會留下無辜者的主機訊息來愚弄系統安全管理者。
以上步驟就是一個駭客入侵他人主機大致會經歷的幾個階段,這些階段每一步驟的操作都需要相當多的系統知識,以及對相關安全漏洞的深入了解,這也代表了水能載舟亦能覆舟,一個高明的駭客反過來說也能成為一流的系統安全管理者,所用的技術完全相同,但目標卻相異。
下一代的木馬程式技術探討
網路上一有新的木馬,大家就談馬色變,在這裡我就對木馬程式該有的功能以及未來木馬程式的發展與破解木馬方式做個介紹,我盡量不涉及開發木馬程式需要的詳細技術,盡量用影響面功能面來介紹。
一隻完整的木馬往往包含兩個winsock程式,一個是Client一個是Server。Server端的功能主要是提供下面幾項資訊以及服務給Client程式
1. 主機名稱,記憶體大小,硬碟空間等系統資訊。
2. 對所有磁碟機下的檔案目錄有讀,寫、新增、刪除的權利。
3. 下載上傳檔案
4. 取得鍵盤/滑鼠輸入/移動訊息
5. 強迫關機
6. 取得目標主機螢幕畫面
7. 開啟/移除資源分享
8. 遠端執行目標主機上的Process或AP
9. 執行跳板攻擊,攻擊其他主機或連線到其他主機
10. 雙向聊天送訊息
然而木馬背後還包含了許多技術,例如木馬是如何做到讓你察覺不出來呢?第一代的木馬程式大都是惡作居多,也就是所謂的後門程式,讓駭客可以規避正常的系統稽核程序直接進入到系統,此時的木馬不以竊取資料為主而以開個後門方便入侵者進入系統為主。
後來的木馬例如Netspy,NetBus,BO2K,Sub7等木馬越作功能越強,體積也越來越小,佔用的記憶體也很像一般的process,同時也會取個類似像是kernel32.exe的正經八百的名字讓你就算想刪除這個process也會猶豫三分,此外木馬程式會複製本體執行檔到系統目錄或是特定目錄下,並增加幾筆register以增加下次開機存活機會。你如果沒有把木馬移除乾淨,下次開機照樣執行,讓你防不甚防。此外木馬程式開啟的port往往開後面的port(接近65536),因為系統要掃完全部的port要花很久的時間,好方便木馬程式隱藏規避偵測。
有的木馬會自動跟某些副檔名產生關聯(例如:.txt),一旦你開啟某個文件檔(.txt)就會在系統某個目錄下自動產生木馬本體,就算你刪除了木馬程序,木馬程式只要你開啟.txt木馬就會再度產生,唯一的方式只有去修改關聯檔,但是如果修改不乾淨,你可能不知不覺又會在木馬的控制之下。
新一代的木馬client與server的連線彼此採取加密的措施,確保連線過程的資料不被竊取,此外有的木馬不會開port讓你察覺出來,本身透過其他方式跟其他主機溝通交換訊息,有的則是寄身在正常的port上面,平常只是監聽,遇到特殊的封包則進行執行的動作。例如一個ICMP的木馬,平常只是監聽ICMP封包的內容,當出現約定好的封包格式之後,就會打開某個port等待連接,這種木馬在平時是很難被發現的,只有當他跟client連線建立之後才和正常木馬一般出現該有的特徵。
至於木馬的隱藏技術方面,在Win98/Me下木馬可以輕易的隱藏在工作列中,但是在win2000下木馬大都會出現在Process列裡面,因為木馬也是一般的Windows程式,任何在windows下的程式都必須向windows註冊視窗類別,取得handle才能呼叫CreateWindow建立視窗,因此很難在程序列中消失。不過我們可以使用RegisterServiceProcess將程序設定成系統服務,喬裝是一般的windows service 來讓作業系統以為這個程序是系統的服務程序而不是一般的應用程式來看待。
未來的木馬會隱藏在DLL檔裡面,他擺脫了傳統木馬開啟port監聽的技術,而採用改寫DLL(動態連結函式庫)或寄身驅動程序的方式,這樣一來系統既沒有產生新的文件,一切的服務也照常運作,更沒有多的port開啟,一旦木馬的控制端像目標主機發出約定的訊息之後,木馬自動啟動開啟port與遠端連線,甚至自動驅動隱藏在DLL內的程序,事實上類似的木馬會越來越多,將會對微軟引以為傲的DLL技術帶來新的衝擊。
破解預防木馬的技術
當你明白木馬程式的執行原理以及存活的方法之後,針對一般的木馬要移除或是偵測木馬的連線就不是很難的事情了。以下列出幾項破解木馬所用的技術,並探討可行性。
l scan port:誠如前面敘述的,一個Scan port的程式就可以將木馬所佔用的port找出來,但是對於像是不開port的木馬,這種方式是無效的。
l 檢查register註冊表:大部分的木馬都會把自己註冊到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run這個位址,你只要到這裡刪除木馬產生的register,重開機後木馬就不會在開機後自動執行了。
l 查看主機連線:透過netstat –a 這個指令,你會看到主機所有的TCP/UDP的連線狀態,看到某個port正在listen的狀態你就可以懷疑這是不是一隻合法的service還是木馬。對於ICMP的木馬,這種方式也是無效的。
l 安裝防火牆軟體:安裝所謂的PC版防火牆軟體可以檔掉一些過氣或是有名的已知木馬連線入侵,這些防火牆軟體(IDS)會偵測電腦開啟的port,針對特定的連線比對資料庫中的木馬特徵,自動幫你檔掉許多木馬的連線。但對透過未知技術開發的木馬當然毫無防衛能力[11]。
l 安裝掃毒程式:許多人電腦都有裝防毒軟體,這些防毒軟體把木馬程式也當作病毒看待,隨時提供警示以幫助使用者過濾木馬程式與一般程式。當然了,這種方式也只能抵擋一般的木馬,針對變種的木馬或是自行開發的木馬是一點都起不了作用的。
l 檢查檔案的關聯:
某些木馬會跟特定文件做關聯,當你發現檔案的關聯性發生異動時,可能是木馬程式造成的也不一定。
l 檢查具有SETUID的程式:
在unix系統下木馬通常危害不像在windows下那麼的大,能控制的範圍也被限制在某個user的home目錄下,但是如果root管理員執行了不慎執行一隻木馬程式,那危害的程度跟在windows下是一模一樣的。以下列舉一個我在Solaris下用script寫的木馬程式,騙取root管理員執行此程式之後(如何騙不在本文範圍),一般的user 登錄後將可以執行ksh這個shell來取得root的權限,其方法就是透過setuid的方式。
Ex:cat ls
/bin/cp /usr/bin/ksh ./ksh
/bin/chmod 4755 ./ksh
/bin/rm ./$0
/bin/$0 $*
結論
資訊安全的範圍相當寬廣,牽涉到的作業系統,版本,應用程式等相關技術不是三言兩語說的完的,唯有靠大家時時保持警覺,以嚴謹的心態來遵守網管人員制定的安全政策,以積極的心來防禦駭客的攻擊,我想才是長遠處理網路安全這方面問題的方法。
駭客的攻擊是永遠不會停止的,換個角度想,其實有了駭客這個系統才會變得更加安全,人們才會真正重視網路安全的危機感,將來才能架構出一個比較合理安全的防衛體系,這對負責維護網路安全的我們而言,不也是一件好事?
<參考文獻>
[1]Joel Scambray, Stuart McClure, George Kurtz “HACKING EXPOSED second edition”
[2]W. Richard Stevens, “TCP/IP Illustrated Volumn1”
[3]
http://reptile.rug.ac.be/~co...sniffit.html[4]
http://www.it.kth.se/...sec.html[5]
http://www.cert.org...dex.htm[6]
http://www.ins....org/[7]
http://www.alw.nih.gov/Se...urity.html[8]
http://www.sunworld.com/sunworldon...urity-faq.html[9]
http://www.cert.org/advis...99-12.html[10]”Maximum Linux Security”
[11]
http://advice.networki...wnloads/