So nähern Sie sich der Sicherheit mit Node.js

Wir haben der Node.js Foundation Enterprise Conversation-Reihe eine neue Kategorie mit dem Namen Node.js Foundation Enterprise Tech Conversations hinzugefügt. In diesem neuen Zweig werden Gespräche mit Experten geführt, die an Node.js Funktionen arbeiten, die für Unternehmensbenutzer wichtig sind, z. B. Sicherheit.

Bei unserem ersten technischen Gespräch haben wir uns mit Mike Samuel getroffen, der im IFC-Härtungsteam von Google arbeitet, das Teil des Sicherheitstechnik-Teams von Google ist. Dieses Team konzentriert sich auf Frameworks, Bibliotheken und Programmiersprachen, um diese zu verbessern und die Erstellung sicherer und robuster Software zu vereinfachen.

Das Gespräch umfasste:

  • Welche Fragen sollten Projektmanager ihren Architekten und Entwicklern zum Thema Sicherheit stellen? (1:53)
  • Wie lassen sich Abhängigkeiten von einem Sicherheitsobjektiv mit Node.js am besten verwalten? (3:12)
  • Welche Sicherheitsprobleme sollten Entwickler mit Frameworks lösen? (12:06)
  • Auf welche aufkommenden Bedrohungen müssen die Entwicklungsteams mit der Planung beginnen? (29:01)
  • Welche neuen Funktionen können Entwicklerteams beim Verwalten der Sicherheit unterstützen? (33:20)
Ein paar wichtige Imbissbuden:
- Ihr Team sollte die Abhängigkeiten aktualisieren, wenn vorgelagerte Sicherheitsprobleme festgestellt werden.
- Verwenden Sie immer die Zweitfaktorauthentifizierung mit npm.

Sicherheit ist bei jeder Technologie, die sich ständig weiterentwickelt, immer ein aktuelles Thema. Wenn Sie sich eingehender mit dem Thema der Sicherheit des Node.j-Ökosystems befassen möchten, lesen Sie diese Einführung in die Node.js-Sicherheitsarbeitsgruppe und in die Node.js-Sicherheits-Roadmap.

Das vollständige Protokoll des Gesprächs finden Sie weiter unten. Sie können es auch auf YouTube hier anhören.

Zusätzliche Referenzen, die Mike in diesem Gespräch erwähnt hat, sind:

  • Sein Vortrag über die Sicherheit von Node.js auf der JSConf EU 2018
  • Skript-Gadgets
  • Folge Mike auf Medium hier.

Möchten Sie ein Thema für unsere Enterprise-Tech-Gespräche vorschlagen? Bitte senden Sie eine E-Mail an pr@nodejs.org.

Transcript

Tierney Cyren: 00:00 Hallo allerseits und vielen Dank, dass Sie zu einem anderen Node.js Enterprise Tech-Gespräch mit Mike Samuel bei Google gekommen sind. Mike, möchtest du dich vorstellen?

Mike Samuel: 00:15 Ja. Ich arbeite im IFC-Härteteam von Google. Das Härten ist Teil der Sicherheitstechnik. Wir verwenden Frameworks, Bibliotheken und Programmiersprachen und versuchen, sie zu verbessern, um die Erstellung sicherer und robuster Software zu vereinfachen. Es ist ein ziemlich kleines Team von Sicherheitsspezialisten, alle von uns Software-Ingenieuren. Wir unterstützen eine viel größere Gruppe von Anwendungsentwicklern.

Tierney Cyren: 00:44 Großartig. Ich bin Tierney Cyren. Ich bin Entwickler bei NodeSource und Vorsitzender des Community-Komitees von Node.js. Kommen wir zu Ihrem Team und was dieses Team ein bisschen mehr macht. Was ist der Umfang der Sicherheit und wie spielt diese Art von Sicherheit in das hinein, was Sie Tag für Tag tun?

Mike Samuel: 01:08 Wir sind für die Behebung von Sicherheitslücken auf Framework-Ebene verantwortlich. Wir wollen die Anwendungsentwicklungen entlasten. Wenn beispielsweise jeder Anwendungsentwickler seinen gesamten Code überprüfen muss, um sicherzustellen, dass er kein XSS hat, ist dies keine effiziente Nutzung seiner Zeit. Wenn wir ein Framework so verbessern können, dass ungewöhnliche Fehler auftreten, um für XSS anfällig zu werden, haben wir die Entwicklerproduktivität erheblich verbessert und damit die Sicherheit für die Endbenutzer erhöht

Tierney Cyren: 01:44 Genial. Ich denke, das spielt irgendwie eine gute Rolle für das nächste Thema, das als Entwickler, der das Zeug machen muss, diese Arbeit machen muss, was sind die Arten von Fragen, die sich jemand stellen muss, der kein Mensch ist Entwickler wie ein Projektmanager sollten ihre Architekten und Entwickler nach Sicherheit fragen?

