myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Code vor unerlaubten Zugriff schützen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Code vor unerlaubten Zugriff schützen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
sugar76 sugar76 ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.10.2017
Beiträge: 62
Entwicklungsumgebung: Visual Studio, IntelliJ IDEA
Herkunft: Berlin


sugar76 ist offline

Code vor unerlaubten Zugriff schützen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo allerseits,

ich habe zwar schon viel entwickelt, aber wenig Erfahrungen damit, wie ich von mir entwickelte Software vor unerlaubtem Zugriff schützen kann. Das gilt insbesondere dann, wenn die Software beim Kunden installiert ist, also nicht auf einem von mir betriebenen Server läuft.

Das betrifft folgendes:
* Wie kann ich sicherstellen, dass der Code nicht per Reverse Engineering ausgelesen werden kann?
* Wie kann ich verhindern, dass sensible Daten, wie z.B. Connection-Strings für Datenbanken, nicht im Klartext in irgendwelchen Config-Dateien landen, sondern verschlüsselt werden?

Wie sind Eure Erfahrungen in diesem Bereich?

Grüße,

Abid
07.12.2017 18:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.925
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Thema wurde ungefähr 42986423490324234 mal besprochen - und das vorsichtig geschätzt.

Bitte wenigstens 10 Sekunden die Forensuche oder Google verwenden. Wenigstens 10 Sekunden.
Beim Suchbegriff obfuscator hier im Forum findest Du über 150 Threads dazu.

Das Fazit ist: gar nicht.

 Schutz vor Deobfuscation
 [FAQ] DB-Password/Kennwort/Connection-String sicher speichern

Wenn Du ConnectionStrings brauchst, dann scheint es schon ein grundlegender Fehler bzgl. Architektur zu sein, dass die Anwendung direkt auf einen Datenbankserver zugreift und nicht über eine Server-Anwendung (zB ein REST-Service) dazwischen.
Eine solche Server-Anwendung wäre dann auch für eine individuelle Authentifizierung des Benutzers zuständig. Sowas sollte niemals die Datenbank übernehmen. Dafür ist sie nicht da; das kann sie auch nicht.

Das Prinzip dahinter ist eine ganz normale Client Server Architektur.
Nur, dass bei euch wohl der Server nur physikalisch und nicht als Anwendung vorhanden ist.
07.12.2017 18:11 Beiträge des Benutzers | zu Buddylist hinzufügen
sugar76 sugar76 ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.10.2017
Beiträge: 62
Entwicklungsumgebung: Visual Studio, IntelliJ IDEA
Herkunft: Berlin

Themenstarter Thema begonnen von sugar76

sugar76 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Abt:
Das Thema wurde ungefähr 42986423490324234 mal besprochen - und das vorsichtig geschätzt.

Da hast Du Recht... ich wollte einfach eine Diskussion eröffnen, der Stand der Technik kann sich ja mit der Zeit ändern.

Zitat von Abt:
Wenn Du ConnectionStrings brauchst, dann scheint es schon ein grundlegender Fehler bzgl. Architektur zu sein, dass die Anwendung direkt auf einen Datenbankserver zugreift und nicht über einen Service (zB. REST) dazwischen.

Bzgl. Architektur gebe ich Dir nochmal Recht. Es gibt aber Szenarien, in denen die Software beim Kunden läuft und dann läuft beim Kunden auch der REST-Service. Egal, welche Architektur man verwendet, irgendeine Komponente hat den Zugriff zur Datenbank und dort steht dann ein Connection-String.
07.12.2017 18:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.925
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das sind völlig verschiedene Szenarien.

- Szenario A: Verbindung zur Datenbank wird vom Client eröffnet, Benutzer hat direkten Zugriff auf die Verbindung - und hat potentiellen Zugriff auf die Credentials.
- Szenario B: Verbindung zur Datenbank wird vom Server eröffnet, Benutzer hat keinen Zugriff auf die Verbindung - und auch nicht auf die potentiellen Credentials.

