Computer Emergency Response Center

FAT32 autorun virusları və qorunma mexanizmi

Bir zamanlar olduqca populyar olan bu viruslar günümüzdə artıq populyarlıqlarını itiriblər. Bu məqalədə sizlərə Microsoftun Windows əməliyyat sisteminə gətirdiyi təhlükəsizlik politikası ilə öncəki məşhurluğunu itirən Autorun viruslarından əsas qorunma mexanizmi üzərinə danışacağıq.

AutoPlay funksionallığı əslində Windows əməliyyat sisteminin istifadəçilərin rahatlığı üçün hazırlanmış bir mexanizm idi. Lakin 3-cü tərəf (məqalədə pis niyyətli proqram təminatları) bu mexanizmi yayılmaq üçün istifadə etməyə başladı. Windows XP əməliyyat sistemi ilə gələn bu funksionallıq sistemdə mount edilən sürücülər içərisində autorun.inf faylını təhlil edərək buna uyğun növbəti əməliyyatı icra edirdi. Autorun viruslarında əksər hallarda bu əməliyyat sürücü içərisində olan icra edilə bilən faylı işə salmaq idi. Burada əsas problem bu əməliyyatı iştifadəçinin icazəsi olmadan icra edilməsi idi.  Beləliklə yoluxmuş sürücü daxil  edilərkən sistem avtomatik olaraq sürücüdə gizli şəkildə saxlanılan virusu icra etməyə başlayırdı.

Sürücülər necə yoluxdurulurdu?

Sürücülərin yoluxdurulması üçün ilk öncə komputerin yoluxdurulması lazım idi. Beləki öncədən hər hansı bir yol ilə yoluxmuş kompüterdə fəaliyyət  göstərən virus Device Change Notification qəbul edirdi. Kompüterə hər hansı daşına bilən sürücü daxil edildiyi təqdirdə virus bu haqda notification alırdı və həmin sürücü içərisinə 2 ədəd fayl yazırdı. Bunlardan biri autorun.inf digəri işə sürücünün daxil ediləcəyi başqa kompüterdə icra edilməsini istədiyi icra edilə bilən fayl. Fayllar sürücüyə yazıldıqdan dərhal sonra gizli fayl atributları təyin edilərək faylların normalda görünməsinin qarşısı alınırdı. Beləliklə artıq yoluxmuş sürücü başqa komputerlərə daxil edildiyi zaman virus avtomatik şəkildə işə düşür və kompüteri yoluxdururdu. Bundan sonra virus eyni şəkil yeni komputerdə yuxarıdakı əməliyyatları icra edərək  özünə yeni hədəflər seçirdi. Bu ailədən olan virusların ən populyar örnəkləri Conficker, Sality və s. idi. Beləliklə yoluxma sayı artdığı üçün Microsoft bu mexanizmin fəaliyyəti üçün bəzi limitlər gətirdi. (CD/DVD-ROM - sürücülər istisna). Artıq istifadəçilərə Windows Reyestr və ya Qrup siyasəti (group policy) üzərindən autorun mexanizmini blok etmə imkanı tanınırdı. Lakin buna qədər artıq bir neçə təhlükəsizlik məhsulları autorun virusları ilə effektiv mübarizə metodu işləyib hazırlamışdılar. Beləki bu metod vasitəsi ilə sürücü içərisinə normal viruslar kimi autorun.inf faylı yazılırdı. Lakin digərlərindən fərqlı olaraq sözü gedən faylı  silmək mümkün deyil olmurdu. Nəticədə yoluxmuş kompüterə daxil edilən sürücüyə virus autorun.inf faylını yazmaq istədiyi halda sistem error verir və faylı yarada bilmədiyi haqda məlumat verirdi. Bu metod diqqətimizi cəlb etdiyi üçün mexanizm haqqında məlumat almağa çalışsaqda bu haqda məlumat tapa bilmədiyimiz özümüz kiçik bir araşdırma apararaq nəyin baş verdiyini anlamaq istədik.
Bunun həmin zamanlar məşhur olan Panda Security məhsulu “Panda USB Vaccine” proqram təminatını üzərindən test etməyə çalışdıq.

