14-bo‘lim
Zararli dasturlar va ularga qarshi kurash
Zararli dastur turlari, yuqish yo'llari, aniqlash usullari, ransomware ga qarshi himoya va tozalash.
Ushbu bo‘lim mundarijasi
Zararli dastur - hujumchining tizim ichidagi "qo'li". Uni aniqlash va oldini olish - himoyaning muhim qismi.
Turlari va maqsadlari #
Yuqish yo'llari #
| Yo'l | Ulushi | Himoya |
|---|---|---|
| Fishing email | Eng katta | Filtr, o'qitish, biriktirma cheklovi |
| Zaif dasturlar | Katta | Yangilanishlar |
| Zararli sayt | O'rtacha | Veb-filtr, brauzer yangilanishi |
| USB qurilmalar | Kam | USB bloklash |
| Ta'minot zanjiri | O'sib bormoqda | SBOM, audit |
| Ochiq RDP/SSH | Katta | Kalit bilan kirish, VPN |
Internetga ochiq RDP (Windows masofaviy ish stoli) porti - ko'p ransomware hujumlarining boshlanish nuqtasi.
Hujumchilar botlar bilan parol sinaydi, kirgach - butun tarmoqni shifrlaydi.
Himoya:
- RDP ni hech qachon internetga ochmang
- Faqat VPN orqali kirish
- Kuchli parol va 2FA
- Kirish urinishlarini bloklash
Zararli dastur xatti-harakati #
# Shubhali jarayonlar
ps aux --sort=-%cpu | head -20
# Nomsiz yoki g'alati joydan ishlayotgan jarayonlar
ls -la /proc/*/exe 2>/dev/null | grep -E '(deleted|/tmp/|/dev/shm/)'
lrwxrwxrwx 1 www-data www-data /proc/28471/exe -> /tmp/.x/kworker (deleted)
(deleted) belgisi - jiddiy ogohlantirishBu shuni anglatadi: jarayon ishlayapti, lekin uning fayli o'chirilgan.
Zararli dasturlar ko'pincha shunday qiladi: ishga tushadi va o'zini o'chiradi - shunda antivirus faylni topa olmaydi.
/tmp/, /dev/shm/, /var/tmp/ dan ishlayotgan jarayonlar ham
shubhali.
# Tarmoq ulanishlari
sudo ss -tunp state established
# Kutilmagan tinglash portlari
sudo ss -tulpn | grep -v -E ':(22|80|443|3306|6379) '
# Chiquvchi ulanishlar - buyruq serveriga
sudo ss -tunp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
# Doimiylik mexanizmlarini tekshirish
crontab -l
sudo crontab -l
ls -la /etc/cron.*/
cat /etc/crontab
systemctl list-units --type=service --state=running
ls -la /etc/systemd/system/
# Avtoyuklash
ls -la ~/.config/autostart/
cat ~/.bashrc ~/.profile | grep -E '(curl|wget|nc|bash -i)'
Tizimga kirgach, hujumchi qayta ishga tushirilgandan keyin ham qolishni xohlaydi.
Odatiy joylar:
| Joy | Tekshirish |
|---|---|
| Cron | crontab -l, /etc/cron.* |
| systemd | /etc/systemd/system/ |
| Avtoyuklash skriptlari | ~/.bashrc, ~/.profile |
| SSH kalitlar | ~/.ssh/authorized_keys |
| Yangi foydalanuvchilar | /etc/passwd |
| Kernel modullari | lsmod |
| Veb qobiq | Veb-ildizdagi yangi PHP fayllar |
# SSH kalitlarini tekshirish
for uy in /home/* /root; do
if [ -f "$uy/.ssh/authorized_keys" ]; then
echo "=== $uy ==="
cat "$uy/.ssh/authorized_keys"
fi
done
Veb qobiq #
// Odatiy veb qobiq belgilari - bunday kodni qidiring
<?php system($_GET['cmd']); ?>
<?php eval(base64_decode($_POST['x'])); ?>
<?php @assert($_REQUEST['a']); ?>
<?php $f='sys'.'tem'; $f($_GET['c']); ?>
# Veb-ildizda shubhali PHP fayllarni qidirish
grep -rn --include="*.php" -E \
"(eval|assert|base64_decode|shell_exec|system|passthru|popen|proc_open)\s*\(" \
/var/www/dokon/public/
# Yaqinda o'zgargan fayllar
find /var/www/dokon -name "*.php" -mtime -7 -ls
# Yuklamalar papkasidagi PHP fayllar - juda shubhali
find /var/www/dokon/public/yuklamalar -name "*.php*"
# Fayl yaxlitligini solishtirish
cd /var/www/dokon
git status --porcelain
git diff --stat
?? public/yuklamalar/rasm_2026.php
M manba/Kontrollerlar/AsosiyKontroller.php
Ishlab chiqarishda kod Git dan deploy qilinsa, git status har
qanday o'zgarishni darhol ko'rsatadi.
Bu bepul va juda samarali yaxlitlik nazorati.
Yanada yaxshiroq: ishlab chiqarishda fayl tizimini faqat o'qish rejimida saqlang.
# Yuklamalar papkasida PHP bajarilishini taqiqlash
location ^~ /yuklamalar/ {
location ~ \.php$ {
deny all;
return 403;
}
}
Ransomware #
| Belgi | Nima anglatishi mumkin |
|---|---|
| Ko'p muvaffaqiyatsiz kirish urinishlari | Parol sinash |
| Yangi administrator hisobi | Huquq oshirish |
| Tarmoq skanerlash | Lateral harakat |
| Zaxira nusxalarni o'chirish | Hujum tayyorgarligi |
| Katta hajmdagi chiquvchi trafik | Ma'lumot o'g'irlash |
| Xavfsizlik vositalarini o'chirish | Izlarni yashirish |
| Ko'p fayl bir vaqtda o'zgarishi | Shifrlash boshlandi |
# Fayl o'zgarishlarini kuzatish
sudo apt install inotify-tools
inotifywait -m -r /var/www/dokon --format '%T %w%f %e' \
--timefmt '%F %T' -e modify,create,delete
// Ko'p fayl bir vaqtda o'zgarishini aniqlash
final class ShifrlashDetektori
{
private const CHEGARA = 100; // 1 daqiqada
private const OYNA = 60;
public function faylOzgardi(string $yol): void
{
$soni = $this->kesh->oshiring('fayl_ozgarish', self::OYNA);
if ($soni > self::CHEGARA) {
$this->ogohlantiruvchi->kritik('shifrlash_shubhasi', [
'ozgargan_fayllar' => $soni,
'oxirgi_fayl' => $yol,
]);
// Xizmatni to'xtatish - zararni cheklash
$this->tizim->yozishniTaqiqlang();
}
}
}
Ransomware ga qarshi himoya #
| Qatlam | Chora |
|---|---|
| Oldini olish | Yangilanishlar, email filtri, RDP yopish |
| Cheklash | Segmentatsiya, eng kam huquq |
| Aniqlash | EDR, fayl monitoringi, anomaliya |
| Tiklash | Oflayn zaxira, tiklash mashqlari |
# Zaxira nusxa - 3-2-1 qoidasi
# 3 nusxa, 2 xil qurilma, 1 tasi tashqarida va oflayn
# Zaxira serveri ilova serveridan kirishga ruxsat bermasin
# Aksincha: zaxira serveri o'zi ma'lumotni tortib olsin
#!/bin/bash
# Zaxira serverida ishga tushadi (tortib olish modeli)
set -euo pipefail
SANA=$(date +%F)
MANBA=dokon@10.0.1.15
ZAXIRA=/zaxira/dokon
# Faqat o'qish huquqi bilan ulanadi
rsync -az --delete \
-e "ssh -i /root/.ssh/zaxira_kaliti" \
"$MANBA:/var/www/dokon/storage/" \
"$ZAXIRA/fayllar_$SANA/"
ssh -i /root/.ssh/zaxira_kaliti "$MANBA" \
"mysqldump --single-transaction dokon | gzip" \
> "$ZAXIRA/db_$SANA.sql.gz"
# O'zgartirilmaydigan saqlashga yuborish
aws s3 cp "$ZAXIRA/db_$SANA.sql.gz" \
s3://dokon-zaxira/ \
--storage-class GLACIER \
--object-lock-mode COMPLIANCE \
--object-lock-retain-until-date "$(date -d '+90 days' -Iseconds)"
| Model | Xavf |
|---|---|
| Itarish (server zaxiraga yuboradi) | Server buzilsa - zaxira ham o'chiriladi |
| Tortib olish (zaxira serveri oladi) | Server buzilsa - zaxira himoyalangan |
Ikkinchi model xavfsizroq: buzilgan serverda zaxira serveriga kirish huquqi yo'q.
# O'zgartirilmaydigan saqlash (S3 Object Lock)
aws s3api put-object-lock-configuration \
--bucket dokon-zaxira \
--object-lock-configuration '{
"ObjectLockEnabled": "Enabled",
"Rule": {
"DefaultRetention": {
"Mode": "COMPLIANCE",
"Days": 90
}
}
}'
"Zaxiramiz bor" - yetarli emas.
Har oyda:
- Tasodifiy zaxirani tanlang
- Alohida muhitga tiklang
- Ma'lumot to'liqligini tekshiring
- Tiklash vaqtini o'lchang
Ko'p tashkilotlar zaxirasi buzuq ekanini faqat falokat kunida biladi.
Antivirus va EDR #
| Vosita | Nima qiladi |
|---|---|
| Antivirus | Ma'lum zararli dasturlarni imzo bo'yicha topadi |
| EDR | Xatti-harakatni kuzatadi, tahlil qiladi, javob beradi |
| XDR | EDR + tarmoq + bulut + email |
An'anaviy antivirus imzo bo'yicha ishlaydi: u faqat ma'lum zararli dasturlarni topadi.
Zamonaviy hujumlarda:
- Har bir qurbon uchun yangi variant yaratiladi
- Fayl ishlatilmaydi (xotirada ishlaydi)
- Qonuniy vositalar ishlatiladi (PowerShell, WMI)
EDR esa xatti-harakatni kuzatadi: "PowerShell internetdan skript yuklab, uni xotirada bajarmoqda" - bu shubhali, imzo bo'lmasa ham.
# Linux uchun ClamAV
sudo apt install clamav clamav-daemon
sudo freshclam
sudo clamscan -r /var/www --infected --log=/var/log/clamav/skan.log
# Muntazam skanerlash
echo "0 2 * * * root clamscan -r /var/www --infected --log=/var/log/clamav/kunlik.log" \
| sudo tee /etc/cron.d/clamav-skan
// Yuklangan fayllarni tekshirish
final class FaylSkanerlovchi
{
public function xavfsizmi(string $yol): bool
{
$jarayon = new Process(['clamdscan', '--no-summary', '--fdpass', $yol]);
$jarayon->run();
if ($jarayon->getExitCode() === 0) {
return true;
}
$this->jurnal->warning('Zararli fayl aniqlandi', [
'yol' => $yol,
'natija' => $jarayon->getOutput(),
]);
return false;
}
}
Xotirada ishlaydigan zararli dasturlar #
# Xotiradan ishlayotgan shubhali jarayonlar
sudo ls -la /proc/*/exe 2>/dev/null | grep memfd
# Bajariladigan xotira sohalari
sudo grep -l 'rwx' /proc/*/maps 2>/dev/null | head
# PowerShell jurnalini yoqish (Windows)
# Script Block Logging - obfuskatsiya qilingan kodni ham yozadi
$yol = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging"
New-Item -Path $yol -Force
Set-ItemProperty -Path $yol -Name "EnableScriptBlockLogging" -Value 1
Hujumchilar tobora ko'proq tizimning o'z vositalaridan foydalanadi:
| Vosita | Suiiste'mol |
|---|---|
| PowerShell | Skript yuklab bajarish |
| WMI | Doimiylik va masofaviy bajarish |
| certutil | Fayl yuklab olish |
| bitsadmin | Fayl uzatish |
| curl, wget | Yuklab olish |
| bash, python | Skript bajarish |
Bu vositalar qonuniy - antivirus ularni bloklamaydi.
Himoya: xatti-harakatni kuzatish va ortiqcha vositalarni olib tashlash.
Ishlab chiqarish serverida #
# Ortiqcha vositalarni olib tashlash
sudo apt purge gcc make perl python3-pip
sudo apt autoremove
# Yoki cheklash
sudo chmod 750 /usr/bin/curl /usr/bin/wget
sudo chown root:sudo /usr/bin/curl /usr/bin/wget
; PHP da xavfli funksiyalarni o'chirish
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source
; Fayl tizimiga kirishni cheklash
open_basedir = /var/www/dokon:/tmp
; Masofaviy fayllarni o'chirish
allow_url_fopen = Off
allow_url_include = Off
disable_functions - qisman himoyaBu chetlab o'tilishi mumkin, lekin hujumchi ishini qiyinlashtiradi.
Muhimroq chora - ilova zaifligini tuzatish, chunki hujumchi kod bajarish imkoniyatiga ega bo'lmasligi kerak.
Lekin chuqur himoya prinsipiga ko'ra, ikkalasi ham kerak.
# Konteynerda minimal muhit
FROM php:8.3-fpm-alpine
# Shell yo'q obraz (distroless) - eng xavfsiz
# Yoki kerakli minimum
RUN apk add --no-cache libzip \
&& docker-php-ext-install pdo_mysql opcache \
&& rm -rf /var/cache/apk/*
# Bajariladigan fayllarni olib tashlash
RUN rm -f /bin/sh /bin/busybox 2>/dev/null || true
Aniqlangan holatda #
# Zararli dastur aniqlanganda
## 1. Izolyatsiya (darhol)
- [ ] Tizimni tarmoqdan uzing (o'chirmang!)
- [ ] Boshqa tizimlarni tekshiring
- [ ] Buzilgan hisoblarni bloklang
## 2. Dalillarni saqlash
- [ ] Xotira nusxasini oling
- [ ] Disk tasvirini oling
- [ ] Jurnallarni nusxalang
- [ ] Tarmoq trafigini saqlang
## 3. Tahlil
- [ ] Qanday kirdi?
- [ ] Qachon?
- [ ] Nima qildi?
- [ ] Qayerga tarqaldi?
- [ ] Qanday ma'lumot o'g'irlandi?
## 4. Tozalash
- [ ] Zaiflikni yoping
- [ ] Barcha parollarni almashtiring
- [ ] Tizimni **qayta o'rnating** (tozalash emas)
- [ ] Zaxiradan tiklang
## 5. Tiklash
- [ ] Monitoringni kuchaytiring
- [ ] Bosqichma-bosqich ishga tushiring
- [ ] Qaytish belgilarini kuzating
Zararli dastur topilgandan keyin uni o'chirish yetarli emas:
- Boshqa komponentalar qolishi mumkin
- Rootkit yashiringan bo'lishi mumkin
- Doimiylik mexanizmlari bir nechta bo'lishi mumkin
Yagona ishonchli yechim - tizimni noldan qayta o'rnatish va zaxiradan tiklash.
Zaxirani ham tekshiring: u zararlangan bo'lishi mumkin.
Zararli dastur topilganda birinchi istak - kompyuterni o'chirish.
Lekin xotiradagi dalillar yo'qoladi:
- Ishlayotgan jarayonlar
- Tarmoq ulanishlari
- Shifrlash kalitlari
- Xotirada ishlaydigan zararli kod
To'g'ri: tarmoqdan uzing, lekin yoqiq qoldiring va xotira nusxasini oling.
# Xotira nusxasini olish (Linux)
sudo apt install lime-forensics-dkms
sudo insmod /lib/modules/$(uname -r)/updates/dkms/lime.ko \
"path=/mnt/tashqi/xotira.lime format=lime"
# Disk tasviri
sudo dd if=/dev/sda of=/mnt/tashqi/disk.img bs=4M status=progress
sha256sum /mnt/tashqi/disk.img > /mnt/tashqi/disk.img.sha256
Buzilish belgilari #
# Kompromis indikatorlari (IoC)
## Fayl darajasida
- Kutilmagan fayllar (ayniqsa `/tmp`, yuklamalar papkasida)
- O'zgargan tizim fayllari
- Yashirin fayllar (`.` bilan boshlanadi)
- G'alati kengaytmalar (`.php.jpg`)
## Jarayon darajasida
- Yuqori CPU (cryptominer)
- `(deleted)` belgili jarayonlar
- Kutilmagan ota-bola munosabati (`nginx` → `bash`)
- Nomsiz yoki tizim jarayoniga o'xshash nomlar
## Tarmoq darajasida
- Noma'lum IP ga ulanish
- G'alati portlar
- DNS so'rovlarining ko'payishi
- Katta chiquvchi trafik
## Hisob darajasida
- Yangi foydalanuvchilar
- Kutilmagan `sudo` amallari
- G'ayritabiiy vaqtdagi kirishlar
- Yangi SSH kalitlar
#!/bin/bash
# tez-tekshiruv.sh - buzilish belgilarini qidirish
echo "=== O'chirilgan fayldan ishlayotgan jarayonlar ==="
sudo ls -la /proc/*/exe 2>/dev/null | grep deleted || echo "yo'q"
echo -e "\n=== /tmp va /dev/shm dan ishlayotganlar ==="
sudo ls -la /proc/*/exe 2>/dev/null | grep -E '/(tmp|dev/shm)/' || echo "yo'q"
echo -e "\n=== Yuqori CPU ishlatayotgan jarayonlar ==="
ps aux --sort=-%cpu | head -5
echo -e "\n=== Kutilmagan tinglash portlari ==="
sudo ss -tulpn | grep LISTEN | grep -v -E ':(22|80|443|3306|6379|9000) '
echo -e "\n=== So'nggi 7 kunda o'zgargan PHP fayllar ==="
find /var/www -name "*.php" -mtime -7 2>/dev/null | head -10
echo -e "\n=== Yuklamalar papkasidagi bajariladigan fayllar ==="
find /var/www/*/public/yuklamalar -type f \( -name "*.php" -o -name "*.sh" \) 2>/dev/null || echo "yo'q"
echo -e "\n=== Yangi SSH kalitlar ==="
find /home /root -name authorized_keys -mtime -30 -ls 2>/dev/null || echo "yo'q"
echo -e "\n=== Cron vazifalari ==="
for u in $(cut -f1 -d: /etc/passwd); do
crontab -u "$u" -l 2>/dev/null | grep -v '^#' | sed "s/^/$u: /"
done
echo -e "\n=== UID 0 hisoblar ==="
awk -F: '($3 == 0) {print $1}' /etc/passwd
Himoya ro'yxati #
| Chora | Bajarildi |
|---|---|
| Barcha tizimlar yangilangan | |
| Email filtri va biriktirma cheklovi | |
| RDP/SSH internetga ochiq emas | |
| Antivirus yoki EDR o'rnatilgan | |
| Ilova eng kam huquq bilan ishlaydi | |
| Yuklamalar papkasida bajarish taqiqlangan | |
| PHP xavfli funksiyalari o'chirilgan | |
| Fayl yaxlitligi kuzatiladi | |
| Oflayn zaxira mavjud | |
| Zaxira "tortib olish" modelida | |
| Tiklash sinovdan o'tkazilgan | |
| Tarmoq segmentlarga bo'lingan | |
| Jurnal markazlashtirilgan | |
| Xodimlar o'qitilgan |
- Serveringizda
tez-tekshiruv.shskriptini ishga tushiring. - Barcha cron vazifalarini tekshiring.
- SSH
authorized_keysfayllarini ko'rib chiqing. - Veb-ildizda shubhali PHP kodlarini qidiring.
- Yuklamalar papkasida PHP bajarilishini taqiqlang.
disable_functionsni sozlang.- ClamAV o'rnating va skanerlashni sozlang.
- Zaxira "tortib olish" modelini amalga oshiring.
- Zaxiradan tiklashni sinab ko'ring.
- Ko'p fayl o'zgarishini aniqlovchi monitoring qo'shing.
Xulosa #
- Zararli dastur maqsadlari: pul, ma'lumot, nazorat, tarqalish.
- Ochiq RDP - ransomware ning asosiy kirish yo'li.
(deleted)belgili jarayon - jiddiy ogohlantirish.- Hujumchi doimiylikni ta'minlaydi: cron, systemd, SSH kalitlar.
- Veb qobiq - yuklamalar papkasida PHP bajarilishini taqiqlang.
- Ransomware bir zumda ishlamaydi - kunlar davomida tayyorlanadi.
- 3-2-1 zaxira va oflayn nusxa majburiy.
- Zaxira "tortib olish" modelida ishlasin.
- Antivirus yetarli emas - EDR xatti-harakatni kuzatadi.
- Hujumchilar tizimning o'z vositalaridan foydalanadi.
- Zararlangan tizimni tozalash emas, qayta o'rnatish kerak.
- Kompyuterni o'chirmang - tarmoqdan uzing va xotira nusxasini oling.
Keyingi bo'limda jurnal va monitoringni ko'ramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.