Mike Samuel: 02:12 Ein Team, das eine Geschichte darüber hat, wie man jede Art von Sicherheitslücke behebt, die sich an einem viel besseren Ort befindet als ein Team, das dies nicht tut. Zum Beispiel ein Team, das sagen kann: "Wir sind vor XSS sicher, weil wir kontextuell automatisch ausblendende Vorlagensprachen verwenden. Das bedeutet, dass unsere Vorlagensprache bei der Erstellung von HTML HTML versteht und sicherstellt, dass Dinge ausgeblendet werden. Wir Verwenden Sie diese Tools konsequent, damit wir vor diesem XSS sicher sind. "Und vielleicht haben wir eine andere Geschichte darüber, warum wir vor SQL-Injection und anderen sicher sind, ja. Wenn wir diese Geschichten durchdenken, wie wir jedes dieser Probleme auf systematische und konsequente Weise vermeiden können, sind Sie an einem viel besseren Ort.

Tierney Cyren: 03:11 Genial.

Mike Samuel: 03:12 Andere Arten von Problemen, ein Team, das auf ihre Abhängigkeiten achtet und ihre Abhängigkeiten aktualisiert, wenn Sicherheitsprobleme stromaufwärts festgestellt werden, ist um einiges besser aufgestellt.

Tierney Cyren: 03:26 Ja.

Mike Samuel: 03:27 Es wurde viel über die große Anzahl von Abhängigkeiten geschrieben, die viele Node-Projekte haben. Das ist an und für sich kein Problem. Es ist nur so, dass Angreifer, wenn ein Fehler in einem dieser Fälle bekannt wird, schnell reagieren und ihn ausnutzen können. Es ist gut, eine Geschichte darüber zu haben, wie Sie auf dem Laufenden bleiben.

Tierney Cyren: 03:52 Sie haben erwähnt, dass Sie einen Pfad oder eine Antwort für die allgemeinen Sicherheitslücken haben oder die allgemeinen Angriffswege mögen. Was ist mit ungewöhnlichen? Ich bin neugierig, ob das etwas ist, was PM gefragt werden sollte, ob es eine Frage gibt, die PMs ihren Teammitgliedern dazu stellen sollten.

Mike Samuel: 04:12 Nun ja. Na sicher. Abhängig von der Art des von Ihnen bereitgestellten Dienstes kann es Sicherheitslücken geben, die spezifisch dafür sind. Beginnen Sie Sicherheitsüberprüfungen häufig frühzeitig, und wenden Sie sich an Sicherheitsspezialisten, um zu verstehen, dass Ihre projektspezifischen Aspekte mit Angriffen in Verbindung gebracht werden können, die in der Vergangenheit stattgefunden haben.

Tierney Cyren: 04:47 Genial.

Mike Samuel: 04:50 Dann ist es auch wichtig, mit Sicherheitsspezialisten zusammenzuarbeiten, die aufkommende Bedrohungen im Auge behalten.

Tierney Cyren: 04:59 Mm-hmm (bejahend). Sie haben auch das Verwalten von Abhängigkeiten erwähnt. Dies ist etwas, worüber ich in letzter Zeit viel gelernt habe, z. B. ... Eine Sicherheitsanfälligkeit befindet sich normalerweise nicht nur auf der obersten Ebene, insbesondere in einem knotenspezifischen Abhängigkeitsbaum. Es wird drei oder vier Module tief sein; Sie wissen, eine Abhängigkeit von einer Abhängigkeit von einer Abhängigkeit. Wie schlagen Sie vor, dass die Leute das schaffen oder damit umgehen? Wissen Sie, welche Art von Tool-Link schlagen Sie vielleicht vor?

Mike Samuel: 05:27 Ja, das ist eines der Dinge, an denen ich mit TC39, dem JavaScript-Komitee, gearbeitet habe. Ich habe Code herausgegeben, der - und mein Ziel ist es, es zu ermöglichen, verschiedenen Modulen unterschiedliche Vertrauensstufen zuzuweisen. Der Shell-Zugriff lautet beispielsweise: Wenn Sie auf einen untergeordneten Prozess zugreifen können, können Sie Folgendes tun: Wenn ein Angreifer einen String für einen untergeordneten Prozess abrufen kann, kann er alle Arten von schlechten Dingen ausführen.

Tierney Cyren: 06:01 Ja, ja.

