密碼安全 弱密碼 滲透測試 密碼攻擊 開源工具

細說密碼攻防原理 滲透測試工具THC-Hydra演練字典攻擊

密碼加鹽雜湊好安全? 紅隊破解登入過程示範

本文將針對密碼安全的議題進行探討,了解「密碼」是如何儲存在系統當中,並且扮演駭客的角色,運用開源滲透測試工具THC-Hydra進行密碼攻擊的實作,藉此了解駭客的攻擊流程與手法,以加強自身對密碼保護的意識。

在這個科技蓬勃發展的數位化時代,使用密碼來保護個人的帳戶資訊、檔案以及防止未授權的存取是再正常不過的事情,然而,大多數的人都會貪圖方便而使用非常簡單的密碼或是本來就搭載的「預設密碼」。事實上,在享受方便的同時,對於駭客而言他們也會感到方便。

此外,隨著時間軸的推進,人們生活的模式逐漸從現實轉移至電腦、手機等充斥網際網路的世界中。從早期,網際網路主要用來相互通訊,一直到現在火熱的社群媒體平台、充斥娛樂的影音串流平台,甚至到了現代的E化政府、網路銀行的出現等等,這些豐富人們生活的應用都早已見怪不怪。

在這些各式應用的共通點當中,就是皆需要一個能夠表示自己在這個網際網路世界中身分的帳戶,得以管理自己的身分,確保在網路世界中的所作所為都是由自己的意願完成而並非別人。而在存取內容與取得操作權限的前提就是須要透過「密碼」進行身分驗證,而「密碼」應當是只有自己或是自己所授權的對象才可以取得,若過於簡單的密碼,彷彿就是在為駭客敞開大門。

而未經授權的存取,這個概念好比是「被附身」一般,可不想要別人在自我「意識」不屬於自己的狀態下做了許多不是出自本意的事情,而當回過神來卻完全不記得發生了什麼。未經授權的存取也是一樣,人們將許多個人資訊或是資產儲存在電腦、手機或是雲端服務中,不希望這些個人資訊或資產不翼而飛,也不希望別人在未經自己同意之下,暗地中使用自己的身分去做其他操作。因此,在數位化的網際網路世界中,保護自己的身分免於「被附身」,所能做的第一件事就是妥善管理與加強自身的「密碼」。

本文將探討「密碼安全」的議題,了解當今常見的弱密碼類型以及安全的密碼原則與建立良好習慣,並學習駭客對於密碼的攻擊手法,並使用開源滲透測試工具「THC-Hydra」進行密碼攻擊實作,從攻擊的實作中了解應該如何加強自我防禦的意識。

背景知識說明

首先,介紹有關於密碼的各種背景知識。

系統密碼儲存方式

在網際網路各式各樣的系統或平台中,平台方不免需要將使用者的帳號與密碼以某種形式儲存在系統後台或資料庫中,以利使用者進行登入驗證。可以思考一個問題,如果平台方其實可以得知自己的密碼,這件事是否聽起來有些匪夷所思?事實上,個人的密碼儲存在伺服器內,也應該具備一定的安全性,一個最大的原則就是不得將個人的密碼以「明碼」的形式儲存在伺服器後台的資料庫內,而應當是先將密碼經過HASH以及加鹽(Salted)之後,再將產生的訊息摘要(Digest)進行儲存,否則除了可能要擔心帳號密碼被平台的員工一目了然外,更要擔心如果公司、平台系統遭駭,就可能導致所有用戶的帳號密碼都被大剌剌地公布在網路上。

HASH

HASH是一種單向不可逆的函數(One-way Function),在一般的HASH標準中,當把訊息、文數字等內容代入HASH中做計算,它將輸出一段固定長度的訊息摘要(Digest),並且無法將其回推成原本的訊息內容,且當輸入的訊息或內容只要有輕微幅度的更動,就會使得輸出的訊息摘要毫不相同。基於這個特性,便可透過HASH來確保訊息的完整性(Integrity),同時也確保儲存在系統中的密碼無法被還原,但卻可以達成密碼驗證的目的。

