Programiranje

Kačji ugrizi: Pazite se zlonamernih knjižnic Python

V začetku tega tedna sta bili dve knjižnici Python, ki je vsebovala zlonamerno kodo, odstranjeni iz indeksa paketov Python (PyPI), uradnega repozitorija Pythona za tretje pakete.

To je zadnja inkarnacija problema, s katerim se srečujejo številne sodobne skupnosti za razvoj programske opreme, in postavlja pomembno vprašanje za vse razvijalce, ki se zanašajo na odprtokodno programsko opremo: Kako lahko ljudem omogočite, da svojo kodo prispevajo v skupno shrambo za ponovno uporabo , ne da bi ti skladi postali vektorji za napade?

Uradne repozitorije neodvisnih knjižnic za jezike, ki se izvajajo kot odprtokodni projekti, kot je Python, so varne. Toda zlonamerne različice knjižnice se lahko hitro širijo, če jih ne potrdite. In dejstvo, da večino takšnih jezikovnih repozitorijev nadzirajo prostovoljci, pomeni, da je toliko oči usmerjeno v oči in prispevki ne dobijo vedno potrebnega pregleda.

Dva zlonamerna paketa, ki sta bila ta teden odstranjena iz PyPI, sta uporabila trik, imenovan »tipkarsko čepenje«, to je izbira imen, ki so dovolj podobna pogosto uporabljenim paketom, da jih lahko zdrsnete, in lahko povzroči nenamerno namestitev, če nekdo napačno vpiše želeno ime. Poskus maškaracije kot dateutil in meduze paketi - ki se uporabljajo za manipulacijo objektov datuma in časa Python in izvajanje približnih ujemanj v nizih - so bili zlonamerni paketi poimenovanipython-dateutil in meduze (z veliko začetnico I namesto s prvo črko L).

Ko je nameščen,python-dateutil in meduze se obnašal natanko tako kot izvirniki - razen poskusov ukradbe osebnih podatkov od razvijalca. Paul Ganssle, razvijalec na dateutil ekipa, je za ZDNet povedala, da je bil verjetni razlog za napad ugotoviti, na katerih projektih je žrtev delala, da bi kasneje začela napade na te projekte.

Knjižnice Python na splošno spadajo v dva tabora - module, ki sestavljajo standardno knjižnico, dobavljeno z izvajalnim okoljem Python, in tuje pakete, ki gostujejo na PyPI. Medtem ko so moduli v standardni knjižnici natančno pregledani in strogo preverjeni, je PyPI veliko bolj odprt, saj skupnosti uporabnikov Pythona omogoča prosto prispevanje paketov za ponovno uporabo.

Na PyPI so že bili najdeni zlonamerni projekti. V enem primeru so zlonamerni paketi stisnili ogrodje Django, osnovno različico spletnega razvoja v Pythonu. Vendar se zdi, da problem narašča.

"Kot član varnostne ekipe Python (PSRT) vsak teden prejemam poročila o tiskanju ali zlonamernih paketih," je povedal Christian Heimes, glavni razvijalec Pythona, na Pythonovem uradnem forumu za razvoj. "(Zabavno dejstvo: Ta mesec so bile v PyPI štiri e-poštne niti o zlonamerni vsebini, danes pa je 4. december.)"

Fundacija za programsko opremo Python ima načrte za zaščito PyPI pred zlorabo, vendar bo potreben čas, da se popolnoma uvede. V začetku tega leta je ekipa Pythona za uporabnike PyPI, ki nalagajo pakete, uvedla dvofaktorsko overjanje. To zagotavlja zaščito za razvijalce, ki naložijo na PyPI, zaradi česar je težje ugrabiti njihove račune in naložiti zlonamerno programsko opremo v njihovem imenu. Vendar ne obravnava tipkarskega počepa ali drugih zlorab skupnega.

Druge pobude vključujejo iskanje načinov za odpravo teh težav z avtomatizacijo. Delovna skupina v okviru Fundacije za programsko opremo Python, ki se ukvarja z embalažo, je prejela nepovratna sredstva podjetja Facebook Research za ustvarjanje naprednejših varnostnih funkcij PyPI, kot je kriptografsko podpisovanje paketov PyPI in samodejno zaznavanje zlonamernih datotek (namesto delovno intenzivnega ročnega pregledovanja).

Nekaj ​​zaščite ponujajo tudi tretje osebe. Reversing Labs, neodvisno varnostno podjetje, je po pregledu celotnega repozitorija za sumljive formate datotek odkrilo napad na osnovi PyPI. Toda v podjetju priznavajo, da takšni pregledi niso nadomestilo za notranje preverjanje. "Da bi močno zmanjšali možnost gostovanja zlonamerne programske opreme," so zapisali v podjetju, "vsem takim skladiščem koristi neprekinjena obdelava in boljši postopek pregleda."

Najboljša rešitev, kot se zavedajo Pythonovi razvijalci, mora priti od znotraj.

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