it-swarm-eu.dev

Wie scanne ich Javascript nach bösartigem Code?

Wir planen, die Möglichkeit zu geben, Community-gesteuerte Erweiterungen in Javascript für unsere öffentliche Webanwendung zu schreiben und den Benutzern die Möglichkeit zu geben, ihre Instanzen der Anwendung anzupassen. Das Problem besteht darin, die Qualität der Erweiterungen zu überwachen.

Was würden Sie vorschlagen, um diesen Prozess zu automatisieren?

Oder wie man Javascript nach bösartigem Code durchsucht?

In wenigen Worten, wir hätten gerne einen Dienst wie Antivirus, der in Echtzeit hochgeladene Erweiterungen auf Bösartigkeit überprüft. Und wenn es einen verdächtigen Code erkennt, wird eine Warnung generiert.

Jeder Hinweis/Rat ist willkommen! Vielen Dank.

22
Igor

Ein Ansatz wäre, eine sichere API für die zu verwendenden Erweiterungen zu definieren, indem Objekte deklariert werden, die diese API im Ausführungsbereich für die Erweiterung implementieren. Dann muss der Erweiterungscode in einer Sandbox-Version von Javascript geschrieben sein, damit der Erweiterungscode nur die von Ihnen definierten sicheren API-Methoden aufrufen kann und nicht mehr.

Wenn Ihre API also aus einem Objekt bestand, das in einer Variablen api gespeichert ist, lautet der Code:

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

erweiterungscode wäre zulässig, da api Teil Ihrer sicheren API ist und Sie mit den sicheren Javascript-Varianten die API aufrufen können, die dem Erweiterungscode ausgesetzt ist.

Der Code:

document.createElement("img");

wäre nicht erlaubt, da document nicht Teil Ihrer sicheren API ist.

Stellen Sie beim Entwerfen der API sicher, dass kein offengelegtes Objekt über Eigenschaften verfügt, die böswillig verwendet werden könnten. Um eingeschränkten Zugriff auf eine Ressource zu gewähren, verwenden Sie Verschlüsse, um Funktionen zu erstellen, die privat auf die Ressource verweisen.

Es gibt eine Reihe von Projekten, die eine Sandbox-Version von Javascript definiert haben, die Sie für diesen Zweck verwenden können: SES , Caja , ADsafe , FBJS und andere. Mit SES und Caja können Entwickler Code mit den wenigsten Einschränkungen schreiben: Es fühlt sich sehr danach an, nur Javascript zu schreiben, mit ein paar geringfügigen Einschränkungen (z. B. kein eval, kein with). Für ADsafe und FBJS muss der Entwickler eine Variante von Javascript lernen. SES, ADsafe und FBJS weisen die beste Leistung auf. SES erfordert die Unterstützung einer neueren Javascript-Engine und ist daher nicht mit einigen älteren Webbrowsern kompatibel. Wenn der Erweiterungscode auf der Serverseite ausgeführt wird, ist SES möglicherweise die beste Wahl, da Sie sicherstellen können, dass Ihre Javascript-Engine auf dem neuesten Stand ist. Wenn die Erweiterung im Browser des Benutzers ausgeführt werden soll, können Sie Caja in Betracht ziehen, wenn die Erweiterung nicht leistungskritisch ist, oder ADsafe/FBJS, wenn dies der Fall ist.

9
JGWeissman

Es gibt keine gute Möglichkeit, Javascript auf schädlichen Code zu scannen. Du kannst es nicht tun. Das Problem ist, dass es zu viele Möglichkeiten gibt, wie ein böswilliger/betrügerischer Entwickler bösartige Inhalte in seinem Code verstecken kann, und Sie werden nie in der Lage sein, alles zu erkennen.

Antivirus ist hier nicht hilfreich. Sie müssen ein wenig über die Funktionsweise von Antivirensoftware und deren Einschränkungen wissen. Grob gesagt, so funktioniert es. Wenn das Antivirenunternehmen einen Virus erkennt, der viele Computer infiziert, analysiert es den Virus, identifiziert eine Signatur des Virus (z. B. einen Auszug seines Codes) und baut diesen in seine Engine ein. Wenn Ihr Computer anschließend mit einer Kopie dieser bestimmten Kopie (genau der von ihnen analysierten) infiziert wird, erkennt die Antivirensoftware ihre Anwesenheit anhand dieser Signatur. Daher ist Antivirensoftware in erster Linie nur gegen weit verbreitete Viren nützlich. Bestehende Antivirensoftware erkennt keinen schädlichen Code in einer unerwünschten Erweiterung für Ihre Webanwendung. Antivirensoftware hat einige Verwendungszwecke, ist jedoch für Ihr spezielles Szenario grundsätzlich nutzlos.

