

باجافزار Lynx Ransomware از اواسط سال 2024 فعالیت خود را آغاز کرده و به سرعت به یکی از تهدیدات پیشرفته در حوزه بدافزارها تبدیل شد. این بدافزار تاکنون بیش از 20 قربانی در صنایع مختلف ایجاد کرده است. Lynx Ransomware پس از نفوذ، فایلهای حیاتی سیستم را رمزگذاری کرده و پسوند ‘.lynx’ به آنها اضافه میکند. همچنین، برای جلوگیری از بازیابی دادهها، کپیهای پشتیبان و فایلهای سایه را حذف میکند.
ویژگی منحصربهفرد Lynx Ransomware، ارسال یادداشتهای باجخواهی از طریق چاپگرهای شبکه است که حمله را غیرمنتظره و چندبعدی میکند. تحلیل نمونههای اولیه نشان میدهد این باجافزار شباهتهایی با نسخه پیشین باجافزار INC دارد و احتمالاً سازندگان آن به کد منبع این بدافزار دسترسی داشتهاند.کاربر با نام ‘rivitna2’ اولین نمونه را شناسایی کرد. بررسی پایگاه داده VirusTotal نشان داد که تنها ۲۶ آنتیویروس توانستند آن را شناسایی کنند. این تعداد، نرخ تشخیص پایین و سطح تهدید بالای بدافزار را نشان میدهد.
Lynx Ransomware چندین ماژول اصلی دارد:
رمزگذاری فایلهای حساس با الگوریتمهای پیشرفته.
حذف فایلهای پشتیبان برای جلوگیری از بازیابی اطلاعات.
توزیع یادداشتهای باجخواهی از طریق چاپگرهای شبکه.
بهرهگیری از مکانیزمهای مشابه با نسخههای قدیمی باجافزار INC.
این ساختار به مهاجمان اجازه میدهد کنترل کاملی بر سیستم قربانی داشته باشند و حملات خود را بهصورت خودکار و گسترده اجرا کنند.
باجافزار Lynx Ransomware از چندین مسیر نفوذ استفاده میکند:
مهاجمان از حملات فیشینگ و ایمیلهای آلوده برای نفوذ به سیستمها استفاده میکنند.
بهرهبرداری از آسیبپذیریهای نرمافزاری.
ورود از طریق شبکههای محلی با دسترسی کمامنیت.
هر یک از این روشها به مهاجم امکان میدهد سریعتر به سیستم دسترسی پیدا کند و رمزگذاری فایلها را آغاز کند.
برای مقابله با Lynx Ransomware، تحلیلگران باید شاخصهای تهدید (IoC) را شناسایی کنند:
پسوند فایل جدید: .lynx
حذف خودکار فایلهای پشتیبان و کپیهای سایه
یادداشتهای چاپگر با محتوای باجخواهی
ارتباط با دامنهها و IPهای شناختهشده مهاجمان
با رصد دقیق این شاخصها، سازمانها میتوانند حملات را سریع شناسایی و محدود کنند.
راهکارهای پیشنهادی برای کاهش ریسک شامل موارد زیر است:
استفاده از ابزارهای اختصاصی تشخیص باجافزار.
پشتیبانگیری منظم و جدا از شبکه اصلی.
آموزش کارکنان برای شناسایی ایمیلها و لینکهای مشکوک.
مانیتورینگ مستمر شبکه و فعالیتهای غیرمعمول سیستم.


باجافزار Lynx Ransomware از روشهای متنوعی برای نفوذ و تداوم حمله استفاده میکند. تحلیل رفتار این بدافزار به تیمهای امنیتی کمک میکند تا شاخصهای تهدید را سریعتر شناسایی کنند. عملکردهای کلیدی Lynx عبارتاند از:
متوقفسازی اجرای برنامهها و سرویسهای حیاتی سیستم.
بدافزار ساختار دایرکتوریها را جستجو و برای یافتن فایلهای حساس بررسی میکند.
افزایش سطح دسترسی (Privilege Escalation) جهت کسب کنترل بیشتر.
حذف نسخههای پشتیبان (Shadow Copies) برای جلوگیری از بازیابی اطلاعات.
رمزگذاری درایوهای متصل و پوشههای اشتراکی.
تغییر تصویر پسزمینه دسکتاپ بهعنوان شاخص قفلشدن سیستم.
چاپ یادداشتهای باجخواهی از طریق چاپگرهای شبکه.
بهصورت پیشفرض، هنگام اجرا Lynx تمامی فایلهای قابلدسترس را رمزگذاری میکند. مهاجمان میتوانند با استفاده از پارامترهای خط فرمان، رفتار باجافزار را سفارشیسازی کنند و دامنه عملیات را مطابق هدف خود تغییر دهند. این انعطافپذیری به آنان اجازه میدهد انتخاب کنند که چه بخشهایی رمزگذاری شوند، آیا نسخههای پشتیبان حذف شوند یا چاپگرها برای اعلان باجخواهی فعال شوند.
| –file | رمزگذاری فایل مشخص شده |
|---|---|
| –dir | رمزگذاری دایرکتوری مشخص شده |
| –help | نمایش لیست تمام آرگومانها و نحوه استفاده از آنها |
| –verbose | فعال کردن حالت مفصل (نمایش جزئیات بیشتر) |
| –stop-processes | توقف فرآیندها از طریق RestartManager |
| –encrypt-network | رمزگذاری اشتراکهای شبکه |
| –load-drives | سوار کردن حجمهای موجود |
| –hide-cmd | پنهان کردن پنجره کنسول (استفاده نمیشود) |
| –no-background | تغییر تصویر پسزمینه را انجام ندهید |
| –no-print | یادداشت را روی چاپگرها چاپ نکنید |
| –kill | متوقف سازی فرآیندها و سرویسها |
| –safe-mod | ورود به حالت ایمن (استفاده نمیشود) |
در این بخش، باجافزار Lynx Ransomware و عملکرد داخلی آن را بررسی میکنیم تا تیمهای امنیتی با نحوه فعالیت، رمزنگاری و پردازش فایلهای این بدافزار آشنا شوند.در انتهای مقاله، فهرستی کامل از شاخصهای خطر (IoC) ارائه شده است تا تحلیلگران بتوانند آنها را بررسی و استفاده کنند.
باجافزار اجرای خود را با فراخوانی تابع اصلی (main function) آغاز میکند و بر اساس پارامترهای ورودی، پرچمها را تنظیم میکند. این پرچمها تعیین میکنند که کدام عملیات رمزگذاری، حذف فایلهای پشتیبان یا خاتمه فرآیندها فعال شوند.
هنگامی که مهاجم پرچم kill را فعال میکند، Lynx تمام فرآیندهای در حال اجرا را بررسی کرده و فرآیندهایی با نامهای زیر را خاتمه میدهد:
sql
veeam
backup
exchange
java
notepad
ابتدا با فراخوانی CreateToolhelp32Snapshot و پرچم TH32CS_SNAPPROCESS، یک تصویر کامل از تمامی فرآیندهای فعال ایجاد میشود. سپس Process32FirstW اطلاعات اولین فرآیند را در ساختار PE ذخیره میکند.
باجافزار نام هر فرآیند (pe.szExeFile) را با آرایهای از فرآیندهای هدف مقایسه میکند. در صورت تطابق، OpenProcess یک handle برای فرآیند ایجاد کرده و در نهایت با TerminateProcess آن را خاتمه میدهد.


