Kerberos: qual è la struttura per la preautenticazione con certificato (RFC 4556)

5

Sto facendo fatica a capire come dovrebbe essere la struttura di una richiesta di preautenticazione in Kerberos. Dopo aver letto RFC 4556 e le RFC di riferimento, sono ancora confuso a causa di tutti i diversi casi.

Il mio caso è il seguente: Voglio autenticarmi su un dominio Windows con un certificato che ho recuperato dalla CA che appartiene al dominio. Il certificato contiene l'URL di crl e il suo algoritmo di firma è sha256RSA. La chiave pubblica contenuta è una chiave RSA2048. Per quanto ho capito, dovrei inviare questo certificato e firmarlo. Sono anche consapevole del fatto che devo inviare un nonce per evitare attacchi di replay.

Non sono chiaro cosa deve essere firmato, cioè cosa deve essere in questa parte della richiesta.

PA-PK-AS-REQ ::= SEQUENCE {
          signedAuthPack          [0] IMPLICIT OCTET STRING,
                   -- Contains a CMS type ContentInfo encoded
                   -- according to [RFC3852].

Gli stati della RFC 3852:

SignedData ::= SEQUENCE {
        version CMSVersion,
        digestAlgorithms DigestAlgorithmIdentifiers,
        encapContentInfo EncapsulatedContentInfo,
        certificates [0] IMPLICIT CertificateSet OPTIONAL,
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
        signerInfos SignerInfos }

Anche se ci sono molte spiegazioni su tutti questi punti, temo di essere un idiota perché non capisco. Soprattutto quello che appartiene alla versione e encapContentInfo (penso che la firma dovrebbe andare nel campo econtent di EncapsulatedContentInfo, ma non sono sicuro).

Dato che le specifiche sono un po 'confuse, non capisco cos'altro deve essere in questa richiesta e cosa no.

Qualcuno può far luce su questo e chiarire come dovrebbe essere la struttura della richiesta completa?

Modifica

OK, dopo alcune ricerche sono ancora più confuso. RFC 4556 afferma che la struttura di PkAuthenticator in AuthPack dovrebbe assomigliare a questa:

PKAuthenticator ::= SEQUENCE {
    cusec                   [0] INTEGER -- (0..999999) --,
    ctime                   [1] KerberosTime,
    nonce                   [2] INTEGER (0..4294967295),
    paChecksum              [3] OCTET STRING OPTIONAL,
    ...
}

Sniffing the smartcard-authentication-traffic with wireshark Ho ottenuto questa struttura PKAuthenticator in un ambiente microsoft:

SEQUENCE(1 elem)
    [0](1 elem)
        SEQUENCE(5 elem)
            [0](1 elem)
                SEQUENCE(2 elem)
                    [0](1 elem)
                        INTEGER2
                    [1](1 elem)
                        SEQUENCE(2 elem)
                            GeneralString
                            GeneralString
            [1](1 elem)
                GeneralString
            [2](1 elem)
                INTEGER 563793
            [3](1 elem)
                GeneralizedTime 2016-12-01 13:53:08 UTC
            [4](1 elem)
                INTEGER 1051204026

Questo è il solito comportamento di microsoft che fa le proprie cose indipendentemente da quello che dice la specifica o mi manca qualcosa?

    
posta Frank 21.11.2016 - 15:07
fonte

1 risposta

1

Sto affrontando la domanda che hai aggiunto con la tua modifica.

Come documentato da Microsoft , alcune versioni di Windows ( "< 2 > Sezione 2.2: La sintassi del messaggio [RFC4556] non è supportata in Windows 2000, Windows XP e Windows Server 2003. ") si basa su una bozza precedente di RFC 4556 che definiva la seguente struttura per PKAuthenticator (draft versione 11 è stato l'ultimo ad utilizzare questa sintassi per PKAuthenticator ):

--
-- PK-AUTHENTICATOR - Different from [RFC4556]
-- Appendix A, PKAuthenticator.
--
PKAuthenticator::= SEQUENCE {
     kdc-name   [0] PRINCIPAL-NAME,
     kdc-realm  [1] REALM,
 -- name and realm of the KDC issuing the ticket
     cusec      [2] INTEGER,
     ctime      [3] KerberosTime,
     nonce      [4] INTEGER
 }

Con l'RFC finale (bozza versione 22 in realtà) il l'identificatore per PA-PK-AS-REP è anch'esso cambiato da 15 a 17 per distinguere tra le due specifiche di formato (Microsoft menziona anche questo: "Una bozza precedente di [RFC4556] supportava un identificatore di dati di pre-autenticazione diverso: PA- PK-AS-REP_OLD 15 ").

    
risposta data 18.07.2017 - 11:37
fonte

Leggi altre domande sui tag