在圖1中,將HASH的機制比擬成一台果汁機,當將各式不同的水果丟入果汁機中,所榨成的果汁就是HASH後輸出的訊息摘要,但並沒有辦法將這杯果汁還原成本來的水果,並且只要輕微地調整其成分(例如將大寫的M更改為小寫的m),就會使產生出來的結果毫不相同。因此,只需要驗證訊息摘要,就能驗證輸入的密碼是否相符合。

圖1  HASH概念示意圖。

因此,在伺服器後台的資料庫中,當密碼以訊息摘要的形式進行儲存,便能一定程度地提供密碼保存的安全性。對此,可以試著針對一些系統或平台進行測試,在登入時點選「忘記密碼」選項,並觀察該系統對於此事件的處理方式,倘若系統平台能夠直接將自己的密碼完整、原封不動地顯示給自己,這就表示這個平台對於密碼保存的方式可能存在問題,而正確的方式應當是先驗證使用者的身分,再提供一組臨時密碼或是直接讓使用者重設密碼,而不應該能夠復原原始密碼,因此若發現系統平台是這種狀況,則更應留意自己在該平台中的所有個人資訊,並進行資安通報。

密碼加鹽(Salted)

密碼加鹽是一種提高密碼安全性的方案,亦即系統在儲存密碼時,會隨機亂數產生一段字串穿插在使用者的密碼當中,再進行HASH,可以有效提高密碼被破解的困難度。當進行密碼驗證時,會先將使用者輸入的密碼加上鹽巴後再進行HASH,並與資料庫中儲存的Digest進行驗證比對。若當密碼不幸遭到駭客破解時,駭客將會拿到鹽巴與密碼的明文混合字串,至於明文的密碼中哪些部分是鹽巴、哪些部分是密碼,就會成為駭客的下一項任務了。因此,對於鹽巴本身,以及加鹽的規則也都需要妥善地保存,且需要具有隨機亂數、包含特殊符號、長度不固定、穿插位置隨機等等特性來加強密碼的安全性,圖2為資料庫儲存密碼的示例(最佳情況是也將鹽巴與訊息摘要分開儲存)。

圖2  資料庫儲存密碼的方式。

密碼在哪裡?密碼的保存位置與常見弱點

一個使用者經常忽略也最容易導致密碼洩漏的最大源頭來自於「瀏覽器」,其中,Google Chrome與Firefox都屬人們最常使用的瀏覽器。使用者時常因為圖個方便就讓瀏覽器記住密碼,以便再重新瀏覽一些網站時不用再重新喚起自己的記憶來輸入密碼,但不曾想過這個機制其實是一個造成密碼外洩的破口之一,當電腦不小心落入別人的手中,別人可能不用10秒鐘就可以把所有的常用密碼看得一清二楚。接下來,就來看一看到底儲存了多少個人密碼在瀏覽器當中。

Google Chrome

打開Google Chrome瀏覽器,並輸入「chrome://settings/passwords」,映入眼簾的就是曾經在瀏覽器中按下記住密碼的各項紀錄,當針對特別一個網站點選進去時,只需要點選「眼睛」圖示,就可以直接明確地看見儲存在瀏覽器中的密碼,如圖3所示。

圖3  點選眼睛的圖示即可看見密碼。

Firefox

在Firefox中,則是在瀏覽器輸入「about:logins」,就可以導向至記錄密碼的頁面,並且同樣只需要點選眼睛的圖示就可以看見明文的密碼,概念與前述的Google Chrome形式雷同。

除了這兩個瀏覽器外,其他常用的瀏覽器也都具備類似的功能,因此對於「記住密碼」功能的使用更應格外注意與小心,同時也應該留意離座時將電腦鎖定,避免其他人直接操作或存取自己的電腦、手機等設備。

Linux作業系統的使用者帳戶與密碼儲存位置

Linux是一個開源的作業系統,作為企業愛用也常被運用於架設網站、系統平台的作業系統,因此在Linux系統中經常存放許多企業機密資訊與架設系統的重要資料和配置檔案,對於駭客而言,這些是非常具有價值的目標。同時,有不少企業為了方便員工連入公司內網,並透過安全殼層協定(Secure Shell,SSH)進行遠端操作,在Linux系統中,使用者帳號與密碼被分別存放在以下的檔案中。使用者帳戶資訊放在「/etc/passwd」內,而使用者密碼的訊息摘要資訊則放在「/etc/shadow」,以Kali Linux中的「kali」使用者為例,如圖4所示,框選處即為該使用者帳戶的訊息摘要。

