it-swarm-eu.dev

Wie kann verhindert werden, dass Code außerhalb der Arbeit ausläuft?

Mögliches Duplikat:
Wie verwalte ich ein Closed Source-Hochrisikoprojekt?

Ich arbeite an einer Institution, die ein wirklich starkes Gefühl von "Besitz" hat - jede Software, die wir schreiben, sollte nur unsere sein. Ironischerweise bin ich der einzige Programmierer (ATM), aber wir planen, andere einzustellen.

Da meine Chefs die neuen Programmierer nicht als vertrauenswürdige Personen betrachten würden, haben sie ein Problem mit den Kopien des Quellcodes. Wir verwenden Git, damit sie eine vollständige Kopie von jeweils der Projekte haben, an denen sie arbeiten, wenn sie klonen das Repository.

Wir können den Zugriff auf sie mit Gitolite auf einen einzelnen Schlüssel beschränken und diesen an ihre PCs binden, aber sie können diese Schlüssel auf einen anderen Computer kopieren und sie hätten den Repository-Zugriff auf einem anderen PC. Außerdem (und die naheliegendste Methode) können sie die Dateien einfach an eine andere Stelle hochladen, eine weitere Fernbedienung hinzufügen oder die Dateien einfach auf ein USB-Laufwerk kopieren.

Gibt es eine (vielleicht clevere) Möglichkeit, solche Ereignisse zu verhindern?

EDIT: Ich möchte allen für ihre Einsichten in diese Frage danken, da es nicht nur mehr Auge war Eröffnung, aber auch eine feste Unterstützung meiner Argumente (da Sie im Grunde wie ich denken und ich versucht habe, sie dazu zu bringen, das zu verstehen) gegen meine Chefs in naher Zukunft.

Ich bin beruflich in einer schwierigen Situation, da meine Kollegen und Chefs (da ich im Grunde genommen in der Mitte bin) wie zwei Banden sind, daher wird all dieser Beitrag sehr, sehr geschätzt.

Es ist wahr, dass ich nach einer technischen Lösung für ein Menschen Problem gesucht habe - sowohl das Management als auch die Mitarbeiter sind das Problem, also kann es nicht sein auf diese Weise gelöst (ich dachte über eine Code-Verschleierung nach, vielleicht mit separaten Modulen usw. arbeiten, aber das würde von meinem Entwickler-POV nicht funktionieren). Das Hauptproblem ist die Kultur innerhalb und außerhalb des Unternehmens - die Entwicklung wird in meinem Land (Venezuela) nicht ernst genommen, daher sind Naivität und Paranoia hier tatsächlich ein echtes Problem.

Die wirkliche Antwort hier ist eine NDA (etwas, das hier in Venezuela nicht vollständig funktioniert), weil das die Leute Lösung ist, weil kein vernünftiger Entwickler funktionieren würde unter diesen Bedingungen. Die Dinge werden hässlich, aber ich denke, ich werde dank Ihrer Hilfe damit umgehen können. Vielen Dank an alle! <3

68
AeroCross

Dies ist eine der Situationen, in denen Sie nach einer technischen Lösung für ein soziales Problem suchen .

Ein soziales Problem sollte eine soziale Lösung erfordern, die in diesem Fall zwei komplementäre Formen und eine zusätzliche organisatorische Lösung annimmt, die helfen kann:

  • Vertrauen. Wenn Sie Entwicklern nicht vertrauen, stellen Sie sie nicht ein. Die Arbeit mit Menschen, denen Sie nicht vertrauen, ist gleichbedeutend mit Misserfolg. Beziehungen, die auf Misstrauen beruhen, erfordern viel Formalismus, was nicht nur die Produktivität Ihrer Mitarbeiter, sondern auch die Anzahl der Personen, die bereit sind, mit Ihnen zu arbeiten, erheblich beeinträchtigen kann. Die Chancen stehen gut, dass die besten Entwickler Ihr Unternehmen um jeden Preis meiden.

  • NDA. Jemandem zu vertrauen bedeutet nicht, dass Sie keine rechtlichen Vorsichtsmaßnahmen treffen sollten. Diese Vorsichtsmaßnahmen können in Form eines Vertrags oder einer NDA -Klausel mit schwerwiegenden Konsequenzen für den Mitarbeiter im Falle einer Offenlegung) erfolgen.

    Wie schwerwiegend die Folgen sind, hängt davon ab, wer Sie sind. Regierungsorganisationen, Terroristen oder Mafia können einige abschreckende zulassen. Ordentliche Unternehmen dürfen gesetzlich nur auf Finanzunternehmen beschränkt sein.

  • Slicing. Vertrauen und Verträge sind ein guter Anfang, aber wir können es besser machen. Wenn der vertrauliche Teil der Codebasis so aufgeteilt werden kann, dass zwei oder mehr Teile erforderlich sind, damit das Produkt funktioniert, stellen Sie sicher, dass der Entwickler aus Abteilung 1 den in Abteilung 2 entwickelten Quellcode nie sieht und umgekehrt.

    Mitarbeiter einer Abteilung sollten nicht in der Lage sein, Mitarbeiter anderer Abteilungen zu treffen, und im Idealfall sollten sie nicht einmal erraten können, was andere Abteilungen tun und wie viele Abteilungen vorhanden sind. Jede Person kennt nur einen kleinen Teil, was nicht ausreicht, um ein ganzes Bild zu haben (und ein ganzes Produkt außerhalb des Unternehmens zu rekonstruieren).

