กลุ่มจารกรรมทางไซเบอร์กลุ่มใหม่นี้เน้นที่เอเชียเป็นส่วนใหญ่ ใช้เครื่องมือที่ไม่มีเอกสาร รวมถึงการแยกข้อมูล PowerShell ออกจากไฟล์ PNG
เมื่อเร็ว ๆ นี้นักวิจัยของ ESET พบการโจมตีแบบกำหนดเป้าหมายที่ใช้เครื่องมือที่ไม่มีเอกสารกับบริษัทที่มีชื่อเสียงและรัฐบาลท้องถิ่นซึ่งส่วนใหญ่อยู่ในเอเชีย การโจมตีเหล่านี้ดำเนินการโดยกลุ่มจารกรรมที่ไม่รู้จักก่อนหน้านี้ ซึ่งเราตั้งชื่อว่า Worok และเปิดใช้งานมาตั้งแต่ปี 2020 เป็นอย่างน้อย ชุดเครื่องมือของ Worok ประกอบด้วย CLRLoad ตัวโหลด C++, PowHeartBeat แบ็คดอร์ PowerShell และตัวโหลด C# PNGLoad ที่ใช้การลวงข้อมูลเพื่อแยกไฟล์ที่เป็นอันตรายที่ซ่อนอยู่ เพย์โหลดจากไฟล์ PNG
วโรกคือใคร?
ระหว่าง ProxyShell (CVE-2021-34523) การเปิดเผยช่องโหว่ในช่วงต้นปี 2021 เราสังเกตเห็น กิจกรรมจากกลุ่ม APT ต่างๆ. หนึ่งแสดงลักษณะร่วมกับ TA428:
- เวลากิจกรรม
- ประเภทธุรกิจเป้าหมาย
- การใช้ ShadowPad
ชุดเครื่องมือที่เหลือแตกต่างกันมาก ตัวอย่างเช่น TA428 เข้าร่วมใน สามารถประนีประนอมเดสก์ท็อปได้ ในปี 2020 เราพิจารณาว่าลิงก์ไม่แข็งแรงพอที่จะถือว่า Worok เป็นกลุ่มเดียวกับ TA428 แต่ทั้งสองกลุ่มอาจแบ่งปันเครื่องมือและมีความสนใจร่วมกัน เราตัดสินใจสร้างคลัสเตอร์และตั้งชื่อว่า Worok ชื่อนี้ถูกเลือกหลังจาก mutex ในตัวโหลดที่กลุ่มใช้ จากนั้นจึงเชื่อมโยงกิจกรรมเพิ่มเติมกับรุ่นต่างๆ ของเครื่องมือเดียวกันเข้ากับกลุ่มนี้ จากข้อมูลทางไกลของ ESET นั้น Worok ได้เปิดใช้งานตั้งแต่ปลายปี 2020 และยังคงใช้งานได้ตั้งแต่เขียนบทความนี้
ย้อนกลับไปในช่วงปลายปี 2020 Worok ตั้งเป้าไปที่รัฐบาลและบริษัทต่างๆ ในหลายประเทศ โดยเฉพาะ:
- บริษัทโทรคมนาคมในเอเชียตะวันออก
- ธนาคารในเอเชียกลาง
- บริษัทอุตสาหกรรมการเดินเรือในเอเชียตะวันออกเฉียงใต้
- หน่วยงานของรัฐในตะวันออกกลาง
- บริษัทเอกชนในแอฟริกาตอนใต้
มีการหยุดชะงักอย่างมีนัยสำคัญในการดำเนินการที่สังเกตได้ระหว่างปี 2021-05 ถึง 2022-01 แต่กิจกรรม Worok กลับมาในปี 2022-02 โดยกำหนดเป้าหมาย:
- บริษัทพลังงานในเอเชียกลาง
- หน่วยงานภาครัฐในเอเชียตะวันออกเฉียงใต้
รูปที่ 1 แสดงแผนที่ความหนาแน่นของพื้นที่เป้าหมายและแนวดิ่ง
เมื่อพิจารณาจากโปรไฟล์ของเป้าหมายและเครื่องมือต่างๆ ที่เราพบว่าใช้กับเหยื่อเหล่านี้ เราคิดว่าวัตถุประสงค์หลักของ Worok คือการขโมยข้อมูล
การวิเคราะห์ทางเทคนิค
แม้ว่าการเข้าถึงเบื้องต้นส่วนใหญ่จะไม่เป็นที่รู้จัก แต่ในบางกรณีจนถึงปี 2021 และ 2022 เราพบช่องโหว่ที่ใช้กับช่องโหว่ของ ProxyShell ในกรณีดังกล่าว โดยปกติเว็บเชลล์จะถูกอัปโหลดหลังจากใช้ประโยชน์จากช่องโหว่เหล่านี้ เพื่อให้เครือข่ายของเหยื่อมีความคงอยู่ จากนั้นผู้ปฏิบัติงานได้ใช้รากฟันเทียมแบบต่างๆ เพื่อเพิ่มขีดความสามารถ
เมื่อได้รับสิทธิ์การเข้าถึงแล้ว ผู้ปฏิบัติงานได้ปรับใช้เครื่องมือที่เปิดเผยต่อสาธารณะหลายรายการเพื่อการลาดตระเวน รวมถึง Mimikatz, ไส้เดือน, รีจอร์จและ NBTสแกนแล้วปรับใช้รากฟันเทียมแบบกำหนดเอง: ตัวโหลดระยะแรก ตามด้วยตัวโหลด .NET ระยะที่สอง (PNGLoad) ขออภัย เราไม่สามารถเรียกข้อมูลเพย์โหลดสุดท้ายได้ ในปี 2021 ตัวโหลดขั้นตอนแรกคือชุดประกอบ CLR (CLRLoad) ในขณะที่ในปี 2022 ตัวโหลดส่วนใหญ่จะถูกแทนที่ด้วยแบ็คดอร์ PowerShell ที่มีคุณสมบัติครบถ้วน (PowHeartBeat) – ห่วงโซ่การดำเนินการทั้งสองแสดงไว้ในรูปที่ 2 ทั้งสาม เครื่องมือต่างๆ ได้อธิบายไว้โดยละเอียดในหัวข้อย่อยต่อไปนี้
CLRLoad: ตัวโหลดแอสเซมบลี CLR
CLRLoad เป็น Windows PE ทั่วไปที่เราเคยเห็นในเวอร์ชัน 32 และ 64 บิต มันเป็นตัวโหลดที่เขียนด้วย C ++ ที่โหลดขั้นตอนต่อไป (PNGLoad) ซึ่งจะต้องเป็น แอสเซมบลีรันไทม์ภาษาทั่วไป (CLR) ไฟล์ DLL รหัสนั้นถูกโหลดจากไฟล์ที่อยู่บนดิสก์ในไดเร็กทอรีที่ถูกต้อง สันนิษฐานว่าจะทำให้เหยื่อเข้าใจผิดหรือผู้ตอบสนองต่อเหตุการณ์โดยคิดว่าเป็นซอฟต์แวร์ที่ถูกต้อง
ตัวอย่าง CLRLoad บางตัวเริ่มต้นด้วยการถอดรหัสพาธแบบเต็มของไฟล์ที่มีเนื้อหาที่จะโหลดเป็นสเตจถัดไป เส้นทางของไฟล์เหล่านี้เข้ารหัสด้วย XOR แบบไบต์เดียว โดยมีคีย์ที่แตกต่างกันในทุกตัวอย่าง ถอดรหัสหรือข้อความที่ชัดเจน เส้นทางของไฟล์เหล่านี้เป็นแบบสัมบูรณ์ โดยที่เราพบมีดังนี้:
- C:ไฟล์โปรแกรมVMwareVMware ToolsVMware VGAuthxsec_1_5.dll
- C:โปรแกรม FilesUltraViewermsvbvm80.dll
- C: โปรแกรม FilesInternet ExplorerJsprofile.dll
- C:โปรแกรม FilesWinRarRarExtMgt.dll
- C:ไฟล์โปรแกรม (x86)ซอฟต์แวร์ FoxitFoxit Readerlucenelib.dll
ต่อไป mutex จะถูกสร้างขึ้นและเราได้เห็นชื่อที่แตกต่างกันในทุกตัวอย่าง ตัวโหลดจะตรวจสอบ mutex นี้ ถ้าพบก็จะออกเพราะตัวโหลดกำลังทำงานอยู่แล้ว ในตัวอย่างหนึ่ง mutex Wo0r0KGทำไมYGO ถูกพบซึ่งทำให้กลุ่มนั้นชื่อวอรก
CLRLoad จะโหลดแอสเซมบลี CLR จากเส้นทางไฟล์ที่ถอดรหัสได้ ในฐานะรหัสที่ไม่มีการจัดการ CLRLoad บรรลุสิ่งนี้ผ่าน CorBindToRuntimeเช่น การเรียกใช้ Windows API ในตัวแปร 32 บิตหรือ CLRCreateInstance โทรในรูปแบบ 64 บิต
PowHeartBeat: แบ็คดอร์ PowerShell
PowHeartBeat เป็นแบ็คดอร์ที่มีคุณสมบัติครบถ้วนซึ่งเขียนขึ้นใน PowerShell ซึ่งสร้างความสับสนโดยใช้เทคนิคต่างๆ เช่น การบีบอัด การเข้ารหัส และการเข้ารหัส จากการวัดและส่งข้อมูลทางไกลของ ESET เราเชื่อว่า PowHeartBeat เข้ามาแทนที่ CLRLoad ในแคมเปญ Worok ล่าสุด เนื่องจากเป็นเครื่องมือที่ใช้ในการเปิดใช้ PNGLoad
เลเยอร์แรกของรหัสลับๆ ประกอบด้วยรหัส PowerShell ที่เข้ารหัส base64 หลายส่วน เมื่อเพย์โหลดถูกสร้างขึ้นใหม่ มันจะถูกดำเนินการผ่าน ไอเอ็กซ์. เมื่อถอดรหัสแล้ว โค้ด obfuscated อีกชั้นหนึ่งจะถูกเรียกใช้งาน ซึ่งเราสามารถเห็นได้ในรูปที่ 3
เลเยอร์ที่สองของแบ็คดอร์เบสแรก 64 ถอดรหัสเลเยอร์ถัดไปของรหัส ซึ่งจะถูกถอดรหัสด้วย สาม DES (โหมด CBC) หลังจากถอดรหัสแล้ว รหัสนี้จะถูกคลายการบีบอัดโดยใช้เครื่องหมาย gzip อัลกอริธึมจึงให้รหัส PowerShell ชั้นที่สามซึ่งเป็นแบ็คดอร์จริง แบ่งออกเป็นสองส่วนหลัก: การกำหนดค่าและการจัดการคำสั่งลับๆ
เลเยอร์หลักของรหัสลับๆ ยังเขียนใน PowerShell และใช้ HTTP หรือ ICMP เพื่อสื่อสารกับเซิร์ฟเวอร์ C&C ใช้งานได้ดังรูปที่ 4
องค์ประกอบ
การกำหนดค่าประกอบด้วยหลายฟิลด์ รวมถึงหมายเลขเวอร์ชัน การกำหนดค่าพร็อกซีที่เป็นตัวเลือก และที่อยู่ C&C ตารางที่ 1 อธิบายความหมายของฟิลด์การกำหนดค่าในเวอร์ชันต่างๆ ที่เราได้สังเกต
ตารางที่ 1. ความหมายของฟิลด์คอนฟิกูเรชัน
ชื่อฟิลด์ | รายละเอียด |
---|---|
จมูก / ikuyrtydyfg (ตัวอย่างอื่นๆ) |
ไม่ได้ใช้ |
รหัสลูกค้า | ตัวระบุไคลเอ็นต์ ใช้เพื่อวัตถุประสงค์ต่อไปนี้: · เป็นมูลค่าเมื่อสร้าง ส่วนหัวของคุกกี้ สำหรับการสื่อสาร C&C · เป็นสิ่งประดิษฐ์เข้ารหัสสำหรับการเข้ารหัสข้อมูลที่ส่ง |
เวอร์ชั่น | หมายเลขเวอร์ชันของ PowHeartBeat |
เอ็กเซกไทม์ส | จำนวนครั้งในการดำเนินการที่อนุญาตเมื่อออก a RunCmd (คำสั่งทำงาน) คำสั่ง |
ตัวแทนผู้ใช้ | ตัวแทนผู้ใช้ที่ใช้สำหรับการสื่อสาร C&C |
อ้างอิง | อ้างอิง ส่วนหัวที่ใช้สำหรับการสื่อสาร C&C |
ยอมรับการเข้ารหัส | ไม่ได้ใช้ |
รหัสลูกค้าคุกกี้ รหัสงานคุกกี้ รหัสเทอร์มินัลของคุกกี้ |
ค่าที่ใช้ในการสร้าง คุกกี้ ส่วนหัวสำหรับการสื่อสาร C&C |
URLHttps | โปรโตคอลที่จะใช้สำหรับการสื่อสาร C&C |
URL โดเมน ที่อยู่ IP โดเมน |
URL โดเมน หรือที่อยู่ IP ที่ใช้เป็นเซิร์ฟเวอร์ C&C ถ้า โดเมน ไม่ว่างก็เลือกแทน ที่อยู่ IP. ในกรณีอื่น ๆ ที่อยู่ IP ถูกถ่าย |
UrlSendHeartBeat | เส้นทาง URL ที่ใช้เมื่อแบ็คดอร์ขอคำสั่งจากเซิร์ฟเวอร์ C&C |
URLส่งผลลัพธ์ | เส้นทาง URL ที่ใช้เมื่อแบ็คดอร์ส่งผลของคำสั่งกลับไปยังเซิร์ฟเวอร์ C&C |
GetUrl | URL ที่สมบูรณ์ ซึ่งใช้โดย PowHeartBeat เพื่อขอคำสั่งจากเซิร์ฟเวอร์ C&C เป็นการต่อกันขององค์ประกอบ URL ด้านบน |
วางUrl | เหมือนกับ GetUrl แต่ใช้ในการส่งผลลัพธ์ของคำสั่งกลับไปยังเซิร์ฟเวอร์ C&C |
เส้นทางปัจจุบัน | ไม่ได้ใช้ |
พร็อกซีเปิดใช้งานธง | แฟล็กระบุว่าแบ็คดอร์ต้องใช้พร็อกซีหรือไม่เพื่อสื่อสารกับเซิร์ฟเวอร์ C&C |
หนังสือมอบฉันทะ | ที่อยู่ของพร็อกซี่ที่จะใช้ if พร็อกซีเปิดใช้งานธง ถูกตั้งค่าเป็น $จริง. |
ระยะห่าง | เวลาเป็นวินาทีที่สคริปต์พักระหว่างคำขอ GET |
BasicConfigPath | พาธไปยังไฟล์คอนฟิกูเรชันทางเลือกที่มี เวลาทำงาน, เวลาหยุดทำงาน, ช่วงเวลาเริ่มต้นและ โดเมน. ค่าเหล่านั้นจะถูกแทนที่หากมีไฟล์อยู่ |
เวลาทำงาน | เวลาของวันที่แบ็คดอร์เริ่มทำงาน หมายความว่าเริ่มส่งคำขอ GET ไปยังเซิร์ฟเวอร์ C&C |
เวลาหยุดทำงาน | ช่วงเวลาของวันที่แบ็คดอร์สามารถทำงานได้ ซึ่งหมายถึงเวลาที่หยุดส่งคำขอไปยังเซิร์ฟเวอร์ C&C |
ดัชนีโดเมน | ดัชนีของชื่อโดเมนปัจจุบันที่จะใช้สำหรับการสื่อสารกับเซิร์ฟเวอร์ C&C ในกรณีที่คำขอส่งคืนข้อความแสดงข้อผิดพลาดที่แตกต่างจาก 304 (“ไม่ได้แก้ไข”), ดัชนีโดเมน เพิ่มขึ้น |
SecretKey | คีย์ที่ใช้ในการถอดรหัส/เข้ารหัสการกำหนดค่า การกำหนดค่าถูกเข้ารหัสด้วย XOR แบบหลายไบต์ |
ถ้าเข้าสู่ระบบ | ไม่ได้ใช้ |
ถ้า LogFilePath | แฟล็กระบุว่าเปิดใช้งานการบันทึกหรือไม่ |
เข้าสู่ระบบ | เส้นทางของไฟล์บันทึก |
พร็อกซีไฟล์ | พาธไฟล์ของคอนฟิกูเรชันพร็อกซีที่เป็นทางเลือก หากว่างเปล่าหรือไม่พบในระบบไฟล์ แบ็คดอร์จะดึงการตั้งค่าพร็อกซีของผู้ใช้จากค่ารีจิสทรี HKCUซอฟต์แวร์ Microsoft WindowsCurrentVersionInternet SettingsProxyServer . |
ถ้ากำหนดค่า | แฟล็กระบุว่าจะใช้ไฟล์คอนฟิกูเรชันหรือไม่ |
รูปที่ 5 แสดงตัวอย่างการกำหนดค่าที่ดึงมาจากตัวอย่าง PowHeartBeat (SHA-1: 757ABA12D04FD1167528FDD107A441D11CD8C427).
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 |
$Script:nouse = 100; if(Test-Path $MyInvocation.MyCommand.Path){Remove-item $MyInvocation.MyCommand.Path -Force;} $Script:ClientId = “83”; $Script:Version = “2.1.3.0003”; $Script:ExecTimes = 10; $Script:UserAgent = “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3487.100 Safari/537.36”; $Script:Referer = “www.adobe.com”; $Script:AcceptEncoding = “text/html,app1ication/xhtml+xml,app1ication/xml;q=0.9,*/*;q=0.8”; $Script:CookieClientId = “s_ecid”; $Script:CookieTaskId = “aam_uuid”; $Script:CookieTerminalId = “AAMC_adobe_0”; $Script:UrlHttps = “http://”; $Script:UrlDomain= ” 118.193.78[.]22:443″; $Script:UrlSendHeartBeat = “/latest/AdobeMessagingClient.js”; $Script:UrlSendResult = “/content/dam/offers-homepage/homepage.jpg”; $Script:GetUrl = $Script:UrlHttps + $Script:UrlDomain + $Script:UrlSendHeartBeat; $Script:PutUrl = $Script:UrlHttps + $Script:UrlDomain + $Script:UrlSendResult; $Script:currentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition; $Script:ProxyEnableFlag = $false; $Script:Proxymsg; $Script:Interval = 10 ; $Script:BasicConfigPath = “C:ProgramDataunins.dat”; $Script:UpTime = 0; $Script:DownTime = 24; $Script:Domains; $Script:DomainIndex; $Script:SecretKey = “###ConfigKey###”; #$Script:IfLog = $true; $Script:IfLogFilePath = “C:ProgramDatatpncp.dat”; $Script:logpath = “C:ProgramDataunins000.dat”; $Script:ProxyFile = “C:ProgramDatahwrenalm.dat”; $Script:IfConfig = $false; |
รูปที่ 5. ตัวอย่างการกำหนดค่า
การเข้ารหัสข้อมูล
PowHeartBeat เข้ารหัสบันทึกและเนื้อหาไฟล์การกำหนดค่าเพิ่มเติม
เนื้อหาของไฟล์บันทึกถูกเข้ารหัสผ่าน XOR แบบหลายไบต์ด้วยคีย์ที่ระบุในข้อความธรรมดาในตัวอย่าง ที่น่าสนใจคือ รหัสลูกค้า ใช้เป็นเกลือสำหรับทำดัชนีลงในคีย์อาร์เรย์ กุญแจสำคัญคืออาร์เรย์ 256 ไบต์ ซึ่งเหมือนกันในทุกตัวอย่างที่เราพบ เนื้อหาไฟล์การกำหนดค่าเพิ่มเติมถูกเข้ารหัสผ่าน XOR แบบหลายไบต์ด้วยค่าจาก SecretKey เป็นกุญแจสำคัญ
การสื่อสาร C&C
PowHeartBeat ใช้ HTTP สำหรับการสื่อสาร C&C จนถึงเวอร์ชัน 2.4 แล้วเปลี่ยนเป็น ICMP ในทั้งสองกรณี การสื่อสารไม่ได้รับการเข้ารหัส
HTTP
ในการวนซ้ำที่ไม่สิ้นสุด แบ็คดอร์จะส่งคำขอ GET ไปยังเซิร์ฟเวอร์ C&C เพื่อขอคำสั่งให้ออก คำตอบที่เข้ารหัสจะถูกถอดรหัสโดยแบ็คดอร์ ซึ่งประมวลผลคำสั่ง และเขียนเอาต์พุตคำสั่งไปยังไฟล์ที่เนื้อหาจะถูกส่งไปยังเซิร์ฟเวอร์ C&C ผ่านคำขอ POST
รูปแบบของคำขอ GET มีดังต่อไปนี้:
GET <UrlSendHeartBeat> HTTP/1.1 User-Agent: <UserAgent> Referer: <Referer> Host: <Domain> Cookie: <CookieClientId>=<ClientId> Connection: close |
โปรดทราบว่าคำขอถูกสร้างขึ้นโดยใช้ฟิลด์การกำหนดค่าที่มีชื่อเดียวกัน
ในการตอบกลับจากเซิร์ฟเวอร์ C&C ไบต์ที่สามของเนื้อหาคือตัวระบุคำสั่งที่ระบุคำสั่งที่จะประมวลผลโดยแบ็คดอร์ เราจะเรียกมันว่า command_id. เนื้อหาที่เหลือของการตอบกลับจะถูกส่งเป็นอาร์กิวเมนต์ไปยังคำสั่งที่ประมวลผล เนื้อหานี้เข้ารหัสด้วยอัลกอริทึมที่แสดงในรูปที่ 6 รหัสงาน เป็นค่าของคุกกี้ที่ตั้งชื่อตาม รหัสงานคุกกี้ค่าจากการกำหนดค่า
1 2 3 4 5 6 7 8 9 10 |
o[int] $pos = $taskId % 256; for ($i = 0; $i -lt $tmpBytes.Value.Length; $i++) { $pos = $pos + $clientId; if ($pos -ge 256) { $pos = $pos % 256; } $tmpBytes.Value[$i] = [byte]($tmpBytes.Value[$i] -bxor $hexEnc[$pos]); } |
รูปที่ 6. ขออัลกอริธึมการเข้ารหัสข้อมูลเนื้อหา
การตอบสนองจากเซิร์ฟเวอร์ C&C ยังมีคุกกี้อีกตัวหนึ่งซึ่งมีชื่อระบุโดย backdoor's รหัสเทอร์มินัลของคุกกี้ ตัวแปรการกำหนดค่า ค่าของคุกกี้นี้ซ้ำกันในคำขอ POST จากแบ็คดอร์ และต้องไม่ว่างเปล่า หลังจากดำเนินการคำสั่งลับๆ PowHeartBeat จะส่งผลตามคำขอ POST ไปยังเซิร์ฟเวอร์ C&C ผลลัพธ์จะถูกส่งเป็นไฟล์ชื่อ .png.
ICMP
เริ่มต้นจากเวอร์ชัน 2.4 ของ PowHeartBeat HTTP ถูกแทนที่ด้วย ICMP ส่งแพ็กเก็ตที่มีการหมดเวลาหกวินาทีและเป็น ไม่มีการแยกส่วน. การสื่อสารผ่าน ICMP มักจะเป็นวิธีหลบเลี่ยงการตรวจจับ
ไม่มีการเปลี่ยนแปลงที่สำคัญในเวอร์ชัน 2.4 และใหม่กว่า แต่เราสังเกตเห็นการแก้ไขบางอย่างในโค้ด:
- PowHeartBeat ส่งแพ็กเก็ต heartbeat ที่แต่ละลูปที่มี string ABCDEFGHIJKLMNOPQRSTU VWXYZก่อนร้องขอคำสั่ง ซึ่งจะแจ้งเซิร์ฟเวอร์ C&C ว่าแบ็คดอร์พร้อมที่จะรับคำสั่ง
- คำขอรับคำสั่งที่ดำเนินการโดยแบ็คดอร์มี string abcdefghijklmnop.
แพ็กเก็ต Heartbeat มีรูปแบบที่อธิบายไว้ในรูปที่ 7
ความแตกต่างระหว่าง รหัสลูกค้า และ ธงลูกค้า คือ รหัสลูกค้า แตกต่างกันไปในแต่ละตัวอย่างในขณะที่ ธงลูกค้า จะเหมือนกันในทุกตัวอย่างที่ใช้ ICMP ธงการเต้นของหัวใจ แสดงว่าประตูหลังกำลังส่งการเต้นของหัวใจ การตอบสนองจากเซิร์ฟเวอร์ C&C มีรูปแบบที่อธิบายไว้ในรูปที่ 8
ธง ที่นี่ระบุว่ามีคำสั่งให้ออกไปยังแบ็คดอร์หรือไม่ คำขอรับคำสั่งมีรูปแบบอธิบายไว้ในรูปที่ 9
โปรดทราบว่าโหมด ICMP ของแบ็คดอร์อนุญาตให้รับข้อมูลได้ไม่จำกัดจำนวน แบ่งออกเป็นส่วนๆ และตัวแปร ความยาวข้อมูล, ตำแหน่งปัจจุบัน และ ความยาวทั้งหมด ใช้เพื่อติดตามข้อมูลที่ส่ง การตอบสนองต่อคำขอเหล่านี้มีรูปแบบที่อธิบายไว้ในรูปที่ 10
ในการตอบกลับ HTTP ตัวระบุคำสั่งคือไบต์ที่สามของ ข้อมูล.
หลังจากการตอบกลับ ICMP เจ็ดครั้งติดต่อกันด้วยเนื้อหาที่ว่างเปล่าหรือจัดรูปแบบไม่สอดคล้องกัน การถ่ายโอนระหว่างแบ็คดอร์และเซิร์ฟเวอร์ C&C จะถือว่าเสร็จสิ้น
เกี่ยวกับคำขอให้ส่งผลลัพธ์ของคำสั่งที่ออกไปยังเซิร์ฟเวอร์ C&C โหมดเซิร์ฟเวอร์จะเปลี่ยนเป็นโหมดโพสต์และสตริงสุดท้าย (abcdefghijklmnop) มีการเปลี่ยนแปลงสำหรับข้อมูลผลลัพธ์
คำสั่งลับๆ
PowHeartBeat มีความสามารถที่หลากหลาย รวมถึงการดำเนินการคำสั่ง/กระบวนการและการจัดการไฟล์ ตารางที่ 2 แสดงรายการคำสั่งทั้งหมดที่สนับสนุนโดยตัวอย่างที่วิเคราะห์ต่างๆ
ตารางที่ 2. คำอธิบายคำสั่ง PowHeartBeat
Name | ตัวระบุคำสั่ง | รายละเอียด |
---|---|---|
Cmd | 0x02 | ดำเนินการคำสั่ง PowerShell |
exe | 0x04 | ดำเนินการคำสั่งเป็น กระบวนการ. |
อัปโหลดไฟล์ | 0x06 | อัปโหลดไฟล์ไปยังเครื่องเหยื่อ เนื้อหาของไฟล์ถูกบีบอัดด้วย gzip |
ไฟล์ดาวน์โหลด | 0x08 | ดาวน์โหลดไฟล์จากเครื่องของเหยื่อ และส่งคืนเส้นทางของไฟล์ ความยาวไฟล์ เวลาที่สร้าง เวลาเข้าถึง และเนื้อหาไฟล์ไปยังเซิร์ฟเวอร์ C&C |
ไฟล์วิว | 0x0A | รับข้อมูลไฟล์ของไดเร็กทอรีเฉพาะ โดยเฉพาะ: ·ชื่อไฟล์ · คุณสมบัติไฟล์ · เวลาเขียนล่าสุด · เนื้อหาของไฟล์ |
ไฟล์ลบ | 0x0C | ลบไฟล์ |
ไฟล์เปลี่ยนชื่อ | 0x0E | เปลี่ยนชื่อหรือย้ายไฟล์ |
เปลี่ยนผอ | 0x10 | เปลี่ยนตำแหน่งการทำงานปัจจุบันของแบ็คดอร์ |
ข้อมูล | 0x12 | รับหมวดหมู่ข้อมูลตามอาร์กิวเมนต์ที่ระบุ: · "ข้อมูลพื้นฐาน": รหัสลูกค้า, เวอร์ชั่น, ชื่อโฮสต์, ที่อยู่ IP, explorer.exe ข้อมูลรุ่นและขนาด OS (สถาปัตยกรรมและแฟล็กระบุว่าเครื่องเป็นเซิร์ฟเวอร์หรือไม่) ระยะห่าง, ไดเร็กทอรีปัจจุบัน, ข้อมูลไดรฟ์ (ชื่อ, ประเภท, พื้นที่ว่างและขนาดรวม), เวลาปัจจุบัน · “ข้อมูลช่วงเวลา”: ระยะห่าง และเวลาปัจจุบัน · “ข้อมูลโดเมน”: ถอดรหัสเนื้อหาไฟล์การกำหนดค่า |
การกำหนดค่า | 0x14 | อัปเดตเนื้อหาไฟล์การกำหนดค่าและโหลดการกำหนดค่าอีกครั้ง |
N / A | 0x63 | ทางออกประตูหลัง. |
ในกรณีที่มีข้อผิดพลาดทางแบ็คดอร์ แบ็คดอร์จะใช้ตัวระบุคำสั่งเฉพาะ 0x00 ในคำขอ POST ไปยังเซิร์ฟเวอร์ C&C ซึ่งบ่งชี้ว่ามีข้อผิดพลาดเกิดขึ้น
โปรดทราบว่าก่อนที่จะส่งข้อมูลกลับไปยังเซิร์ฟเวอร์ C&C ข้อมูลจะถูกบีบอัดด้วย gzip
PNGLoad: ตัวโหลด Steganographic
PNGLoad เป็นเพย์โหลดขั้นที่สองที่ Worok ใช้งานบนระบบที่ถูกบุกรุก และตามการวัดผลทางไกลของ ESET โหลดโดย CLRLoad หรือ PowHeartBeat แม้ว่าเราจะไม่เห็นโค้ดใดๆ ใน PowHeartBeat ที่โหลด PNGLoad โดยตรง แต่แบ็คดอร์มีความสามารถในการดาวน์โหลดและดำเนินการเพย์โหลดเพิ่มเติมจากเซิร์ฟเวอร์ C&C ซึ่งมีแนวโน้มว่าผู้โจมตีจะปรับใช้ PNGLoad ในระบบที่บุกรุก PowHeartBeat PNGLoad เป็นตัวโหลดที่ใช้ไบต์จากไฟล์ PNG เพื่อสร้างเพย์โหลดเพื่อดำเนินการ เป็นไฟล์ปฏิบัติการ .NET 64 บิต – สับสนกับ .NET เครื่องปฏิกรณ์ – ที่ปลอมแปลงเป็นซอฟต์แวร์ที่ถูกต้องตามกฎหมาย ตัวอย่างเช่น รูปที่ 11 แสดงส่วนหัว CLR ของตัวอย่างการปลอมแปลงเป็น WinRAR DLL
เมื่อถอดรหัสที่สร้างความสับสนแล้ว จะมีเพียงคลาสเดียวเท่านั้น ในคลาสนี้มี a เส้นทางหลัก แอตทริบิวต์ที่มีเส้นทางไดเรกทอรีที่แบ็คดอร์ค้นหารวมถึงไดเรกทอรีย่อยสำหรับไฟล์ที่มี a . Png ส่วนขยายดังแสดงในรูปที่ 12
แต่ละ . Png ไฟล์ที่อยู่โดยการค้นหานี้ของ เส้นทางหลัก จะถูกตรวจสอบสำหรับเนื้อหาที่ฝังตัวแบบสเตกาโนกราฟี อันดับแรก บิตที่มีนัยสำคัญน้อยที่สุดของค่า R (สีแดง), G (สีเขียว), B (สีน้ำเงิน) และ A (alpha) ของแต่ละพิกเซลจะถูกดึงมาและประกอบเป็นบัฟเฟอร์ หากแปดไบต์แรกของบัฟเฟอร์นั้นตรงกับหมายเลขเวทย์มนตร์ที่เห็นในรูปที่ 13 และค่าแปดไบต์ถัดไป การควบคุม ไม่เป็นค่าว่าง ไฟล์จะผ่านการตรวจสอบเนื้อหาที่เป็นความลับของ PNGLoad สำหรับไฟล์ดังกล่าว การประมวลผลจะดำเนินต่อไปโดยส่วนที่เหลือของบัฟเฟอร์ถูกถอดรหัสด้วย XOR แบบหลายไบต์ โดยใช้คีย์ที่เก็บไว้ใน PNGLoad SecretKeyBytes แอตทริบิวต์ จากนั้นบัฟเฟอร์ถอดรหัสจะถูกคลายบีบอัดด้วย gzip ผลลัพธ์ที่คาดว่าจะเป็นสคริปต์ PowerShell ซึ่งทำงานทันที
ที่น่าสนใจคือ การดำเนินการที่ดำเนินการโดย PNGLoad จะถูกบันทึกในไฟล์ที่มีเส้นทางเก็บอยู่ในตัวแปร LogFilePath. การดำเนินการจะถูกบันทึกเฉพาะเมื่อมีไฟล์ซึ่งมีการระบุเส้นทางโดยตัวแปรภายใน ถ้า LogFilePath.
เราไม่สามารถรับตัวอย่างได้ . Png ไฟล์ที่ใช้พร้อมกับ PNGLoad แต่วิธีการทำงานของ PNGLoad แนะนำว่าควรทำงานกับไฟล์ PNG ที่ถูกต้อง เพื่อซ่อนเพย์โหลดที่เป็นอันตราย Worok ใช้ออบเจ็กต์บิตแมปใน C # ซึ่งรับเฉพาะข้อมูลพิกเซลจากไฟล์ ไม่ใช่ข้อมูลเมตาของไฟล์ ซึ่งหมายความว่า Worok สามารถซ่อนเพย์โหลดที่เป็นอันตรายในภาพ PNG ที่ถูกต้องและดูเหมือนไม่มีพิษภัย ดังนั้นจึงซ่อนอยู่ในสายตาธรรมดา
สรุป
Worok เป็นกลุ่มจารกรรมทางไซเบอร์ที่พัฒนาเครื่องมือของตนเอง รวมถึงการใช้ประโยชน์จากเครื่องมือที่มีอยู่ เพื่อประนีประนอมกับเป้าหมาย การขโมยข้อมูลจากเหยื่อคือสิ่งที่เราเชื่อว่าผู้ปฏิบัติงานติดตามเพราะพวกเขามุ่งเน้นไปที่หน่วยงานที่มีชื่อเสียงในเอเชียและแอฟริกา โดยกำหนดเป้าหมายไปยังภาคส่วนต่างๆ ทั้งภาครัฐและเอกชน แต่เน้นเฉพาะหน่วยงานของรัฐ เวลากิจกรรมและชุดเครื่องมือบ่งชี้ถึงความเกี่ยวข้องที่เป็นไปได้กับ TA428 แต่เราทำการประเมินนี้ด้วยความมั่นใจต่ำ ชุดเครื่องมือแบบกำหนดเองของพวกเขาประกอบด้วยตัวโหลดสองตัว – หนึ่งตัวใน C++ และอีกหนึ่งตัวใน C# .NET – และประตูหลัง PowerShell หนึ่งตัว ในขณะที่ทัศนวิสัยของเรามีจำกัด เราหวังว่าการให้ความกระจ่างเกี่ยวกับกลุ่มนี้จะสนับสนุนให้นักวิจัยคนอื่นๆ แบ่งปันข้อมูลเกี่ยวกับกลุ่มนี้
ขณะนี้ ESET Research ยังมีรายงานข่าวกรอง APT ส่วนตัวและฟีดข้อมูลอีกด้วย หากมีข้อสงสัยเกี่ยวกับบริการนี้ โปรดไปที่ ESET ภัยคุกคามอัจฉริยะ หน้า.
IOCs
ไฟล์
SHA-1 | ชื่อไฟล์ | ชื่อการตรวจจับ ESET | Comment |
---|---|---|---|
3A47185D0735CDECF4C7C2299EB18401BFB328D5 | ต้นฉบับ | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0003 |
27ABB54A858AD1C1FF2863913BDA698D184E180D | ต้นฉบับ | PowerShell/PowHeartBeat.A | PowHeartBeat 2.4.3.0003 |
678A131A9E932B9436241402D9727AA7D06A87E3 | ต้นฉบับ | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0003 |
757ABA12D04FD1167528FDD107A441D11CD8C427 | ต้นฉบับ | PowerShell/PowHeartBeat.B | PowHeartBeat 2.1.3.0003 |
54700A48D934676FC698675B4CA5F712C0373188 | ต้นฉบับ | PowerShell/PowHeartBeat.A | PowHeartBeat 1.1.3.0002 |
C2F53C138CB1B87D8FC9253A7088DB30B25389AF | ต้นฉบับ | PowerShell/PowHeartBeat.A | PowHeartBeat 1.1.3.0002 |
C2F1954DE11F72A46A4E823DE767210A3743B205 | tmp.ps1 | PowerShell/PowHeartBeat.B | PowHeartBeat 2.4.3.0004 |
CE430A27DF87A6952D732B4562A7C23BEF4602D1 | tmp.ps1 | PowerShell/PowHeartBeat.A | PowHeartBeat 2.1.3.0004 |
EDE5AB2B94BA85F28D5EE22656958E4ECD77B6FF | ต้นฉบับ | PowerShell/PowHeartBeat.A | PowHeartBeat 2.4.3.0003 |
4721EEBA13535D1EE98654EFCE6B43B778F13126 | vix64.dll | MSIL/PNGLoader.A | PNGโหลดเดอร์. |
728A6CB7A150141B4250659CF853F39BFDB7A46C | RarExtMgt.dll | MSIL/PNGLoader.A | PNGโหลดเดอร์. |
864E55749D28036704B6EA66555A86527E02AF4A | Jsprofile.dll | MSIL/PNGLoader.A | PNGโหลดเดอร์. |
8DA6387F30C584B5FD3694A99EC066784209CA4C | vssxml.dll | MSIL/PNGLoader.A | PNGโหลดเดอร์. |
AA60FB4293530FBFF00D200C0D44EEB1A17B1C76 | xsec_1_5.dll | MSIL/PNGLoader.A | PNGโหลดเดอร์. |
B2EAEC695DD8BB518C7E24C4F37A08344D6975BE | msvbvm80.dll | MSIL/PNGLoader.A | PNGโหลดเดอร์. |
CDB6B1CAFEE098615508F107814179DEAED1EBCF | lucenelib.dll | MSIL/PNGLoader.A | PNGโหลดเดอร์. |
4F9A43E6CF37FF20AE96E564C93898FDA6787F7D | vsstrace.dll | Win64/CLRLLoad.C | CLRโหลด |
F181E87B0CD6AA4575FD51B9F868CA7B27240610 | crypto.dll | Win32/CLRLLoad.A | CLRโหลด |
4CCF0386BDE80C339EFE0CC734CB497E0B08049C | crypto.dll | Win32/CLRLLoad.A | CLRโหลด |
5CFC0D776AF023DCFE8EDED5CADA03C6D7F9C244 | wlbsctrl.dll | Win64/CLRLLoad.E | CLRโหลด |
05F19EBF6D46576144276090CC113C6AB8CCEC08 | wlbsctrl.dll | Win32/CLRLLoad.A | CLRโหลด |
A5D548543D3C3037DA67DC0DA47214B2C2B15864 | Secure32.dll | Win64/CLRLLoad.H | CLRโหลด |
CBF42DCAF579AF7E6055237E524C0F30507090F3 | dbghelp.dll | Win64/CLRLLoad.C | CLRโหลด |
เส้นทางไฟล์
บางส่วนของ เส้นทางหลัก, LogFilePath และ ถ้า LogFilePath ค่าที่เราพบใน PNGLoad ตัวอย่าง:
เส้นทางหลัก | LogFilePath | ถ้า LogFilePath |
---|---|---|
C: ไฟล์โปรแกรม VMware VMware Tools | C:ไฟล์โปรแกรมVMwareVMware ToolsVMware VGAuthreadme.txt | C:ไฟล์โปรแกรมVMwareVMware ToolsVMware VGAuthVMWSU_V1_1.dll |
C:โปรแกรมไฟล์WinRar | C:โปรแกรม FilesWinRarrarinstall.log | C:โปรแกรม FilesWinRardes.dat |
C:โปรแกรม FilesUltraViewer | C:โปรแกรม FilesUltraViewerCopyRights.dat | C:โปรแกรม FilesUltraVieweruvcr.dll |
เครือข่าย
โดเมน | IP |
---|---|
ไม่มี | 118.193.78[.]22 |
ไม่มี | 118.193.78[.]57 |
เครื่องบิน.ท่องเที่ยว-พาณิชย์[.]หน่วยงาน | 5.183.101[.]9 |
central.suhypercloud[.]org | 45.77.36[.]243 |
มิวเท็กซ์
ในตัวอย่าง CLRLoad ชื่อ mutex ที่เราพบคือ:
aB82UduGX0EX
ad8TbUIZl5Ga
นาย2PJVxbIBD4
oERiQtKLgPgK
U37uxsCsA4Xm
Wo0r0KGทำไมYGO
xBUjQR2vxYTz
zYCLBWekRX3t
3c3401ad-e77d-4142-8db5-8eb5483d7e41
9xvzMsaWqxของฉัน
รายการตัวบ่งชี้ประนีประนอม (IoC) และตัวอย่างที่ครอบคลุมสามารถดูได้ใน ที่เก็บ GitHub ของเรา.
เทคนิค MITER ATT&CK
ตารางนี้ถูกสร้างขึ้นโดยใช้ 11 รุ่น ของกรอบงาน MITER ATT&CK
ชั้นเชิง | ID | Name | รายละเอียด |
---|---|---|---|
การลาดตระเวน | T1592.002 | รวบรวมข้อมูลโฮสต์เหยื่อ: ซอฟต์แวร์ | PowHeartBeat รวมตัวกัน explorer.exe ของ ข้อมูล |
T1592.001 | รวบรวมข้อมูลโฮสต์เหยื่อ: ฮาร์ดแวร์ | PowHeartBeat รวบรวมข้อมูลเกี่ยวกับไดรฟ์ | |
T1590.005 | รวบรวมข้อมูลเครือข่ายเหยื่อ: ที่อยู่ IP | PowHeartBeat รวบรวมที่อยู่ IP ของคอมพิวเตอร์ที่ถูกบุกรุก | |
การพัฒนาทรัพยากร | T1583.004 | รับโครงสร้างพื้นฐาน: เซิร์ฟเวอร์ | Worok ใช้เซิร์ฟเวอร์ C&C ของตัวเอง |
T1588.002 | รับความสามารถ: เครื่องมือ | Worok ปรับใช้เครื่องมือที่เปิดเผยต่อสาธารณะหลายเครื่องบนเครื่องที่ถูกบุกรุก | |
T1583.001 | รับโครงสร้างพื้นฐาน: โดเมน | Worok มีโดเมนที่จดทะเบียนเพื่ออำนวยความสะดวกในการสื่อสารและการแสดงละคร C&C | |
T1588.005 | ได้รับความสามารถ: Exploits | Worok ใช้ช่องโหว่ ProxyShell | |
T1587.001 | พัฒนาความสามารถ: มัลแวร์ | Worok ได้พัฒนามัลแวร์ของตัวเอง: CLRLoad, PNGLoad, PowHeartBeat | |
T1587.003 | พัฒนาความสามารถ: ใบรับรองดิจิทัล | Worok ได้สร้างใบรับรอง Let's Encrypt SSL เพื่อเปิดใช้งานการตรวจสอบ TLS ร่วมกันสำหรับมัลแวร์ | |
การกระทำ | T1059.001 | ล่ามคำสั่งและสคริปต์: PowerShell | PowHeartBeat เขียนด้วย PowerShell |
การติดตา | T1505.003 | ส่วนประกอบซอฟต์แวร์เซิร์ฟเวอร์: Web Shell | Worok ใช้ webshell รีจอร์จ. |
การหลบหลีกการป้องกัน | T1140 | ถอดรหัสซอร์สโค้ดที่สร้างความสับสน/ถอดรหัสไฟล์หรือข้อมูล | Worok ใช้ชุดรูปแบบ XOR แบบกำหนดเองที่หลากหลายเพื่อเข้ารหัสสตริงและบันทึกใน PowHeartBeat, PNGLoad และ CLRLoad |
T1036.005 | การปลอมแปลง: จับคู่ชื่อหรือสถานที่ที่ถูกต้องตามกฎหมาย | ตัวอย่าง PNGLoad ถูกปรับใช้ในไดเร็กทอรี VMWare ที่ดูถูกกฎหมาย | |
การเข้าถึงข้อมูลประจำตัว | T1003.001 | OS Credential Dumping: หน่วยความจำ LSASS | Worok ใช้ Mimikatz เพื่อถ่ายโอนข้อมูลรับรองจากหน่วยความจำ LSASS |
การค้นพบ | T1082 | การค้นพบข้อมูลระบบ | PowHeartBeat รวบรวมข้อมูลระบบปฏิบัติการ |
T1083 | การค้นหาไฟล์และไดเรกทอรี | PowHeartBeat สามารถแสดงรายการไฟล์และไดเร็กทอรี | |
T1046 | การค้นพบบริการเครือข่าย | Worok ใช้ เอ็นบีทีสแกน เพื่อรับข้อมูลเครือข่ายบนเครื่องที่ถูกบุกรุก | |
T1124 | การค้นพบเวลาของระบบ | PowHeartBeat รวบรวมข้อมูลเวลาของเหยื่อ | |
ชุด | T1005 | ข้อมูลจาก Local System | PowHeartBeat รวบรวมข้อมูลจากระบบภายใน |
T1560.002 | เก็บข้อมูลที่เก็บถาวร: เก็บถาวรผ่านห้องสมุด | PowHeartBeat gzip-บีบอัดข้อมูลก่อนที่จะส่งไปยังเซิร์ฟเวอร์ C&C | |
ควบคุมและสั่งการ | T1071.001 | Application Layer Protocol: โปรโตคอลเว็บ | PowHeartBeat บางรุ่นใช้ HTTP เป็นโปรโตคอลการสื่อสารกับเซิร์ฟเวอร์ C&C |
T1090.001 | พร็อกซี่: พร็อกซีภายใน | PowHeartBeat จัดการการกำหนดค่าพร็อกซีบนเครื่องของเหยื่อ | |
T1001.002 | ข้อมูลสับสน: Steganography | PNGLoad ดึงค่าพิกเซลจาก . Png ไฟล์เพื่อสร้างเพย์โหลดใหม่ | |
T1573.002 | ช่องที่เข้ารหัส: การเข้ารหัสแบบอสมมาตร | PowHeartBeat จัดการการสื่อสาร HTTPS กับเซิร์ฟเวอร์ C&C | |
T1095 | โปรโตคอลเลเยอร์ที่ไม่ใช่แอปพลิเคชัน | PowHeartBeat บางรุ่นใช้ ICMP เป็นโปรโตคอลการสื่อสารกับเซิร์ฟเวอร์ C&C | |
T1132.001 | การเข้ารหัสข้อมูล: การเข้ารหัสมาตรฐาน | Worok ใช้การเข้ารหัส XOR ใน PowHeartBeat และ PNGLoad | |
T1132.002 | การเข้ารหัสข้อมูล: การเข้ารหัสที่ไม่ได้มาตรฐาน | Worok ใช้อัลกอริทึมการเข้ารหัส XOR ที่ใช้เกลือเพิ่มเติม | |
การกรอง | T1041 | การกรองผ่านช่อง C2 | PowHeartBeat ใช้ช่องทางการสื่อสาร C&C เพื่อกรองข้อมูล |
- blockchain
- เหรียญอัจฉริยะ
- กระเป๋าสตางค์ cryptocurrency
- การแลกเปลี่ยนการเข้ารหัสลับ
- การรักษาความปลอดภัยในโลกไซเบอร์
- อาชญากรไซเบอร์
- cybersecurity
- กรมความมั่นคงภายในประเทศ
- กระเป๋าสตางค์ดิจิตอล
- การวิจัย ESET
- ไฟร์วอลล์
- Kaspersky
- มัลแวร์
- แมคคาฟี
- เน็กซ์บล๊อก
- เพลโต
- เพลโตไอ
- เพลโตดาต้าอินเทลลิเจนซ์
- เกมเพลโต
- เพลโตดาต้า
- เพลโตเกม
- VPN
- เราอยู่การรักษาความปลอดภัย
- ความปลอดภัยของเว็บไซต์
- ลมทะเล