01-18-2012، 01:29 PM
استاکسنت با استفاده از روشهای مختلفی تکثیر میشود. این بدافزار میتواند خود را با استفاده از درایوهای قابل انتقال منتقل نموده، و یا با سوء استفاده از دو آسیبپذیری در سطح شبکه خود را کپی نماید. علاوه بر این، استاکسنت میتواند با استفاده از کپی کردن خود در پروژههای Step7 منتشر شود. با استفاده از این روش، با هر بار اجرای پروژه، استاکسنت اجرا میشود. زیربخشهای زیر این سه روش تکثیر را توضیح میدهد.
· روشهای تکثیر در شبکه
اکسپورت 22 مسئولیت اصلی روشهای انتشار استاکسنت در شبکه را دارا میباشد. این اکسپورت یک کلاس "Network Action" میسازد که شامل 5 زیر کلاس میباشد. هر زیرکلاس مسؤول یکی از روشهای آلودهسازی یک میزبان راه دور میباشد.
عملکرد 5 زیرکلاس مذکور از قرار زیر است:
· ارتباط و بهروزرسانیهای همتا به همتا
· آلودهسازی ماشینهای WinCC با استفاده از گذرواژه کارگزار پایگاه دادههای کد شده
· انتقال با استفاده از بهاشتراکگذاریهای شبکه
· انتقال با استفاده از آسیبپذیری افشاء نشده MS10-061 (Print Spooler)
· انتشار با استفاده از آسیبپذیری افشاء نشده MS08-067 (Windows Server Service)
در ادامه، هر یک از این زیرکلاسها با جزئیات بیشتری تشریح میشود.
· ارتباطات همتا به همتا
مولفه همتا به همتا با استفاده از نصب یک کارگزار و کارفرمای RPCکار میکند. پس از آلودهسازی یک کامپیوتر، این مخاطره کارگزار RPCرا اجرا کرده و ارتباطات گوش میدهد. تمامی کامپیوترهای آلوده شده میتوانند به این کارگزار RPC متصل شده و از نسخه استاکسنت نصب شده روی کامپیوتر راه دور مطلع شوند.
در صورتیکه نسخه راه دور بهروز تر از نسخه نصبشده روی این کامپیوتر باشد، درخواستی مبنی بر دریافت نسخه جدیدتر ارسال شده، و استاکسنت بهروزرسانی میشود. در صورتیکه نسخه کامپیوتر راه دور قدیمیتر باشد، یک کپی از مخاطره آماده شده، و به سیستم راه دور ارسال میشود. با استفاده از این روش، امکان بهروز رسانی تمامی سیستمهای آلوده فراهم شده، و این بهروزرسانی به تدریج در سطح شبکه پخش میشود.
تمامی درخواستهای P2P، بهصورت زیر، با استفاده از RPC انجام میشود:
کارگزار RPCرویههای زیر را در اختیار قرار میدهد. (توجه داشته باشید که استاکسنت از رویههای 7، 8، و 9 استفاده نمیکند.)
· 0: نسخه استاکسنت نصبشده را باز میگرداند.
· 1: یک فایل .exeرا دریافت و اجرا مینماید (با استفاده از تزریق)
· 2: ماجول و اکسپورت اجرا شده را بارگذاری مینماید
· 3: تزریق کد در lsass.exe و اجرای آن
· 4: آخرین نسخه استاکسنت را اجرا کرده، و آن را به کامپیوتر آلوده ارسال مینماید.
· 5: ایجاد پردازه
· 6: خواندن از فایل
· 7 : جاگذاری فایل
· 8: حذف فایل
· 9: نوشتن رکوردهای داده
1]>
شکل 8. مثالی از یک کارگزار قدیمی که نسخه جدید استاکسنت را درخواست مینماید
کارفرمای RPC درخواستهای زیر را ارسال مینماید:
1. تابع 0را بهمنظور دریافت نسخه سیستم راه دور فراخوانی مینماید
2. بررسی میکند که آیا نسخه راهدور بهروز تر از نسخه محلی است
3. در صورتی که نسخه راه دور بهروز تر باشد:
a. تابع 4را بهمنظور درخواست آخرین نسخه استاکسنت فراخوانی مینماید
b. آخرین نسخه را دریافت مینماید
c. با استفاده از تزریق پردازه آن را نصب مینماید
4. در صورتی که نسخه راه دور قدیمیتر باشد
a. یک نسخه مجزای .exe از استاکسنت موجود تهیه میشود
b. این نسخه با استفاده از تابع 1 به سیستم راه دور ارسال میشود
بهمنظور ارتباط با کارگزار RPC راه دور این کلاس از فرآیند زیر استفاده مینماید.
تابع 0 را روی هر کدام از موارد زیر، بهترتیب، فراخوانی میکند. در صورت موفقیت هر یک از فراخوانیها، استاکسنت کار را با استفاده از آن binding ادامه میدهد:
1. ncacn_ip_tcp:IPADDR[135]
2. ncacn_np:IPADDR[\\pipe\\ntsvcs]
3. ncacn_np:IPADDR[\\pipe\\browser]
در ادامه، این مخاطره یک توکن خاص را جعل کرده، و binding زیر را امتحان میکند:
4. ncacn_np:IPADDR[\\pipe\\browser]
سپس به توکن خود رجوع کرده، و در SCM (Service Control Manager) به دنبال bindingهای دیگر میگردد:
5. ncacn_ip_tcp:IPADDR
در صورتی که هر کدام از bindingهای بالا به تابع 0 مربوط به RPCپاسخ مناسب دهد، استاکس نت یک سیستم آلوده را پیدا کرده است. تابع 0 نسخه استاکسنت سیستم آلوده راه دور را باز میگرداند. با توجه به این نسخه، استاکسنت نسخه جدید را از سیستم راه دور دریافت کرده، و یا نسخه خود را به سیستم راه دور ارسال مینماید.
از تابع RPCشماره 1 به منظور دریافت آخرین نسخه از سیستم راه دور، و از تابع شماره 4 به منظور ارسال آخرین نسخه استاکسنت استفاده میشود.
استاکسنت نسخه قابل اجرای دریافت شده را به سادگی اجرا نمیکند. در حقیقت، آن را در یک پردازه تزریق کرده و بهصورتی که در بخش "تکنیک تزریق" بیان شد آن را اجرا مینماید.
علاوه بر این، استاکسنت در حقیقت یک فایل .dll است. در نتیجه، بهمنظور ارسال یک نسخه اجرایی، استاکسنت میباید یک نسخه اجرایی از خود را ایجاد نماید. بدین منظور، استاکسنت در ابتدا یک فایل template.exeرا از منبع 210 خوانده، و آن را با دادههای مورد نیاز بهمنظور ایجاد یک نسخه اجرایی بهروز شده پر میکند.
از آنجا که مکانیزم همتا به همتا با استفاده از RPC کار میکند، نمیتواند به عنوان روشی جایگزین برای فرمان و کنترل استفاده شود، چرا که در یک LANقابل استفاده است. هدف از استفاده از روش همتا به همتا، فراهم آوردن دسترسی به کامپیوترهایی است که دسترسی به اینترنت نداشته، اما قابلیت ارتباط با دیگر کامپیوترهای موجود در شبکه محلی (که به کارگزار C&Cدسترسی دارند) را دارا میباشند.
· آلودهسازی کامپیوترهای WinCC
این کلاس مسؤول ارتباط با کارگزار راه دوری است که نرمافزار WinCCرا اجرا مینماید. در صورت پیدا کردن سیستمی که این نرمافزار را اجرا مینماید، با استفاده از گذرواژهای که در نرمافزار WinCCکد شده، به کارگزار پایگاه دادهها متصل میشود. پس از برقراری ارتباط، دو عمل انجام میشود. در ابتدا، استاکسنت کدهای بدخواه SQL را به پایگاه دادهها ارسال مینماید، که این امر منجر به انتقال نسخهای از استاکسنت به کامپیوتری میشود که WinCC را اجرا مینماید. در ادامه، استاکسنت یکی از دیدهای جاری را تغییر داده، و کدی را به آن اضافه مینماید که در هر بار دسترسی به دید اجرا میشود.
پس از ارسال یک پرسوجوی پیکربندی SQL، استاکسنت یک عبارت SQL را ارسال میکند که جدولی را ایجاد کرده، و یک مقدار باینری را در آن وارد میکند. این مقدار باینری نمایش رشتهای (مبنای 16) DLL اصلی استاکسنت در قالب یک فایل اجرایی است.
CREATE TABLE sysbinlog ( abin image ) INSERT INTO sysbinlog VALUES(0x…)
در صورت موفقیت، استاکسنت با استفاده از OLE Automation Stored Procedures خودش را از پایگاه دادهها روی دیسک، تحت عنوان %UserProfile%\sql[RANDOM VALUE].dbi، مینویسد.
این فایل، در ادامه، بهصورت یک رویه ذخیره شده اضافه شده، و اجرا میشود.
SET @ainf = @aind + ‘\\sql%05x.dbi’
EXEC sp_addextendedproc sp_dumpdbilog, @ainf
EXEC sp_dumpdbilog
این رویه ذخیره شده، حذف شده و فایل DLLاصلی نیز حذف میشود.
در صورتی که استاکسنت بهصورت محلی روی کامپیوتری که شامل WinCC است اجرا شود، یک فایل .cabرا از منبع 203 گرفته و با عنوان GracS\cc_tlg7.savذخیره مینماید. این فایل .cab شامل یک DDL است که DLL اصلی استاکسنت را از GracS\cc_alg.sav بارگذاری مینماید. سپس، یک دید را بهمنظور بارگذاری مجدد خود تغییر میدهد. استاکسنت دید MCPVREADVARPERCONرا به منظور تجزیه فیلد syscommnets.text، برای اجرای کدهای SQL بیشتر، تغییر میدهد. این کد ذخیره شده در syscomments.text بین دو علامت –CC-SP و --*ذخیره میشود.
در حقیقت، استاکسنت کد SQLی را که منجر به اجرای استاکسنت از فایل .cab (با استفاده از xp_cmdshell) میشود، ذخیره و اجرا مینماید.
set @t=left(@t,len(@t)-charindex(‘\\’,reverse(@t)))+’\GraCS\cc_tlg7.sav’;
set @s = ‘master..xp_cmdshell ‘’extrac32 /y “’+@t+’” “’+@t+’x”’’’;
exec(@s);
سپس، DLLباز شده به عنوان یک رویه ذخیره شده اضافه شده، اجرا، و حذف میشود. این امر به استاکسنت اجازه میدهد که خود را اجرا کرده، و اطمینان حاصل نماید که مقیم باقی میماند.
· انتقال با استفاده از بهاشتراکگذاریهای شبکه
استاکسنت همچنین میتواند با استفاده از کارهای برنامهریزی شده[1] و یا WMI [2] در اشتراکگذاریهای شبکه پخش شود.
استاکسنت تمامی حسابهای کاربری کامپیوتر و دامنه، و تمامی منابع شبکه را بررسی میکند.
استاکسنت، بهمنظور ایجاد نام اشتراکی درایو اصلی، بررسی میکند که آیا ADMIN$ دسترسپذیر است. با استفاده از منبع 210، و با استفاده از کد DLLاصلی و اخیرترین دادههای پیکربند، یک فایل اجرایی ایجاد میشود. پس از بررسی تمامی دایرکتوریهای شبکه، این فایل اجرایی بهصورت یک فایل تصادفی در قالب DEFRAG[RANDLNT].tmpکپی میشود. سپس، یک کار شبکه، به منظور اجرای فایل، 2 دقیقه پس از آلودهسازی، برنامهریزی میشود.
· آسیبپذیری افشاء نشده MS10-061 (Print Spooler)
وصله مربوط به آسیبپذیری Print Spooler توسط مایکروسافت در MS10-061 منتشر شده است. اگر چه در ابتدا تصور میشد که این آسیبپذیری محرمانه بوده، ولی بعدا مشخص شد که نسخه 2009-4 مجله Hakin9منتشر شده بوده، و از آن زمان عمومی بوده است. اما استفادهای در سطح گسترده نداشته است.
این آسیبپذیری اجازه میدهد که یک فایل در شاخه %System% ماشین آسیبپذیر نوشته شود. کد انجام این عمل در منبع 222 ذخیره میشود؛ این اکسپورت DLLذخیره شده در منبع مذکور را بارگذاری کرده، و پارامترهای مورد نیاز برای انجام حمله، مثل آدرس IP و یک کپی از کرمواره، را آماده میسازد. در ادامه اکسپورت یک از DLL بارگذاری شده فراخوانی میشود. با استفاده از این اطلاعات، استاکسنت میتواند خود را در شاخه systemکامپیوترهای مقصد کپی کرده، و سپس خود را اجرا نماید.
استاکسنت تنها در صورتی از آسیبپذیری MS10-061 استفاده میکند که تاریخ کنونی سیستم پیش از 1 ژوئن 2011 باشد.
· آسیبپذیری MS08-067 (Windows Server Service)
استاکسنت از آسیبپذیری MS08-067 نیز استفاده میکند. این آسیبپذیری توسط W32.Downadup نیز استفاده شده است. سوء استفاده از این آسیبپذیری با اتصال به SMB و ارسال یک رشته مسیر ساختگی امکانپذیر است. استاکسنت با استفاده از این آسیبپذیری خود را در سیستمهای بهروزرسانی نشده کپی میکند.
استاکسنت، پیش از سوء استفاده از MS08-067، شرایط زیر را بررسی میکند:
· تاریخ کنونی باید پیش از 1 ژانویه 2030 باشد.
· تعاریف آنتیویروسها پیش از 1 ژانویه 2009 باشد.
· تاریخ Kernel32.dll و Netapi.dll پیش از 12 اکتبر 2008 باشد (پیش از تاریخ وصله)
· انتشار از طریقهای درایوهای قابل انتقال
یکی از روشهای اصلی مورد استفاده توسط استاکسنت برای انتشار، کپی خود در درایوهای قابل انتقال است. سیستمهای کنترل صنعتی معمولا با یک کامپیوتر ویندوزی برنامهریزی میشوند، که به شبکه متصل نبوده، و کاربران معمولا دادهها را با استفاده از درایوهای قابل انتقال منتقل مینمایند. استاکسنت از دو روش بهمنظور انتشار به/از درایوهای قابل انتقال استفاده میکند:
1. استفاده از یک آسیبپذیری که با مشاهده یک درایو قابل انتقال، امکان اجرای خودکار را فراهم میآورد.
2. استفاده از یک فایل autorun.inf
· آسیبپذیری LNK (CVE-2010-2568)
استاکسنت خود و فایلهای پشتیبان خود را با ورود یک درایو قابل انتقال کپی مینماید. این عمل با استفاده از اکسپورتهای 1، 9، و 32 پیادهسازی شده است. اکسپورت 19 با استفاده از یک قطعه کد فراخوانی شده، و پس از آن روتین کپی توسط این اکسپورت انجام میشود. اکسپورتهای 1 و 32 منجر میشوند که روتین کپی تا زمان ورود یک درایو منتظر بماند. اکسپورتی که منجر به کپی بدافزار به درایوها میشود، آلودگی روی درایوها را نیز، بر مبنای یک مقدار پیکربندی که در بلوک پیکربندی ذخیره شده، پاک میکند. شرایط مختلفی وجود دارد که باعث میشود فایلهای یک درایو آلوده پاک شوند. به عنوان مثال، پس از اینکه یک درایو آلوده سه کامپیوتر را آلوده کرد، فایلهای درایو آلوده پاک میشوند.
در صورتی که از اکسپورتهای 1 و 32 استفاده شود، استاکسنت بررسی میکند که آیا در services.exe اجرا میشود، و همچنین نسخه ویندوز تعیین میشود. سپس، یک پنجره جدید مخفی با نام ‘AFX64c313’ ایجاد شده که منتظر ورود یک درایو قابل انتقال میشود. در ادامه، بررسی میشود که درایو شامل یک volumeمنطقی است (دارای نوع DBT_DEVTYP_VOLUMEاست). پیش از آلودهسازی این درایو، تاریخ کنونی میباید پیش از 24 ژوئن 2012 باشد.
در ادامه، استاکسنت اسم درایو جدید را مشخص کرده، و با استفاده از دادههای پیکربندی تعیین میکند که خود را پاک کند و یا درایو را آلوده سازد. بهمنظور انجام عمل پاکسازی، فایلهای زیر حذف میشود:
· %DriveLetter%\~WTR4132.tmp
· %DriveLetter%\~WTR4141.tmp
· %DriveLetter%\Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Copy of Copy of Shortcut to .lnk
بهمنظور انجام آلودهسازی، وجود شرایط زیر در درایو مقصد بررسی میشود:
· درایو در این لحظه آلوده نشده باشد که با استفاده از زمان کنونی بررسی میشود.
· پرچم پیکربندی مبنی بر آلودهسازی درایوهای قابل انتقال مقداردهی شده باشد، در غیر اینصورت آلودهسازی بر مبنای تاریخ انجام میشود.
· آلودگی بیش از 21 روز قدیمی نباشد
· درایو مقصد حداقل 5 مگابایت جای خالی داشته باشد
· درایو مقصد حداقل شامل 3 فایل باشد
در صورتیکه این شرایط برقرار باشد، فایلهای زیر ایجاد میشود:
· %DriveLetter%\~WTR4132.tmp (~500Kb) (این فایل DLL اصلی استاکسنت را در بخش stub در بر دارد و از منبع 210 بهدست میآید)
· %DriveLetter%\~WTR4141.tmp (~25Kb) (این فایل ~WTR4141.tmp را فراخوانی کرده و با استفاده از منبع 241 بهدست میآید)
· %DriveLetter%\Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Copy of Copy of Shortcut to .lnk
فایلهای .lnkبا استفاده از منبع 240 ایجاد میشوند. از آنجا که هر یک از آنها یک (یا بیشتر) نسخه مختلف از ویندوز (شامل Windows 2000، Windows Server 2003، Windows XP، Windows Vista، و Windows 7) را هدف قرار میدهد، به حداقل 4تا از آنها نیاز داریم. فایلهای .lnkشامل اکسپلویتی است که بهصورت خودکار ~WTR4141.tmp را، در صورت مشاهده پوشه، اجرا مینماید.
~WTR4141.tmp سپس ~WTR4132.tmp را بارگذاری میکند، اما پیش از این، فایلهای خود روی درایو مقصد را مخفی مینماید. از آنجا که کارکرد روتکیت این بدافزار هنوز فعال نشده، مخفیسازی در زودترین زمان ممکن، از اهمیت بالایی برخوردار است. در نتیجه، ~WTR4141.tmp تکنیک خاص خودش را در این زمان پیادهسازی مینماید.
~WTR4141.tmpاز APIهای زیر (مربوط به kernel32.dll و Ntdll.dll) استفاده میکند:
از Kernel32.dll:
· FindFirstFileW
· FindNextFileW
· FindFirstFileExW
از Ntdll.dll:
· NtQueryDirectoryFile
· ZwQueryDirectoryFile
این بدافزار کد اصلی این توابع را با کدی که بهدنبال فایلهایی با خواص زیر میگردد جایگزین مینماید:
· فایلهایی با پسوند .lnk که سایزی معادل 4،171 بایت دارند.
· فایلهایی با نام ~WTRxxxx.TMP، که سایز آنها بین 4kb و 8MBاست. منظور از xxxx:
o اعداد 4 رقمی
o مجموع این اعداد بر 10 بخشپذیر است
در صورتی که در خواستی مبنی بر نمایش یک فایل با مشخصات بالا ارسال شد، پاسخ این APIها بهگونهای تغییر مییابد که بیانگر این مطلب باشد که فایل وجود ندارد. در نتیجه، تمامی فایلها با این ویژگی مخفی میشوند.
پس از استفاده از APIها، ~WTR4132.tmp بارگذاری میشود. بهمنظور بارگذاری یک فایل .dllبهصورت عادی، یک برنامه، API "Load Library" را با نام فایل .dllی که باید در حافظه بارگذاری شود، فراخوانی مینماید. استاکسنت از روش دیگری، که در بخش "عبور از بلوکهسازی مبتنی بر رفتار هنگام بارگذاری DLLها" توضیح داده میشود استفاده مینماید.
~WTR4132.tmp شامل DLL اصلی استاکسنت در بخش .stubاست. این فایل در حافظه بازگشایی شده، و اکسپورت 15 DLL فراخوانی میشود که نصب استاکسنت را انجام میدهد. اکسپورت 15 در بخش نصب توضیح داده میشود.
شکل 9جریان اجرا را نمایش میدهد.
1]> <
شکل 9. جریان اجرا روی درایوهای قابل انتقال
· Autorun.inf
نسخههای قبلی استاکسنت از آسیبپذیری LNK استفاده نمیکردند، بلکه با استفاده از یک فایل autorun.infپخش میشدند. منبع 207 یک فایل 500 کیلوبایتی است که در نسخههای قبلی استاکسنت وجود داشته، ولی در نسخه جدید حذف شده است.
یک فایل autorun.inf یک فایل پیکربندی است که روی درایوهای قابل انتقال قرار داده شده، و با وارد کردن درایو، منجر به اجرای فایلهای دلخواه میشود. معمولاً، فایل autorun.inf و فایل اجرایی در ریشه درایو قرار داده میشود. اما استاکسنت از یک فایل استفاده مینماید. منبع 207 یک فایل اجرایی است که در انتهای آن یک فایل autorun.infبا قالب مشخص قرار دارد.
هنگام تجزیه فایلهای autorun.inf توسط ویندوز، از کاراکترهایی که بهعنوان دستورات مجاز شناخته نمیشوند، چشمپوشی میشود. استاکسنت از این نقصان به نفع خود استفاده نموده، و فایل MZ را در ابتدای فایل autorun.inf قرار میدهد. در روند تجزیه، از تمامی فایل MZ چشمپوشی میشود. سرآیند و پیآیند فایل autorun.infرا در ادامه مشاهده مینمایید:
1]> <
شکل 10. سرآیند autorun.inf
1]> <
شکل 11. پیآیند autorun.inf
اگر تنها رشتههای پیآیند را در نظر بگیریم، میبینیم که از دستورات مجازی تشکیل شدهاند:
1]> <
شکل 12. دستورات مجاز در پیآیند فایل autorun.inf
توجه داشته باشید که استاکسنت از دستورات autorun بهمنظور مشخص کردن فایل اجرایی به عنوان فایل اصلی autorun.inf استفاده مینماید. با استفاده از این روش، فایل autorun.inf، در ابتدا، بهعنوان یک فایل مجاز، و در ادامه بهعنوان یک فایل اجرایی شناخته میشود.
علاوه بر این، استاکسنت از یک روش دیگر نیز بهمنظور بالا بردن احتمال اجرای خود استفاده مینماید. دستورات اتوران، اجرای خودکار را غیر فعال ساخته، و دستور جدیدی را به منو اضافه میکنند. دستور جدید را میتوان در %Windir%\System32\shell32.dll,-8496 مشاهده نمود. در حقیقت این دستور همان "Open" است. در نتیجه، دو دستور Openدر منو مشاهده میشود.
1]> <
شکل 13. اضافه شدن یک دستور Open جدید
یکی از این دستورات Open دستور مجاز و دیگری غیرمجاز است. اگر کاربر درایو مورد نظر را با این دستور باز کند، پیش از بازگشایی، استاکسنت اجرا میشود و در ادامه درایو مورد نظر باز میشود.
· آلودهسازی فایلهای پروژه Step7
اکسپورت اصلی، اکسپورت 16، اکسپورت 2 را فراخوانی مینماید، که از APIهای خاص بهمنظور باز کردن فایلهای پروژه در پردازه s7tgtopx.exe استفاده مینماید. این پردازه، مدیر WinCC Simatic بوده، و از آن بهمنظور مدیریت پروژه WinCC/Step7استفاده میشود.
جداول آدرس مربوط به DLLهای زیر تغییر داده میشود:
· در dllهای s7apromx.dll، mfc42.dll، و msvcrt.dll، آدرس CreateFileA بهگونهای تغییر مییابد که به "CreateFileA_hook" اشاره نماید.
· در ccprojectmgr.exe، StgOpenStorageبهگونهای تغییر مییابد که به "StgOpenStorage_hookاشاره نماید.
از CreateFileA بهمنظور بازکردن پروژههای *.S7P (فایلهای پروژه Step7) استفاده میشود. در عوض، CreateFileA_hook فراخوانی میشود. در صورتیکه پسوند فایل بازگشایی شده .s7p باشد، CreateFileA_hook تابع شماره 9 RPC را فراخوانی میکند، که مسیر کنونی را در فایل دادهای رمزشده %Windir%\inf\oem6c.pnfذخیره نموده، و پوشهای که این فایل در آن قرار دارد را آلوده میسازد.
مدیر Simatic از StgOprnStorage بهمنظور باز کردن فایلهای .MCPاستفاده مینماید. این فایلها در پروژههای Step7 وجود دارد. همانند CreateFileA، StgOpenStorage_hookبر فایلهایی با پسوند .mcpنظارت دارد. در صورت دسترسی به چنین فایلی، تابع شماره 9 RPC بهمنظور ذخیرهسازی مسیر oem6c.pnfفراخوانی شده، و پوشه پروژهای که فایل mcp در آن قرار دارد فراخوانی میشود.
اکسپورت 14 روتین اصلی آلودهسازی فایلهای پروژه Step7است.
روتین آلودهسازی پروژه مسیر یک پروژه را بهعنوان ورودی دریافت کرده، و با اجرای استاکسنت هنگام بارگذاری پروژه، آن را آلوده میسازد.
فایلهای داخل پروژه لیست میشود. پردازش ویژهای روی فایلها با پسوند .tmp، .s7p، یا .mcp انجام میشود.
· فایلهای S7P
فایلهایی با این پسوند، فایلهای پروژه Step7 هستند. در صورتی که چنین فایلی در پوشه پروژه قرار داشته باشد، پروژه ممکن است آلوده باشد.
پروژه میتواند آلوده شود، در صورتیکه:
· بیش از حد قدیمی نباشد (در 3.5 سال گذشته استفاده شده باشد)
· شامل پوشهای با نام "wincproj" با یک فایل MCPمجاز باشد
· یک پروژه Step7 نمونه نباشد. این امر با حذف مسیرهای "*\Step7\Examples" انجام میشود.
رویه آلودهسازی شامل گامهای متفاوت مختلفی است:
1. استاکسنت فایلهای زیر را ایجاد مینماید:
a. xutils\listen\xr000000.mdx (یک کپی رمزشده از DLL استاکسنت اصلی)
b. xutils\links\s7p00001.dbf (یک نسخه از فایل دادهای استاکسنت که طولی معادل 90 بایت دارد)
c. xutils\listen\s7000001.mdx (یک نسخه رمزشده و بهروزشده از بلوک دادههای پیکربندی استاکسنت)
2. این مخاطره زیرپوشههای "hOmSave7" را بررسی مینماید. استاکسنت در هر یک از آنها یک کپی از DLLی که در منبع 202 وجود دارد را کپی مینماید. این DLLبا استفاده از نام فایل خاص کپی میشود.
3. استاکسنت فایل دادهای Step7را که در Apilog\types قرار دارد تغییر میدهد.
پس از اینکه یک پروژه آلوده شده باز شد، فایل دادهای تغییر یافته به دنبال نام فایلی که برای کپی DLL از آن استفاده شد میگردد. پوشههای زیر به ترتیبی که در ادامه میآید جستجو میشوند:
· پوشه S7BINاز پوشه نصب Step7
· پوشه %System%
· پوشه %Windir%\system
· پوشه %Windir%
· زیرپوشههای پوشه hOmSave7
در صورتیکه فایل مذکور در هیچیک از 4 پوشه بالا پیدا نشد، DLLبدخواه توسط مدیر بارگذاری و اجرا میشود. این فایل .dll بهعنوان رمزگشا و بارگذار کپی dllاصلی که در xutils\listen\xr000000.mdx قرار دارد عمل مینماید. این استراتژی مشابه حملات DLL Preloading است.
نسخههای 5.3 و 5.4 (بسته خدماتی 4) قابلیت آلودهشدن را دارا میباشند. اما از آسیبپذیر بودن نسخههای اخیر مدیر (v5.4 SP5 و v5.5) اطلاعی در دست نیست.
· فایلهای MCP
مشابه فایلهای .s7p، فایلهای .mcp نیز در پوشه پروژه Step7 وجود دارند. اما، بهصورت معمول توسط WinCCایجاد میشوند. پیدا کردن چنین فایلی در یک پروژه میتواند, علاوه بر آلوده بودن پایگاه دادههای WinCC، آلوده بودن پروژه را نیز القاء نماید.
پروژه میتواند آلوده باشد اگر:
· بیش از حد قدیمی نباشد (در 3.5 سال اخیر دسترسی به آن انجام شده باشد)
· شامل یک پوشه GracS با حداقل یک فایل .pdl باشد
روند آلودهسازی شامل گامهای مختلفی خواهد بود:
1. استاکسنت فایلهای زیر را ایجاد مینماید:
a. GracS\cc_alg.sav (یک نسخه رمزشده از DLL استاکسنت اصلی)
b. GracS\db_log.sav (یک کپی از فایل دادهای استاکسنت به طول 90 بایت)
c. GracS\cc_alg.sav xutils\listen\s7000001.mdx (یک نسخه رمز شده و بهروز شده از بلوک داده پیکربندی استاکسنت)
2. سپس یک نسخه از منبع 203 رمزگشایی شده و در GracS\cc_tlg7.savقرار داده میشود. این فایل یک فایل Cabinet ویندوز است که بهمنظور بارگذاری و اجرای استاکسنت از آن استفاده میشود.
در فرآیند آلودهسازی، پایگاه دادههای WinCCممکن است مورد دسترسی قرار گرفته، و آلودگی به ماشین کارگزار پایگاه دادههای WinCC منتقل شود. این رویه در بخش "پخش در شبکه" تشریح خواهد شد.
· فایلهای TMP
بهازای هر فایل .tmp که در پروژه وجود دارد، نام فایل در ابتدا بررسی میشود. قالب این نام باید بهصورت ~WRxxxxx.tmpباشد که "xxxxx" اعدادی در مبنای 16 هستند که مجموع آنها بر 16 بخشپذیر است. بهعنوان مثال، ~WR12346 نامی مجاز است.
در ادامه محتویات فایل بررسی میشود. 8 بایت اولیه باید شامل رشته "LRW~LRW~" باشد. در اینصورت، مابقی داده رمزگذاری میشود.
استاکسنت میتواند با استفاده از پروژههای آلوده شده خود را بهروزرسانی نماید. در صورتی که یک پروژه باز شده و آلوده باشد، استاکسنت نسخه آلودگی را بررسی کرده، و در صورتیکه این نسخه جدیدتر باشد، آن را بهمنظور بهروزرسانی خود اجرا مینماید.
سه فرم متفاوت از فایلهای پروژه آلوده وجود دارد که هر کدام توسط یک اکسپورت خاص مدیریت میشود.
اکسپورت 9 مسیر یک پروژه Step7 را بهعنوان ورودی میگیرد. در ادامه مسیرهای مربوط به فایلهای زیر درون پروژه ایجاد میشود:
· …\XUTILS\listen\XR000000.MDX
· …\XUTILS\links\S7P00001.DBF
· …\XUTILS\listen\S7000001.MDX
این فایلها به فایلهای موقت (%Temp%\~dfXXXX.tmp) اضافه شده، و اکسپورت 16، نقطه ورود اصلی در این نسخه بهروزتر استاکسنت، اجرا میشود.
اکسپورت 31 یک مسیر پروژه Step7 را بهعنوان وروی گرفته، و مسیرهای مربوط به فایلهای استاکسنت زیر که در پروژه قرار دارند را ایجاد مینماید:
· …\GracS\cc_alg.sav
· …\GracS\db_log.sav
· …\GracS\cc_tag.sav
· این فایلها به فایلهای موقت (%Temp%\~dfXXXX.tmp) اضافه شده، و اکسپورت 16، نقطه ورود اصلی در این نسخه بهروزتر استاکسنت، اجرا میشود.
اکسپورت 10 مشابه اکسپورتهای 9 و 31 میباشد. این اکسپورت میتواند پوشههای Step7 را پردازش کرده، و فایلهای استاکسنتی که در زیرپوشههای Gracs\ و Xutils\ قرار دارند را استخراج نماید. حتی ممکن است آرشیوهای .Zip نیز مورد پردازش قرار گیرند.
از اکسپورت 16 بهمنظور اجرای نسخه استخراجشده از استاکسنت استفاده شده، و بلوک دادههای پیکربندی بهروز میشود.
منبع : مركز آپا دانشگاه شریف،
· روشهای تکثیر در شبکه
اکسپورت 22 مسئولیت اصلی روشهای انتشار استاکسنت در شبکه را دارا میباشد. این اکسپورت یک کلاس "Network Action" میسازد که شامل 5 زیر کلاس میباشد. هر زیرکلاس مسؤول یکی از روشهای آلودهسازی یک میزبان راه دور میباشد.
عملکرد 5 زیرکلاس مذکور از قرار زیر است:
· ارتباط و بهروزرسانیهای همتا به همتا
· آلودهسازی ماشینهای WinCC با استفاده از گذرواژه کارگزار پایگاه دادههای کد شده
· انتقال با استفاده از بهاشتراکگذاریهای شبکه
· انتقال با استفاده از آسیبپذیری افشاء نشده MS10-061 (Print Spooler)
· انتشار با استفاده از آسیبپذیری افشاء نشده MS08-067 (Windows Server Service)
در ادامه، هر یک از این زیرکلاسها با جزئیات بیشتری تشریح میشود.
· ارتباطات همتا به همتا
مولفه همتا به همتا با استفاده از نصب یک کارگزار و کارفرمای RPCکار میکند. پس از آلودهسازی یک کامپیوتر، این مخاطره کارگزار RPCرا اجرا کرده و ارتباطات گوش میدهد. تمامی کامپیوترهای آلوده شده میتوانند به این کارگزار RPC متصل شده و از نسخه استاکسنت نصب شده روی کامپیوتر راه دور مطلع شوند.
در صورتیکه نسخه راه دور بهروز تر از نسخه نصبشده روی این کامپیوتر باشد، درخواستی مبنی بر دریافت نسخه جدیدتر ارسال شده، و استاکسنت بهروزرسانی میشود. در صورتیکه نسخه کامپیوتر راه دور قدیمیتر باشد، یک کپی از مخاطره آماده شده، و به سیستم راه دور ارسال میشود. با استفاده از این روش، امکان بهروز رسانی تمامی سیستمهای آلوده فراهم شده، و این بهروزرسانی به تدریج در سطح شبکه پخش میشود.
تمامی درخواستهای P2P، بهصورت زیر، با استفاده از RPC انجام میشود:
کارگزار RPCرویههای زیر را در اختیار قرار میدهد. (توجه داشته باشید که استاکسنت از رویههای 7، 8، و 9 استفاده نمیکند.)
· 0: نسخه استاکسنت نصبشده را باز میگرداند.
· 1: یک فایل .exeرا دریافت و اجرا مینماید (با استفاده از تزریق)
· 2: ماجول و اکسپورت اجرا شده را بارگذاری مینماید
· 3: تزریق کد در lsass.exe و اجرای آن
· 4: آخرین نسخه استاکسنت را اجرا کرده، و آن را به کامپیوتر آلوده ارسال مینماید.
· 5: ایجاد پردازه
· 6: خواندن از فایل
· 7 : جاگذاری فایل
· 8: حذف فایل
· 9: نوشتن رکوردهای داده
1]>
شکل 8. مثالی از یک کارگزار قدیمی که نسخه جدید استاکسنت را درخواست مینماید
کارفرمای RPC درخواستهای زیر را ارسال مینماید:
1. تابع 0را بهمنظور دریافت نسخه سیستم راه دور فراخوانی مینماید
2. بررسی میکند که آیا نسخه راهدور بهروز تر از نسخه محلی است
3. در صورتی که نسخه راه دور بهروز تر باشد:
a. تابع 4را بهمنظور درخواست آخرین نسخه استاکسنت فراخوانی مینماید
b. آخرین نسخه را دریافت مینماید
c. با استفاده از تزریق پردازه آن را نصب مینماید
4. در صورتی که نسخه راه دور قدیمیتر باشد
a. یک نسخه مجزای .exe از استاکسنت موجود تهیه میشود
b. این نسخه با استفاده از تابع 1 به سیستم راه دور ارسال میشود
بهمنظور ارتباط با کارگزار RPC راه دور این کلاس از فرآیند زیر استفاده مینماید.
تابع 0 را روی هر کدام از موارد زیر، بهترتیب، فراخوانی میکند. در صورت موفقیت هر یک از فراخوانیها، استاکسنت کار را با استفاده از آن binding ادامه میدهد:
1. ncacn_ip_tcp:IPADDR[135]
2. ncacn_np:IPADDR[\\pipe\\ntsvcs]
3. ncacn_np:IPADDR[\\pipe\\browser]
در ادامه، این مخاطره یک توکن خاص را جعل کرده، و binding زیر را امتحان میکند:
4. ncacn_np:IPADDR[\\pipe\\browser]
سپس به توکن خود رجوع کرده، و در SCM (Service Control Manager) به دنبال bindingهای دیگر میگردد:
5. ncacn_ip_tcp:IPADDR
در صورتی که هر کدام از bindingهای بالا به تابع 0 مربوط به RPCپاسخ مناسب دهد، استاکس نت یک سیستم آلوده را پیدا کرده است. تابع 0 نسخه استاکسنت سیستم آلوده راه دور را باز میگرداند. با توجه به این نسخه، استاکسنت نسخه جدید را از سیستم راه دور دریافت کرده، و یا نسخه خود را به سیستم راه دور ارسال مینماید.
از تابع RPCشماره 1 به منظور دریافت آخرین نسخه از سیستم راه دور، و از تابع شماره 4 به منظور ارسال آخرین نسخه استاکسنت استفاده میشود.
استاکسنت نسخه قابل اجرای دریافت شده را به سادگی اجرا نمیکند. در حقیقت، آن را در یک پردازه تزریق کرده و بهصورتی که در بخش "تکنیک تزریق" بیان شد آن را اجرا مینماید.
علاوه بر این، استاکسنت در حقیقت یک فایل .dll است. در نتیجه، بهمنظور ارسال یک نسخه اجرایی، استاکسنت میباید یک نسخه اجرایی از خود را ایجاد نماید. بدین منظور، استاکسنت در ابتدا یک فایل template.exeرا از منبع 210 خوانده، و آن را با دادههای مورد نیاز بهمنظور ایجاد یک نسخه اجرایی بهروز شده پر میکند.
از آنجا که مکانیزم همتا به همتا با استفاده از RPC کار میکند، نمیتواند به عنوان روشی جایگزین برای فرمان و کنترل استفاده شود، چرا که در یک LANقابل استفاده است. هدف از استفاده از روش همتا به همتا، فراهم آوردن دسترسی به کامپیوترهایی است که دسترسی به اینترنت نداشته، اما قابلیت ارتباط با دیگر کامپیوترهای موجود در شبکه محلی (که به کارگزار C&Cدسترسی دارند) را دارا میباشند.
· آلودهسازی کامپیوترهای WinCC
این کلاس مسؤول ارتباط با کارگزار راه دوری است که نرمافزار WinCCرا اجرا مینماید. در صورت پیدا کردن سیستمی که این نرمافزار را اجرا مینماید، با استفاده از گذرواژهای که در نرمافزار WinCCکد شده، به کارگزار پایگاه دادهها متصل میشود. پس از برقراری ارتباط، دو عمل انجام میشود. در ابتدا، استاکسنت کدهای بدخواه SQL را به پایگاه دادهها ارسال مینماید، که این امر منجر به انتقال نسخهای از استاکسنت به کامپیوتری میشود که WinCC را اجرا مینماید. در ادامه، استاکسنت یکی از دیدهای جاری را تغییر داده، و کدی را به آن اضافه مینماید که در هر بار دسترسی به دید اجرا میشود.
پس از ارسال یک پرسوجوی پیکربندی SQL، استاکسنت یک عبارت SQL را ارسال میکند که جدولی را ایجاد کرده، و یک مقدار باینری را در آن وارد میکند. این مقدار باینری نمایش رشتهای (مبنای 16) DLL اصلی استاکسنت در قالب یک فایل اجرایی است.
CREATE TABLE sysbinlog ( abin image ) INSERT INTO sysbinlog VALUES(0x…)
در صورت موفقیت، استاکسنت با استفاده از OLE Automation Stored Procedures خودش را از پایگاه دادهها روی دیسک، تحت عنوان %UserProfile%\sql[RANDOM VALUE].dbi، مینویسد.
این فایل، در ادامه، بهصورت یک رویه ذخیره شده اضافه شده، و اجرا میشود.
SET @ainf = @aind + ‘\\sql%05x.dbi’
EXEC sp_addextendedproc sp_dumpdbilog, @ainf
EXEC sp_dumpdbilog
این رویه ذخیره شده، حذف شده و فایل DLLاصلی نیز حذف میشود.
در صورتی که استاکسنت بهصورت محلی روی کامپیوتری که شامل WinCC است اجرا شود، یک فایل .cabرا از منبع 203 گرفته و با عنوان GracS\cc_tlg7.savذخیره مینماید. این فایل .cab شامل یک DDL است که DLL اصلی استاکسنت را از GracS\cc_alg.sav بارگذاری مینماید. سپس، یک دید را بهمنظور بارگذاری مجدد خود تغییر میدهد. استاکسنت دید MCPVREADVARPERCONرا به منظور تجزیه فیلد syscommnets.text، برای اجرای کدهای SQL بیشتر، تغییر میدهد. این کد ذخیره شده در syscomments.text بین دو علامت –CC-SP و --*ذخیره میشود.
در حقیقت، استاکسنت کد SQLی را که منجر به اجرای استاکسنت از فایل .cab (با استفاده از xp_cmdshell) میشود، ذخیره و اجرا مینماید.
set @t=left(@t,len(@t)-charindex(‘\\’,reverse(@t)))+’\GraCS\cc_tlg7.sav’;
set @s = ‘master..xp_cmdshell ‘’extrac32 /y “’+@t+’” “’+@t+’x”’’’;
exec(@s);
سپس، DLLباز شده به عنوان یک رویه ذخیره شده اضافه شده، اجرا، و حذف میشود. این امر به استاکسنت اجازه میدهد که خود را اجرا کرده، و اطمینان حاصل نماید که مقیم باقی میماند.
· انتقال با استفاده از بهاشتراکگذاریهای شبکه
استاکسنت همچنین میتواند با استفاده از کارهای برنامهریزی شده[1] و یا WMI [2] در اشتراکگذاریهای شبکه پخش شود.
استاکسنت تمامی حسابهای کاربری کامپیوتر و دامنه، و تمامی منابع شبکه را بررسی میکند.
استاکسنت، بهمنظور ایجاد نام اشتراکی درایو اصلی، بررسی میکند که آیا ADMIN$ دسترسپذیر است. با استفاده از منبع 210، و با استفاده از کد DLLاصلی و اخیرترین دادههای پیکربند، یک فایل اجرایی ایجاد میشود. پس از بررسی تمامی دایرکتوریهای شبکه، این فایل اجرایی بهصورت یک فایل تصادفی در قالب DEFRAG[RANDLNT].tmpکپی میشود. سپس، یک کار شبکه، به منظور اجرای فایل، 2 دقیقه پس از آلودهسازی، برنامهریزی میشود.
· آسیبپذیری افشاء نشده MS10-061 (Print Spooler)
وصله مربوط به آسیبپذیری Print Spooler توسط مایکروسافت در MS10-061 منتشر شده است. اگر چه در ابتدا تصور میشد که این آسیبپذیری محرمانه بوده، ولی بعدا مشخص شد که نسخه 2009-4 مجله Hakin9منتشر شده بوده، و از آن زمان عمومی بوده است. اما استفادهای در سطح گسترده نداشته است.
این آسیبپذیری اجازه میدهد که یک فایل در شاخه %System% ماشین آسیبپذیر نوشته شود. کد انجام این عمل در منبع 222 ذخیره میشود؛ این اکسپورت DLLذخیره شده در منبع مذکور را بارگذاری کرده، و پارامترهای مورد نیاز برای انجام حمله، مثل آدرس IP و یک کپی از کرمواره، را آماده میسازد. در ادامه اکسپورت یک از DLL بارگذاری شده فراخوانی میشود. با استفاده از این اطلاعات، استاکسنت میتواند خود را در شاخه systemکامپیوترهای مقصد کپی کرده، و سپس خود را اجرا نماید.
استاکسنت تنها در صورتی از آسیبپذیری MS10-061 استفاده میکند که تاریخ کنونی سیستم پیش از 1 ژوئن 2011 باشد.
· آسیبپذیری MS08-067 (Windows Server Service)
استاکسنت از آسیبپذیری MS08-067 نیز استفاده میکند. این آسیبپذیری توسط W32.Downadup نیز استفاده شده است. سوء استفاده از این آسیبپذیری با اتصال به SMB و ارسال یک رشته مسیر ساختگی امکانپذیر است. استاکسنت با استفاده از این آسیبپذیری خود را در سیستمهای بهروزرسانی نشده کپی میکند.
استاکسنت، پیش از سوء استفاده از MS08-067، شرایط زیر را بررسی میکند:
· تاریخ کنونی باید پیش از 1 ژانویه 2030 باشد.
· تعاریف آنتیویروسها پیش از 1 ژانویه 2009 باشد.
· تاریخ Kernel32.dll و Netapi.dll پیش از 12 اکتبر 2008 باشد (پیش از تاریخ وصله)
· انتشار از طریقهای درایوهای قابل انتقال
یکی از روشهای اصلی مورد استفاده توسط استاکسنت برای انتشار، کپی خود در درایوهای قابل انتقال است. سیستمهای کنترل صنعتی معمولا با یک کامپیوتر ویندوزی برنامهریزی میشوند، که به شبکه متصل نبوده، و کاربران معمولا دادهها را با استفاده از درایوهای قابل انتقال منتقل مینمایند. استاکسنت از دو روش بهمنظور انتشار به/از درایوهای قابل انتقال استفاده میکند:
1. استفاده از یک آسیبپذیری که با مشاهده یک درایو قابل انتقال، امکان اجرای خودکار را فراهم میآورد.
2. استفاده از یک فایل autorun.inf
· آسیبپذیری LNK (CVE-2010-2568)
استاکسنت خود و فایلهای پشتیبان خود را با ورود یک درایو قابل انتقال کپی مینماید. این عمل با استفاده از اکسپورتهای 1، 9، و 32 پیادهسازی شده است. اکسپورت 19 با استفاده از یک قطعه کد فراخوانی شده، و پس از آن روتین کپی توسط این اکسپورت انجام میشود. اکسپورتهای 1 و 32 منجر میشوند که روتین کپی تا زمان ورود یک درایو منتظر بماند. اکسپورتی که منجر به کپی بدافزار به درایوها میشود، آلودگی روی درایوها را نیز، بر مبنای یک مقدار پیکربندی که در بلوک پیکربندی ذخیره شده، پاک میکند. شرایط مختلفی وجود دارد که باعث میشود فایلهای یک درایو آلوده پاک شوند. به عنوان مثال، پس از اینکه یک درایو آلوده سه کامپیوتر را آلوده کرد، فایلهای درایو آلوده پاک میشوند.
در صورتی که از اکسپورتهای 1 و 32 استفاده شود، استاکسنت بررسی میکند که آیا در services.exe اجرا میشود، و همچنین نسخه ویندوز تعیین میشود. سپس، یک پنجره جدید مخفی با نام ‘AFX64c313’ ایجاد شده که منتظر ورود یک درایو قابل انتقال میشود. در ادامه، بررسی میشود که درایو شامل یک volumeمنطقی است (دارای نوع DBT_DEVTYP_VOLUMEاست). پیش از آلودهسازی این درایو، تاریخ کنونی میباید پیش از 24 ژوئن 2012 باشد.
در ادامه، استاکسنت اسم درایو جدید را مشخص کرده، و با استفاده از دادههای پیکربندی تعیین میکند که خود را پاک کند و یا درایو را آلوده سازد. بهمنظور انجام عمل پاکسازی، فایلهای زیر حذف میشود:
· %DriveLetter%\~WTR4132.tmp
· %DriveLetter%\~WTR4141.tmp
· %DriveLetter%\Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Copy of Copy of Shortcut to .lnk
بهمنظور انجام آلودهسازی، وجود شرایط زیر در درایو مقصد بررسی میشود:
· درایو در این لحظه آلوده نشده باشد که با استفاده از زمان کنونی بررسی میشود.
· پرچم پیکربندی مبنی بر آلودهسازی درایوهای قابل انتقال مقداردهی شده باشد، در غیر اینصورت آلودهسازی بر مبنای تاریخ انجام میشود.
· آلودگی بیش از 21 روز قدیمی نباشد
· درایو مقصد حداقل 5 مگابایت جای خالی داشته باشد
· درایو مقصد حداقل شامل 3 فایل باشد
در صورتیکه این شرایط برقرار باشد، فایلهای زیر ایجاد میشود:
· %DriveLetter%\~WTR4132.tmp (~500Kb) (این فایل DLL اصلی استاکسنت را در بخش stub در بر دارد و از منبع 210 بهدست میآید)
· %DriveLetter%\~WTR4141.tmp (~25Kb) (این فایل ~WTR4141.tmp را فراخوانی کرده و با استفاده از منبع 241 بهدست میآید)
· %DriveLetter%\Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Copy of Shortcut to .lnk
· %DriveLetter%\Copy of Copy of Copy of Copy of Shortcut to .lnk
فایلهای .lnkبا استفاده از منبع 240 ایجاد میشوند. از آنجا که هر یک از آنها یک (یا بیشتر) نسخه مختلف از ویندوز (شامل Windows 2000، Windows Server 2003، Windows XP، Windows Vista، و Windows 7) را هدف قرار میدهد، به حداقل 4تا از آنها نیاز داریم. فایلهای .lnkشامل اکسپلویتی است که بهصورت خودکار ~WTR4141.tmp را، در صورت مشاهده پوشه، اجرا مینماید.
~WTR4141.tmp سپس ~WTR4132.tmp را بارگذاری میکند، اما پیش از این، فایلهای خود روی درایو مقصد را مخفی مینماید. از آنجا که کارکرد روتکیت این بدافزار هنوز فعال نشده، مخفیسازی در زودترین زمان ممکن، از اهمیت بالایی برخوردار است. در نتیجه، ~WTR4141.tmp تکنیک خاص خودش را در این زمان پیادهسازی مینماید.
~WTR4141.tmpاز APIهای زیر (مربوط به kernel32.dll و Ntdll.dll) استفاده میکند:
از Kernel32.dll:
· FindFirstFileW
· FindNextFileW
· FindFirstFileExW
از Ntdll.dll:
· NtQueryDirectoryFile
· ZwQueryDirectoryFile
این بدافزار کد اصلی این توابع را با کدی که بهدنبال فایلهایی با خواص زیر میگردد جایگزین مینماید:
· فایلهایی با پسوند .lnk که سایزی معادل 4،171 بایت دارند.
· فایلهایی با نام ~WTRxxxx.TMP، که سایز آنها بین 4kb و 8MBاست. منظور از xxxx:
o اعداد 4 رقمی
o مجموع این اعداد بر 10 بخشپذیر است
در صورتی که در خواستی مبنی بر نمایش یک فایل با مشخصات بالا ارسال شد، پاسخ این APIها بهگونهای تغییر مییابد که بیانگر این مطلب باشد که فایل وجود ندارد. در نتیجه، تمامی فایلها با این ویژگی مخفی میشوند.
پس از استفاده از APIها، ~WTR4132.tmp بارگذاری میشود. بهمنظور بارگذاری یک فایل .dllبهصورت عادی، یک برنامه، API "Load Library" را با نام فایل .dllی که باید در حافظه بارگذاری شود، فراخوانی مینماید. استاکسنت از روش دیگری، که در بخش "عبور از بلوکهسازی مبتنی بر رفتار هنگام بارگذاری DLLها" توضیح داده میشود استفاده مینماید.
~WTR4132.tmp شامل DLL اصلی استاکسنت در بخش .stubاست. این فایل در حافظه بازگشایی شده، و اکسپورت 15 DLL فراخوانی میشود که نصب استاکسنت را انجام میدهد. اکسپورت 15 در بخش نصب توضیح داده میشود.
شکل 9جریان اجرا را نمایش میدهد.
1]> <
شکل 9. جریان اجرا روی درایوهای قابل انتقال
· Autorun.inf
نسخههای قبلی استاکسنت از آسیبپذیری LNK استفاده نمیکردند، بلکه با استفاده از یک فایل autorun.infپخش میشدند. منبع 207 یک فایل 500 کیلوبایتی است که در نسخههای قبلی استاکسنت وجود داشته، ولی در نسخه جدید حذف شده است.
یک فایل autorun.inf یک فایل پیکربندی است که روی درایوهای قابل انتقال قرار داده شده، و با وارد کردن درایو، منجر به اجرای فایلهای دلخواه میشود. معمولاً، فایل autorun.inf و فایل اجرایی در ریشه درایو قرار داده میشود. اما استاکسنت از یک فایل استفاده مینماید. منبع 207 یک فایل اجرایی است که در انتهای آن یک فایل autorun.infبا قالب مشخص قرار دارد.
هنگام تجزیه فایلهای autorun.inf توسط ویندوز، از کاراکترهایی که بهعنوان دستورات مجاز شناخته نمیشوند، چشمپوشی میشود. استاکسنت از این نقصان به نفع خود استفاده نموده، و فایل MZ را در ابتدای فایل autorun.inf قرار میدهد. در روند تجزیه، از تمامی فایل MZ چشمپوشی میشود. سرآیند و پیآیند فایل autorun.infرا در ادامه مشاهده مینمایید:
1]> <
شکل 10. سرآیند autorun.inf
1]> <
شکل 11. پیآیند autorun.inf
اگر تنها رشتههای پیآیند را در نظر بگیریم، میبینیم که از دستورات مجازی تشکیل شدهاند:
1]> <
شکل 12. دستورات مجاز در پیآیند فایل autorun.inf
توجه داشته باشید که استاکسنت از دستورات autorun بهمنظور مشخص کردن فایل اجرایی به عنوان فایل اصلی autorun.inf استفاده مینماید. با استفاده از این روش، فایل autorun.inf، در ابتدا، بهعنوان یک فایل مجاز، و در ادامه بهعنوان یک فایل اجرایی شناخته میشود.
علاوه بر این، استاکسنت از یک روش دیگر نیز بهمنظور بالا بردن احتمال اجرای خود استفاده مینماید. دستورات اتوران، اجرای خودکار را غیر فعال ساخته، و دستور جدیدی را به منو اضافه میکنند. دستور جدید را میتوان در %Windir%\System32\shell32.dll,-8496 مشاهده نمود. در حقیقت این دستور همان "Open" است. در نتیجه، دو دستور Openدر منو مشاهده میشود.
1]> <
شکل 13. اضافه شدن یک دستور Open جدید
یکی از این دستورات Open دستور مجاز و دیگری غیرمجاز است. اگر کاربر درایو مورد نظر را با این دستور باز کند، پیش از بازگشایی، استاکسنت اجرا میشود و در ادامه درایو مورد نظر باز میشود.
· آلودهسازی فایلهای پروژه Step7
اکسپورت اصلی، اکسپورت 16، اکسپورت 2 را فراخوانی مینماید، که از APIهای خاص بهمنظور باز کردن فایلهای پروژه در پردازه s7tgtopx.exe استفاده مینماید. این پردازه، مدیر WinCC Simatic بوده، و از آن بهمنظور مدیریت پروژه WinCC/Step7استفاده میشود.
جداول آدرس مربوط به DLLهای زیر تغییر داده میشود:
· در dllهای s7apromx.dll، mfc42.dll، و msvcrt.dll، آدرس CreateFileA بهگونهای تغییر مییابد که به "CreateFileA_hook" اشاره نماید.
· در ccprojectmgr.exe، StgOpenStorageبهگونهای تغییر مییابد که به "StgOpenStorage_hookاشاره نماید.
از CreateFileA بهمنظور بازکردن پروژههای *.S7P (فایلهای پروژه Step7) استفاده میشود. در عوض، CreateFileA_hook فراخوانی میشود. در صورتیکه پسوند فایل بازگشایی شده .s7p باشد، CreateFileA_hook تابع شماره 9 RPC را فراخوانی میکند، که مسیر کنونی را در فایل دادهای رمزشده %Windir%\inf\oem6c.pnfذخیره نموده، و پوشهای که این فایل در آن قرار دارد را آلوده میسازد.
مدیر Simatic از StgOprnStorage بهمنظور باز کردن فایلهای .MCPاستفاده مینماید. این فایلها در پروژههای Step7 وجود دارد. همانند CreateFileA، StgOpenStorage_hookبر فایلهایی با پسوند .mcpنظارت دارد. در صورت دسترسی به چنین فایلی، تابع شماره 9 RPC بهمنظور ذخیرهسازی مسیر oem6c.pnfفراخوانی شده، و پوشه پروژهای که فایل mcp در آن قرار دارد فراخوانی میشود.
اکسپورت 14 روتین اصلی آلودهسازی فایلهای پروژه Step7است.
روتین آلودهسازی پروژه مسیر یک پروژه را بهعنوان ورودی دریافت کرده، و با اجرای استاکسنت هنگام بارگذاری پروژه، آن را آلوده میسازد.
فایلهای داخل پروژه لیست میشود. پردازش ویژهای روی فایلها با پسوند .tmp، .s7p، یا .mcp انجام میشود.
· فایلهای S7P
فایلهایی با این پسوند، فایلهای پروژه Step7 هستند. در صورتی که چنین فایلی در پوشه پروژه قرار داشته باشد، پروژه ممکن است آلوده باشد.
پروژه میتواند آلوده شود، در صورتیکه:
· بیش از حد قدیمی نباشد (در 3.5 سال گذشته استفاده شده باشد)
· شامل پوشهای با نام "wincproj" با یک فایل MCPمجاز باشد
· یک پروژه Step7 نمونه نباشد. این امر با حذف مسیرهای "*\Step7\Examples" انجام میشود.
رویه آلودهسازی شامل گامهای متفاوت مختلفی است:
1. استاکسنت فایلهای زیر را ایجاد مینماید:
a. xutils\listen\xr000000.mdx (یک کپی رمزشده از DLL استاکسنت اصلی)
b. xutils\links\s7p00001.dbf (یک نسخه از فایل دادهای استاکسنت که طولی معادل 90 بایت دارد)
c. xutils\listen\s7000001.mdx (یک نسخه رمزشده و بهروزشده از بلوک دادههای پیکربندی استاکسنت)
2. این مخاطره زیرپوشههای "hOmSave7" را بررسی مینماید. استاکسنت در هر یک از آنها یک کپی از DLLی که در منبع 202 وجود دارد را کپی مینماید. این DLLبا استفاده از نام فایل خاص کپی میشود.
3. استاکسنت فایل دادهای Step7را که در Apilog\types قرار دارد تغییر میدهد.
پس از اینکه یک پروژه آلوده شده باز شد، فایل دادهای تغییر یافته به دنبال نام فایلی که برای کپی DLL از آن استفاده شد میگردد. پوشههای زیر به ترتیبی که در ادامه میآید جستجو میشوند:
· پوشه S7BINاز پوشه نصب Step7
· پوشه %System%
· پوشه %Windir%\system
· پوشه %Windir%
· زیرپوشههای پوشه hOmSave7
در صورتیکه فایل مذکور در هیچیک از 4 پوشه بالا پیدا نشد، DLLبدخواه توسط مدیر بارگذاری و اجرا میشود. این فایل .dll بهعنوان رمزگشا و بارگذار کپی dllاصلی که در xutils\listen\xr000000.mdx قرار دارد عمل مینماید. این استراتژی مشابه حملات DLL Preloading است.
نسخههای 5.3 و 5.4 (بسته خدماتی 4) قابلیت آلودهشدن را دارا میباشند. اما از آسیبپذیر بودن نسخههای اخیر مدیر (v5.4 SP5 و v5.5) اطلاعی در دست نیست.
· فایلهای MCP
مشابه فایلهای .s7p، فایلهای .mcp نیز در پوشه پروژه Step7 وجود دارند. اما، بهصورت معمول توسط WinCCایجاد میشوند. پیدا کردن چنین فایلی در یک پروژه میتواند, علاوه بر آلوده بودن پایگاه دادههای WinCC، آلوده بودن پروژه را نیز القاء نماید.
پروژه میتواند آلوده باشد اگر:
· بیش از حد قدیمی نباشد (در 3.5 سال اخیر دسترسی به آن انجام شده باشد)
· شامل یک پوشه GracS با حداقل یک فایل .pdl باشد
روند آلودهسازی شامل گامهای مختلفی خواهد بود:
1. استاکسنت فایلهای زیر را ایجاد مینماید:
a. GracS\cc_alg.sav (یک نسخه رمزشده از DLL استاکسنت اصلی)
b. GracS\db_log.sav (یک کپی از فایل دادهای استاکسنت به طول 90 بایت)
c. GracS\cc_alg.sav xutils\listen\s7000001.mdx (یک نسخه رمز شده و بهروز شده از بلوک داده پیکربندی استاکسنت)
2. سپس یک نسخه از منبع 203 رمزگشایی شده و در GracS\cc_tlg7.savقرار داده میشود. این فایل یک فایل Cabinet ویندوز است که بهمنظور بارگذاری و اجرای استاکسنت از آن استفاده میشود.
در فرآیند آلودهسازی، پایگاه دادههای WinCCممکن است مورد دسترسی قرار گرفته، و آلودگی به ماشین کارگزار پایگاه دادههای WinCC منتقل شود. این رویه در بخش "پخش در شبکه" تشریح خواهد شد.
· فایلهای TMP
بهازای هر فایل .tmp که در پروژه وجود دارد، نام فایل در ابتدا بررسی میشود. قالب این نام باید بهصورت ~WRxxxxx.tmpباشد که "xxxxx" اعدادی در مبنای 16 هستند که مجموع آنها بر 16 بخشپذیر است. بهعنوان مثال، ~WR12346 نامی مجاز است.
در ادامه محتویات فایل بررسی میشود. 8 بایت اولیه باید شامل رشته "LRW~LRW~" باشد. در اینصورت، مابقی داده رمزگذاری میشود.
استاکسنت میتواند با استفاده از پروژههای آلوده شده خود را بهروزرسانی نماید. در صورتی که یک پروژه باز شده و آلوده باشد، استاکسنت نسخه آلودگی را بررسی کرده، و در صورتیکه این نسخه جدیدتر باشد، آن را بهمنظور بهروزرسانی خود اجرا مینماید.
سه فرم متفاوت از فایلهای پروژه آلوده وجود دارد که هر کدام توسط یک اکسپورت خاص مدیریت میشود.
اکسپورت 9 مسیر یک پروژه Step7 را بهعنوان ورودی میگیرد. در ادامه مسیرهای مربوط به فایلهای زیر درون پروژه ایجاد میشود:
· …\XUTILS\listen\XR000000.MDX
· …\XUTILS\links\S7P00001.DBF
· …\XUTILS\listen\S7000001.MDX
این فایلها به فایلهای موقت (%Temp%\~dfXXXX.tmp) اضافه شده، و اکسپورت 16، نقطه ورود اصلی در این نسخه بهروزتر استاکسنت، اجرا میشود.
اکسپورت 31 یک مسیر پروژه Step7 را بهعنوان وروی گرفته، و مسیرهای مربوط به فایلهای استاکسنت زیر که در پروژه قرار دارند را ایجاد مینماید:
· …\GracS\cc_alg.sav
· …\GracS\db_log.sav
· …\GracS\cc_tag.sav
· این فایلها به فایلهای موقت (%Temp%\~dfXXXX.tmp) اضافه شده، و اکسپورت 16، نقطه ورود اصلی در این نسخه بهروزتر استاکسنت، اجرا میشود.
اکسپورت 10 مشابه اکسپورتهای 9 و 31 میباشد. این اکسپورت میتواند پوشههای Step7 را پردازش کرده، و فایلهای استاکسنتی که در زیرپوشههای Gracs\ و Xutils\ قرار دارند را استخراج نماید. حتی ممکن است آرشیوهای .Zip نیز مورد پردازش قرار گیرند.
از اکسپورت 16 بهمنظور اجرای نسخه استخراجشده از استاکسنت استفاده شده، و بلوک دادههای پیکربندی بهروز میشود.
منبع : مركز آپا دانشگاه شریف،
گروه دور همی پارسی کدرز
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg