按此可放大網頁內容, 重複按可無限放大 按此回復標準網頁大小
最新消息課程教材單元討論區學習日誌

      

* *Dictionary Attack *   *
 
Dictionary Attack簡介
  使用字典中常見的單字、片語、數字、名字和引語去解出密碼。如果您的密碼設 定為常用的單字或名字,這種方式的解碼會更成功快速。由於一般的使用者往往 會選擇短的、有意義的英文字(字典中的單字或其組合)、日常生活中常用的號碼 (例如:電話號碼、生日、身份證號碼、地址)等,因方便記憶來做為其密碼,而 這些類型的密碼(稱之為weak passwords),其總數是相當有限的(相對於電腦的 快速運算),因此攻擊者可以在其獨立的電腦上快速地反覆猜測與比對,在很短的 時間內就有可能猜出一個使用者密碼,這就是所謂的字典攻擊法。
Dictionary Attack工具
  在這邊介紹一套字典攻擊的軟體,稱為John The Ripper。它能夠使用四種破解模式來破解密碼檔,使用者可以針對自己電腦作業系統的登入密碼檔進行測試,來檢測自己所設置的密碼安不安全。以下介紹John The Ripper的四解破解模式︰
  「字典檔」破解模式(Wordlist Mode)︰這在John所支援的破解模式中是最簡單的一種,你要做的唯一工作就是告訴John字典檔在哪(字典檔就是文字檔,內容每行一個單字代表試驗的密碼),好讓它可以取出破解。在「字典檔」破解模式裡可以使用「字詞變化」功能,來讓這些規則自動的套用在每個讀入的單字中,以增加破解的機率。
  「簡單」破解模式(Single Crack)︰「簡單」破解模式是專門針對「使用帳號當作密碼」的懶人所設計的;所謂「使用帳號當作密碼」的意思是,如果一個使用者帳號是「john」,它的密碼也取為「john」。在「簡單」破解模式裡john會拿密碼檔內的「帳號」欄位等相關資訊來破解密碼,並且使用多種「字詞變化」的規則套用到的「帳號」內,以增加破解的機率。如帳號「john」,它會嘗試用「john」、「john0」、「njoh」、「j0hn」….等規則變化來嘗試密碼的可能性。
  「增強」破解模式(Incremental Mode)︰這是John裡面功能最強大的破解模式,它會自動嘗試所有可能的字元組合,然後當作密碼來破解。這個破解模式所需要的時間非常冗長,因為要嘗試組合字元是非常耗費時間的,所以John才會定義一些「字元頻率表」(character frequency tables)來幫助破解。簡言之這個破解方法就是「暴力法」,把所有可能的密碼組合都測試一次,來得到正確的結果。
  「外掛模組」破解模式(External Mode)︰這個破解模式是讓使用者可以自己用C語言寫一些「破解模組程式」,然後掛在John裡面來使用。其實所謂的「破解模組程式」就是一些用C語言設計好的副函示,然後它的功能就是產生出一些單字來讓John嘗試破解。而在執行John程式時,它在載入這些「破解模組程式」時會自動編譯這些C語言副函示然後來使用。
安裝步驟
  步驟1︰ 首先請到 http://www.openwall.com/john/ 下載John The Ripper軟體。 本實驗使用的是John the Ripper 1.6 (Win32 - binaries, 763 KB) and its signature。
 
  步驟2︰ 安裝John the Ripper的方法實在非常簡單,將下載回來的ZIP壓縮檔john-16w.zip解壓縮到硬碟裡面去就可以了, 各位可以看到解壓縮之後,在硬碟裡面會建立一個「john-16」的資料匣,資料匣裡面包含有兩個目錄: 「doc-說明檔放置的位置」與「run-程式檔放置的位置」。完成上述步驟,這就是整個安裝過程!如圖︰
 
使用方法
  步驟1︰ 開啟windows xp的命令提示字元。
 
  步驟2︰ 進入 G:\passwd> 資料夾中(假設將 john-16 資料夾中的 run 資料夾底下的資料複製到 G 槽的 passwd 資料夾),輸入 john, 可以看到 John the Ripper 有一大堆命令列參數可以使用,以下說明其參數意義及使用範例。
 
  -single︰使用「簡單」(Single Crack)破解模式解密,主要是根據使用者的「帳號」產生變化來猜測解密,其變化規則記錄在JOHN.INI檔案的 [List.Rules:Single] 區域內。
