Tarmoq hujumlari
Tarmoq hujumlari
Tarmoqda joylashgan protokollar va ilovalarga qilinadigan hujumlar juda ko‘p. Veb-ilovalar ushbu kursda alohida bo‘limda yoritilgan.
Xizmatlarda hujumchilar undan foydalanishi (exploit qilishi) mumkin bo‘lgan ichki xatolar bo‘lishi mumkin. Bunday hujumlar odatda tarmoq xizmatini boshqaruvchi jarayonni egallab olish uchun zaif xizmat orqali operatsion tizimga maxsus ko‘rsatmalar yuborishni o‘z ichiga oladi. Buferning to‘lib ketishi (Buffer Overflow) — bunday hujumlarning bir toifasi.
Tarmoqda odatda ko‘plab ilovalar bo‘ladi: ularning ba’zilarida oddiy login sahifalari, boshqalarida esa murakkab funksionallik mavjud. Hujum yuzasi haqida umumiy tasavvurga ega bo‘lish, shuningdek, osongina foydalanish mumkin bo‘lgan zaifliklarni aniqlashning bir usuli — nishondagi muhitdagi barcha aktivlarning portlarini skanerlash va keyin ularning skrinshotlarini olish.
EyeWitness (https://github.com/FortyNorthSecurity/EyeWitness) kabi vositalar aynan shu ishni bajaradi. Vosita tarmoqda qaysi aktivlar mavjudligi haqida tezda umumiy tasavvur olish imkonini beradi, so‘ngra har bir xizmatning skrinshotlarini taqdim etadi. Skrinshotlar yordamida qaysi tizimlarni sinchiklab ko‘rib chiqishimiz kerakligini osongina va tezda baholay olamiz.
Xizmatdagi zaiflikdan foydalanish (exploit qilish) — xizmatni mo‘ljallanmagan usullarda suiiste’mol qilish demakdir. Ko‘pincha bunday foydalanish hujumchilar o‘z kodini ishga tushira olishini anglatadi, bu RCE ("Remote Code Execution" — kodni masofadan bajarish) deb ataladi.
Buferning to‘lib ketishi (Buffer Overflow)
Tarmoq xizmatlaridagi zaifliklardan foydalanish ba’zan ilovaning xotirani boshqarish funksiyalarini suiiste’mol qilishni o‘z ichiga oladi. Xotirani boshqarishmi? Ha, ilova ishlashi uchun ilovalar kompyuter xotirasi ichida ma’lumotlarni ko‘chirib turishi kerak. Dasturlash tillari dasturchiga xotirani boshqarish imkonini berganda, buferning to‘lib ketishi kabi muammolar paydo bo‘lishi mumkin. Shunga o‘xshash ko‘plab zaifliklar mavjud va ushbu bo‘limda biz buferning to‘lib ketishini ko‘rib chiqamiz.
C va C++ dasturlash tillari dasturchilarga xotira qanday boshqarilishini juda keng nazorat qilish imkonini beradi. Bu dasturchilardan apparat ta’minotiga juda yaqin darajada dasturlashni talab qiladigan ilovalar uchun ideal, biroq zaifliklarga yo‘l ochadi. Java, JavaScript, C#, Ruby, Python va boshqa dasturlash tillari dasturchilarga bunday xatolarga osongina yo‘l qo‘yishga imkon bermaydi, shu sababli bu tillarda yozilgan ilovalarda buferning to‘lib ketishi ehtimoli kamroq.
Buferning to‘lib ketishi tozalanmagan (un-sanitized) kirish ma’lumotlari o‘zgaruvchilarga joylashtirilganda sodir bo‘ladi. Bu o‘zgaruvchilar operatsion tizimda stek (Stack) deb ataladigan xotira tuzilmasi orqali ifodalanadi. So‘ngra hujumchi stekning qaytish ko‘rsatkichi (Return Pointer) deb ataladigan qismini qayta yozishi mumkin.
Qaytish ko‘rsatkichi (Return Pointer) CPU ("Central Processing Unit" — markaziy protsessor) keyingi navbatda qayerdagi kodni bajarishi kerakligini belgilaydi. CPU shunchaki tizim istalgan vaqtda qaysi ko‘rsatmalarni bajarishi kerakligini boshqaradi. Qaytish ko‘rsatkichi — bu shunchaki bajarish amalga oshirilishi kerak bo‘lgan xotira manzili. CPU’ga har doim kodni qayerda bajarish kerakligi aytilishi kerak va qaytish ko‘rsatkichi aynan shunga imkon beradi.
Hujumchi qaytish ko‘rsatkichini boshqara olsa, bu hujumchi CPU qaysi ko‘rsatmalarni bajarishini boshqara olishini anglatadi!
Masalan, quyidagi C kodi misolini ko‘rib chiqing (xavotir olmang, C dasturchisi bo‘lishingiz shart emas, biroq bu oddiy ilova nima qilishini tushunishga harakat qiling):
#include <string.h>
void storeName (char *input) {
char name[12];
strcpy(name, input);
}
int main (int argc, char **argv) {
storeName(argv[1]);
return 0;
}
Ko‘plab dasturlash tillarida, jumladan C’da ham, ilova main deb ataladigan funksiya ichida ishga tushadi. Bu yuqoridagi kodda int main (int argc, char **argv) { yozilgan joyda ko‘rsatilgan. Figurali qavslar { va } ichida dastur shunchaki storeName(argv[1]); deb ataladigan funksiyani ishga tushiradi. U foydalanuvchi dasturga kiritgan har qanday qiymatni qabul qiladi va uni storeName funksiyasiga uzatadi.
Ilova 11 qator koddan iborat, biroq e’tiboringizni strcpy(name, input); yozilgan qatorga qarating. Bu funksiya kirish ma’lumotidagi matnni name deb ataladigan o‘zgaruvchiga nusxalashga harakat qiladi. char name[12]; qatorida ko‘rsatilganidek, name ko‘pi bilan 12 ta belgini sig‘dira oladi. Kodda kiritilgan nomning 12 ta belgidan uzun bo‘lishiga to‘sqinlik qiladigan biror joy bormi? name o‘zgaruvchisini ilovadan foydalanayotgan foydalanuvchi kiritadi va u to‘g‘ridan-to‘g‘ri storeName funksiyasiga uzatiladi.
Bu ilovada kirish ma’lumotlarining uzunligi ilova kutgandek ekanini ta’minlaydigan hech qanday tozalash (sanitization) yo‘q. Dasturni ishga tushirgan har qanday kishi name o‘zgaruvchisi sig‘dira oladigan maksimal qiymatdan kattaroq qiymatni osongina kiritishi mumkin. name o‘zgaruvchisi 12 ta belgini sig‘diradi, biroq CPU’ga 12 tadan ortiq belgini yozish buyurilsa nima bo‘ladi? U shunchaki o‘ziga buyurilgan ishni bajaradi va kerak bo‘lgancha xotirani qayta yozib yuboradi!
Kutilganidan kattaroq qiymatni yozishga urinilganda ham CPU bu qiymatni xotiraga yozishga harakat qiladi. Bu amalda CPU’ning xotiradagi boshqa narsalarni, masalan, qaytish ko‘rsatkichini qayta yozishiga olib keladi va hujumchilarga CPU’ni boshqarish imkonini beradi. Yana takrorlaymiz: agar hujumchi qaytish ko‘rsatkichini qayta yozib, uni boshqara olsa, CPU qaysi kodni bajarishini hujumchi boshqaradi.
Grafik misolda Alice yuqoridagi misolda foydalanganimiz ilovaga o‘z ismini yozayotgani ko‘rsatilgan:

Alice o‘zini to‘g‘ri tutadi va ilovaning kutilgandek ishlashiga olib keladigan ism kiritadi. U o‘z ismi — Alice’ni kiritadi va u shunchaki ilova xotirasiga yoziladi.
Eve esa ilovaga juda ko‘p belgi yuboradi. Shunda nima bo‘ladi? CPU amalda uning kiritgan ma’lumotini oladi va xotiraga yozadi, bunda mavjud bo‘lgan boshqa qiymatlarni ham qayta yozib yuboradi!

Eve’ning kiritgan ma’lumoti CPU’ning ilova kutganidan ancha ko‘p ma’lumot yozishiga sabab bo‘ldi va bu qaytish ko‘rsatkichining qayta yozilishiga olib keldi. CPU keyingi ko‘rsatmani bajarishga uringanda, endi unga AAAAAAA... manzilidagi kodni bajarish buyuriladi.
Agar Eve bu serverni egallab olmoqchi bo‘lsa, u A harflarini yozish o‘rniga xotiraga CPU tushuna oladigan kodni kiritishi kerak bo‘lardi. So‘ngra u qaytish ko‘rsatkichiga CPU’ga Eve’ning o‘z CPU kodini bajarishni buyuradigan qiymat berardi.
Zaifliklar skanerlari
Zaifliklar skaneri tarmoq bo‘ylab dasturiy ta’minot va konfiguratsiyalardagi keng tarqalgan zaifliklarni avtomatik ravishda qidiradi. U zaifliklarning yangi toifalarini topish uchun mo‘ljallanmagan, aksincha, xizmatlarni muammolar va zaifliklarga tekshirish uchun oldindan belgilangan plaginlar (yoki modullar) ro‘yxatidan foydalanadi. U albatta nol kunlik (zero-day) zaifliklarni qidiravermaydi! Nol kunlik zaiflik — bu dasturiy ta’minot ishlab chiqaruvchisiga va himoyachilarga ilgari noma’lum bo‘lgan mutlaqo yangi zaiflik; nol kunlik zaiflik uchun hozircha muammoni bartaraf etuvchi ma’lum yamoqlar (patch) mavjud emas.
Skanerlar tarmoqni xaritalash va portlarni skanerlash imkoniyatlariga, shuningdek, duch kelgan turli ilovalardagi zaifliklarni o‘rganish va topish usullariga ega.
Zaifliklar skaneri ko‘pincha hisob ma’lumotlari (credentials) bilan sozlashni qo‘llab-quvvatlaydi, bu unga zaifliklarni autentifikatsiyadan o‘tmagan nuqtai nazardan qidirish o‘rniga tizimlarga kirib, ularni baholash imkonini beradi.
Kodni bajarish
Hujumchilar o‘zlari foydalana oladigan zaiflikni topgach, qaysi payload’ni ishga tushirishni hal qilishlari kerak. Payload — bu hujumchi eksployt (exploit) orqali yetkazib bermoqchi bo‘lgan kod.
Hujumchi foydalanishga qaror qilishi mumkin bo‘lgan ko‘plab turli payload’lar mavjud, quyida ulardan ba’zilariga misollar:
- Qurbonni hujumchilardan buyruqlar qabul qiluvchi C2 ("Command and Control" — boshqaruv va nazorat) serverida ro‘yxatdan o‘tkazish
- Hujumchi keyinchalik foydalanishi uchun tizimda yangi backdoor (yashirin kirish yo‘li) foydalanuvchi hisobini yaratish
- Hujumchi qurbon tizimini masofadan boshqarishi uchun u bilan GUI ("Graphical User Interface" — grafik foydalanuvchi interfeysi) seansini ochish
- Hujumchi buyruqlar yuborishi mumkin bo‘lgan buyruq satri terminali — shell’ni qo‘lga kiritish
Hujumchilar orasida keng tarqalgan payload — bind-shell. U qurbonni portda tinglashga majbur qiladi va hujumchi ulanganda u shell’ga ega bo‘ladi.
Tarmoqlararo ekranlar hujumchilarning qurbonlarga ulanishining oldini olishda foydali. Port ruxsat etilmagan ekan, tarmoqlararo ekran qurbonga kiruvchi ulanishlarni samarali rad etadi. Bitta portda faqat bitta ilova tinglashi mumkin, shuning uchun hujumchilar allaqachon band bo‘lgan portlarda, agar o‘sha xizmatni o‘chirib qo‘ymasalar, tinglay olmaydi.
Bu himoya choralarini chetlab o‘tish uchun hujumchilar buning o‘rniga qurbonni hujumchiga ulanishga majbur qilishga harakat qiladi va shu tariqa qurbon payload’ga kirishni o‘zi taqdim etadi. Afsuski, ko‘plab tarmoqlararo ekranlar chiquvchi (egress) trafikni rad etishga sozlanmagan, bu esa ushbu hujumni hujumchilar uchun juda qulay qiladi.
Ushbu misolda hujumchi qurbonni o‘ziga ulanishga majbur qilish uchun reverse-shell’dan foydalanayotganini ko‘ramiz.
Tarmoq monitoringi
Ko‘p hollarda hujumchilarga nishonni masofadan boshqarish uchun tarmoq kerak bo‘ladi. Hujumchilar nishonni masofadan boshqara olganda, bu boshqaruv va nazorat kanali (Command and Control) orqali amalga oshiriladi, u ko‘pincha C&C yoki C2 deb ataladi.
C2 talab qilmaydigan, payload’lar bilan oldindan dasturlangan zararli dasturlar orqali amalga oshiriladigan buzib kirishlar ham mavjud. Bunday zararli dasturlar hatto tashqi tarmoqlardan jismonan ajratilgan (air-gapped) tarmoqlarni ham buzib kirishga qodir.
Buzib kirishlarni aniqlash ko‘pincha C2 kanalini topish orqali amalga oshirilishi mumkin. C2 istalgan shaklda bo‘lishi mumkin, masalan:
- Hujumchi serverlari bilan aloqa qilish uchun HTTPS’dan foydalanish. Bu C2’ni oddiy veb-sahifalarni ko‘rib chiqishga o‘xshatib ko‘rsatadi
- Xabarlarni avtomatik ravishda joylash va o‘qish uchun ijtimoiy tarmoqlardan foydalanish
- Qurbonlar uchun buyruqlarni qo‘shish va tahrirlash uchun Google Docs kabi tizimlardan foydalanish
![]()
C2 uchun chegarani faqat hujumchining zukkoligi belgilaydi. Hujumchilarni ayyorona C2 kanallari bilan qanday to‘xtatish haqida o‘ylaganda, ko‘pincha tarmoqdagi statistik anomaliyalar va nomuvofiqliklarni aniqlashga tayanishimiz kerak bo‘ladi. Masalan, tarmoq monitoringi vositalari quyidagilarni aniqlashi mumkin:
- C2 tomonidan ishlatiladigan, biroq ko‘rib chiqilayotgan protokol uchun g‘ayritabiiy bo‘lgan uzoq davom etuvchi ulanishlar. HTTP uzoq davom etuvchi ulanishlar unchalik keng tarqalmagan protokollardan biri, biroq undan masofadan boshqarish uchun foydalanayotgan hujumchida bunday ulanishlar bo‘lishi mumkin.
- C2 tomonidan qurbon faol va buyruqlarga tayyor ekanini bildirish uchun ishlatiladigan mayoqlar (beacons). Mayoqlardan faqat hujumchilar emas, balki ko‘plab turdagi dasturiy ta’minot foydalanadi, biroq qaysi mayoqlar mavjudligini va qaysilarini kutish kerakligini bilish yaxshi amaliyotdir.
- Tarmoqdan to‘satdan otilib chiqadigan keskin ma’lumot oqimlari (strobes). Bu ilovadan katta hajmdagi yuklashni yoki hujumchining ma’lumotlarni o‘g‘irlayotganini ko‘rsatishi mumkin. Keskin ma’lumot oqimlariga qaysi ilova va foydalanuvchi sabab bo‘layotganini tushunishga harakat qiling va ularni kontekstga qo‘ying. Bu odatiy holmi yoki yo‘qmi?
Himoyachilar anomaliyalarni topishga harakat qilishi mumkin bo‘lgan ko‘plab usullar mavjud. Bu anomaliyalar ma’lumotlarni yuborayotgan manba tizimdan olingan ma’lumotlar bilan qo‘shimcha ravishda o‘zaro solishtirilishi kerak.
Tarmoq monitoringida shovqinni signaldan ajratishga yordam berish uchun kontekstdan foydalanish kerak. Bu shuni anglatadiki, SOC ("Security Operations Center" — xavfsizlik operatsiyalari markazi) ma’lumotlarni, masalan, manba va maqsad IP manzillarini, ma’lumotlarni qimmatliroq qilish uchun kontekst bilan boyitishga harakat qilishi kerak.
Kontekstni qo‘llashni quyidagi ssenariy bilan tasvirlash mumkin: Internetdan hujum keladi, biroq u Windows xizmatiga qarshi Linux zaifligidan foydalanishga harakat qiladi. Bu odatda shovqin deb hisoblanadi va uni bemalol e’tiborsiz qoldirish mumkin; biroq hujumni amalga oshirayotgan IP manzil sizning o‘z tarmog‘ingizdagi yoki o‘zingiz ishonadigan provayderning IP manzili bo‘lsa-chi? Shunda biz qo‘llay oladigan kontekst hujumni chuqurroq o‘rganish uchun qimmatli ma’lumot berishi mumkin. Axir biz ishonadigan tizimlarning qandaydir hujumlar uyushtirishini istamaymiz!
Peer-to-peer (tengma-teng) trafik
Ko‘pchilik tarmoqlar mijoz-server tamoyili asosida sozlangan. Mijozlar ma’lumot olish uchun serverlarga murojaat qiladi va mijozlar bir-biri bilan o‘zaro ishlashi kerak bo‘lganda, ular odatda buni server orqali amalga oshiradi.
Biroq hujumchi hisob ma’lumotlaridan qayta foydalanish yoki kuchsiz yoxud zaif mijozlardan foydalanish kabi oson imkoniyatlardan ("pastda osilgan mevalar") foydalanish uchun peer-to-peer, ya’ni mijozdan mijozga aloqadan foydalanishni afzal ko‘rishi ehtimoli katta.
Masalan, SMB tomonidan ishlatiladigan 445-port buzib kirishni aniqlash uchun foydalanish mumkin bo‘lgan yaxshi ko‘rsatkichdir. Ko‘pchilik muhitlarda mijozlar bir-biri bilan SMB orqali aloqa qilmasligi kerak, biroq buzib kirish vaqtida hujumchi tizimlarni yanada buzish uchun SMB’dan foydalanishga harakat qilishi ehtimoli katta.
Lateral harakatlanish (Lateral Movement) va pivoting
Tizim buzilgach, hujumchi o‘sha tizimdan buzilgan tizim kira oladigan qo‘shimcha tarmoqlarni o‘rganish uchun foydalanishi mumkin. Bu buzilgan tizim tarmoqlararo ekran orqali ko‘proq imtiyozlarga ega bo‘lgan yoki tizim, masalan, qo‘shimcha tarmoq kartasi orqali boshqa tarmoqlarga kira oladigan muhitda mumkin bo‘ladi.
Pivoting — hujumchining boshqa tarmoqlarga yetib borish uchun buzilgan xostdan foydalanishi. Buning tasviri shu yerda keltirilgan: Eve bitta tizimni buzib, undan boshqalarini skanerlash va aniqlash uchun foydalanmoqda:
Lateral harakatlanish — pivotdan foydalanib, u orqali boshqa tizimdagi zaiflikdan foydalanish harakati. Endi bu yangi tizimdan keyingi pivoting va lateral harakatlanish uchun ham foydalanish mumkin. Ushbu misolda Eve B tizimini qo‘shimcha aniqlash uchun X serveridan foydalanadi.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
