Skip to content

ONHEXGROUP

اخبار دنیای امنیت سایبری

  • اخبار
    • آسیب پذیری امنیتی
    • آنالیز بدافزار
    • کنفرانس ،دوره ، وبینار ، لایو ، CTF
    • بازیگران تهدید
    • توسعه اکسپلویت
    • افشای اطلاعات
    • باگ بانتی
    • تیم آبی
    • تیم قرمز
    • امنیت وب
  • دوره های آموزشی
    • دوره رایگان مهندسی معکوس نرم افزار
  • لیست های ویژه
    • موتورهای جستجو برای امنیت سایبری
    • کاتالوگ KEV آژانس CISA
    • آسیب پذیری های وردپرس
      • آسیب پذیری پلاگین ها
      • آسیب پذیری های هسته
      • آسیب پذیری تم ها
    • محصولات خارج از پشتیبانی مایکروسافت
      • محصولات مایکروسافتی که در سال 2022 پشتیبانی نمیشن
      • محصولات مایکروسافتی که در سال 2023 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2024 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2025 پشتیبانی نمیشن
    • معرفی فیلم ها و سریالهای مرتبط با هک و امنیت
  • آموزش های ویدیویی
  • انتشارات
    • مجله
    • مقالات
    • پادکست
  • پروژه ها
    • ماشین آسیب پذیر
      • وردپرس آسیب پذیر
  • حمایت مالی ( Donate)
  • تماس با ما
 
  • Home
  • اخبار
  • بررسی جاسوس افزار TriangleDB + فایل نمونه
  • آنالیز بدافزار
  • اخبار
  • بازیگران تهدید

بررسی جاسوس افزار TriangleDB + فایل نمونه

On تیر 1, 1402بهمن 24, 1402
seyyid
Share
زمان مطالعه: 7 دقیقه

همونطور که در این پست اشاره کردیم، محققای کسپرسکی در یه گزارشی ، یه کمپین جاسوسی بنام Operation Triangulation رو افشاء کردن که دستگاههای iOS رو هدف قرار میداد . بعد از افشای این گزارش، آژانس امنیت و اطلاعات روسیه ، FSB ، ادعا کرد که اپل بکدور در اختیار NSA قرار میده تا باهاش آیفونهای موجود در روسیه رو هک کنن.

در ادامه ی تحقیق روی این کمپین، محققای کسپرسکی یه گزارش جدید از یکی از اجزای این کمپین بنام TriangleDB منتشر کردن و در اون به آنالیز این بدافزار پرداختن، که در این پست بهش پرداختیم.

در سالهای اخیر دستگاههای iOS به یکی از اهداف جاسوس افزارهای هدفمند مانند Pegasus و Predator و Reign و … تبدیل شدن. اغلب فرایند آلوده کردن دستگاه شامل زنجیره ای از اکسپلویتها هستش مثلا برای دور زدن سندباکس iMessage از پیوستهای مخرب استفاده شده و برای بدست آوردن امتیاز root از یه آسیب پذیری در کرنل. بنابراین کشف یه اکسپلویت منجر به کشف سایر اکسپلویتهای زنجیره و بدافزار نهایی نمیشه. مثلا در سال 2021 با بررسی بک آپ iTunes ، اکسپلویت FORCEDENTRY کشف شد اما در مراحل post exploit یه کدی از سرور دانلود و اجرا شده بود که در زمان آنالیز کشف نشد و در نتیجه محققین نتونستن دنباله اکسپلویت رو پیدا کنن.

در زمینه بررسی کمپین Operation Triangulation هم این اتفاق افتاده و محققین بعد از نیم سال تونستن به زنجیره کامل اکسپلویت دست پیدا کنن و جاسوس افزار مورد استفاده در این کمپین رو آنالیز و گزارشش رو منتشر کنن. شکل زیر زنجیره آلودگی Operation Triangulation رو نشون میده.

 

زنجیره آلودگی Operation Triangulation

 

TriangleDB بعد از اینکه مهاجم از طریق آسیب پذیری کرنل ، امتیاز root رو بدست آورد ، در حافظه دستگاه هدف مستقر میشه. در حافظه مستقر شدن به این معنی هستش که اگه قربانی دستگاه رو ریبوت کنه، بدافزار از بین میره و مهاجم باید دوباره با ارسال یه پیام iMessage با یه پیوست مخرب ، دوباره اونو آلوده کنه ، یا بطور خلاصه، باید کل زنجیره اکسپلویت تکرار بشه.