باجافزار Lynx Ransomware یک تابع اجرا میکند که خدمات سیستم و سرویسهای وابسته را شناسایی، شمارش و در صورت نیاز خاتمه میدهد. این تابع بررسی میکند که آیا نام نمایش یا نام سرویس شامل یکی از کلمات کلیدی هدف است و در صورت تطابق، عملیات خاتمه را اجرا میکند.
تابع ابتدا با استفاده از OpenSCManagerW به پایگاه داده مدیر کنترل سرویسها (SCM) دسترسی پیدا میکند تا مجوزهای کامل برای مدیریت خدمات داشته باشد.
سپس، تمام خدمات سیستم شناسایی شده و اطلاعات آنها در ساختاری به نام lpServices ذخیره میشود. تابع یک حلقه ایجاد میکند تا هر سرویس موجود را بررسی کند و تطابق نام آن با کلمات کلیدی هدف را شناسایی نماید.
اگر یک سرویس با کلمات کلیدی هدف مطابقت داشته باشد، تابع stop_services فراخوانی میشود تا سرویس مورد نظر و سرویسهای وابسته به آن را متوقف کند. این فرآیند تضمین میکند که باجافزار عملکرد سرویسهای حیاتی را کنترل کرده و تهدید خود را اعمال کند.


باجافزار Lynx Ransomware از تابع Stop Services برای شناسایی و متوقفسازی سرویسهای هدف و همچنین خدمات وابسته به آنها استفاده میکند. این عملکرد به باجافزار اجازه میدهد تا سرویسهای در حال اجرا که ممکن است مانع رمزگذاری فایلها شوند—مانند پایگاههای داده یا نرمافزارهای امنیتی—را پیش از آغاز فرآیند رمزگذاری، غیرفعال کند. این تابع عملیات را به صورت خودکار و بازگشتی اجرا میکند تا سرویسها و وابستگیهای مرتبط کاملاً کنترل شوند.
تابع ابتدا با استفاده از OpenSCManagerW یک هندل به مدیر کنترل سرویس (SCM) با مجوزهای دسترسی کامل ایجاد میکند.
با OpenServiceW سرویس مشخص باز میشود و دسترسیهای لازم شامل SERVICE_QUERY_STATUS، SERVICE_ENUMERATE_DEPENDENTS و SERVICE_STOP فراهم میگردد. این مرحله امکان دسترسی به اطلاعات سرویس و کنترل آن را فراهم میکند.
تابع QueryServiceStatusEx وضعیت فعلی سرویس را بررسی میکند تا اطلاعاتی مانند اجرا، توقف یا وضعیت سایر پارامترها دریافت شود.
سرویسهای وابسته شناسایی و شمارش میشوند و برای هر یک تابع stop_services به صورت بازگشتی فراخوانی میشود تا همه سرویسهای مرتبط متوقف شوند.
در نهایت، ControlService دستور توقف را به سرویس مورد نظر ارسال میکند تا عملیات خاتمه به طور کامل انجام شود.




یادداشت باجخواهی ابتدا با استفاده از روش Base64 رمزگشایی میشود و سپس به یک تابع منتقل میشود تا هر رخداد %id% با شناسه قربانی 66a204aee7861ae72f21b4e0 جایگزین شود.
Your data is stolen and encrypted.
Your unique identificator is %id%
Use this TOR site to contact with us:
http://lynxch2k5xi35j7hlbmwl7d6u2oz4vp2wqp6qkwol624cod3d6iqiyqd.onion/login
Use this email to contact with us:
martina.lestariid1898@proton.me
Our blog
~ TOR Network: http://lynxbllrfr5262yvbgtqoyq76s7mpztcqkv6tjjxgpilpma7nyoeohyd.onion/disclosures
~ Mirror #1: http://lynxblog.net/