Sie müssen akzeptieren, dass dies kein Problem ist, das Sie durch Scannen von Code lösen können. Sie müssen also einen anderen Ansatz in Betracht ziehen. Welche Möglichkeiten haben Sie? Es gibt einige:

  • Sie könnten aufgeben und das Chaos annehmen. Sie können eine öffentliche Website für Erweiterungen erstellen, Benutzern das Bewerten von Erweiterungen ermöglichen und Überprüfungen veröffentlichen/anzeigen. Auf diese Weise können Benutzer, die dies bemerken, eine negative Bewertung abgeben, wenn ein Entwickler eine Erweiterung von geringer Qualität veröffentlicht, die fehlerhaft ist oder Dinge zum Absturz bringt. (Wenn der Entwickler böswillig ist und eine böse Erweiterung veröffentlicht, gibt es natürlich keine Garantie dafür, dass jemand dies jemals bemerkt. Wenn Sie Glück haben, bemerkt möglicherweise ein Benutzer den bösartigen Code irgendwie und meldet ihn Ihnen, aber es ist so genauso wahrscheinlich, dass niemand es jemals bemerkt. Das ist das Risiko, das Sie eingehen.)

    Dies ist als offenes Erweiterungssystem bekannt. Siehe z. B. den Android Market oder Google Chrome Extension Gallery oder Userscripts.org (eine Greasemonkey-Erweiterungssite)).

  • Sie könnten eine Art Überprüfungssystem einrichten, bei dem Experten jede Erweiterung überprüfen, bevor sie auf der öffentlichen Erweiterungsseite veröffentlicht wird (oder kurz nachdem sie veröffentlicht wird). Wenn Sie nur Qualitätsprobleme erkennen möchten, reicht es möglicherweise aus, wenn die Experten die Erweiterung installieren und testen und möglicherweise ein Tool zur Fehlersuche in Codequalität ausführen, um nach häufigen Problemen zu suchen. Wenn Sie auch böswillige Erweiterungen abfangen möchten, muss der Prüfer ein Entwickler sein, der Code lesen kann und die Erweiterung zeilenweise durchliest. Dies ist äußerst mühsam und zeitaufwändig, aber es gibt keine bessere Option.

    Dies ist als kuratiertes Erweiterungssystem bekannt. Einige Beispiele finden Sie beispielsweise im Apple iOS App Store oder auf der Firefox-Erweiterungssite (addons.mozilla.org)), obwohl ich glaube, dass sie sich nur auf die Codequalität und nicht auf das Erkennen von Böswilligkeit konzentrieren.

Unabhängig davon, welchen Ansatz Sie wählen, haben Erweiterungen, die von einer einzelnen öffentlichen Erweiterungssite bereitgestellt werden, auf der sich die maßgebliche Version der Erweiterung befindet, einen erheblichen Vorteil. Möglicherweise möchten Sie verschiedene Schritte ausführen, um Benutzer dazu zu ermutigen, Erweiterungen von dieser Site zu installieren, und sie davon abzuhalten, Erweiterungen von anderen Sites zu installieren (z. B. deaktivieren Sie standardmäßig die Installation von Erweiterungen aus anderen Quellen und fordern Sie den Benutzer auf, zu klicken, um eine andere gewünschte Domain zu autorisieren installieren von, wie es Firefox tut). Was ist der Vorteil? Der Vorteil ist, dass dadurch sichergestellt wird, dass alle Benutzer dieselbe Kopie der Erweiterung erhalten. Es verhindert Angriffe, z. B. wenn eine böswillige Website ein Skript verwendet, um zu überprüfen, ob die Browserversion des Benutzers und woher der Benutzer stammt, und auf dieser Grundlage zu entscheiden, ob bösartiger Code oder legitimer Code bereitgestellt werden soll - solche Angriffe Es ist schwieriger, Bosheit zu erkennen, daher ist es eine gute Sache, sie zu stoppen. Außerdem wird sichergestellt, dass Benutzer die Vorteile von Bewertungen und Bewertungen erhalten.