範例:john -single passwd。
  -wordfile:[字典檔檔名] -stdin︰使用「字典檔」破解模式解密,由字典檔內讀取單字來破解;或是可以加上-stdin參數,代表由鍵盤輸入單字來破解。
範例:john -wordfile:bigdict.dic passwd。
  -rules︰在「字典檔」破解模式下,開啟字詞規則變化功能,如「字典檔」讀入單字cook,則開啟字詞變化下,程式可能會嘗試cook、c00k、cooker、cook0…等其它字詞。詳細變化規則記錄在JOHN.INI檔案的 [List.Rules:Wordlist] 區域內。
範例:john -wordfile:bigdict.dic -rules passw。
  -incremental[:模式名稱](參數也可以簡寫成 -i[:模式名稱]):[字典檔檔名] -stdin︰使用「增強」破解模式解密,就是組合所有可能的字元當作密碼來破解。在 JOHN.INI檔案內的 [Incremental:*****] 區域裡定義好許多的模式名稱,可以指定使用哪一個模式來破解。
範例:john -i:all passwd。
  -external:[模組名稱]︰使用「外掛模組」破解模式解密,使用者可以自己撰寫額外的「破解模組程式」。「破解模組程式」是記錄在JOHN.INI檔案內的 [List.External:******] 區域內。
範例:john -external:double passwd。
  -stdout[:LENGTH]︰這個選項跟破解沒有任何關係,只是單純顯示John所產生出來的單字到螢幕上。
範例:john –i:all –stdout。
  -restore[:回復檔案名稱] ︰繼續上次中斷的解密工作。John在執行破解密碼工作時,可以按下<CTRL+C>鍵中斷工作,而當前的解密進度情形會被存放在一個名為「restore」的檔案內。而使用「-restore」參數,可以從「restore」檔案內讀取上一次破解時候中斷的位置,然後接下去繼續破解。
範例:john –restore。
  -session[:記錄檔檔名]︰這個選項是讓你設定目前工作記錄檔(session file)的檔名。所謂的工作記錄檔就是可以用「-restore」參數回復工作的檔案。另外,在使用John做多工破解工作時,使用「-session」參數可以為每個工作設定各別的記錄檔,而不會混在一起。
範例:john –wordfile:bigdict.dic –session:work1 passwd。
  -status[:記錄檔檔名]︰顯示工作記錄檔裡面所記錄的工作狀態。
範例:john –status:restore。
  -makechars:[檔名]︰製作「字元頻率表」。這個選項會以目前已破解出的密碼為基礎,來產生「字元頻率表」(註:John會把已破解出的密碼記錄在JOHN.POT檔案內)。如果所指定檔名的檔案已經存在的話,會被覆寫。此選項產生出來的檔案,可以用在「增強」破解模式上。
範例:john –makechars:ownchars 。
  -show︰顯示目前已經破解出的密碼。因為JOHN.POT檔案內並不儲存「帳號」資料,所以使用時你應該同時輸入相對應的密碼檔。
範例:john –show passwd。
  -test︰測試目前機器執行John各類型密碼破解時的速度。
範例:john –test。
  -users:[-]LOGIN|UID [,..] ︰只破解某個「帳號」的密碼,如只針對root或擁有root權利UID=0的使用者。(若在LOGIN|UID名稱前加上“-”符號則是相反,表示不要破解這個「帳號」的密碼)。
範例:john –i:all –users:root passwd。
  -groups:[-]UID[,..] ︰只破解某個「群組」內用戶的密碼。(若在UID名稱前加上“-”符號則是相反,表示不要破解這個「群組」內用戶的密碼)。
範例:john –i:all –groups:100。
  -shells:[-]SHELL [,..] ︰和上面兩個參數一樣,這個選項是只針對所有可以使用shell的用戶進行破解密碼工作,對其它用戶不予理會。(若在SHELL名稱前加上“-”符號則是相反,表示不要破解可以使用這個SHELL的用戶的密碼)。指定SHELL時,你可以省略絕對路徑,如參數「-shells:csh」就會包含「/bin/csh」或「/usr/bin/csh」等路徑,但如果你指定的是「-shells:/bin/csh」則只會包含「/bin/csh」這個SHELL名稱。