Mike Samuel: 06:03 Nur sehr wenige Ihrer Abhängigkeiten möchten explizit untergeordnete Prozesse verwenden. Nur sehr wenige von ihnen müssen Kinderprozesse anwenden, um ihre Arbeit zu erledigen. Sie können sich darauf konzentrieren, die Abhängigkeiten zu verstehen, die dies erfordern, wenn Sie sicherstellen können, dass nur eine kleine Anzahl von Modulen gleichzeitig auf diese zugreifen kann. Dies ist ein Beispiel dafür, dass wir in Google häufig statische Analysen verwenden. Eine statische Analyse lässt uns möglicherweise wissen, dass beispielsweise eine C ++ - Binärdatei auf einer Shell aufgerufen wird. Knoten, weil es JavaScript ist, bringt Sie die statische Analyse nur bis hierher. Sie müssen eine dynamische Durchsetzung durchführen. Ich habe viel daran gearbeitet, Mechanismen zu entwickeln, mit denen wir sagen können: "Hey, ich weiß, basierend auf meiner Art von Tests, dass diese Module untergeordnete Prozesse aufrufen müssen. Ich werde meine Aufmerksamkeit konzentrieren Ich werde dann sicherstellen, dass in der Produktion andere Module versuchen, untergeordnete Prozesse aufzurufen. " Diese Art begrenzt den Nachteil.

Tierney Cyren: 07:25 Okay.

Mike Samuel: 07:26 Zu sagen, dass es diese verschiedenen Quellen der Autorität gibt, die missbraucht werden können. Wenn Sie in der Lage sind, die vielen und die wenigen Abhängigkeiten zu unterscheiden, die eine dieser Abhängigkeiten benötigen, können Sie den Nachteil einschränken und Ihre Aufmerksamkeit darauf lenken ... und gezielte Überprüfungen anzeigen.

Tierney Cyren: 07:50 Das bringt tatsächlich ein ... Es ist super interessant für mich oder eine super interessante Sache. Einer der Angriffsvektoren mit einem Knotenmodul ist package.json. Ich bin gespannt, denn das ist nicht wirklich das JavaScript der ersten Partei. Das ist mehr von Dritten. Ich bin neugierig, wie sich das in diese Art von Geschichte integrieren könnte oder tut oder theoretisch integrieren würde, wenn es überhaupt eine Integration auf dieser Ebene gibt.

Mike Samuel: 08:21 Ja. Ich glaube, jemand, ich habe den Namen des Forschers vergessen, hat gezeigt, dass es im Prinzip möglich ist, einen Wurm zu entwickeln, der nach der Installation ausgeführt wird und der die Tatsache ausnutzt, dass möglicherweise jemand mit der Npm angemeldet ist, um Änderungen an package.json vorzunehmen und zu verbreiten selbst. Wissen Sie, Sie hören etwas, das nach der Installation und nach der Installation im Grunde Dash aufruft. Dieser Dash könnte die package.json in Ihrer Projektroute gepatcht und dann npm festgeschrieben haben. Verwenden Sie auf jeden Fall immer die Zweitfaktorauthentifizierung mit npm.

Tierney Cyren: 09:08 Ja.

Mike Samuel: 09:11 Ja, darüber spreche ich ein bisschen in ... Oh, ich sollte erwähnen, dass ich das herausgebracht habe. Ich und einige Kollegen von Google haben dieses Dokument mit dem Namen "Node.js Security Roadmpa. Fyi" herausgebracht. " Eine Sicherheits-Roadmap erklärt, wo wir sicherheitstechnisch sind und wie wir zu einem besseren Ort gelangen. Dieser Missbrauch von Post-Install-Skripten ist dort dokumentiert. Idealerweise landest du in einem Sandkasten. Es gibt npm-Flags, mit denen Sie Post-Install-Skripte überspringen können. Sie möchten die Berechtigung zum Ändern von Inhalten unter Knotenmodulen von der Berechtigung zum Ändern des Entwicklercodes und zum Ändern des lokalen Get-Clients trennen. Dies ist das Endziel der meisten Post-Install-Skripts. Trennen Sie es außerdem von der Berechtigung zum Festschreiben für das globale npm-Repository.

Mike Samuel: 10:21 Ich habe es dort dokumentiert. Eine Aufgabe bestand darin, einen lokalen Snapshot von npm zu erstellen und das Ausführen von Post-Install-Skripten zu entladen. Es ist nicht trivial beeinflussbar in ein paar Zeilen von Bash, also denke ich, es ist etwas, das als ein Service bereitgestellt wird und all das in einen netten, leicht zu implementierenden Satz von Tools einfließt. Sie wissen, die kurze Antwort ist eine kurzfristige Zwei-Faktor-Authentifizierung, bei der Sie versuchen, diese Tools zu verwenden, wenn sie langfristig verfügbar sind. Das Schöne an der Verwaltung des lokalen Snapshots ist, dass Sie auf Sicherheitsvorfälle agiler reagieren können. Wenn Sie feststellen, dass jemand herausgefunden hat, wie eine Drittanbieterabhängigkeit ausgenutzt werden kann, möchten Sie möglicherweise nicht darauf warten, dass der Upstream dies behebt. Sie könnten sagen: "Hey, einige Leute haben eine Lösung gefunden. Wir werden unsere lokale Kopie patchen, weil wir möglicherweise nur einen Teil der darin enthaltenen Funktionen verwenden." Wir könnten alles ausschalten, was ausnutzbar ist, wenn wir es nicht tatsächlich nutzen. Pushen Sie in unser lokales Repository und müssen Sie nicht auf den Upstream warten, um unsere Server vor dem Zero Day zu schützen.