Das waren soziale und organisatorische Maßnahmen.

Nun, technisch Sprechen, Sie können nichts tun.

Sie können versuchen:

  • Zwingen Sie die Entwickler, in einem geschlossenen Raum auf einem Computer zu arbeiten, der nicht mit dem Internet verbunden ist und keine USB-Anschlüsse hat.

  • Installieren Sie Kameras, die alles überwachen, was im Raum passiert, und mehrere Sicherheitsbeamte beobachten ständig die arbeitenden Entwickler.

  • Durchsuchen Sie jeden Entwickler jedes Mal, wenn er den Raum verlässt, um sicherzustellen, dass er kein elektronisches Gerät hat, das den Code enthalten kann.

  • Jeder Entwickler muss über einen Knöchelmonitor verfügen. Das Gerät hört zu, was es sagt, zeichnet seine Position auf und versucht, ein elektronisches Gerät in der Nähe zu erkennen. Wenn sich der Entwickler in der Nähe eines Geräts befand, das nicht identifiziert wurde und auf dem Ihre Tracking-Software nicht installiert ist, versuchen private Ermittler und Hacker möglicherweise zu überprüfen, ob der Entwickler das Gerät nicht zum Durchsickern von Informationen verwendet hat.

  • Verbieten Sie Entwicklern, Ihre Gebäude zu verlassen, sofern sie nicht stark überwacht werden, und in irgendeiner Weise mit der Außenwelt zu interagieren.

Einige oder alle dieser Maßnahmen sind in vielen Ländern illegal (es sei denn, Sie vertreten einige Regierungsbehörden), aber das Schlimmste ist, dass Entwickler trotz all dieser Maßnahmen in der Lage sind, den Code zu erhalten Zum Beispiel, indem Sie es diskret auf ihre Haut oder auf ein Stück Papier schreiben und es in ihren Kleidern verstecken oder es einfach auswendig lernen, wenn sie Eidetisches Gedächtnis haben.

Oder sie können sich einfach global die Datenstrukturen und Algorithmen merken - das ist das einzig Wichtige, wenn es um geistiges Eigentum geht - und ihr eigenes Produkt erstellen, das von diesen beiden Dingen inspiriert ist.

137
  1. Lassen Sie sie eine Geheimhaltungsvereinbarung unterzeichnen.

  2. Stellen Sie nur Personen ein, denen Sie vertrauen.

  3. nterteilen Sie Ihre Codebasis. Verwendung der Abhängigkeitsinjektion, damit Sie ihnen Anforderungen geben können, dass die resultierenden Klassen nach Abschluss direkt in die vorhandene Architektur passen, aber keinen Zugriff auf das "vollständige Bild" haben ", nur lose Stücke. Nur hochrangige, vertrauenswürdige Personen hätten die Freigabe für den "architektonischen Klebstoff", der alle Arbeiten als Ganzes ermöglicht.

70

Ich liebe die Idee, dass es eine "clevere" Idee geben könnte, von der "wir" als Entwickler verblüfft wären. Vorausgesetzt, dass jedes geschriebene Entwicklertool von einem Entwickler geschrieben wurde und so weiter.

Das größte Problem Ihres Chefs ist die Naivität mit einem Schuss Paranoia. Ich bin dort höflich. Wirklich sehr, sehr höflich.