範例:john –i:all –shells:csh passwd。
  -salts:[-]COUNT︰只破解「salts」大於「COUNT」的帳號的密碼,可以使你得到較佳破解速度(所謂「salts」是指UNIX拿來作為「密碼」編碼基礎的單位)。舉例來說,你可以先只破解某部分用戶的密碼「-salts:2」來獲得較佳的速度,然後有時間時才破解剩餘用戶的密碼「-salts:-2」。
範例:john –i:all –salts:2 passwd。
  -format:NAME與-savemem:LEVEL︰這兩個參數是有關John內部運作的設定,跟破解本身沒有直接關係,所以省略不介紹。
破解方法介紹
  步驟1︰ 破解懶人密碼。拿到密碼檔後,我們首先使用John the Ripper破解「懶人」的密碼。所謂「懶人」,就是「帳號」與「密碼」都是使用相同字串的那種人。

使用John the Ripper方法如下:

指令: john 〔密碼檔檔名〕

範例: john passwd

這個方法John the Ripper會以用戶的帳號做簡單的變化來破解。例如某用戶的帳號是lazybone的話,John the Ripper會用lazybone、lazybone0、lazybone123…等等之類簡單的變化來猜使用者的密碼。下圖為passwd密碼檔中的懶人密碼︰
 
  步驟2︰ 使用字典檔破解密碼。有許多人選擇密碼可能會用自己的生日或一些特定字眼來作為密碼,例如:「0326」、「cook」、「super」…等等,所以我們只要掌握「人性」的變化,將常用的字眼鍵入到檔案內變成「字典檔」,就可以使用它來破解。

使用John the Ripper方法如下:

指令: john -wordfile:[字典檔檔名] –rules [密碼檔檔名]

範例: john -wordfile:bigdict.dic -rules passwd

上述指令,有關「-wordfile」參數部分,應該一目瞭然,知道這是指定John the Ripper採用字典檔的檔名,而後面「-rules」參數是告訴程式也採用步驟一類似的變化,從字典檔內取出的字,除了直接比對是否符合以外,也像剛才一樣將字加上規則性變化與密碼檔比對是否相符。下圖為passwd密碼檔中需要用到字典的密碼︰
 
  步驟3︰ 使用暴力法(Brute Force)破解密碼。如果你遇到一個相當勤勞、記性又好的人,會用「1cj2po#8」之類的字串當作密碼的話,前面兩個方法就可能無法適用了。 「理論上」來講,暴力法一定可以破解出所有的密碼(除非不存在,不然所有可能都試過了一定可以找到),但是它卻有個很大的問題,就是「時間」。 以UNIX的DES編碼法為例,它密碼欄位只使用8個字元,而鍵盤上可以輸入的字元變化全部有95個,所以用暴力法破解的話就需要:

(95^8+95^7+95^6+95^7+95^6+.....+95^1) = 6.70478095451712e+15(次)

而以配備AMD K6-2 350MHz這顆CPU為例,使用John the Ripper大概一秒鐘可以嘗試最多28030個可能,如圖:
 
  所以暴力法破解密碼需要時間為:

6.70478095451712E15/28030
= 2.392E11(秒)
= 66444493.54(小時)
= 2768520.56(天)
= 7584.99(年)

以PentiumⅢ 1000MHz來講,假設它比AMD速度快100倍好了,你破解一個密碼也要75.8年。上述時間是以最遭糕的狀況為例,一定要試到最後一個「可能」才找到密碼,而真實世界裡,當然會因為密碼不同而產生不同的破解時間,這牽扯到機率與命中率的問題。看圖中破解出的密碼「0875」,剛好可以作為借鏡,各位千為不要只以「數字」(如生日)作為密碼。因為八個字元的數字變化,頂多也只有11111111種而已,以AMD K6-2 350MHz CPU來講,大概6分鐘就可以破解出了,所以你可以看到為什麼申請ISP的帳號時,一定會看到密碼是數字與英文字交錯組合而成,這道理就在於此。
 
單元實驗
  請用pwdump3工具來dump自己電腦的使用者密碼檔,再利用John The Ripper試著破解密碼。當你的密碼越簡單(如密碼為 test 或 apple 等),越容易被破解出來。
 

 
 


電子商務資訊安全 AntiVirus Ad-Aware AntiSpam PGP SMIME Tripwire SSH Firewall Packet Sniffering Port Scanning Dictionary Attack Vulnerability Scanning VPN 電子商務導論 XML導論