در پست قبلی مطالبی در خصوص اهداف و اسنادی که بکدور Bvp47 به NSA مرتبط میکرد خوندیم در این پست به بررسی تکنیکی این بکدور می پردازیم .اگر به چنین مطالبی علاقمند هستید از کانال ما هم دیدن کنید.
پیاده سازی Bvp47 شامل کدهای پیچیده،رمزگذاری و رمزگشایی ، سازگاری با نسخه های متنوع پلتفرم لینوکس، تکنیک های ضد شناسایی روت کیت ، و از همه مهمتر، یکپارچه سازی موتور پیشرفته BPF مورد استفاده در کانال های مخفی پیشرفته و همچنین فرآیندهای رمزنگاری و رمزگشایی ارتباطات است.
رفتارهای اصلی
چندین نکته کلیدی که در ادامه بررسی خوهیم کرد :
1- حالت کاربر و حالت کرنل لینوکس . پروسس در حالت کاربر در حالت اجرا می ماند.
2- موتور Bvp را اجرا کن.
3- بررسی شرایط محیطی - اگر محیط برای اجرا مناسب نبود ، نمونه بصورت خودکار خود را حذف میکند.
4- رمزگشایی بخشی از پیلودها
5. محدودیت های devmem هسته را دستکاری کنید. این به فرآیند در حالت کاربر اجازه می دهد تا به طور مستقیم فضای هسته را بخواند و بنویسد .همچنین سایر تکنیک های هسته نیز استفاده می شود.
6- فایلهای ماژول lkm را لوود کنید .
7- هوک توابع سیستمی به منظور مخفی کردن پروسس ، فایل ، شبکه و تشخیص خود حذفی بدین شکل :
آ . پس از اینکه Bvp47 بسته SYN ارسال شده توسط سرور را دریافت کرد، با فرمت بسته در قوانین فیلتر BPF تطبیق داده می شود (به زیر مراجعه کنید)
ب . تنها پس از رعایت قوانین BPF در عملیات 1، الگوریتم های رمزگذاری مانند RSA+RC-X رمزگشایی خواهند شد.
ج . دستور عملیات مربوطه را طبق دستورالعمل های رمزگشایی انجام دهید.
پیلود
کل فایل Bvp47 از روش رایج پک کردن بکدور استفاده میکند، یعنی ماژولهای عملکرد بکدور فشرده میشوند و سپس در انتهای فایل قرار میگیرند و کل فایل به صورت دادههای اضافی وجود دارد. داده های اضافی از طریق ماژول تابع لودر که در برنامه تعبیه شده است بارگذاری می شود که عمدتاً مراحل زیر را تکمیل می کند:
Read
Check
Unzip
Decryption
Load
ساختار داده اصلی از پیلود بدین شکل می باشد:
محتوای خاص مرتبط با نمونه بدین شکل است :
محتوای مرتبط با تجزیه و تحلیل در برنامه 010Editor
از نظر رمزگشایی پیلود ، لودر موارد زیر را انجام میدهد :
1. چهار تابع مختلف رمزگشایی را فراخوانی میکند تا هر بخش از حالت فشرده خارج شود
2. پس از تکمیل عملیات 1، لودر به فراخوانی الگوریتم Xor 0x47 ادامه میدهدتا رمزگشایی قسمت کامل شود.
توابع خاص رمزگشایی به شرح زیر است:
رمزگذاری رشته ها
در نمونه Bvp47، بسیاری از رشته ها و بلوک ها رمزگذاری شده اند تا احتمال کشف را کاهش دهند. این تکنیک های رمزگذاری عمدتا بر اساس XOR هستند. این رمزگذاری های ظریف هزینه های قابل توجهی برای تجزیه و تحلیل برای محققان ایجاد می کند. طبق تجزیه و تحلیل، عمدتاً 8 نوع عملیات XOR وجود دارد:
الگوریتم 0xa8a16d65_xor بدین صورت است :
تکینکهای مبهم سازی نام توابع
نام توابع export برخی ماژولها با نامهای عددی انتخاب شده اند تا آنالیز اونها رو سخت کنند:
موتور Bvp
بکدور Bvp47 برای تطبیق پذیری از محاسبات داینامیکی زیادی برای محاسبه آدرس توابع و داده های هسته لینوکسی استفاده می کرد . در همان زمان، برای سازگاری با مقدار زیادی از دادههای هسته لینوکس و بخشهای مختلف توسعهیافته مستقل از پیلود، موتور Bvp را برای تغییر مسیر داینامیک و تطبیق توابع سیستم و ساختار دادههای مورد نیاز Bvp47 در کامپایل و زمان اجرا توسعه داده شد. موتور Bvp بسیاری از توابع و ساختارهای داده را سازگار میکند:
ساختاری برای ثبت و توصیف اطلاعات موتور Bvp مورد استفاده در 0x0b و 0x10:(موارد قرمزی که نیاز به بررسی بیشتر داشت)
نتیجه تجزیه شده فرمت موتور Bvp در 0x0b:
روش محاسبه مقدار MD5 در شکل بالا، خواندن محتوای /proc/version و محاسبه مستقیم مقدار MD5 به عنوان شناسه منحصر به فرد هسته سیستم عامل است. نسخه های مختلف هسته با MD5 و مقادیر ساختار مربوطه مطابقت دارند. برای تأیید صحت مقدار MD5، یک سری از نسخه های هسته به شرح زیر جمع آوری شده:
و محاسبه MD5 روی اطلاعات هسته، یعنی محتوای /proc/version انجام دهید (مقادیر MD5 که با شماره نسخه دیجیتال در نیمه بالایی شکل مشخص شده اند را می توانید در Bvp47 پیدا کنید و همه آنها نسخه های سیستم تحت تأثیر هستند) :
هوک سیستم
بکدور Bvp47 عمدتاً نزدیک به 70 تابع را در هسته سیستم عامل لینوکس هوک می کند که عمدتاً برای مخفی کردن شبکه، پردازش، فایل و دور زدن SeLinux و غیره استفاده می شود. جزئیات بیشتر به شرح زیر است:
بکدور Bvp47 قصد دارد فایلهای خود را مخفی کند و با هوک تابع __d_lookup، فرآیند حذف خود را آغاز کند. روش هوک کردن نیز برای بررسی این است که آیا برنامه لایه بالایی به فایل /usr/bin/modload دسترسی دارد یا خیر. بخش اول هندل تابع به شرح زیر است:
در تابع handler، بسیاری از تکنیک های جستجوی تابع استفاده می شود:
مثال 2: بررسی هوک تابع devmem_is_allowed:
پس از هوک hooking devmem_is_allowed بکدور می تواند فضای هسته را در حالت کاربر بخواند و بنویسد.
مثال 3: بررسی هوک کردن تابع avc_has_perm function :
پس از هوک کردن این تابع ، بکدور قابلیت دور زدن Selinux را دارد :
مثال 4: بررسی هوک کردن تابع sys_read :
بکدور با هوک کردن این تابع قابلیت فیلتر کردن خواندن در sys_read را دارد.
دور زدن آنتی ویروس در کرنل لینوکس
بکدور Bvp47 چهار بایت اول فایل elf ماژول هسته را تغییر می دهد تا از جستجوی حافظه برای elf جلوگیری کند و آن را از طریق لودر lkm خود لوود میکند.
کانال مخفی BPF
موتور BPF (Berkeley Packet Filter) یک موتور هسته است که در هسته لینوکس برای فیلتر کردن بسته های با فرمت مشخص استفاده می شود.بکدور Bvp47 مستقیماً از این ویژگی BPF به عنوان یک تکنیک پیشرفته در سطح هسته لینوکس در کانال مخفی استفاده می کند تا از شناسایی هوک های پشته پروتکل شبکه هسته بصورت مستقیم توسط محققان جلوگیری کند.
کاربرد خاص BPF به شرح زیر است. فقط بسته های SYN (از جمله بسته های UDP) که مطابق قوانین است برای رمزگذاری و رمزگشایی به مرحله بعدی ارسال می شوند:
بسته داده مشترک BPF Trigger یک بسته TCP است و اندازه کل داده های حمل شده توسط بسته TCP 0x88 بایت است. ساختار فیلد Trigger Packege در شکل نشان داده شده است:
رمزنگاری و رمزگشایی کانال
بکدور Bvp47 از الگوریتم های نامتقارن RSA و الگوریتم RC-X به عنوان تضمینی برای امنیت پیوند ارتباطی استفاده می کند. محاسبات میانی شامل عواملی مانند زمان و طول ارسال و دریافت بسته ها خواهد بود. برخی از جفت های کلیدی به شرح زیر است:
بکدور Bvp47 پس از دریافت فرمان rebound، فرآیند رمزگشایی را آغاز می کند:
تشخیص محیط اجرا:
بکدور Bvp47 برای محافظت بهتر از خود، مجموعهای از تستهای محیط عملیاتی را انجام داده است تا از انجام مستقیم تحلیل پویا توسط محققان امنیتی پس از بهدستآمدن نمونه جلوگیری کند. پس از رمزگشایی اولین بلوک پیلود، یک عدد صحیح بدون علامت 32 بیتی به دست می آید. این مقدار عمدتاً به عنوان یک جمعبندی برای تأیید محیط عملیاتی استفاده میشود. روش تأیید خاص به شرح زیر است:
1. لودر statvsf("/", &stats) را اجرا می کند.
2. بلوک ها و فایل های مرحله 1 را در نتیجه اجرا دریافت کنید.
3- نتیجه blocks ^ files == checksum ? را بررسی کن . اگر آنها برابر باشند، نتیجه میگیریم که محیط فعلی برای اجرا مناسب است .
سایر تکنیکها :
1- از setrlimit برای تنظیم اندازه فایل dump اصلی روی 0 استفاده کنید تا از استخراج نمونه جلوگیری کند.
2- تکنولوژی Anti-Sandbox همراه با argv[0] و lstat: برنامههای غیرقابل اعتماد اغلب توسط Sandbox اجرا میشوند و رفتار نظارتی دارند. هنگامی که برنامه در حال اجرا است، مسیری که argv[0] در این زمان به آن اشاره می کند، مسیر واقعی برنامه نیست. برنامه lstat را از طریق syscall فراخوانی می کند تا Hook of SandboxRing3 را دور بزند و بررسی کند که آیا فایلی که توسط argv[0] به آن اشاره شده واقعا وجود دارد یا خیر.
3- تکنیک آنتی سندباکس mkstmp : برای تولید فایلهای موقت در دایرکتوری /tmp لینوکس از mkstmp استفاده میشود. (از فرض ما: چون sandbox در آن زمان از این API پشتیبانی نمی کرد، یا خط مشی sandbox mkstmp غیرفعال بود. بنابراین، از موفقیت فراخوانی mkstmp می توان برای شناسایی سندباکس استفاده کرد).
4- تکنیک آنتی سندباکس /boot : اغلب فقط دو دایرکتوری در پوشه /boot در sandbox وجود دارد: /boot/. و /boot/... بنابراین اگر دایرکتوری boot / را برای شمارش تعداد فایل های دایرکتوری /boot باز کنید، اغلب می توانید سندباکس را شناسایی کنید. (در ویندوز، تعداد فایل های موقت در فهرست TEMP ارسال می شود).
5- تکنیک API Flooding و تاخیر در اجرا: هر سندباکسی فقط مدت زمان محدودی را به هر نمونه اختصاص می دهد. بنابراین، بسیاری از APIهای مخرب برای جلوگیری از تجزیه و تحلیل اولیه sandbox، اجرا را به تأخیر می اندازند.
به عنوان یک ابزار حمله پیشرفته، Bvp47 به جهان این امکان را داده است که پیچیدگی و آینده نگری آن را ببینند. آنچه تکان دهنده است این است که پس از تجزیه و تحلیل، مشخص شد که ممکن است بیش از ده سال فعال بوده است . با توجه به اطلاعاتی که از طریق Shadow Brokers و کانالهای کاتالوگ NSA ANT به دست آمده است، مهندسی پشت آن اساساً شامل پلتفرم کامل *nix است و فناوری پیشرفته کانال مخفی SYNKnock که استفاده میکند، ممکن است شامل پلتفرم Cisco، Solaris، AIX، SUN و حتی پلتفرم ویندوز نیز باشد .
آزمایشگاه Pangu Lab به عنوان یک تیم امنیت سایبری بر فناوری پیشرفته این بدافزار آگاهیم و آنرا مرتبط با یک گروه APT فوق حرفه ای می دانیم. ما تنها با کاوش فعالانه در فناوری پیشرفته حمله و دفاع امنیت اطلاعات، ردیابی حوادث مهم و هماهنگی با متخصصان امنیت سایبری در سطح جهان میتوانیم از کاربران در رویاروییهای سایبری آینده محافظت کنیم.
منبع:
www.pangulab.cn