در این مقاله میخوایم به بررسی دو نوع روش هش گرفتن بپردازیم که بسیار موثر و کاربردین (مثلا در شناسایی بدافزار) ، قبلش برسیم به بررسی روش هش گیری مرسوم:
دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
الگریتم های هشینگ معمولی
در الگوریتم های هشینگ مرسوم مثل md5 یا خانواده معزز SHA همگی میان و از فایل یک استرینگ تهیه میکنن که یکتا باشه و خب این الگریتم ها چند تا ویژگی دارن :
- الگریتم باید فارغ ازحجم فایل( چه کوچیک چه بزرگ) هش یکسان تولید کنه ( یه فایل 1 کیلو بایتی اگر یک رشته 32 کاراکتری هش داره یه فایل 10 گیگی هم باید 32 کاراکتر هش داشته باشه)
- کوچیک ترین تغییر در فایل باید کل استرینگ هش رو تغییر بده (مثلا شما یه کتاب آپلود میکنید که 1000 صفحه داره و در یکی از این صفحات یه کلمه hello رو میکنید helo و در استرینگ خروجی باید تغییر عظیمی صورت بگیره)
- نباید بشه مقادیر متفاوتی پیدا کرد که استرینگ هش یکسان تولید بشه
- نباید بشه محتوا اصلی رو از روی استرینگ هش خروجی پیدا کرد (برگشت پذیر نباشه)
حالا شما میایی از یه بدافزاری که مثلا 100 خط کده هش میگیری و یه استرینگ میده ، ولی یه سوال پیش میاد ، اگر ما بیاییم یه خط از این بدافزارو تغییر بدیم و هش بلکل عوض بشه چه کار باید کنیم ؟ (ما یه سری بدافزارا داریم به اسم Polymorphism که میان و ساختار فیلمای خودشونو تغییر میدن و شناسایی شون سخته)
Fuzzy Hashing
جواب استفاده از Fuzzy Hashing هست ، این تکنیک از هش میاد و اون فایلی که ما میخوایم ازش هش بگیریم رو چند قسمت میکنه و از هر قسمت جدا هش میگیره و اینطوری میتونیم بفهمیم که این دوتا فایل چند در صد شبیه همن
![تفاوت بین Fuzzy Hashing و Import Hashing چیست؟](/images/image-loader.gif)
مثلا با استفاده از ابزار SSDEEP میتونیم همچین کاریو بکنیم (جلوتر بیشتر توضیح میدم) مثلا در فایل بالا دوتا فایل pdf رو باهم مقایسه کردیم و دیدیم 90 درصد شبیه همن و پایین امدیم و دوتا فایل یکسان pdf رو مقایسه کردیم و دیدیم که خب کاملا یکسانن
![تفاوت بین Fuzzy Hashing و Import Hashing چیست؟](/images/image-loader.gif)
استفاده از این ابزار خیلی راحته
میاییم و با سویچ -b از فایل ها هش میگیریم و میریزمشون توی یه فایل متنی
ssdeep.exe -b .\files > hashes.txt
![تفاوت بین Fuzzy Hashing و Import Hashing چیست؟](/images/image-loader.gif)
بعد میاییم و فایل های جدیدو مقایسه میکنیم با هش هایی که توی فایل متنی هست
ssdeep -bm hashes.txt .\newfiles
![تفاوت بین Fuzzy Hashing و Import Hashing چیست؟](/images/image-loader.gif)
و میاد میگه مثلا کدوم فایل چند درصد شبیهه
Import Hashing
فایلا به دو دسته تقسیم میشن ، یا متن معمولی و سادن یا نیستن ، دسته دوم ساختار باینری دارن (از عکس و PDF گرفته تا فایل های .EXE) و بهشون میگیم Binary Files(درک ساختار هر فرمت فایل در بحث فارنزیک بسیار مهمه)
مثلا در عکس پایین ساختار باینری یک فایل pdf و یک فایل اجرایی (.exe) رو میبینیم
![تفاوت بین Fuzzy Hashing و Import Hashing چیست؟](/images/image-loader.gif)
هر فایل اجرایی قبل اجرا شدنش به سیستم عامل میگه چه چیزایی نیاز داره، از مقدار حافظه گرفته تا کتابخانه ها(dll)و.. سر همین هر فایل اجرایی یک ساختار PE داره که این هارو به سیستم عامل میگه
![تفاوت بین Fuzzy Hashing و Import Hashing چیست؟](/images/image-loader.gif)
یک قسمت مهمی از این ساختار PE اون Import Table Address هست که میاد میگه آقا مثلا من چه DLL هایی رو میخوام ، ما از همین ویژگی استفاده میکنیم که فایل های اجرایی رو بشناسیم
![تفاوت بین Fuzzy Hashing و Import Hashing چیست؟](/images/image-loader.gif)
تفاوت Import Hashing با Fuzzy Hashing چیه؟
در fuzzy ما شباهت محتوا دوتا فایلو بررسی میکنیم ولی در Import ما تشابه باینری دوتا فایلو بررسی میکنیم
سایت هایی مثل Virustotal میان و از هر بدافزار این دوتا هش رو میگیرن :
![تفاوت بین Fuzzy Hashing و Import Hashing چیست؟](/images/image-loader.gif)
با استفاده از این دوتا هش که به عنوان IOC اون فایل شناخته میشه میتونید در سازمانتون خیلی از حملات و تهدیدات رو راحت تر شناسایی کنید
به عنوان نکته آخر : متخصصای تجزیه و تحلیل بدافزار شرکت های آنتی ویروس میان و این نوع هش هارو از بدافزارا میگیرن و در دیتابیس آنتی ویروسا قرار میدن (شما به عنوان آپدیت دریافتشون میکنید) و با استفاده از این هش ها موتور های آنتی ویروس خیلی سریع تر و دقیق تر اون بدافزارو شناسایی میکنن ( خود آنتی ویروسا از فایلا هش میگیرن و مقایسه میکنن با دیتابیسشون و اگر تشابه خیلی زیاد بود خب مشکوکه دیگه (^_^) )
اگر سوالی چیزی بود در خدمتم ;)