it-swarm-eu.dev

Jak skenovat Javascript, zda neobsahuje škodlivý kód?

Plánujeme dát možnost psát rozšíření pro komunitu v jazyce Javascript pro náš veřejný webapp a umožnit lidem přizpůsobit své instance aplikace. Problém je v monitorování kvality rozšíření.

Co byste navrhli automatizovat tento proces?

Nebo jak skenovat Javascript, zda neobsahuje škodlivý kód?

V několika slovech bychom chtěli mít nějakou službu, jako je antivirus, která by prověřovala, zda jsou v reálném čase nahrána rozšíření, zda nejsou škodlivá. A pokud zjistí jakýkoli podezřelý kód, vygeneruje varování.

Jakýkoli náznak/rada je vítána! Děkuju.

22
Igor

Jedním z přístupů by bylo definovat bezpečné API pro rozšíření, která mají být použita, deklarováním objektů implementujících toto API v rozsahu provádění rozšíření. Potom vyžadujte, aby byl kód rozšíření zapsán do sandasované verze Javascriptu, takže kód rozšíření může vyvolat pouze bezpečné metody API, které jste definovali, a nic víc.

Pokud tedy vaše API sestávalo z objektu uloženého v proměnné api, pak kód:

var x = api.frob();
x.bar();

by byl povolen rozšířený kód, protože api je součástí vašeho bezpečného API a bezpečné varianty Javascript vám umožňují vyvolat API, které je vystaveno kódu rozšíření.

Kód však:

document.createElement("img");

by to nebylo povoleno, protože document není součástí vašeho bezpečného API.

Při navrhování API se ujistěte, že žádný odkrytý objekt nemá vlastnosti, které by mohly být zneužity škodlivě. Chcete-li poskytnout omezený přístup ke zdroji, použijte uzávěry k vytvoření funkcí, které soukromě odkazují na zdroj.

Existuje několik projektů, které definovaly sandasovanou verzi Javascriptu, kterou byste mohli použít pro tento účel: SES , Caja , ADsafe , FBJS a další. SES a Caja dovolují vývojářům psát kód s nejmenším omezením: je to hodně jako pouhé psaní Javascriptu, s několika drobnými omezeními (např. Žádné eval, žádné with). ADsafe a FBJS vyžadují, aby se vývojář naučil variantu Javascriptu. SES, ADsafe a FBJS mají nejlepší výkon. SES vyžaduje podporu od nejnovějšího modulu Javascript, a proto není kompatibilní s některými staršími webovými prohlížeči. Pokud bude kód rozšíření spuštěn na straně serveru, pak může být nejlepší sázkou SES, protože můžete zajistit, aby byl váš Javascriptový motor aktuální. Pokud bude rozšíření spuštěno v prohlížeči uživatele, měli byste zvážit Caja, pokud rozšíření není kritické pro výkon, nebo ADsafe/FBJS, pokud je.

9
JGWeissman

Neexistuje žádný dobrý způsob, jak kontrolovat Javascript, zda neobsahuje škodlivý kód. To nemůžete udělat. Problém je v tom, že existuje příliš mnoho způsobů, jak může vývojář se zlými úmysly/podvodníky skrýt škodlivé věci ve svém kódu, a nikdy to nebudete moci zjistit.

Anti-virus zde nepomáhá. Musíte trochu porozumět tomu, jak antivirový software funguje a jeho omezení. Zhruba řečeno, takto to funguje. Pokud antivirová společnost detekuje virus infikující mnoho počítačů, analyzuje virus, identifikuje podpis viru (např. Výpis jeho kódu) a zabuduje jej do svého motoru. Pokud se poté váš počítač nakazí kopií této konkrétní kopie (přesně té, kterou analyzovaly), antivirový software detekuje její přítomnost prostřednictvím tohoto podpisu. V důsledku toho je antivirový software užitečný především pouze proti virům, které se široce rozšířily. Stávající antivirový software nezjistí škodlivý kód v nečestném rozšíření pro váš webapp. Antivirový software má některá použití, ale v zásadě je pro váš konkrétní scénář zbytečný.

Musíte uznat, že se nejedná o problém, který můžete vyřešit skenováním kódu. Takže budete muset zvážit nějaký jiný přístup. Jaké jsou vaše možnosti? Existuje několik:

  • Mohli byste se vzdát a přijmout chaos. Mohli byste vytvořit veřejný web pro rozšíření, umožnit uživatelům hodnotit rozšíření a zveřejňovat a prohlížet recenze. Pokud vývojář zveřejní rozšíření nízké kvality, které je buggy nebo selže, uživatelé, kteří si to všimnou, mohou zveřejnit negativní recenzi. (Samozřejmě, pokud je vývojář škodlivý a zveřejní špatné rozšíření, neexistuje žádná záruka, že si to někdo někdy všimne - pokud budete mít štěstí, možná si nějaký uživatel všimne škodlivý kód a ohlásí vám ho, ale je to stejně pravděpodobné, že si to nikdo nikdy nevšimne. To je riziko, které riskujete.)

    Je známo, že má otevřený rozšiřovací systém. Podívejte se například na Android Market nebo Google Chrome Galerie rozšíření nebo Userscripts.org (web rozšíření Greasemonkey)).

  • Mohli byste zavést nějaký druh kontrolního systému, kde odborníci přezkoumávají každé rozšíření před zveřejněním (nebo krátce po jeho zveřejnění) na veřejném webu rozšíření. Pokud chcete pouze zachytit problémy s kvalitou, může stačit nechat odborníky nainstalovat rozšíření a otestovat je a možná spustit nástroj pro vyhledávání chyb v kvalitě kódu, který vyhledá běžné problémy. Pokud chcete také chytit škodlivá rozšíření, musí být recenzentem vývojář, který je schopen číst kód a který čte přes linku po řádku; to je nesmírně únavné a časově náročné, ale ve skutečnosti neexistuje lepší volba.

    Je známo, že má kurátorský rozšiřovací systém. Podívejte se například na některé z příkladů Apple iOS App Store nebo web pro rozšíření Firefox (addons.mozilla.org)), i když se domnívám, že se zaměřují pouze na kvalitu kódu a nikoliv na odhalení zlosti.

