Otázka:
Jak by mělo být kontrolováno zabezpečení zdrojového kódu?
tonychow0929
2018-10-26 17:37:57 UTC
view on stackexchange narkive permalink

Jak zkontrolovat, zda zdrojový kód projektu typu open-source neobsahuje žádný škodlivý obsah? Například v sadě souborů zdrojového kódu s celkem 30 000 řádky mohou existovat 1–2 řádky obsahující škodlivé prohlášení (např. Volání curl http: // ... | bash ).

Tyto projekty nejsou dobře známé a nelze předpokládat, že jsou dobře udržovány. Zabezpečení opětovného použití jejich zdrojového kódu projektu se proto nemůže jednoduše spoléhat na slepou důvěru (i když by měl existovat rozumný předpoklad, že by bylo bezpečné stahovat, ověřovat, kompilovat a spouštět přímo cmake , není to ' Zní to dobře slepě použít libovolnou knihovnu hostovanou na GitHubu.

Někdo navrhl, abych filtroval zdrojový kód a odstranil všechny znaky, které nejsou ASCII a neviditelné (kromě některých triviálních, jako jsou zalomení řádků). Poté otevřete každý soubor v textovém editoru a ručně načtěte každý řádek. To je trochu časově náročné, vyžaduje plnou pozornost, když jsem si přečetl kód, a vlastně docela náchylné k chybám.

Proto hledám obecné metody, jak takové situace zvládnout. Jsou například k dispozici nějaké standardní nástroje? Na co musím věnovat pozornost, pokud opravdu musím číst ručně?

K dispozici jsou statické analyzátory kódu.Podívali jste se na tyto nástroje?
Ano, ale mám (možná špatný) pocit, že používají černou listinu namísto whitelistingu (něco jako antivirus), který má malé využití na speciálně vytvořený škodlivý obsah.
SAST není jen nástroj na základě černé listiny založený na vzorcích, je také složitější.Zralé řešení SAST shromažďuje každý vstup a každý výstupní bod aplikace, vytváří mezi nimi všechny možné datové toky a poté analyzuje každý interní bod, kde by mohlo dojít k nechtěnému chování, jako je neoprávněná manipulace s daty.
například pro balíčky v jazycích npm / python, kde je vývojáři používají záměrně v desítkách, neexistuje žádný kontrolní proces, který by komponentu přijal.Aby byla otázka méně obecná, zaměřujete se na konkrétní ekosystém?
Ne tak docela.Pracuji hlavně s mobilními aplikacemi a bude použito mnoho programovacích jazyků, např.Swift (s Xcode), Java (na straně Androidu i na straně serveru), C ++ (sdílený kód), JavaScript, Dart atd.
Spusťte projekt v ukotvitelném kontejneru s nejmenšími schopnostmi, které by měl potřebovat, a udělte mu oprávnění upravovat pouze soubory, které by měl potřebovat.Pokud program selže kvůli chybě oprávnění, ověřte, o co se pokouší.Pokud je žádost oprávněná, povolte ji a pokračujte, jinak jste našli něco podezřelého.
To je dobrá otázka.Teorie by se dala udělat hodně, ale v praxi většina lidí pouze věří závislostem.Jedním problémem je, že nejlepší analyzátory kódu jsou drahé komerční nástroje.I když pro některé jazyky existují dobré bezplatné nástroje.Jemný rozdíl mezi určením, zda je kód škodlivý, nebo zda má bezpečnostní chyby.
Všimněte si, že [může být docela těžké] (https://en.wikipedia.org/wiki/Underhanded_C_Contest) určit, zda některý software obsahuje škodlivý obsah, pokud se autor pokusil jej skrýt.
Rychlé řešení, které jste uvedli, by nezohledňovalo záludnou taktiku, jako kdyby byl kód kódován na základně 64 nebo jiným způsobem zakryt.
@Bakuriu Chtěl bych dodat, že můžete `` sledovat`` všechna systémová volání a zjistit, zda se neděje něco rybího, například aplikace, která se pokouší o stat soubory, o které se nemusí starat.
Pět odpovědi:
odo
2018-10-26 17:51:22 UTC
view on stackexchange narkive permalink

Existují automatizované a manuální přístupy.

Pro automatizaci můžete začít s lgtm - bezplatným analyzátorem statického kódu pro open source projekty a poté přejít na složitější řešení SAST .

Ruční - můžete vytvořit model ohrožení vaší aplikace a spustit jej pomocí OWASP ASVS kontrolního seznamu počínaje od jeho nejdůležitějších částí. Pokud je ve vašem modelu ohrožení smazání souboru, stačí zavolat něco podobného: grep -ir 'os.remove (' .

Je samozřejmě lepší kombinovat oba.

„Pokud je ve vašem modelu ohrožení smazání souboru - stačí zavolat něco takového:` grep -ir 'os.remove (' `.": Ačkoli když udělám `os ['remove'] (` `Okamžitě jsem porazilvy.
@The6P4C Pak je to další problém důvěry v konvenci kódování, i když škodlivý kód je často záměrně maskovaný.
@The6P4C jistý, pokud byl `grep` můj jediný nástroj.Ale není to tak snadné, protože vaše zneužití bylo detekováno pomocí `os \ W + remove \ W +`.
@odo pak bych udělal `os.unlink` nebo dokonce` shutil.move`.Proti mírně odhodlanému útočníkovi nemá tento přístup žádnou šanci.
Ángel
2018-10-26 21:04:40 UTC
view on stackexchange narkive permalink

Buď to děláte sami, nebo důvěřujete někomu jinému

Stejně jako u většiny věcí v životě, musíte to udělat sami nebo tomu důvěřovat. Zde důvěryhodný zahrnuje jak to, že nemá zákeřné úmysly, a zároveň dostatečně kompetentní ke správnému provedení úkolu.

Například můžete své daně podat sami nebo důvěřujte daňovému poradci, který tak učiní (který by se vás nejen neměl pokoušet podvádět, ale také umět daně podat!).

Pokud jste společnost, dělat to sám bude ve skutečnosti provádět jeden nebo několik vašich zaměstnanců, kterým zase musíte důvěřovat.

Třetí strana, které důvěřujete, nemusí být jediná osoba. Může to být Microsoft Windows Development Team nebo hlavní vývojáři Wordpressu .

Pokud jde o zabezpečení zdrojového kódu, chcete, aby byl expert nejen v pořádku -význam, ale také znalý bezpečného kódování programu / hledání potenciálních bezpečnostních problémů, které tam mohou být.

(plus několik dalších hraničních systémů, pokud jsou považovány za celek, např. jejich kód nebyl ohrožen, když jej nahráli do úložiště, nebo e-mail od vašeho zaměstnance s uvedením výsledků nahrazených škodlivým hackerem uvnitř vaší sítě, který říká, že aplikace byla v pořádku)

Budete potřebovat vyhodnotit své možnosti, posoudit rizika spojená s každou z nich a zvolit cestu, která nejlépe vyhovuje vašim zájmům (a rozpočtu!).

Kdybych měl zkontrolovat zabezpečení zdrojového kódu blogu, který při použití Wordpressu bych obecně věřil , že původní kód byl v pořádku1¹ a zkontroloval rozdíly mezi oficiální verzí a použitou verzí. Pokud byl web napaden, bylo by mnohem jednodušší jej zjistit.

¹ Zjevně kontrola seznamu změn novějších verzí, pokud používal zastaralý.

Pokud by to však vyvinul synovec majitele, očekával bych, že tam najdu spoustu zranitelností, a doporučil bych důkladnou kontrolu všeho.

Ve vašem případě byste měli vyhodnotit riziko a náklady na vývoj ekvivalentu této knihovny (vezměte v úvahu, že šance na problémy ve vašem interním produktu není ani nulová, a bude to záviset - mimo jiné - na kvalitě zúčastněných osob) versus riziko a náklady na audit a používání této knihovny.

Nyní mohou existovat polehčující faktory, které audit zjednoduší. Například pokud může nedůvěryhodný kód běžet v izolovaném virtuálním počítači, může to stačit na to, že nepotřebujete další auditování (i zde důvěřujete implementaci virtuálního počítače). Nebo může být považováno za dostatečné auditovat části tohoto programu, které běží jako root.

Při auditu knihovny mohou analyzátory kódu pomoci upozornit na problematické části (jak bylo uvedeno), ale aby to bylo možné zvážit abych byl čistý, vlastně bych nechal někoho přečíst a porozumět kódu, i když povrchně.

Například schopnost odstranit libovolné soubory není škodlivá per se . Musíte pochopit program, abyste věděli, zda to má smysl.

Opět jde o hrozby a rizika pro to, co děláte. Pokud vás zajímá pouze exfiltrace dat z knihovny, může stačit filtrování připojení na firewallu. Pokud vám jde o to, aby knihovna mazala důležité soubory (a z nějakého zvláštního důvodu nemůžete takové povolení odmítnout), můžete jednoduše rolovat hromadou kódu, který provádí pouze matematické výpočty. Pokud tato knihovna spočítá parametry pro vypuštění rakety ... no, měli byste se také ujistit, že tyto výpočty jsou také správné!

DawnPaladin
2018-10-27 03:04:28 UTC
view on stackexchange narkive permalink

Použít službu

Existují profesionální služby, jako jsou Black Duck a Whitesource, které kontrolují závislosti open-source.

Black Duck nekontroluje kód závislostí OS.Zkontrolují, zda závislost (ve verzi dodávané s vaší aplikací) obsahuje ** známou ** chybu zabezpečení uvedenou v databázích CVE.Pokud se mýlím, opravte mě.Zdroj: Pravidelně dostávám zprávy BlackDuck od jednoho z našich zákazníků.
Také bych uvedl / doporučil VeraCode (veracode.com).Nejsem přidružený.Moje společnost to použila jednou.Skenuje vaše neoblomené binární soubory, včetně kódu OSS, na známé vzorce zranitelnosti.Příkazy shellu, použití starých kryptografických algoritmů, vyvolání „domů z domova“ a další vzory jsou skenovány společně s chybami XSS, CSRF atd.
symcbean
2018-10-26 18:12:56 UTC
view on stackexchange narkive permalink

Pokud používáte kód někoho jiného, ​​pak jste víceméně vydáni na milost a nemilost mechanismům integrity, které poskytují správci - to platí pro veškerý software, nejen pro otevřený zdroj.

Pro komerční i zabalený software s otevřeným zdrojovým kódem (tj. rpm, deb atd.) podepisování kódu je běžné - to dokazuje, že jste obdrželi to, co vám podepisovatel zamýšlel dostávat.

V případě zdrojového kódu se obvykle používají kontrolní součty . Ale to má malou hodnotu, pokud kontrolní součet není přístupný z jiného zdroje, ze zdrojového kódu.

Všimněte si, že jsou určeny pouze k ochraně před útokem typu MITM na aplikaci.

použijte libovolnou knihovnu hostovanou na GitHubu

... v takovém případě mají všechny soubory / verze hash publikovaný na Githubu - aby to bylo možné rozvrátit, musel by útočník podvrátit samotný Github nebo účet Github správce - mohu na Githubu vidličku cokoli, ale pak mi je přičítáno a původní úložiště není ovlivněno, pokud správce nepřijme mé žádosti o stažení. Můžete mít větší důvěru v integritu Githubu než správci kódu, v takovém případě by bylo rozumné důvěřovat hash publikovaný na stejném místě jako zdrojový kód.

Žádný z těchto mechanismů neposkytuje ochrana proti malwaru, který byl vložen před provedením ověření integrity.

Pokud máte přístup ke zdrojovému kódu, máte možnost jej zkontrolovat (což je mnohem jednodušší než zkoumat spustitelné soubory) a k tomu existují automatizované nástroje, například ty, které navrhuje odo.

Ultimate Hawk
2018-10-29 14:41:24 UTC
view on stackexchange narkive permalink

Statické analyzátory nebudou vždy fungovat

Kontroly os.remove kdekoli v kódu nebudou fungovat na všechny útočníky, protože některé mohou jednoduše udělat eval (" os "+". odebrat ") . Lze vytvořit i pokročilejší regulární výrazy, ale útočník může svůj kód kdykoli zkomplikovat:

  x = "r" eval ("os." + X + "emove" )  

Teoreticky je vzhledem k problému se zastavením nemožné zkontrolovat všechny potenciální stavy a zjistit, zda je vyvoláno nebezpečné systémové volání.

Útočník se může vyhnout statickému analyzátory kódu poměrně snadno vytvořením malého tlumočníka pro vlastní jazyk, který provádí škodlivé operace.

Spuštění kódu uvnitř kontejneru / honeypotu

Veškerý software nakonec interaguje s operačním systémem. Spuštěním softwaru uvnitř kontejneru nebo honeypotu s strace nebo podobným nástrojem můžete zjistit, jaké informace se program nebo knihovna pokouší shromáždit.

Pokouší se program zjistit ven, pokud běží uvnitř kontejneru? Čte soubory, které se nemají, nebo je dokonce upravuje? Pak můžete mít škodlivý software.

To nebude vždy fungovat, může být nutná manuální kontrola

Některý škodlivý kód se spouští pouze v konkrétní data, ale alespoň vy Uvidíme, že k tomu máte přístup. Odtamtud můžete zkontrolovat, kde se to v kódu stane a proč.



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 4.0, pod kterou je distribuován.
Loading...