Schutz von PHP Dateien vor Veränderungen und Auslesung

Hallo zusammen,
wie im Titel beschrieben, suche ich einen Schutz für die von mir geschrieben PHP Scripte/Dateien.

Ich verstehe den Grundsatz: Verschlüsseln von PHP Dateien, und dass Obfuscation dienen der Erschwernis, des Aufarbeitens und Verstehen des Codes.

Nun habe ich mich ein bisschen rumgegoogelt, und habe zwei Programme gefunden. Das eine Währe ZEND, und dass andere IonCube. Das gegenstück ist zendencoder. Der beide Schutzprogramme, mit ein Paar Mausklicks aufbricht. Beides findet man in den Ersten Sucheinträgen von Google.

Ich möchte mein Problem hier zum Verständnis weiter ausführen.
Meine PHP scripte brauchen in einem Bestimmten bereich, relativ viel Ressourcen um etwas zu berechnen. Um meinen Server zu entlasten wollte ich den Userrechner Nutzen. Der Braucht natürlich einen Webserver aber das Problem ist leicht gelöst.
Knifflig wird es, die Scripte vor dem User zu schützen. Da die Anwendung, nicht auf einen Kleinen Vertrauenswürdigen bereich eingeschränkt ist, sondern von der Offenen Gemeinschaft genutzt werden soll.
Und der Teil der Natürlich die "Arbeit" macht ist sozusagen das Herzstück. Das die Idee an sich geklaut werden kann ist klar, ich möchte nur verhindern das es einfach zu knacken ist und das es kurz dauert d.h. das sich der Aufwand lohnt.

Die Oben genannten Produkte, befinden sich in der Preisklasse 600-1000$. Da kann man natürlich sagen das Kauft sich eh keiner. Es gibt aber welche die haben diesen Decoder und bieten in Foren an die Verschlüsselten Dateien ohne nachfrage zu entschlüsseln.

Kennt ihr eine Software die den Arbeitsaufwand erheblich erhöt und bisher noch nicht mit einer one-klick löseung aufgebrochen wurde?

Gruß
Max

Edit: Satzzeichen/Grammatik
 
Zuletzt bearbeitet:
Ich glaub ich habe einen Lösungsansatz,

wenn ich den Ubuntu/Debian Server auf eine VM setze meine PHP Scripte inclusive dem Apache auf eine Separate Verschlüsselte Partition packe. Diese mit einem Script was sich in den Persönlichen Dateien des VM Users befindet Mounte, dürfte niemand an die Dateien Kommen da nach dem Ausschalten der VM ja die Patition wieder Verschlüsselt ist so wie der Persönliche Ordner...

Ich schubs mal Google mal sehen ob möglich oder unmöglich... :D
 
Das bin ich grade am suchen wie man das Bewerkstelligen kann ohne das man an das Entschlüsselung Script kommt. Da man ja auch eine "Rettungs CD" in ein Virtuelles Laufwerk legen könnte und dann das Script im "Autostart" Ordner auslesen könnte...

Aber mit Schwarzer Magie ist auch kein schlechter Ansatz :D
 
Ggf. könnte man es irgendwo "hartkodiert" verstecken (binary). Unauffälligerweise mit "passwort = sha256(some_non-ascii-bytes)".
Das würde gewisse Debugging und Debian-Setup Kenntnisse erfordern (z.B einfach die virtuelle Platte vorher in einer anderen VM mounten, einen eigenen User anlegen und sich dann mit diesem einloggen und die Scripte kopieren) ;)

Wobei: "richtige" Obfuscation (also nicht nur Variablen/Methoden umbenennen - und schon gar nicht die encode/decode Spielereien) sollte sich nicht mehr mit paar Klicks wegmachen lassen. Bei komplizierten Alogrithmen wäre das ein Hürde.
Zend&Co kann man ja immer noch "drauf" packen.
 
unknackbare software die auf der ausgeführten maschine nicht aufgebohrt werden kann ... der feuchte traum der meisten drm schlipsträger ...

ich sags mal so: ... solange man die maschine unter kontrolle bekommt, gibts sowas nicht ...

ist ein henne ei problem:

du willst was verbergen -> du verschlüsselst es
um damit zu arbeiten braucht man jetzt den schlüssel ...
den willst du jetzt verbergen ...

egal wo du ihn hinlegst ... entweder man kommt daran um das programm initial starten zu können, oder man kommt nicht daran, kann aber auch das programm nicht starten ...

und wenn du nun den schlüssel verschlüsseln willst, bist du wieder am anfang ... du bekommst wieder einen schlüssel den es zu verbergen gilt ...
 
Da gebe ich dir recht :D das Problem bekomme ich so nicht in den Griff, den schlüssel zu verbergen.

Ich habe jetzt nach Testen eventuell etwas gefunden. Ich nehme jetzt Virtual Box starte den Server, Entschlüssle die Platte und bleibe im Login Stehen. "Speichere den Zustand der Maschine" dann habe ich im Ordner mit der VHD einen Snapshoot des Systems. Wenn ich jetzt die VHD Kopiere und auf einer Neuen VM starte beginnt er von Vorne bei Bootvorgang. Ein einbinden als Zweit platte ist auch fehlgeschlagen weil ich kenne ja den schlüssel nicht (als Angreifer).

Jetzt ist nur die Frage in wie weit man die Snapshoot Datei insoweit decoden kann das mann an die Benötigten Informationen zum Schlüssel für die eingebundene Festplatte kommt. Und wie viel arbeit das ist. Wenn ich euch die VHD inclusive Snapshoot hochlade, würdet ihr mir Test helfen in wie weit das in dieser Konfiguration angreifbar ist? Also versuchen die im moment "entschlüsselte" VHD einzubinden?

Den Aktuelle Test Schlüssel ist natürlich in einer Txt file bei :) es sind jetzt noch keine Produktivdaten drauf.

@xeayn Vielen Dank für den Hinweis das sehe ich mir mal an :)
 
Zuletzt bearbeitet:
Ich finde ja immer das Konzept von Mobile Agents interessant: Der Code wandert zu den Clients, allerdings nur dann, wenn der Client integer ist (z.B. überprüfbar z.B. mittels TPM, oder, wenn man einfach nur Aufwand erzeugen möchte, auch mit stink normalen Hashes, was auch mit php möglich sein wird ;)). Sofern eine Verletzung eines Schutzziels festgestellt wird, wird der Code gelöscht, oder wandert auf einen neuen Host.

Eine andere Möglichkeit wäre auch das Aufsplitten des Algorithmus in unterschiedliche Teile, wobei jeder einen Teil des Problems bearbeitet. Da jeder nur einen Teil arbeitet, wird der Algorithmus an sich nicht öffentlich. Gleiches könnte man natürlich auch mit den Daten machen.
 
Zuletzt bearbeitet:
HalbOT:
@xrayn: jau, allerdings ist der Fragesteller wohl eher an einer konkreten, praktikabelen Lösungen interessiert ;) - und da findet man beim naiven googlen gerade mal die "variablen umbenennen + kommentare entfernen" "Obfuscatoren" :rolleyes:.
Zudem die zusätzliche VM-Schicht die Berechnung noch deutlich (falls CPU-bound) verlangsamen dürfte.

Apropos der Aufsplittung
Eine andere Möglichkeit wäre auch das Aufsplitten des Algorithmus in unterschiedliche Teile, wobei jeder einen Teil des Problems bearbeitet.
und CPU-bound-Probleme.
Wäre eine Umsetzung des Berechnung (z.B als Modul) in einer Sprache, für die Machinencode-Compiler verfügbar sind, eine Option?
Ohne jetzt PHP bashen zu wollen - für Numbercrunching ist es für gewöhnlich nicht die beste Lösung.
Ggf. ist der Performancegewinn ausreichend, um das Teil gar nicht auf fremden Rechnern laufen lassen zu müssen - und wenn nicht, hat man schon eine relativ gute "eingebaute" Obfuscation.