/fix performance problems
باجافزار Lynx Ransomware با استفاده از مکانیزم I/O Completion Port در ویندوز، محیطی چند رشتهای برای عملیات رمزنگاری ایجاد میکند تا سرعت رمزگذاری فایلها را افزایش دهد.
تابع اولیه اطلاعات سیستم، از جمله تعداد پردازندهها، را در ساختار SystemInfo جمعآوری میکند. سپس تعداد رشتههای مورد نیاز برای عملیات رمزنگاری را برابر با چهار برابر تعداد پردازندهها تعیین میکند تا از قابلیت چند رشتهای بهرهبرداری شود.
باجافزار یک I/O Completion Port برای مدیریت عملیاتهای ورودی/خروجی ناهمزمان ایجاد میکند:
مقدار 0xffffffff نشان میدهد که در ابتدا هیچ هندل فایلی به پورت متصل نیست.
مقدار 0 مشخص میکند که پورت تکمیل به پورت موجود مرتبط نمیشود.
باجافزار کلید تکمیل را روی مقدار صفر تنظیم میکند و حداکثر تعداد رشتههای همزمان را مشخص میسازد.
باجافزار برای هر پردازنده یک رشته ایجاد میکند تا عملیات تکمیل I/O را مدیریت کند. هر رشته تابع رمزنگاری را اجرا کرده و از پورت تکمیل برای همگامسازی استفاده میکند. این ساختار باعث میشود فرآیند رمزگذاری فایلها بهصورت همزمان و با سرعت بالا انجام شود.
در بخش بعدی، مقاله جزئیات تابع رمزنگاری فایلها و روشهای پردازش داده توسط باجافزار Lynx Ransomware را بررسی میکند.


باجافزار Lynx Ransomware تابعی را برای شمارش و پردازش دایرکتوریها بهکار میگیرد تا فایلهای هدف را جهت رمزگذاری آمادهسازی کند. این تابع ابتدا تلاش میکند یک فایل README.txt در دایرکتوری مشخص ایجاد کند و از تابع FindFirstFileW برای یافتن اولین فایل استفاده میکند.
یک حلقه بر روی هر فایل و زیر دایرکتوری اجرا میشود. باجافزار نمادهای ویژه دایرکتوری مانند . و .. و همچنین نقاط بازنویسی (reparse points) را نادیده میگیرد.
برای هر فایل، باجافزار بررسی میکند که آیا فایل سیستمی است یا پسوندی مانند .exe, .msi, .dll, .lynx دارد. فایلهایی که با این معیارها مطابقت ندارند و نام آنها LYNX یا README.txt نیست، در صف رمزگذاری قرار میگیرند.
برای هر زیر دایرکتوری، باجافزار فراخوانی بازگشتی enum_dir را اجرا میکند. دایرکتوریهای مهم سیستم مانند windows و program files بهصورت خاص مدیریت میشوند تا از پردازش ناخواسته آنها جلوگیری شود.
در Program Files و Program Files (x86)، باجافزار زیر دایرکتوریها را بهصورت جداگانه بررسی میکند و به دنبال پوشههایی مانند microsoft sql server میگردد تا فایلها را رمزگذاری کند.








باجافزار Lynx Ransomware برای رمزگذاری فایلها از تابعی استفاده میکند که مراحل زیر را انجام میدهد:
بررسی دسترسی نوشتن: تابع ابتدا بررسی میکند که آیا فایل هدف مجوز نوشتن دارد یا خیر.
افزایش سطح دسترسی (در صورت نیاز): اگر فایل مجوز نوشتن نداشته باشد، باجافزار تلاش میکند سطح دسترسی خود را افزایش دهد و مجدداً اجازه نوشتن را بررسی میکند.
توقف فرآیندها (در صورت نیاز): در صورت فعال بودن پرچم stop_processes_flag، تابع همه فرآیندهایی را که در آن لحظه هندل باز به فایل دارند، متوقف میکند.
عدم رمزگذاری در صورت عدم موفقیت: اگر هیچیک از تلاشها موفقیتآمیز نباشد، باجافزار فایل را رمزگذاری نمیکند و به مرحله بعدی میرود.


باجافزار Lynx Ransomware ابتدا بررسی میکند که آیا میتواند روی فایل هدف بنویسد. تابع مربوطه مراحل زیر را اجرا میکند:
نوشتن دادهٔ آزمایشی: بدافزار ۳۶ بایت از کاراکتر «2» را به انتهای فایل مینویسد.
تأیید نوشتن: تابع تعداد بایتهای نوشتهشده را میخواند و بررسی میکند که آیا دقیقاً ۳۶ بایت ثبت شده است یا خیر. اگر بررسی موفقیتآمیز باشد، بدافزار دسترسی نوشتن را تأیید میکند.
بازگرداندن مکاننما: تابع با SetFilePointerEx مکاننمای فایل را به انتهای فایل منتقل میکند، سپس پس از نوشتن دادهٔ آزمایشی مکاننما را به موقعیت قبلی بازمیگرداند.
حذف دادهٔ آزمایشی: تابع با فراخوانی SetEndOfFile دادههای آزمایشی را حذف میکند تا هیچ ردپایی از تلاش آزمایشی باقی نماند.


اگر باجافزار Lynx Ransomware نتواند به فایلها دسترسی نوشتن پیدا کند، تابع priv_escalation را فراخوانی میکند تا امتیاز SeTakeOwnershipPrivilege را برای توکن فرآیند فعال کند. این امتیاز به باجافزار اجازه میدهد مالکیت هر شیء امن در سیستم را به دست آورد و دسترسی نوشتن را برای خود فراهم کند.
مراحل اعطای دسترسی نوشتن به شکل زیر انجام میشود:
تعیین مالکیت: تابع مالکیت فایل یا دایرکتوری را به دست میآورد و توصیفگر امنیتی آن را برای اعطای کنترل کامل به یک گروه مشخص تنظیم میکند.
ایجاد SID: با استفاده از AllocateAndInitializeSid یک SID برای گروه مشخص ایجاد میشود.
تنظیم ساختار EXPLICIT_ACCESS: مجوزهای کامل برای ACL جدید تعریف میشود.
ایجاد ACL جدید: SetEntriesInAclW یک ACL جدید ایجاد میکند که مجوزها را اعمال میکند.
تنظیم DACL: با SetNamedSecurityInfoW DACL فایل یا دایرکتوری تنظیم میشود.
باز کردن توکن فرآیند: OpenProcessToken یک هندل به توکن فرآیند فعلی باز میکند.
دریافت LUID برای SeTakeOwnershipPrivilege: LookupPrivilegeValueW مقدار LUID این امتیاز را میگیرد.
فعالسازی امتیاز: AdjustTokenPrivileges برای فعال کردن SeTakeOwnershipPrivilege فراخوانی میشود.
تعیین مالکیت نهایی: SetNamedSecurityInfoW مالکیت فایل یا دایرکتوری را به SID مشخص شده تغییر میدهد.
غیرفعال کردن امتیاز: AdjustTokenPrivileges امتیاز را غیرفعال کرده و توکن فرآیند را به حالت اولیه برمیگرداند.
تنظیم مجدد DACL: SetNamedSecurityInfoW مجوزها را مجدداً اعمال میکند تا اطمینان حاصل شود دسترسیها صحیح تنظیم شدهاند.


باجافزار Lynx Ransomware برای رمزگذاری ایمن فایلها، ابتدا هر فرآیندی را که هندل باز به فایل مورد نظر دارد، خاتمه میدهد. این کار از طریق API مدیر راهاندازی مجدد (Restart Manager) انجام میشود، بدون اینکه به فرآیندهای حیاتی سیستم یا Windows Explorer آسیبی برسد و تنها فرآیندهایی که دسترسی کافی برای خاتمه آنها وجود دارد متوقف میشوند.
مراحل عملکرد تابع به شرح زیر است:
آغاز جلسه Restart Manager: RmStartSession یک جلسه جدید برای مدیریت منابع باز آغاز میکند.
ثبت منابع: با RmRegisterResources فایل مورد نظر به عنوان منبع مدیریت ثبت میشود.
بازیابی فرآیندهای درگیر: RmGetList لیستی از فرآیندهایی که در حال استفاده از فایل هستند را جمعآوری میکند.
بررسی هر فرآیند: تابع روی هر فرآیند در لیست تکرار میشود و از خاتمه دادن Windows Explorer و فرآیندهای حیاتی سیستم اجتناب میکند. همچنین بررسی میشود که فرآیند در حال حاضر متعلق به خود باجافزار نباشد و دسترسی لازم برای خاتمه آن وجود داشته باشد.
خاتمه فرآیند: با فراخوانی TerminateProcess، فرآیند متوقف میشود و WaitForSingleObject اطمینان حاصل میکند که خاتمه کامل شده است.


باجافزار Lynx Ransomware ابتدا کلید عمومی ECC را رمزگشایی میکند و آن را به تابع generate_aes_key منتقل مینماید. روند تولید کلید به صورت فعال و مرحلهای اجرا میشود:
بدافزار از منحنی نامتقارن curve25519 برای تولید یک کلید مخفی مشترک (shared secret) استفاده میکند.
سپس این کلید مشترک را با SHA‑512 هش میکند.
مقدار هششده حاصل، بهعنوان ورودی کلیدی برای AES در نظر گرفته میشود.
برای تولید کلیدهای داخلی (round keys) الگوریتم AES، مقدار هششده را به تابع AESKeyExpansion میفرستد.
باجافزار یک مارکر ۱۱۶ بایتی را در انتهای فایل رمزنگاریشده میچسباند. این مارکر شامل موارد زیر است (ترتیب و اندازهها به بایت):
کلید عمومی ECC — ۳۲ بایت
SHA512(کلید عمومی ECC) — ۶۴ بایت
شناسه رشتهای "LYNX" — ۴ بایت (حروف ASCII)
مقدار ناشناس — 00 00 00 00 — ۴ بایت (هدف مشخص نیست)
اندیکاتور اندازهٔ بلوک رمزنگاری — 40 42 0F 00 — ۴ بایت (نمایانگر 1,000,000 = حدود 1MB اندازه بلوک)
احتمالاً مرحلهٔ بلوک رمزنگاری — 05 00 00 00 — ۴ بایت (ممکن است نشاندهندهٔ تعداد یا مرحلهای در الگوریتم باشد)
تعداد بلوکهای رد شده — 01 00 00 00 — ۴ بایت (مثلاً یک بلوک 5MB رد شده است)
مجموع: ۳۲ + ۶۴ + ۴ + ۴ + ۴ + ۴ + ۴ = ۱۱۶ بایت
بدافزار مقدار switch_value را برابر با 2 تنظیم میکند. این سوئیچ احتمالاً شاخصی برای انتخاب حالت یا نسخهٔ الگوریتم رمزنگاری است (مثلاً تعیین نوع پردازش بلوک یا رفتار fallback).




