歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 從了解Firewall原理提高網絡安全

從了解Firewall原理提高網絡安全

日期:2017/2/27 9:30:33   编辑:更多Linux
  網絡發展到今天,安全技術層出不窮,目前最常用,技術最成熟的應該還是利用FIREWALL提高安全性,關於FIREWALL的定義,就仁者見仁,智者見智了,我個人比較贊成的觀點是 "防火牆系統可以是路由器,也可以是個人主機、主系統和一批主系統,專門把網絡或子網同那些可能被子網外的主系統/*或者本地用戶 */濫用的協議和服務隔絕,其中還包括合理的過濾規則的應用"     從外部用戶的角度來看,最簡單的例子就是許多時候我們試圖利用TELNET或其他手段連接到遠程主機,經過半天的等待以後,往往是"refuse connect"/*當然也可能是對方限制IP登陸*/……:(     比較經典的FIREWALL區分方法是把它分成兩種application proxies and filtering gateways.     我決定在此處省去N字,:)因為關於FIREWALL原理和實現技術已經有N篇文章講過了……呵呵,你到處都可以找到,中,英文都有。假如有興趣的,我也可以發給你資料     OK,看完了那些FIREWALL的基本知識之後,讓我們開始從我們習慣的角度來看問題了。:) 有些FIREWALL類型可以被簡單的PORT SCAN所鑒別,例如,CheckPoint's Firewall監聽TCP的256.257.258口/*CheckPoint's用來遠程管理用的*/,Microsoft's Proxy server通常監聽TCP的1080和1745口,我們可以簡單的利用NMAP去找找看nmap -n -vv -P0 -P256,1080,1745 *.*.*.*/24我要提醒你注意的是-P0是不可以缺少,因為這個選項是禁止在掃描以前ICMP PING目標,而很多FIREWALL是不會響應ICMP echo 請求的。     利用traceroute for unix or tracert for winnt&98命令來看,假如是用Linux的話,可以加-I選項,表示發送ICMP PACKET。     TRACEROUTE的原理是向目標主機發送一系列UDP數據包。開頭的三個數據包的存活期設置為1,接受到的第一個ROUTER返回一個TTL死亡報文,並且將它丟棄,接著的第二個數據包存活期設置為2,接受到的第二個ROUTER返回一個TTL死亡報文,並且將它丟棄……其他的依此類推。     通常可以看到下面的情況   1 XXX 192.168.55.1 **ms **ms **ms   2 SSS 192.168.52.2   ……   11 WWW 10.63.2.2   12 ZZZ 10.63.5.1   13 QQQ 172.16.11.1   我們可以猜測10.63.5.1可能是FIREWALL。/*只能是猜測*/ 假如有些ROUTER和FIREWALL設置不回復ICMP TTL 死亡報文的話,我們將無法通過TRACEROUTE看到它的存在。   1 XXX 192.168.55.1   2 SSS 192.168.52.2   ……   11 WWW 10.63.2.2   12 ZZZ 10.63.5.1   13 QQQ 172.16.11.1   14 * * *   15 * * *     有時候,我們用NC連接到目標的21或者23口,假如它是在FIREWALL保護下你可以看到該FIREWALL的信息。呵呵,國內最簡單的例子是你直接FTP到163的超級酷個人主頁,就可以看到“天網……”的字樣。這可是前段時間大大出名的FIREWALL哦     如何盡可能多的知道FIREWALL的信息呢,我個人還是喜歡用NMAP---作為SCANER,我覺得它是無可挑剔的,總是可以告訴我們盡可能多的東西……/*建議你先去看看NMAP的說明,同時你也許還需要看看TCP的三次握手*/ nmap總是顯示該服務的服務名稱,端口號,狀態以及協議。狀態有'open','filtered'和'unfiltered'三種。   'open'就不用多說什麼了,大家都明白指的是目標機器將會在該端口接受你的連接請求一般來說,在NMAP中,一個filtered端口表示下面三種情況:   1 沒有收到 SYN/ACK packet   2 沒有收到 RST/ACK packet   3 回復了一個ICMP 3 類型和13 代碼,表示信宿不可到達/*icmp的3類型就表示目標信宿機不可到達,可以利用不同的碼將它細分為13種情況,如網絡不可以到達,主機不可以到達,協議不可以到達,端口不可以到達等……*/   當'filtered'狀態下,我們利用TCPDUMP具體分析,可以發現在抓的IP包中,很明確的表示了unreachable,在NMAP中,端口被堵塞的信息是通過ICMP報文中在頭標位置占一個字節的類型部分表示的,並且經過FIREWALL過濾後返回的信息在IP包中占4個字節表示。   'unfiltered'返回的信息是在各大安全BBS被爭論最多的,在NMAP的說明中,只是簡單的說unfiltered'只有在大多數的掃描端口都處在'filtered'狀態下才會出現的。其實它只是在掃描N多端口並且收到一個RST/ACK PACKET時出現,在'unfiltered'狀態下,我們的SCAN也許通過了FIREWALL並且TARGET告訴我們這個端口沒有被監聽,換句話說,也就是沒有打開。或者FIREWALL回復了一個RST/ACK,這種情況也經常在掃描某些FIREWALL如CheckPoint(with the REJECT rule)時出現,當它從目標回復一個RST/ACK PACKET並且給一個錯誤的IP地址。當我們同時運行TCPDUMP就可以看到返回的是一個RST/ACK包。/*我個人認為,這是個非常好的辦法*/     還有一些SCANER可以幫助我們   Hping,一個很實用的東東,它通過發送一個ICP包到目標端口並且報告回復的包。它可以根據不同條件而產生多種輸出,利用HPING,我們可以清楚的描述出FIREWALL的控制規則。   當一個PORT打開並且收到一個連接時,HPING將告訴我們'flags=SA',呵呵就是代表收到一個SYN/ACK包。   當我們用HPIHG掃描*.*.*.*的23口收到一個'ICMP Unreachable type 13 form *.*.*.*'時,通常情況就是遇到了一個PACKET FILTERING ROUTER。假如對方是CISCO的話很可能就是在配置文件中有這一行"Access-list 101 deny tcp any any 23 ! telnet" 當我們收到一個RST/ACK包/*'flags=RA'*/一般代表兩種可能:   1,這個包通過了FIREWALL並且TARGET沒有開這個端口   2,FIREWALL拒絕了這個包(就象CheckPoint's reject rule)   假如你先掃描一個IP的23口收到了收到一個'ICMP Unreachable type 13 form *.*.*.*',然後你掃描其他的端口如22,收到的是一個RA包/*'flags=SA'*/,通過綜合判斷,我們可以斷定,是端口22沒有開,而不是被過濾規則所拒絕。   最後,當FIREWALL完全堵塞了一個PORT,我們通常收不到任何返回包。它告訴我們兩個意思   1,包不能到達TARGET並丟失在途中   2,絕大部分原因是由於FIREWALL的過濾規則決定將它丟棄。     firewalk也是一個非常好的工具,它可以幫助我們發現在FIREWALL後面打開的PORT,它是利用an ip TTL calculated to eXPire one hop past the firewall.其實還是利用回應一個"ICMP TTL expired intransit"信息,如果包被FIREWALL’ACL 拒絕,將沒有任何回應或者是一個ICMP TYPE 13。不過用firewall進行掃描要注意的一點是,有些FIREWALL在拒絕PACKET EXPIRES時還會給你返回一個ICMPTTL EXPIRED 包,呵呵,很狡猾,在這種情況下,我們將會看到所有的PORT都是打開的:(以上就是我所掌握的一些FIREWALL SCAN技術,希望可以幫助你盡量多的了解FIREWALL後面的情況,也歡迎來信討論。     另,我簡單的談談突破/後門的辦法,以後有時間我會慢慢寫出來 ,如果你E文好,那我強烈推薦THC的關於突破FIREWALL的後門的文章!!!   以下是我根據THC文章和自己經驗的一點綜合,有很多我也不是很了解的地方,還要大家一塊來討論。   1,很多FIREALL,如CHECKPOINT,它默認的DNS LOOKUPS(UDP53)口是打開的,DNS zone transfers(TCP53),RIP(UDP 520)是允許任意HOST連接的,呵呵,利用這個我們就可以指定我們的木馬程序運行在這個PORT上,然後…… 有些時候,數據包過濾可以有狀態包檢查,如果是這樣的話,我們利用DNS口就沒法執行自己的命令,但是還有別的辦法……   2,ICMP和UDP 許多FIREWALL允許ICMP ECHO。ICMP ECHO REPLY,UDP包通過,如CHECKPOING DNS,呵呵,可以將自己的數據利用ICMP包頭封裝起來,就可以執行通過FIREWALL執行命令了,在這方面的現有軟件是LOKI&lokid(client&server),等我有啦點心得以後再寫給大家……UDP的後門程序有daemonshell-udp,也是來自[THC] - The Hacker's Choice.   3,利用CGI留後門,呵呵,ROUTER過濾再厲害,它只要允許HTTP訪問,就一定防止不了CGI的後門,在網上很容易找到這類的後門,如GH寫的後門,不過好象都很類似,除了作者的名字以外/老外也搞這套/   4,開個高段的SHELL後門,國內現在很多這方面的東西,主要原理是利用有些FIREWALL不檢查到高段PORT,所以可以放置這類後門。   5, 利用.forward文件,開sendmail服務的也不會比開HTTP的少多少哦……執行你的SHELL腳本,至於你要干什麼,就自己決定了:)和這個比較類似的方法是利用crontab,最重要還是要看你所希望它們執行什麼命令……   6,RPC服務,呵呵,很多FIREWALL允許RPC服務,利用RPC的EXPLOITS,就可以出入如無人之境了……




Copyright © Linux教程網 All Rights Reserved