Ushbu bo'limda WebSocket xabarlari va ulanishlarini qanday manipulyatsiya qilishni tushuntiramiz, WebSocket'larda yuzaga kelishi mumkin bo'lgan xavfsizlik zaifliklari turlarini tavsiflaymiz va WebSocket zaifliklaridan foydalanishga bir nechta misol beramiz.
WebSocket'lar zamonaviy veb-ilovalarda keng qo'llaniladi. Ular HTTP orqali ishga tushiriladi va har ikki yo'nalishda asinxron aloqani ta'minlaydigan uzoq umrli (long-lived) ulanishlar beradi.
WebSocket'lar turli maqsadlarda — jumladan foydalanuvchi amallarini bajarish va maxfiy ma'lumot uzatish uchun ishlatiladi. Oddiy HTTP bilan yuzaga keladigan deyarli har qanday veb-xavfsizlik zaifligi WebSocket aloqasi bilan bog'liq holda ham yuzaga kelishi mumkin.
Agar WebSocket zaifliklari ortidagi asosiy tushunchalar bilan allaqachon tanish bo'lsangiz va shunchaki ularni real, ataylab zaif qilib yaratilgan nishonlarda amaliy sinab ko'rmoqchi bo'lsangiz, quyidagi havola orqali ushbu mavzudagi barcha laboratoriyalarga kirishingiz mumkin.
WebSocket xavfsizlik zaifliklarini topish odatda ularni ilova kutmagan usullarda manipulyatsiya qilishni o'z ichiga oladi. Buni Burp Suite yordamida bajarishingiz mumkin.
Burp Suite'dan quyidagilar uchun foydalanishingiz mumkin:
Burp Proxy'dan WebSocket xabarlarini ushlab olish va o'zgartirish uchun quyidagicha foydalanishingiz mumkin:
WebSocket'lardan foydalanadigan ilova funksiyasiga o'ting. WebSocket'lar ishlatilayotganini ilovadan foydalanib, Burp Proxy ichidagi WebSockets history (tarix) tabida paydo bo'ladigan yozuvlarni kuzatish orqali aniqlashingiz mumkin.WebSocket xabari yuborilganda, u Intercept tabida ko'rish yoki o'zgartirish uchun ko'rsatiladi. Xabarni uzatish uchun Forward tugmasini bosing.Burp Proxy'da mijozdan-serverga yoki serverdan-mijozga xabarlar ushlab olinishini sozlashingiz mumkin. Buni Settings oynasida, WebSocket interception rules sozlamalarida bajaring.
WebSocket xabarlarini real vaqtda ushlab olish va o'zgartirishdan tashqari, alohida xabarlarni qayta yuborishingiz va yangi xabarlar generatsiya qilishingiz mumkin. Buni Burp Repeater yordamida bajarasiz:
WebSocket ulanishi orqali uzatilgan xabarlar tarixini ko'rishingiz mumkin. Bunga siz Burp Repeater'da generatsiya qilgan xabarlar, shuningdek shu ulanish orqali brauzer yoki server tomonidan generatsiya qilingan har qanday xabarlar ham kiradi.WebSocket xabarlarini manipulyatsiya qilishdan tashqari, ba'zan ulanishni o'rnatadigan WebSocket handshake'ini ham manipulyatsiya qilish zarur bo'ladi.
WebSocket handshake'ini manipulyatsiya qilish zarur bo'lishi mumkin bo'lgan turli vaziyatlar bor:
WebSocket handshake'ini Burp Repeater yordamida manipulyatsiya qilishingiz mumkin:
WebSocket xabarini avval tavsiflanganidek Burp Repeater'ga yuboring.WebSocket URL yonidagi qalam (pencil) belgisini bosing. Bu mavjud ulangan WebSocket'ga biriktirish, ulangan WebSocket'ni klonlash yoki uzilgan WebSocket'ga qayta ulanish imkonini beruvchi ustani (wizard) ochadi.WebSocket'ni klonlashni yoki uzilgan WebSocket'ga qayta ulanishni tanlasangiz, usta WebSocket handshake so'rovining to'liq tafsilotlarini ko'rsatadi; siz uni handshake bajarilishidan oldin kerakligicha tahrirlashingiz mumkin.WebSocket ulanishi muvaffaqiyatli o'rnatilsa, undan Burp Repeater'da yangi xabarlar yuborish uchun foydalanishingiz mumkin.Aslida, deyarli har qanday veb-xavfsizlik zaifligi WebSocket'lar bilan bog'liq holda yuzaga kelishi mumkin:
WebSocket'lar orqali yetib boriladigan ba'zi ko'r (blind) zaifliklar faqat out-of-band (OAST) usullari yordamida aniqlanishi mumkin.WebSocket'lar orqali boshqa ilova foydalanuvchilariga uzatilsa, bu XSS yoki boshqa mijoz tomoni (client-side) zaifliklariga olib kelishi mumkin.WebSocket'larga ta'sir qiluvchi kiritishga asoslangan (input-based) zaifliklarning aksariyatini WebSocket xabarlari mazmuniga aralashish (tampering) orqali topish va ulardan foydalanish mumkin.
Masalan, faraz qilaylik, chat ilovasi brauzer va server o'rtasida chat xabarlarini yuborish uchun WebSocket'lardan foydalanadi. Foydalanuvchi chat xabarini yozganda, serverga quyidagiga o'xshash WebSocket xabari yuboriladi:
{"message":"Hello Carlos"}Xabar mazmuni (yana WebSocket'lar orqali) boshqa chat foydalanuvchisiga uzatiladi va foydalanuvchi brauzerida quyidagicha render qilinadi:
<td>Hello Carlos</td>Bu holatda, agar boshqa hech qanday kiritishni qayta ishlash yoki himoya vositalari ishtirok etmasa, hujumchi quyidagi WebSocket xabarini yuborib, konsepsiyani isbotlovchi (proof-of-concept) XSS hujumini amalga oshirishi mumkin:
{"message":"<img src=1 onerror='alert(1)'>"}Ba'zi WebSocket zaifliklarini faqat WebSocket handshake'ini manipulyatsiya qilish orqali topish va ulardan foydalanish mumkin. Bu zaifliklar odatda dizayn kamchiliklari bilan bog'liq bo'ladi, masalan:
X-Forwarded-For sarlavhasiga) o'rinsiz ishonch bildirish.WebSocket xabarlari qayta ishlanadigan sessiya konteksti odatda handshake xabarining sessiya konteksti bilan belgilanadi.Ba'zi WebSocket xavfsizlik zaifliklari hujumchi o'zi nazorat qiladigan vebsaytdan cross-domain WebSocket ulanishini o'rnatganda yuzaga keladi. Bu cross-site WebSocket hijacking hujumi deb ataladi va u WebSocket handshake'idagi cross-site request forgery (CSRF) zaifligidan foydalanishni o'z ichiga oladi. Bu hujum ko'pincha jiddiy ta'sirga ega bo'lib, hujumchiga jabrlanuvchi foydalanuvchi nomidan imtiyozli amallarni bajarish yoki jabrlanuvchi kira oladigan maxfiy ma'lumotni qo'lga kiritish imkonini beradi.
WebSocket'lar bilan bog'liq xavfsizlik zaifliklari yuzaga kelish xavfini kamaytirish uchun quyidagi tavsiyalarga amal qiling:
wss:// protokolidan (TLS ustidan WebSocket) foydalaning.WebSocket endpoint'ining URL'ini qat'iy (hard code) yozing va, albatta, bu URL'ga foydalanuvchi nazorat qiladigan ma'lumotni qo'shmang.WebSocket handshake xabarini CSRF'dan himoya qiling.WebSocket orqali qabul qilingan ma'lumotni har ikki yo'nalishda ishonchsiz (untrusted) deb hisoblang. Kiritishga asoslangan zaifliklar — masalan SQL injection va cross-site scripting'ning oldini olish uchun ma'lumotni server va mijoz tomonlarida xavfsiz qayta ishlang.