در باجافزار Lynx Ransomware، تابع رمزنگاری فایلها بهصورت غیرهمزمان و با بهرهگیری از پورت تکمیل I/O در ویندوز اجرا میشود. مراحل اصلی عملکرد به شرح زیر است:
تابع ابتدا تمام ساختارهای مورد نیاز برای عملیات خواندن و رمزنگاری فایل را آماده میکند. این ساختارها شامل بافر داده و اطلاعات مدیریت عملیات غیرهمزمان هستند.
تابع عملیات خواندن فایل را بهصورت پسزمینه آغاز میکند. در این حالت، برنامه منتظر نمیماند تا کل فایل خوانده شود و سیستمعامل بهطور خودکار پس از تکمیل هر بخش، برنامه را مطلع میکند.
تابع از CreateIoCompletionPort برای مرتبط کردن هندل فایل با پورت تکمیل I/O استفاده میکند. این مکانیزم به برنامه اجازه میدهد عملیات ورودی/خروجی را بهصورت غیرهمزمان مدیریت کرده و عملکرد کارآمدتری داشته باشد.
برای کنترل عملیات غیرهمزمان، تابع از ساختار OVERLAPPED استفاده میکند. این ساختار شامل اشارهگر به بافر داده، رویداد سیگنالدهی و اطلاعات مرتبط با عملیات در حال انجام است.
تابع رمزنگاری با استفاده از GetQueuedCompletionStatus بستههای تکمیل را دریافت میکند. هر بسته نشان میدهد که یک بخش از فایل با موفقیت خوانده شده است. سپس تابع، بر اساس مقدار switch_value در ساختار OVERLAPPED، تصمیم میگیرد که دادهها چگونه رمزگذاری شوند.
پس از پردازش بسته تکمیل و تعیین نحوه مدیریت دادهها، تابع رمزنگاری بخش خوانده شده از فایل را اجرا میکند. این فرآیند بهصورت موازی و کارآمد، رمزگذاری تمام فایلها را تسریع میکند.


عملیات رمزنگاری با تنظیم محیط و پارامترهای مورد نیاز آغاز میشود و سپس تابع به طور مداوم منتظر بستههای تکمیل I/O میماند.
تابع با استفاده از GetQueuedCompletionStatus منتظر دریافت بستههای تکمیل I/O میماند. پس از دریافت هر بسته، بسته به مقدار switch_value عملیات رمزگذاری انجام میشود.
switch_valueاین بخش دارای چهار حالت (case) اصلی است:
case 0
case 1
case 2
case 3
در نمونه مورد بررسی، مقدار switch_value = 2 است؛ بنابراین پردازش بر اساس case 2 انجام میشود، که شامل خواندن دادهها، تولید کلید AES-CTR و رمزگذاری بلوکها میباشد.
این ساختار switch-case به باجافزار امکان میدهد عملیات رمزگذاری را به صورت مرحلهای و کنترلشده اجرا کند و مدیریت بلوکهای داده و بستههای I/O را بهینه نماید.


باجافزار Lynx از read_counter برای کنترل تعداد بلوکهای خواندهشده و رمزگذاریشده استفاده میکند:
بررسی مقدار شمارنده:
تابع بررسی میکند که آیا read_counter برابر با صفر است یا خیر.
دو حالت اصلی:
حالت ۱ – اولین بلوک (read_counter = 0):
این نشان میدهد که این اولین بلوک برای خواندن یا رمزگذاری است. در این حالت، مقدار next_enc_block_offset بررسی نمیشود و رمزگذاری از ابتدای فایل آغاز میشود.
حالت ۲ – بلوک بعدی (read_counter != 0):
این نشان میدهد که این بلوک اول برای رمزگذاری نیست. در این حالت، مقدار next_enc_block_offset برای مشخص کردن محل بلوک بعدی که باید رمزگذاری شود، ارزیابی میشود.
مثال کاربردی:
باجافزار ابتدا ۱ مگابایت از ابتدای فایل را رمزگذاری میکند و سپس از آفست ۶ مگابایت، ۱ مگابایت دیگر را رمزگذاری میکند؛ به این ترتیب، بین این دو بخش ۵ مگابایت داده رد میشود.
نوشتن مارکر:
برای مدیریت صحیح پایان رمزگذاری، مارکر مخصوصی در انتهای فایل درج میشود تا از رمزگذاری بیش از حد و تداخل دادهها جلوگیری شود.


باجافزار Lynx هنگام رمزگذاری دادهها، از متغیر next_enc_block_offset برای مدیریت جریان بلاکها استفاده میکند:
بررسی انتهای فایل:
تابع بررسی میکند که آیا مقدار next_enc_block_offset از اندازه کل فایل بزرگتر شده است یا خیر. اگر این شرط برقرار باشد، یعنی دیگر دادهای برای رمزگذاری وجود ندارد. در عین حال، اگر read_counter صفر نباشد، مشخص میشود که این اولین بلوک رمزگذاری نیست.
تنظیم حالت پایان رمزگذاری:
در این صورت، switch_code به مقدار ۳ تنظیم میشود. این حالت (case 3) نشاندهنده پایان رمزگذاری است؛ یعنی تمام دادههای فایل با موفقیت رمزگذاری شدهاند و عملیات پایان یافته است.
ادامه رمزگذاری در صورت نیاز:
اگر شرط پایان برقرار نباشد، به این معنی است که هنوز دادههایی برای رمزگذاری باقی ماندهاند و باجافزار ادامه عملیات رمزگذاری را انجام میدهد.


case 1:
شرط مورد نظر تعیین میکند که چند بایت خوانده/رمزگذاری شوند.
بیایید با یک مثال آن را بررسی کنیم.


هنگامی که باجافزار Lynx دادهها را رمزگذاری میکند، باید دقت کند که مارکر الحاقشده در انتهای فایل (0x74 بایت) رمزگذاری نشود. در مثال زیر نحوه محاسبه اندازه دقیق دادهها برای نوشتن توضیح داده شده است:
حجم کل فایل برای رمزگذاری: 6.5 مگابایت + 0x74 بایت مارکر
بلاک اول: 1 مگابایت رمزگذاری میشود.
بلاک دوم: از 6 مگابایت شروع به رمزگذاری میکند، اما تنها 0.5 مگابایت واقعی داده وجود دارد و سپس مارکر 0x74 بایت قرار دارد.
چالش: بدافزار هر بار 1 مگابایت میخواند، اما نباید مارکر 0x74 بایت را رمزگذاری کند.
فرمولی که باجافزار استفاده میکند:
lpNumberOfBytesRead + next_enc_block_offset – filesize
با جایگذاری اعداد مثال:
lpNumberOfBytesRead = 0.5 مگابایت + 0x74 بایت
next_enc_block_offset = 6 مگابایت
filesize = 6.5 مگابایت
نتیجه:
0.5 مگابایت + 0x74 + 6 مگابایت – 6.5 مگابایت = 0x74
بنابراین اندازه مارکر از مقدار خواندهشده کم میشود و مقدار lpNumberOfBytesWritten برابر 0.5 مگابایت خواهد بود که دقیقاً همان دادهای است که باید رمزگذاری شود و مارکر دستنخورده باقی میماند.


