Frage:
Warum ist das Speichern von Passwörtern in der Versionskontrolle eine schlechte Idee?
d33tah
2018-08-15 16:05:52 UTC
view on stackexchange narkive permalink

Mein Freund hat mich nur gefragt: "Warum ist es eigentlich so schlimm, verschiedene Passwörter direkt in den Quellcode des Programms zu schreiben, wenn wir sie nur auf unserem privaten Git-Server speichern?"

Ich gab ihm eine Antwort Dies hob einige Punkte hervor, war jedoch der Ansicht, dass es nicht ausreichend organisiert war, und entschied, dass dies sinnvoll sein könnte, um eine kanonische Frage für zu erstellen geringste Privilegien und andere Grundlagen der Informationssicherheit?

Wofür sind diese Passwörter?
Die Antwort ist ziemlich kurz, da Sie niemals ein Passwort im Klartext speichern sollten.Nicht einmal in einer Datei namens TotallyNotMyPasswords.txt.Nirgends.
@EpicKip Viel Glück beim Bereitstellen jeder Art von Webserver ohne in Textdateien gespeicherte Nur-Text-Passwörter.
Es ist eher ein Branchenkonzept, Entwicklerwechsel, Trennung der Entwicklerrolle, allgemeine Kontrolle und mehrere Umgebungen für eine Anwendung sind alles Gründe, warum der Code keine Passwörter enthält (Quelle, wenn Sie so wollen).
Weil Sie keine [$ 14.000 AWS-Rechnung] möchten (https://dev.to/juanmanuelramallo/i-was-billed-for-14k-usd-on-amazon-web-services-17fn).
Bezogen auf SO: https://stackoverflow.com/a/1197512/5419599
Ein guter Grund ist, dass Sie zwei verschiedene Prozesse für Open Source- und Closed Source-Produkte benötigen.Sie können auf keinen Fall Passwörter in der Quellcodeverwaltung für Open Source-Produkte speichern.Einfacher, wenn Sie ein allgemeines Verfahren verwenden
@DaveCarruthers Es gibt Setups, in denen dies möglich ist (z. B. mit Windows- und AD-Authentifizierung), außer dass Kennwörter in [geschützte Konfiguration] (https://stackoverflow.com/questions/4155187/securing-a-password-) gespeichert werden können.Quellcode)
Ich möchte eine kleine Klarstellung: Die Antworten auf diese Frage sollten sich auf die Sicherheitsseite des Speicherns von Passwörtern in der Versionskontrolle konzentrieren.(Ich denke ja, weil es auf "Informationssicherheit" veröffentlicht ist.) Ich habe über diese Frage nachgedacht und ich denke, es gibt Gründe, das Passwort nicht zusammen mit einem Quellcode zu speichern, der über die Sicherheit hinausgeht.
Was ist falsch an der Verwendung von [Versionskontrolle für Passwörter?] (Https://www.passwordstore.org/) / absichtlicher Fehlinterpretation
@DaveCarruthers Sie können entweder eine Beispielkonfigurationsdatei in Ihrem Repository speichern und diese Konfigurationsdatei bei der ersten Bereitstellung manuell hinzufügen, oder Sie können die Klartextkennwörter in CI-Variablen wie Gitlab speichern und diese Konfigurationsdateien + Bereitstellung in einem CI-Skript generieren, das sich verbirgtdiese Informationen aus dem täglichen Gebrauch, es sei denn, Sie haben Administratorrechte / den privaten Git-Server kompromittiert.
Uber [vor kurzem auf die harte Tour herausgefunden] (https://arstechnica.com/information-technology/2015/03/in-major-goof-uber-stored-sensitive-database-key-on-public-github-page/) dass dies eine schlechte Idee ist.
Warum sollten Entwickler die Passwörter für andere Umgebungen als dev / test überhaupt * kennen *?
@DaveCarruthers Viele Setups verwenden stattdessen Umgebungsvariablen.Sie werden entweder von Hand (z. B. für Entwicklungsarbeiten) oder von einem verschlüsselten Wert (z. B. [Travis CI] (https://docs.travis-ci.com/user/encryption-keys/)) oder über eineverschlüsselte Datenbank (z. B. [HashiCorp Vault] (https://www.hashicorp.com/products/vault)) oder über einen sicheren Dienst (z. B. Heroku).Die Idee ist, Ihre Angriffsfläche auf einen einzigen Schlüssel zu reduzieren, der entweder in einem Daemon (wie Vault) oder einem Dienst (wie Heroku oder Travis) gespeichert ist.
Zu diesem Zeitpunkt dachte ich, es wurde allgemein anerkannt, dass nur _hashed_ Passwörter (vielleicht mit "salt" usw.) überhaupt irgendwo gespeichert werden müssen ...?
Acht antworten:
d33tah
2018-08-15 16:09:37 UTC
view on stackexchange narkive permalink

So wie ich es sehe, ist es eine Konvention , keine Passwörter in Git (oder einer anderen Versionskontrolle) zu speichern. Ich nehme an, man könnte sich entscheiden, es nicht mit verschiedenen Ergebnissen durchzusetzen, aber hier ist der Grund, warum dies allgemein verpönt ist:

  1. Git macht es schmerzhaft, Passwörter aus dem Quellcode-Verlauf zu entfernen, was dazu führen kann, dass Leute falsch liegen Idee, dass das Kennwort bereits in der aktuellen Version entfernt wurde.
  2. Wenn Sie das Kennwort in die Quellcodeverwaltung einfügen, entscheiden Sie sich grundsätzlich, das Kennwort für alle Personen freizugeben, die Zugriff auf das Repository haben, einschließlich zukünftiger Benutzer. Dies erschwert das Einrichten von Rollen innerhalb eines Entwicklerteams, die möglicherweise unterschiedliche Berechtigungen haben.
  3. Quellcodeverwaltungssoftware wird häufig ziemlich kompliziert, insbesondere "All-in-One" -Systeme. Dies bedeutet, dass das Risiko besteht, dass dieses System irgendwann kompromittiert wird, was zu einem Kennwortverlust führt.
  4. Andere Entwickler wissen möglicherweise nicht, dass das Kennwort gespeichert ist, und können das Repository falsch handhaben. Wenn Schlüssel in der Quelle vorhanden sind, ist besondere Sorgfalt erforderlich müsste beim Teilen des Codes berücksichtigt werden (auch innerhalb des Unternehmens; dies könnte zu einem Bedarf an verschlüsselten Kanälen führen).
  5. ol>

    Ich kann nicht sagen, dass jedes mit infosec verbundene Muster gut ist, aber bevor Sie sie brechen, ist es immer eine gute Idee, Ihr Bedrohungsmodell und Ihre Angriffsmethoden zu berücksichtigen. Wenn dieses bestimmte Passwort durchgesickert ist, wie schwierig wäre es für einen Angreifer, es zu verwenden, um dem Unternehmen Schaden zuzufügen?

Ich bin mir nicht sicher, ob es fair ist, ein bekanntes Anti-Muster von "kurzen Passwörtern" als "Infosec-Konvention" zu bezeichnen.
@Adonalsium Was ich damit sagen wollte, ist, dass es sich um ein Infosec-Muster handelt, das nicht zu den Best Practices gehört, und man sollte nicht gedankenlos den Mustern anderer folgen.
Das ist eine faire Einstellung.
Ich bin bei @Adonalsium: Konvention trägt nicht Ihre Bedeutung und es gibt viel bessere Begriffe: schlechte Idee.unnötig riskant.usw
In geringerem Maße wird auch das Passwort * Verlauf * angezeigt.Wenn das Kennwort im Laufe der Zeit geändert wurde, kann es hilfreich sein, frühere Kennwörter zu kennen, um zu erraten, ob zukünftige Kennwörter widerrufen werden sollten.
Ich meine für "Sachen, die andere Leute machen" Konventionsarbeiten, aber es kann auch bedeuten "Sachen, die andere (sachkundige) Leute für eine gute Idee halten und die aus einem bestimmten Grund alltäglich sind".
"Konvention" bedeutet für mich, dass "jeder im Allgemeinen zustimmt, dies auf diese Weise zu tun, obwohl es keinen besonders bedeutenden Vorteil hat, abgesehen davon, dass alle zustimmen, dass es auf diese Weise getan werden soll", aber Sie geben einige ziemlich bedeutende Nachteile anVorteile, die eher zu "das ist eine schlechte Idee" neigen.Das Entfernen der Teile über Konventionen würde die Antwort IMO erheblich verbessern.
Beachten Sie, dass Sie beim Entfernen von Kennwörtern aus der Quellcodeverwaltung diese nicht aus dem Verlauf löschen müssen. Sie müssen lediglich die Kennwörter ändern.
@OrangeDog, es sei denn, diese Historie von Passwörtern ist ein guter Indikator für zukünftige Passwörter (die nicht zutreffen, wenn Ihre Passwörter sicher und zufällig sind, aber dies ist nicht immer der Fall).
Git ist neben Punkt 4 ein verteiltes Repo-System.Jeder, der das Repo beispielsweise auf einen Entwicklungs-Laptop klonen kann, kann diesen Laptop verlieren, und jetzt sind Passwörter Teil dieser Datenverletzung.
@NotThatGuy Nein, Konvention bedeutet nur "jeder stimmt im Allgemeinen zu, dies auf diese Weise zu tun".Es ist wichtig zu beachten, da das Befolgen von Konventionen im Allgemeinen sehr wichtig und wertvoll ist.
Es kann auch Mitarbeiter geben, die gelegentlich von zu Hause aus arbeiten.Einige von ihnen (und ich habe einige gekannt) verwenden ihren Heim-PC anstelle ihres Firmen-Laptops zum Entwickeln.Dies bedeutet, dass Sie sich auf die Sicherheit Ihres Heim-PCs anstatt auf die des Unternehmens verlassen müssen.
Ich würde hinzufügen, dass in vielen Umgebungen Entwicklern überhaupt kein Zugriff auf Produktionssysteme gestattet ist und Ops / Administratoren alle Passwörter verwalten müssen.Da Kennwörter auf vielen Systemen in 45/60/90/180 Tagen ablaufen, können Entwickler die Kennwörter ** nicht ** verwalten und möchten nicht, dass Operationen in den Code eingegeben werden müssen. Daher legen Sie alle Anmeldeinformationen in einer separaten Konfiguration abDatei und wenn ops den Build bereitstellt, fügen sie die aktuellen Produktionskennwörter in die Konfigurationsdatei ein und aktualisieren diese Datei, wenn die Kennwörter ablaufen.Es ist möglich, dass Entwickler, die Produktionskennwörter nicht kennen, in föderalen Systemen gesetzlich vorgeschrieben sind.
Ich würde zustimmen, dass es ungenau und irreführend ist, dies als Konvention zu bezeichnen.Konventionen sind nur Bräuche oder "soziale Normen", bei denen man es ganz anders machen könnte und es wäre in Ordnung, solange alle anderen es so machen.Das klassische Beispiel ist, auf welcher Straßenseite wir fahren.Wir sind uns alle einig, welcher Seite und folgen ihr.Aber links / rechts ist willkürlich und würde (und funktioniert) gleich gut funktionieren, egal welche Gesellschaft sie ausgewählt hat.Das ist hier nicht der Fall.Wenn jeder Passwörter in die Versionskontrolle einfügt, ist es immer noch schlecht.
Brandon
2018-08-15 18:57:11 UTC
view on stackexchange narkive permalink

Zunächst der nicht sicherheitsrelevante Grund:

Workflow zur Kennwortänderung

Kennwörter ändern sich unabhängig von einem Softwareanwendungscode. Wenn ein DBA ein Datenbankkennwort ändert, ist es für Entwickler sinnvoll, den Code zu aktualisieren, einen neuen Build und eine neue Version für die Produktion zu erhalten und zu versuchen, alles zeitlich zu steuern? Kennwörter sind ein Laufzeitkonfigurationsartefakt und kein Entwicklungsartefakt. Sie sollten über Konfigurationsdateien, Umgebungsvariablen oder das von Ihnen verwendete Konfigurationsparadigma eingefügt werden.

Autorisierungsbereich

Im Allgemeinen bieten Versionskontrollsysteme eine Autorisierungskontrolle Daher können nur autorisierte Benutzer darauf zugreifen. Innerhalb eines Repositorys sind Berechtigungen jedoch im Allgemeinen entweder schreibgeschützt oder schreibgeschützt oder möglicherweise ein Schnickschnack, wie er von GitHub bereitgestellt wird. Es ist unwahrscheinlich, dass Sie Sicherheitsbeschränkungen finden, mit denen Entwickler Quellcode abrufen können, jedoch keine Kennwörter. Wenn Sie ein Repo klonen können, können Sie ein Repo klonen. Zeitraum. In vielen Umgebungen haben Entwickler keinen vollständigen Zugriff auf die Produktion. Manchmal haben sie schreibgeschützten Zugriff auf Produktionsdatenbanken, manchmal keinen Zugriff. Was ist, wenn Entwickler im Allgemeinen Zugriff haben, Sie aber nicht möchten, dass alle Praktikanten, Neueinstellungen usw. Zugriff haben?

Umgebungen

Was ist, wenn Sie mehrere Umgebungen haben, z. B. eine Entwicklungsumgebung, eine QS-Umgebung, Staging und Produktion? Würden Sie alle ihre Passwörter in der Versionskontrolle speichern? Wie würde die App wissen, welche zu verwenden ist? Die App müsste eine Möglichkeit haben, die Umgebung zu kennen, was letztendlich eine Konfigurationseinstellung sein würde. Wenn Sie den Umgebungsnamen als Konfigurationseinstellung festlegen können, können Sie das Datenbankkennwort als Konfigurationseinstellung festlegen (zusammen mit der Verbindungszeichenfolge, dem Benutzernamen usw.).

Verlauf

Wie bereits erwähnt, dient die Versionskontrolle dazu, den Verlauf zu erhalten. Ältere Passwörter können also weiterhin abgerufen werden, was möglicherweise nicht das Beste ist.

Kompromiss

Wie oft haben wir in den Nachrichten Schlagzeilen über Quellcode für ein Produkt gesehen, das in die Welt gelangt ist? Der Quellcode ist alles, was in der Versionskontrolle enthalten ist. Dies ist wahrscheinlich der Hauptgrund, Passwörter nicht in die Versionskontrolle aufzunehmen!

Allerdings ...

Allerdings müssen Passwörter gespeichert werden irgendwo . Die oben genannten Bedenken deuten nicht unbedingt darauf hin, dass sie überhaupt nicht in der Versionskontrolle gespeichert werden sollten, sondern dass sie in der Versionskontrolle nicht im Quellcode-Repository des Produkts gespeichert werden sollten. Ein separates Repo für Konfigurationsverwaltung, Operationen usw. ist sehr vernünftig. Der Schlüssel besteht darin, Vorgänge von der Entwicklung zu trennen, wenn es um Sicherheitsanmeldeinformationen geht, und nicht unbedingt die Versionskontrolle insgesamt zu vermeiden.

Außerdem habe ich in Umgebungen außerhalb der Produktion Kennwörter und API-Schlüssel für externe Systeme in gespeichert Konfigurationsdateien im Produktquellcode als Standard. Warum? Um es schmerzlos zu machen, wenn ein Entwickler den Code auscheckt, kann er ihn einfach erstellen und ausführen und muss keine zusätzlichen Konfigurationsdateien abrufen. Dies sind Anmeldeinformationen, die sich selten ändern und zu keinen Geschäftsgeheimnissen führen. Aber ich würde dies niemals mit Produktionsgeheimnissen tun.

Das Endergebnis ist also ... es kommt darauf an.

Ihr erster Punkt ist größer als es sich anhört - Passwörter, die an die Quellcode-Versionierung gebunden sind, können es unmöglich machen, zuverlässig zu ermitteln, wann beispielsweise Fehler aufgetreten sind.
@TobySpeight Wir müssen sehr unterschiedliche Definitionen von "unmöglich" haben.In einer Entwicklungsumgebung wäre es sowieso ziemlich seltsam, Passwörter zu ändern - sie sind per Definition kein Geheimnis -, daher gibt es selten einen Grund, sie zu ändern.Und wenn ja, sollte es trivial sein, die alten Konfigurationsdateien als Teil Ihres Bisect-Skripts durch die neuen zu ersetzen.Ich meine, das ist bei weitem der einfachste Teil des Skripts, der Ihr gesamtes Projekt erstellen und dann hosten muss.
+1 für den Vorschlag eines separaten Repos mit detaillierterem Zugriff.
Conor Mancone
2018-08-15 17:28:41 UTC
view on stackexchange narkive permalink

Es ist immer wichtig zu bedenken, dass Vorschläge auf Ihren Anwendungsfall zugeschnitten sein müssen. Sicherheitsvorkehrungen, die beispielsweise von der NSA getroffen werden, um alle Zero-Days zu schützen, die sie an einem regnerischen Tag aufbewahren, sollten viel strenger sein als Sicherheitsvorkehrungen, die zum Schutz von Up-Votes auf einer Website für Katzenbilder getroffen werden. In einem Extremfall kann ich mir ein Beispiel vorstellen, bei dem das Speichern von Passwörtern / Token / usw. in einem privaten Git-Repository sinnvoll sein könnte:

Wenn auf dieses Repository nur eine Person zugreift und die Anwendung keine speichert Informationen von beliebigem Wert.

In diesem Fall gehen Sie in die Stadt! Denken Sie daran, was @ d33tah in seiner Antwort gesagt hat - das Entfernen von Dingen aus einem Git-Repository kann überraschend schwierig sein (der springende Punkt ist schließlich, eine Geschichte von allem für immer zu führen). Wenn Sie sich also später entscheiden, möchten Sie es Arbeiten Sie mit mehr Menschen zusammen, aber möchten Sie nicht, dass sie vollen Zugriff auf alle Ihre Systeme erhalten. Dann haben Sie ein bisschen Kopfschmerzen.

Das ist es, worauf es wirklich ankommt zu. Ihr Code-Repository ist in gewisser Weise "öffentlich", auch wenn es nur für Mitarbeiter freigegeben ist. Nur weil Sie mit jemandem zusammenarbeiten möchten, heißt das nicht, dass Sie ihm vollen Zugriff auf Ihre Infrastruktur gewähren möchten (was effektiv passiert, wenn Sie Kennwörter / Token in Ihr Code-Repository einfügen). Es ist leicht zu denken, "Ja, aber ich vertraue den Leuten, mit denen ich zusammenarbeite!", Aber das ist aus mehreren Gründen einfach die falsche Sichtweise auf das Szenario:

  1. In der Praxis beginnt ein großer Teil der Datenlecks bei internen Akteuren (Mitarbeiter, Mitarbeiter). In einer Studie begannen etwa 43% der Datenverletzungen mit einem internen Akteur. Die Hälfte davon war beabsichtigt und die andere Hälfte zufällig
  2. Dieser letzte Punkt ist wichtig und warum es nicht nur um Vertrauen geht. Ungefähr 20% der Datenverletzungen sind versehentlich und werden von internen Personen verursacht. Ich bin klug genug zu wissen, dass ich nicht klug genug bin, um immer alles richtig zu machen. Was ist, wenn ich mein Repository öffentlich mache, um Platz für ein unterhaltsames Integrationstool zu schaffen, und vergesse, dass ich Anmeldeinformationen darin habe? Was ist, wenn ich eine Backup-Festplatte habe, die ich vergessen habe zu verschlüsseln, und die mein Büro verlässt? Was passiert, wenn eines meiner Passwörter durchgesickert ist und jemand es verwendet, um das Passwort für das Konto in meinem Git-Repository zu erraten ( Husten Gentoo Github-Repository Husten )? Es gibt eine beliebige Anzahl von versehentlichen Fehlern, die ich machen kann und die dazu führen können, dass mein Git-Repository verfügbar gemacht wird. In diesem Fall und habe ich und die Person, die sie findet, weiß, was sie sehen, ich könnte sehr gut abgespritzt werden. Das klingt nach vielen und , aber in Wirklichkeit passieren so Verstöße.
  3. Selbst wenn ich jemandem vertraue, heißt das nicht, dass ich geben muss ihnen uneingeschränkten Zugriff auf alles [Fügen Sie ein kitschiges Zitat darüber ein, wie Strom korrumpiert]. Das Einfügen von Anmeldeinformationen in ein Git-Repository bedeutet wiederum, dass ich möglicherweise allen meinen Mitarbeitern vollen Zugriff auf meine gesamte Infrastruktur gewähren kann. Es besteht immer die Möglichkeit, dass Sie diese Person nicht so gut kennen, wie Sie denken, und sie sich möglicherweise dazu entschließen, etwas zu tun, das sie nicht tun sollten. Selbst wenn Sie persönlich jeden Ihrer Mitarbeiter in Ihrem Leben kennen und ihm anvertrauen, bedeutet dies nicht, dass er einige der oben genannten Fehler (oder eine der endlosen Optionen, die ich nicht erwähnt habe) nicht macht, um Ihr Leben versehentlich freizugeben Code.
  4. ol>

    Kurz gesagt, bei guter Sicherheit geht es darum, eine mehrschichtige Verteidigung zu haben. Die meisten Hacks finden statt, weil Hacker in einem Bereich Schwachstellen finden, die es ihnen ermöglichen, Schwachstellen in einem anderen Bereich auszunutzen, was zu einem anderen Ort führt und sie schließlich zur großen Auszahlung führt. Wenn Sie so viele Sicherheitsvorkehrungen treffen, wie es für Ihre Situation sinnvoll ist, ist das Ganze sicher. Auf diese Weise müssen Sie nicht fragen: "War dies ein gezielter Angriff und muss ich jetzt jeden einzelnen Berechtigungsnachweis ändern, den ich überall habe, weil eine Festplatte aus Ihrem Büro kommt und Sie feststellen, dass sie nicht verschlüsselt war?" waren sie alle im Git-Repository auf diesem Backup-Laufwerk? ". Abhängig von Ihrer Situation trifft dies möglicherweise nicht auf Sie zu, aber hoffentlich hilft dies zu erklären, in welchen Szenarien dies von Bedeutung sein könnte.

+1 für "... so passieren Verstöße."Das Leben ist chaotisch zufällig und es ist absolut erstaunlich, wie oft eine lange Reihe von scheinbar zufälligen Handlungen zusammenwirken kann, um den perfekten Unfall zu bilden (Brüche, Brände, Fahrzeugkollisionen).Wenn Sie das Passwort aus dem Repo heraushalten, wird die Möglichkeit ausgeschlossen, dass ein Verstoß das Passwort offenlegt.
user1763251
2018-08-16 05:31:35 UTC
view on stackexchange narkive permalink

Wenn Sie Geheimnisse (Kennwörter, Zertifikate, Schlüssel) vom Quellcode trennen, können Sie Quelle und Geheimnisse gemäß verschiedenen Richtlinien verwalten. Wie alle Ingenieure den Quellcode lesen können, können nur die Personen, die direkt für Produktionsserver verantwortlich sind, auf die Geheimnisse zugreifen.

Dies erleichtert Entwicklern das Leben, da sie nicht an die strengen Sicherheitsrichtlinien gebunden sind werden benötigt, um die Geheimnisse zu schützen. Richtlinien zur Quellcodeverwaltung können für sie wesentlich komfortabler gestaltet werden.

Als direkt für Produktionsserver verantwortliche Person kann ich Ihnen sagen, dass Entwickler unter keinen Umständen über Anmeldeinformationen für die Qualitätssicherung oder die Produktionsumgebung verfügen sollen.Wenn sie sie haben, werden sie ein Problem "beheben", indem sie Dinge optimieren, bis sie anfangen zu arbeiten, ihre Änderungen nicht dokumentieren und das Ganze auseinanderfallen, weil das Verhältnis von Wolfsbann zu Auge von Newt nicht stimmt.Tun Sie, was Sie in Ihrer Dev-Umgebung wollen, aber geben Sie mir ein sauberes Codepaket zur Bereitstellung mit einer Dokumentation darüber, was ich tun muss, damit es funktioniert, und der einzige Zugriff, den ich Ihnen gewähren kann, ist schreibgeschützt auf Protokolle.
@MontyHarder Das liegt definitiv an der Spannung zwischen dem Ops-Ziel "Nicht brechen und nicht auslaufen" und dem Entwicklungsziel "Jetzt reparieren".
@WayneWerner Es ist nicht nur "nicht brechen und nicht auslaufen", es ist "verdammt sicher, dass ich dies zuverlässig replizieren kann".Die Trennung der Rollen zwischen dev und ops zwingt sie dazu, Abhängigkeiten explizit zu kommunizieren, damit wir diese zuverlässige Replikation durchführen können.Repariere es jetzt in dev, dokumentiere für mich, was du getan hast, um es zu reparieren, damit ich es in der Qualitätssicherung reparieren kann, und wenn das nicht funktioniert hat, hast du es nicht gut genug dokumentiert.Versuchen Sie es nochmal.
Tom
2018-08-16 12:55:13 UTC
view on stackexchange narkive permalink

Diese Konvention ist wie viele andere "Best Practices" für die Sicherheit ein praktischer Weg, um sicherzustellen, dass aufgrund schlechter Gewohnheiten oder Routine nichts schief geht.

Wenn Sie erinnern sich immer daran, dass sich Ihre vertraulichen Kennwörter in Ihrem Versionskontrollsystem befinden und wenn Sie niemals jemandem, der keinen Kennwortzugriff haben sollte, Zugriff auf das Repository gewähren und wenn Ihr Repository gespeichert ist So sicher wie diese Geheimnisse es erfordern und wenn Ihr Bereitstellungsprozess ebenfalls sicher und vor unbefugten Personen geschützt ist und wenn Sie sicher sein können, dass alle Sicherungen und Kopien Ihres Repositorys vorhanden sind sind und ... Sie können wahrscheinlich ein paar weitere "Wenn" hinzufügen, die für Ihren Kontext spezifisch sind.

... dann können Sie Ihre Passwörter gut in Ihrem Versionskontrollsystem speichern.

In den meisten Fällen entspricht mindestens eines dieser "Wenn" entweder nicht Ihren Bedingungen oder liegt außerhalb Ihrer Kontrolle.

In vielen Einstellungen sollten Ihre Entwickler beispielsweise keinen Zugriff auf die Produktionsdatenbank haben. Oder das Backup-System wird an eine andere Abteilung ausgelagert. Oder Ihr Erstellungsprozess wird in die Cloud ausgelagert.

Aus diesem Grund ist im Allgemeinen das Nicht-Speichern Ihrer Kennwörter in Ihrem Versionskontrollsystem eine bewährte Methode, um sicherzustellen, dass Sie dies nicht tun Fallen Sie in eine dieser Fallen, weil Sie nicht an sie gedacht haben. "Keine Passwörter in Git" ist leichter zu merken als eine lange Liste von Bedingungen, die Sie erfüllen müssen, um Passwörter sicher unter Versionskontrolle zu speichern.

Ben
2018-08-16 20:38:49 UTC
view on stackexchange narkive permalink

Andere Antworten sind großartig, berücksichtigen aber auch das Problem der Sicherungen. Sie haben viel mehr Flexibilität, wo, wie und wie lange Sie Ihre Code-Repository-Sicherungen speichern, wenn diese keine vertraulichen Informationen zum Zugriff auf Ihre Server- oder Administratorkonten enthalten.

Von einem anderen Sicherheits- Fokussierter Blickwinkel, nur Ihre Codesicherung könnte ein interessantes Ziel für unethische Konkurrenten in Ihrem Unternehmen sein. Abhängig von Ihrem Unternehmen würden die meisten Wettbewerber in einem Land der Rechtsstaatlichkeit es sowieso nicht anfassen. Eine Codesicherung mit Passwörtern ist ein Ziel für jede kriminelle Organisation, die an den Daten Ihrer Benutzer interessiert ist oder Ihr Unternehmen erpressen möchte.

Der Schaden durch einen Verstoß gegen das Code-Repository wäre aus ähnlichen Gründen mit den Passwörtern größer. Möchten Sie lieber Ihren Quellcode stehlen und veröffentlichen lassen oder alle Ihre Benutzer einem Identitätsdiebstahl aussetzen, mit einer möglichen Klage oder sogar einem Strafverfahren gegen Sie, weil Sie ihre privaten Daten nicht gesichert haben (denken Sie an GDPR)?

Santiago Blanco
2018-08-18 12:29:01 UTC
view on stackexchange narkive permalink

"Warum ist es eigentlich so schlimm, Ihre Schlüssel direkt in Ihre Haupttür zu stecken, wenn wir weit weg von der Zivilisation leben?"

Weil Leute, die schlechte Dinge tun wollen, es leicht machen und das tun Die Kosten, hart für sie zu tun, sind nicht zu hoch. Bewahren Sie Ihre Schlüssel nicht neben der Tür auf. Gesunder Menschenverstand.

Privates Repo? Wie viele Personen haben Zugriff auf den Download? Und wie viele Personen sind mit den Computern verbunden? Und dann ... Sind sie alle frei von Gefahren?

Um die Metapher zu erweitern: Machen wir für jeden Mitarbeiter eine Kopie der Bürotürschlüssel oder geben wir sie nur nach Bedarf aus?
gnasher729
2018-08-19 16:34:11 UTC
view on stackexchange narkive permalink

Dies hängt auch vom Quellcodeverwaltungssystem ab.

Git hat die Einstellung, dass das Quellcodeverwaltungssystem Ihnen einen zuverlässigen Verlauf des Projekts liefern sollte. Welches ist keine schlechte Einstellung zu haben. Wenn Sie ein Kennwort in git eingecheckt haben, ist es jedoch sehr schwierig, es aus Ihrem Repository zu entfernen.

Perforce hat zu diesem Zweck den Befehl "Auslöschen". Wenn Sie ein Passwort eingecheckt haben oder jemand eine unkomprimierte 8-Gigabyte-Videodatei eingecheckt hat oder jemand einen Code eines Drittanbieters eingecheckt hat, der das Urheberrecht einer Person verletzt und niemals hätte eingecheckt werden dürfen, oder jemand, der gefeuert wurde, hat viele Pornos eingecheckt An ihrem letzten Arbeitstag können Sie ihn "auslöschen". Es ist komplett aus dem Repository und aus der Geschichte verschwunden.

[Es ist einfach möglich, Passwörter aus dem Git-Verlauf zu entfernen] (http://www.davidverhasselt.com/git-how-to-remove-your-password-from-a-repository/) und [Schreiben Sie den Verlauf nach Ihren Wünschen neu] (https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History).


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...