Tierney Cyren: 11:50 Das ist super genial. Das ist ein sehr interessanter Teil. Ich bin gespannt, wie Sie sich in diesem Bereich entwickeln. Viele der Dinge, die Sie gesagt haben, beziehen sich auf das nächste Thema, das wir besprochen haben, oder auf den Ort, an dem wir diskutieren werden. Das sind eine Reihe verschiedener Dinge, die Entwickler und Frameworks tun können. Es ist immer irgendwie durcheinander, zumindest für mich. Ich bin gespannt, welche Sicherheitsprobleme die Frameworks lösen sollen.

Mike Samuel: 12:30 Das ist eine ausgezeichnete Frage. Das Vorangehende erinnerte mich an eine weitere Frage: Was sollten Ihre Projektmanager fragen? Für mich hat ein Team eine Geschichte, was zu tun ist, wenn etwas schief geht. Es wird an einem besseren Ort sein .

Tierney Cyren: 12:30 Auf jeden Fall.

Mike Samuel: 12:49 Ein Team, das irgendwie "Wo sind unsere Datenbank-Backups?" Sie wissen: "Kann jeder, der den Pager in der Hand hält, wenn der Pager um Mitternacht ausgeht, wissen er, wie er eine neue und gute Version der Anwendung aus dem Backup wiederherstellen kann? Team, wissen sie, wie sie mit jemandem Kontakt aufnehmen können, der ein zweites Paar Augen zur Verfügung stellt? "

Tierney Cyren: 13:18 Ja, total. Ehrlich gesagt, geht das tatsächlich in meinen Denkprozess über die Frage ein, welche Sicherheitsprobleme Entwickler erwarten können, dass Frameworks in dieser einen Teilmenge von Frameworks lokales Caching lösen. Das ist eines der Dinge, die ich persönlich nicht genug Einzelpersonen und Unternehmen gesehen habe. Diese Art beantwortet die Frage: "Okay, wir haben einen lokalen Cache. Hier ist das, was ich brauche." Das ist auch ein Rahmen, um dieses Problem zu lösen. Obwohl ich nicht unbedingt weiß, ob wir so über Framework in dem Sinne sprechen, dass die Sicherheitsprobleme dadurch gelöst werden sollten.

Mike Samuel: 14:05 Ich denke, ja. Beispielsweise stellen einige Anwendungscontainer beim Pushen einer neuen Version Ihrer Anwendung Caches der alten Versionen bereit. Sie können auf eine alte Version zurückgreifen, wenn Sie Probleme mit der neuen Version haben. Ist es das, wovon wir reden?

Tierney Cyren: 14:27 Ja, ja. Ich denke an etwas wie JFrog Artifactory oder Verdaccio, eine Node-App, die sich nur im lokalen npm-Cache befindet.

Mike Samuel: 14:40 Ja.

Tierney Cyren: 14:40 Nur damit Sie wissen, ist JFrog Artifactory ein kostenpflichtiges Produkt, aber im Grunde genommen ein Enterprise-Cache. Das ist genau das, worüber ich in diesem Begriff eines Frameworks nachdenke, das ein gewisses Maß an Sicherheit bietet. Es handelt sich nicht wirklich um eine Sicherheitsfunktion, sondern vielmehr um die Frage, wie wir etwas beheben können, wenn es ein Problem gibt, das wir nicht selbst lösen können. Ja, es ist eine seltsame Art von Grauzone, aber ich denke, sie löst den Punkt, über den Sie gesprochen haben.

Mike Samuel: 15:10 Ja, und ich denke, diese Art von Framework-Code ist in Ordnung. Ich denke, Sie haben Recht, dass es bestimmte Arten von Problemen gibt, die in einem Framework wie Express zu lösen sind, und es gibt bestimmte Probleme, die in so etwas wie Artifactory behoben werden könnten.

Tierney Cyren: 15:31 Ja und

Mike Samuel: 15:32 Es wäre definitiv relevant für, wie ... Wo könnte ein Ort zum Auslagern eines Post-Install-Skripts sein, damit wir sie von den Entwicklerrechten trennen können.

Tierney Cyren: 15:46 Ja. Sie haben Express angesprochen. Welche Probleme sollten Sie mit Express lösen? Welche Sicherheitsprobleme auf dieser Ebene sollten gelöst werden?

