IFI 6068 Sissejuhatus infosüsteemidesse · 2017 sügissemester · 14 loengut · 14 praktikumi · 12 ülesannet · 6 näiterakendust · eksam
nonce
ja state
võivad OpenID Connect protokollis segadusse ajada.
state
on kasutusel päringuvõltsimise (cross-site request forgery) vastumeetmena. nonce
aga pakub kaitset taasesitusründe (replay attack) vastu. Kes ja mida taasesitab, seda ei ole protokollist nii lihtne välja lugeda. Uurime, kuidas taasesitusrünne välja näeb ja kuidas nonce
aitab seda ära hoida.
Klientrakendus koosneb kahest osast: serveriosa ja sirvija osa. Autentimisteenus osutab klientrakendusele OpenID Connect protokolli kohast autentimisteenust.
Autentimine algab sellega, et klientrakendus suunab kasutaja autentimisteenusesse. Seda tehakse HTTP ümbersuunamiskorraldusega (redirect).
Autentimisteenuses kasutaja autenditakse ja suunatakse klientrakendusse tagasi (samuti HTTP ümbersuunamiskorraldusega).
Autentimisteenus moodustab ja paneb tagasisuunamisel kaasa identsustõendi (ID token). Identsustõend on kinnitus, et kasutaja on autenditud (isik on tuvastatud).
Ohumudel (threat model) lähtub võimalusest, et ründaja võib identsustõendile autentimisteenuses või tee peal ligi pääseda, andmeedastust pealt kuulata või tõendist koopia teha.
Mis takistab ründajat tõendit oma süsteemist kliendirakenduse serveriosale esitamast (ja sellega identiteedivargust toime panemast)?
nonce
kasutamisel ei saa tõendi kätte saanud ründaja seda kasutada. Kuidas?Kliendirakenduse serveriosa lisab HTTP ümbersuunamiskorraldusse küpsise panemise käsu (cookie header): Set-Cookie: SessionID=2h5ft6; HttpOnly
.
Sirvija lisab selle käsu mõjul sessiooniküpsise SessionID=2h5ft6
. HttpOnly
tähendab, et küpsis ei ole nähtav klientrakenduse sirvijaosale, kui ründaja peaks ka sinna sisse murdma.
See ei ole aga veel kõik. Klientrakendus arvutab sessiooniküpsisest 2h5ft6
räsi ja lisab selle HTTP ümbersuunamiskorralduse URL-i: nonce=hash(2h5ft6)
.
Autentimisteenus võtab nonssi väärtuse ja lisab selle identsustõendisse!
Autentimisteenus saadab identsustõendi klientrakenduse serveriosale.
Tagasi suunamisel haaratakse sirvijast kaasa ka küpsis! Cookie: SessionID=2h5ft6
.
Klientrakenduse serveriosa saab nüüd kontrollida, et identsustõend tuleb ikka sama sirvija kaudu, kust autentimisele suunamine teele läks.
Kuidas ta seda teeb? Avab identsustõendi, võtab sealt nonssi nonce
. Võtab küpsise SessionID
väärtuse, arvutab sellest räsi hash(2h5ft6)
. Räsi ja nonss peavad ühtima!
Märgime veel, et tõendi taasesitusrünnet loetakse vastumeedet vajavaks ohuks OpenID Connect otsevoo (Implicit Flow) variandi korral. Volituskoodi (Authorization Flow) varianti puhul nonce
ei ole protokollis nõutav, kuigi ka sellisel juhul võib ründaja autentimisteenusesse sisse murda või tõendi saatmist pealt kuulata.