Programmēšana

Čūskas kodumi: Sargieties no ļaunprātīgām Python bibliotēkām

Šīs nedēļas sākumā divas Python bibliotēkas, kurās bija ļaunprātīgs kods, tika noņemtas no Python Package Index (PyPI) - Python oficiālās trešo pušu pakotņu krātuves.

Tas ir pēdējais problēmas iemiesojums, ar kuru saskaras daudzas mūsdienu programmatūras izstrādes kopienas, un tas rada svarīgu jautājumu visiem izstrādātājiem, kuri paļaujas uz atvērtā pirmkoda programmatūru: kā jūs varat ļaut cilvēkiem pievienot savu kodu kopīgajā krātuvē atkārtotai izmantošanai , bez šiem repo kļūt par vektoriem uzbrukumiem?

Kopumā oficiālās trešo personu bibliotēku krātuves valodām, kas darbojas kā atvērtā pirmkoda projekti, piemēram, Python, ir drošībā. Bet ļaunprātīgas bibliotēkas versijas var ātri izplatīties, ja tās netiek pārbaudītas. Fakts, ka lielāko daļu šādu valodas krātuvju uzrauga brīvprātīgie, nozīmē, ka tikai tik daudz acu skatiens ir vērsts, un ieguldījumi ne vienmēr saņem nepieciešamo pārbaudi.

Divās ļaunprātīgās paketēs, kas šonedēļ tika noņemtas no PyPI, tika izmantots triks, ko sauc par “drukas kļūdām”, t.i., izvēloties nosaukumus, kas ir pietiekami līdzīgi parasti izmantotajām pakotnēm, lai paslīdētu uz paziņojumu, un tas var izraisīt nejaušu instalēšanu, ja kāds nepareizi ievada iecerēto nosaukumu. Mēģinājums maskēties kā datums un medūzas paketes - ko izmanto, lai manipulētu ar Python datetime objektiem un attiecīgi veiktu aptuvenas atbilstības virknēm, - tika nodēvētas kaitīgās paketespython-dateutil un jeIlyfish (ar lielo burtu I, nevis pirmo mazo burtu L).

Kad tas ir uzstādīts,python-dateutil un jeIlyfish rīkojās tieši tāpat kā oriģināli - izņemot mēģinājumus nozagt personas datus no izstrādātāja. Pauls Ganssle, programmas datums komanda, sacīja ZDNet, ka iespējamais uzbrukuma iemesls bija noskaidrot, kādos projektos cietušais strādāja, lai vēlāk sāktu uzbrukumus šiem projektiem.

Python bibliotēkas parasti ietilpst divās nometnēs - moduļi, kas veido standarta bibliotēku, kas piegādāta kopā ar Python izpildlaiku, un trešo pušu pakotnes, kas mitinātas PyPI. Lai gan standarta bibliotēkas moduļi tiek rūpīgi pārbaudīti un rūpīgi pārbaudīti, PyPI pēc konstrukcijas ir daudz atvērtāks, ļaujot Python lietotāju kopienai brīvi dot paketes atkārtotai izmantošanai.

Ļaunprātīgi projekti PyPI tika atrasti jau iepriekš. Vienā gadījumā ļaunprātīgas pakotnes drukas kļūdas izraisīja Django ietvars, kas ir Python tīmekļa izstrādes pamatelements. Bet šķiet, ka problēma kļūst arvien aktuālāka.

"Kā Python drošības komandas (PSRT) loceklis katru nedēļu saņemu ziņojumus par drukas kļūdām vai ļaunprātīgām paketēm," sacīja Python galvenais izstrādātājs Kristians Heimes oficiālajā Python attīstības diskusiju forumā. "(Jautrs fakts: šajā mēnesī PyPI bija četri e-pasta pavedieni par ļaunprātīgu saturu, un šodien tas ir tikai 4. decembris.)"

Programmai Python Software Foundation ir plāni, kā aizsargāt PyPI pret ļaunprātīgu izmantošanu, taču to pilnīgai ieviešanai būs vajadzīgs laiks. Šī gada sākumā Python komanda ieviesa divu faktoru autentifikāciju kā iespēju PyPI lietotājiem, kuri augšupielādē paketes. Tas nodrošina aizsardzības slāni izstrādātājiem, kuri augšupielādē PyPI, tādējādi apgrūtinot viņu kontu nolaupīšanu un ļaunprātīgas programmatūras augšupielādi viņu vārdā. Bet tas nenovērš drukas kļūdas vai citus kopēju pārkāpumus.

Citas iniciatīvas ietver to, kā meklēt veidus, kā kompensēt šīs problēmas ar automatizāciju. Darba grupa Python programmatūras fondā, kas apstrādā iepakojumu, ir saņēmusi Facebook Research stipendiju, lai izveidotu modernākus PyPI drošības līdzekļus, piemēram, PyPI pakotņu kriptogrāfisko parakstīšanu un ļaunprātīgu augšupielāžu automātisku noteikšanu (nevis darbietilpīgu manuālu skrīningu).

Zināmu aizsardzību piedāvā arī trešās puses. Reversing Labs, neatkarīga drošības firma, atklāja uz PyPI balstītu uzbrukumu pēc visa krātuves skenēšanas par aizdomīgiem failu formātiem. Bet uzņēmums atzīst, ka šādi skenējumi neaizstāj iekšējo pārbaudi. "Lai ievērojami samazinātu ļaunprātīgas programmatūras mitināšanas iespēju," rakstīja uzņēmums, "šādiem krātuvēm būtu noderīga nepārtraukta apstrāde un labāks pārskatīšanas process."

Labākajam risinājumam, kā to zina paša Python izstrādātāji, jābūt no iekšpuses.

$config[zx-auto] not found$config[zx-overlay] not found