Security Professionals - ipfw add deny all from eindgebruikers to any

Client certificaten, hoe op https niveau?

26-09-2017, 08:58 door Anoniem, 10 reacties
Beste professionals,

Ik ben IT'er bij een middelgrote organisatie, met collega's actief op alle werelddelen. We gebruiken een SSL portal voor toegang van buitenaf, hier ben ik uiterst tevreden over. Echter voor Outlook Mobile Access (oma) staat 443 gewoon op.
Nu vraag ik mij af of ik op de client devices het https verkeer kan controleren door ook daarop een client certificaat te plaatsen en dat er dus alleen succesvol https verkeer kan plaatsvinden indien er verbinding wordt gemaakt met het juiste certificaat.

M.a.w. ik wil op alle voor mij bekende apparaten zo'n eigen certificaat installeren. Waardoor voor andere apparaten er geen succesvolle https connectie kan ontstaan.

Ik kan veel vinden over client certificaten met betrekking tot aanmelden, maar dat wil ik juist niet! Het lokaal aanmelden en via de SSL portal moet blijven functioneren.

Wat vinden jullie van dit idee en hoe is dit te realiseren. Met Google kom ik helaas niet echt verder.

Alvast bedankt voor het meedenken
Reacties (10)
26-09-2017, 12:55 door Anoniem
OK, dat zou moeten kunnen.
Ik heb weinig ervaring op dat gebied, maar zou het tegenwoordig heel erg anders gaan dan:
https://technet.microsoft.com/en-us/library/bb508836(v=exchg.65).aspx?
26-09-2017, 22:51 door Bitwiper
Door Anoniem: Nu vraag ik mij af of ik op de client devices het https verkeer kan controleren door ook daarop een client certificaat te plaatsen en dat er dus alleen succesvol https verkeer kan plaatsvinden indien er verbinding wordt gemaakt met het juiste certificaat.

M.a.w. ik wil op alle voor mij bekende apparaten zo'n eigen certificaat installeren. Waardoor voor andere apparaten er geen succesvolle https connectie kan ontstaan.
Om een wijdverbreid misverstand te voorkomen: een certificaat kun je het beste vergelijken met een fotokopie van een paspoort. Zo'n kopie kunnen overleggen zegt niets over jouw identiteit.

Voor authenticatie middels een digitaal certificaat moet de partij (server of client), die een identiteit claimt te hebben (door jou haar certificaat te sturen), bewijzen te beschikken over de private key behorende bij de public key in het certificaat. Pas nadat die partij heeft bewezen over die (unieke) private key te beschikken, is de identiteit bewezen.

Als je client- (of server-) authenticatie wilt m.b.v. een client- (of server-) certificaat, moet je naast dat certificaat ook de bijbehorende private key op de client (of server) installeren.

In principe kan wat jij wilt. Alleen zal zowel de server als elke client dat moeten ondersteunen. Mocht de OMA server dat niet doen, dan kun je dat nog wel fixen door er een reverse proxy server voor te zetten die deze taak (serverside) op zich neemt. Maar of al jouw clients dit ondersteunen is de vraag.

En als je dan toch zover bent dat je de last van client certificaatmanagement aan wil gaan (denk aan intrekken bij diefstal van devices, en veilig plaatsen op nieuwe clients), is het dan niet handiger om van VPNs gebruik te maken, zoals OpenVPN (dat clientcertificaten ondersteunt)?

Bijv. een Sophos UTM ondersteunt o.a. OpenVPN en heeft (eenvoudig) certificaatmanagement aan boord. Andere merken VPN dozen hebben ongetwijfeld vergelijkbare functionaliteit (disclaimer: ik heb geen relatie met Sophos, ik heb er alleen wel eens mee gewerkt).
27-09-2017, 00:33 door Anoniem
Misschien zit ik ernaast maar wat voegt dat client certificaat voor je toe?
Je verkeer wordt al versleuteld, dus veiliger is het niet.

