19
SMART CARD REMOTING Daiki Ueno

SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

SMART CARD REMOTING

Daiki Ueno

Page 2: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 20172

AGENDA

Smart cards? Remoting? Implementation Demo Future work

Page 3: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 20173 Photo by Japanexperterna, CC-BY SA 2.0

Page 4: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 20174

SMART CARDS

Card + card reader USB dongle Software implementation “Tokens”

Page 5: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 20175

SMART CARDS

Encryption & decryption Signature generation & verification Storage

Page 6: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 20176

WHY IMPORTANT?

They can prevent leakage of private keys Local filesystem, memory, ... All private key operations happen in the card

Page 7: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 20177

LOCAL USE CASE: AUTHENTICATION

PAM

Smart cardApplication

2. verify certificate

4. generate signature

5.verify signature

1. ask authentication3. request signature

Page 8: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 20178

REMOTE USE CASE

PAM

Smart cardApplication

Local system

Remote system

Page 9: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 20179

POTENTIAL USES

Protecting private keys for remote TLS server Signing packages/images on remote CI

Page 10: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201710

IMPLEMENTATION

Define protocol that serializes smart card access Expose the protocol at a Unix domain socket Forward the socket with ssh

Page 11: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201711

PROTOCOL: PKCS#11

De-fact C API implemented by smart card drivers OpenSC Proprietary drivers

The caller shall dlopen() the library

Page 12: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201712

PROTOCOL: SERIALIZATION FORM

Call ID Signature Arg0 ArgN

26 u hSession3 a A

Length CK_ULONG Array of CK_ATTRIBUTE

ulCount type0 1 valueLen0 v0 … vN

pTemplate[0]

Arg1

CK_RVC_FindObjectsInit (CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount);

Page 13: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201713

FORWARDING

Smart card

Unix socketserver

PKCS#11Client module

Application

SSH

Page 14: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201714

p11-kit

Portable library to access PKCS#11 modules Aggregation Threading PKCS#11 URI

Consistent configuration for PKCS#11 modules

Page 15: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201715

DEMO

$ p11tool --list-tokensToken 6:

URL: pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=67060e945183d131;token=Daiki%27s%20token

Label: Daiki's tokenType: Generic tokenManufacturer: SoftHSM projectModel: SoftHSM v2Serial: 67060e945183d131Module: libsofthsm2.so

$ p11tool –-list-all -–login ‘pkcs11:some-token’$ p11tool –-test-sign –-login ‘pkcs11:some-privkey’

$ p11tool --list-tokensToken 6:

URL: pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=67060e945183d131;token=Daiki%27s%20token

Label: Daiki's tokenType: Generic tokenManufacturer: SoftHSM projectModel: SoftHSM v2Serial: 67060e945183d131Module: libsofthsm2.so

$ p11tool –-list-all -–login ‘pkcs11:some-token’$ p11tool –-test-sign –-login ‘pkcs11:some-privkey’

Page 16: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201716

DEMO

$ p11-kit server 'pkcs11:some-token'P11_KIT_SERVER_ADDRESS=unix:path=/run/user/500/p11-kit/pkcs11-12345P11_KIT_SERVER_PID=12345

$ ssh -R .../p11-kit/pkcs11:/run/user/500/p11-kit/pkcs11-12345 \remote-user@remote

[remote-user@remote ~]$ sudo idSmartcard authentication startsSmart card found.Welcome SmartCard-HSM (UserPIN)!Smart card PIN: verifying certificateuid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

$ p11-kit server 'pkcs11:some-token'P11_KIT_SERVER_ADDRESS=unix:path=/run/user/500/p11-kit/pkcs11-12345P11_KIT_SERVER_PID=12345

$ ssh -R .../p11-kit/pkcs11:/run/user/500/p11-kit/pkcs11-12345 \remote-user@remote

[remote-user@remote ~]$ sudo idSmartcard authentication startsSmart card found.Welcome SmartCard-HSM (UserPIN)!Smart card PIN: verifying certificateuid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Page 17: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201717

FUTURE WORK

Usability OpenSSH / systemd integration

Portability Windows: PuTTY-CAC

Page 18: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

FOSDEM 201718

FUTURE WORK

Access control Make PKCS#11 objects invisible / read-only Disallow certain operations Redirect PIN input

Protocol standardization

Page 19: SMART CARD REMOTING - FOSDEM · Model: SoftHSM v2 Serial: 67060e945183d131 Module: libsofthsm2.so $ p11tool –-list-all -–login ‘pkcs11:some-token’ $ p11tool –-test-sign

QUESTIONS?

Git repo: https://github.com/p11-glue/p11-kit

Contact: [email protected]

Mailing list: [email protected]