اگه قربانی دستگاه رو ریبوت نکنه، بدافزار بعد از 30 روز خودش پاک میکنه ، مگه اینکه مهاجم زمان رو تمدید کنه.

TriangleDB با Objective-C توسعه داده شده . این زبان نام اعضاء و متدهایی که توسط توسعه دهنده انتخاب شده رو حفظ میکنه . در باینری این بدافزار، نام متدها مبهم نشده اما نام اعضای کلاس ها جوری انتخاب شده (اختصاری شده) که حدس زدن عملکردشون ، کار رو سخت میکنه :

 

مثال از متدهای کلاس ها

مثال از اعضای کلاس

-[CRConfig populateWithFieldsMacOSOnly]

-[CRConfig populateWithSysInfo]

-[CRConfig extendFor:]

-[CRConfig getCInfoForDump]

+[CRConfig sharedInstance]

+[CRConfig unmungeHexString:]

-[CRConfig init]

-[CRConfig getBuildArchitecture]

-[CRConfig cLS]

-[CRConfig setVersion]

-[CRConfig swapLpServerType]

-[CRConfig setLpServerType:]

NSString *pubKI;

NSData *pubK;

signed __int64 iDa;

signed __int64 uD;

NSString *deN;

NSSTring *prT;

NSString *seN;

NSString *uDI;

NSString *iME;

NSString *meI;

NSString *osV;

CRPwrInfo *pwI;

 

در برخی موارد البته میشه اختصارات رو حدس زد مثلا osV منظور نسخه iOS هستش یا iME منظور IMEI دستگاه هستش.

رشته ها با هگز انکد و با XOR رمز شدن . کد زیر کار رمزگشایی رشته ها رو برعهده داره:

 

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
id +[CRConfig unmungeHexString:](id a1, SEL a2, id stringToDecrypt) {
  // code omitted
  while (1) {
hexByte[0] = stringBytes[i];
hexByte[1] = stringBytes[i + 1];
encryptedByte = strtoul(hexByte, &__endptr, 16);
if (__endptr == hexByte)
          break;
i += 2LL;
if (j)
       decryptedString[j] = encryptedByte ^ previousByte;
else
       decryptedString[0] = encryptedByte;
++j;
previousByte = encryptedByte;
if (i >= stringLength)
          break;
  }
  decryptedString[j] = 0;
  // code omitted
}

 

بعد از اینکه بدافزار در حافظه مستقر و اجرا شد، با استفاده از کتابخانه Protobuf با سرور C2 ارتباط برقرار میکنه. در پیکربندی بدافزار دو نوع سرور قرار گرفته ، یکی اصلی و دیگری پشتیبان (fallback) که با فیلدهای lS و lSf در پیکربندی مشخص میشن. بطور کلی بدافزار با سرور اصلی تعامل داره، اما اگه مشکلی پیش بیاد با سوئیچ به متد [CRConfig swapLpServerType:] از سرور پشتیبان استفاده میکنه.

 

 

پیامهای ارسالی و دریافتی با رمزنگاری متقارن 3DES و نامتقارن RSA رمز میشن. همه ارسالها هم روی HTTPS و با POST ارسال میشه. یه کوکی هم داره که توش یه کلید g با مقدار عددی از پارامتر پیکربندی pubKI داخلش هستش.

بدافزار بصورت دوره ای یسری پیام که حاوی اطلاعات سیستم هست از جمله نسخه بدافزار، شناسه های دستگاه مانند IMEI و MEID و شماره سریال و … ، یسری اطلاعات از پیکربندی بروزرسانی مثلا اینکه دانلود خودکار و نصب بروزرسانی ها فعال هست یا نه ، رو به سرور ارسال میکنه.

شکل زیر یه نمونه از این پیام رو که نسخه v1.7.0.5 بدافزار که روی iOS 15.3.1 در حال اجرا هست رو نشون میده :

 

ضربان قلب در TriangleDB

 