Wenn Sie wirklich eine Einkaufsliste mit Dingen wünschen, die Ihren Code geschützt halten, implementieren Sie einfach Folgendes:

  1. Deaktivieren Sie USB und andere IO auf allen Unternehmenscomputern. Dies kann über die meisten Unternehmens-Antivirenprogramme oder ähnliches erfolgen.

  2. Alle Entwicklermaschinen sollen Desktops oder Türme sein. Keine Laptops.

  3. Lassen Sie keine Maschine eine Verbindung zum Internet herstellen. Kein Web, FTP, E-Mail, IM, kein Internet. Schneiden Sie die Drähte.

  4. Keine Fernarbeit/kein Fernzugriff (wird von keinem Internet abgedeckt, aber einige intelligente spark könnte ein VPN vorschlagen)

  5. Keine Mobiltelefone oder andere elektronische Geräte dürfen in den sicheren "Entwicklungsraum" gebracht werden.

  6. Konfigurieren Sie alle Drucker so, dass auf jeder Seite vorne und hinten ein großes sichtbares Wasserzeichen gedruckt wird.

  7. tasche sucht sowohl rein als auch raus. Suchen Sie nach handgeschriebenen Notizen, nach allem, was auf Unternehmensdruckern gedruckt ist (alles, was in einem Bild mit Steganografie möglicherweise versteckten Code enthält!). Alle elektrischen oder elektronischen Geräte. In der Tat ist es wahrscheinlich am besten, sicherzustellen, dass Taschen nicht im sicheren Bereich aufbewahrt werden und Entwickler saubere Anzüge tragen sollten, wie man sie in Drogendichten und Chipfabriken sieht.

  8. Server sollten gleichermaßen isoliert sein, Backups sollten verschlüsselt sein und nur Ihr Chef sollte das Kennwort kennen, das von ihnen wiederhergestellt werden soll.

45
Ian

Wenn den betreffenden Personen nicht vertraut werden kann, dass sie ihre Arbeitsverträge einhalten, muss er sie nicht einstellen.

Wenn er glaubt, dass niemandem vertraut werden kann, ist er übermäßig paranoid und wird dem Unternehmen letztendlich Schaden zufügen, wenn er so weitermacht.

Irgendwann MÜSSEN Sie Ihren Mitarbeitern vertrauen. Es ist nicht wirklich eine Option, etwas anderes zu tun. Wenn Sie Ihren Mitarbeitern überhaupt nicht vertrauen, können sie möglicherweise nicht effektiv sein, weil Sie zu viel Zeit damit verbringen, ihnen zu misstrauen und viel Zeit damit zu verschwenden, aufgrund von Vertrauensproblemen durch die Reifen zu springen.

Wenn Sie den Leuten klar machen, dass Sie ihnen nicht vertrauen, neigen sie dazu, sich zu ärgern. Und verärgerte Programmierer finden schließlich einen anderen Job, bei dem sie nicht so behandelt werden.

Die richtige Lösung ist eine grundlegende Hintergrundprüfung, ein gut durchdachter Arbeitsvertrag und etwas Vertrauen.

35
Michael Kohne

Ich habe Code für klassifizierte Computersysteme geschrieben. Sie hatten alle möglichen lächerlichen Reifen, durch die sie springen konnten, um es geheim zu halten. Zum Beispiel durften wir keine Musik-CDs in bestimmte Räume bringen, da es sich um verkleidete CD-RWs handeln könnte.

Die Sache ist, dass die praktischen Aspekte der Arbeit Sicherheitslücken aus der Not heraus öffnen. Manchmal mussten Sie nicht klassifizierte Daten/Codes in oder aus einem klassifizierten Bereich transportieren, um die Arbeit zu erledigen. Ja, auch dafür gab es Regeln und Verfahren, aber sie alle liefen schließlich darauf hinaus, Menschen zu vertrauen. Anstatt darauf zu vertrauen, dass Personen keine klassifizierten Daten auf einem praktischen USB-Stick ablegen, vertrauen Sie nur darauf, dass genau dieselben Personen durch alle Sicherheitsbereiche springen.

Mit anderen Worten, es gibt eine Menge Dinge, die Sie tun können, um sich vor Außenstehenden zu schützen, aber sobald Sie sie hereinlassen, ist es so ziemlich nur eine Frage, wie sehr Sie sie ärgern möchten.

22
Karl Bielefeldt

Kurz gesagt benötigen Sie eine Geheimhaltungsvereinbarung/einen Geheimdienstvertrag mit Mitarbeitern, die Sie einstellen. Stellen Sie zusätzlich zu dieser unterzeichneten Vereinbarung Entwickler ein, denen Sie vertrauen können .

