Code signing troubles

Door Blokker_1999 op zondag 29 juli 2018 11:33 - Reacties (7)
Categorie: /var, Views: 2.956

!!! Klein beetje ergernis van de afgelopen weken/jaren van mij afschrijven !!!

Sinds heel wat jaren sta ik voor 1 van mijn hobby projecten in voor het digitaal ondertekenen van de code en installers die we creŽeren. Doordat we bijna dagelijks builds maken hebben we dit werk dan ook geautomatiseerd. Maar het verkrijgen van zo een certificaat en het gebruik ervan wordt met elke iteratie moeilijker en moeilijker.

Toen we hiermee begonnen hadden we via Tucows een certificaat van Comodo gekocht. Comodo is evenwel niet de eenvoudigste als het op verificatie aankomt van je identiteit. Niet alleen verwachten ze dat je een hoop documenten opstuurt, ze willen ook nog eens dat je langs de notaris passeert om deze te laten wettigen. Die man trok nogal een ogen, zoiets had hij nog nooit meegemaakt.

Toen het certificaat na 2 jaar verviel hebben we dan ook even rondgekeken en kwamen we bij Globalsign uit. Voor een gelijkaardig bedrag kregen we een eenvoudigere verificatieprocedure en bijkomend ook nog eens ondersteuning in het Nederlands ipv uit India. Dit is enkele jaren goed gegaan totdat Globalsign besloot om geen code signing certificaten meer te verkopen aan particulieren.

Terug naar Comodo dus, en terug langs de notaris. De eerste keer geen probleem, maar toen het certificaat verviel na 2 jaar ben ik tegen een muur aangelopen. Opnieuw heel de papierwinkel in orde gemaakt, netjes betaald maar ik heb nooit mijn certificaat gekregen. En ook mijn geld heb ik nooit teruggezien. Heel dat probleem heeft ons uiteindelijk meer dan een maand gekost voordat ik doorhad: dit komt niet meer goed. Snel een nieuwe aanbieder gezocht en ditmaal bij Thawte uitgekomen. Eenvoudige procedure (net zoals bij Globalsign), snel doorlopen en we waren weer vertrokken.

Recent naderde dan het einde van dat certificaat en ga je dus weer op zoek naar een nieuw aanbod. Blijkt dat ook Thawte gestopt is met het verkopen van code signing certificaten aan particulieren en als je wat verder kijkt dan vind je dat zo goed als alle aanbieders ermee gestopt zijn. Comodo bleek even de enige die er nog was totdat we bij Certum uitkwamen.

Maar niet alleen zijn de meeste CAs gestopt met de verkoop aan particulieren, het blijkt vandaag ook standaard te zijn om het certificaat om een smartcard te zetten in plaats van een puur softwarematig cert te gebruiken. Dus konden we ook nog eens gaan investeren in een hardware token. Nadat ik het token in ontvangst had genomen moesten we nog wat hordes overwinnen. Het tekenen gebeurd in een virtuele machine die vandaag op Hyper-V staat gevirtualiseerd. Het token heeft een USB aansluiting. Je ziet hem al komen, Hyper-V doet geen USB passthrough. Dit heb ik gelukkig kunnen oplossen met een freeware tooltje van VirtualHere. De gratis versie staat maar 1 USB apparaat toe, maar dat is alles wat ik nodig heb.

Dan heb je je kaartlezer in je VM, software en drivers geÔnstalleerd en dan blijft de software maar melden dat er geen kaartlezer beschikbaar is. Om gek van te worden. Daar ik eerst denk dat het aan de USB passthrough haal ik een oude PC van onder het stof, installeer er snel een Win10 op en merk dat ik daar hetzelfde probleem heb. Het duurt een tijd voor ik de klik maak maar opeens heb ik het.

RDP, verdomde RDP schakelt de smartcards uit op de PCs waarmee je verbinding maakt om dan je eigen smartcards door te geven aan die PC. Microsoft noemt dit een veiligheidsmaatregel. Ik kan er enkele andere, minder leuke namen voor bedenken. Maar het zij zo. Ik installeer snel VNC om mijn theorie te testen. Ik sluit de RDP connectie, start de VNC connectie en kijk, de kaartlezer is gevonden.

