So schreiben Sie sicheren Python-Code. Mahlzeiten Kushal Das

Hier ist die englische Originalversion dieses Interviews.

In diesem Jahr hat die Sprechergruppe Moscow Python Conf ++ aufgegriffen, was benötigt wird (dh wie - das Programmkomitee hat aufgegriffen ). Aber wer daran interessiert ist, Leistungen zu studieren, ist viel interessanter, was der Redner über Themen denkt, die uns betreffen. Um dies herauszufinden, erhalten Sie Insiderinformationen oder den Rat eines erfahrenen Entwicklers, und Sie müssen auf Konferenzen kommunizieren. Aber ich habe die Situation ausgenutzt und ein kurzes Interview von unserem Sprecher Kushal Das geführt.

Eine Besonderheit von Kushals Reden ist, dass er regelmäßig „geheime“ Methoden veröffentlicht, um Python-Code zu brechen, und im Gegensatz dazu zeigt, wie man Code schreibt, damit die NSA ihn nicht knacken kann. Auf unserer Konferenz habe ich gegessenIch werde Ihnen sagen, wie Sie Python-Code sicher entwickeln und bereitstellen können. Deshalb habe ich ihn nach der Sicherheit gefragt.



- Ich habe gegessen, bitte erzähl uns ein wenig über dich und deine Arbeit mit Python und dergleichen.

Kushal Das: Ich lebe in Indien und arbeite jetzt als Technologe von öffentlichem Interesse bei der amerikanischen gemeinnützigen Organisation Freedom of the Press Foundation, wo ich das SecureDrop-Projekt unterstütze. SecureDrop ist eine Open Source-Informationsplattform. Die Hauptsprache hier ist Python.

Darüber hinaus bin ich an anderen Open Source-Projekten beteiligt, einschließlich der Python-Sprache selbst. Ich bin einer der CPython Core-Entwickler und Mitglied des Board of Directors der Python Software Foundation.

Ich arbeite seit 2005 mit Python und fast meine gesamte Karriere war mit dieser Sprache sowie mit Linux verbunden. Dies sind zwei Hauptbereiche meiner Interessen. Ich bin auch Mitglied des Tor Project Core Teams. Wie viele bereits wissen, hilft Tor dabei, Ihre Privatsphäre online zu halten.

- Tor ist ein großartiges Projekt, das von Entwicklern auf der ganzen Welt verwendet wird, um Zugriff auf APIs und Dokumentationen zu erhalten, die beispielsweise aufgrund lokaler Gesetze blockiert sind. Ihre Präsentation basiert auf Sicherheit, daher habe ich einige Fragen.

Erstens gibt es die Meinung, dass für einen normalen Entwickler ohne spezielle Schulung die Sicherheit an sich zu kompliziert ist. Es wird davon ausgegangen, dass wir als Branche Tools und ein Ökosystem bereitstellen sollten, damit die von uns erstellte Software standardmäßig sicher ist.

Was ist Ihrer Meinung nach noch besser: Sicherheitsleute auszubilden oder ihnen einige Werkzeuge zur Verfügung zu stellen?

Ich habe Das gegessen: Ich denke beide. Sicherheit ist in der Tat ein komplexes Thema. Wenn ein Programmieranfänger jedoch eine Grundausbildung absolviert oder als Team arbeitet, lernt er, die häufigsten Probleme zu vermeiden.

In den meisten Fällen treten echte Sicherheitsfehler wie Hacking, Datenverlust oder Datendiebstahl aufgrund falscher Konfiguration, fehlender Aktualisierungen oder falschem, manchmal hooliganem Code auf.

Ich denke, dass die meisten grundlegenden Fehler vermieden werden können, wenn wir sowohl Anfänger als auch „Oldtimer“ der Branche ausbilden. Darüber hinaus können einige Dinge, die für das menschliche Auge unzugänglich sind, mit Hilfe neuer Werkzeuge, neuer Automatisierung und neuer Prozesse aufgedeckt werden.

Ein sehr einfaches Beispiel sind die Abhängigkeitsprüfungen, die GitHub jetzt hat. Wenn eine Python-Anwendung Fehler enthält oder eine alte Version eines unabhängigen Moduls verwendet und eine bestimmte Sicherheitsanfälligkeit in CVE beschrieben ist, kann GitHub Ihnen als Entwickler sagen: „Hey! Hier ist ein Update erforderlich! “ - und der Bot versucht automatisch, PR zu machen, um das Modul zu aktualisieren.