Mike Samuel: 15:58 Ich weiß schrecklich wenig darüber, wie Express verwendet wird. Mein Verständnis von Express ist, dass es sich um eine Wundertüte mit vielen verschiedenen Funktionen handelt und viele verschiedene Produktteams unterschiedliche Untergruppen dieser Funktionen verwenden. Ich denke, Sie können sich an viele wenden, wissen Sie, Frameworks bieten Ihnen die Möglichkeit, eine Sicherheitsannahme zu überprüfen. Es kann auch sehr einfach sein, gute Werkzeuge durchgehend zu verwenden. Ich denke, Express wird mit einer Reihe von Biopipe-Handlern gebündelt. Dies ist ein Ort, an dem Sie die Sicherheitsannahme überprüfen können. Sie können auch 10-Fuß-Sprachen bündeln. Wenn es zum Beispiel am einfachsten und einfachsten ist, eine kontextuell automatisch ausgeblendete 10-Fuß-Sprache zu verwenden, können Sie XSS wirklich in den Griff bekommen.

Mike Samuel: 17:06 Eine andere Möglichkeit, um viele Sicherheitsprobleme anzugehen, besteht darin, die Sicherheit gegen die Sicherheit eines Wertes darzustellen, den Sie über den Draht versenden, da Sie einen bestimmten Laufzeittyp haben. Frameworks wie Express bieten die Möglichkeit, diese Annahme konsequent zu überprüfen. Zum Beispiel kann ich im Typensystem eine Unterscheidung zwischen einer einfachen alten Zeichenfolge und einer Zeichenfolge aus HTML ausdrücken, von der ich weiß, dass sie sicher in unseren Ursprung geladen werden kann. Wissen Sie, vielleicht ist sicheres HTML nur der Name eines Typs, der eine Zeichenfolge umschließt. Wir tun dies in einem halben Dutzend Programmiersprachen und Frameworks innerhalb von Google. Ich definiere einen Typ, der eine Sicherheitseigenschaft einschließt. Sie wissen, dass sicheres HTML sicher in ein DOM geladen werden kann. Express kann dann die Schreibweise so ändern, dass, wenn Sie sich für diese zusätzliche Sicherheitsannahme entscheiden, beliebige Zeichenfolgen verweigert werden, die in Ihren Antworttext geschrieben werden, wenn der Inhaltstyp html ist. Diese Werte werden zugelassen und entpackt. Es könnte Template-Systeme als Low-End-Hersteller sicherer HTML-Werte integrieren, um dies für den Benutzer transparent zu machen, wo es ... Sie wissen, wann sie die Tools verwenden, die es bereitstellt. Möglicherweise wird auch ein HTML-Desinfektionsprogramm gebündelt, das ein weiterer vertrauenswürdiger Low-End-Produzent dieser sicheren HTML-Werte ist.

Mike Samuel: 19:10 Wenn Sie als Objekt darstellen, wenn Sie Ihre Sicherheitsannahmen in Ihrem Typsystem darstellen, kann das Framework den Typ überprüfen und die Annahmen überprüfen, bei denen sie überprüft werden müssen. Durch die Bündelung von Tools kann es Entwicklern sehr einfach gemacht werden, Werte zu erstellen, um Zeichenfolgen, die aus einem Kapitel stammen, von Werten zu unterscheiden, die einen Prozess durchlaufen haben, von dem bekannt ist, dass er sichere Ausgänge erzeugt. Ich glaube, ich habe mich wiederholt und ein bisschen gemurmelt.

Tierney Cyren: 19:44 Du bist gut, du bist gut. Ja, so viele ... Eines der Dinge, die ich aufgegriffen habe, ist, dass es wichtig zu sein scheint, ein erweiterbares System zu haben. Das ist eine Menge von dem, was Node.js getan hat. Ein Großteil des Node-Materials ist erweiterbar. Sie bauen auf die Arbeit anderer Leute, oder? Sie hängen an Dingen. Express macht das sehr viel. Eigentlich möchte ich es eine spezielle Sache nennen, nur für Leute, die zuhören, ist Helm. Helm ist ein super gutes Werkzeug für Express, und ich denke, HAPI macht auch eine Menge davon standardmäßig. Es geht irgendwie darüber hinaus. Express als Tool sollte dies tun, aber dann heißt es tatsächlich: "Hey, wir machen all diese Dinge, die Express nicht macht." Außerhalb von Express und diesem speziellen Ökosystem ist es für Leute, die an Sicherheit interessiert sind und sich dafür interessieren, sehr wertvoll, nach Tools zu suchen, die diese Dinge explizit ausführen, die eine Kernbibliothek oder ein Kernframework nicht tun machen.

Mike Samuel: 20:49 Ja, und ich denke,

Tierney Cyren: 20:51 Hast du irgendwelche Gedanken oder Gefühle dazu?

Mike Samuel: 20:52 Nun, ich denke, Helm leistet unter anderem gute Arbeit mit sicherheitsrelevanten Headern. Stellen Sie sicher, dass Ihre HTML-Antwort die von Ihnen benötigten Header enthält. Ich denke, dass die Leute seit dem Start des Webs bemerkt haben, dass "Hey, es gibt diese Art von allgemeinen Problemen, die wir angehen können, aber wir können nicht einfach die Funktionsweise von Browsern ändern und so einen Header hinzufügen und es den Leuten ermöglichen, sich für eine Art von zu entscheiden gesehen Verhalten, "X-Inhaltstyp Optionen ist einer von denen. Mit Helmet können Sie auf einfache Weise sicherstellen, dass Sie nicht viele der Benutzer verpassen, die sich für Verhaltensaspekte entscheiden und beispielsweise Inhaltssicherheitsrichtlinien erstellen, um eval und clientseitiges JavaScript und dergleichen zu sperren.