Maar nog mag ik niet rusten. Want het nieuwe hardware token heeft 1 groot nadeel ten opzichte van een softwarematige private sleutel. Telkens als ik het certificaat wil gebruiken om te tekenen, moet ik een PIN code ingeven. Begrijp me niet verkeerd. Ik begrijp waarom men hardware tokens is gaan gebruiken. Deze kan je niet zomaar stelen. Maar het maakt het er voor dit type van gebruik niet eenvoudiger op. Gelukkig kwam ik al heel snel een oplossing tegen op het grote internet waarbij men dit probleem had opgelost met AutoHotkey. Deze kan netjes voor je de PIN code ingeven telkens het venstertje naar boven komt.


code:
1
2
3
4
5
6
7
8
9
10
  Loop
  {   
    Sleep 2000
    if (WinExist("Windows Security"))
    {   
      WinActivate ; use the window found above
      SendInput 1234
      SendInput {Enter}
    }   
  }



En zo kunnen we weer 2 jaar verder. Benieuwd welke barriŤre ze in 2020 voor mijn voeten gaan gooien.

Volgende: “Iedereen kan mailen als Charles Michel of Jan Jambon” 10-'17 “Iedereen kan mailen als Charles Michel of Jan Jambon”

Reacties


Door Tweakers user i-chat, zondag 29 juli 2018 12:06

ik wilde eerst voorstellen om eens naar LetsEncrypt te kijken maar gek genoeg bieden die helemaal geen code-signing aan. Raar want juist zei bieden met hun geautomatiseerde systeem een mogelijkheid.

Als je de ticket erover lees op hun site zie je ook genoeg redenen om het juist WEL aan te bieden: denk aan domain validated software, voor kleine handige tooltjes die vaak snel worden aangepast en via andere sites weer worden aangeboden.

zo weet je dat qbittorent niet van torrentz.ru afkomstig is. dus zou windows het bestand ook niet moeten downloaden van welke andere site ook dan https://*.qbittorrent.org

Door Tweakers user Jeoh, zondag 29 juli 2018 12:35

Kun je geen AWS CloudHSM ofzo gebruiken hiervoor?

Door Tweakers user Blokker_1999, maandag 30 juli 2018 08:24

i-chat schreef op zondag 29 juli 2018 @ 12:06:
ik wilde eerst voorstellen om eens naar LetsEncrypt te kijken maar gek genoeg bieden die helemaal geen code-signing aan. Raar want juist zei bieden met hun geautomatiseerde systeem een mogelijkheid.

Als je de ticket erover lees op hun site zie je ook genoeg redenen om het juist WEL aan te bieden: denk aan domain validated software, voor kleine handige tooltjes die vaak snel worden aangepast en via andere sites weer worden aangeboden.

zo weet je dat qbittorent niet van torrentz.ru afkomstig is. dus zou windows het bestand ook niet moeten downloaden van welke andere site ook dan https://*.qbittorrent.org
Het probleem is dat men met code signing echt wel een minimum aan EV moet doen om zeker te zijn van de identiteit van de eigenaar van het certificaat. Uiteindelijk staan deze certificaten ook toe dat je code ondertekend van kernel mode drivers. Zonder handtekening kan je die niet meer inladen.

Dat is dan ook weer 1 van de redenen waarom men de beveiliging aan het opschroeven is en naar hardware tokens aan het gaan is. zo wordt het moeilijker om certificaten te stelen en dus weer moeilijker om malware te schrijven die zelf een driver kan inladen.

Het kan natuurlijk wel zonder die investering in EV, maar dan zal Microsoft ook nooit een cross signing certificaat bezorgen waarmee kernel mode drivers getekend moeten worden.
Jeoh schreef op zondag 29 juli 2018 @ 12:35:
Kun je geen AWS CloudHSM ofzo gebruiken hiervoor?
Dan moet je ook weer op zoek naar een CA die daarmee samenwerkt.

Door Tweakers user pinna_be, maandag 30 juli 2018 09:03

Dit lijkt me overigens een uitstekende toepassing voor blockchain!

