Hur blev kodsignering viktigt?
Låt oss titta på tre intressanta trender som har uppstått inom mjukvaruutveckling under det senaste decenniet.
En är att antalet företag som utvecklar och släpper programvara har ökat enormt. En viktig utlösande faktor för detta har varit smartphonerevolutionen och det därmed sammanhängande behovet för företag att ha egna mobilappar för sina kunder, såväl som anställda.
Den andra trenden är att det primära sättet att distribuera programvara, såväl som relaterade patchar och uppgraderingar, nu allestädes närvarande har blivit internet. Fördelarna med att använda online-programvarudistribution, jämfört med traditionella metoder som CD-skivor (Compact Discs), är betydande: storskalig, nästan omedelbar programvarudistribution till extremt låga kostnader.
Den tredje trenden är att antalet oberoende programvaruleverantörer (ISV:er) som huvudsakligen arbetar med att bygga programvaruapplikationer har ökat stadigt under åren, och vissa forskningsrapporter indikerar en tiofaldig tillväxt under det senaste decenniet.
Dessa trender förklarar hur online-distribution av programvara har blivit den föredragna metoden för företag som utvecklar och säljer programvara. Men medför denna metod och dess bekvämlighetsfördelar också affärsrisker?
Hur vet en användare om programvaran som laddas ner kommer från den ursprungliga upphovsmannen (och inte från en imitatör)? Hur vet användaren att programvaran inte har manipulerats och att någon skadlig kod har infogats i programvaran? Kodsignering ger svaret på dessa frågor genom att hjälpa företag att säkra den programvara de släpper.
Förutom mjukvaruutvecklare och säkerhetsspecialister inom företag är det avgörande för projektledare, produktchefer, tekniska chefer och även högre chefer att vara bekanta med kodsignering. Anledningen är enkel. Kodsignering är ett utmärkt skydd mot attacker med skadlig kod. Och skadlig kod är den dyraste typen av attack mot alla företag: den genomsnittliga kostnaden för en attack med skadlig kod, enligt en färsk forskningsrapport från IBM Security, är 239 miljoner dollar, vilket är 60 gånger mer än den genomsnittliga kostnaden för ett dataintrång!
Hur fungerar kodsignering?
”Koden” i kodsignering kan betyda körbara filer, arkiv, drivrutiner, firmware, bibliotek, paket och i princip all programvara som är avsedd för utgivning och distribution till en annan part eller användare.
För att förstå hur kodsignering fungerar är det viktigt att ha en grundläggande förståelse för Public Key Infrastructure (PKI)Som definierats i tidigare artiklar på den här bloggen är PKI en uppsättning roller, policyer, hårdvara, programvara och procedurer som behövs för att skapa, hantera, distribuera, använda, lagra och återkalla digitala certifikat och hantera kryptering med publika nycklar. Det är också viktigt att förstå de två primära målen med kodsignering:
- Kodägarskap: Bevisa att programkoden som laddas ner och installeras kommer från den ursprungliga, autentiska ägaren.
- Kodintegritet: Bevisa att koden inte har manipulerats eller ändrats på något sätt, t.ex. genom att skadlig kod (malware) har infogats i den.
Processen för kodsignering omfattar fyra huvudsteg, vilka beskrivs nedan.
- Nyckelgenerering: Grundkravet för kodsignering är att ha en privat nyckel och motsvarande publika nyckel tillgängliga. Det publika och privata nyckelparet kan genereras med hjälp av ett (betrott) tredjepartsverktyg eller programvara. En detaljerad förklaring av nyckelgenerering ligger utanför ramen för den här artikeln.
- Kodsigneringscertifikat: Du behöver sedan ansöka om ett kodsigneringscertifikat med en Certifikatmyndighet (CA), vilket är en betrodd enhet som utfärdar digitala certifikat. Applikationen måste inkludera din offentliga nyckel tillsammans med annan organisationsidentitetsinformation. Några av de välkända certifikatutfärdarna inkluderar Verisign, Digicert, Symantec, GoDaddy, Comodo, Let's Encrypt och GlobalSign. Certifikatet som certifikatutfärdaren utfärdar innehåller information som din (organisations)identitet, din offentliga nyckel, certifikatets giltighetstid, certifikatutfärdarens digitala signatur och andra detaljer.
- Hashing: Nästa steg är att hasha din kod. Hashning är en enkelriktad process där data av valfri storlek och typ kan konverteras, genom en matematisk algoritm, till data med fast storlek. Algoritmen kallas en hashfunktion, och dess utdata, dvs. data med fast storlek, kallas ett hashvärde eller en hash. Hashvärdet skiljer sig helt från originaldata, och originaldata kan inte härledas från hashen.
- Signering: Programvarans hashvärde krypteras eller "signeras" sedan med den privata nyckeln. Den krypterade hashen, tillsammans med kodsigneringscertifikatet, läggs till i programvarupaketet som nu är redo att skickas eller distribueras. Anledningen till att hashvärdet signeras, och inte originalprogramvaran, är att hashvärdet är en liten mängd data (vanligtvis upp till 512 bitar), som kan krypteras mycket snabbt, medan originalprogramvaran kan vara mycket stor och ta lång tid att kryptera. Det finns inte heller något egentligt behov av att kryptera själva programvarukoden: det fina med hashning är att om originalprogramvarukoden ändras med ens en enda bit, blir hashvärdet som produceras av hashfunktionen helt annorlunda.
Bästa metoder för kodsignering
Vi föreslår följande metoder för en säker kodsigneringsprocess:
-
Lagra de privata nycklarna i HSM
Ocuco-landskapet Hårdvarusäkerhetsmodul (HSM) tillåter inte export av privata kryptografiska nycklar till programvara, eftersom det gör dessa nycklar sårbara för attacker. Efter CAB Forums krav från juni 2023 rekommenderar vi starkt att man använder en FIPS 140-2 Nivå 2 (eller högre) certifierad HSM för kodsignering.
-
Begränsa åtkomst till privata nycklar
Vi rekommenderar starkt att endast minimala anslutningar till klientsystem tillåts med privata nycklar. Att begränsa nyckelåtkomst till ett begränsat antal användare kommer att lösa en hel del osynlig användaraktivitet.
-
Koden ska alltid vara tidsstämplad
Tidsstämpling är ett bra sätt att spåra när kod har signerats och hjälper till att kontrollera signaturens giltighetstid. Det gör det också möjligt att verifiera koden efter att certifikatet som användes för signering har löpt ut eller återkallats.
-
Undvik att överanvända en enda tangent
Organisationer använder ibland samma nyckel för att signera kod för flera produktlinjer och företag. Detta är inte en bra metod. Om nyckeln komprometteras kommer alla utgåvor som signerats av den nyckeln att vara i fara. En bra praxis är att rotera dina nycklar så ofta som möjligt.
-
Skapa transparens och centralisera hanteringen
Generellt sett hanterar organisationer certifikat och nycklar manuellt. Men detta är inte en bra metod eftersom manuella processer varken ger fullständig insyn eller centraliserad kontroll över nycklar. Att tillämpa olika policyer på nycklarna och reglera dem är svårt utan ett centraliserat hanteringssystem.
Vad händer när programvaran laddas ner?
På mottagarsidan kontrollerar webbläsaren som används för att ladda ner programvaran först att certifikatet i den nedladdade koden är autentiskt och kommer från en pålitlig certifikatutfärdare. Detta är möjligt eftersom de offentliga nycklarna för de flesta välkända certifikatutfärdare redan är förinstallerade i de flesta webbläsare och operativsystem.
Om certifikatet inte autentiseras kommer webbläsaren att varna dig, och beroende på webbläsarens säkerhetsinställningar kan nedladdningen tillåtas eller inte tillåtas. Om användaren ignorerar denna varning och försöker installera programvaran kommer operativsystemet att utfärda en varning som indikerar att programvaruutgivaren inte kunde verifieras, vilket effektivt avskräcker användaren från att installera programvaran. Detta åtgärdar det första målet med kodsignering, dvs. att fastställa äganderätt till kod.
Om certifikatet autentiseras extraheras den publika nyckeln från certifikatet och används för att dekryptera den krypterade hashen som finns i paketet. Därefter hashas den faktiska nedladdade programvaran (minus certifikatet och hashen) igen med samma hashfunktion. Detta hashvärde jämförs med det dekrypterade hashvärdet. Om de matchar har programvaran inte ändrats. Om en angripare har ändrat programvaran (t.ex. genom att lägga till skadlig kod) kommer hashvärdena inte att matcha, operativsystemet kommer att utlösa en varning och vägra att installera programvaran. Detta åtgärdar det andra målet, dvs. att säkerställa kodens integritet.
Kodsignering för säkerhet i programvaruleveranskedjan
När en privat nyckel komprometteras förlorar certifikatet sitt förtroende, vilket förstör äktheten och integriteten hos den programvara som signeras av detta kodsigneringscertifikat. Kodsigneringsrutiner säkerställer säker produktutveckling, produktion och distribution. De bästa metoderna för att skydda programvaruleveranskedjan med säker kodsignering är:
-
Autentisera kod före signering och publicering
Organisationer bör använda effektiviserade kodsigneringsprocesser, såsom CI/CD-pipelines och godkännandeprocesser, för att förhindra att skadlig kod signeras. Efter signering bör koden eller artefakten autentiseras och verifieras innan den släpps till användarna. Organisationer bör också föra loggar över alla kodsigneringsprocesser för senare granskning.
-
Återkalla komprometterade certifikat
För att säkerställa kodsäkerhet bör återkallelse följas. Certifikat som har komprometterats bör återkallas av CAPå så sätt kan de skadade eller komprometterade certifikaten inte användas för kodsigneringsaktiviteter.
Kodsignering i molnbaserade miljöer
Kodsignering är mycket viktigt vid distribution av molnbaserade applikationer eller DevOps. Innan vi distribuerar programvara till användare kan vi signera och verifiera programvarutyper som containeravbildningar, applikationsbinärfiler etc. I molnbaserade miljöer är kodsignering integrerad med CI / CD pipelines för att upprätthålla programvarans förtroende och autenticitet. Genom att inkludera kodsignering i molnbaserade miljöer kan organisationer förhindra risken för manipulering av kod som gör den skadlig för distribution.
Slutsats
Idag är kodsignering en viktig del av mjukvaruutvecklingens livscykel. Utan kodsignering riskerar företag att förlora användare och möta enorma ekonomiska och ryktesmässiga risker i händelse av skadlig kodattacker. Det är därför avgörande för programvaruchefer såväl som högre ledning att förstå kodsignering och dess betydelse för deras organisationer.