圖4  Kali Linux中「/etc/shadow」內的密碼訊息摘要資訊。

Windows的使用者帳戶密碼儲存位置

在Windows作業系統中,使用者帳戶資料存放在「C:\Windows\System32\config\SAM」,其中的檔案「SAM」,全名為Security Account Manager,是Windows作業系統中的登錄檔案,它儲存了本地端使用者名稱與密碼的資料,一般來說,使用者沒有辦法直接開啟與查看該檔案,但卻可以透過一項Windows密碼破解工具mimikatz(https://github.com/ParrotSec/mimikatz)加以破解及取得正在使用中的使用者帳戶與密碼。

常見的弱密碼與不良習慣

無論是哪一個國家的人,只要是人,對於密碼的設定往往都覺得越方便且能夠簡單記住越好,因此不外乎會使用一些個人、學校、公司資訊混雜至密碼中,以方便自己記住密碼,甚至將帳號密碼寫在便條紙上,就貼在辦公桌上或隨處可見的地方。事實上,只要任何帶有規則的密碼,使其有跡可循,都會有遭到破解的風險。表1中描述了密碼中常包含的個人資訊類型。

在表1中所描述的個人資訊類型中,往往為了符合密碼長度要求,還會使用其他的內容予以填補,造就了大家習慣使用「先英文後數字」或是「先數字後英文」的密碼組合類型,也因此默默地建立了人們的常見密碼文化,在表2中列出了常見的密碼組合類型。當今大部分的系統中會要求密碼需要加上特殊符號,而當站在人們習慣的角度思考時,很簡單地就可以推論出人們會將特殊符號加在密碼的開頭或結尾,而這些跡象都有可能成為惡意駭客進行密碼分析的一絲線索。

駭客的密碼攻擊手法

駭客經常使用的密碼攻擊手法,大略分成以下四種。

鍵盤側錄

鍵盤側錄(Keystroke Logging)是一種常見用於記錄使用者按鍵輸入的軟體,原本是出於合法目的而設計,可以用於錄製按鍵與建立自動化腳本,或記錄使用者與程式的互動來提升使用者體驗。不過,有許多惡意駭客將軟體改寫並設計成木馬程式,用來在暗中記錄使用者的帳號與密碼以達到密碼竊取的目的。除此之外,也不應當在自己的電腦設備以外輸入帳號密碼等資訊,以避免遭到鍵盤側錄盜取密碼。

暴力破解攻擊

暴力破解攻擊(Brute Force Attack)是一種常見且最為耗時的密碼攻擊手法,亦即透過破解程式以窮盡各種可能的密碼組合,對於那些只有數字組成或是不長的英數字組合的密碼具有良好的破解效果。而目前市面的破解工具中也與時俱進,如Hashcat,提供駭客破解密碼時能夠進行進階篩選功能,像是能夠指定密碼字元數、指定第幾位碼大寫或小寫、是否包含特殊符號等功能,藉此縮小密碼破解的範圍,減少不必要的密碼嘗試,以提高破解的可能性。

密碼噴灑攻擊

密碼噴灑攻擊(Password Spray Attack)是一種常見的密碼攻擊手段,與暴力破解並不相同,其在於透過一些常見的弱密碼或是預設密碼列表,針對大量使用者帳戶做為目標進行破解,而暴力破解通常是針對單一目標使用來窮舉密碼的可能性。雖然密碼噴灑攻擊不針對特定的使用者,但是一旦攻擊成功仍會造成重大的威脅。

密碼字典攻擊

密碼字典攻擊(Password Dictionary Attack)是利用給定的密碼列表進行密碼嘗試與破解,在密碼列表中通常會收錄各式系統的常見密碼,而密碼列表中收錄的密碼也會因不同的目標系統而有所不同,例如部分系統限制使用者密碼需要包含英數字、大小寫與特殊符號時,可以於密碼列表中排除所有不滿足規則的密碼,來減少不必要的密碼嘗試。

如何防範密碼攻擊與提高安全性

想要防範密碼攻擊,並提高安全性,可參考以下幾個方法。

遵循密碼原則建立高強度密碼

對於越長與越亂的密碼組合,越不容易被暴力破解、噴灑攻擊與字典攻擊等手法破解,因此密碼最好能夠滿足8~12位以上,包含大小寫字母與特殊符號,並盡可能減少使用容易被取得的個人資訊作為密碼的部分字元,以降低遭到破解的風險。

多因素驗證機制(MFA)

在現今的各式系統中,已經逐漸將多因素驗證驗證機制(Multi-factor authentication,MFA)導入應用,一般來說,常見的驗證因素包含下列的三種類型:

‧Something you are:指的是那些與生俱來且能表達身分的特徵,例如指紋、虹膜、人臉等等。

‧Something you have:指的是那些被授權的身分所能取得的物品,例如實體的鑰匙、感應磁扣、智慧卡等

‧Something you know:只有自己所知道的東西,如密碼、PIN碼等。

在進行身分驗證時,結合超過兩種以上的驗證機制,就可以稱為多因素驗證機制,是當今非常廣泛使用的提升安全的方案。

一次性密碼(OTP)

在登入系統或存取資源時,除了輸入本身的帳戶密碼外,同時也由系統所配發的具時限一次性密碼(One-Time Password,OTP)進行認證,常見的類型包括運用手機簡訊接收驗證碼或是透過電子郵件接收驗證碼的方式,這種方法對於抵禦密碼攻擊具有良好的效果,也是當今非常常用的方案之一。

定期修改密碼與避免使用重複密碼

養成定期修改密碼與避免使用重複密碼的習慣能夠提升自身帳戶的安全性,不過基於人們較於懶惰或是貪圖方便的特性,對於一般人而言較難達成,也更容易忘記密碼。然而,當一組密碼遭到盜取時則可能導致多個系統平台的密碼也遭到洩漏,因此這個習慣至少需要建立在那些未搭載MFA或是OTP的系統平台中,避免駭客輕易得到帳戶的存取權限,並造成多個系統平台的潛在威脅。

運用工具檢驗密碼是否安全

運用線上工具能夠檢測自己的密碼是否安全,並且可以計算透過相關的密碼攻擊類型所須耗費的預估時間。不過,即便有許多平台提供相關的檢測功能,但仍不建議將自己的完整密碼輸入至密碼安全檢測系統中,因為使用者無法絕對地確認平台擁有者是否會蒐集使用者所輸入的密碼進行後續的分析,或是被用於建立密碼字典列表等等。如「https://www.comparitech.com/privacy-security-tools/password-strength-test/」網站就提供了線上密碼安全的檢測工具使用。

情境模擬與實作演練

阿浩和小宇與在瀚宙科技擔任系統工程師的職位,平時負責系統建置與網站架設的工作,並使用Linux作業系統進行維運。在平時工作習慣中,小宇時常因為記憶力不好且非常懶惰,使用了非常簡單的密碼作為Linux系統的登入密碼。

身為同事的阿浩也時常提醒小宇不可以把密碼設置得過於簡單,否則可能會有被入侵的資安風險,不過小宇總是不當一回事並不理會阿浩的建議,於是阿浩決定給小宇一個深刻的經驗,運用駭客攻擊的手法取得小宇的系統密碼,藉此讓小宇知道將密碼設置得過於簡單時可能會發生的資安危機。

阿浩首先在他自己的電腦進行相關系統與軟體的環境準備,安裝了以下的軟體與系統:

‧VirtualBox(https://www.virtualbox.org/)

‧Kali Linux(https://www.kali.org/get-kali/)

‧Metasploitable 2(https://sourceforge.net/projects/metasploitable/)

‧THC-Hydra(https://github.com/vanhauser-thc/thc-hydra)

安裝完成後,接著阿浩在他的Kali Linux作業系統中準備密碼破解工具THC-Hydra,準備鎖定小宇的Linux系統密碼進行破解,在進行密碼破解之前,阿浩先仔細閱讀使用的方式與支援的協定,THC-Hydra的說明如下所述。

THC-Hydra是一個非常著名且強大的開源滲透測試工具,適用於非常多種不同協定的密碼字典攻擊,且支援在Linux、Windows/Cygwin、Solaris、FreeBSD/OpenBSD與Mac OS等作業系統上執行,表3列出了THC-Hydra所支援部分常用的網路協定,完整的支援協定可見THC-Hydra的文件。此外,THC-Hydra僅提供資安學習使用,不應隨意使用或進行惡意攻擊,以免構成違法行為。

THC-Hydra屬於一種命令列的破解工具,須透過指令來達成密碼破解的目的,在表4中列出了在執行密碼破解時的常用指定參數。

圖說

阿浩在閱讀完相關的使用說明後,首先鎖定小宇的Linux主機系統的IP位址與對應的使用者名稱,已知小宇的使用者名稱是「ponyweng」,主機位址是192.168.77.118(情境中使用Metasploitable 2模擬小宇的電腦系統),接著阿浩使用安全殼層協定(SSH)進行密碼破解。

阿浩在開啟Kail Linux以後,首先準備內建在系統中的常用密碼本,從工作列搜尋「Wordlists」並開啟,接著找到著名的密碼本「rockyou.txt」,其收錄了超過1,400萬組的常用密碼,其操作步驟如圖5與圖6所示。

圖5  內建在Kali Linux中的密碼本Wordlists。
圖6  於Kali Linux Wordlists中的密碼本「rockyou.txt」。

在前置作業準備完成後,阿浩開始使用THC-Hydra對小宇的電腦實施密碼字典攻擊,可以使用以下的參考指令來進行攻擊,若有其他的客製化需求,可以參考表2的常用參數表:

hydra -l [指定使用者名稱] -P [指定的 密碼本路徑] [目標主機IP與協定或Url]

接著,在Kali Linux的終端機輸入指令,如圖7中①處所示,其指定使用者的名稱為「ponyweng」,指定的密碼本為「rockyou.txt」,使用的破解協定是SSH,而目標主機IP是「192.168.77.118」,指令內容如下:

hydra -l ponyweng -P rockyou.txt ssh://192.168.77.118

待Hydra執行一段時間後,於終端機成功取得小宇Linux主機的系統密碼,如圖7②處所示,所得到的密碼為「passw0rd」,接著阿浩試圖運用SSH協定來存取小宇的系統資源與權限。然後,在終端機輸入ssh指令(格式為ssh [使用者名稱]@[主機IP]):

ssh ponyweng@192.168.77.118

接著,輸入THC-Hydra所取得的密碼「passw0rd」,最後阿浩成功地運用遠端登入了小宇的系統,並可以隨意地瀏覽小宇的所有檔案與擁有檔案權限,遠端SSH登入的操作畫面如圖8①處所示。在成功登入系統以後,如圖8②處所示,阿浩偷偷地把小宇的一些個人檔案給刪除。事後,發現個人檔案不見的小宇,因著急而跑來詢問同事阿浩,最後阿浩才向小宇提及這是他藉由資安操作的刻意警惕,並把刪除的檔案還原,此事才得以落幕。在經過此事件說明以後,雖然小宇一開始感到不解為何阿浩如此的處理方式,但知道阿浩的良善動機後也得以釋懷,並從這事件中體認到將密碼設置過於簡單所導致的致命高度資安危機。

圖7  THC-Hydra的操作畫面與取得破解的密碼。
圖8  將破解的密碼並運用SSH進行登入操作。

結語

本文探討了密碼安全議題,也學習了駭客針對密碼的各式攻擊手法,最後於情境演練中運用開源滲透測試工具THC-Hydra來模擬駭客對於密碼的攻擊方式進行實作,以此了解駭客攻擊思維藉以提升自我防禦意識。

<本文作者:社團法人台灣E化資安分析管理協會(ESAM, https://www.esam.io/)中央警察大學資訊密碼暨建構實驗室 & 情資安全與鑑識科學實驗室(ICCL and SECFORENSICS)1998年12月成立,目前由王旭正教授領軍,並致力於資訊安全、情資安全與鑑識科學, 資料隱藏與資料快速搜尋之研究,以為人們於網際網路(Internet)世界探索的安全保障(https://hera.secforensics.org/)。>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!