Dat gezegd zijnde zou het naar mijn mening logischer zijn dat een code signing certificate wordt gegeven aan een domeinnaam, in plaats van aan een persoon (Uiteindelijk weet de eindgebruiker niet weet welke persoonsnaam bij een applicatie hoort en welke niet, waardoor de eindgebruiker waarschijnlijk ook installaties zou aanvaarden die getekend zijn door de verkeerde persoon.)

Als de domeinnaam trusted zou zijn (doordat je al betaalt voor een https certificaat) zou je de public key voor je code signing ook zelf kunnen hosten. In dat geval is het heel eenvoudig om certificates automatisch te hernieuwen.

Door Tweakers user Jeoh, maandag 30 juli 2018 09:10

pinna_be schreef op maandag 30 juli 2018 @ 09:03:
Dit lijkt me overigens een uitstekende toepassing voor blockchain!

Dat gezegd zijnde zou het naar mijn mening logischer zijn dat een code signing certificate wordt gegeven aan een domeinnaam, in plaats van aan een persoon (Uiteindelijk weet de eindgebruiker niet weet welke persoonsnaam bij een applicatie hoort en welke niet, waardoor de eindgebruiker waarschijnlijk ook installaties zou aanvaarden die getekend zijn door de verkeerde persoon.)

Als de domeinnaam trusted zou zijn (doordat je al betaalt voor een https certificaat) zou je de public key voor je code signing ook zelf kunnen hosten. In dat geval is het heel eenvoudig om certificates automatisch te hernieuwen.
Dat zijn Domain Validation certificates en die zijn er al. Probleem is dat je daar weinig aan hebt als kleine developer omdat je dan alsnog tegen Smartscreen en andere ongein aanloopt. Extended Validation is het minimum.

Door Tweakers user Crotchy, dinsdag 31 juli 2018 09:18

Blokker_1999 schreef op maandag 30 juli 2018 @ 08:24:
[...]
Het probleem is dat men met code signing echt wel een minimum aan EV moet doen om zeker te zijn van de identiteit van de eigenaar van het certificaat. Uiteindelijk staan deze certificaten ook toe dat je code ondertekend van kernel mode drivers. Zonder handtekening kan je die niet meer inladen.

Dat is dan ook weer 1 van de redenen waarom men de beveiliging aan het opschroeven is en naar hardware tokens aan het gaan is. zo wordt het moeilijker om certificaten te stelen en dus weer moeilijker om malware te schrijven die zelf een driver kan inladen.

Het kan natuurlijk wel zonder die investering in EV, maar dan zal Microsoft ook nooit een cross signing certificaat bezorgen waarmee kernel mode drivers getekend moeten worden.


[...]
Dan moet je ook weer op zoek naar een CA die daarmee samenwerkt.
echter gebruikt de meeste malware geen certificaat om hun driver in te laden.
meer dan genoeg wegen om een driver zonder certificaat in te laden (en vervolgens verborgen te houden)..
denk aan bestaande (signed) drivers waarbij kernel code execution gewoon exposed is naar usermode applicaties etc.
ook zijn er genoeg windows truukjes om hieromheen te komen die nog steeds werken op windows 10, waar anti virus ook geen stokje voor steken (TDL, DSEFix, etc).

[Reactie gewijzigd op dinsdag 31 juli 2018 09:21]


Door Tweakers user burne, dinsdag 31 juli 2018 21:43

Jeoh schreef op maandag 30 juli 2018 @ 09:10:
Dat zijn Domain Validation certificates [..]
Domeinvalidatie is de 'laagste' vorm van validatie. Alles wat je nodig hebt om ze aan te vragen is laten zien dat je controle hebt over de domeinnaam. Dat is zo eenvoudig dat certbot het volledig automatisch voor je doet om een let's encrypt-certificaat aan te vragen.

@Blokker_1999: ken je Xolphin? Die verkopen ook codesigning certificates van ondermeer Comodo maar hebben een eigen API en helpdesk die een hoop van de pijn die SSL heet weg weet te toveren. (Disclaimer: ze zijn klant van me en ik ben klant van ze.. ;) )

Om te kunnen reageren moet je ingelogd zijn. Via deze link kun je inloggen als je al geregistreerd bent. Indien je nog geen account hebt kun je er hier ťťn aanmaken.