Technisch gesehen kann dieser Code leicht auf das Gerät kopiert und woanders wiederverwendet werden. Was Ihr Chef nicht will, ist - Zugriff Ihrer Konkurrenten auf diesen Code. Sie dürfen solche Richtlinien nur durch Arbeitsverträge oder Partnerschaftsverträge durchsetzen.

Eine andere Sache, die funktionieren kann, ist eine Schulung zur Sensibilität von Informationen , wie jeder Mitarbeiter benachrichtigt werden sollte, wenn die Vertraulichkeit von Informationen verletzt wird. Durch die Verfolgung von Computeraktivitäten in Ihrem Büronetzwerk wird außerdem die Warnstufe erhöht.

Eine ähnliche Art von Schulung wird jährlich für Mitarbeiter durchgeführt, die sich mit PHI-bezogenen Informationen befassen.

Es könnte jedoch der optimale Weg sein, vertrauenswürdige Personen an Bord zu holen und Schulungen zum Schutz dieser Informationen anzubieten.

16
Yusubov

Hast du Paycheck mit Ben Affleck gesehen? Ich denke, das ist der einzige Weg, um sicherzustellen, dass Ihre IP nicht "gestohlen" wird. Ich kann Ihnen sagen, dass ich aufgrund meines Gedächtnisses fast jedes System, an dem ich über einen längeren Zeitraum gearbeitet habe, neu erstellen konnte. Wenn es sich nicht um eine zeilenweise Erholung handelt, könnte ich die wesentlichen Elemente produzieren und sie dabei wahrscheinlich verbessern, da meine Fähigkeiten im Laufe der Jahre gewachsen sind.

Schlicht und einfach, es gibt nur zwei Dinge, die Sie erreichen können, indem Sie Ihren Code "sperren":

  1. Sie werden gute Entwickler zurückweisen, die von Ihrem offensichtlichen Mangel an Vertrauen beleidigt sind
  2. Sie werden eine große Flagge hissen, die die skrupelloseren Entwickler verführt

Wenn Sie der Meinung sind, dass Ihre Software so neu und erstaunlich ist, erhalten Sie ein Patent.

13
Michael Brown
  1. Sie können nicht verhindern, dass Code ausläuft. Sie können das Leck auf weniger wichtigen Code beschränken.
  2. Normalerweise gibt es nur einen Teil der Anwendung, der sie einzigartig macht. Das wäre ein Algorithmus. Sie können dies sehr gut verbinden und in einen separaten Zweig für die Quellcodeverwaltung einfügen. Sie und nur diejenigen, die daran arbeiten müssen, sollten Zugriff darauf haben. Sie stellen den anderen Entwicklern nur eine Binärdatei (verschleiert) und die Schnittstelle zur Verfügung.
  3. Teilen Sie Ihren Code in mehrere Module auf und lassen Sie die Benutzer nur an einem bestimmten Modul arbeiten. Die anderen Module werden binär (verschleiert) bereitgestellt. Dies kann jedoch zu weit gedehnt werden, als dass es nicht mehr verwaltet werden kann, und kann zu einer Duplizierung des Codes führen.
11
tofi9

Ich kenne jemanden, der in einer Umgebung wie dieser gearbeitet hat.

Einige Maßnahmen, die dort ergriffen wurden:

  1. Kein Zugriff auf den physischen Computer, alle Computer wurden in einem verschlossenen Raum mit Löchern in der Wand für Anzeige, Tastatur und Maus aufbewahrt.

  2. Kein Internetzugang.

  3. Angepasstes Betriebssystem, das ein internes Dateisystem mit Verschlüsselung verwendet (falls ein Computer irgendwie gestohlen werden sollte).

  4. Die Projekte wurden in statische Bibliotheken unterteilt, niemand hatte Zugriff auf den gesamten Quellcode (dies gilt natürlich nicht für alle Programmiersprachen).

  5. Es war ein sehr unangenehmer Arbeitsplatz.

9
yms

Achten Sie darauf, den Wert Ihres Quellcodes für Personen außerhalb Ihres Unternehmens nicht zu überschätzen.

Sicher - Sie haben viele Ingenieure (Entwickler, Qualitätssicherung usw.) viel Geld für die Entwicklung bezahlt, aber das bedeutet nicht, dass es für Dritte an sich wertvoll ist.

Welche genauen Angriffe gibt es?

