Bedrijfsgeheim
Je kunt het programma aanbieden via SaaS met servers in eigen beheer, zodat de code onbereikbaar is voor klanten.
Maar hoe ga je om met een klant die SaaS On Premise wil?
Wat zijn de opties om het bedrijfsgeheim te borgen, om te voorkomen dat je in een rechtbank belandt?
Verder is alles wat je in PHP maakt niet direct open source. Dus je eerste stelling klopt niet echt ;-)
Gewijzigd op 02/03/2021 09:31:59 door - Ariën -
Open source is een licentiemodel (met vele subsoorten zoals Apache, GPL, etc) dat los staat van of de source leesbaar is of niet. Iets kan prima in PHP geschreven zijn en closed-source zijn.
Als een klant een SaaS oplossing on-prem wil hebben (wat het per definitie geen SaaS meer maakt) en het is een PHP-applicatie heb je m.i. 3 opties:
- Licentie waarin je verbied kopieën te maken
- Code obfuscation
- Compileren naar een .phar bestand
Die laatste 2 vind ik vrij onzinnig, dat is vaak redelijk eenvoudig ongedaan te maken.
Het hangt allemaal op vertrouwen, vertrouw jij dat je klant zich aan de gegeven licentie houd?
Als dat niet het geval is zou ik de opdracht weigeren, dat betekent bijna gegarandeerd een rechtszaak in de toekomst.
Als je een pakket verkoopt dan ontkom je bijna niet aan de verantwoordelijkheid alhoewel je veel kan uitsluiten. Voorbeeld: Microsoft neemt ook geen enkele rechterlijke verantwoording voor alle bugs en hacks...
Als je programmeert in opdracht, je verhuurt jezelf als programmeur, dan kan je het wel aftimmeren dat de klant/opdrachtgever zelf verantwoordelijk is. De klant moet testen, beoordelen, afnemen en vrijwaren. Als de klant zelf niet deskundig genoeg is kan hij dat uitbesteden. Kortom het is zoals je het contractueel aftimmert.
- Zend Guard lijkt me niet meer van deze tijd, het gaat maar tot en met PHP 5.6.
- PHAR klinkt interessant, maar kan je voorkomen dat een klant bij de PHP code kan door het te signen?
- IonCube klinkt het meest interessant omdat aangegeven wordt dat het compileert naar bytecode. Wat zijn jullie ervaringen? Ik vrees nog voor aanbieders van decoding tools als https://www.unzend.com
Ik heb een alternatief (omschrijven naar C++) maar dan mis je alle voordelen van PHP, daar zit ik niet direct op te wachten.
IonCube zeker weten! Het kost een beetje maar doet zeker weten zijn dienst!
Het enige probleem dat er dan nog overblijft is PostgreSQL.. als je geen root bent van de server, hoe voorkom je dat de klant de databasestructuur kan inzien en queries kan volgen?
In de database zitten een paar ideeën die ik niet graag laat zien, omdat de klant zelf programma's ontwikkelt die enigzins overlappen met de functionaliteit die ik aanbied.
Dat zal denk ik niet met IonCube (of C++) op te lossen zijn, dan moet de logica toch verschuiven naar het programma?
Als ze ook beheerder zijn van de onderliggende host (en dus de configuratie) houd niets ze tegen om queries te dumpen.
Je kan gaan voor "security by obscurity" maar dat werkt ook maar tot op zekere hoogte, de logica-truukjes naar de PHP-kant verschuiven lijkt mij dan "beter".
Weet je ook waarom de klant dat wil? Als de klant de code niet kan/mag aanpassen, waarom wil hij dan dat de code op z'n eigen server staat en niet op die van jou? Wat is voor hem het voordeel daarvan?
Een beperking is dat de klant niet zijn eigen gegevens in huis heeft, waardoor er risico is op het niet kunnen benaderen van de eigen gegevens.
Een ander nadeel is dat een SaaS systeem lastig is te koppelen met de eigen systemen van de klant. Denk aan connecties met databases van andere applicaties, provisioning via AD, SSO.
Dus SaaS "On Premise" (hoewel een contradictio in terminis) heeft enige voordelen; ik krijg PaaS van de IT-leverancier van de klant, zetten daar onze software op, en bieden het aan als SaaS aan de klant. (De klant bestaat uit meerdere dochterorganisaties).
En SaaS "On Premise" heeft nadelen, omdat het programma daar nog niet eerder voor gemaakt is moeten er enige aanpassingen gedaan worden om de code veilig te stellen tegen ongeautoriseerd gebruik, in het kader van bedrijfsgeheim.
Toevoeging op 02/03/2021 20:55:45:
Wat PostgreSQL betreft kan je het breder zien. Wanneer je privacygevoelige gegevens opslaat in een database van je website of programma, en je wilt het elders laten hosten op een VPS in de cloud, hoe borg je de gegevens?
Uiteindelijk is het veel eenvoudiger om door een audit te komen als je programma gecertificeerd is (ISO-27000, NEN-7510..)
Standaard biedt PostgreSQL een aantal mogelijkheden voor versleuteling.
Voor PostgreSQL lijkt de beste manier TDE (transparente gegevensversleuteling) wat gebruik kan maken van hardware versnelde encryptie voor data in rust (op schijf). In de wiki staat dat ze het misschien wel standaard willen gaan implementeren, maar ze zijn er nog niet uit of en hoe dan precies. Ondertussen heeft CyberTec een patch waarmee het wel moet kunnen.
Een ander artikel dat het vermelden waard is: https://www.highgo.ca/2019/09/30/the-transparent-data-encryption-in-postgresql
Maar TDE helpt maar gedeeltelijk. De grootste uitdaging is: hoe versleutel je de gegevens en -overdracht terwijl gegevens ook doorzoekbaar blijven? Of 'searchable symmetric encryption' in jargon.
Al zoekende krijg ik resultaten als deze. Het is weinig triviaal en ik heb er nog niet eerder mee gewerkt, maar het moet mogelijk zijn in PostgreSQL om te implementeren.
Er zijn ook eenvoudiger voorbeelden zoals deze.
Ik hoop dat dit het probleem oplost, maar hopelijk heb je nog een beter idee?
"Een beperking is dat de klant niet zijn eigen gegevens in huis heeft, waardoor er risico is op het niet kunnen benaderen van de eigen gegevens.
Een ander nadeel is dat een SaaS systeem lastig is te koppelen met de eigen systemen van de klant. Denk aan connecties met databases van andere applicaties, provisioning via AD, SSO."
Of is dit een vermoeden wat jij hebt?
Als de klant via een verbinding bij de gegevens kan, wat is dan dat risico van het niet kunnen benaderen van de eigen gegevens? Hoe reëel is dat risico dat hij er ineens niet meer bij zou kunnen? Anders gezegd ... is het überhaupt wel een risico?
Wat betreft het leggen van (database) connecties met andere applicaties, kan dat niet op afstand?
Ik probeer de mogelijke redenen/gevoelens van de klant niet te bagatelliseren ... maar wellicht kun je ze wegnemen?
Als het argument "niet goedkoop te koppelen" is zou dat al meer hout snijden.
Los van dit, als dat de wens van de klant is en jij bang bent dat ze met jouw intellectueel eigendom aan de haal gaan zou ik me afvragen of het wel de juiste weg/klant is. Zoals ik al zei, het is een kwestie van vertrouwen dat ze zich aan de gestelde licentie en de wet houden.
Er zijn wel methoden te verzinnen om de database dusdanig weg te stoppen dat uitlezen door een gebruiker/beheerder lastig word maar hierbij moet je je wel afvragen of het dan nog wel zin heeft om het on-prem te draaien.
Je verbergt de hele database, inclusief configuratie en eventueel logging wat het voordeel van data on-site hebben volledig teniet doet.
En dank Thom, die opties waren nog niet in me opgekomen. Hier heb ik zeker wat aan!
Wat ik me hierna bedacht, zelfs als je root bent op een VPS on premise, moet je voorkomen dat gegevens in verkeerde handen kunnen vallen. Er zijn ook nog encryptie-tools voor linux om bestanden en directories in zijn geheel te versleutelen. https://www.tecmint.com/file-and-disk-encryption-tools-for-linux
Nog wel een toevoeging op je laatste alinea:
Allemaal leuk en aardig die disk-level encryptie maar alles wat in RAM staat is gewoon onversleuteld.
Als je root access hebt kun je dat heel simpel dumpen naar een bestand en databases hebben de (nare) eigenschap dat ze zo veel mogelijk in RAM cachen.
Dit probleem ondervond ik ook met het opzetten van een Hashicorp Vault instance, de Vault root tokens zijn gewoon uit RAM te dumpen als je root bent op de onderliggende host (VM/VPS).
Dat brengt mij tot het volgende punt:
Root toegang (of eigenlijk alle verhoogde toegang) tot een systeem moet m.i. dan ook "gated" zijn middels bijv. een PAM-tool. Het komt zelden voor dat je daadwerkelijk alle root rechten nodig hebt en áls je verhoogde toegang hebt moet het goedgekeurd worden en traceerbaar zijn.
Maargoed, dan verzanden we in een geheel andere discussie, namelijk infra security.
Ik weet niet of dit bij een server/VPS kan, maar ik ben in de BIOS van een PC wel eens een optie tegengekomen waarmee je RAM onleesbaar kunt maken. Ik heb even geGoogled maar kan het zo snel niet vinden. Het kwam er volgens mij op neer dat de data in het RAM-geheugen 'gescrambled' wordt, waardoor de data als je die zou dumpen compleet onleesbaar is.
Ah ... ik heb toch nog wat gevonden. Mogelijk heet hetgeen ik bedoel TSME. Het lekken van gegevens uit RAM wordt 'rambleed' genoemd.
Hier nog wat om te lezen: https://developer.amd.com/sev/
Daarnaast is zijn veel Intel CPUs vatbaar voor bijvoorbeeld rowhammer of meltdown/spectre aanvallen dus SGX is niet waterdicht.
Misschien is het simpelste wel om een dedicated server bij de klant te plaatsen?
Dat biedt dan hardware bescherming tegen RAMBleed, bestandssystemen kunnen niet onderhuids gemount worden, de enige zwakke plek is dan de root toegang via ssh. Ik denk dan aan een gewone LUA-account die sudo kan doen wanneer dat nodig is.
Kan je iets meer toelichten over jouw gedachte over "gated" toegang via PAM?
Oooh! Je bedoelt vast "Priviliged Access Management" (ik dacht aan Pluggable Authentication Module). Ik ga eens goochelen.
En ik om er op dat de root-credentials opgeslagen zijn in een veilige repository. Maar dat zal er eentje zijn van de klant, en dan kan die mogelijk de credentials aan zichzelf toewijzen?
Op het moment van uitrollen van een server is alles misschien goed, maar wat als er volgende week een kritiek lek zit in een softwarepakket?
Wie gaat die lekken bijhouden, de software bijwerken en controleren of alles is gedicht?
Op het moment dat je je met serverconfiguraties gaat bezighouden (infrastructuur dus) open je een totaal nieuw boek, niet alleen een hoofdstuk. Er komt ineens gigantisch veel op je af, te veel om allemaal hier te benoemen.
Daarbij komt dat je dan zeer waarschijnlijk ook de root toegang moet afgeven zodat het door iemand beheerd kan worden.
Infra goed configureren en onderhouden is een fulltime baan en een vak apart, ik spreek uit ervaring. Als je niet bekend bent met het inrichten van enterprise-grade linux systemen zou ik het uitbesteden.
Lang verhaal kort: De makkelijkste weg is om het op eigen, eventueel gehuurde, hardware te zetten bij een van de grote clouddiensten. Dan hoef je zelf niet na te denken over de infra.
Ik moet er duidelijk nog even op kauwen, want de keuze tussen SaaS On Premise versus traditioneel SaaS (of een mix daarvan) hangt erg samen met in hoeverre de klant te vertrouwen is. Tot nu toe is mijn eigen ervaring dat dat niet altijd het geval is, dus dan heeft volledig SaaS de voorkeur.
https://www.rijksoverheid.nl/onderwerpen/intellectueel-eigendom/bescherming-intellectueel-eigendom
Als ik het goed begrijp, is de data van je klant maar wil je vooral de structuur van de database beschermen? Of gaat het meer om de PHP-code die de data verwerkt?
Gewijzigd op 03/03/2021 17:56:30 door Ward van der Put
Het is meeste is natuurlijk geen rocket science, maar er zitten concepten in die heel logisch lijken, maar die jaren van research en testen in de praktijk achter zich hebben. In een aantal queries zit essentiële (business)logica waaruit iemand die mee kan lezen weet hoe het product werkt, en het daarmee na kan maken.
Dank voor de aanvulling, octrooirecht en databankenrecht hoort er zeker bij. Omdat het concept al een poosje in de praktijk heeft gedraaid is een octrooi niet van toepassing. Het gevaar van octrooien is dat na een periode (was het anderhalf jaar?) als tegenprestatie vindingen gepubliceerd moeten worden, waarna je de bescherming van het bedrijfsgeheim kwijt bent en meer richting juridisch speelveld beweegt.
De uitwerking van een aantal ideeën is uniek, vandaar dat ik uitkom op bedrijfsgeheim.
Ik ging er van uit dat databanken in mijn geval niet van toepassing was, maar het kan geen kwaad de wettekst eens helemaal na te gaan, misschien is er toch nog iets van toepassing.