Kas ir sesijas fiksācija?

Vietnēs ir atrodami daudz dažādu veidu drošības ievainojamības, viena interesanta tiek saukta par “sesijas fiksāciju”. Sesijas fiksācija ir problēma, kurā uzbrucējs var ietekmēt sesijas identifikatoru jeb lietotāja sesijas ID un pēc tam izmantot to, lai piekļūtu savam kontam. Šāda veida ievainojamība var darboties divos veidos: tā var ļaut uzbrucējam atrast vai iestatīt cita lietotāja sesijas ID.

Kā tiek veikts sesijas fiksācijas uzbrukums

Lietotāja sesijas ID bieži ir galvenā vietnes autentifikācijas sastāvdaļa, un daudzos gadījumos tie ir vienīgie dati, kas identificē konkrēto lietotāju, kurš ir pieteicies. Problēma ir tāda, ka, ja uzbrucējs var iestatīt vai uzzināt cita lietotāja sesijas ID, viņš var izmantot sesijas pilnvaru un pēc tam darboties kā lietotājs.

Parasti tas tiek darīts, maldinot lietotāju noklikšķināt uz pikšķerēšanas saites. Pati saite ir pilnīgi likumīga, taču tajā ir iekļauts mainīgais, kas iestata noteiktu sesijas ID. Ja lietotājs pēc tam piesakās ar sesijas ID un serveris viņam nepiešķir jaunu sesijas ID piesakoties, uzbrucējs var vienkārši iestatīt savu sesijas ID, lai tas būtu vienāds, un piekļūt upura ID konts.

Vēl viens veids, kā uzbrucējs var atklāt upura sesijas ID, ir tas, ja tas parādās vietrādī URL. Piemēram, ja uzbrucējs var likt upurim nosūtīt viņam saiti un tajā ir ietverts upura sesijas ID, uzbrucējs var izmantot sesijas ID, lai piekļūtu upura kontam. Dažos gadījumos tas var notikt pilnīgi nejauši. Piemēram, ja lietotājs kopē URL ar sesijas ID un ielīmē to draugam vai forumā, ikviens lietotājs, kas seko saitei, tiks pierakstījies ar lietotāja kontu.

Sesijas fiksācijas labojumi

Šai problēmai ir daži risinājumi, un, kā vienmēr, labākais risinājums ir ieviest pēc iespējas vairāk labojumu kā daļu no padziļinātas aizsardzības stratēģijas. Pirmais risinājums ir mainīt lietotāja sesijas ID, kad viņš pierakstās. Tas neļauj uzbrucējam jebkad ietekmēt pieteikusies lietotāja sesijas ID. Varat arī konfigurēt serveri, lai tas vienmēr pieņemtu tikai tā ģenerētos sesijas ID un nepārprotami noraidītu visus lietotāja nodrošinātos sesijas ID.

Vietnei ir jābūt konfigurētai tā, lai vietrādī URL nekad netiek ievietota sensitīva lietotāja informācija, piemēram, sesijas ID, un tā jāievieto GET vai POST pieprasījuma parametrā. Tas neļauj lietotājam nejauši apdraudēt savu sesijas ID. Izmantojot gan sesijas ID, gan atsevišķu autentifikācijas pilnvaru, jūs dubultojat uzbrucējam nepieciešamo informācijas apjomu un neļaujat uzbrucējiem piekļūt sesijām ar zināmiem sesijas ID.

Ir ļoti svarīgi, lai visi derīgie lietotāja sesijas ID tiktu anulēti, noklikšķinot uz atteikšanās pogas. Sesijas ID ir iespējams atkārtoti ģenerēt pēc katra pieprasījuma. Ja iepriekšējie sesijas ID ir nederīgi, tas arī neļauj uzbrucējiem izmantot zināmo sesijas ID. Šī pieeja arī ievērojami samazina draudu logu, ja lietotājs atklāj savu sesijas ID.

Iespējojot vairākas no šīm pieejām, padziļinātas aizsardzības stratēģija var novērst šo problēmu kā drošības risku.