caml crush, un proxy pkcs11 filtrant sstic 2014

buy it, use it, break it ... fix it :
caml crush, un proxy pkcs11 filtrant
sstic 2014
R. BENADJILA, T. CALDERON, M. DAUBIGNARD
Agence Nationale de la
Sécurité des Systèmes
d’Information
5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
Contexte
Thomas et Guy-Manuel veulent :
des
des
des
une
secrets
opérations cryptographiques
clés et les utiliser
interface standardisée
{harder better faster stronger }
API
API
Échanger
Réaliser
Partager
Utiliser
Guy-Manuel
Thomas
Éviter les vulnérabilités et faiblesses.
Caml Crush : une solution robuste et flexible de
proxification de l’API PKCS#11.
1/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
Vous avez dit API de sécurité ?
Une API de sécurité est une interface de programmation
qui permet de réaliser des opérations cryptographiques
et des opérations de gestion des clés.
2/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
Vous avez dit API de sécurité ?
Une API de sécurité est une interface de programmation
qui permet de réaliser des opérations cryptographiques
et des opérations de gestion des clés.
Les valeurs de clés ne sont pas censées être
manipulées.
harder
Chiffre( better ,
Zone sécurisée :
- Cryptographie
faster
stronger
dZs"@&q...
2/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
valeur
)
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
Vous avez dit API de sécurité ?
Une API de sécurité est une interface de programmation
qui permet de réaliser des opérations cryptographiques
et des opérations de gestion des clés.
Les valeurs de clés ne sont pas censées être
manipulées.
Les clés sont utilisées via des références («handles»).
harder
Chiffre( better ,
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
faster
stronger
X509
dZs"@&q...
2/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
handle
)
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
Vous avez dit API de sécurité ?
Une API de sécurité est une interface de programmation
qui permet de réaliser des opérations cryptographiques
et des opérations de gestion des clés.
Les valeurs de clés ne sont pas censées être
manipulées.
Les clés sont utilisées via des références («handles»).
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Déchiffre(dZs"@&q...,
)
X509
harder better faster stronger
2/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Le standard PKCS#11
PKCS#11 = sous-ensemble de Public Key Cryptography
Standards produit par RSA labs. L’API est aussi appelée
Cryptoki (Cryptographic Token Interface).
3/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Le standard PKCS#11
PKCS#11 = sous-ensemble de Public Key Cryptography
Standards produit par RSA labs. L’API est aussi appelée
Cryptoki (Cryptographic Token Interface).
Pourquoi un standard ?
3/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
HSM status:
OK!
IP addr:
Power
192.168.1.10
NetHSM
eth1
eth0
Zone de confiance
Clients
PKCS#11
API PKCS#11
Limiter les interfaces propriétaires des terminaux qui
implantent de la cryptographie.
Unicité et portabilité du code.
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
PKCS#11 et la portabilité
Comment cacher la couche propriétaire ?
4/18
Middleware / pilote PKCS#11
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
HSM status:
OK!
IP addr:
Power
192.168.1.10
NetHSM
eth1
eth0
Zone de confiance
Clients
PKCS#11
API PKCS#11 / pkcs11.h
RSA labs fourni pkcs11.h
Les fabricants fournissent une bibliothèque partagée
(«middleware»)
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
PKCS#11 et la portabilité
Comment cacher la couche propriétaire ?
RSA labs fourni pkcs11.h
Les fabricants fournissent une bibliothèque partagée
(«middleware»)
La bibliothèque gère le matériel :
4/18
Middleware / pilote PKCS#11
DU
AP
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
HSM status:
OK!
IP addr:
Power
192.168.1.10
NetHSM
eth1
eth0
Zone de confiance
Clients
PKCS#11
API PKCS#11 / pkcs11.h
Envoi d’APDU (via USB, port série ...) aux cartes à puce
Envoi de trames réseau aux NetHSM
Envoi de trames USB aux dongles
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Modèle d’attaquant
5/18
Middleware / pilote PKCS#11
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
HSM status:
OK!
IP addr:
Power
192.168.1.10
NetHSM
eth1
eth0
Zone de confiance
API PKCS#11 / pkcs11.h
L’attaquant n’effectue que des requêtes PKCS#11.
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Confidentialité des clés
PKCS#11 traduit l’usage des clés par des attributs.
Ex. : Encrypt, Decrypt, Sensitive, . . .
L’API de sécurité ne doit pas laisser sortir en clair
les valeurs de clés confidentielles (Sensitive).
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Sensitive
6/18
Donne valeur de
x
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Mécanisme d’encapsulation (Wrap)
L’API permet l’export (encapsulation ou Wrap) de clés.
Les attributs qui gèrent cela :
Wrap/Unwrap = la clé peut en exporter/importer d’autres
Extractable = la clé peut être exportée
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Encapsule
{
Sensitive
Extractable
7/18
avec
}
Wrap
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Attaque Wrap/Decrypt
L’attaque utilise la confusion que fait l’API entre
fonctions d’encapsulation et de chiffrement.
8/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Attaque Wrap/Decrypt
L’attaque utilise la confusion que fait l’API entre
fonctions d’encapsulation et de chiffrement.
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Wrap
Sensitive
Extractable Decrypt
8/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Attaque Wrap/Decrypt
L’attaque utilise la confusion que fait l’API entre
fonctions d’encapsulation et de chiffrement.
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Encapsule
{
avec
}
Wrap
Sensitive
Extractable Decrypt
8/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
Attaque phase 1 :
Wrap
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Attaque Wrap/Decrypt
L’attaque utilise la confusion que fait l’API entre
fonctions d’encapsulation et de chiffrement.
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Encapsule
{
avec
Attaque phase 1 :
Wrap
}
Wrap
Sensitive
Extractable Decrypt
Déchiffre({
}
,
)
Attaque phase 2 :
Decrypt
8/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Attaque Wrap/Decrypt
L’attaque utilise la confusion que fait l’API entre
fonctions d’encapsulation et de chiffrement.
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Wrap
Sensitive
Extractable Decrypt
8/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Veut-on vraiment PKCS#11 ?
9/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Veut-on vraiment PKCS#11 ?
Non, mais PKCS#11 est incontournable . . .
9/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|PKCS#11 |Portabilité |Faiblesses
Veut-on vraiment PKCS#11 ?
T
Présenté à SSTIC 2011 par Graham Steel
Non, mais PKCS#11 est incontournable . . .
Il existe des solutions pour détecter les faiblesses
d’un token (Tookan T , devenu Cryptosense Analyzer),
mais pas vraiment de solution pour en protéger un
réputé faible.
9/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Idée : se mettre en coupure des requêtes PKCS#11 entre
une application et un middleware.
10/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Idée : se mettre en coupure des requêtes PKCS#11 entre
une application et un middleware.
Adaptation du modèle d’attaquant :
Possibilité d’effectuer des requêtes PKCS#11
10/18
Middleware / pilote PKCS#11
Proxy PKCS#11
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
HSM status:
OK!
IP addr:
Power
192.168.1.10
NetHSM
eth1
eth0
Zone de confiance
API PKCS#11 / pkcs11.h
Impossibilité de contourner le proxy (c.f. Déploiement)
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Idée : se mettre en coupure des requêtes PKCS#11 entre
une application et un middleware.
Interface PKCS#11
Application
Cryptoki
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Idée : se mettre en coupure des requêtes PKCS#11 entre
une application et un middleware.
Proxy PKCS#11
Bibliothèque cliente
Socket TCP/UNIX
Zone de confiance
(SSL/TLS optionnel)
Interface PKCS#11
Application
Cryptoki
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Un proxy modulaire avec des briques spécialisées.
Proxy PKCS#11
Serveur RPC
PKCS#11
Bibliothèque cliente
Socket TCP/UNIX
Couche RPC
Couche RPC
Zone de confiance
(SSL/TLS optionnel)
Fonctions
PKCS#11
exportées
Filtre
PKCS#11
Binding
PKCS#11
Interface PKCS#11
Application
Cryptoki
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Code en C
Code en OCaml
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Binding OCaml/C nécessaire pour discuter avec le
middleware d’origine.
Proxy PKCS#11
Bibliothèque cliente
Socket TCP/UNIX
Serveur RPC
PKCS#11
Couche RPC
Couche RPC
Zone de confiance
(SSL/TLS optionnel)
Fonctions
PKCS#11
exportées
Filtre
PKCS#11
1
Binding
PKCS#11
Interface PKCS#11
Application
Cryptoki
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Code en C
Code en OCaml
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Un filtre en OCaml (contenant l’intelligence du proxy).
Proxy PKCS#11
Bibliothèque cliente
Socket TCP/UNIX
Serveur RPC
PKCS#11
Couche RPC
Couche RPC
Zone de confiance
(SSL/TLS optionnel)
2
Fonctions
PKCS#11
exportées
Filtre
PKCS#11
Binding
PKCS#11
Interface PKCS#11
Application
Cryptoki
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Code en C
Code en OCaml
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Un serveur RPC en OCaml fourni par la bibliothèque
Netplex.
Proxy PKCS#11
Serveur RPC
PKCS#11
3
Bibliothèque cliente
Socket TCP/UNIX
Couche RPC
Couche RPC
Zone de confiance
(SSL/TLS optionnel)
Fonctions
PKCS#11
exportées
Filtre
PKCS#11
Binding
PKCS#11
Interface PKCS#11
Application
Cryptoki
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Code en C
Code en OCaml
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Une couche Sun RPC pour le transport des fonctions P11,
en OCaml ou C via le standard XDR.
Proxy PKCS#11
Serveur RPC
PKCS#11
Bibliothèque cliente
4
Socket TCP/UNIX
4
Couche RPC
Couche RPC
Zone de confiance
(SSL/TLS optionnel)
Fonctions
PKCS#11
exportées
Filtre
PKCS#11
Binding
PKCS#11
Interface PKCS#11
Application
Cryptoki
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Code en C
Code en OCaml
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Une bibliothèque cliente qui exporte la P11 côté
applicatif.
Proxy PKCS#11
Serveur RPC
PKCS#11
Bibliothèque cliente
Socket TCP/UNIX
Couche RPC
Couche RPC
Zone de confiance
(SSL/TLS optionnel)
5
Fonctions
PKCS#11
exportées
Filtre
PKCS#11
Binding
PKCS#11
Interface PKCS#11
Application
Cryptoki
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Code en C
Code en OCaml
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
La proxification PKCS#11
Zoom sur le filtre qui est au cœur de la solution.
Proxy PKCS#11
Bibliothèque cliente
Socket TCP/UNIX
Zone de confiance
(SSL/TLS optionnel)
2
Filtre
PKCS#11
2
Filtre
PKCS#11
Interface PKCS#11
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
Code en C
Code en OCaml
Transport
(USB, RS232 ...)
Carte à puce
(exemple de token)
11/18
Application
Cryptoki
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
Filtrage PKCS#11
Le filtre est isolé du reste via un frontend et un
backend.
Serveur RPC
PKCS#11
Interface PKCS#11
Frontend
Filtre PKCS#11
Backend
Interface PKCS#11
Binding
PKCS#11
12/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
Filtrage PKCS#11
Vue globale des composants du filtre.
Serveur RPC
PKCS#11
Interface PKCS#11
Frontend
Filtre PKCS#11
CONF
Fonctions
communes
Parseur de
configuration
LOGS
Moteur de filtrage
État interne
Actions
Backend
Interface PKCS#11
Binding
PKCS#11
12/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Concept et architecture |Filtrage
Filtrage PKCS#11
Actions de l’utilisateur extensibles.
Serveur RPC
PKCS#11
Interface PKCS#11
Frontend
Filtre PKCS#11
Fonctions
communes
Parseur de
configuration
Moteur de filtrage
État interne
Actions
LOGS
Extensions définies
par l’utilisateur
CONF
OCaml
let my_new_function a =
if a then
...
Backend
Interface PKCS#11
Binding
PKCS#11
12/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Aspects sécurité
Implémente des contre-mesures dynamiques aux attaques
sur PKCS#11 : par exemple les attributs conflictuels.
13/18
1
Positionne Wrap sur
non
3
Filtre
2
Decrypt=TRUE ?
Proxy PKCS#11
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Aspects sécurité
Filtre
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
4 Wrap
13/18
Wrap=TRUE
4
Proxy PKCS#11
Implémente des contre-mesures dynamiques aux attaques
sur PKCS#11 : par exemple les attributs conflictuels.
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
OK
5
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Aspects sécurité
Implémente des contre-mesures dynamiques aux attaques
sur PKCS#11 : par exemple les attributs conflictuels.
Wrap
13/18
1
Positionne Decrypt sur
oui
3
Filtre
2
Wrap=TRUE ?
Proxy PKCS#11
Zone sécurisée :
- Cryptographie
- Stockage sécurisé
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
x4
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Aspects sécurité
Implémente des contre-mesures dynamiques aux attaques
sur PKCS#11 : par exemple les attributs conflictuels.
Bloquer des attaques sur tout périphérique PKCS#11 :
Avec les patchs logiques de l’API
En interdisant les fonctions/mécanismes dangereux
13/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Aspects sécurité
Implémente des contre-mesures dynamiques aux attaques
sur PKCS#11 : par exemple les attributs conflictuels.
Bloquer des attaques sur tout périphérique PKCS#11 :
Avec les patchs logiques de l’API
En interdisant les fonctions/mécanismes dangereux
Offre une solution aux limitations de PKCS#11 :
Segmentation des logins SO (admin) et User
Filtrage d’objets sur une ressource
Forcer l’utilisation en lecture seule
Durcir la politique de complexité du PIN
...
13/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Aspects sécurité
Implémente des contre-mesures dynamiques aux attaques
sur PKCS#11 : par exemple les attributs conflictuels.
Bloquer des attaques sur tout périphérique PKCS#11 :
Avec les patchs logiques de l’API
En interdisant les fonctions/mécanismes dangereux
Offre une solution aux limitations de PKCS#11 :
Segmentation des logins SO (admin) et User
Filtrage d’objets sur une ressource
Forcer l’utilisation en lecture seule
Durcir la politique de complexité du PIN
...
Contourner les problèmes (connus) liés à un
«middleware».
13/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Partage de ressources
Machine Virtuelle 1
Machine Virtuelle 2
Objets
application
PKCS#11
Objets
application
PKCS#11
Caml Crush
client
PKCS#11
Caml Crush
client
PKCS#11
Hyperviseur de confiance
Filtrage
labels A
Filtrage
labels B
Caml Crush
handles
handles
Middleware
Middleware
A
B
B
A
14/18
X509
B
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Cloisonnement des usages
VM Admin
VM Utilisateur
PKCS#11
Admin
PKCS#11
Utilisateur
Caml Crush
client
PKCS#11
Caml Crush
client
PKCS#11
Hyperviseur de confiance
Filtrage
Admin
Caml Crush
Filtrage
Utilisateur
Fonctions Crypto
Fonctions Admin
Middleware
Middleware
X509
15/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Poste durci
Architecture logicielle du poste client
chargement
bibliothèque
1
Bibliothèque
cliente
PKCS#11
Caml Crush
2
socket
Application
cliente
PKCS#11
5
socket
Proxy
Caml Crush
chargement
3
bibliothèque
Middleware
PKCS#11
Pile USB
Démon PC/SC
4
16/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Aspects sécurité |Aspects fonctionnels
Portabilité de la bibliothèque cliente
La bibliothèque cliente est portable sous divers CPU
ainsi que divers OS.
Proxy PKCS#11
Serveur RPC
PKCS#11
Couche RPC
Filtre
PKCS#11
Binding
PKCS#11
Interface PKCS#11
Middleware
PKCS#11 réel
(bibliothèque
partagée)
17/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
caml crush
client:
Connecting
to proxy ...
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
Conclusion
Blocage dynamique des attaques PKCS#11.
Apporte d’autres fonctionnalités utiles.
Caml Crush est open source :
https://github.com/ANSSI-FR/caml-crush
18/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
Conclusion
Blocage dynamique des attaques PKCS#11.
Apporte d’autres fonctionnalités utiles.
Caml Crush est open source :
https://github.com/ANSSI-FR/caml-crush
? questions ?
18/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Performances |Compatibilité |OCaml
Performances
HSM PCI (séquentiel)
HSM PCI (parallèle)
natif
proxy
filtre
key-gen
rand-dgst
rand-dgst
rsa
rsa
aes
aes
Temps Relatif
20
40
60
80
NetHSM (séquentiel)
natif
key-gen
proxy
filtre
rand-dgst
19/18
Temps Relatif
20
40
60
80
NetHSM (parallèle)
natif
key-gen
proxy
filtre
rand-dgst
0
0
rsa
rsa
aes
aes
0
20
40
natif
proxy
filtre
key-gen
Temps Relatif
60
80
100 0
20
40
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
Temps Relatif
60
80
100
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Performances |Compatibilité |OCaml
Performances
Carte à puce (séquentiel)
natif
proxy
filtre
rand-dgst
rsa
0
50
Temps Relatif
100
150
200
Coût négligeable en asymétrique.
Impact plus élevé sur les opérations symétriques.
Carte à puce : peu de support
HSM : dépend du matériel mais le coût réduit dès lors
que la charge du HSM augmente
20/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Performances |Compatibilité |OCaml
Matrice de compatibilité
Linux
FreeBSD
Mac OS X
Win32 (natif)
Win32 (cygwin)
Client C
Unix TCP
✓
✓
✓
✓
✗
✓
✗
✓
Client Ocaml
Unix
TCP
✓
✓
✓
✓
✓
✓
✗
✗
pkcs11proxyd
Unix
TCP
✓
✓
✓
✓
✓
✓
✗
✗
SSL/TLS
✓
✓
✓
Caml Crush fonctionne sur les plateformes Little/Big
Endian (avec architectures hybrides entre client et
serveur).
21/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014
|Contexte |API de sécurité |PKCS#11 et les attaques |Architecture |Déploiement |Conclusion
|Performances |Compatibilité |OCaml
Choix d’OCaml
Langage fonctionnel, fortement typé, gestion de la
mémoire avec ramasse-miettes, possibilité de
compilation native via ocamlopt :
Garanties fortes contre les vulnérabilités classiques
(buffer overflows)
Garde-fous à la compilation grâce à l’inférence de type
Aspect fonctionnel compatible avec l’expressivité de
règles de filtrage
. . . tout cela en gardant des performances
raisonnables !
22/18
Caml Crush: Proxy PKCS#11 filtrant - 5 juin 2014