دستوراتی که از سرور C2 میان بصورت پیامهای Protobuf هستش و دارای اسامی هستن که با CRX شروع میشن. Protobuf یا Protocol Buffers یه روش سریالیزه کردن اطلاعات هستش که توسط گوگل ارائه شده. یه همچین سینتکسی رو داره و میشه در زبانهای مختلف مانند سی پلاس ، گولنگ و پایتون و … ازش استفاده کرد.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// polyline.proto
syntax = "proto2";
 
message Point {
  required int32 x = 1;
  required int32 y = 2;
  optional string label = 3;
}
 
message Line {
  required Point start = 1;
  required Point end = 2;
  optional string label = 3;
}
 
message Polyline {
  repeated Point point = 1;
  optional string label = 2;
}

 

مفهوم دستوراتی که با CRX شروع میشن، مبهمه. مثلا برای لیست کردن دایرکتوریها از دستور CRXShowTables استفاده میشه، یا برای تغییر آدرس C2 از دستور CRXConfigureDBServer استفاده میشه. اما در مجموع 24 دستور رو پشتیبانی میکنه که برای اهداف زیر در نظر گرفته شده :

  • تعامل با فایل سیستم مانند ایجاد ، دستکاری ، استخراج و حذف فایلها
  • تعامل با پروسس ها مانند لیست کردن و بستن پروسس ها
  • بدست آوردن داده های keychain  که از اون برای سرقت اعتبارنامه های قربانی استفاده میکنه
  • نظارت بر موقعیت جغرافیایی قربانی
  • اجرای ماژولهای اضافی که فایلهای اجرایی Mach-O هستن. این باینری ها بصورت reflective لوود و باینری اونا در حافظه مستقر میشن.

یکی از دستورات جالب ، CRXPollRecords هستش که کارش اینه که تغییرات فولدرها رو مونیتور میکنه و دنبال فایلهای تغییر کرده ای هستش که مطابق با نام مدنظر مهاجمه، که بصورت regex بهش داده شده، هستش. برای نطارت بر تغییرات فولدرها یه Unix file descriptor از فولدر بدست میاره و یه vnode event handler بهش اختصاص میده. هر وقت بدافزار متوجه شد که تغییراتی رخ داده، event handler شروع به جستجوی فایلهای تغییر کرده مطابق با regex ای که مهاجم داده ، میکنه و اونارو به سرور C2 آپلود میکنه

پارامترهای این دستور :

 

نام پارامتر
توضیحات
p مسیر دایرکتوری
m نام فایل بصورت regex
sDC مشخص میکنه که آیا دستور باید فایل هایی که قبل از شروع نظارت تغییر کردن رو هم استخراج کنه یا نه
eWo مشخص میکنه که آیا محتوای فایل باید فقط از طریق Wi-Fi استخراج بشه یا نه.

 

در زیر 24 دستوری که بدافزار پشتیبانی میکنه رو مشاهده میکنید :

 

