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.