یه گروه هکری احتمالا مرتبط با کره شمالی ، محققین امنیتی و سازمانهای رسانه ای آمریکایی و اروپایی رو با پیشنهادهای شغلی جعلی، هدف قرار میده.
محققای Mandiant اسم این گروه رو UNC2970 گذاشتن و گفتن که این گروه قبلا شرکتهای فناوری ، گروههای رسانه ای و نهادهای صنعت دفاعی رو هدف قرار میداده .
حمله اینجوری شروع میشه که هکرها از طریق لینکدین خودشون رو به هدف نزدیک میکنن. برای این کار خودشون رو بعنوان استخدام کننده معرفی میکنن. در ادامه فرایند استخدام، صحبت رو به واتس آپ می برن و اونجا به قربانی یه فایل Word حاوی ماکرو میدن.
این فایلهای ورد هم به گونه ای طراحی شدن که با موقعیت شغلی پیشنهادی مطابقت داشته باشه. برای مثال شکل زیر یه نمونه از این پیشنهادهای شغلی با جعل هویت نیویورک تایمز هستش.
ماکروهای فایلهای ورد ، با استفاده از تکنیک remote template injection یه نسخه آلوده شده از TightVNC رو از سایتهای وردپرسی که هکرها اونارو هک کردن و بعنوان C2 ازشون استفاده میکنن، دانلود میکنه. برنامه قانونی TightVNC ، یه برنامه کنترل از راه دور کامپیوتر هستش.
نسخه آلوده TightVNC که محققا اسمش LidShift گذاشتن، با استفاده از تکنیک reflective DLL injection یه DLL رمزگذاری شده رو در مموری سیستم اجرا میکنه. این DLL یه پلاگین آلوده Notepad++ هستش.
این فایل هم یه دانلودر بنام LidShot هستش که بعد از enumeration سیستم ، پیلود نهایی که PlankWalk هستش رو روی سیستم مستقر میکنه. PlankWalk یه بکدور هستش که در زبان سی پلاس توسعه داده شده.
بعد از استقرار بکدور، مهاجمها برای فرایند post exploit از یه ابزار جدیدی بنام TouchShift استفاده میکنن که خودش بعنوان یه باینری قانونی ویندوز ، mscoree.dll یا netplwix.dll جا میزنه و مخفی میکنه.
بدافزار TouchShift ، یسری بدافزار دیگه رو هم لوود میکنه از جمله :
- یه ابزار برای گرفتن اسکرین شات بنام TouchShot
- یه کیلاگر بنام TouchKey
- یه ابزار برای تانلینگ بنام HookShot
- یه لودر بنام TouchMove
- یه بکدور بنام SideShow
بکدور SideShow از 49 دستور پشتیبانی میکنه که دست مهاجمین رو برای کار روی هدف باز میزاره. مهاجم میتونه کد دلخواه روی سیستم اجرا کنه، رجیستری رو تغییر بده، تنظیمات فایروال رو دستکاری کنه، scheduled tasks اضافه کنه و پیلودهای مختلفی رو روی سیستم اجرا کنه. لیست کامل دستورات در جدول زیر قابل مشاهده هستش:
Command ID | Description |
00 |
Get lightweight system information and a few configuration details |
01 |
Enumerate drives and list free space |
02 |
List files in directory |
03 |
Execute arbitrary command via CreateProccess() and return output |
04 |
Likely zip directory to create password protected ZIP file with password AtbsxjCiD2axc*ic[3</8Ad81!G./1kiThAfkgnw |
05 |
Download file to system |
06 |
Execute process |
07 |
Execute process and spoof parent process identifier (PID) |
08 |
Execute PE payload via process injection for specified PID |
09 |
Execute PE payload via loading into malware’s memory space |
0A |
List running processes and loaded DLLs |
0B |
Terminate process |
0C |
Securely delete a file by first writing random data and then calling DeleteFile() |
0D |
Connect to specified IP address and port — use unknown |
0E |
Not implemented |
0F |
Set current directory |
10 |
Timestomp a file using another file’s timestamp |
11 |
Update beacon interval |
12 |
Update beacon interval and save configuration to disk |
13 |
Clean up by securely deleting supporting files, registry values, services, and exit |
14 |
Load configuration from disk |
15 |
Update configuration and save to disk |
16 |
Get size of all files in a directory |
17 |
Get specified drive’s free disk space |
18 |
Suspend a process |
19 |
Suspend a process |
1A |
Load DLL in another process |
1B |
Unload DLL in another process |
1C |
Copy file to another location |
1D |
Remove directory |
1E |
Move file to another location |
1F |
Execute shellcode payload via process injection for specified PID |
20 |
Execute shellcode payload via loading into malware’s memory space |
21 |
Get networking configuration information |
22 |
Query or modify settings on a Windows Domain Controller |
23 |
Query or modify system’s firewall settings |
24 |
List active TCP and UDP connections |
25 |
Ping a remote system via ICMP requests — usage unknown |
26 |
Query or modify system’s registry |
27 |
Query or modify system’s services |
28 |
Ping a remote system via ICMP requests — usage unknown |
29 |
Get domain and user account name for which the malware’s process is running under |
2A |
Execute WMI command |
2B |
Resolve domain name via DNS query |
2C |
Query or modify system’s scheduled tasks |
2D |
Get heavyweight system information |
2E |
Get networking interface information |
2F |
Create directory |
30 |
List files in directory |
در برخی موارد که سازمانها از VPN استفاده نمیکردن، مهاجمین از Microsoft Intune برای استقرار بدافزار CloudBurst با از طریق دستورات پاورشل، استفاده میکردن. Microsoft Intune یه سرویس مبتنی بر ابر هستش که امکان کنترل نقاط پایانی رو فراهم میکنه. این سرویس باعث میشه که کارمندا بتونن از راه دور به سیستمها وصل بشن و کاراشون بکنن و همچنین از برنامه ها و داده های شرکت هم محافظت میکنه. کل این فرایند مدیریت میکنه.
محققا در طول فرایند فارنزیک، متوجه اجرای یه اسکریپت پاورشلی مرتبط با Microsoft Intune management extension (IME) شدن :
1 |
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -executionPolicy bypass -file "C:\Program Files (x86)\Microsoft Microsoft IME\Policies\Scripts\42fb3cca-48dd-4412-a11a-245384544402_f391eded-82d3-4506-8bf4-9213f6f4d586.ps1 |
اما نتونستن خود فایل ps1 رو بدست بیارن اما یه کپی از اون رو از طریق لاگ های IntuneManagementExtension که در مسیر زیر هستش ، بدست آوردن :
1 |
C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\IntuneManagementExtension-YYYYMMDD-HHMMSS.log |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<![LOG[[PowerShell] response payload is [{"AccountId":"[userGUID]","PolicyId":"f391eded-82d3-4506-8bf4- 9213f6f4d586","PolicyType":1,"DocumentSchemaVersion":"1.0","PolicyHash":"P23cVfMyHLECSGPt1T6YYcoxhCLWKS05jX5M ukC3MIw=","PolicyBody":"$EnModule = \"[Base64_encoded_CLOUDBURST_payload]"\r\n$DeModule = [System.Convert]::FromBase64CharArray($EnModule, 0, $EnModule.Length)\r\nSet-Content \"C:\\ProgramData\\mscoree.dll\" -Value $DeModule -Encoding Byte\r\nCopy-Item \"C:\\Windows\\System32\\PresentationHost.exe\" -Destination \"C:\\ProgramData\"\r\nStart-Process - NoNewWindow -FilePath \"C:\\ProgramData\\PresentationHost.exe\" -ArgumentList \"- embeddingObject\"\r\n","PolicyBodySize":null,"PolicyScriptParameters":null,"ContentSignature":" [Base64_encoded_signing_certificate]","isTombStoned":false,"isRecurring":false,"isFullSync":false,"ExecutionContext":0, "InternalVersion":1,"EnforceSignatureCheck":false,"RunningMode":1,"RemediationScript":null,"RunRemediation":false," RemediateScriptHash":null,"RemediationScriptParameters":null,"ComplianceRules":null,"ExecutionFrequency":0," RetryCount":0,"BlockExecutionNotifications":false,"ModifiedTime":null,"Schedule":null,"IsFirstPartyScript":false,"TargetType":0, "ScriptApplicabilityStateDueToAssignmentFilters":null,"AssignmentFilterIdToEvalStateMap":{},"HardwareConfigurationMetadata":null}]]LOG]!><time="06:59:15.2941778" date="6-9-2022" component="IntuneManagementExtension" context="" type="1" thread="5" file=""> |
استفاده از زیرودی
محققای Mandiant یه گزارش دیگه ای هم از این گروه منتشر کردن که از تکنیک BYOVD استفاده کردن. در این تکنیک مهاجمین یه درایور آسیب پذیر رو روی سیستم قربانی نصب میکنن و با امتیاز کرنل ، روی هدف کار میکنن.
محققا با بررسی سیستم های آلوده، یسری درایور مشکوک و یه فایل DLL بنام _SB_SMBUS_SDK.dll پیدا کردن. متوجه شدن که این فایلها توسط یه فایل دیگه بنام Share.DAT ایجاد شده که یه in-memory dropper بنام LightShift هستش.
این dropper یه پیلود مبهم شده بنام LightShow رو لوود میکنه که یه درایور آسیب پذیر روی مموری کرنل برای arbitrary read and write فراهم میکنه.
این درایور که متعلق به ASUS و با نام Driver7.sys هستش، در زمان کشف توسط محققا، آسیب پذیر نبود و هکرها در حقیقت از یه زیرودی استفاده کرده بودن. محققا آسیب پذیری رو به ایسوس گزارش کردن و این آسیب پذیری با شناسه CVE-2022-42455 در اکتبر 2022 اصلاح شده.
هدف از استفاده از این درایور هم این بوده که هکرها میتونستن با دستکاری روالهای کرنلی ، EDRها رو از کار بندازن.
هک محققین:
این هکرها خودشون رو در شبکه های اجتماعی با عنوان محقق امنیتی معرفی میکردن و میخواستن از محققینی که در زمینه کشف آسیب پذیری و توسعه اکسپلویت فعالیت دارن، سوء استفاده کنن.
هکرها با ارتباط با این افراد، وعده همکاری میدادن و یسری پروژه آلوده Visual Studio و فایلهای MHTML که یه زیرودی اینترنت اکسپلورر بود بهشون میدادن. با این کار یسری بدافزار روی سیستم محققا مستقر میکردن.
IOCهای گزارش :
IOC | Signature |
e97b13b7e91edeceeac876c3869cc4eb | PLANKWALK |
a9e30c16df400c3f24fc4e9d76db78ef | PLANKWALK |
f910ffb063abe31e87982bad68fd0d87 | PLANKWALK |
30358639af2ecc217bbc26008c5640a7 | LIDSHIFT |
41dcd8db4371574453561251701107bc | LIDSHOT |
866f9f205fa1d47af27173b5eb464363 | TOUCHSHIFT |
8c597659ede15d97914cb27512a55fc7 | TOUCHSHIFT |
a2109276dc704dedf481a4f6c8914c6e | TOUCHSHIFT |
3bf748baecfc24def6c0393bc2354771 | TOUCHSHOT |
91b6d6efa5840d6c1f10a72c66e925ce | TOUCHKEY |
300103aff7ab676a41e47ec3d615ba3f | HOOKSHOT |
49425d6dedb5f88bddc053cc8fd5f0f4 | TOUCHMOVE |
abd91676a814f4b50ec357ca1584567e | SIDESHOW |
05b6f459be513bf6120e9b2b85f6c844 | CLOUDBURST |
hxxp://webinternal.anyplex[.]com/images/query_image.jsp | PLANKWALK C2 |
hxxp://www.fainstec[.]com/assets/js/jquery/jquery.php | PLANKWALK C2 |
hxxps://ajayjangid[.]in/js/jquery/jquery.php | PLANKWALK C2 |
hxxps://sede.lamarinadevalencia[.]com/tablonEdictal/layout/contentLayout.jsp | PLANKWALK C2 |
hxxps://leadsblue[.]com/wp-content/wp-utility/index.php | LIDSHOT C2 |
hxxps://toptradenews[.]com/wp-content/themes/themes.php | SIDESHOW C2 |
hxxp://mantis.quick.net[.]pl/library/securimage/index.php | SIDESHOW C2 |
hxxp://www.keewoom.co[.]kr/prod_img/201409/prod.php | SIDESHOW C2 |
hxxp://abba-servicios[.]mx/wordpress/wp-content/themes/config.php | SIDESHOW C2 |
hxxp://www.ruscheltelefonia[.]com.br/public/php/index.php | SIDESHOW C2 |
hxxps://olidhealth[.]com/wp-includes/php-compat/compat.php | CLOUDBURST C2 |
hxxps://doug[.]org/wp-includes/admin.php | CLOUDBURST C2 |
hxxps://crickethighlights[.]today/wp-content/plugins/contact.php | CLOUDBURST C2 |
MD5 | Signature |
def6f91614cb47888f03658b28a1bda6 | XOR’d LIGHTSHIFT |
9176f177bd88686c6beb29d8bb05f20c | LIGHTSHIFT |
ad452d161782290ad5004b2c9497074f | LIGHTSHOW |
7e6e2ed880c7ab115fca68136051f9ce | ENE Driver |
SB_SMBUS_SDK.dll | LIGHTSHOW Dummy DLL |
C:\Windows\windows.ini | LIGHTSHIFT Output |
Signatures های گزارش:
PLANKWALK
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
rule M_Hunt_APT_PLANKWALK_Code_String { meta: author = "Mandiant" description = "Detects a format string containing code and token found in PLANKWALK" strings: $hex = { 63 6F 64 65 [1-6] 3D 25 64 26 [1-6] 75 73 65 72 [1-6] 3D 25 73 26 [1-6] 74 6F 6B 65 } condition: (uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) and $hex } |
LIDSHIFT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
rule M_APT_Loader_Win_LIDSHIFT_1 { meta: author = "Mandiant" description = "Detects LIDSHIFT implant" strings: $anchor1 = "%s:%s:%s" ascii $encloop = { 83 ?? 3F 72 ?? EB ?? 8D ?? ?? B8 ?? 41 10 04 F7 ?? 8B ?? 2B ?? D1 ?? 03 ?? C1 ?? 05 6B ?? 3F 2B ?? 42 0F ?? ?? ?? 41 ?? ?? } condition: uint16(0) == 0x5a4d and all of them } |
LIDSHOT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
rule M_APT_Loader_Win_LIDSHOT_1 { meta: author = "Mandiant" description = "Detects LIDSHOT implant" strings: $code1 = { 4C 89 6D ?? 4C 89 6D ?? C7 45 ?? 01 23 45 67 C7 45 ?? 89 AB CD EF C7 45 ?? FE DC BA 98 C7 45 ?? 76 54 32 10 4C 89 6C 24 ?? 48 C7 45 ?? 0F 00 00 00 C6 44 24 ?? 00 } $code2 = { B8 1F 85 EB 51 41 F7 E8 C1 FA 03 8B CA C1 E9 1F 03 D1 6B CA 19 } $code3 = { C7 45 ?? 30 6B 4C 6C 66 C7 45 ?? 55 00 } condition: uint16(0) == 0x5a4d and all of them } |
CLOUDBURST
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 |
rule M_APT_Loader_Win_CLOUDBURST_1 { meta: author = "Mandiant" strings: $anchor1 = "Microsoft Enhanced Cryptographic Provider v1.0" ascii wide $code1 = { 74 79 70 } $code2 = { 65 71 75 69 } $code3 = { 62 6F 78 69 } $code4 = { E8 ?? ?? ?? ?? FF C6 B8 99 99 99 99 F7 EE D1 FA 8B C2 C1 E8 1F 03 D0 8D 04 16 8D 34 90 85 F6 75 ?? } $str1 = "%s%X" condition: uint16(0) == 0x5a4d and all of them } |
TOUCHSHIFT
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 |
rule M_DropperMemonly_TOUCHSHIFT_1 { meta: author = "Mandiant" description = "Hunting rule for TOUCHSHIFT" strings: $p00_0 = {0943??eb??ff43??b0??eb??e8[4]c700[4]e8[4]32c0} $p00_1 = {4c6305[4]ba[4]4c8b0d[4]488b0d[4]ff15[4]4c6305[4]ba[4]4c8b0d[4]488b0d} condition: uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and ( ($p00_0 in (70000..90000) and $p00_1 in (0..64000)) ) } |
SIDESHOW
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
rule M_APT_Backdoor_Win_SIDESHOW_1 { meta: author = "Mandiant" description = "Detects string deobfuscation function in SIDESHOW, may also detect other variants of malware from the same actor" strings: $code1 = { 41 0F B6 ?? 33 ?? 48 ?? ?? 0F 1F 80 00 00 00 00 3A ?? 74 ?? FF ?? 48 FF ?? 83 ?? 48 72 ?? EB ?? 41 0F ?? ?? 2B ?? ?? 39 8E E3 38 83 ?? 48 F7 ?? C1 ?? 04 8D ?? ?? C1 ?? 03 2B ?? ?? 39 8E E3 38 } condition: uint16(0) == 0x5a4d and (all of them) } |
TOUCHKEY
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 28 29 30 31 32 33 |
rule M_Hunting_TOUCHKEY { meta: author = "Mandiant" description = "Hunting rule For TOUCHKEY" strings: $a1 = "Normal.dost" $a2 = "Normal.docb" $c1 = "[SELECT]" ascii wide $c2 = "[SLEEP]" ascii wide $c3 = "[LSHIFT]" ascii wide $c4 = "[RSHIFT]" ascii wide $c5 = "[ENTER]" ascii wide $c6 = "[SPACE]" ascii wide condition: (uint16(0) == 0x5A4D) and uint32(uint32(0x3C)) == 0x00004550 and filesize < 200KB and (5 of ($c*)) and $a1 and $a2 } |
TOUCHSHOT
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 28 29 |
rule M_Hunting_TOUCHSHOT { meta: author = "Mandiant" description = "Hunting rule For TOUCHSHOT" strings: $path = "%s\\Microsoft\\Windows\\Themes\\" wide $format = "%04d%02d%02d-%02d%02d%02d" $s1 = "EnumDisplaySettingsExW" ascii $s2 = "GetSystemMetrics" ascii $s3 = "GetDC" ascii $s5 = "ReleaseDC" ascii condition: (uint16(0) == 0x5A4D) and uint32(uint32(0x3C)) == 0x00004550 and filesize < 200KB and (3 of ($s*)) and $path and $format } |
HOOKSHOT
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 |
rule M_Hunting_HOOKSHOT { meta: author = "autopatt" description = "Hunting rule for HOOKSHOT" strings: $p00_0 = {8bb1[4]408873??85f675??488b81[4]488b88[4]4885c974??e8} $p00_1 = {8bf3488bea85db0f84[4]4c8d2d[4]66904c8d4424??8bd6488bcd} condition: uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and ( ($p00_0 in (470000..490000) and $p00_1 in (360000..380000)) ) } |
LIGHTSHIFT
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 28 29 |
rule M_Code_LIGHTSHIFT { meta: author = "Mandiant" description = "Hunting rule for LIGHTSHIFT" sha256 = "ce501fd5c96223fb17d3fed0da310ea121ad83c463849059418639d211933aa4" strings: $p00_0 = {488b7c24??448d40??48037c24??488bcfff15[4]817c24[5]74??488b4b??33d2} $p00_1 = {498d7c01??8b47??85c075??496345??85c07e??8b0f41b9} condition: uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and ( ($p00_0 in (750..11000) and $p00_1 in (0..8200)) ) } |
LIGHTSHOW
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
rule M_Code_LIGHTSHOW { meta: author = "Mandiant" description = "Hunting rule For LIGHTSHOW." md5 = "ee5057da3e38b934dae15644c6eb24507fb5a187630c75725075b24a70065452" strings: $E01 = { 46 75 64 4d 6f 64 75 6c 65 2e 64 6c 6c } $I01 = { 62 63 72 79 70 74 2e 64 6c 6c } $I02 = { 4b 45 52 4e 45 4c 33 32 2e 64 6c 6c } $I03 = { 75 73 65 72 33 32 2e 64 6c 6c 00 } $H1 = { 4D 5A 90 00 } $H2 = { 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F } $F01 = { 47 65 74 4d 6f 64 75 6c 65 46 69 6c 65 4e 61 6d 65 57 } $F02 = { 47 65 74 4d 6f 64 75 6c 65 48 61 6e 64 6c 65 41 } $F03 = { 47 65 74 46 69 6c 65 54 79 70 65 } $F04 = { 47 65 74 56 65 72 73 69 6f 6e } $F05 = { 51 75 65 72 79 53 65 72 76 69 63 65 53 74 61 74 75 73 } $F06 = { 42 43 72 79 70 74 4f 70 65 6e 41 6c 67 6f 72 69 74 68 6d 50 72 6f 76 69 64 65 72 } $M01 = { 68 2d 79 6e b1 } $M02 = { 68 ea 71 c2 55 } $M03 = { 66 b8 ad eb } $M04 = { 4c 8d 2c 6d b3 6c 05 39 } $M05 = { 48 8d 2c 95 08 9d ec 9a } $S01 = { 48 8d 0c f5 a3 cd 0a eb} $S02 = { 81 f9 7f 56 e6 0a} condition: ($H1 in (0..2048)) and ($H2 in (0..2048)) and filesize < 100MB and filesize > 5KB and all of ($M0*) and all of ($E*) and all of ($I0*) and 6 of ($F0*) and all of ($S0*) } |