پس از تکمیل رمزگذاری هر بلوک داده، باجافزار Lynx مجموعهای از عملیات تکمیلی را انجام میدهد تا اطمینان حاصل شود که دادهها بهطور کامل محافظت شدهاند و منابع سیستم آزاد میشوند.
افزایش شمارنده بلوکها (read_counter)
تابع read_counter تعداد بلوکهای دادهای که تا این مرحله خوانده و رمزگذاری شدهاند را بهروزرسانی میکند. این شمارنده کمک میکند تا اندازه دقیق دادههای باقیمانده برای رمزگذاری محاسبه شود و عملیات بهطور کامل پوشش داده شود.
آمادهسازی کلیدهای دور AES-CTR
با استفاده از الگوریتم AES-CTR، کلیدهای دور برای هر بلوک داده تولید میشوند. این کلیدها بر اساس کلید اصلی AES و شمارنده (nonce) ایجاد میشوند و تضمین میکنند که هر بلوک داده منحصر به فرد رمزگذاری شود.
تغییر نام فایل رمزگذاری شده (Case 3)
پس از تکمیل رمزگذاری، فایل رمزگذاری شده به نام نهایی خود تغییر داده میشود. باجافزار ممکن است پسوند فایل را تغییر دهد یا نام جدیدی به آن اختصاص دهد تا تشخیص و بازیابی فایل دشوارتر شود.
بستن هندلهای باز
تمام هندلهای باز فایل، از جمله هندلهای خواندن و نوشتن، بسته میشوند. هندلها شناسههای عددی هستند که به منابع سیستم (مانند فایلها، دستگاهها یا پنجرهها) اشاره دارند و بستن آنها تضمین میکند که منابع آزاد شده و عملیات فایل به درستی تکمیل شده است.


باجافزار Lynx از الگوریتم AES-CTR برای رمزگذاری دادهها استفاده میکند و فرآیند رمزنگاری را به صورت جریان کلید (keystream) اجرا میکند تا هر بلوک داده بهطور منحصر به فرد رمز شود.
تولید جریان کلید (Keystream Generation)
تابع رمزگذاری با استفاده از کلید اصلی AES و شمارنده (nonce) برای هر بلوک داده، یک کلید دور (round key) منحصر به فرد تولید میکند. این مکانیزم تضمین میکند که هر بخش از دادهها الگویی تکراری نداشته باشد و امنیت رمزگذاری افزایش یابد.
ترکیب دادهها با جریان کلید (XOR Operation)
هر بلوک دادهی خوانده شده از فایل با جریان کلید تولید شده با عملیات XOR ترکیب میشود. این عمل دادههای متن ساده را به دادههای رمز شده تبدیل میکند و حفاظت از اطلاعات را تأمین میکند.
افزایش شمارنده (Nonce Increment)
پس از رمزگذاری هر بلوک، شمارنده افزایش مییابد تا برای بلوک بعدی جریان کلید جدیدی تولید شود. این فرآیند، از تکرار الگوهای رمزگذاری جلوگیری کرده و مقاومت در برابر تحلیلهای رمزنگاری را افزایش میدهد.
نوشتن دادههای رمزگذاری شده
دادههای رمزگذاری شده به جای دادههای اصلی فایل نوشته میشوند و دسترسی به اطلاعات بدون کلید AES مربوطه غیرممکن میشود.


تابع رمزگذاری باجافزار Lynx از الگوریتم AES-CTR برای رمزنگاری فایلها استفاده میکند. این الگوریتم یک جریان کلید (keystream) تولید میکند که برای هر بلوک داده منحصر به فرد است و امنیت رمزگذاری را تضمین میکند.
تولید جریان کلید (Keystream Generation)
تابع با استفاده از کلید اصلی AES و شمارنده (nonce) برای هر بلوک داده، یک کلید دور (round key) منحصر به فرد تولید میکند. این جریان کلید تضمین میکند که هر بخش از دادهها به صورت یکتا رمزگذاری شود و الگوهای تکراری ایجاد نشود.
ترکیب دادهها با جریان کلید (XOR Operation)
هر بلوک دادهی خوانده شده از فایل با جریان کلید XOR میشود. این عمل دادههای متن ساده را به دادههای رمز شده تبدیل میکند و عملیات رمزگذاری را تکمیل میسازد.
افزایش شمارنده (Nonce Increment)
پس از رمزگذاری هر بلوک، شمارنده افزایش مییابد تا برای بلوک بعدی جریان کلید جدیدی تولید شود. این مکانیزم، امنیت رمزگذاری و مقاومت در برابر تحلیلهای رمزنگاری را افزایش میدهد.
نوشتن دادههای رمزگذاری شده
دادههای رمز شده جایگزین دادههای اصلی در فایل میشوند. این مرحله تضمین میکند که فایل اصلی قابل دسترسی نباشد و تنها با کلید AES مربوطه قابل بازیابی است.