Sürücü içərisində gizli fayl olaraq yalnız autorun.inf faylı görünürdü. Fayla access almaq (read, write, delete) istədikdə isə sistem bizə permission error verərək fayla baxmaq icazəmizin olmadığı mesajı verirdi.

Sistem error verdiyi üçün mexanizmin FAT32.sys sürücüsünün diski təhlil etməyindən irəli gəldiyini təxmin etmişdik. Buna görədə nə baş verdiyini anlamaq üçün diski manual olaraq təhlil etmək qərarına gəldik. İlk öncə FAT32 fayl sistemi (struktur) spesifikasiyasına baxdıq. Diski təhlil etməyimiz üçün vacib idi. Ətraflı: https://www.win.tue.nl/~aeb/linux/fs/fat/fatgen103.pdf
FAT fayl sistemi 4 əsas sektordan ibarətdir.

Bundan sonra ki, əməliyyatlar üçün Python dilində kiçik bir script yazaraq təhlil əməliyyatını avtomatlaşdırdıq. Tamamı ilə boş disk üzərində işlədiyimiz üçün  FAT32 fayl sistemini tam təhlil etməyə ehtiyyac yoxdur. Burada əsas məqsəd faylların yerləşdiyi RootDir sektoruna keçməkdir. Bunun üçün spesifikasiya bizə aşağıdaki şəkildə düstur verib.

RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec – 1)) / BPB_BytsPerSec

Note that on a FAT32 volume the BPB_RootEntCnt value is always 0, so on a FAT32 volume RootDirSectors is always 0

RootDirSectors = 0
Bizə lazım olan məlumatlar FirstDataSectorda yerləşir. Offseti aşağıdakı düstür ilə hesablayırıq:

İlk olaraq kiçik python skriptinin köməkliyi ilə məlumat sektorunun offsetini əldə edirik.

f = open(r"\\.\D:", 'rb')
a = f.read(sizeof(BiosParameterBlock))
f.close()

BPB = cast(a, POINTER(BiosParameterBlock) ).contents
RootDirSectors = ((BPB.BPB_RootEncCnt * 32) + (BPB.BPB_BytsPerSec - 1)) // BPB_BPB_BytsPerSec
FATSz = BPB.BPB_FATSz32
BytesPerSector = BPB.BPB_BytsPerSec
FirstDataSector = BPB.BPB_ResvdSecCnt + (BPB.BPB_NumFATs + FATSz) + RootDirSectors
OffsetDataDir = BytesPerSector * FirstDataSector

Burada 32 baytlıq məlumatın strukturu aşağıdaki kimidir. Bizə lazım olan Attribute dəyəridir.

Offset in the Entry

Length in Bytes

Description

00

8

Filename

08

3

Extension

0B

1

Attribute

0C

1

Case

0D

1

Creation time in ms

0E

2

Creation time

10

2

Creation date

12

2

Last access date

14

2

High word of starting cluster for FAT32

16

2

Time stamp

18

2

Date stamp

1A

2

Starting cluster

1C

4

Size of the file

Cari diskdə autorun.inf faylı üçün bu dəyər 0x42 idi. Bu isə file attribute tablosunda ATTR_HIDDEN dəyərinə qarşılıq gəlirdi.

Dəyər

Məna

01

Read Only

02

Hidden

04

System

08

Volume Label

10

Directory

20

Archive

40

Unused

80

Unused

Nəticə:

USB Vaccine proqram təminatı diskə yazdığı Autorun.inf faylının atrributunu HIDDEN (gizli) verdiyi üçün fayla access almaq mümkün olmurdu. Test etmək üçün faylın attributunu “0” olaraq dəyişdik və faylı yenidən silməyə cəhd etdiyimiz zaman fayl uğurla silindi.

 


İstinadlar

[1] https://www.pandasecurity.com/en/mediacenter/products/panda-usb-and-autorun-vaccine
[2] https://en.wikipedia.org/wiki/File_Allocation_Table
[3] https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/fatgen103.doc
[4] https://averstak.tripod.com/fatdox/dir.htm

Press ESC to close