Wat je er wel mee bereikt is dat mensen met mobile-devices zich aan kunnen melden zonder hun wachtwoord (ipv het wachtwoord wordt dat certificaat aangeboden).
Dat heeft als voordeel dat, wanneer de gebruiker zijn/haar ww wijzigt, dat niet op de mobile-device(s) óók moet gewijzigd.
Velen van ons herkennen vast de situatie dat een collega het ww wijzigt in windows en dat die zich vervolgens afvraagt waarom het account telkens wordt vergrendeld..

Dat betekend wel dat je op elke device een certificaat moet uitrollen en onderhouden, dus je moet dan wel je infra daarvoor inrichten.

Zie bijvoorbeeld dit linkje; https://blogs.technet.microsoft.com/exchange/2012/11/28/configure-certificate-based-authentication-for-exchange-activesync/
27-09-2017, 10:11 door Anoniem
Door Anoniem: Misschien zit ik ernaast maar wat voegt dat client certificaat voor je toe?
Je verkeer wordt al versleuteld, dus veiliger is het niet.
Een certificaat is niet alleen voor versleuteling, maar ook voor identificatie. Net zoals een server certificaat je
(binnen de beperkingen van het certificaat uitgevers mechanisme) garandeert dat je praat met de server met die
specifieke naam, kan een client certificaat aan de server vertellen met welke client die praat.
Dit staat los van inloggen. Het identificeert niet zozeer de gebruiker maar meer het apparaat. Je zou het als
een vorm van 2nd factor authenticatie kunnen gebruiken.
27-09-2017, 10:33 door Anoniem
Is OMA niet een onderdeel van Exchange 2003? Welke al een tijdje EOL is?

Tegenwoordig is het ActiveSync of OWA of EWS wat gebruikt wordt.

En of je nu Certificaatbased authenticatie wilt hebben... Daar zou ik serieus niet blij van worden. Certificaten zijn best complex om te onderhouden, zeker op BYOD devices zoals telefoons of tables. Nog even afgezien deze vaak te exporteren zijn, en dus gewoon ergens anders misbruikt kunnen worden. Voornamelijk schijnveiligheid.

Een veel gemakkelijke oplossing zou een tokenbased authenticatie zijn. RSA, Google authenticator, SMS. Die zijn veel veiliger en gebruikers vriendelijker.
27-09-2017, 12:19 door Bitwiper
Door Anoniem: Een certificaat is niet alleen voor versleuteling, maar ook voor identificatie.
Een client certificaat werd al nooit gebruikt voor de versleuteling van de verbinding.

Bij de tegenwoordig gebruikte Diffie-Hellman key agreement, speelt ook het server certificaat geen enkele rol meer bij de versleuteling.

Details voor geïnteresseerden hoe Diffie-Hellman werkt (zonder de wiskunde erachter): Een TLS verbinding (zoals https) wordt meestal versleuteld met AES, een symmetrisch versleutelingsalgoritme. Symmetrisch betekent dat je dezelfde sleutel gebruikt om te versleutelen als om te ontsleutelen (en dus zowel de client als server dezelfde sleutel moeten hebben).

Voordat je kunt versleutelen zullen de client en de server die sleutel dus moeten uitwisselen, maar door het kip-ei probleem kan dat natuurlijk niet via de nog onversleutelde verbinding (elke MitM kan dan die sleutel kan afkijken en het verkeer ontsleutelen).

Het door de heren Diffie en Hellman uitgevonden "key agreement" algoritme (meestal wordt dit "key exchange" genoemd, maar dat is nou juist net wat er niet gebeurt), feitelijk een wiskundig truc, bestaat eruit dat de client en de server een aantal speciaal geprepareerde getallen (afgeleid van random gegenereerde waarden) met elkaar uitwisselen via de nog niet versleutelde verbinding. Hoewel elke MitM deze getallen kan afkijken, kan zij hieruit niet de sleutel herleiden, maar de client en server wel.

Het grote voordeel van deze manier van overeenkomen van de gemeenschappelijke sleutel, is dat deze niet is afgeleid van de (fixed) public key in het certificaat (zoals vroeger), maar dat voor elke verbinding een unieke en onvoorspelbare sleutel wordt overeengekomen. Dit heet "Forward Secrecy"; het zorgt ervoor dat mocht iemand TLS netwerkverkeer opslaan en later de private key (behorende bij de public key in het servercertificaat) in handen krijgen, die persoon daar niks aan heeft en het verkeer nog steeds niet kan ontsleutelen.

