Inleiding
Dit document beschrijft de kenmerken van de RADIUS-verificator voor headers en berichtenverificatoren, hoe deze worden gebruikt en wanneer er een validatiefout verwacht kan worden.
Authenticator-header
Per RFC 2865 is de Authenticator Header 16 bytes lang. Wanneer het in een Access-request wordt gebruikt, heet het een request-authenticator. Wanneer het wordt gebruikt in een reactie, wordt het een Response Authenticator genoemd. Het wordt gebruikt voor:
- Verificatie van respons
- Wachtwoord verbergen
Verificatie van respons
Als de server reageert met de juiste Response Authenticator, kan de client berekenen of die reactie verband hield met een geldig verzoek.
De client verzendt het verzoek met de willekeurige Authenticator Header. Vervolgens berekent de server die de respons verstuurt de Response Authenticator met behulp van het aanvraagpakket samen met het gedeelde geheim:
ResponseAuth = MD5(Code + ID + Length + RequestAuth + Attributes + Secret)
De client die de reactie ontvangt, voert dezelfde bewerking uit. Als het resultaat hetzelfde is, is het pakket juist.
Opmerking: De aanvaller die de geheime waarde kent kan de reactie niet parasiteren tenzij hij de aanvraag kan snuiven.
Wanneer kan een validatiefout worden verwacht?
Validatiefout treedt op als de switch het verzoek niet meer in de cache plaatst (bijvoorbeeld vanwege tijdelijke onderbreking). U kunt het ook ervaren wanneer het gedeelde geheim ongeldig is (ja - Access-Reject bevat ook deze header). Op deze manier kan het Network Access Device (NAD) de gedeelde geheime mismatch detecteren. Gewoonlijk wordt het door de cliënten/servers van de Verificatie, van de Vergunning, en van de Boekhouding (AAA) als gedeelde zeer belangrijke mismatch gerapporteerd, maar het openbaart de details niet.
Wachtwoord verbergen
De Authenticator-header wordt ook gebruikt om te voorkomen dat het kenmerk Gebruiker-Wachtwoord in onbewerkte tekst wordt verzonden. Eerst wordt Berichtlijst 5 (MD5 - geheim, authenticator) berekend. Vervolgens worden verschillende XOR operaties met de brokken van het wachtwoord uitgevoerd. Deze methode is gevoelig voor offline aanvallen (regenboogtafels) omdat MD5 niet meer wordt gezien als een sterk eenrichtingsalgoritme.
Hier is het Python-script dat het gebruikerswachtwoord berekent:
def Encrypt_Pass(password, authenticator, secret):
m = md5()
m.update(secret+authenticator)
return "".join(chr(ord(x) ^ ord(y)) for x, y in zip(password.ljust
(16,'\0')[:16], m.digest()[:16]))
Heruitzendingen
Als een van de kenmerken in de RADIUS-toegangsaanvraag is gewijzigd (zoals de RADIUS-id, gebruikersnaam enzovoort), moet het nieuwe Authenticator-veld gegenereerd worden en moeten alle andere velden die ervan afhangen opnieuw berekend worden. Als dit een wederuitzending is, verandert er niets.
Accounting
De betekenis van de Authenticator-header is verschillend voor een access-request en een accounting-request.
Voor een Access-request wordt de Authenticator willekeurig gegenereerd en wordt verwacht een antwoord te ontvangen met de correct berekende ResponseAuthenticator, die aantoont dat het antwoord verband hield met dat specifieke verzoek.
Voor een accounting-request is de Authenticator niet willekeurig, maar wordt hij berekend (volgens RFC 2866):
RequestAuth = MD5(Code + ID + Length + 16 zero octets + Attributes + Secret)
Op deze manier kan de server het boekingsbericht onmiddellijk controleren en het pakket laten vallen als de opnieuw berekende waarde niet overeenkomt met de waarde voor Authenticator. De Identity Services Engine (ISE) retourneert:
11038 RADIUS Accounting-Request header contains invalid Authenticator field
De typische reden hiervoor is de onjuiste gedeelde geheime sleutel.
Berichtverificator-kenmerk
Het kenmerk Message-Authenticator is het RADIUS-kenmerk dat in RFC 3579 is gedefinieerd. Het wordt voor een soortgelijk doel gebruikt: te ondertekenen en te valideren. Maar deze keer wordt het niet gebruikt om een antwoord te valideren, maar een verzoek.
De client die een Access-request verstuurt (het kan ook een server zijn die reageert met een Access-Challenge) berekent de Hash-Based Message Authentication Code (HMAC)-MD5 vanaf zijn eigen pakket en voegt vervolgens het kenmerk Message-Authenticator toe als een handtekening. Vervolgens kan de server controleren of deze dezelfde bewerking uitvoert.
De formule ziet er hetzelfde uit als de Authenticator Kop:
Message-Authenticator = HMAC-MD5 (Type, Identifier, Length, Request Authenticator,
Attributes)
De HMAC-MD5-functie neemt twee argumenten:
- De payload van het pakket, dat het veld 16 bytes Message-Authenticator bevat, gevuld met nullen
- Het gedeelde geheim
Wanneer moet de Berichtverificator worden gebruikt?
De Message-Authenticator moet worden gebruikt voor elk pakket, inclusief het EAP-bericht (RFC 3579). Dit omvat zowel de client die het access-request verstuurt als de server die met de access-Challenge reageert. Als de validatie mislukt, laat de andere kant het pakket vallen.
Wanneer kan een validatiefout worden verwacht?
Validatiefout treedt op wanneer het gedeelde geheim ongeldig is. Vervolgens kan de AAA-server de aanvraag niet valideren.
De ISE meldt:
11036 The Message-Authenticator Radius Attribute is invalid.
Dit gebeurt gewoonlijk in de latere fase wanneer het EAP-bericht wordt toegevoegd. Het eerste RADIUS-pakket van de 802.1x-sessie bevat niet het EAP-bericht. Er is geen veld Message-Authenticator en het is niet mogelijk om het verzoek te verifiëren, maar op dat moment is de client in staat om de reactie te valideren met behulp van het veld Authenticator.
Het kenmerk Message-Authenticator valideren
Hier is een voorbeeld om te illustreren hoe u handmatig de waarde telt om er zeker van te zijn dat deze correct wordt berekend.
Packet nummer 30 (Access-request) is geselecteerd. Het bevindt zich in het midden van de EAP-sessie en het pakket bevat het veld Message-Authenticator. Het doel is om te verifiëren dat de Message-Authenticator correct is:
- Klik met de rechtermuisknop op Radius Protocol en kies Geselecteerde pakketbytes exporteren.
- Schrijf die RADIUS-payload naar een bestand (binaire gegevens).
- Om het veld Message-Authenticator te berekenen, moet u er nullen neerzetten en de HMAC-MD5 berekenen.
Bijvoorbeeld, wanneer u hex/binaire editor, zoals vim, nadat u ":%!xxd" hebt getypt, welke switches naar hex-modus en nullen 16 bytes die beginnen na "5012" (50hex is 80 in dec, dat is Message-Authenticator type, en 12 is de grootte die 18 is inclusief de Attribute Value Paren (AVP) header):
Houd er rekening mee dat vim en andere tekstredacteuren een extra LineFeed-teken ('0a' in hexuitdraai) kunnen toevoegen aan het einde van het bestand na het opslaan. Zorg ervoor dat u de binaire modus van uw teksteditor (vim -b-bestand) gebruikt om te voorkomen dat het teken LineFeed verschijnt.
Na die aanpassing is de payload klaar. Het is noodzakelijk om terug te keren naar de hex/binaire modus (type: ":%!xxd -r") en slaat het bestand op (":wq"). U kunt een extra LineFeed-teken dubbel controleren is niet toegevoegd door 'hexdump -C-bestand' te gebruiken.
- Gebruik OpenSSL om HMAC-MD5 te berekenen:
pluton # cat packet30-clear-msgauth.bin | openssl dgst -md5 -hmac 'cisco'
(stdin)= 01418d3b1865556918269d3cf73608b0
De HMAD-MD5 functie gebruikt twee argumenten: de eerste van standard input (stdin) is het bericht zelf en de tweede is het gedeelde geheim (Cisco in dit voorbeeld). Het resultaat is precies dezelfde waarde als de Message-Authenticator die is gekoppeld aan het RADIUS-pakket voor toegangsaanvragen.
Hetzelfde kan worden berekend met het gebruik van het Python-script:
Python 2:
pluton # cat hmac.py
#!/usr/bin/env python
import base64
import hmac
import hashlib
f = open('packet30-clear-msgauth.bin', 'rb')
try:
body = f.read()
finally:
f.close()
digest = hmac.new('cisco', body, hashlib.md5)
d=digest.hexdigest()
print d
pluton # python hmac.py
01418d3b1865556918269d3cf73608b0
Python 3:
import hmac
import hashlib
with open('packet30-clear-msgauth.bin', 'rb') as f:
body = f.read()
digest = hmac.new(b'cisco', body, hashlib.md5)
print(digest.hexdigest())
Het vorige voorbeeld toont hoe te om het bericht-Authenticator veld van het toegang-Verzoek te berekenen. Voor Access-Challenge, Access-Accept en Access-Reject is de logica exact hetzelfde, maar het is belangrijk om te onthouden dat de Applicatie Authenticator moet worden gebruikt, die in het vorige Access-request-pakket wordt geleverd.
Gerelateerde informatie