Tierney Cyren: 21:52 Ja. Sie machen einen guten Job mit vielen Dingen. Sie machen auch ein paar interessante Randfälle. Ich kann nicht ohne weiteres an sie denken, ich habe ein paar Artikel darüber geschrieben. Ja, ich kann nicht über den Kopf denken. Das heißt, ich bin neugierig, ist das eine Art Abstraktion der Verantwortung gegenüber jemand anderem? Das Zeug sollte theoretisch in Express enthalten sein. Ist es gut, dass sich jemand die Zeit genommen hat, dieses Zeug so zu bauen, dass er die Schwächen erkannt hat, oder sollte das etwas sein, das in Express enthalten ist? Oder wie auch immer. Express und Helm sind hier ein Beispiel, es gibt mehrere Beispiele für solche Dinge, aber diese Art von Vorgehensweise, Dinge zu reparieren. Neugierig, was Sie darüber denken?

Mike Samuel: 22:43 Ich habe nicht mit den Express-Betreuern darüber gesprochen, aber ich verstehe, dass die Express-Kunden eine große Anzahl von Kunden haben.

Tierney Cyren: 22:52 Ja.

Mike Samuel: 22:55 Es wird sehr schwer, die Bisse zu ändern, die über die Drähte geschickt werden. Ich denke Framework, Express ist sehr ein Plugin-Modell. Eine Art Korsett von Plugins, die Dinge wie das, was Helmet macht, tun. Ich weiß nicht, was Helmet macht, aber was Helmet macht, um Dinge wie Antwort-Header. In der Lage zu sein zu sagen, "Hey, das ist meine Sicherheitslage in einer Liste bekannter Plugins." Stellen Sie dann sicher, dass alle Abweichungen von, wie ich diese Plugins habe, die neue Säuglingswerkzeuge bereitstellen, es meinem Entwicklungsteam leicht machen. Ich möchte, dass mein Entwicklungsteam sie konsequent einsetzt, und ich möchte eine kleine weiße Liste mit Ausnahmen von diesen Regeln haben. Ich denke, dieses Modell zu unterstützen, ist etwas, was Express tun könnte.

Tierney Cyren: 24:22 Genial.

Mike Samuel: 24:23 Wieder ist meine schreckliche Ignoranz ein Hauch von dem, was das Express-Team tut. Sie haben vielleicht schon große Fortschritte in diesem Bereich gemacht, ich weiß es nicht.

Tierney Cyren: 24:32 Ja, ich kenne sie auch nicht so gut wie ich sollte.

Mike Samuel: 24:35 Ja, ich muss wirklich etwas darüber lernen.

Tierney Cyren: 24:37 Schon gut. Ja, da ist definitiv viel los. Wir haben ein bisschen darüber gesprochen, welche Probleme Frameworks lösen sollten. Was ist mit Problemen, die nicht auf den Schultern des Frameworks liegen? Haben Sie starke Gefühle oder Gedanken dazu?

Mike Samuel: 25:01 Für Node.js Frameworks ist fast das gesamte clientseitige JavaScript nicht auf ihren Schultern. Ich denke, dass einige Frameworks versuchen, Code von einem Server auf den Client zu übertragen, und daher möglicherweise an einer Stelle stehen, an der auch clientseitiger Code überprüft und möglicherweise neu geschrieben werden kann, um eine dynamische Durchsetzung durchzuführen. Ja, viele Angriffe auf Netzwerkebene sind Dinge, die am besten auf Containerebene angegangen werden können. Wenn Ihre Google Cloud oder die Amazon-Entsprechung ... Ja, viele Angriffe auf Netzwerkebene werden am besten auf Containerebene behandelt.

Tierney Cyren: 25:46 Wenn du sagst-

Mike Samuel: 25:46 Viele-

Tierney Cyren: 25:48 Ich wollte sagen, wenn du Container sagst, meinst du Docker oder was auch immer? Oder meinst du überhaupt wie irgendeine Art von Server? Wie bei VPS oder auf welchem ​​Metall auch immer, die Unterscheidung dort.