die Frage in wie weit man die Snapshoot Datei insoweit decoden kann
Das ist ein ganz normaler Dump des VM-RAMs (Byteweise) ;).
Zum Schlüssel: es wird sehr wahrscheinlich ein von Usereingabe abgeleiteter Schlüssel benutzt. Sowas wie bcrypt/PBKDF2.
Um ohne großartige Fummelei an die Scripte heranzukommen:
einfach mal abwarten, bis die Scripte ausgeführt wurden, dann nochmal "Snapshot" machen und in diesem nach "<php" Parts suchen.
 
Ich möchte mein Problem hier zum Verständnis weiter ausführen.
Meine PHP scripte brauchen in einem Bestimmten bereich, relativ viel Ressourcen um etwas zu berechnen. Um meinen Server zu entlasten wollte ich den Userrechner Nutzen.
PHP ist in so einem Fall wahrscheinlich eh die falsche Wahl, da es bei solchen Berechnungen eine furchtbare Performance aufweist.

Eine bessere Lösung wäre es, sowas in C/C++ zu programmieren und dann die Ergebnisse zurück an den Server senden zu lassen. So müsste der User nicht auch erst lokal nen Webserver aufsetzen.

Wem C/C++ zu doof ist, kann auch Java nehmen, was eigentlich ganz gute Performance aufweist. Allerdings müsstest du dort dann auch schauen, wie man es vor dem decoden schützt.
 
Ich habe mich bewusst für PHP entschieden da dies alle vorrausetzung erfüllt die ich für dieses Projekt benötige, eine andere Sprache für den "Client" hatte ich auch schon überlegt, es gibt aber einen Sicherheitsaspekt warum das Script erst lokal ausgeführt werden sollte, um anschließend mit dem Server kommunizieren. Die Verschleierung des PHP, dient im größten Bestandteil des Users Sicherheit selbst und erst im Zweiten teil des Schutzes meines Programmierten Scriptes. Währe dieser Aspekt egal könnte ich die Scripts auf meinem Server direkt laufen lassen weil durch diesen Sicherheitsaspekt dann auch die Rechenaufgabe unsinnig währe, da man ansonsten von pseudo Sicherheit reden könnte die ich meinen Usern vorgaukle.
Zwar könnte man auf anderen Wege diesen Aspekt wieder einfügen, doch das ist dem "Normalen" Anwender, der dieses Verwendet nicht zumutbar. Da außer Knöpfchen drücken, wissen vorhanden sein muss um die Sicherheit die ich geben möchte zu erreichen. Zudem wird der Bedienkomfort so drastisch reduziert das das wahrscheinlich niemand haben möchte.

Zum jetzigen Bedienkomfort es gibt eine eine Portable Version von der VM die ich vorkonfiguriert meinen Benutzern anbieten kann. Das mit den Lizenzrechten geht in Ordnung da GPL2.

Muss nach einer kleinen Distribution ausschau halten, 3,5 GB ist zu groß da gibst es ja ein glück viel Auswahl :D und natürlich muss die Lizenz passen.

Gruß
Max
 
Wenn ein Teil Deines Programms unter der GPL steht muss meines Wissens(? Bitte um Korrektur wenn ich falsch liege) nach Dein Programm unter der gleichen Lizenz stehen. Hier wäre also wohl die LGPL besser.

Generell frage ich mich ja, was PHP hat was keine andere Sprache hat und es sich dabei auch noch um eine Anwendung handelt die performant arbeiten soll...Und wieso der Code nicht beim Nutzer landen sollte (also inwiefern schützt ihn das?)

Die besten Möglichkeiten sind wohl verschlüsseln + auf dem Server laufen lassen oder aber eine Lösung tpm-like.
 
Das müsste ich nur wenn ich teile diese VM Software direkt verändern würde also Verwenden.
Da ich sie nicht Verwende sondern nur mit meiner Kombiniere muss ich mein Programm Teil nicht unter GPL vermarkten. Lasse mich aber natürlich sehr gerne eines Besseren belehren wenn ich die GPL Lizenz falsch verstanden, mit einer Lizenzklage ist in keinem masse zu spassen.

