تا به حال به این فکر کردهاید که بدافزارها را چگونه شناسایی میکنند؟ یا اسکنرهای بدافزار چگونه کار میکنند؟ جیمیل چگونه میداند که فایلهای ضمیمهی ایمیل شما «خطرناک» بودهاند؟
هر چه باشد بدافزارها انواع و اندازههای متنوعی دارند، و یک مشخصهی خاص وجود ندارد که از طریق آن بتوان فهمید یک فایل میتواند آسیبزا باشد یا خیر.
بدافزارها را چگونه شناسایی میکنند؟
بدافزارها را معمولاً از طریق تشخیص چند ویژگی خاص در آنها که در فایلهای مخرب شناختهشده وجود دارد شناسایی میکنند. یک راه برای شناسایی بدافزار محاسبهکردن یک هش (hash) از روی فایل مشکوک و مقایسهی آن با هشهای یک بدافزار شناختهشده است.
گاهی اوقات در فایل مربوط به نسخههای خاص یا چندین خانواده از بدافزارها رشتهای از حروف مشترک است و نرمافزار آنتیویروس فایل را به دنبال یافتن این رشته اسکن میکند. همچنین گاهی دنبالهای از بایتها در یک ویروس یا تروجان خاص وجود دارد و نرمافزار آنتیویروس فایل را به دنبال یافتن این دنباله از بایتها اسکن میکند.
ابزاری که امروز میخواهیم معرفی کنیم YARA نام داشته و از میان دو روش گفتهشده، از روش دوم استفاده میکند. بیایید بدون مقدمه سراغ اصل مطلب برویم و ببینیم YARA چگونه فایلهای بدافزار را شناسایی میکند؟ چگونه میتوانید YARA را نصب کرده و از آن استفاده کنید؟ و چطور میتوانید در YARA قوانینی را تعریف کنید تا بتوانید شناسایی بدافزار را برای خود شخصیسازی کنید؟
YARA چیست؟
YARA ابزاری است برای ایجاد توصیفهایی (description) که هر کدام در یک فایل به دنبال ویژگی خاصی هستند. YARA با استفاده از این توصیفها بدافزار را تشخیص میدهد. هرکدام از این توصیفها میتواند یک متن یا الگوی باینری باشد. به این توصیفها «قانون» یا «Rule» میگویند، و این قوانین الگوهایی از عبارتهای باقاعده (Regular Expression) را مشخص میکنند. YARA با استفاده از این قوانین میتواند الگوهای خاصی را تشخیص دهد که ممکن است نشانهای از مخرببودن فایل باشند.
میتوان با استفاده از الگوهای hex، الگوهای متنی، wild-card، رشتههای case-insensitive و عملگرهای خاص، قوانینی بهشدت متنوع و موثر ایجاد کرده و از آنها برای تشخیص بازهای گسترده از امضاهای بدافزارها توسط YARA استفاده کرد.
rule silent_banker : banker
{
meta:
description = "This is just an example"
threat_level = 3
in_the_wild = true
strings:
$a = {6A 40 68 00 30 00 00 6A 14 8D 91}
$b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"
condition:
$a or $b or $c
}
تکهکد بالا به YARA میگوید که هر فایلی که یکی از رشتههای زیر را داشت:
6A 40 68 00 30 00 00 6A 14 8D 91
8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9
"UVODFRYSIHLNWPEJXQZAKCBGMT"
باید به عنوان تروجان Silent Banker علامتگذاری شود. دقت کنید که دو رشتهی اول الگوهای hex بوده و سومین رشته یک الگوی متنی است. (تروجان Silent Banker یک ویروس تروجان است که اطلاعات بانکی را از رایانهی شما سرقت میکند.)
با دوره "مهندسی معکوس بدافزارها" چقدر آشنایی دارید؟
نصب YARA
YARA بر روی چندین بستر قابل نصب بوده و هم از سیستمعاملهای ویندوزی و هم سیستمعاملهای مبتنی بر یونیکس پشتیبانی میکند. شما میتوانید YARA را هم به صورت ابزار خط فرمان استفاده کرده و هم به صورت افزونهای برای پایتون و در کدهای پایتون خود از آن استفاده کنید.
برای مشاهدهی راهنمای کامل نصب YARA روی بسترهای مختلف و نحوهی نصب افزونهی پایتون، به وبسایت رسمی YARA به آدرس زیر مراجعه کنید:
https://yara.readthedocs.io/en/latest/gettingstarted.html#compiling-and-installing-yara
در این مقاله نحوهی نصب قدم به قدم YARA از روی فایل مرجع با فرمت tar را خواهیم دید.
ابتدا فایل tar آخرین نسخه از YARA را دانلود کرده، و آن را آمادهی کامپایل کنید:
tar -zxf yara-3.11.0.tar.gz
cd yara-3.11.0
./bootstrap.sh
سپس ابزارهای پیشنیاز YARA را دانلود کنید. به ابزارهای automake، libtool، make، gcc و pkg-config نیاز خواهید داشت.
sudo apt-get install automake libtool make gcc pkg-config
سپس YARA را کامپایل و نصب کنید:
./configure
make
sudo make install
در نهایت با اجرای یک تست، اطمینان حاصل کنید که همهچیز به درستی نصب شده باشد:
make check
دانلود مجموعهای از قوانین برای استفاده از YARA
با وجود این که میتوانید قوانین YARA را خودتان بنویسید، چندین فایل حاوی قوانین تعریفشده برای YARA روی Github قابل دسترسی هستند.
برای مثال، میتوانید در مخزن awesome-yara لیستی از قوانین از قبل نوشته شده برای YARA بیابید:
https://github.com/InQuest/awesome-yara
در کنار آنالیز بدافزارها، YARA را میتوان برای آنالیز نوع فایل و دستهبندی محتوای فایلها نیز استفاده کرد. مخزن yara-forensics حاوی قوانینی است که با استفاده از آنها میتوان بایتهای حاوی امضای فایل را تشخیص داده و از این طریق نوع فایل را تعیین کرد:
https://github.com/Xumeiquer/yara-forensics
شما میتوانید به سادگی وارد این مخزنها شده، قوانینی را که امضاهای مد نظر شما را اسکن میکنند بیابید و فایل مورد نظرتان را به عنوان ورودی در دستور YARA استفاده کنید. شما میتوانید با استفاده از دستور زیر، یک فایل حاوی قوانین را از روی Github دانلود کنید:
curl -o FILENAME LINK_TO_FILE
که در آن FILENAME نامی است که فایل دانلودشده روی رایانه شما با این نام ذخیره میشود، و LINK_TO_FILE آدرس فایل موجود بر روی اینترنت است.
دانلود یک فایل خاص حاوی قوانین YARA
برای مثال، فرض کنید میخواهید از sample.rules که VirusTotal آن را منتشر کرده، استفاده کنید. این فایل را میتوان در این آدرس پیدا کرد:
https://github.com/VirusTotal/yara/blob/master/sample.rules
وقتی فایل را در گیتهاب باز کنید، پنجرهای شبیه به این خواهید دید:
اگر روی لینک «Raw» در قسمت بالا و راست کلیک کنید، این لینک شما را به آدرسی میبرد که فایل sample.rules در آن ذخیره شده است. در زمان نگارش این مقاله، فایل در این آدرس قرار دارد:
https://raw.githubusercontent.com/VirusTotal/yara/master/sample.rules
برای دانلود یک کپی از این فایل بر روی رایانه خود کافی است دستور زیر را اجرا کنید:
curl -o Desktop/sample.yara https://raw.githubusercontent.com/VirusTotal/yara/master/sample.rules
اکنون بر روی دسکتاپ خود یک کپی از قوانینی را دارید که در فایل sample.rules قرار داشت.
اجرای YARA
برای اجرای YARA از طریق خط فرمان، دستور زیر را اجرا کنید:
yara [OPTIONS] RULES_FILE TARGET
RULES_FILES فایلی است که قوانین YARA که میخواهید استفاده کنید در آن قرار دارد، و TARGET همان فایل، پوشه یا پروسهای (process) است که باید اسکن شود.
برای مثال، بیایید یک فایل تصادفی را با استفاده از YARA اسکن کنیم و تشخیص دهیم که فایل مورد نظر PDF است یا نه.
ابتدا لازم است فایل قوانین YARA را که فایلهای PDF را تشخیص میدهد از مخزن yara_forensics دانلود کنیم:
yara Desktop/pdf.yara TARGET_FILE_TO_ANALYZE
چطور خودتان قوانین YARA را بنویسید
اگر نتوانید در اینترنت قوانینی برای YARA بیابید که نیازهای شما را برآورده کنند، نیاز خواهید داشت که خودتان قوانین مورد نظرتان را بنویسید.
YarGen ابزاری برای تولید قوانین YARA است. YarGen میتواند براساس یک فایل بدافزار قوانین YARA را تولید کند. این ابزار قوانینی برای YARA تولید میکند که ضمن شناسایی رشتههایی که در یک فایل بدافزار یافت میشوند، رشتههای شناختهشدهای را که در فایلهای غیرمخرب وجود دارند نادیده میگیرند. YarGen دیتابیس بزرگی از رشتهها و آپکدهای (opcode) شناختهشده دارد که در فایلهای غیرمخرب دیده میشوند.
میتوانید YarGen را از آدرس زیر روی گیتهاب پیدا کنید:
نصب YarGen
ابتدا آخرین نسخهی YarGen را از بخش نسخههای منتشرشده به آدرس زیر در صفحهی گیتهاب آن دانلود کرده و فایل زیپ را از حالت فشرده خارج کنید:
https://github.com/Neo23x0/yarGen/releases
کد مرجع هم به فرمت zip و هم tar در دسترس است.
سپس اطمینان حاصل کنید که همهی ابزارهای پیشنیاز را نصب کرده باشید. برای این کار میتوانید دستورات زیر را در ترمینال اجرا کنید:
sudo pip install pefile cd
sudo pip install scandir lxml
naiveBayesClassifier
در نهایت با دستور cd وارد دایرکتوری YarGen شده و دستور زیر را اجرا کنید تا دیتابیسهای پیشساخته دانلود شوند. این دیتابیسها در دایرکتوری ./dbs ذخیره میشوند.
python yarGen.py --update
اجرای YarGen
YarGen امکانات زیادی برای تولید قوانین دارد. برای دیدن پارامترهای قابل استفاده در خط فرمان، دستور زیر را اجرا کنید:
python yarGen.py --help
برای استفاده از دیتابیسهای داخلی برای ایجاد قوانین، کافی است دستور زیر را اجرا کنید:
python yarGen.py -m PATH_TO_MALWARE_DIRECTORY
این دستور فایلهای بدافزار موجود در دایرکتوری به آدرس PATH_TO_MALWARE_DIRECTORY را اسکن کرده و از روی آنها قوانین YARA را تولید میکند. فایلی با نام yargen_rules.yar در دایرکتوری که در آن قرار دارید ساخته میشود که قوانین ایجادشده در آن قرار دارند.
موفق باشید!
راههای بسیار زیادی برای تشخیص بدافزارها وجود دارد، ولی YARA یک روش قدرتمند برای تشخیص و دستهبندی انواع بسیار متنوعی از فایلهای مخرب است. امیدواریم در تجربهی خود در استفاده از YARA موفق باشید!
ممنون از توضیحات خوب و جامع تون