Programování

Snake kousnutí: Dejte si pozor na škodlivé knihovny Pythonu

Začátkem tohoto týdne byly z Python Package Index (PyPI), oficiálního úložiště Pythonu pro balíčky třetích stran, odstraněny dvě knihovny Pythonu obsahující škodlivý kód.

Jedná se o nejnovější inkarnaci problému, kterému čelí mnoho moderních komunit pro vývoj softwaru, což vyvolává důležitou otázku pro všechny vývojáře, kteří se spoléhají na software s otevřeným zdrojovým kódem: Jak můžete lidem umožnit přispět svým vlastním kódem do společného úložiště pro opakované použití , aniž by se z těchto repozitářů staly vektory útoků?

Oficiální repozitáře knihoven třetích stran pro jazyky běžící jako open source projekty, jako je Python, jsou obecně bezpečné. Pokud však není zaškrtnuto, mohou se škodlivé verze knihovny rychle šířit. A skutečnost, že na většinu takových jazykových úložišť dohlížejí dobrovolníci, znamená, že je na pozoru jen tolik očí a příspěvky ne vždy dostanou potřebnou kontrolu.

Dva škodlivé balíčky odstraněné z PyPI tento týden používaly trik zvaný „překlep typu“, tj. Výběr názvů, které jsou dostatečně podobné běžně používaným balíčkům, aby si všimly, a které mohou mít za následek náhodnou instalaci, pokud někdo zadá zamýšlený název. Pokus o maškarádu jako dateutil a Medúza balíčky - používají se k manipulaci s objekty Python datetime a provádění přibližných shod na řetězcích - škodlivé balíčky byly pojmenoványpython-dateutil a medúza (s velkým I místo prvního malého L).

Při instalacipython-dateutil a medúza choval se přesně jako originály - kromě pokusu o krádež osobních údajů od vývojáře. Paul Ganssle, vývojář na webu dateutil týmu, řekl ZDNet, že pravděpodobným důvodem útoku bylo zjistit, na jakých projektech oběť pracovala, aby mohla zahájit pozdější útoky na tyto projekty.

Knihovny Pythonu obecně spadají do dvou táborů - modulů, které tvoří standardní knihovnu dodávanou s běhovým modulem Python, a balíčků třetích stran hostovaných na PyPI. Zatímco moduly ve standardní knihovně jsou důkladně zkontrolovány a pečlivě prověřeny, PyPI je mnohem otevřenější z hlediska designu, což umožňuje komunitě uživatelů Pythonu volně přispívat balíčky k opětovnému použití.

Škodlivé projekty byly na PyPI nalezeny již dříve. V jednom případě škodlivé balíčky překlepaly rámec Django, jádro vývoje webových stránek v Pythonu. Zdá se však, že problém je čím dál naléhavější.

"Jako člen bezpečnostního týmu Pythonu (PSRT) dostávám každý týden zprávy o překlepu nebo škodlivých balíčcích každý týden," uvedl Christian Heimes, hlavní vývojář Pythonu, v oficiálním vývojovém diskusním fóru Pythonu. "(Zábavný fakt: Tento měsíc byly na PyPI čtyři e-mailová vlákna o škodlivém obsahu a dnes je to jen 4. prosince.)"

Python Software Foundation má na stole plány na ochranu PyPI před zneužitím, ale jejich zavedení bude trvat nějakou dobu. Začátkem tohoto roku zavedl tým Pythonu dvoufaktorové ověřování jako možnost pro uživatele PyPI, kteří nahrávají balíčky. To poskytuje vrstvu ochrany pro vývojáře, kteří nahrávají na PyPI, což ztěžuje únos jejich účtů a nahrávání malwaru na jejich jméno. Neřeší však překlepy ani jiné zneužití obyčejných lidí.

Mezi další iniciativy patří hledání způsobů, jak tyto problémy vyrovnat automatizací. Pracovní skupina v rámci Python Software Foundation, která zpracovává obaly, obdržela od Facebooku Research grant na vytváření pokročilejších bezpečnostních funkcí PyPI, jako je kryptografické podepisování balíčků PyPI a automatická detekce škodlivých nahrávek (namísto manuálního testování náročného na práci).

Určitou ochranu nabízejí také třetí strany. Reversing Labs, nezávislá bezpečnostní firma, objevila útok založený na PyPI poté, co provedla kontrolu celého úložiště kvůli podezřelým formátům souborů. Společnost ale připouští, že takové skeny nenahrazují interní prověřování. "Aby se výrazně snížila možnost hostování malwaru," napsala společnost, "všem takovýmto úložištím by prospělo nepřetržité zpracování a lepší proces kontroly."

Nejlepší řešení, jak si vlastní vývojáři Pythonu uvědomují, musí pocházet zevnitř.

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