三、身份認證攻擊
1.目前最為常見的身份驗證模式采用的仍然是“用戶名+密碼”的方式,用戶自行設定密碼,在登錄時如果輸入正確的密碼,計算機就會認為操作者是合法用戶。
但是這種認證方式的缺陷也很明顯,如何保證密碼不被泄露以及不被破解已經成為網絡安全的最大問題之一。密碼破解是指利用各種手段獲得網絡、系統或資源密碼的過程。
2.簡單網絡服務認證的攻擊
網絡上很多常見的應用都采用了密碼認證的模式,例如FTP、Telnet、SSH等,這些應用被廣泛地應用在各種網絡設備上,如果這些認證模式出現了問題,那就意味着網絡中的大量設備將會淪陷。遺憾的是,目前確實有很多網絡的設備因為密碼設置不夠強壯已經遭到入侵。
四分之三原則:數字 大寫字母 小寫字母 特殊的字符 不要少於8位更換密碼的頻次不要小於3個月
針對這些簡單的網絡服務認證,可以采用一種“暴力破解”的方法。這種方法的思路很簡單,就是把所有可能的密碼都嘗試一遍,通常可以將這些密碼保存為一個字典文件。
3.三種思路
(1)純字典攻擊。這種思路最為簡單,攻擊者只需要利用攻擊工具將用戶名和字典文件中的密碼組合起來,一個個地進行嘗試即可。 破解成功的概率與選用的字典有很大的關系,因為目標用戶通常不會選用毫無意義的字符組合作為密碼,所以對目標用戶有一定的了解可以幫助更好地選擇字典。 大多數字典文件都是以英文單詞為主,這些字典文件更適用於破解以英語為第一語言用戶的密碼,對於破解母語非英語的用戶設置的密碼效果並不好。
(2)混合攻擊。現在的各種應用對密碼的強壯度都有了限制,例如,在注冊一些應用的時候,通常都不允許使用“123456”或者“aaaaaaa”這種單純的數字和字母的組合,因此很多人會采用密碼方式 例如,使用某人的名字字符+數字的加上生日就是一種很常見的密碼(很多人都以自己孩子的英文名字加出生日期作為密碼),如果僅使用一些常見的英文單詞作為字典的內容,顯然具有一定的局限性。而混合攻擊則是依靠一定的算法對字典文件中的單詞進行處理之后再使用。一個最簡單的算法就是在這些單詞前面或者后面添加一些常見的數字,例如一個單詞“test”,經過算法處理之后就會變成“test1”“test2”…“test1981”“test19840123”等。
(3)完全暴力攻擊。這是一種最為粗暴的攻擊方式,實際上這種方式並不需要字典,而是由攻擊工具將所有的密碼窮舉出來,這種攻擊方式通常需要很長的時間,也是最為不可行的一種方式。但是在一些早期的系統中,都采用了6位長度的純數字密碼,這種方法則是非常有效的。
4.破解密碼字典
4.1常見的字典文件一般是txt或者dic格式:一個常見的破解字典文件。
4.2在Kali Linux 系統中詞典文件的來源一共有以下三個。
(1)使用字典生成工具來制造自己需要的字典,當需要字典文件,手頭又沒有合適的字典文件時,就可以考慮使用工具來生成所需要的字典文件。
(2)使用Kali Linux中自帶的字典,Kali Linux中將所有的字典都保存在/usr/share/wordlists/目錄下
(3)從互聯網上下載熱門的字典:可以訪問https://wiki.skullsecurity.org/Passwords查看最新的字典文件
5.生成字典需要至少指定兩項
(1)字典中包含詞匯(也就是密碼)的長度。
(2)字典中包含詞匯所使用的字符。要生成密碼包含的字符集(小寫字符、大寫字符、數字、符號),這個選項是可選的,如果不寫這個選項,將使用默認字符集(默認為小寫字符)。
6.使用Python來編寫一個生成字典的程序, 在這個程序中需要使用到一個新的模塊:itertools,這是一個強大的內置模塊。
6.1itertools,在這個模塊中提供了很多函數,其中最為基礎的是三個無窮循環器
(1)count()函數:這個函數的作用是產生遞增的序列,例如count(1,5),生成從1開始的循環器,每次增加5,即1,6,11,16,21,26,…
(2)cycle()函數:這個函數的作用是重復序列中的元素,例如cycle('hello'),將序列中的元素重復,即h,e,l,l,o,h,e,l,l,o,h,…
(3)repeat()函數:這個函數的作用是重復元素,構成無窮循環器,例如Repeat(100),即100,100,100,100,…。
6.2除了這些基本的函數之外,還有一些用來實現循環器的組合操作的函數,這些函數適用於生成字典文件。
product()函數:它可以用來獲得多個循環器的笛卡兒積,例如product('xyz', [0, 1]),得到的結果就是x0,y0,z0,x1,y1,z1。
permutations('abcd', 2) #:從'abcd'中挑選兩個元素,例如ab,bc,…,並將所有結果排序,返回為新的循環器。這些元素中的組合是有順序的,同時生成cd和dc。
combinations('abc', 2) #:從'abcd'中挑選兩個元素,例如ab,bc,…,將所有結果排序,返回為新的循環器,這些元素中的組合是沒有順序的,例如c和d只能生成cd。
7.一個簡單的字典文件生成過程
第一步:導入itertools庫。>>>import itertools
第二步:指定生成字典的字符,這里使用所有的英文字符和數字(但是沒有考慮大小寫和特殊字符)。
>>>words = "1234568790abcdefghijklmnopqrstuvwxyz"
第三步:使用itertools中提供的循環器來生成字典文件
這里可以根據不同的需求來選擇,在這里選擇permutations,既考慮選項,又考慮順序。這里考慮到程序運行的速度,僅出於演示的目的,所以選擇了生成兩位的密碼。在真實情景中往往需要生成6位以上的密碼,但這需要很長的時間。
>>>temp =itertools.permutations(words,2)
第四步:打開一個用於保存結果的記事本文件。>>>passwords = open("dic.txt","a")
第五步:使用一個循環將生成的密碼寫入到一個記事本文件中。
>>>for i in temp:
passwords.write("".join(i))
passwords.write("".join("\n"))
8.除了自己生成字典之外,建議到互聯網上下載一些優秀的字典文件。https://wiki.skullsecurity.org/Passwords中提供了一些相當有效的字典
Lists the top 500 worst passwords of all time
9.FTP暴力破解模塊
FTP是File Transfer Protocol(文件傳輸協議)的簡稱,中文簡稱為“文傳協議”,用於在Internet上控制文件的雙向傳輸。 同時,它也是一個應用程序(Application)。使用FTP時必須首先登錄,在遠程主機上獲得相應的權限以后,方可下載或上傳文件。也就是說,要想同哪一台計算機傳送文件,就必須具有哪一台計算機的適當授權。換言之,除非有用戶ID和口令,否則便無法傳送文件。
不過現在大部分FTP都提供了匿名登錄的機制,這種FTP可以使用用戶名“anonymous”和任意的密碼來登錄。考慮的主要是如何去對那些設置了用戶名和密碼限制的FTP進行破解。
9.1FTP的工作流程
(1)客戶端去連接目標FTP服務器的21號端口,建立命令通道。服務器會向客戶端發送“220 Free Float Ftp Server(Version 1.00)”回應,括號內的信息會因為服務器不同而有不同的顯示。
(2)客戶端向服務器發送“USER用戶名\r\n”,服務器會返回“331 Please specify the password .\r\n”。
(3)客戶端向服務器發送“PASS密碼\r\n”,如果密碼認證成功服務器會返回“230 User Logged in.\r\n”,如果密碼認證錯誤服務器會返回“200 Switching to Binary mode.\r\n”。
9.2Python中默認就提供了一個專門用來對FTP進行操作的ftplib模塊,這個模塊很精簡,里面提供了一些用來實現登錄、上傳和下載的函數。
(1)ftp.connect("IP", "port") #連接的FTP Server和端口。
(2)ftp.login("user", "password") #連接的用戶名,密碼。
(3)ftp.retrlines(command[, callback]) #使用文本傳輸模式返回在服務器上執行命令的結果。
9.3下面使用ftplib函數按照登錄流程進行操作。
(1) 首先,導入需要使用的ftplib庫文件。
>>> import ftplib
(2)其次,使用ftplib創建一個FTP對象。
>>> ftp=ftplib.FTP("192.168.169.133")
(3)調用這個對象中的connect()函數去連接目標的21號端口。
>>> ftp.connect("192.168.169.133",21,timeout=10)
10對FTP服務進行暴力破解的程序。
四、拒絕服務攻擊
1. 拒絕服務攻擊即是攻擊者想辦法讓目標機器停止提供服務,是黑客常用的攻擊手段之一。
2. 其實對網絡帶寬進行的消耗性攻擊只是拒絕服務攻擊的一小部分,只要能夠對目標造成麻煩,使某些服務被暫停甚至主機死機,都屬於拒絕服務攻擊。
3. 拒絕服務攻擊問題也一直得不到合理的解決,究其原因是因為網絡協議本身的安全缺陷,從而拒絕服務攻擊也成為攻擊者的終極手法。
4. 拒絕服務攻擊並不是一個攻擊方式,而是一類具有相似特征的攻擊方式的集合。
黑客可能會利用TCP/IP協議層中數據鏈路層、網絡層、傳輸層和應用層各種協議漏洞發起拒絕服務攻擊。
5.數據鏈路層的拒絕服務攻擊
5.1 它的攻擊目標是二層交換機。 這種攻擊方式的目的並不是要二層交換機停止工作,而是要二層交換機以一種不正常的方式工作。
5.2 什么是交換機不正常的工作方式呢? 讓交換機成為 “集線器” 。根據交換機的特性:當CAM表被填滿時,收到未知單播幀,會將這個幀進行廣播處理。這時受到攻擊的交換機實際上已經退化成了集線器了。這時黑客只需要在自己的計算機上將網卡設置為混雜模式,就可以監聽整個網絡的通信了。
5.3 一個專門用來完成這種攻擊的工具 –macof ,使用格式:
Usage: macof[-s src][-d dst][-e tha][-x sport][-y dport][-i interface][-n times]
在實際應用中,這里面的參數只有-i是會使用到的,這個參數用來指定發送這些偽造數據包的網卡。
5.4 交換機在遭到攻擊之后,內部的CAM表很快就被填滿。 交換機退化成集線器,會將收到的數據包全部廣播出去,從而無法正常向局域網提供轉發功能,實現的過程很簡單。
1)啟動macof這個工具
root@kali:~# macof
2)構造隨機MAC和IP,scapy模塊中的RandMAC()和RandIP()可以很方便地實現這一點,也可以生成固定網段IP,如 RandIP("192.168.1.*")。
all_rand.py
運行結果
3)數據包中包含指定的源IP和MAC,那么交換機就會記錄,例如ARP包。
Ether(src=RandMAC(),dst="FF:FF:FF:FF:FF:FF")/ARP(op=2,scr="0.0.0.0",hwdst="FF:FF:FF:FF:FF:FF")/Padding(load="X"*18)
或者ICMP包:
Ether(src=RandMAC(),dst=RandMAC())/IP(src=RandIP(),dst=RandIP())/ICMP()
6.網絡層的拒絕服務攻擊
6.1 位於網絡層的協議,包括ARP、IP和ICMP等,其中,ICMP主要用來在IP主機、路由器之間傳遞控制消息。平時檢測網絡連通情況時使用的Ping命令就是基於ICMP的。
例如,希望查看本機發送的數據包是否可以到達192.168.26.100,就可以使用如圖所示的Ping命令。
可以看出,發送的數據包得到了應答數據包,這說明192.168.26.100收到了發出的數據包,並給出了應答。這個過程遵守了ICMP的規定:Ping就是IMCP請求(Type=8),收到的回應就是ICMP應答(Type=0),一台主機向一個節點發送一個Type=8的ICMP報文,如果途中沒有異常(例如,被路由器丟棄、目標不回應ICMP或傳輸失敗),則目標返回Type=0的ICMP報文,說明這台主機存在。
但是目標主機在處理這個請求和應答時是需要消耗CPU資源的,處理少量的ICMP請求並不會對CPU的運行速度產生影響,但是大量的ICMP請求呢?
6.2 仍然使用Ping命令來嘗試一下。這次將ICMP數據包設置的足夠大,Ping命令發送的數據包大小可以使用 -l 來指定(這個值一般指定為65500),這樣構造好的數據包被稱作“死亡之Ping”,因為早期的系統無法處理這么大的ICMP數據包,在接收到這種數據包之后就會死機,現在的系統則不會出現這種問題,但是可以考慮使用這種方式向目標連續地發送這種“死亡之Ping”來消耗目標主機的資源
現在的操作系統和CPU完全有能力處理這個數量級的數據包。
既然對方能夠承受這個速度的數據包了,那么這里的拒絕服務攻擊也就沒有效果了,必須想辦法提高發送到目標的數據包的數量。主要有兩個辦法,一是同時使用多台計算機發送ICMP數據包(),二是提高發送的ICMP數據包的速度。
另外,除了像上面這種使用本機地址不斷地向目標發送ICMP包的方法之外,還有兩種方法,一是使用隨機地址不斷向目標發送ICMP包,二是向不同的地址不斷發送以受害者的IP地址為源IP地址的數據包。這種攻擊模式里,最終淹沒目標的洪水不是由攻擊者發出的,也不是偽造IP發出的,而是正常通信的服務器發出的。
使用WireShark來捕獲發出的數據包,可以看到快速地以1.1.1.1向各個地址發送ICMP請求,這個地址在收到了請求之后,很快就會向1.1.1.1發回應答。這就是第三種攻擊方式
7.傳輸層的拒絕服務攻擊
7.1 TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。
7.2 TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求后,等待對方回答SYN+ACK,並最終對對方的SYN執行ACK確認。這種建立連接的方法可以防止產生錯誤的連接。
7.3 TCP三次握手的過程如下。
(1)客戶端向服務器端發送SYN(SEQ=x)數據包,並進入SYN_SEND狀態。
(2)服務器端在收到客戶端發出的SYN報文之后,回應一個SYN(SEQ=y)ACK(ACK=x+1)數據包,並進入SYN_RECV狀態。
(3)客戶端收到服務器端的SYN數據包,回應一個ACK(ACK=y+1)數據包,進入Established狀態。
三次握手完成,TCP客戶端和服務器端成功地建立連接,可以開始傳輸數據了。
不同於針對ICMP和UDP的拒絕服務攻擊方式,基於TCP的攻擊方式是面向連接的。只需要和目標主機的端口建立大量的TCP連接,就可以讓目標主機的連接表被填滿,從而不會再接收任何新的連接。
7.4 基於TCP的拒絕攻擊方式有兩種:
一種是和目標端口完成三次握手,建立一個完整連接;
另一種是只和目標端口完成三次握手中的前兩次,建立的是一個不完整的連接
攻擊方會向目標端口發送大量設置了SYN標志位的TCP數據包,受攻擊的服務器會根據這些數據包建立連接,並將連接的信息存儲在 連接表 中,而攻擊方不斷地發送SYN數據包,很快就會將連接表填滿,此時受攻擊的服務器就無法接收新來的連接請求了。
無須使用自身的IP地址作為源地址,只需要使用偽造的地址即可。產生隨機地址的方法如下所示。
攻擊目標時使用TCP,端口為80,將標志位設置為syn。
TCP(dport=80, flags="S")
8.應用層的拒絕服務攻擊
8.1 位於應用層的協議比較多,常見的有HTTP、FTP、DNS、DHCP等。這里面的每個協議都可能被利用來發起拒絕服務攻擊
8.2 DHCP為例,DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)通常被應用在大型的局域網絡環境中,主要作用是集中地管理、分配IP地址,使網絡環境中的主機動態地獲得IP地址、Gateway地址、DNS服務器地址等信息,並能夠提升地址的使用率。
8.3 一次DHCP的過程如圖
8.4 DHCP攻擊的目標也是服務器( DHCP ),懷有惡意的用戶偽造大量DHCP請求報文發送到服務器,這樣DHCP服務器地址池中的IP地址會很快就分配完畢,從而導致合法用戶無法申請到IP地址。同時大量的DHCP請求也會導致服務器高負荷運行,從而導致設備癱瘓。
首先編寫一段程序來搜索網絡中的DHCP服務器,只需要在網絡中廣播DHCP的discover數據包,源端口為68,目標端口為67.這個構造的過程涉及多個層次。
8.5 用到兩個工具:一個是Yersinia,這是一個十分強大的拒絕服務攻擊工具,另一個是Metasploit。
Yersinia進行DHCP攻擊實驗,這是一款圖形化工具,在命令行中輸入“yersinia -G”就可以以圖形化界面的形式啟動這款工具。
root@kali:~# yersinia -G
8.6 基於DHCP的攻擊中一共提供了4種發包形式,這4種模式的含義如下所示。
(1)sending RAW packet: 發送原始數據包。
(2)sending DISCOVER packet:發送請求獲取IP地址數據包,占用所有的IP,造成拒絕服務。
(3)creating DHCP rogue server:創建虛假DHCP服務器,讓用戶連接,真正的DHCP無法工作。
(4)sending RELEASE packet:發送釋放IP請求到DHCP服務器,致使正在使用的IP全部失效。
理論上,所有提供連接的協議都可能會受到拒絕服務的攻擊,Metasploit中提供了很多用於各種協議的拒絕服務攻擊模塊,可以啟動Metasploit,並在其中查詢使用對應的模塊.使用show opinions來查看這個模塊的參數
msf > use auxiliary/dos/tcp/synflood
8.7 synflood這個模塊需要的參數包括RHOST、RPORT、SNAPLEN和TIMEOUT,后面的三個參數都有默認值,所以需要設置的只有RHOST,這也正是要發起拒絕服務攻擊服務器的IP地址。這個目標必須是對外提供HTTP服務的服務器。
8.8 如果事先獲得了關於目標的足夠信息,也可以利用目標主機上一些特定的服務進行拒絕服務攻擊。
例如很多人都擁有兩台以上的計算機.一台在單位,另外一台在家里,如果上班時間沒有完成全部工作,回到家中可以遠程連接到單位的計算機。但是這需要計算機提供遠程控制的服務.
Windows操作系統中就提供了遠程桌面協議,這是一個多通道的協議,用戶可以利用這個協議(客戶端或稱“本地計算機”)連上提供微軟終端機服務的計算機(服務器端或稱“遠程計算機”)。
但是微軟提供的這個服務被發現存在一個編號為MS12-020的漏洞,Windows在處理某些RDP報文時Terminal Server存在錯誤,可被利用造成服務停止響應。默認情況下,任何Windows操作系統都未啟用遠程桌面協議(RDP)。沒有啟用RDP的系統不受威脅。
8.9 還是在Metasploit中啟動對應的模塊:
msf > use auxiliary/dos/windows/rdp/ms12_020_maxchannelids
使用“show options”來查看這個模塊所要使用的參數