Programovanie

Uhryznutie hadom: Pozor na škodlivé knižnice Pythonu

Začiatkom tohto týždňa boli z Python Package Index (PyPI), oficiálneho úložiska Pythonu pre balíky tretích strán, odstránené dve knižnice Pythonu obsahujúce škodlivý kód.

Je to posledná inkarnácia problému, ktorému čelí mnoho moderných komunít pre vývoj softvéru, a kladie dôležitú otázku pre všetkých vývojárov, ktorí sa spoliehajú na softvér s otvoreným zdrojovým kódom: Ako môžete umožniť ľuďom prispieť svojim vlastným kódom do spoločného úložiska na opakované použitie bez toho, aby sa z týchto repozitárov stali vektory útokov?

Oficiálne úložiská knižníc tretích strán pre jazyky, ktoré fungujú ako open source projekty, napríklad Python, sú celkovo bezpečné. Ak však nebudú začiarknuté, škodlivé verzie knižnice sa môžu rýchlo šíriť. A skutočnosť, že na väčšinu takýchto jazykových úložísk dohliadajú dobrovoľníci, znamená, že je treba dávať pozor len na toľko očí a príspevky nie vždy dostanú potrebnú kontrolu.

Dva škodlivé balíčky odstránené z PyPI tento týždeň používali trik s názvom „typo squatting“, t. J. Vyberali si názvy, ktoré sú dosť podobné bežne používaným balíkom, aby si to všimli, a ktoré môžu viesť k náhodnej inštalácii, ak niekto nesprávne napíše zamýšľaný názov. Pri pokuse o maskovanie ako dateutil a medúzy balíčky - slúžia na manipuláciu s objektmi datetime v Pythone a na vykonanie približnej zhody na reťazcoch - škodlivé balíčky boli pomenovanépython-dateutil a medúza (s veľkým písmenom I namiesto prvého malého písmena L).

Po nainštalovanípython-dateutil a medúza sa správali presne ako originály - okrem pokusu o krádež osobných údajov vývojára. Paul Ganssle, vývojár v odbore dateutil tímu, povedal agentúre ZDNet, že pravdepodobným dôvodom útoku bolo zistiť, na akých projektoch obeť pracovala, s cieľom podniknúť neskoršie útoky na tieto projekty.

Knižnice Pythonu všeobecne spadajú do dvoch táborov - moduly, ktoré tvoria štandardnú knižnicu dodávanú s runtime Python, a balíčky tretích strán hostené na PyPI. Zatiaľ čo moduly v štandardnej knižnici sú dôkladne skontrolované a dôsledne preverené, PyPI je dizajnom oveľa otvorenejší, čo umožňuje komunite používateľov Pythonu voľne prispievať balíčkami na opakované použitie.

Škodlivé projekty sa na PyPI našli už predtým. V jednom prípade spôsobili preklepy škodlivých balíkov squat v rámci Django, čo je základná súčasť vývoja webových aplikácií v Pythone. Zdá sa však, že problém je čoraz naliehavejší.

"Ako člen bezpečnostného tímu Pythonu (PSRT) dostávam každý týždeň správy o preklepoch alebo škodlivých balíkoch," uviedol Christian Heimes, hlavný vývojár Pythonu, v oficiálnom vývojovom diskusnom fóre Pythonu. „(Zábavný fakt: Tento mesiac boli na serveri PyPI štyri e-mailové vlákna o škodlivom obsahu a dnes je to iba 4. decembra.)“

Softvérová nadácia Python má na stole plány na ochranu PyPI pred zneužitím, ale ich zavedenie si bude vyžadovať čas. Začiatkom tohto roka nasadil tím Python dvojfaktorovú autentifikáciu ako voľbu pre používateľov PyPI, ktorí nahrávajú balíčky. To poskytuje vrstvu ochrany pre vývojárov, ktorí nahrávajú na PyPI, čo sťažuje únos ich účtov a nahrávanie škodlivého softvéru na ich meno. Nerieši však preklepy ani iné druhy zneužitia.

Medzi ďalšie iniciatívy patrí hľadanie spôsobov, ako tieto problémy vyrovnať automatizáciou. Pracovná skupina v rámci Python Software Foundation, ktorá sa zaoberá balením, získala grant od spoločnosti Facebook Research na vytvorenie pokročilejších bezpečnostných funkcií PyPI, ako je kryptografické podpisovanie balíkov PyPI a automatická detekcia škodlivých nahrávok (namiesto manuálneho náročného manuálneho skríningu).

Istú ochranu poskytujú aj tretie strany. Reversing Labs, nezávislá bezpečnostná firma, objavila útok založený na PyPI po vykonaní kontroly podozrivého formátu súborov v celom úložisku. Spoločnosť však pripúšťa, že takéto skenovania nenahrádzajú interné preverovanie. „Spoločnosť by výrazne znížila možnosť hostenia škodlivého softvéru,“ napísala spoločnosť, „že takýmto úložiskám by prospelo nepretržité spracovanie a lepší proces kontroly.“

Najlepšie riešenie, ako si uvedomujú vlastní vývojári Pythonu, musí prichádzať zvnútra.

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