Bez ohledu na to, jaký přístup použijete, existuje významná výhoda rozšíření poskytovaných z jednoho veřejného webu rozšíření, který hostí autoritativní verzi rozšíření. Možná budete chtít podniknout různé kroky k povzbuzení uživatelů k instalaci rozšíření z tohoto webu a odradit je od instalace rozšíření z jiných webů (např. Ve výchozím nastavení zakažte instalaci rozšíření z jiných zdrojů a požadujte, aby uživatel klikl a autorizoval jakoukoli jinou doménu, kterou chtějí nainstalovat z aplikace, stejně jako Firefox). Jaké jsou výhody? Výhodou je, že to zajistí, že všichni vaši uživatelé obdrží stejnou kopii rozšíření. Zabraňuje útokům, např. V případě, že škodlivý web používá nějaký skript k ověření, zda verze prohlížeče uživatele a odkud uživatel pochází, a na základě toho se rozhoduje, zda má obsluhovat škodlivý kód nebo legitimní kód - tyto druhy útoků dělají těžší je odhalit zlobu, takže zastavení je dobrá věc. Rovněž zajišťuje, aby uživatelé získali výhody recenzí a hodnocení.

Měli byste také pečlivě zvážit, která API jsou vystavena rozšíření a která nikoli. Jako způsob, jak omezit poškození, můžete zvážit vystavení rozšíření pouze podskupině API, takže rozšíření jsou ze své podstaty omezena na to, co mohou dělat. Například prohlížeč Chrome prohlížeč umožňuje rozšíření interagovat s doménou DOM a webovým serverem, ale rozšíření nesmí provádět nativní kód (např. Instalovat a spouštět .exe). to může pomoci zabezpečit. Alternativně byste mohli poskytnout základní API, která se vyhýbají API s nejvyšším rizikem, a poté vyžadovat jakékoli rozšíření, které vyžaduje přístup k více než základnímu API, musí nejprve získat schválení od moderátorů, než je lze zveřejnit na veřejné stránky.

Další možnou ochranou před škodlivými rozšířeními je zavedení systému povolení. Identifikujete sadu oprávnění. Rozšíření je vyžadováno, aby obsahovalo manifest, který určuje sadu oprávnění, která potřebuje. Když uživatel nainstaluje oprávnění, systém by měl uživateli ukázat sadu oprávnění, která rozšíření požaduje, a co tato oprávnění znamenají (např. Jaká rizika zabezpečení/soukromí představují, jaký přístup udělují rozšíření), což uživateli umožní buď oprávnění schválit a pokračovat v instalaci, nebo odmítnout oprávnění a zrušit instalaci. To poskytuje uživatelům větší kontrolu a viditelnost nad rozšířeními, snižuje rizika rozšíření buggy (protože důsledky zranitelnosti zabezpečení v rozšíření jsou nyní omezeny pouze na požadovaná oprávnění, ne všechna oprávnění) a mohou zviditelnit škodlivá rozšíření ( protože potřebují určitá oprávnění k poškození). Viz například Android aplikace nebo Google Chrome rozšíření pro příklad takové věci).

6
D.W.

(Nepokoušejte se zavést vlastní sanitační systém. Vzhledem ke složitosti JavaScipt by byla domácí kanalizace pravděpodobně nejistá. Použijte stávající řešení, které již bylo dobře prověřeno.)

Google Caja Compiler je nástroj pro vytváření HTML třetích stran, CSS a JavaScript bezpečně vložit na svůj web.

Pokud si dobře pamatuji, byl použit pro iGoogle, protože právě oddělení nedůvěryhodného kódu do iframes mělo stále nedostatky.

6
Bryan Field

Nevím, zda to lze snadno automatizovat, a souhlasím s @ jfriend00 a @slhck, pokud jde o obecnou obtížnost úspěšného screeningu těchto Javascriptů. Jak již bylo řečeno, existuje alespoň jeden nástroj, o kterém vím, že se pokouší detekovat škodlivé skripty.

Tento nástroj je Wepawet , který provozuje Kalifornská univerzita v Santa Barbara. Je to popsáno takto:

Wepawet je rámec pro analýzu webových hrozeb. Wepawet je schopen určit, zda by návštěva webové stránky vedla k pokusu ohrozit prostředí návštěvníka.

2
Andrew Lambert

IBM Appscan má modul pro analýzu statického kódu s názvem „ JavaScript Security Analyzer (JSA) “. Je to určitě NE zdarma, ale poskytuje zpětnou vazbu o bezpečnostních důsledcích kódu Javascript.

Kromě JSA si nejsem vědom žádných dalších nástrojů pro analýzu statického kódu, které by mohly hledat bezpečnostní obavy, ale rád bych se dozvěděl více. Možná, pokud JLint/JHint přidal nějaké bezpečnostní funkce?

0
schroeder