Mike Samuel: 26:07 Ja, also ... Ein System ist eine Gruppe von kooperierenden Maschinen. Container bieten eine Möglichkeit, diese Maschinen einander vorzustellen. Möglicherweise habe ich eine Reihe von Servern bis zu einer Reihe von Datenbank-Backends, und möglicherweise gibt es auch einige Mikrodienste. In diesem Container können Sie den gesamten Austausch von geheimen Zeichenfolgen abwickeln, die Folgendes zulassen: "Hey, Sie sind ein Server. Hier können Sie auf Ihre Datenbank zugreifen. Hier finden Sie die Dienste." Es bietet viel davon. Sie können ein System angreifen, indem Sie versuchen, mit einem anderen Datenbank-Backend zu kommunizieren oder den Datenverkehr abzufangen. Der Container kann viel dafür tun, dass alle diese Dateien verschlüsselt werden. Manchmal möchten Sie alle Ihre ... Im Idealfall überprüfen Sie, ob Sie den Zugriff auf jeder einzelnen Ebene autorisieren. Ihre Mikrooberflächen vertrauen nicht nur einer Nachricht, sondern stammen zufällig von Ihrem Web-Frontend. Wenn Ihr Web-Front-End eine Nachricht an eine Mikrooberfläche oder an Ihr Framework sendet, enthält es einige Anmeldeinformationen.

Mike Samuel: 27:42 Nehmen wir an, ich mache das für einen bestimmten Benutzer, und jeder Schritt in der Kette wird erneut autorisiert. Das Threading dieser Endbenutzeranmeldeinformationen durch dieses verteilte System, das sowohl das Framework als auch den Container umfassen kann, da der Container häufig derjenige ist, der Geheimnisse für jeden Knoten in diesem verteilten System oder möglicherweise für jeden Prozess generiert, der auf einem Knoten ausgeführt wird in diesem verteilten System. Das wird immer wichtiger für FDO und solche Sachen, die nicht meine Spezialität sind.

Tierney Cyren: 28:30 Ja, ja. Gleich. In diesem Zusammenhang wundere ich mich oft über einige der aufkommenden Dinge, die in Bezug auf Entwickler und die Notwendigkeit, Sicherheitspläne zu erstellen, auftreten. Sicherheit ist eine Art von oft ... Sie entwickelt sich ständig weiter. Woran erkennen die Leute, was gerade passiert? Wie können sie dann auch erkennen, was gerade passiert, wie planen sie zu erkennen, was auch in Zukunft passiert?

Mike Samuel: 29:11 Momentan gibt es eine Reihe neuer Bedrohungen, sodass diese Routen oder Funktionen diese Bedrohungsquellen darstellen können. Zum Beispiel gibt es jetzt benutzerdefinierte Elemente in Browsern. Es gab einen Artikel namens Script Gadgets, der erläuterte, wie Features wie HTML importiert werden und auf welche Weise neue Frameworks wie Polymer und React zum Registrieren von Elementdefinitionen verwendet werden. Ich glaube, es werden keine Elementdefinitionen registriert, aber ich glaube, die HTML-Importe, einige der HTML-Importe, haben es durch React geschafft. Wie Sie mit diesen neuen Funktionen umgehen können, umgehen Sie Inhaltssicherheitsrichtlinien und andere Mechanismen, mit denen Sie steuern, wie Code auf einem Client geladen wird. Da ist das. Wenn Sie Blockchains ausführen, gibt es eine Vielzahl von Sicherheitsliteratur, die beschreibt, wie Blockchain nicht ausgeführt werden kann und wie häufige Anwendungsfehler zu Problemen in ... führen können, damit Sie die Dinge bestätigen, die Sie benötigen nicht attestieren.

Mike Samuel: 30:46 Ich denke eine weitere große Änderung in der Sicherheit. Früher gab es Sicherheitsfuzzles, Sie konnten einen Sicherheitsfuzzer starten und Sie wurden auf mögliche Leak-Stellen in Ihren Anwendungscodes hingewiesen. Angreifer haben Sicherheitsfuzzles gestartet, um automatisch eine Reihe von Abfragen zu generieren: "Diese Website verwendet möglicherweise eine alte Version eines Content-Management-Systems, das als anfällig bekannt ist." Fuzzers werden jetzt um Bedingungslösungssysteme gebaut. Es gab wahrscheinlich ein etwas größeres Wettrüsten zwischen den Sicherheitstestern und den Angreifern, da die Systeme zur Lösung von Einschränkungen gemeinsam genutzt werden, nur weil ich zufällig ... Mein System zur Lösung von Einschränkungen kann neun von zehn Sicherheitslücken finden. Wenn das Constraint-Solving-System des Angreifers neun von zehn Sicherheitslücken feststellt, diese jedoch nicht identisch sind, liegt ein Problem vor. Ich denke, Sie haben auch gefragt, wie Sie mit aufkommenden Bedrohungen umgehen.

Tierney Cyren: 32:06 Ja.