Command ID نام اختصاص داده شده توسط توسعه دهنده
توضیحات
0xFEED CRXBlank  بدون عملکرد
0xF001 N/A  حذف بدافزار از طریق خاتمه دادن به پروسسش
0xF301 CRXPause ایجاد یه sleep براساس ثانیه
0xFE01 N/A یه sleep بصورت شبه تصادفی رو با پارامترهای caS و caP ایجاد میکنه. زمان بین caP – caS و caP + caS انتخاب میشه.
0xFB01 CRXForward مقدار caP رو برای دستور 0xFE01 تغییر میده.
0xFB02 CRXFastForward مقدار caS رو برای دستور 0xFE01 تغییر میده.
0xF201 CRXConfigureDBServer تغییر آدرس های اصلی و پشتیبان سرور C2
0xF403 CRXUpdateConfigInfo پارامترهای پیکربندی بدافزار رو تغییر میده. آرگومانهاش هم ،شناسه پارامتری که باید تغییر کنه و مقدار جدیدش هستش. نکته اینکه شناسه های پارمتر رشته های عددی هستن مثلا nineteen
0xF101 CRXExtendTimeout طول عمر بدافزار رو براساس ثانیه افزایش میده. عمر بدافزار بطور پیش فرض 30 روز هست
0xF601 CRXQueryShowTables لیستی از دایرکتوری های خاص رو با استفاده از fts API بدست میاره.
0xF801 CRXFetchRecordInfo متادیتای یه فایل مانند مجوزها، سایز، زمان ایجاد و … رو بدست میاره.
0xF501 CRXFetchRecord محتوای یه فایل بدست میاره.
0xFC10 CRXPollRecords نظارت روی دایرکتوری هایی که داخلشون فایل هایی هستن که نامشون با regex که مهاجم مشخص کرده مطابقت داره.
0xFC11 CRXStopPollingRecords توقف دستور CRXPollRecords 
0xFC01 CRXFetchMatchingRecords بدست آوردن فایلهایی که با Regex مهاجم مطابق دارن.
0xF901 CRXUpdateRecord بسته به آرگومان iM دستور، داده ها رو در یه فایل مینویسه یا یه ماژول جدید به بدافزار اضافه میکنه.
0xFA02 CRXRunRecord یه اجرایی Mach-O که بصورت reflective لوود شده رو اجرا میکنه
0xF902 CRXUpdateRunRecord ماژول جدیدی رو به بدافزار اضافه و اجرا میکنه.
0xFA01 CRXDeleteRecord بسته به آرگومان های دستور، یا یه ماژول بدافزار یا یه فایل با نام مشخص رو حذف می کنه.
0xF402 CRXGetSchemas لیستی از پروسس های در حال اجرا رو بدست میاره.
0xFB44 CRXPurgeRecord بسته به آرگومان‌های فرمان، یه پروسس رو با یه PID مشخص، با SIGKILL یا SIGSTOP میبنده.
0xFD01 N/A اطلاعاتی در خصوص برنامه های iOS نصب شده بدست میاره
0xFB03 CRXGetIndexesV2 اطلاعات keychain رو بدست میاره. شروع به نظارت قفل صفحه میکنه و وقتی دستگاه آنلاک شد، داده های keychain از genp (پسوردهای عمومی) و inet ( پسوردهای اینترنت) و keys and cert tables ( گواهی ها ، کلیدها و شناسه های دیجیتال ) از دیتابیس /private/var/Keychains/keychain-2.db استخراج میکنه. نکته جالب اینکه بدافزار میتونه با نسخه های مختلف keychain ، از نسخه iOS 4 به بعد، کار کنه.
0xF401 N/A اطلاعات مکانی قربانی از جمله مختصات، ارتفاع، جهت و سرعت حرکت بدست میاره. بطور پیش فرض این دستور زمانی کار میکنه که صفحه دستگاه خاموش باشه. البته این ویژگی با پیکربندی مجدد توسط مهاجم قابل تغییر هستش.

 

محققا یسری چیزای جالب هم در حین آنالیز بدافزار مشاهده کردن از جمله اینکه :

  • توسعه دهنده برای رمزگشایی رشته ها از عنوان unmunging استفاده میکنه. متدی که رشته هارو رمزگشایی میکنه +[CRConfig unmungeHexString:] هستش.
  • در خیلی از جاهای بدافزار از اصطلاحات دیتابیس استفاده شده و برای همین اسم بدافزار رو TriangleDB گذاشتن :

 

Entity نام استفاده شده توسط توسعه دهنده
Directory Table
File Record
Implant module
Process Schema
Keychain entry Index, row
C2 server DB Server
Geolocation information DB Status
Heartbeat Diagnostic data
Process of exchanging data with C2 server Transaction
Request to C2 server Query
iOS application Operation

 

  • در حین آنالیز یه کلاسی بنام CRConfig رو پیدا کردن که برای ذخیره پیکربندی بدافزار مورد استفاده قرار میگیره، یه متدی داره بنام populateWithFieldsMacOSOnly ، که در هیچ جای نمونه بدافزار iOS ازش استفاده نشده اما نشون میده که دستگاه های macOS هم میتونن با یه بدافزار مشابه ، آلوده بشن.

بدافزار چندین مجوز (entitlements) از سیستم عامل درخواست میکنه. اما برخی از این مجوزها مانند دسترسی به دوربین ، میکروفون و مخاطبین و تعامل با دستگاهها از طریق بلوتوث در بدافزار استفاده نمیشه. احتمالا این گزینه ها در ماژولها مورد استفاده قرار میگیرن.