Sie sollten auch sorgfältig überlegen, welche APIs Erweiterungen ausgesetzt sind und welche nicht. Sie können in Betracht ziehen, nur eine Teilmenge der API Erweiterungen auszusetzen, sodass Erweiterungen von Natur aus in ihren Möglichkeiten eingeschränkt sind, um den Schaden zu begrenzen. Der Browser Chrome Browser ermöglicht beispielsweise die Interaktion von Erweiterungen mit dem DOM der Webseite und der Website, aber Erweiterungen dürfen keinen nativen Code ausführen (z. B. eine EXE-Datei installieren und ausführen) So etwas hilft der Sicherheit. Alternativ können Sie eine Basis-API bereitstellen, die die APIs mit dem höchsten Risiko vermeidet, und dann jede Erweiterung benötigen, die Zugriff auf mehr als die Basis-API erfordert, die zuerst von den Moderatoren genehmigt werden muss, bevor sie auf der Website veröffentlicht werden können öffentliche Seite.

Eine weitere mögliche Verteidigung gegen böswillige Erweiterungen ist die Einführung eines Berechtigungssystems. Sie identifizieren eine Reihe von Berechtigungen. Die Erweiterung muss ein Manifest enthalten, das die erforderlichen Berechtigungen angibt. Wenn der Benutzer die Berechtigung installiert, sollte das System dem Benutzer anzeigen, welche Berechtigungen die Erweiterung anfordert und was diese Berechtigungen bedeuten (z. B. welche Sicherheits-/Datenschutzrisiken sie darstellen, welchen Zugriff sie auf die Erweiterung gewähren), damit der Benutzer dies kann Genehmigen Sie entweder die Berechtigungen und fahren Sie mit der Installation fort oder lehnen Sie die Berechtigungen ab und brechen Sie die Installation ab. Dies gibt Benutzern mehr Kontrolle und Transparenz über Erweiterungen, verringert das Risiko fehlerhafter Erweiterungen (da die Folgen einer Sicherheitslücke in einer Erweiterung jetzt nur auf die angeforderten Berechtigungen beschränkt sind, nicht auf alle Berechtigungen) und macht böswillige Erweiterungen möglicherweise offensichtlicher ( weil sie bestimmte Berechtigungen anfordern müssen, um Schaden anzurichten). Ein Beispiel für diese Art von Dingen finden Sie beispielsweise in Android -Anwendungen oder Google Chrome -Erweiterungen).

6
D.W.

(Versuchen Sie nicht, Ihr eigenes Hygienesystem einzuführen. Angesichts der Komplexität von JavaScipt wäre eine hausgemachte Hygiene wahrscheinlich unsicher. Verwenden Sie eine vorhandene Lösung, die bereits gut überprüft wurde.)

Googles Caja Compiler ist ein Tool zum Erstellen von HTML, CSS und JavaScript von Drittanbietern sicher in Ihre Website einzubetten.

Wenn ich mich richtig erinnere, wurde es für iGoogle verwendet, da das Trennen von nicht vertrauenswürdigem Code in iframes immer noch Mängel aufwies.

6
Bryan Field

Ich weiß nicht, ob dies einfach automatisiert werden kann, und ich stimme @ jfriend00 und @slhck hinsichtlich der allgemeinen Schwierigkeit zu, diese Javascripts erfolgreich zu überprüfen. Davon abgesehen gibt es mindestens ein mir bekanntes Tool, das versucht, bösartige Skripte zu erkennen.

Dieses Tool ist Wepawet und wird von der University of California in Santa Barbara betrieben. Es wird folgendermaßen beschrieben:

Wepawet ist ein Framework für die Analyse von webbasierten Bedrohungen. Wepawet kann feststellen, ob der Besuch einer Webseite zu einem Versuch führen würde, die Umgebung des Besuchers zu gefährden.

2
Andrew Lambert

IBM Appscan verfügt über ein statisches Code-Analysemodul mit dem Namen " JavaScript Security Analyzer (JSA) ". Es ist definitiv NICHT kostenlos, bietet jedoch Feedback zu den Sicherheitsauswirkungen von Javascript-Code.

Abgesehen von der JSA sind mir keine anderen Tools zur Analyse statischen Codes bekannt, mit denen nach Sicherheitsbedenken gesucht werden kann, aber ich würde gerne mehr darüber erfahren. Vielleicht, wenn JLint/JHint einige Sicherheitsfunktionen hinzugefügt hat?

0
schroeder