باجافزار Lynx Ransomware در گامهای اولیه حمله تلاش میکند کپیهای سایه ویندوز را حذف کند تا امکان بازیابی فایلها را برای قربانیان دشوار سازد. تابع enc_del_shadow_copies این کار را برای همهٔ درایوهای موجود انجام میدهد و سپس دایرکتوریها را برای رمزگذاری شمارش میکند. در صورت فعال بودن پرچم encrypt_network_flag، اشتراکهای شبکه هم هدفگذاری میشوند.
اسکن حروف درایو
تابع روی تمام حروف درایو از A تا Z تکرار میشود و با استفاده از GetDriveTypeW نوع هر درایو را تعیین میکند. درایوهای غیرقابلاستفاده مانند CD-ROM یا درایوهای غیرفعال را رد میکند.
ایجاد هندل به ریشه درایو
برای هر درایو قابلپردازش، تابع با CreateFileW و مسیر پیشوند \\?\A:\ یک هندل به ریشهٔ درایو میگیرد. پیشوند \\?\ به ویندوز میگوید مسیر را بهصورت literal پردازش کند و محدودیتهای MAX_PATH را دور بزند.
درخواست حذف یا کوچکسازی فضای Snapshot
تابع با فراخوانی DeviceIoControl و استفاده از کد کنترل 0x53C028 (IOCTL_VOLSNAP_SET_MAX_DIFF_AREA_SIZE) تلاش میکند حداکثر اندازه ناحیهٔ تفاوت (diff area) را به 1 تنظیم کند؛ این عمل عملاً باعث حذف یا تضعیف کپیهای سایه میشود.
شمارش و آغاز رمزگذاری
پس از عملیات حذف، تابع دایرکتوریهای مربوط به هر درایو را شمارش میکند و با فراخوانی enum_dir فایلها را برای رمزگذاری صفبندی مینماید. اگر encrypt_network_flag فعال باشد، فرایند مشابهی برای اشتراکهای شبکه اجرا میشود.
حذف کپیهای سایه بهطور جدی توانایی بازیابی دادهها را کاهش میدهد؛ بنابراین وجود پشتیبانهای جداسازیشده (offline/air-gapped backups) و سیاستهای نگهداری نسخهٔ پشتیبان اهمیت اساسی دارد.
ثبت لاگ فراخوانیهای DeviceIoControl یا رفتارهای مرتبط با IOCTL_VOLSNAP_* میتواند بهعنوان شاخصی برای شناسایی فعالیتهای مخرب عمل کند.
مانیتورینگ ایجاد هندلهای غیرمعمول به ریشهٔ درایوها (\\?\X:\) و فراخوانیهای مکرر CreateFileW/DeviceIoControl میتواند در تشخیص زودهنگام مفید باشد.




باجافزار Lynx Ransomware بهصورت خودکار پوشههای اشتراکی شبکه را شناسایی و رمزگذاری میکند. این رفتار به مهاجمان اجازه میدهد دامنهٔ تأثیر خود را فراتر از نقطهٔ نفوذ اولیه گسترش دهند و به دادههای توزیعشده در سراسر شبکه دسترسی پیدا کنند.
تابع ابتدا از WNetOpenEnumW برای شروع شمارش منابع شبکه استفاده میکند. این فراخوانی با پارامترهای زیر انجام میشود:
RESOURCE_GLOBALNET (شمارش تمام منابع شبکه)
RESOURCETYPE_ANY (شامل تمام انواع منابع)
گزینههای اضافی (0x13u) برای رفتار خاص شمارش
سپس تابع در یک حلقه WNetEnumResourceW را فراخوانی میکند تا بافر currentResource را با اطلاعات منابع پر کند و مقدار cCount را بهروزرسانی نماید. برای هر ورودی در آرایه currentResource، تابع بررسی میکند که آیا نوع نمایش (RESOURCEDISPLAYTYPE_SHARE) نشاندهندهٔ یک پوشه اشتراکی است یا خیر. در صورت یافتن پوشهٔ اشتراکی، تابع enum_dir را برای پردازش آن پوشه فراخوانی میکند.
اگر یک منبع نقش «ظرف» (دارای RESOURCEUSAGE_CONTAINER) داشته باشد، تابع بهصورت بازگشتی enc_shared_folders را فراخوانی میکند تا محتوای درون آن ظرف (زیرپوشهها یا منابع دیگر) را نیز شمارش و پردازش کند. این مکانیزم باعث میشود باجافزار بتواند سلسلهمراتب منابع شبکه را کاوش کند و پوشههای پنهان یا ساختارهای سلسلهمراتبی را هدف قرار دهد.
در پایان، این تابع فهرستی از پوشههای اشتراکی قابلدسترسی تولید میکند و برای هر پوشه، عملیات بعدی مانند فراخوانی enum_dir جهت صفبندی فایلها برای رمزگذاری انجام میگیرد. به کمک این روند، Lynx میتواند بهسرعت نقاط بیشتری در شبکه را آلوده کند و تأثیر حمله را گسترش دهد.


تابع Mount Volume مسئول سوار کردن حجمهای موجود در سیستم ویندوز به حروف درایو مشخص است و اطمینان حاصل میکند که هیچ حرف درایوی قبلاً اشغال نشده باشد.
شناسایی حروف درایو خالی
تابع از طریق آرایهای از حروف درایو، تمام حروف خالی را شناسایی میکند. اگر یک حرف درایو وضعیت DRIVE_NO_ROOT_DIR داشته باشد، تابع آن را برای سوار کردن یک حجم استفاده میکند.
شمارش و بررسی حجمها
با استفاده از FindFirstVolumeW و FindNextVolumeW، تابع تمام حجمهای موجود در سیستم را مرور میکند و اطلاعات مربوط به هر یک را بازیابی میکند.
سوار کردن حجمها به حروف درایو
تابع سپس هر حجم را با استفاده از SetVolumeMountPointW به یک حرف درایو خالی اختصاص میدهد. آرایه lpszVolumeMountPoint لیستی از حروف درایوی را که برای سوار کردن حجمها استفاده میشوند، در خود نگه میدارد.
با اجرای این مراحل، تابع Mount Volume تضمین میکند که تمام درایوهای موجود به سیستم متصل شده و آماده رمزگذاری یا دسترسی برنامه هستند.


