Drunkna i PCI-DSS eller docka din app?

A drowner is a slimy creature

Drowner: En fruktansvärd varelse av lera och avskum som drar ner folk i myrar och bubblande virvlar. Den livnär sig på unga kvinnor som badar i floder och ibland drar de män av sina hästar eller vagnar när de passerar en bro eller fördämning. Drowners uppstår av skurkars kroppar som dött i rinnande vatten eller undervattensströmmar som bildas efter storm. Dessa vattniga varelser förkroppsligar de andar som inte kan vila efter döden och är ibland födda från foster aborterade med magiska medel. De är fula till utseende, magra, långa och beniga. Deras kroppar är slemmiga och gröna, även deras hår. En pöl av slem bildas där drowners sätter sin fot.

Du har tagit fram din app och är nöjd med hur den fungerar.

Du har skrivit om de delar av koden som ödelagts av den ytliga hanteringen av den globala variabeln, fixat den ’bad blinded’ SQL-Injektionen och illavarslande XSS som påträffades under penetrationstesten.

Stängt alla värdelösa anslutningsöppningar och börjat navigera bland alla kompatibilitetsproblem som din applikation har.

Den fungerar på RedHat, men på Debian missar den något, och för att inte tala om Windows där Cygwin måste installeras med alla frågor som en fruktansvärd uppgift kan medföra.

Samma smärta (eller ännu mer) gäller för Windows, om du måste flytta den till en Linux-maskin.

Om inte din ansökan är skriven i Java, är det du just läst vad alla utvecklare upplever när det är dags att ’port’ en applikation.

Java kan ofta vara bristfällig, ha prestandaproblem med sin egna JVM, och vem sa att alla måste förslavas av ett enda kodspråk?

När, och om kompatibilitetsproblem har lösts, så kan denna röra som kallas administrationssystem påbörja sin resa av PCI DSS.

Du kanske redan har blivit det monster som beskrevs ovan, som nästan drunknar i det kaos som finns inbäddat i IT-branschen. En alltför överkomplicerad värld som ständigt genomgår förändringar.

Om den tiden kommer vill du förmodligen byta karriär, eller fortsätta simma i det djupa havet, bli lerig och mager.

Båda alternativ låter rätt dåliga, eller hur?

Oroa er inte sade den vise! Bortom Java kan det finnas en frälsare som kastar dig ett rep för att rädda dig.

En sådan frälsare går under namnet Docker.

Vad är Docker?

För att kunna förstå konceptet bakom Docker så måste man först förstå vad skillnaden mellan Linux-kärnan och användarapplikationer är. Kärnan är själva programvaran, som ger applikationer åtkomst till din dators hårdvara via drivers och APIs. Användarapplikationer använder kärnan för att köra, och omfattar alla program du i normala fall skulle använda, såsom:

  • Webbservrar som Apache
  • Applikationsservrar som PHP
  • Databasservrar som MySQL
  • ’Shells’ som BASH
  • Verktyg som Git
  • E-posttjänster etc.
  • Docker är ett verktyg som sveper upp ett antal av Linux-teknologier – främst ’cgroups’ och ’kernel namespaces’ – för att isolera grupper av användarapplikationer så att alla gemensamt brukar kärnan, och delar upp resurser som det passar. Applikationerna körs i ett objekt som kallas en behållare (container), den är portabel och kan med lätthet lyftas och flyttas mellan servrar och datorer.

    Docker VM explanation

    Hur hjälper Docker till när det gäller PCI-DSS-efterlevnad?

    Tänk dig att du skriver din ansökan och tillsammans med säkerhetskonsulter säkrar den så bra ni kan.

    Ni tar sedan kontakt med en PCI-DSS-certifierad ’hosting provider’. Ni skickar er Docker-behållare till ’the hosting provider’….och voila:

    Omfattning minimeras.

    Mindre strul för din QSA, mindre konfiguration och tid för din ’hosting provider’…och gissa vad? Mindre kostnader för dig!

    Allt låter fantastiskt, men en sak dyker upp i mitt huvud:

    Om grundidén med Docker är att skicka min behållare med min ansökan och egen instans av MySQL, Apache, PHP och deras konfigurationer, hur följer jag då:

    2.2.1 Implementera endast en huvudsaklig funktion per server för att förhindra att funktioner som kräver olika säkerhetsnivåer ska samexistera på samma server. (Till exempel webbservrar, databasservrar och DNS ska implementerar på separata servrar).

    Notering: Där virtualiseringsteknik är i bruk, implementera endast en primär funktion per virtuell systemkomponent.

    Med Docker-databasen, så samexisterar webbservrar och applikationsservrar i samma behållare (container) och därmed på samma server. Kan Docker betraktas som en virtualiseringsteknik? Borde vi sätta alla primära funktioner i separata behållare? Om ja, är det fortfarande vettigt att använda Docker istället för VMs?

    Om vi svarar jag på frågorna, och behållarna är isolerade från varandra så skulle det rent hypotetiskt vara möjligt att sätta upp ett helt betalningssystem inuti en single server, med alla primära funktioner uppdelade i flera behållare som delar samma kärna.

    Om inte, så är Docker troligtvis inte så behjälpligt när det gäller PCI DSS, och inte heller ur en kompatibilitetssynpunkt.

    Hur som helst är Docker en ny teknik, och som Friedrich Nietzsche brukade säga:

    Framtiden påverkar nutiden lika mycket som dåtiden gör.