Mike Samuel: 32:06 Im Idealfall haben Sie einen Sicherheitsspezialisten, der die Literatur durchliest und Sie auf dem Laufenden hält. Er filtert, um festzustellen, was relevant ist und was nicht. Ich denke, in diesem Bereich gibt es einige gute Werkzeuge. Npm Audit zum Beispiel macht ... Sie wissen, es ist eine großartige Funktion, die Ihnen sagt, wann Ihre Abhängigkeiten bekannte Probleme haben. Nicht alle Sicherheitslücken machen es zur Quelle der Wahrheit für npm Audit, aber es ist großartig für Fälle, in denen diese tatsächlich veröffentlicht werden. Ja, wenn Sie kein Sicherheitsspezialist sind, müssen Sie nur jemanden wie mich kennen, der die HTML-Spezifikation liest, damit Sie das nicht müssen.

Tierney Cyren: 33:14 Genial. Ja, ich habe nicht viel zu fragen, aber ich werde das vorerst zurückhalten. Wenn wir zu unserer letzten Sache oder unserem letzten Thema übergehen, möchte ich fragen, welche neuen Funktionen in JavaScript auf Plattform-, Framework- und Anwendungsebene Teams bei der tatsächlichen Verwaltung der Sicherheit für Entwickler- oder Produktionsbereitstellungen unterstützen könnten oder würden ?

Mike Samuel: 33:45 Angesichts der vielen Knotenanwendungen ist der Code, den ich als Anwendungsentwickler schreibe, nur die Spitze des Eisbergs. Es gibt so viele Abhängigkeitscodes von Drittanbietern, von denen ich abhängig bin. Ich denke, eines der entscheidenden Dinge ist, wie ich bereits sagte, den Code zu vertrauen, um das zu tun, was, wie Sie wissen, nur den Modulen vertraut, die eine bestimmte Quelle sichtbarer Autorität mit Zugriff darauf benötigen. Nur die Dinge, die wirklich untergeordnete Prozesse benötigen, erhalten Zugriff darauf. Um sagen zu können, "Diese Module brauchen es und ich nehme an, der Rest nicht", müssen wir ein Konzept der Modulidentität haben. Ich habe dem TC39, dem Ausschuss, der die Sprache verwaltet, ein bestimmtes Konzept der Modulidentität vorgeschlagen. Ich denke, dass JavaScript in JavaScript eine sehr dynamische Sprache hat. Statische Analysatoren wie Typenskripte, Typensysteme wie ESLint und der Closure Compiler von Google sind großartig, aber sie müssen optimistische Annahmen treffen. Die Darstellung von Sicherheitsannahmen zu Werten im Laufzeitsystem ist meiner Meinung nach wichtig.

Mike Samuel: 35:26 Ich bin ein großer Fan von Vertragstypen und ich habe das Node-Sec-Pattern-Paket veröffentlicht, um als Grundlage dafür zu dienen. Dann, denke ich, brauchen wir eine Möglichkeit, Kräfte zu blockieren, die, wie Sie wissen, nur selten verwendet werden und von denen bekannt ist, dass sie Probleme darstellen. Eval ist böse, aber solange eine Ihrer Abhängigkeiten es wirklich braucht, müssen Sie es für die gesamte Laufzeit einschalten. Das ist bedauerlich. Eval hat legitime Verwendungszwecke beim Laden des leeren generierten Codes. Auch hier sollte sich die unterschiedliche Berechtigung für Module nicht nur auf andere Module erstrecken. Es sollte sich auch auf eingebaute Funktionen wie Eval erstrecken.

Tierney Cyren: 36:35 Genial. Ich denke, wir sollten abschließen, aber gibt es vorher irgendwelche Links, zu denen Sie die Leute leiten möchten? Irgendwelche Orte, irgendetwas, worauf die Leute achten sollten? Insbesondere, wenn dieser Vorschlag für die Bezeichner in JS bei TC39, wenn das so ist, wäre das fantastisch. Noch etwas?

Mike Samuel: 36:57 Ja, viele davon habe ich bei JSCon in Berlin gehalten. Ich denke, das sollte bald auf YouTube sein. Die JS Con, es ist eine großartige Konferenz und sie haben alle ihre Vorträge gehalten. Ich habe auch einige Bestrebungen, ein YouTube-Start zu sein, also habe ich eine YouTube-Serie zusammengestellt, in der eine Reihe von Web-Rätseln gezeigt wird. Wenn Sie Sicherheitspuzzlespiele mögen, können Sie es heraus überprüfen. Wenn Sie zu medium.com/@mikesamuel gehen, sollten Sie es finden. Es heißt nur "Rätsel auf dem Weg zur Sicherheit". Hier veröffentliche ich nicht oft, aber hier veröffentliche ich meine Gedanken darüber, wie ich koordinieren und die Interaktionen zwischen Sicherheitsteams und Anwendungsentwicklern effizienter und produktiver gestalten kann.

Tierney Cyren: 38:10 Genial. Vielen Dank, dass Sie sich uns bei den Gesprächen über Unternehmenstechnologie angeschlossen haben. Ich weiß das wirklich zu schätzen.

Mike Samuel: 38:17 Ja, vielen Dank. Es waren schöne Fragen.

Tierney Cyren: 38:17 Genial, danke.