Daher lassen sich Training und Tools am besten kombinieren, aber ich persönlich würde immer noch so viel Training wie möglich bevorzugen. Es sind Menschen, die Daten eingeben und Fehler machen. Die Technologie kann nicht alle derartigen Fehler beheben.

- Ja, leider ist es. Die moderne Softwareentwicklung stützt sich stark auf offene Repositorys wie den Python Package Index, node.js, npm usw. Auf dem aktuellen Entwicklungsstand geschieht dies normalerweise als Pip-Installation oder Poetry Add.

Wie hoch sind Ihrer Meinung nach die Sicherheitsrisiken für einen regulären Python-Backend-Entwickler in einem mittelständischen Unternehmen, wenn er nur diese Tools verwendet? Sind solche Risiken akzeptabel oder sollten Entwickler sogar geringfügige Sicherheitslücken in Betracht ziehen?

Kushal Das: Dies ist eine wirklich wichtige Frage, da wir in allen von uns unterstützten Repositorys, in denen Sie Module für verschiedene Sprachen herunterladen können, versuchen, diesen Prozess für Entwickler einfach und zugänglich zu machen.

Für Python gibt es beispielsweise eine Python-Sicherheitsmailingliste, die Sie auf Probleme mit den zuletzt geladenen Modulen für Python hinweist. Es gibt Fälle von sogenannten Tippfehlern, bei denen der Name des Pakets einem sehr bekannten Paket ähnelt und die Entwickler versehentlich das falsche verwenden. Auf der Python-Seite kümmert sich PyPI um solche Dinge.

Wenn Sie ein Paket mit pip installieren, können Sie es außerdem wirklich überprüfen und sicherstellen, dass dies das ist, was Sie benötigen, sowie die Sicherheit des Downloads überprüfen. Zum Beispiel gibt es PEP 458, das Ihnen empfiehlt, Downloads mit PyPI-Paketsignatur zu schützen.

Die Entwicklung von Sicherheitsinstrumenten ist noch nicht abgeschlossen. Ich würde Entwicklern empfehlen, mit der Arbeit mit einem neuen nicht signierten Modul zu beginnen und herauszufinden, wer der Autor ist, wie viele Personen an der Entwicklung beteiligt sind, wo sie gehostet werden, welche großen Projekte verwendet werden, was im Quellcode enthalten ist, ob Beschwerden über Probleme oder Fehler vorliegen usw.

Dies sind nur 15 bis 30 Minuten Suche, aber sie bieten viele Vorteile. Wenn niemand auf der Welt außer dem Autor dieses Paket verwendet, sollten Sie es möglicherweise nicht verwenden. Wenn dieses spezielle Modul in anderen Paketen oder Software verwendet wird, ist es höchstwahrscheinlich sicherer für Ihren Code.

— , , - , , , .

, , node.js npm, npm install something.

NPM überprüft die Datensicherheit und zeigt Ergebnisse an. Beispielsweise wird die Meldung angezeigt: „Unter den gerade installierten Paketen befinden sich zwei mit einem hohen Sicherheitsrisiko und zehn mit einem durchschnittlichen Risiko. Sie können die folgenden Befehle ausführen, um sie zu reparieren oder zu aktualisieren, oder die Installation ablehnen. " Dies ähnelt integrierten Tools. Was halten Sie von solchen Lösungen und können Sie für PyPI etwas Ähnliches erwarten?

Eaten Das: Ich habe NPM nie benutzt, außer vielleicht ein oder zwei Mal in meinem Leben, als ich etwas testen musste. Daher kann ich nicht direkt kommentieren, wie gut dies ist, aber es scheint darum zu gehen, dem Entwickler eine intuitivere Benutzeroberfläche zu bieten.

Im Allgemeinen ist all dies Teil der Geschichte über die Benutzerinteraktion, wenn Entwickler und Designer die Aufgabe haben, herauszufinden, wie die Daten am besten dargestellt werden können, wobei zu berücksichtigen ist, dass sie tatsächlich vom endgültigen Entwickler angezeigt werden, einem Dritten, der alle diese Tools und Module installiert. Denn wenn zu viele Informationen vorhanden sind, klicken oder überspringen wir diese normalerweise, ohne sie zu lesen. Die Wahrheit liegt irgendwo dazwischen.

Die zukünftigen Pläne der Python- und Pip-Entwicklung kann ich nicht kommentieren, sie sind mir unbekannt. Ich denke jedoch oder hoffe eher, dass jemand bereits eine Anfrage für eine ähnliche Funktion eingereicht hat, damit Pip-Autoren dies in ihren Plänen berücksichtigen können. Jetzt ist das Support-Team etwas größer als zuvor - ungefähr sieben Personen mit dem Recht, Commits anzunehmen.