Het grote nadeel van de Diffie-Hellman key agreement is dat je (als client) geen idee hebt met wie je die agreement uitvoert, d.w.z met de bedoelde server of met een MitM.

Pas hier komen het servercertificaat en de bijbehorende private om de hoek kijken: deze dienen uitsluitend voor authenticatie. Wat er gebeurt is dat de server de door haar berekende Diffie-Hellman parameters, voor verzending naar de client, aanvult met een digitale handtekening gemaakt met haar private key. Doordat de server ook haar certificaat naar de client heeft gestuurd, beschikt de client over de public key en kan daarmee de digitale handtekening over de door de server verzonden parameters controleren. Als die handtekening klopt en de domainname van de server (waar de client verbinding mee gemaakt heeft) overeenkomt met de domainname in het certificaat, weet de client zeker dat zij met de juiste server communiceert (onder voorbehoud dat de private key niet in verkeerde handen is gevallen, het om een legitiem uitgegeven certificaat gaat en de toegepaste encryptie niet kraakbaar is).

Overigens heb ik gisteravond https://www.security.nl/posting/532047/ESET%3A+Providers+voorzien+downloads+van+overheidsspyware#posting532389 bijgewerkt en daarin ook een link toegevoegd met waar ik deze info vandaan heb.

Door Anoniem: Net zoals een server certificaat je (binnen de beperkingen van het certificaat uitgevers mechanisme) garandeert dat je praat met de server met die specifieke naam, kan een client certificaat aan de server vertellen met welke client die praat.
Dit staat los van inloggen. Het identificeert niet zozeer de gebruiker maar meer het apparaat. Je zou het als een vorm van 2nd factor authenticatie kunnen gebruiken.
Dat ben ik helemaal met jou eens!

Overigens is het zonde van het geld om client certificaten te kopen, deze kun je prima in eigen beheer genereren in een lokale PKI (genereer een root keypair en root certificaat, zet dat cert op de server, en leid de client certs daarvan af).
27-09-2017, 15:01 door Anoniem
Ik ben de TS,

Fijn dat er constructief over mijn vraag wordt meegedacht. Ik zal proberen het één en ander te verduidelijken.

De vraag wordt vooral gedreven door de manier hoe ik over security nadenk. Ik zie het als een gebouw, daar heb je deuren in om naar binnen en buiten te kunnen gaan. Deze deuren voorzie je van voorzieningen om er voor te zorgen dat er geen verkeerde mensen doorheen kunnen gaan, bijvoorbeeld sloten of tags en je past dan ook maar één soort systeem toe. Het liefst heb je zo min mogelijk deuren in een pand. Je hebt ook maar één hoofdingang omdat je dan makkelijk op de veiligheid van die ingang kan focussen.

Hetzelfde geldt voor mij voor ICT, je wilt niet een firewall met allemaal ingangetjes voor alle diensten. Ik wil het liefst maar één hoofdingang. Je valideert voor die ingang en je bent binnen.
In de praktijk heb je een firewall geconfigureerd voor VPN, SMTP, Active sync (inderdaad ipv OMA) en ga zo maar door. Allemaal andere diensten met allemaal hun eigen implementatie en veiligheid eigenschappen. Om terug te gaan naar mijn gebouw, wordt het een gebouw met verschillende ingang systemen van verschillende fabrikanten.

Daarnaast wil ik grip hebben op wie er aan de deur komt staan, immers is iedere deur openbaar en kan iedereen ter wereld met een internet aansluiting aan mijn deur rammelen. Als extra barrière wil ik kunnen bepalen wie zover kan komen om bij de deur te komen. Zie het als een hek dat om het gebouw heen staat met maar één toegangspoort en we geven bekenden een sleutel (certificaat). Ik zie het inderdaad als een 2nd factor authenticatie. De gebruikers moeten nog gewoon inloggen.