این تابع یک فایل تصویر موقت به نام “background-image.jpg” در پوشه موقت (temp) ایجاد میکند. این فایل حاوی یادداشت باجخواهی به صورت تصویر است و آن را به عنوان تصویر پسزمینه دسکتاپ تنظیم میکند.




تابع Print Ransom Note باجافزار Lynx، یادداشت باجخواهی را روی چاپگرهای متصل به سیستم چاپ میکند. عملکرد آن به صورت زیر است:
شناسایی چاپگرها
تابع ابتدا از EnumPrintersW برای دریافت لیست تمام چاپگرهای متصل به سیستم استفاده میکند.
فیلتر کردن چاپگرهای مجازی
هنگام مرور چاپگرها، تابع چاپگرهای مجازی مانند Microsoft Print to PDF و Microsoft XPS Document Writer را نادیده میگیرد.
ارسال سند به چاپگرها
برای هر چاپگر باقیمانده، تابع مراحل زیر را اجرا میکند:
StartDocPrinterW برای شروع سند چاپ
StartPagePrinter برای آغاز یک صفحه
WritePrinter برای ارسال یادداشت باجخواهی به چاپگر
با اجرای این مراحل، باجافزار یادداشت خود را مستقیماً روی چاپگرهای فعال سیستم چاپ میکند و از طریق این روش، کاربر بهطور مستقیم از وجود باجافزار مطلع میشود.


LYNX hashes:
INC hashes:
| README.txt | Ransomware Note Name |
|---|---|
| .lynx | Extension |
| Curve25519 | ECC |
| AES_CTR | Encryption |
| background-image.jpg | Background image |
rule MAL_RANSOM_INC_Aug24 {
meta:
author = "X__Junior"
description = "Detects INC ransomware and it's variants like Lynx"
reference1 = "https://x.com/rivitna2/status/1817681737251471471"
reference2 = "https://twitter.com/rivitna2/status/1701739812733014313"
date = "2024-08-08"
hash1 = "eaa0e773eb593b0046452f420b6db8a47178c09e6db0fa68f6a2d42c3f48e3bc" // LYNX
hash2 = "1754c9973bac8260412e5ec34bf5156f5bb157aa797f95ff4fc905439b74357a" // INC
score = 80
strings:
$s1 = "tarting full encryption in" wide
$s2 = "oad hidden drives" wide
$s3 = "ending note to printers" ascii
$s4 = "uccessfully delete shadow copies from %c:/" wide
$op1 = { 33 C9 03 C6 83 C0 02 0F 92 C1 F7 D9 0B C8 51 E8 }
$op2 = { 8B 44 24 [1-4] 6A 00 50 FF 35 ?? ?? ?? ?? 50 FF 15}
$op3 = { 57 50 8D 45 ?? C7 45 ?? 00 00 00 00 50 6A 00 6A 00 6A 02 6A 00 6A 02 C7 45 ?? 00 00 00 00 FF D6 FF 75 ?? E8 ?? ?? ?? ?? 83 C4 04 8B F8 8D 45 ?? 50 8D 45 ?? 50 FF 75 ?? 57 6A 02 6A 00 6A 02 FF D6 }
$op4 = { 6A FF 8D 4? ?? 5? 8D 4? ?? 5? 8D 4? ?? 5? 5? FF 15 ?? ?? ?? ?? 85 C0 }
$op5 = { 56 6A 00 68 01 00 10 00 FF 15 ?? ?? ?? ?? 8B F0 83 FE FF 74 ?? 6A 00 56 FF 15 ?? ?? ?? ?? 68 88 13 00 00 56 FF 15 ?? ?? ?? ?? 56 FF 15}
condition:
uint16(0) == 0x5A4D and
(
3 of ($s*)
or 3 of ($op*)
or (2 of ($s*) and 2 of ($op*) )
)
}
Nextron در مواقعی وارد عمل میشود که اقدامات امنیتی سنتی ممکن است نتوانند تهدیدات را شناسایی کنند. ابزارهای forensics دیجیتال ما تجزیه و تحلیلهای جامع و دقیقی را بر روی سیستمهایی که نشانههای رفتار غیرعادی از خود نشان میدهند، انجام میدهند.
این ابزارها بهخوبی نرمافزارهای مخرب را شناسایی میکنند و تهدیدهایی را که ممکن است توسط روشهای استاندارد نادیده گرفته شوند، آشکار میسازند.
مجموعهٔ امضاهای ما برای تشخیص طیف گستردهای از نگرانیهای امنیتی طراحی شدهاند. این مجموعه شامل امضاهایی برای ابزارهای هکرها، بقایای ابزارها، رفتارهای غیرعادی کاربران، تنظیمات پنهان و حتی نرمافزارهای مشروعی است که ممکن است برای حمله مورد سوءاستفاده قرار گیرند. رویکرد ما بهویژه در شناسایی تاکتیکهای حملات زنجیرهتأمین و کشف ابزارهایی که از سامانههای آنتیویروس و EDR فرار میکنند، مؤثر است.
در صورتی که این مقاله ( ترجمه و تحلیل عمیق باجافزار Lynx Ransomware ) برای شما مفید و آموزنده بود، پیشنهاد میشود برای اطلاع از سایر مقالات مستر لایسنس به صفحه وبلاگ مستر لایسنس مراجعه نمایید.















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