Musím ocenit smysl pro humor autorů Javy a JavaScriptu, když se po dvaceti letech vrátili na místo činu a dohodli se, že když do obou jazyků přidávají operátor šipky, musí být v jednom jazyce šipka s jednou čárkou a ve druhém se dvěma. Tradice je potřeba zachovávat, a když to má způsobovat zmatení, je potřeba mást i nastupující generace.
Ne. Musíš používat ověřené knihovny. To znamená takové, které už nějakou dobu vyvíjí nějaký důvěryhodný vývojář s nějakou historií. To je úplně stejné jako u jakékoli knihovny. PyPI je prostředek, jak centrálně spravovat velké množství knihoven, ale to neznamená, že to je zásadně bezpečnější nebo méně bezpečné než třeba stahovat si ty knihovny z GitHubu.
Pokud je ale možné nějaký wheel udělat nakažený a "ekvivalentní" zdrojáky jsou čisté, je tam prostor pro řešení.
Seznam těch "nakažených" balíčků neobsahuje nic, o čem bych osobně slyšel. Pár věcí se snaží číhat na překlep (tikinters atd.), zbytek je binec.
Ta tvoje komunita se to vubec nemusi dozvedet, a to klidne nikdy. Znam osobne pripady kdy byl projekt predany nekomu jinemu, a to sakumprask se vsimvsudy - vcetne mailu, klicu atd atd.... ten nekdo dal pokracoval ve vyvoji, z pohledu uzivatele se vubec nic nezmenilo, jen par zasvecenych vedelo, ze to uz neni puvodni autor. Jeste vetsi posusnani je to na projektech, kde je to vic lidi. Ty lidi se prubezne menej, a kdykoli muze kdokoli z nich vlozit neco ne uplne kaleho, a nikdo nebude denne analyzovat kazdy patch.
S OSS to nema spolecnyho zhola nic.
nemožnost si ověřit autenticitu toho, co je v pypi je jednoznačně problém pypi. Nedává žádný nástroj, jak lze garantovat či ověřit, že daný balíček je postavený z konkrétního zdrojového kódu.
Tohle znamená, že v produkcích nemůžeme přímo používat pypi repositáře, ale musí se vše klonovat interně, mít nad tím nějaký proces kontroly a pak to pustit do aplikací.
Jiste ... schvalne ju?
root.cz ...
ajax.googleapis.com
cloudflare.com
googlesyndication.com
seznam.cz
performax.cz
...
Mam pokracovat? Jakej je v tom rozdil? Jo aha, to co sosa web je vlastne (jeste furt) primo zdrojak, ze? Takze je 100% jisty ze to dela presne to, co je v tom zdrojaku, ze?
Chmm ... a ? Jo aha, vysledek je ale uplne stejnej.
Co nechapes na tom ze je uplne jedno jestli mas zdrojak a binarku nebo jen zdrojak, vysledek je presne stejnej.
Nikdo nikdy neni schopen nijak overit, ze soucasti neni nejakej cerv.
Kdyzbys to delat chtel, tak jiste vis, ze takovej proces zabere roky, a ty pak po tech letech nasadis ty roky stary knihovny, protoze u nich mas rekneme solidni pravdepodobnost, ze v nich nic neni. A i kdyz si budes chtit sam pro sebe auditovat pidiknihovnu, tak si ji muzes napsat sam, protoze to bude o rad rychlejsi nez zkoumat cizi vytvor.
Vidím rozdíl v čase detekce: build time, startup, runtime.
Zjistit, že je máte v aplikaci backdoor až když běží je leckdy prostě pozdě a škoda už mohla být napáchána. Nepomůže ani stage, ani tam nechcete nechat těžit kryproměny. A taky může trvat pěkně dlouho, než se aplikace prozradí podezřelou interakcí, takže to před produkcí (testování, stage) ani nemusí nastat.
V neposlední řadě nechcete spoléhat na to, že útočníci zrovna nejsou o krok napřed před vašimi detekčními nástroji.
Řešení je nenechat ty binárnky uploadovat autorem, ale buldit je transparentně ze zdrojáků tak, že budeme moci ověřit, co balík dělá, pohledem do kódu.
Jak lidská tak strojová detekce je u kódu snazší, a nevyžaduje spuštění. A ne, argument že to většina lidí nedělá neobstojí, protože množství lidí, kteřý by kontrolovali ty binárnky, je ještě menší...
Ale však tá škodná nie je v zdrojáku, ale v binárke (Wheels)... zároveň FOSS neznamená väčšiu bezpečnosť, ale väčšiu možnosť overiť si bezpečnosť...U PyPi je problém ako už zaznelo že binárky sa nahrávajú osobitne, namiesto toho aby sa buildovali zo samotných poskytnutých zdrojákov... Ale to nie je chyba FOSS.. to je chyba len samotného PyPi...
Vždyť v článku je jasně napsáno, že ve zdrojovém kódu ten malware vůbec není a je jen v binárních balíčcích vedle. Takže prohlídkou zdrojových souborů se to vůbec nedalo najít a chyba rozhodně není v otevřeném přístupu ke zdrojákům.
Je to chyba konkrétní platformy, která umožňuje nahrát zvlášť zdrojáky a pak něco spustitelného, co mohlo vzniknout jakkoliv a ne sestavením z těch zdrojáků.
Ne, že to volá nějakou binárku, ale že vedle těch zdrojáků leží i nějaká zkompilovaná binárka. A na mou duši, na psí uši je to zkompilované z těch zdrojáků a ne úplně z něčeho jiného. Přísahám na zdraví svých dětí ;)
Takže problém není v open source, ale že PyPi si v některých aspektech na pořádné open source jen hraje.
pokud se bavíme o open source (GPL, MIT, Apache), tak se bavíme o zdrojovém kódu a nikoliv o výsledku nějakého buildu (binárky), to už má/může mít jinou licenci a podmínky použití a třeba binárky pod GPL nelze ani rozumně distribuovat.
Ano, open source negarantuje nic z pohledu bezpečnosti (je špatně to tvrdit), ale dává ti otevřené dveře si nad tím tu bezpečnost postavit a ověřit si jí, vybrat si tu stranou, které budeš věřit. Zatímco u closed source ti zbývá jen ta důvěra v jednu stranu.
"Vždyť v článku je jasně napsáno, že ve zdrojovém kódu ten malware vůbec není"
Ehm.. ve zdrojovem kodu samozrejme je a byt musi, jak jinak by asi vznikla binarka. Problem je uplne jinde, publikovany zdrojovy kod neodpovida publikovane binarce.
Coz je neco, co obecne nema zadne reseni. Protoze dokazat, ze binarka a zdrojak si odpovidaji se nijak obecne neda, dokonce ani rekomplaci ne, protoze ta binarka bude typicky jina pri kazde kompilaci ze? Staci k tomu velmi malo.
Pokud si pamatuju, tak na to tema i tady nejaky ten clanek je, a zajistit, ze z konkretnich zdrojaku vypadne vzdy exaktne stejna binarka vyzaduje spoustu prace a velmi obsahlou dokumentaci na tema nastaveni prostredi.
nikoliv, binárku ti umím napsat i přímo ve strojovém kódu, kdysi jsme tak některé části také sestavovali po instrukcích.
Tady je ale asi myšleno, ve zdrojovém kódu samotného balíčku a ne někde u autora toho malware, že?
Ano, dá se dokázat, že binárka a zdroj si odpovídají, hledej "reproducible builds", to je tahounem poslední doby a kódy se tomu uzpůsobují. Jiná cesta asi nebude, problém nakažených binárek se zvětšuje.
Třeba takový nixos je celý postavený nad tím, že každé opakované volání má shodný výsledek, dostupných balíčků v něm je už ke sto tisícům vč. spousty python balíčků a teď nově se otevírá i spolupráce s php
https://phpconference.com/web-development/leveraging-nix-php-ecosystem/ a slidy tady https://github.com/drupol/ipc2023/releases/tag/v23-79efbb4c24ab0d42c73906d16233a79d9659c5ca)
openSUSE pokračuje ve svém tažení, https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/thread/VWWVEPYEUBBMZN6K7VGUU5KKC7CBSSM2/, 87 % balíčků mají reproducible build.
Debian už pokořil hranici 90 % na většině platformách, https://tests.reproducible-builds.org/debian/reproducible.html
Kdyby to někoho zajímalo, tak na sledování změn v pypi používáme diffoscope.org, teď nově je i oficiálně "stable" na pypi repositáře. Mám chuť na to už nějakou dobu napsat článek a téma více osvětlit, třeba mě tohle donutí se tomu věnovat.
To mi nepřipadá moc optimistické, při průchodu minovým polem vědět, že tam nějaká bezpečná cestička musí být.
Navíc v kompibaci s typickým AI projektem, kterej těch knihoven jsou nižší desítky, s jejich dependencemi vyšší desítky, navíc "díky" zvykům v Pythoním ekosystému dost šasto velmi specifické na kompatibilní verze... Tohle už je dávno nad možnostmi běžného smrtelníka.