Einen vollständigen Schutz für alle Szenarien gibt es nicht.
07.12.2017 18:44 Beiträge des Benutzers | zu Buddylist hinzufügen
Deaktiviertes Profil Deaktiviertes Profil ist männlich
myCSharp.de-Mitglied

Dabei seit: 06.07.2014
Beiträge: 985


Deaktiviertes Profil ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wer Zugang zum Rechner hat (root Rechte) der kommt immer an alles dran, wo auch der Rechner selber dran kann, sonst käme auch der Rechner nicht dran.

Klingt logisch, ist aber anscheinend nicht immer offensichtlich.

So etwas lässt sich organisatorisch wesentlich sinnvoller und effektiver lösen als eine tolle Pseudoverschlüsselung.
07.12.2017 20:18 Beiträge des Benutzers | zu Buddylist hinzufügen
Torni Torni ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.11.2014
Beiträge: 26


Torni ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Abgesehen davon haben Reverse Engineers bisher immer "gewonnen".

Einen richtigen Schutz gibt es nicht wirklich.

Wir haben früher alles gecracked was auf dem Markt war, da gab es keine Hindernisse..
Heute bin ich genau auf den anderen Seite..aber auch da gewinnen die anderen..
07.12.2017 21:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
sugar76 sugar76 ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.10.2017
Beiträge: 62
Entwicklungsumgebung: Visual Studio, IntelliJ IDEA
Herkunft: Berlin

Themenstarter Thema begonnen von sugar76

sugar76 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Erstmal vielen Dank für alle Antworten.

Ich fasse mal zusammen:
1) Code per obfuscation schützen bietet ein Plus an Sicherheit, aber mehr auch nicht.
2) Zugangsdaten zu Datenbanken, etc. lassen sich am besten dadurch schützen, dass man den Rechner absichert, auf dem die Zugangsdaten liegen. Hier ist die Verwendung einer separaten Zugriffsschicht (REST Service o.ä.) auf einem eigenen Server und den Zugriff zur Datenbank bereitstellt, "sicherer" als wenn die Zugangsdaten direkt auf dem Client Rechner liegen.
09.12.2017 10:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Deaktiviertes Profil Deaktiviertes Profil ist männlich
myCSharp.de-Mitglied

Dabei seit: 06.07.2014
Beiträge: 985


Deaktiviertes Profil ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Zwischenschicht schützt nicht nur die Zugangsdaten, sondern auch den Zugriff insgesamt.

Die Datenbank lässt man exklusiv mit der Zwischenschicht kommunizieren, damit wirklich keiner dazwischenpfuschen kann.

Und schon ist nur noch das möglich, was die Zwischenschicht erlaubt.

Ein weiteres Schmankerl: Ich brauche mir keine Gedanken mehr über irgendwelche Datenbank-Treiber auf dem Client machen (ist der Treiber installiert, passt die Version, ...)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Deaktiviertes Profil am 09.12.2017 12:34.

09.12.2017 12:32 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.925
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

1) Code-Verschleierung macht es nur komplizierter an den Quellcode zu kommen; von Sicherheit kann man hier trotzdem nicht sprechen.
Ein Entwickler, der weiß, was ILCode ist, weiß auch, wie man daraus C#/VB.NET Code bekommt. Laien können auch mit dem Quellcode direkt nichts anfangen.

2) Es geht darum, dass kein physikalischer Zugriff auf eine Datenbank erfolgen kann. Weder lokal noch über das Netzwerk.
Jeder Datenbankserver, der direkt erreichbar ist, ist eine potentielle Lücke.
In Azure zB. ist jeder Datenbankserver von Haus aus nicht erreichbar; nicht mal für andere Azure Dienste. Das muss alles einzeln freigegeben werden. Bewusst.

Ein ordentliches Authentifizierungssystem geht nur über eine eigene Server-Anwendung.
Ein Datenbankserver ist dafür nicht gemacht und es ist auch nicht seine Aufgabe (nein, die Benutzerverwaltung im SQL Server ist nicht dafür da!).
09.12.2017 13:39 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 24.08.2019 07:05