新型密碼竊取軟體AcridRain的分析
前言
AcridRain是一個用C / C ++編寫的新密碼竊取程式,在2018年7月11日左右出現在黑客論壇上。這種惡意軟體可以竊取來自多個瀏覽器的憑據、cookie以及信用卡資訊。它還可以轉儲Telegram和Steam會話,劫持Filezilla最近的連線。你可以在下面的圖片中,看到AcridRain的完整說明。
其中,交易資訊裡包含2名賣家和1名開發人員的地址,如下表所示。
技術細節
現在,我將重點分析我們在 Hybrid-Analysis 中找到的第一個AcridRain樣本(7b045eec693e5598b0bb83d21931e9259c8e4825c24ac3d052254e4925738b43)。快速檢視二進位制檔案,我們可以看到它既沒有實施封裝,也沒有進行拆分(strip)處理。幸虧,還有一些除錯資訊可用,如PDB路徑c:\users\igor1\source\repos\stealer ar\release\stealer ar.pdb(ar是AcridRain的縮寫),另外,我們還發現了許多助於我們進行逆向分析的字串。
初始化過程
在對受害者裝置上的資料進行竊取之前,AcridRain需要將自身設定為正常執行,以逃避安全檢測。首先,它會檢索有關環境變數的一些資訊,比如:
1.臨時路徑
2.程式檔案路徑
檢索完成後,它將通過檢查登錄檔值(如Steam path、Telegram full path到可執行檔案的名稱和可執行檔案中圖示的資源索引)繼續獲取程式路徑。
完成後,它將生成Telegram的會話字串,然後測試它們是否存在(見下圖)。
最後,AcridRain會通過建立一個包含所有被盜資料的ZIP檔案,完成初始化過程。這個ZIP在臨時資料夾中建立幷包含時間戳資訊,例如:C:\Users\[UserName]\AppData\Local\Temp\2018-08-20 23-10-42.zip (程式碼如下圖)。
在Google Chrome實施竊取的過程
AcridRain會首先竊取位於Google Chrome的憑據、Cookie和信用卡(如下圖所示)。 AcridRain針對的瀏覽器如下:Amigo, Google Chrome, Vivaldi, Yandex browser, Kometa, Orbitum, Comodo, Torch, Opera, MailRu, Nichrome, Chromium, Epic Privacy browser, Sputnik, CocCoc以及Maxthon5。
在搜尋可疑的字串時,我們發現了一些非常有趣的行,正是根據其中的提示,它們才解開了AcridRain是如何竊取和壓縮憑據資訊的。我們可以在下圖中看到惡意軟體的使用名為 browser-dumpwd-master 這一現成的專案。其中的 PoC ,它會告訴了我們如何從Chrome和Firefox竊取憑據,但其中並沒有並沒有miniz.h和zip.c的內容。根據其中的教程,我們順利地將Chrome / Firefox中的憑據程式碼複製貼上了過來。
Chrome憑據的竊取
其實竊取憑據非常簡單。根據DumpChromeCreds(0x4017F0)的給定輸入,惡意軟體將選擇使用者資料的適當目錄。只需根據給定的dumpchromecred (0x4017F0)輸入,AcridRain就會自動選擇適合於使用者資料的目錄。例如,如果輸入0x1,那麼惡意軟體將使用目錄C:\Users\[USER]\AppData\Local\Google\Chrome\User Data\Default,如果輸入的是0x3,則目錄就會變為 C:\Users\[USER]\AppData\Local\Yandex\YandexBrowser\User Data\Default。另外,為了竊取方便,AcridRain給每類瀏覽器都定義了一個固定值,如下所示。
為了能夠識別瀏覽器所對應的憑據,AcridRain會建立特定的標頭。這些標頭和憑據會儲存在%TEMP%資料夾中的檔案result.txt中。在選擇了要攻擊的瀏覽器後,將在結果檔案中寫入對應的標頭。
建立標頭後,惡意程式會呼叫dump_chromesql_pass (0x401BC0)來轉儲所有憑據。此時,SQLite資料庫的登入資料將被複制到之前所選擇的使用者資料目錄中的templogin中,這樣做的目的是為了防止資料庫被鎖定。然後,資料庫才會被開啟,攻擊者使用SQLite(程式碼如下)請求其中的資料。
正如我們在前面的螢幕截圖中看到的那樣,sqlite3_exec使用回撥來轉儲憑據。函式chrome_worker(0x401400)用於從表登入中檢索特定資訊。對於表中的每一行內容,惡意軟體將儲存以下幾個欄位:origin_url,username_value和password_value。由於密碼使用的是CryptProtectData加密,因此要獲取純文字,就必須使用CryptUnprotectData函式。如果一切順利,則所有竊取的資訊都將存在如下所示的檔案中。
在確認竊取完每個瀏覽器的所有憑據後,AcridRain將對cookie進行轉儲。
對Chrome Cookie進行轉儲
Cookie的轉儲是由函式DumpChromeCookies(0x402D10)完成的,由於在專案browser-dumpwd中沒有可以竊取cookie的函式,因此我們複製貼上了之前用於竊取憑據的程式碼,並將其修改為可以竊取cookie的函式。用於儲存被竊資訊的檔案是result_cookies.txt,就像竊取憑據的函式一樣,它也有一些標頭。但是,正如我們在下圖中看到的那樣,我們也對其中的一些標頭進行了修改。
函式dump_chromesql_cookies (0x403300)將建立一個名為templogim(sic)的SQLite cookie副本。然後發出以下SQL請求: SELECT host_key, name, path, last_access_utc, encrypted_value FROM cookies;,這個SQL查詢使用回撥chrome_cookies_worker(0x401E00,如下圖所示)。
然後,與憑據函式一樣,cookie竊取者將使用CryptUnprotectedData解密encrpted_value列,並使用Netscape格式將所有竊取內容儲存到result_cookie .txt中。
一旦cookie被儲存,惡意軟體就會接著竊取信用卡資訊。
竊取Chrome上的信用卡資訊
用於轉儲信用卡的函式是DumpChromeCreditsCards (0x402970),與cookie一樣,轉儲信用卡資訊的函式也是根據憑據竊取函式而修改而來的。被盜的資料儲存在result_CC.txt檔案中(始終位於%TEMP%目錄中)。而其中的標頭則用於標識轉儲的資訊具體是來自哪個瀏覽器。一旦資訊被寫入標頭後,AcridRain就會呼叫dump_chromesql_cc (0x4031D0),它會生成名為templogik(sic)的Web資料副本。載入此資料庫後,AcridRain將執行以下查詢。
SELECT credit_cards.name_on_card, credit_cards.expiration_month, credit_cards.expiration_year, credit_cards.card_number_encrypted, credit_cards.billing_address_id, autofill_profile_emails.email, autofill_profile_phones.number, autofill_profile_names.first_name, autofill_profile_names.middle_name, autofill_profile_names.last_name, autofill_profile_names.full_name, autofill_profiles.company_name, autofill_profiles.street_address, autofill_profiles.dependent_locality, autofill_profiles.city, autofill_profiles.state, autofill_profiles.zipcode FROMautofill_profile_emails, autofill_profile_phones, autofill_profiles, autofill_profile_names, credit_cards
對信用卡執行的回撥是chrome_credit_cards_worker(0x402080),檢索完所有值並解密信用卡號後,資訊將被儲存在result_CC.txt中,格式如下。
在Firefox上竊取資訊的過程
用於從Firefox竊取憑據的函式DumpFirefoxCreds(0x403600)也是複製貼上的browser-dumpwd的程式碼,只是稍作了一下修改。AcridRain的第一個行為就是從CnC下載額外的庫。這些DLL來自Mozilla,它們用於解密Firefox儲存的憑據中的資訊。要聯絡伺服器並請求這些庫,只有使用libcurl 7.49.1。這些DLL儲存在名為Libs.zip的ZIP檔案中的CnC根目錄下。下載此檔案後,它將儲存在%TEMP%目錄中,目錄名稱為32.zip。
你可以 點此 下載ZIP,在這個專案中,我們可以找到前面在字串選項卡(miniz.h和zip.c)中看到的兩個丟失的檔案。它由5個DLL組成,分別是freebl3.dll,mozglue.dll,nss3.dll,nssdbm3.dll和softokn3.dll。
在Firefox上竊取憑據的過程
被AcridRain竊取的Firefox憑據儲存在Chrome的result.txt檔案中,這和專案所描述的過程是一樣的。首先,AcridRain在報告檔案中寫入與目標瀏覽器關聯的標頭。然後,再竊取憑據。目前該專案針對的瀏覽器包括Firefox,Waterfox,Pale Moon,Cyberfox,Black Hawk和K-Meleon。
函式dump_Firefox_passwords(0x403E60)會首先從nss3.dll載入有用的函式。這些函式是NSS_Init,NSS_Shutdown,PL_ArenaFinish,PR_Cleanup,PK11_GetInternalKeySlot,PK11_FreeSlot和PK11SDR_Decrypt。
函式被載入後,AcridRain將檢索Profile0的路徑。為此,它會讀取%APPDATA%中相應瀏覽器的profile.ini並提取與Profile0關聯的資料夾的路徑(如下圖所示),這個過程是由GetFirefoxProfilePath(0x403500)完成的。
要獲取憑據,惡意軟體會搜尋兩個檔案,即logins.json和signons.sqlite。JSON由decrypt_Firefox_json(0x403930)解析,這其中就包含browser-dumpwd專案的parson.c程式碼。從JSON檢索的值分別是hostname,encryptedUsername和encryptedPassword。其中,使用者名稱和密碼由DecryptedString(0x403430)使用nss3.dll中的函式解密。
一旦JSON中的憑據完成轉儲,AcridRain就會執行回撥firefox_worker (0x404180)中的查詢語句SELECT * FROM moz_logins對SQLite資料庫進行查詢。
回撥過程與JSON函式中的操作相同,都會對hostname, encryptedUsername, encryptedPassword進行檢索,然後將竊取的資訊轉儲到報告檔案中。
與Chrome上竊取憑據的過程不同,惡意軟體在憑據竊取完以後,是不會在Mozilla瀏覽器中自動開始竊取Cookie資訊或信用卡資訊的。
資訊壓縮過程
轉儲完所有憑據後,惡意軟體會開始對所要傳送的所有TXT檔案和Telegram會話進行壓縮。為此,AcridRain會使用zip_entry_open函式在zip中指定檔案的名稱和位置。例如,zip_entry_open(zip, “result.txt”)將在zip的根目錄新增名為result.txt的給定檔案, zip_entry_open(zip, “Telegram\D877F783D5DEF8C1”) 將在Telegram資料夾中建立檔案D877F783D5DEF8C1 。然後,AcridRain使用zip_entry_fwrite在zip中寫入給定的檔案。
竊取STEAM賬號
竊取Steam會話分兩個階段進行,首先,AcridRain將在steam目錄中轉儲所有ssfn*檔案。
然後,檢索steam目錄配置中的所有檔案。
竊取Filezilla憑據
FileZilla是一種快速、可信賴的FTP客戶端, AcridRain不會針對已儲存在伺服器的憑據,而只會針對最近使用的憑據,即未儲存在伺服器的憑據。為了轉儲這些資訊,AcridRain將把recentserver .xml儲存在FileZilla目錄中。
數字貨幣的竊取過程
盜竊瀏覽器憑據只是AcridRain的惡意功能的一部分,它最大的功能就是竊取數字貨幣。該惡意軟體支援5個軟體:Ethereum, mSIGNA, Electrum, Bitcoin, Armory,這些客戶端的路徑都被定義為0x404EEA,如下所示。
這個過程非常簡單, AcridRain對每個客戶端檔案進行迭代查詢,尋找諸如*.dat的檔案。以下是負責從比特幣客戶端竊取所有貨幣的程式碼:
對於每個客戶端來說,儲存數字貨幣的錢包都儲存在ZIP檔案內的不同目錄中。例如,比特幣錢包儲存在Bitcoin\wallets\資料夾內,以太坊則儲存在ethereum,依此類推。
檢索桌面上的所有文字檔案併發送回後臺
一般來說,竊取資訊的最後一步是轉儲所有文字檔案,對於AcridRain來說,最後一步是檢索桌面上的所有文字檔案。使用的技術與竊取Steam會話或數字錢包的技術相同(詳見下文)。
在竊取完所有資訊後,惡意軟體會將報告檔案傳送給CnC。此時,ZIP檔案使用帶有ID引數的POST請求傳送。假設這個ID用於將檔案傳送給伺服器上的正確使用者,而用於傳送這些資訊的程式碼位於0x405732,如下所示。
以下是在Hybrid-Analysis沙箱生成的上傳報告的HTTP流量。
清理檔案,擦除攻擊痕跡
傳送完所有資料後,惡意軟體將刪除所有建立的檔案,然後自動退出。刪除的檔案是32.zip,result.txt,mozglue.dll,nss3.dll,nssdbm3.dll,softokn3.dll,freebl3.dll,result_cookies.txt和result_CC.txt。
除錯日誌
在分析AcridRain樣本過程中,我們發現了一個有趣的事情,其中存在奇怪的列印日誌,我們可以在dump_Firefox_password函式中看到一個很好的示例。
我們可以看到其中採用的語言是用英語和斯拉夫語混合而成的。我們將斯拉夫語翻譯過來,比如:
tut ebanaya oshibka???(тут ебаная ошибка): Is a fucking mistake here??? ili tut???(или тут): or here ??? ya ee nashol (я её нашол): I have found it
如果我們執行惡意軟體時將這些翻譯過來的語句重定向到檔案中,則會得到以下日誌。
AcridRain的版本迭代過程分析
2018.7.29的版本變化
在2018.7.29,我們對AcridRain進行了更新,發現已經出現了新的版本,該版本與上一版僅僅差了16天。之所以如此肯定,是因為在更新的樣本中,我們發現了使用的可執行檔案(769df72c4c32e94190403d626bd9e46ce0183d3213ecdf42c2725db9c1ae960b)是於2018年7月19日編譯的,具體的分析報告請參考Hybird-Analysis上的 完整分析 。為了找到兩個版本之間的區別,我們使用 YaDiff 工具(IDA資料庫之間的字串傳送)在IDA資料庫和Diaphora之間比較兩個傳送的IDB。可以看到,第一個修改是刪除除錯日誌。
先前用於生成時間戳的報告名稱已更改為針對公共IP的地址了,這是通過請求ipify.org的API並將響應儲存在名稱為body.out的%TEMP%目錄中完成的。
另外,在Chrome實施竊取功能的函式也進行了修改。新版本的AcridRain,不僅可以竊取Chrome的預設配置檔案,還改變了儲存這些資訊的方式。在以前的版本中,所有資料都儲存在三個不同的單獨檔案中,即憑據,cookie和信用卡中。現在,它們會自動儲存在為每類瀏覽器所設定的單獨文字檔案中,例如,Vivaldi.txt,Vivaldi_Cookies.txt和Vivaldi_CC.txt。
既然檔名已更改,那報告ZIP檔案中的目錄也會隨著更改,比如新出現的有一些名為browser,Cookies和CC的特定資料夾。
開發者還更改了Firefox瀏覽器的標頭:
現在,副檔名為* .pfx的檔案也會通過桌面轉儲。這些檔案包含Windows伺服器使用的公鑰和私鑰,它們都被儲存在ZIP內的Serticifate(sic)目錄中。
最重要的是,新版的惡意軟體中又新增了許多新的加密貨幣錢包。現在,AcridRain還支援Doge,Dash,Litecoin和Monero。
2018. 8. 21的版本變化
2018. 8. 21,我們又對AcridRain進行了一次樣本檢測,發現新的版本已出現,是在2018年8月21日編譯的。其中,使用的可執行檔案是3d28392d2dc1292a95b6d8f394c982844a9da0cdd84101039cf6ca3cf9874c1c,可在 VirusTota l上獲得。在這次更新中,程式碼被清理,並且開發者還修復了一些原來的錯誤,例如,由於widechar導致生成Monero路徑的錯誤。 32.zip(從CnC下載的Mozilla DLL)的名稱也已被重新命名為opana.zip。不過,開發者卻忘記在刪除過程中更改名稱了。
Firefox部分的標頭也更改了,現在他們看起來如下。
注意看一下,其中的報告檔名又切換回其原始名稱:[timestamp] .zip。但是,開發人員忘記在刪除過程中刪除一些未使用的檔案,如result_cookies.txt,result_Cookies.txt和result_CC.txt。不過,這些檔案並不會在攻擊過程中發揮什麼作用。
最後,開發者還更改了CnC伺服器地址,現在的IP為141.105.71.82。
Web操作介面的出現
要下載在CnC上傳的ZIP,可以使用這個版本中新出現的Web介面。野外使用的第一個IP是185.219.81.232,其關聯域為akridrain.pro。大約在2018年8月2日,伺服器宕機,但幾天後(大約在2018.8.8),IP 141.105.71.82就會彈出。如果我們使用瀏覽器訪問該面板,就會被重定向到登入頁面。
登入後,你將被重定向到儀表板,攻擊者可以利用其中的一個操作選項,來下載和刪除AcridRain推送的zip檔案。
還有一個可以下載個人資訊的使用者頁面,在下圖中,我們可以看到惡意軟體用來上傳ZIP報告檔案的ID。
2018. 8. 26的版本變化
這個版本的操作面板中添加了兩個新欄位:IP和Quick info(尚未執行)。另外,儀表板中還有一個新的按鈕,用於下載所有ZIP檔案。
總結
準確地說,AcridRain和市場上的所有密碼竊取器一樣。但是,目前它支援的軟體列表非常有限。雖然AcridRain號稱它可以處理大約36種瀏覽器。但正如我們在這篇文章中看到的那樣,支援的瀏覽器數量僅有22種。而對於Firefox來說,AcridRain只能竊取憑據,目前還無法竊取cookie或信用卡資訊。正如本文中所講的那樣,惡意功能有許多都是從Github儲存庫中複製貼上的現成程式碼。此外,根據程式碼中出現的錯誤,我們可以斷定開發人員似乎是個新手。
附錄
你將在 此儲存庫 中,找到AcridRain的Yara規則和IDA IDC(分析資料庫)。