همه مواردی که بالا مطالعه کردید، فقط برای یکی از اجزای کمپین Operation Triangulation هستش و سایر اجزاء در حال آنالیز هستش.

اپل در بروزرسانی 21 ژوئن ، 31 خرداد ، 3 آسیب پذیری زیرودی اصلاح کره که دو تا از آسیب پذیری ها ، CVE-2023-32434 و CVE-2023-32435 مرتبط با این کمپین هستن.

 

در نهایت فایل نمونه این گزارش رو برای تحلیل و تمرین بیشتر، میتونید از صفحه گیتهابمون دریافت کنید.

 

منبع

 

 

 

اشتراک در شبکه های اجتماعی :

Facebook
Twitter
Pinterest
LinkedIn
In آنالیز بدافزار اخبار بازیگران تهدیدIn CVE-2023-32434 , CVE-2023-32435 , FORCEDENTRY , ios , keychain , Operation Triangulation , Pegasus , Predator , Protobuf , protocolbuffers , Reign , TriangleDB , Unix file descriptor , vnode event handler , اپل , کسپرسکی

راهبری نوشته

دومین کنفرانس فضای سایبر
بروزرسانی امنیتی 21 ژوئن اپل (31 خرداد)

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دسته‌ها

  • Osint
  • آسیب پذیری امنیتی
  • آموزش های ویدیویی
  • آنالیز بدافزار
  • اخبار
  • افشای اطلاعات
  • امنیت وب
  • انتشارات
  • اینترنت اشیاء
  • بازیگران تهدید
  • باگ بانتی
  • پادکست
  • پروژه ها
  • توسعه اکسپلویت
  • تیم آبی
  • تیم قرمز
  • دوره های آموزشی
  • فازینگ
  • کنفرانس ،دوره ، وبینار ، لایو ، CTF
  • لیست های ویژه
  • ماشین آسیب پذیر
  • مجله
  • مقالات
  • مهندسی معکوس نرم افزار

پست های مرتبط

  • آنالیز بدافزار
  • اخبار
  • بازیگران تهدید
seyyid
On بهمن 27, 1401فروردین 28, 1402

Havoc فریمورک جدید برای Post Exploit

  • آنالیز بدافزار
  • اخبار
  • امنیت وب
  • بازیگران تهدید
seyyid
On فروردین 5, 1403فروردین 6, 1403

سایت های وردپرسی هدف کمپین بدافزاری Sign1

  • آسیب پذیری امنیتی
  • اخبار
  • باگ بانتی
  • توسعه اکسپلویت
  • مهندسی معکوس نرم افزار
seyyid
On مهر 21, 1402

اصلاح 20 آسیب پذیری در کروم

  • آسیب پذیری امنیتی
  • اخبار
  • بازیگران تهدید
seyyid
On آذر 10, 1402

اصلاح دو زیرودی در محصولات اپل

درباره ما

بعد از چندین سال فعالیت تو حوزه امنیت سایبری و تولید محتوا در شبکه های اجتماعی ، بالاخره تصمیم گرفتیم تا یه سایت راه اندازی کنیم و مطالب رو ساده تر ، در یک محیط منسجم و طبقه بندی شده به دست مخاطب برسونیم. امیدوارم که قدمی در راستای رشد امنیت سایبری کشورمون برداشته باشیم.

تگ ها

0day APT command injection Deserialization of Untrusted Data Directory Traversal FBI Fortinet Heap buffer overflow integer overflow kali LockBit Memory Corruption nuclei Off By One Security out-of-bounds write Out of bounds read Patch Tuesday PWN2OWN Stack Buffer overflow type confusion use after free vulnerable wordpress XSS ZDI vulnerability آموزش اکسپلویت نویسی ارز دیجیتال اندروید اپل اکسپلویت باج افزار تلگرام زیرودی سیسکو فارنزیک فورتی نت فیشینگ لاک بیت مایکروسافت هوش مصنوعی وردپرس وردپرس آسیب پذیر ویندوز پلاگین کروم گوگل

شبکه های اجتماعی

    • Instagram
    • Telegram
    • Twitter
    • GitHub
    • YouTube
    • LinkedIn
      کپی مطالب با ذکر منبع بلامانع است | 1401-1404