Quellcode wird häufig von (z. B.) Spieleentwicklungs- oder IT-Sicherheitsunternehmen durchgesickert. Natürlich lassen solche Lecks sie schlecht aussehen, aber ansonsten verursachen sie keinen wirklichen Schaden.

Frag dich selbst:

  • Ist Ihnen die Qualität Ihres Quellcodes so peinlich, dass es Ihrem Ruf schaden würde, ihn zu verlieren?
  • Enthält der Quellcode selbst vertrauliche Geheimnisse (z. B. fest codierte Verschlüsselungsschlüssel, Einzelheiten zu finanziellen Beziehungen mit anderen Unternehmen)? Sollte es?
  • Könnte ein Konkurrent trotz des Risikos, entdeckt zu werden, wirklich von der Verwendung Ihres Quellcodes profitieren?

Soweit ich weiß, gab es einen Fall, in dem ein Mitarbeiter eines IT-Sicherheitsunternehmens versuchte, den Quellcode an einen Konkurrenten zu verkaufen. Der Wettbewerber meldete dies sofort seinem Arbeitgeber und er wurde bald entlassen. Kein Geld wechselte den Besitzer, aber der Mitarbeiter kann nicht mehr einfach in der IT-Sicherheitsbranche arbeiten.

9
MarkR

Man muss vertrauen, aber manchmal ist es besser, nur auf Verstöße zu achten. Wenn Ihr Code beispielsweise ausgeführt wird, kann er bei jeder Ausführung eine IP-Adresse im Internet anrufen und dabei die IP-Adresse, Computerinformationen und möglicherweise sogar den geografischen Standort protokollieren. Überprüfen Sie dieses Protokoll auf Probleme.

Natürlich gibt es Möglichkeiten, dies zu umgehen, und Entwickler könnten einfach auf den Code schauen und ihn nicht ausführen.

Sie können Ihre Firewall so konfigurieren, dass eine Paketprüfung mit etwas wie Snort durchgeführt wird, das a) die Verbindung sofort blockieren kann, wenn sie erkennt, z. Ihren Copyright-Hinweis und b) melden Sie ihn dem Management zur Nachverfolgung. Um SSL und HTTPS zu umgehen, müssen Sie einen HTTPS-Proxy auf Ihrer Firewall ausführen.

Möglicherweise haben Sie auf jedem PC ein Systemdienstprogramm, das externe Laufwerke und USB-Sticks auf bestimmte Dateien oder Schlüsselwörter überprüft, während diese angeschlossen sind. Sie können auch externe Laufwerke deaktivieren/sperren (ich habe gehört, dass das US-DOD dies tut). Sie müssten verlangen, dass sie Ihre Hardware verwenden und keine Hardware von zu Hause mitbringen.

Es gibt wahrscheinlich Programme, die alles protokollieren, was jemand mit einem Computer macht. Planen Sie einfach zufällige Überprüfungen dieser Protokolle und stellen Sie sicher, dass Entwickler über diese Funktion informiert sind.

Wenn Sie einen Verstoß gefunden haben, schlagen Sie den Entwickler mit dem NDA, das sie unterschrieben haben) über den Kopf.

5
Scott Whitlock

Eine technische Lösung könnte darin bestehen, alle Entwicklungssitzungen auf einem Server ohne (oder stark eingeschränkten und überwachten) Netzwerkzugriff zu hosten, der über den für die Bereitstellung der RDPoder VNC-) Sitzungen erforderlichen hinausgeht. Auf diese Weise befindet sich die Quelle niemals auf dem Computer eines Entwicklers. Es würde auch ermöglichen, von zu Hause oder von einem Kundenstandort aus zu arbeiten.

Letztendlich denke ich jedoch, dass die ganze Situation reif für ein Scheitern ist. Wenn Sie Entwicklern klar machen, dass Sie ihnen nicht vertrauen und ihre Arbeit erschweren, schaffen Sie meiner Meinung nach eine Umgebung, in der Entwickler --- (werden einen Weg finden, die Quelle öffentlich zu machen, nur um "Bleib beim Mann".

5
TMN

Sie arbeiten für Menschen, die einfach nicht verstehen, wie Software-Engineering funktioniert. Schlimmer noch: Sie schätzen es nicht (nur das, was sie daraus machen können). Es wird nicht möglich sein, produktiv für sie zu arbeiten. Letztendlich werden sie dich dafür bestrafen. Finde einen anderen Job.

2
itsbruce