OpenVPN klinkt mij als een oplossing waar ik zeker naar moet gaan kijken.
27-09-2017, 16:27 door Anoniem
Wij gebruiken om deze reden een apache reverse proxy voor onze owa /async toegang.Hiermee is het implementeren van een cliënt cert authenticatie vrij eenvoudig en redelijk goed gedocumenteerd op internet. Deze reverse proxy nat je naar buiten op je firewall. Voor intern kan men gwn de Exch server rechtstreeks aan blijven spreken zonder dat er om een Client Cert gevraagd wordt. Om async op op het interne netwerk goed te laten functioneren dient de reverse proxy zowel intern als extern op een zelfde DNS naam te draaien.

Uitdaging 2 is het client cert op de mobile device te krijgen. Voor Apple devices kan dit enkel met een MDM tool. Middels de MDM tool kan het client certificaat gepushed worden naar het Apple device. Ondersteuning van Android devices is moeizamer en bij elke versie / merk werkt het anders.
Google eens op: apache reverse proxy ssl exchange
en kijk eens op: http://www.zeitoun.net/articles/client-certificate-x509-authentication-behind-reverse-proxy/start

Advies:
Start eerst met de apache proxy zonder cliënt cert. Als dat goed werkt zet een client cert op /owa zodat je het afdwingen van een client cert eenvoudig kan testen. Als dat ook goed werkt kan je async testen en het pushen van een client cert naar een mobile device middels een MDM tool

Succes.
28-09-2017, 12:55 door Anoniem
@ anoniem, 27-9-2017 16:27

Bedankt voor de tips, deze zal ik ook bekijken. De reverse proxy hebben we al en functioneert prima en dat ik hier dit probleem moet oplossen had ik ook al bedacht. Het probleem is vooral dat client certificaten vooral in de context van aanmelding worden gebruikt i.p.v. een wachtwoord. Dit is net niet wat ik wil, je zou dan traditionele aanmelding moeten uitzetten om het gebruik van client certificaten af te dwingen.

In principe gaat het bij ons niet om veel telefoons of laptops. max 100 en deze gaan altijd wel een keer door onze handen, ook voor BYOD. Dat is dus nu nog geen probleem voor ons.
28-09-2017, 16:23 door Anoniem
Wij gebruiken ze niet i.p.v. maar in combinatie en dat werkt goed.
Er wordt eerst een cliënt cert gevraagd. zonder cliënt cert stopt de ssl negotiation. Dus zonder cliënt cert geen owa aanmeldscherm. Als een valide cliënt cert wordt aangeboden wordt hierna het standaard aanmeld scherm met username / paswd aangeboden en kan men inloggen zoals men gewend is.

Als ik je goed begrijp is dat wat je wilt. Interne gebruikers verbinden rechtstreeks met Exchange Server waar niet om een client cert gevraagd wordt. Hoe er rekening mee dat je vlg mij een client cert niet handmatig op een IOS device geïnstalleerd krijgt. Je kan die vlg mij enkel met een MDM oplossing "provisionen"


# Voeg toe aan global config

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3


# Client Cert config. Je kan whatever selgsigned oplossing gebruiken die je prettig vindt.
SSLCertificateChainFile /etc/pki/easy-rsa/keys/ca.crt
SSLCACertificateFile /etc/pki/easy-rsa/keys/ca.crt
SSLCARevocationFile /etc/pki/easy-rsa/keys/crl.pem
SSLVerifyDepth 5


# Server Cert config
SSLCertificateFile /etc/pki/tls/certs/cert-mail.crt
SSLCertificateKeyFile /etc/pki/tls/private/cert-mail.key
SSLCertificateChainFile /etc/pki/tls/certs/extracert-cert.crt # hierin moet het intermediate cert zitten. Anders werkt Apple niet


# Virtual dir config

<Location /owa>
ProxyPass http://192.168.whatever/owa/
ProxyPassReverse http://192.168.whatever/owa/
SSLRequireSSL
SSLVerifyClient require # vraagt om een client Cert
</Location>
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.