The GNU Operating System
und
GNU General Public License

Auszug Wikipedia:
Software unter der GPL-Lizenz darf für alle Zwecke ausgeführt werden (auch kommerzielle Zwecke, und GPL-lizenzierte Compiler und Editoren dürfen sogar als Werkzeuge für die Erstellung von proprietärer Software genutzt werden)[2]; sie darf bei rein privater (oder interner) Verwendung – ohne Vertrieb, ohne Weitergabe – modifiziert werden, ohne dass der Quellcode offengelegt werden muss (nur bei Vertrieb oder Weitergabe müssen der Quellcode und etwaige Code-Änderungen den Endnutzern zugänglich gemacht werden – dann kommt nämlich Copyleft zur Anwendung, um sicherzustellen, dass die Endnutzer-Freiheiten erhalten bleiben).[3] Jedoch muss Software, welche als Anwendungsprogramm unter einem GPL-lizenzierten Betriebssystem wie GNU/Linux läuft, nicht zwangsweise unter GPL oder quelloffen vertrieben werden – die Lizenzierung ist nur von den verwendeten Bibliotheken und Software-Teilen abhängig (nicht von der unterliegenden Plattform):[4][5][6][7] wenn z. B. ein Anwendungsprogramm nur eigene Software enthält, oder mit quelloffenen Software-Teilen kombiniert wird welche keinem strengen Copyleft unterliegen (also somit auch keine GPL-Teile),[8] dann müssen die eigenentwickelten Software-Teile nicht unter GPL oder quelloffen gelegt werden (selbst wenn das eingesetzte Betriebssystem unter GPL lizenziert ist).[4]

Fußnoten siehe:
GNU General Public License

Edit: Man sollte schauen das man auf der Richtigen seite ist wenn man Tippt ^^

Mmhhhh im moment kann ich dir das nicht so erklären nicht weil ich es nicht kann, aber ich bin im Moment noch vorsichtig was die Grundsatz Idee angeht da ich schon einmal "Bestohlen" wurde weil ich Blauäugig was verraten haben. Vieleicht bin ich auch total auf dem Holzweg und wenn ich meine das ich Fertig bin und lasse es von einer Unabhängigen Quelle prüfen der ich vertraue, und diese sagt "5 Meter Beton und Handflächen dicke Stahl Tore, alles schön und Gut, bringt aber nichts wenn die mauer ein Halbkreis ist" Kann auch Passieren aber in der Form wie ich es realisieren möchte habe ich Trotz langer suche nicht gefunden, mal teil stücke ja aber nicht in dem Packet. Eventuell wie gesagt weil es Technisch nicht realisierbar ist.

EDIT 2:
Ich edite das mal hier um Doppelpposting zu verhindern

Wenn das mit der VM klappt schreibe ich hier rein wie ich es gemacht habe ich denke den teil zu offenbaren ist nur fair. Ich habe nach Hilfe gefragt so poste ich auch die Antwort wenn "mir jemand" / "oder ich" die Lösung gibt/finde. Aber was tiefer reingeht möchte ich nicht Posten, nicht das es zu Missverständnissen kommt.
 
Zuletzt bearbeitet:
Nun es geht nicht da die VM Software es nicht ermöglicht System übergreifend die Snapshots bereitzustellen sondern sie nur auf Systeme Kopiert werden können mit gleicher Hardware Konfiguration.
 
Lässt sich die Aufgabe zerlegen? Also in kleinere Teile von dennen sicherlich nicht alle dein Kownhow gefährden dann könnte man im Client Teile in Javascript berechnen lassen und der geheime Teil wird dann auf dem Server gemacht. Oder was in meiner Vorstellung noch bessere wäre die Clients bekommen jeweils nur eine Teilaufgabe zur Berechnung und der Server setzt die Ergebnisse zusammen.
 
Mhmmmm das ist eine Idee. Wobei ich auch im Moment denke das ganze nach dem spenden Prinzip aufzubauen. Also auf die Community das ganze eventuell als selbstläufer zu gestalten
 
Zurück
Oben