- Vielen Dank, ich hoffe, dass die Menschen im Laufe der Zeit mehr über Sicherheit nachdenken und mehr Kontrollen in unserem Ökosystem durchführen werden. Lassen Sie uns ein wenig über Ihren bevorstehenden Auftritt bei Moscow Python Conf ++ sprechen . Es basiert auf integrierter Abhängigkeitssicherheit und Verpackung.

Wir werden hier nicht verderben, aber was sollten Entwickler aus Sicht eines Sicherheitsexperten aus Ihrer Sicht bei der Überprüfung der Anwendungssicherheit noch berücksichtigen?

Wir haben bereits besprochen, wie Abhängigkeitsbehandlung und Pakete gesichert werden können. Was muss der normale Entwickler noch überprüfen? Worauf soll ich achten?

Ich habe Das gegessen: Ich denke, einer der Hauptpunkte sollten Updates sein. Stellen Sie sicher, dass Sie mindestens eine Bestellung haben und alles, von dem Sie abhängig sind, aktualisiert wird, einschließlich des Betriebssystems, ob Linux, Mac, Windows oder sogar iOS. Stellen Sie alternativ sicher, dass Sie zumindest die Prozesse modellieren, um zu verstehen, was sonst noch schief gehen könnte.

Das Problem für Anfänger (und das ist mir passiert) ist in den meisten Fällen, dass wir Benutzereingaben blind vertrauen. Sie müssen sich weniger darauf verlassen, dass die Eingabe tatsächlich korrekt ist und dies keine weiteren Probleme verursacht. Alles muss überprüft werden.

Darüber hinaus , wenn Sie etwas geöffnet, stellen Sie sicher , Sie nicht vergessen , es zu schließen.. Stellen Sie sich eine gewöhnliche Tür vor: Wenn wir das Büro betreten, prüfen wir, ob wir vergessen haben, die Tür hinter uns zu schließen. Auch beim Programmieren müssen Sie beim Öffnen von Dateien, Sockets oder etwas anderem oder beim Zugriff auf etwas nach Abschluss sicherstellen, dass alles sauber und geschlossen ist.

Aus programmtechnischer Sicht sind dies zwei Hauptpunkte, die viele Menschen vergessen.

- Ja, es gibt viele Dinge, die die Leute vergessen, und jetzt, denke ich, die letzte Frage. Welche Art von Sicherheitsfehlern machen Python-Backend-Entwickler auf mittlerer Ebene aufgrund Ihrer persönlichen Erfahrung am häufigsten? Benutzereingabe? Sucht? Sichere Anwendungsverpackung? Was ist häufiger?

Eaten Das: Die Probleme, die ich sah, waren hauptsächlich auf falsche Eingabe zurückzuführen.

2011 entwickelte ich ein Tool für das Fedora-Projekt und vergaß, meine temporären Dateien zu bereinigen. In diesem speziellen Fall handelte es sich um Dumps, und ihre Abwesenheit in der neuen Umgebung verursachte unvorhergesehene Probleme für die Infrastruktur - es fiel auf meinen, gelinde gesagt, schlechten Code zurück.

Dies ist eine Fortsetzung des gleichen Themas, wenn Sie sicherstellen müssen, dass der Code "bereinigt" wird, wenn Sie etwas erstellen oder öffnen. Es war also eine ernsthafte Lektion für mich. Wenn Sie denken: „Ja, ich habe es geschafft! Auf meinem Laptop funktioniert alles! ", Es ist keine Tatsache, dass es in einer echten Version oder Produktion funktioniert.

Aus irgendeinem Grund denken wir oft, dass die Umgebung mit unserer lokalen identisch ist, aber es passiert nie. Selbst große Unternehmen sind oft schwierig, das reale Umfeld auf Kundenseite zu bestimmen. Es ist wichtig, dies nur zu berücksichtigen.

Und weiter -Machen Sie weitere Kommentare zu Ihrem Code und schreiben Sie Dokumentation. Dieser Tipp richtet sich nicht nur an Anfänger, sondern auch an erfahrene Entwickler. Wenn Sie sich mehrere Monate oder Jahre lang nicht mit dem Code befasst haben, kann es sehr schwierig sein zu verstehen, warum Sie einmal etwas geschrieben haben.

Kushal Das wird bei Moscow Python Conf ++ auftreten . Wir mussten eine große Offline-Konferenz auf den Herbst verschieben, aber am 27. März veranstalteten wir eine Mini-Online-Konferenz, deren Materialien wir bald teilen werden, um in Kontakt zu bleiben.

All Articles