เพลโต ดาต้า อินเทลลิเจนซ์
ค้นหาแนวตั้ง & Ai

ฉายแสงบน AceCryptor และการทำงานของมัน

วันที่:

ในบล็อกโพสต์นี้ เราตรวจสอบการทำงานของ AceCryptor ซึ่งเดิมมีการบันทึกไว้ โดย Avast. cryptor นี้มีมาตั้งแต่ปี 2016 และเนื่องจาก – ตลอดการมีอยู่ของมัน – มันถูกใช้ในการแพ็คตระกูลมัลแวร์นับสิบตระกูล ส่วนทางเทคนิคจำนวนมากของมัลแวร์นี้ได้รับการอธิบายไว้แล้ว คุณอาจได้อ่านเกี่ยวกับ cryptor นี้แล้ว ซึ่งรู้จักกันในชื่อต่างๆ ความยุ่งเหยิงของ DJVU, ด่านของ SmokeLoader 1, สเตจ 1, 2 และ 3 ของผู้ขโมย RedLine, เครื่องบรรจุหีบห่อที่เรียบง่ายและเป็นที่นิยมและอื่น ๆ ... บล็อกโพสต์ที่เผยแพร่จำนวนมาก (แต่ไม่ใช่ทั้งหมด) ไม่รู้จักด้วยซ้ำว่า cryptor นี้เป็นตระกูลมัลแวร์ที่แยกจากกัน ดังนั้น ให้เราเชื่อมโยงจุดทั้งหมดให้คุณ ไม่เพียงให้การวิเคราะห์ทางเทคนิคของรูปแบบต่าง ๆ เท่านั้น แต่ยังรวมถึง ภาพรวมของตระกูลมัลแวร์ที่สามารถพบได้และ AceCryptor ที่แพร่หลายอยู่ในธรรมชาติ

สำหรับผู้เขียนมัลแวร์ การปกป้องการสร้างสรรค์ของตนจากการตรวจจับถือเป็นงานที่ท้าทาย Cryptors เป็นการป้องกันชั้นแรกสำหรับมัลแวร์ที่แพร่กระจาย แม้ว่าผู้ก่อภัยคุกคามจะสามารถสร้างและบำรุงรักษา cryptor แบบกำหนดเองของตนเองได้ แต่สำหรับผู้ก่อภัยคุกคามจาก crimeware มักจะเป็นงานที่ใช้เวลานานหรือยากทางเทคนิคในการบำรุงรักษา cryptor ของพวกเขาในสถานะที่เรียกว่า FUD (ตรวจไม่พบโดยสมบูรณ์) ความต้องการการปกป้องดังกล่าวได้สร้างขึ้นมากมาย cryptor-as-บริการ (CaaS) ตัวเลือกที่บรรจุมัลแวร์ การเข้ารหัสเหล่านี้สามารถรวมเอาเทคนิคต่อต้าน VM, การต่อต้านการดีบั๊ก และการป้องกันการวิเคราะห์หลาย ๆ อย่างเข้าด้วยกันเพื่อให้เกิดการปกปิดของเพย์โหลด

ประเด็นสำคัญของบล็อกโพสต์นี้:

  • AceCryptor ให้บริการบรรจุแก่ตระกูลมัลแวร์ที่รู้จักกันดีนับสิบตระกูล
  • ตัวอย่างของ AceCryptor นั้นแพร่หลายมากทั่วโลก เนื่องจากผู้คุกคามหลายรายที่ใช้มันแพร่กระจายมัลแวร์ที่อัดแน่นอยู่ในแคมเปญของพวกเขาเอง
  • AceCryptor มีความซับซ้อนอย่างมากและตลอดหลายปีที่ผ่านมาได้รวมเอาเทคนิคมากมายเพื่อหลีกเลี่ยงการตรวจจับ
  • AceCryptor มีหลายตัวแปรที่อธิบายไว้ในโพสต์บล็อกนี้
  • แม้ว่าจะเป็นไปได้ที่จะพบการวิเคราะห์ทางเทคนิค (โดยส่วนใหญ่ที่การเข้ารหัสลับนี้ปรากฏเป็นส่วนหนึ่ง/ขั้นตอนของมัลแวร์อื่นๆ) ที่ทำโดยนักวิจัยคนอื่นๆ ESET Research มีเป้าหมายที่จะไม่เพียงแต่ให้ภาพรวมที่ครอบคลุมเกี่ยวกับฟังก์ชันการทำงานของ AceCryptor เท่านั้น แต่ยังรวมถึงประวัติและการแพร่กระจายของมันด้วย
  • ในช่วงปี 2021 และ 2022 ESET ได้ปกป้องลูกค้ามากกว่า 80,000 รายที่ได้รับผลกระทบจากมัลแวร์ที่บรรจุโดย AceCryptor

สถิติและภาพรวมของครอบครัวที่แออัด

นับตั้งแต่การปรากฏตัวครั้งแรกของ AceCryptor ในปี 2016 ผู้เขียนมัลแวร์จำนวนมากได้ใช้บริการของรหัสลับนี้ แม้แต่ซอฟต์แวร์อาชญากรรมที่เป็นที่รู้จักดีที่สุดอย่าง Emotet เมื่อตอนที่มันไม่ได้ใช้รหัสลับของตัวเอง ในช่วงปี 2021–2022 ESET ตรวจพบตัวอย่าง AceCryptor ที่ไม่ซ้ำกันมากกว่า 80,000 ตัวอย่าง เนื่องจากตระกูลมัลแวร์ต่าง ๆ จำนวนมากบรรจุอยู่ภายใน เราถือว่า AceCryptor ถูกขายที่ไหนสักแห่งในรูปแบบ CaaS หากเราคำนึงถึงจำนวนของไฟล์ที่ไม่ซ้ำกันที่ตรวจพบ: แม้ว่าเราจะไม่ทราบราคาที่แน่นอนของบริการนี้ เราคิดว่ากำไรที่ได้รับจากผู้เขียน AceCryptor นั้นไม่สำคัญ

เนื่องจากตัวอย่างมีปริมาณมากในช่วงหลายปีที่ผ่านมา สถิติต่อไปนี้จึงอ้างอิงจากตัวอย่างที่ตรวจพบระหว่างปี 2021 และ 2022 เท่านั้น ดังที่เห็นในรูปที่ 1 การตรวจพบถูกกระจายอย่างเท่าเทียมกันตลอดสองปีนี้ ซึ่งคาดว่าจะได้จาก มัลแวร์ที่ใช้โดยผู้คุกคามจำนวนมากที่ไม่ซิงโครไนซ์แคมเปญของพวกเขา

รูปที่ 1 จำนวนการตรวจจับ AceCryptor ในช่วงปี 2021 และ 2022 (ค่าเฉลี่ยเคลื่อนที่ 7 วัน)

หลังจากดูมัลแวร์ที่บรรจุโดย AceCryptor เราพบชื่อการตรวจจับ ESET มากกว่า 200 ชื่อ ตอนนี้ แน่นอนว่าตระกูลมัลแวร์หนึ่งตระกูลอาจมีชื่อการตรวจจับหลายชื่อในแต่ละสายพันธุ์ เนื่องจากการอัปเดตหรือการเปลี่ยนแปลงในการทำให้งงงวย เช่น MSIL/Spy.RedLine.A และ MSIL/Spy.RedLine.B ต่างก็เป็นการตรวจจับมัลแวร์ RedLine Stealer . ชื่อการตรวจจับสำหรับมัลแวร์อื่นๆ บางตัวไม่ได้แยกตามตระกูล แต่แยกตามคลาส (เช่น ClipBanker หรือ Agent) เนื่องจากตัวอย่างมัลแวร์ที่ไม่ได้แพ็คจำนวนมากคือตัวขโมยคลิปบอร์ดทั่วไป โทรจัน และอื่นๆ ที่ไม่แพร่หลายและ/หรือมีเพียงเล็กน้อย ตัวแปรที่แก้ไขของมัลแวร์ที่รู้จักอื่น ๆ ที่เผยแพร่ในที่เก็บข้อมูลสาธารณะต่างๆ หลังจากจัดกลุ่ม เราสามารถสรุปได้ว่าหลังจากแกะกล่องแล้ว กลุ่มมัลแวร์ที่พบได้แก่ SmokeLoader, RedLine Stealer, RanumBot, Raccoon Stealer, STOP ransomware, Amadey, Fareit, Pitou, Tofsee, Taurus, Phobos, Formbook, Danabot, Warzone และอื่นๆ อีกมากมาย … รูปที่ 2 แสดงภาพรวมของจำนวนตัวอย่างที่เป็นของตระกูลมัลแวร์ที่รู้จักกันดีและแพร่หลายซึ่งบรรจุโดย AceCryptor

รูปที่ 2 กลุ่มมัลแวร์ที่บรรจุใน AceCryptor ระหว่างปี 2021 และ 2022

การตรวจสอบกิจกรรมของผู้ให้บริการ CaaS เช่น AceCryptor มีประโยชน์สำหรับการตรวจสอบมัลแวร์ที่ใช้บริการของพวกเขา ตัวอย่างเช่น พิจารณา RedLine Stealer ที่เห็นครั้งแรกในไตรมาสที่ 1 ปี 2022 ดังที่เห็นได้ในรูปที่ 3 ผู้จัดจำหน่าย RedLine Stealer ใช้ AceCryptor ตั้งแต่จุดเริ่มต้นของการมีอยู่ของ RedLine Stealer และยังคงทำเช่นนั้นต่อไป ดังนั้น ความสามารถในการตรวจจับ AceCryptor (และ CaaS อื่นๆ) ที่เชื่อถือได้ไม่เพียงแต่ช่วยให้เรามองเห็นภัยคุกคามที่เกิดขึ้นใหม่เท่านั้น แต่ยังช่วยในการติดตามกิจกรรมของผู้คุกคามอีกด้วย

ภาพที่ 3 เหตุการณ์ RedLine Stealer ในตัวอย่าง AceCryptor (ค่าเฉลี่ย 7 วัน)

victimology

ตามที่ควรจะคาดหวังจากความหลากหลายของมัลแวร์ที่บรรจุใน AceCryptor และความสนใจที่หลากหลายของผู้เขียนมัลแวร์ที่แตกต่างกัน AceCryptor พบเห็นได้ทุกที่ในโลก ในช่วงปี 2021 และ 2022 ESET telemetry ตรวจพบมัลแวร์นี้มากกว่า 240,000 ครั้ง ซึ่งมีจำนวนมากกว่า 10,000 ครั้งทุกเดือน ในรูปที่ 4 คุณจะเห็นประเทศที่มีจำนวนการตรวจพบสูงสุดในช่วงปี 2021 และ 2022

รูปที่ 4 แผนที่ความร้อนของประเทศที่ได้รับผลกระทบจาก AceCryptor ตาม ESET telemetry

ในช่วงปี 2021 และ 2022 ผลิตภัณฑ์ของ ESET ตรวจพบและบล็อกมัลแวร์สายพันธุ์ต่างๆ ที่บรรจุโดย AceCryptor ในคอมพิวเตอร์ของลูกค้ามากกว่า 80,000 เครื่อง เรายังค้นพบตัวอย่าง AceCryptor ที่ไม่ซ้ำกันกว่า 80,000 ตัวอย่าง ตอนนี้ แน่นอนว่าสามารถตรวจพบตัวอย่างใดๆ ในคอมพิวเตอร์หลายเครื่องหรือคอมพิวเตอร์เครื่องเดียวได้รับการปกป้องหลายครั้งโดยซอฟต์แวร์ ESET แต่จำนวนแฮชที่ไม่ซ้ำกันแสดงให้เห็นว่าผู้เขียน AceCryptor ทำงานอย่างไรในการทำให้งงงวยและการหลบเลี่ยงการตรวจจับ เราจะลงลึกในรายละเอียดทางเทคนิคของการทำให้งงงวยของ AceCryptor ใน การวิเคราะห์ทางเทคนิค ส่วนหนึ่งของบล็อกโพสต์นี้

สิ่งที่ควรค่าแก่การกล่าวถึงในที่นี้ก็คือ แม้ว่าจำนวนตัวอย่างที่ไม่ซ้ำกันของ AceCryptor จะสูงมาก แต่จำนวนตัวอย่างที่ไม่ซ้ำกันที่บรรจุอยู่ภายในนั้นน้อยกว่า 7,000 ตัวอย่าง สิ่งนี้แสดงให้เห็นถึงระดับที่ผู้เขียนมัลแวร์จำนวนมากพึ่งพาบริการของ cryptor และความสะดวกสบายสำหรับพวกเขาในการชำระค่าบริการประเภทนี้ แทนที่จะลงทุนเวลาและทรัพยากรเพื่อใช้งานโซลูชัน cryptor ของตนเอง

การกระจาย

เนื่องจาก AceCryptor ถูกใช้โดยผู้คุกคามหลายคน มัลแวร์ที่บรรจุโดยมันจึงกระจายไปในหลายวิธีเช่นกัน จากข้อมูลของ ESET telemetry อุปกรณ์ต่าง ๆ เผชิญกับมัลแวร์ที่บรรจุ AceCryptor ส่วนใหญ่ผ่านทางโปรแกรมติดตั้งโทรจันของซอฟต์แวร์ละเมิดลิขสิทธิ์ หรืออีเมลสแปมที่มีไฟล์แนบที่เป็นอันตราย

อีกวิธีหนึ่งที่บางคนอาจได้รับมัลแวร์ที่บรรจุ AceCryptor คือผ่านมัลแวร์อื่นที่ดาวน์โหลดมัลแวร์ใหม่ที่ป้องกันโดย AceCryptor ตัวอย่างคือบอตเน็ต Amadey ซึ่งเราสังเกตเห็นการดาวน์โหลด RedLine Stealer ที่บรรจุ AceCryptor

เราต้องการทราบว่าวิธีนี้ใช้ได้ทั้ง XNUMX วิธี และตระกูลมัลแวร์บางตัวที่ป้องกันโดย AceCryptor ยังสามารถดาวน์โหลดมัลแวร์ใหม่เพิ่มเติมได้อีกด้วย

การวิเคราะห์ทางเทคนิค

ปัจจุบัน AceCryptor ใช้สถาปัตยกรรมสามชั้นแบบหลายขั้นตอน มีสองเวอร์ชันที่รู้จักของเลเยอร์แรกที่ใช้อยู่ในปัจจุบัน – เวอร์ชันที่ใช้ ชา (อัลกอริธึมการเข้ารหัสขนาดจิ๋ว) เพื่อถอดรหัสเลเยอร์ที่สองและเป็นเวอร์ชันที่ใช้ เครื่องกำเนิดความสอดคล้องเชิงเส้น (LCG) จาก Microsoft Visual/Quick/C++ เพื่อถอดรหัสเลเยอร์ที่สอง ชั้นที่สองคือรหัสเชลล์ที่ใช้กลอุบายป้องกัน จากนั้นถอดรหัสและเรียกใช้ชั้นที่สาม สุดท้าย เลเยอร์ที่สามเป็นรหัสเชลล์เพิ่มเติมที่ดำเนินการกับกลอุบายต่อต้านการสืบสวน และหน้าที่ของมันคือเปิดเพย์โหลด เลเยอร์ที่สามที่รู้จักมีอยู่สองเวอร์ชัน: เวอร์ชันหนึ่งทำกระบวนการกลวง ในขณะที่อีกเวอร์ชันใช้ตัวโหลดแบบสะท้อนแสงและเขียนทับอิมเมจของตัวเองด้วย PE ของเพย์โหลดสุดท้าย

รูปที่ 5. สถาปัตยกรรมของ AceCryptor

เลเยอร์ 1

แม้ว่าเลเยอร์ 1 จะมีสองเวอร์ชัน แต่ก็ทำงานคล้ายกันมาก สรุปภารกิจหลักได้ดังนี้

  1. โหลดเลเยอร์ 2 ที่เข้ารหัสลงในหน่วยความจำที่จัดสรร
  2. ถอดรหัสเลเยอร์ 2
  3. โทรหรือข้ามไปที่เลเยอร์ 2

ส่วนที่สำคัญที่สุดของขั้นตอนนี้คือการทำให้งงงวย ตลอดหลายปีที่ผ่านมา มีการเพิ่มการทำให้ยุ่งเหยิงใหม่ ๆ จนถึงจุดที่เกือบทุกส่วนของไบนารีถูกสุ่มและทำให้ยุ่งเหยิง สิ่งนี้จะทำให้เกิดปัญหาใหญ่สำหรับผู้ที่พยายามสร้างกฎ YARA หรือการตรวจจับแบบคงที่

ลูป

ผู้เขียนใช้ประโยชน์จากการวนลูปเพื่อทำให้งงงวยหลายครั้ง เทคนิคแรกและตรงไปตรงมาที่สุดคือการใช้ลูปกับรหัสขยะเพื่อทำให้การวิเคราะห์ยากขึ้น เราได้เห็นการใช้รหัสขยะตั้งแต่ปี 2016 เมื่อเราลงทะเบียนตัวอย่างแรกของ AceCryptor ลูปเหล่านี้เต็มไปด้วยการเรียกใช้ API จำนวนมาก ซึ่งไม่เพียงแต่ทำให้นักวิเคราะห์ที่ไม่รู้ว่าเกิดอะไรขึ้นช้าลงเท่านั้น แต่ยังทำให้บันทึกของแซนด์บ็อกซ์ที่เชื่อมต่อการเรียก API ล้นหลาม ซึ่งทำให้การเรียก API ไร้ประโยชน์ ลูปอาจมีคำสั่ง MOV และการดำเนินการทางคณิตศาสตร์จำนวนมาก อีกครั้งเพียงเพื่อสร้างความสับสนให้กับนักวิเคราะห์และทำให้เวลาในการวิเคราะห์ยาวนานขึ้น

รูปที่ 6 การทำให้ยุ่งเหยิงของ AceCryptor ด้วยการวนซ้ำและการซ่อนส่วนสำคัญของโค้ด

การใช้ลูปที่สองคือการ บรรลุความล่าช้า. เราสังเกตเห็นว่า AceCryptor บางเวอร์ชันเปิดตัวเลเยอร์ 2 แทบจะทันที แต่บางเวอร์ชันมีการวนซ้ำซึ่งต้องใช้เวลามากจนทำให้การดำเนินการช้าลงแม้จะเป็นสิบนาที: การชะลอการดำเนินการของมัลแวร์บางส่วนเป็นเทคนิคที่ทราบกันดี แต่ การใช้การเรียก API เช่น Sleep อาจเพิ่มการตั้งค่าสถานะบางอย่างแล้ว แม้ว่าจะไม่ใช่ แต่แซนด์บ็อกซ์บางตัวก็ชอบ แซนด์บ็อกซ์นกกาเหว่า ใช้เทคนิคการข้ามการนอนหลับเพื่อหลีกเลี่ยงความล่าช้าและดำเนินการต่อไปยังส่วนที่น่าสนใจ การใช้การหน่วงเวลาผ่านลูปและการดำเนินการโค้ดขยะยังเป็นความยุ่งยากระหว่างการวิเคราะห์แบบไดนามิก เนื่องจากนักวิเคราะห์ต้องระบุว่าลูปใดเป็นลูปขยะ จึงสามารถข้ามไปได้

เทคนิคการทำให้งงงวยที่สามโดยใช้ลูปประกอบด้วยการซ่อนการดำเนินการที่สำคัญในนั้น ในบรรดา Junk Loops มีบางอย่างที่รอการวนซ้ำบางอย่างและระหว่างการวนซ้ำนั้นมีบางอย่างเกิดขึ้น โดยปกติแล้ว API จะถูกโหลดโดยใช้ รับที่อยู่ Procซึ่งใช้ในภายหลังหรือค่าคงที่บางอย่าง เช่น ค่าชดเชยของข้อมูลที่เข้ารหัสจะถูกเปิดโปง ถ้าการวนซ้ำนั้นไม่เกิดขึ้น ตัวอย่างจะพังในภายหลัง เมื่อใช้ร่วมกับโค้ดขยะ หมายความว่าในการวิเคราะห์มัลแวร์แบบไดนามิก ขั้นแรกต้องวิเคราะห์ว่าการวนซ้ำหรือการวนซ้ำใดที่สามารถข้ามได้และไม่สามารถข้ามได้ ซึ่งหมายความว่านักวิเคราะห์สามารถใช้เวลาในการวิเคราะห์รหัสขยะหรือรอจนกว่ารหัสขยะทั้งหมดจะถูกดำเนินการ ในรูปที่ 6 คุณจะเห็นการวนซ้ำสองลูป โดยที่อันแรกประกอบด้วยการดำเนินการที่สำคัญสำหรับการดำเนินการในภายหลัง และอีกอันเต็มไปด้วยโค้ดขยะ แน่นอนว่าสิ่งนี้อาจไม่ใช่ (และไม่ใช่ในตัวอย่างส่วนใหญ่) ที่มองเห็นได้ง่ายในลูปทั้งหมด โดยเฉพาะอย่างยิ่งหากลูปที่มีการดำเนินการที่สำคัญมีรหัสขยะอยู่ด้วย

การสุ่ม - คุณจะไม่ใช่ YARA

อีกส่วนที่สำคัญของเลเยอร์แรกคือการสุ่ม โค้ดขยะและลูปที่กล่าวถึงก่อนหน้านี้จะถูกสุ่มในแต่ละตัวอย่าง ในลักษณะที่:

  • จำนวนการเปลี่ยนแปลงซ้ำ
  • การเปลี่ยนแปลงการเรียก API
  • จำนวนการเรียก API เปลี่ยนไป และ
  • การเปลี่ยนแปลงคำสั่งทางคณิตศาสตร์ขยะหรือ MOV

การสุ่มทั้งหมดนี้อาจทำให้การระบุอัลกอริทึมและคีย์การถอดรหัสค่อนข้างซับซ้อน ในรูปที่ 7 และรูปที่ 8 คุณจะเห็นอัลกอริทึมของ TEA เวอร์ชันดั้งเดิมที่ไม่สร้างความสับสนและไม่ซับซ้อน ในเวอร์ชันที่คลุมเครือนั้นไม่ได้มีเพียงคำแนะนำทางคณิตศาสตร์ขยะเท่านั้น แต่ยังมีบางส่วนของอัลกอริทึมที่สรุปเป็นรูทีนย่อยและค่าคงที่ที่ทราบ (ผลรวมและเดลต้าในรูปที่ 7) ถูกปกปิดไว้ เพื่อให้การระบุอัลกอริทึมที่ถูกต้องไม่น่าจะเป็นไปได้หรือยากขึ้นอย่างแน่นอน .

รูปที่ 7. ฟังก์ชันถอดรหัส TEA – ไม่ซับซ้อน

รูปที่ 8 ฟังก์ชันถอดรหัส TEA – สับสน

รหัสไม่ใช่สิ่งเดียวที่ถูกสุ่ม โดยปกติแล้วเลเยอร์ 2 ที่เข้ารหัสและคีย์ถอดรหัสจะถูกเก็บไว้ใน .ข้อความ or .ข้อมูล ส่วน แต่ถูกซ่อนไว้โดยใช้การชดเชยบางอย่างที่เปลี่ยนแปลงระหว่างตัวอย่าง นอกจากนี้ หลังจากถอดรหัสเลเยอร์ 2 สำเร็จแล้ว: ในบางตัวอย่างโค้ดของเลเยอร์ 2 จะอยู่ที่จุดเริ่มต้นของข้อมูลที่ถอดรหัส แต่มีตัวอย่างที่คุณลงท้ายด้วยกลุ่มข้อมูลสุ่มที่จุดเริ่มต้น และคุณจำเป็นต้องรู้ออฟเซ็ตที่ถูกต้อง เพื่อค้นหาจุดเริ่มต้นของโค้ดของ Layer 2

ผู้เขียน AceCryptor ยังสุ่มลักษณะดังต่อไปนี้:

  • เส้นทาง PDB จะเริ่มต้นด้วยเสมอ C:แต่เส้นทางที่เหลือจะเป็นแบบสุ่ม
  • แหล่งข้อมูลที่มีชื่อและเนื้อหาแบบสุ่มดังแสดงในรูปที่ 9 ผู้เขียน AceCryptor เติมตัวอย่างด้วยทรัพยากรที่สร้างขึ้นแบบสุ่มซึ่งมีข้อมูลที่สร้างขึ้นแบบสุ่ม เราคิดว่าการดำเนินการนี้จะทำให้ตัวอย่างมีความน่าสงสัยน้อยลงและทำให้การค้นหาข้อมูลที่เข้ารหัสจริงทำได้ยากขึ้น ทรัพยากรสามารถประกอบด้วย:
    • ตารางสตริง
    • เมนู
    • บิตแมป
    • ข้อมูลไบนารี
  • สตริงที่ใช้ในโค้ด
  • ไอคอน – แม้ว่าไอคอนที่ใช้ในตัวอย่างจำนวนมากจะดูคล้ายกัน แต่จะมีการปรับเปลี่ยน/สุ่มเล็กน้อยเพื่อให้ไม่ซ้ำกัน
  • ชื่อส่วนจำลองแบบสุ่ม
  • ฟังก์ชันการจัดสรรหน่วยความจำสำหรับข้อมูลเลเยอร์ 2 – GlobalAlloc, LocalAllocและ VirtualAlloc.
  • การใช้ API บางอย่างที่สำคัญต่อการดำเนินการโค้ด - อาจนำเข้าหรือได้รับแบบคงที่ผ่านทาง รับ ModuleHandleA และ รับที่อยู่ Proc.

รูปที่ 9 ทรัพยากรของ AceCryptor ถูกสร้างขึ้นแบบสุ่มพร้อมเนื้อหาที่สร้างขึ้นแบบสุ่มเพื่อทำให้ตัวอย่างมีความน่าสงสัยน้อยลง

รูปที่ 10 สตริงสุ่มของ AceCryptor ในทรัพยากร

รุ่นก่อนหน้านี้

ในช่วงหลายปีที่ผ่านมา ผู้เขียน AceCryptor มีความเชี่ยวชาญมากขึ้นในการพัฒนามัลแวร์ และตัวเข้ารหัสก็มีการเปลี่ยนแปลงและพัฒนาไป แม้ว่าจะมีการเปลี่ยนแปลง อัปเดต และปรับปรุงเล็กๆ น้อยๆ มากมาย แต่ฟีเจอร์ที่น่าสนใจของ Layer 1 เวอร์ชันเก่าก็มีดังต่อไปนี้:

  • ในช่วงปี 2016 AceCryptor ใช้เวอร์ชันของเลเยอร์ 1 พร้อมอัลกอริทึมการเข้ารหัส XTEA
  • ในช่วงปี 2017–2018 AceCryptor ใช้เวอร์ชัน Layer 1 อีกหนึ่งเวอร์ชัน โดยที่อัลกอริทึมการเข้ารหัสที่ใช้คือ RC4
  • เลเยอร์ 1 (X)TEA และ LCG เวอร์ชันแรกปรากฏขึ้นในปี 2016 ซึ่งแตกต่างจากเวอร์ชัน LCG เวอร์ชัน XTEA เลิกใช้อย่างรวดเร็วและถูกแทนที่ด้วยเวอร์ชัน TEA
  • ในเวอร์ชันเก่า เลเยอร์ 2 ที่เข้ารหัสอยู่ในทรัพยากรที่ซ่อนอยู่ในอิมเมจ BMP ภาพนี้สร้างขึ้นแบบสุ่มโดยมีความกว้างและความสูงแบบสุ่ม และตรงกลางของภาพถูกตัดออกและแทนที่ด้วยข้อมูลที่เข้ารหัส ต้องพบข้อมูลที่ออฟเซ็ตที่ถูกต้อง

เลเยอร์ 2

เลเยอร์ 2 ของ AceCryptor ปรากฏขึ้นในปี 2019 ก่อนหน้านั้น AceCryptor ได้เปิดตัวเลเยอร์ 3 โดยตรงจากเลเยอร์ 1 เลเยอร์นี้ทำหน้าที่เป็นการเข้ารหัสและการป้องกันเพิ่มเติมของเลเยอร์ 3 และดังรูปที่ 11 แสดงให้เห็น ประกอบด้วยสามส่วน:

  • รหัสไม่ขึ้นกับตำแหน่ง
  • โครงสร้างแบบกำหนดเองที่เราตั้งชื่อ L2_INFO_STRUCTซึ่งมีข้อมูลเกี่ยวกับเลเยอร์ 3 และ
  • ข้อมูลของ Layer 3

รูปที่ 11 โครงสร้างเลเยอร์ 2 ของ AceCryptor

ในขั้นตอนแรก AceCryptor ใช้เทคนิคทั่วไปเพื่อรับที่อยู่ฟังก์ชัน API บางอย่าง มันแก้ปัญหา รับที่อยู่ Proc และ โหลดไลบรารีA ฟังก์ชั่นโดยใช้ PEB_LDR_DATA เพื่อสำรวจผ่านโมดูลที่โหลด และโดยการเปรียบเทียบค่าแฮชของชื่อเอ็กซ์พอร์ตกับค่าฮาร์ดโค้ด ในฐานะฟังก์ชันตรวจสอบผลรวม AceCryptor ใช้ไฟล์ shl1_เพิ่ม ฟังก์ชั่นการใช้งานแล้วใน แฮชDbซึ่งทำให้สามารถระบุ API ที่ได้รับการแก้ไขได้เร็วขึ้น

Def hash(data): val = 0 for i in data: b = i b = 0xff & (b | 0x60) val = val + b val = val << 1 val = 0xffffffff & val return val

รูป 12 shl1_เพิ่ม กัญชา การดำเนินการ ใน Python

จากนั้น AceCryptor จะได้รับการจัดการสำหรับ kernel32.dll การใช้ โหลดไลบรารีA และใช้สิ่งนั้นและ รับที่อยู่ Proc เพื่อแก้ไข APIs เพิ่มเติม

สำหรับขั้นตอนต่อไป AceCryptor จะใช้ข้อมูลจากโครงสร้างแบบกำหนดเอง L2_INFO_STRUCT (แสดงในรูปที่ 13) ซึ่งสามารถพบได้ที่ส่วนท้ายของรหัสที่ไม่ขึ้นกับตำแหน่ง ดังที่เห็นได้ในรูปที่ 11

Struct __unaligned __declspec(align(1)) L2_INFO_STRUCT
{ DWORD encryptedDataSize; DWORD keySeed; BYTE compressionFlag; DWORD decompressedDataSize; … //empty fields (padding or reserved for future use) filled with zeros
}

รูปที่ 13. ภาพรวมของ L2_INFO_STRUCT จากเลเยอร์ 2

ในขั้นตอนถัดไป AceCryptor จะถอดรหัสเลเยอร์ 3 ซึ่งเข้ารหัสโดยใช้ LCG จาก Microsoft Visual/QuickC/C++ การถอดรหัสเกิดขึ้น ถ้า การบีบอัดแฟล็ก ถูกตั้งค่า AceCryptor จัดสรรหน่วยความจำด้วยไฟล์ VirtualAlloc API และขยายข้อมูลที่ถอดรหัสด้วยอัลกอริทึมการบีบอัด LZO_1Z หลังจากนี้ การดำเนินการจะข้ามไปยังเลเยอร์ 3 ที่ถอดรหัสและคลายการบีบอัดที่เลือกได้

ชั้นที่ 3 – กระบวนการกลวง

ในขั้นตอนแรก AceCryptor ได้รับที่อยู่ของ โหลดไลบรารีA และ รับที่อยู่ Proc APIs เหมือนกับใน ` 2 – โมดูลที่โหลดข้ามผ่าน ส่งออกข้ามผ่าน และใช้งาน shl1_เพิ่ม เช็คซัม จากนั้น AceCryptor จะได้รับที่อยู่ฟังก์ชัน API และตัวจัดการ DLL หลายตัว

รูปที่ 14 โครงสร้างของเลเยอร์ 3 ของ AceCryptor – กระบวนการกลวง

ในขั้นตอนถัดไป AceCryptor ใช้ API GetFileAttributesก และตรวจสอบแอตทริบิวต์ระบบไฟล์ของไฟล์ที่เรียก apfHQ. แอตทริบิวต์จะถูกเปรียบเทียบกับ การรวมกันของธงที่ไม่มีอยู่ 0x637ADF และถ้าเท่ากัน โปรแกรมจะจบลงด้วยการวนซ้ำไม่สิ้นสุด เนื่องจากสิ่งนี้ถูกใช้ในเลเยอร์สุดท้าย ซึ่งถูกซ่อนไว้อย่างดี และเนื่องจากนี่ไม่ใช่เคล็ดลับเดียวที่นี่ เราจึงถือว่านี่ไม่ใช่เทคนิคอื่นที่ทำให้งงงวย แต่เป็นเคล็ดลับต่อต้านแซนด์บ็อกซ์/แอนตี้อีมูเลเตอร์ที่ไม่มีเอกสารเพื่อต่อต้านสิ่งที่ไม่รู้จัก แต่แซนด์บ็อกซ์/อีมูเลเตอร์เฉพาะที่ส่งคืนค่านี้

หากโปรแกรมดำเนินต่อไปได้สำเร็จ จะมีการตรวจสอบ anti-sandbox/anti-emulator อีกครั้ง ตอนนี้ AceCryptor ใช้ API ลงทะเบียนClassExA เพื่อลงทะเบียนชั้นเรียนด้วยชื่อชั้นเรียน โคตรดีโนซ่า9uin. จากนั้นจะพยายามสร้างหน้าต่างด้วยชื่อ mfoaskdfnoa โดยใช้โปรแกรม CreateWindowExA เอพีไอ ในขั้นตอนสุดท้ายของการตรวจสอบนี้ AceCryptor พยายามใช้ API โพสต์ข้อความก และ GetMessageก เพื่อส่งข้อความ เนื่องจาก API เหล่านี้ไม่ได้ใช้บ่อย การตรวจสอบนี้จึงช่วยในการหลบเลี่ยงแซนด์บ็อกซ์/อีมูเลเตอร์ที่ไม่ได้ใช้ API เหล่านี้ หรือเมื่อ API ที่จำลองทำงานไม่ถูกต้อง

รูปที่ 15 เคล็ดลับ Anti-VM/anti-emulator

หลังจากผ่านการตรวจสอบเหล่านี้เรียบร้อยแล้ว AceCryptor จะใช้ เทคนิคการเจาะกระบวนการ โดยจะสร้างอินสแตนซ์ใหม่ของกระบวนการปัจจุบัน (รับ CommandLineA, CreateProcessก) จับคู่เพย์โหลดสุดท้ายเข้ากับกระบวนการที่สร้างขึ้นใหม่ และเปิดใช้งาน

รุ่นก่อนหน้านี้

เคล็ดลับต่อต้านการสืบสวนโดยใช้ ลงทะเบียนClassExA, CreateWindowExA, โพสต์ข้อความก, GetMessageก อยู่ในเวอร์ชันก่อนหน้า (เช่น SHA-1: 01906C1B73ECFFD72F98E729D8EDEDD8A716B7E3) เห็นใช้ในเลเยอร์ 1 และใหม่กว่า (เมื่อได้รับการทดสอบและสถาปัตยกรรมของการเข้ารหัสลับพัฒนาขึ้น) มันถูกย้ายไปที่เลเยอร์ 3

ชั้นที่ 3 – ตัวโหลดแบบสะท้อนแสง

ขั้นตอนแรกเลเยอร์นี้คล้ายกับ เลเยอร์ 2 และ เลเยอร์ 3 – กระบวนการกลวงได้รับที่อยู่ของ รับที่อยู่ Proc และ โหลดไลบรารีA ฟังก์ชัน API ความแตกต่างคือครั้งนี้ ด้วยเหตุผลบางอย่าง ผู้เขียนไม่ได้ใช้ shl1_เพิ่ม ฟังก์ชัน checksum แต่ได้รับก่อน รับที่อยู่ Proc ผ่านการสำรวจโมดูลที่โหลด การสำรวจการส่งออก และการเปรียบเทียบสตริง จากนั้นใช้ รับที่อยู่ Proc พวกเขาได้รับ โหลดไลบรารีA การทำงาน. เมื่อใช้ API ทั้งสองนี้ AceCryptor จะโหลดที่อยู่ของฟังก์ชัน API เพิ่มเติมและแฮนเดิล kernel32.dll.

รูปที่ 16 โครงสร้างของตัวโหลดแบบสะท้อนแสง Layer 3

ในโค้ดมีเคล็ดลับ (แสดงในรูปที่ 17) โดยที่ AceCryptor จะผสมโค้ดกับข้อมูล AceCryptor ควบคุมค่าที่อยู่ในที่อยู่ผู้ส่งหลังจากการเรียกหนึ่งครั้ง ค่านี้ถูกตั้งค่าเป็นศูนย์โดยค่าเริ่มต้น และภายหลัง AceCryptor เขียนที่อยู่ของจุดเข้าใช้งานของเพย์โหลดสุดท้ายที่นั่น หากโปรแกรมได้รับการแก้ไขและตั้งค่าเป็นค่าที่ไม่ใช่ศูนย์ โปรแกรมจะข้ามไปยังที่อยู่ที่ชี้ไปโดยค่านั้นและหยุดทำงาน

รูปที่ 17 รหัสผสมกับข้อมูล

ในขั้นตอนถัดไป AceCryptor ดำเนินการที่รู้จัก ต่อต้าน VM ตรวจสอบ มุ่งเป้าไปที่ Cuckoo sandbox, IDA Pro+Bochs และ Norman SandBox ในรูปที่ 19 จะเห็นได้ว่าธง SEM_NOALIGNMENTผิดพลาดยกเว้น ด้วยค่า 0x04 จะถูกตั้งค่าโดย Cuckoo sandbox เสมอ และด้วยเหตุนี้ การเรียกครั้งที่สองของ ตั้งค่าErrorMode ในโค้ดจากรูปที่ 18 จะไม่ส่งกลับค่าเดียวกันกับค่าที่กำหนดโดยการโทรครั้งก่อน

รูปที่ 18 เคล็ดลับ Anti-VM

ในขั้นตอนสุดท้าย AceCryptor จะตรวจสอบก่อนว่าเพย์โหลดสุดท้ายได้รับการบีบอัดหรือไม่ (อีกครั้ง) และถ้าใช่ จะใช้การบีบอัด LZO_1Z คล้ายกับเลเยอร์ 2 ตัวโหลดแบบสะท้อนแสงเลเยอร์ 3 ใช้โครงสร้างแบบกำหนดเองซึ่งเราตั้งชื่อไว้ ENCRYPTED_DATA_INFO_STRUCT (รูปที่ 16) ซึ่งสามารถพบได้ระหว่างโค้ดที่ไม่ขึ้นกับตำแหน่งและเพย์โหลดสุดท้าย ซึ่งมีข้อมูลเช่น แฟล็กการบีบอัด จำนวนส่วนของเพย์โหลด (de) ขนาดเพย์โหลดที่ถูกบีบอัด ที่อยู่จุดเริ่มต้น ที่อยู่ของไดเร็กทอรีบางไดเร็กทอรี รูปภาพ ที่อยู่ตารางการย้ายถิ่นฐาน และอื่นๆ AceCryptor ใช้ข้อมูลนี้ (ไม่เหมือน ชั้นที่ 3 – กระบวนการกลวงซึ่งจะแยกวิเคราะห์ PE ของเพย์โหลดสุดท้าย) เพื่อทำเทคนิคการโหลดโค้ดแบบสะท้อน โดยรีแมป (ส่วนแผนที่ ภาพรีเบส …) ภาพของตัวเองกับอิมเมจของเพย์โหลดสุดท้าย และเปิดเพย์โหลดโดยเรียกจุดเข้าใช้งาน

สรุป

AceCryptor เป็นมัลแวร์เข้ารหัสที่แพร่หลายและแพร่หลายไปทั่วโลก เราคาดว่าจะมีการขายที่ไหนสักแห่งบนดาร์กเว็บ/ฟอรัมใต้ดินในรูปแบบ CaaS บริการของมัลแวร์นี้ถูกใช้โดยตระกูลมัลแวร์ต่างๆ นับสิบตระกูล และหลายตระกูลอาศัยการเข้ารหัสลับนี้เป็นหลักในการป้องกันการตรวจจับแบบคงที่

เนื่องจากมัลแวร์ถูกใช้โดยผู้คุกคามจำนวนมาก ทุกคนสามารถได้รับผลกระทบ เนื่องจากความหลากหลายของมัลแวร์ที่อัดแน่น จึงเป็นเรื่องยากที่จะประเมินว่าผลที่ตามมาจะรุนแรงเพียงใดต่อเหยื่อที่ถูกบุกรุก AceCryptor อาจถูกทิ้งโดยมัลแวร์ตัวอื่น ซึ่งทำงานอยู่แล้วในเครื่องของเหยื่อ หรือหากเหยื่อได้รับผลกระทบโดยตรง เช่น การเปิดไฟล์แนบอีเมลที่เป็นอันตราย มัลแวร์ใดๆ ภายในอาจดาวน์โหลดมัลแวร์เพิ่มเติม ดังนั้นจึงอาจเป็นเรื่องยากมากที่จะทำความสะอาดเครื่องที่ถูกบุกรุก

แม้ว่าในตอนนี้ การระบุแหล่งที่มาของ AceCryptor ให้กับผู้คุกคามรายใดรายหนึ่งนั้นเป็นไปไม่ได้ และเราคาดว่า AceCryptor จะยังคงถูกใช้งานอย่างกว้างขวางต่อไป การตรวจสอบอย่างใกล้ชิดจะช่วยในการป้องกันและค้นพบแคมเปญใหม่ของตระกูลมัลแวร์ที่บรรจุด้วย cryptor นี้

หากมีข้อสงสัยเกี่ยวกับงานวิจัยของเราที่เผยแพร่บน WeLiveSecurity โปรดติดต่อเราที่ [ป้องกันอีเมล].

ESET Research เสนอรายงานข่าวกรอง APT ส่วนตัวและฟีดข้อมูล หากต้องการสอบถามเกี่ยวกับบริการนี้ โปรดไปที่ ESET ภัยคุกคามอัจฉริยะ หน้า.

IOCs

ไฟล์

หมายเหตุ: ไฟล์ที่อยู่ในรายการเป็นการเลือกตัวอย่างที่เหมาะสมตลอดเวลา ซึ่งครอบคลุม AceCryptor เวอร์ชันต่างๆ หรือการบรรจุมัลแวร์ที่แตกต่างกัน

SHA-1 ชื่อไฟล์ ชื่อการตรวจจับ ESET รายละเอียด
0BE8F44F5351A6CBEF1A54A6DE7674E1219D65B6 N / A Win32/Kryptik.HPKJ เลเยอร์ 1 รุ่น TEA พร้อม SmokeLoader บรรจุอยู่ภายใน
0BE56A8C0D0DE11E0E97B563CAE6D1EE164F3317 N / A Win32/Kryptik.GOFF เวอร์ชัน LCG ของเลเยอร์ 1 ซึ่งบรรจุ SmokeLoader ไว้ข้างใน เคล็ดลับต่อต้านการสืบสวนบนเลเยอร์ 2
1E3D4230655411CB5F7C6885D7F947072B8F9F0F N / A Win32/Emotet.AW เวอร์ชัน RC4 ของเลเยอร์ 1 พร้อม Emotet บรรจุอยู่ภายใน
2FDD49A3F7D06FFFD32B40D35ABD69DEC851EB77 N / A Win32/Smokeloader.F เลเยอร์ 1 รุ่น TEA พร้อม SmokeLoader บรรจุอยู่ภายใน
3AC205BE62806A90072524C193B731A1423D5DFD N / A Win32/Kryptik.GPCG เลเยอร์ 1 รุ่น TEA พร้อม SmokeLoader บรรจุอยู่ภายใน
6ABF731B90C11FFBD3406AA6B89261CC9596FEFD N / A Win32/Kryptik.HRHP เลเยอร์ 1 เวอร์ชัน TEA พร้อมตัวขโมย RedLine บรรจุอยู่ภายใน
8E99A5EC8C173033941F5E00A3FC38B7DEA9DCB3 N / A Win32/Kryptik.FKYH เลเยอร์ 1 เวอร์ชัน TEA ที่มี Filecoder.Q บรรจุอยู่ภายใน เลเยอร์ถัดไปในอิมเมจ BMP
15ADFFDA49C07946D4BD41AB44846EB673C22B2B N / A WinGo/RanumBot.B เลเยอร์ 1 เวอร์ชัน TEA ที่มี RanumBot อัดแน่นอยู่ภายใน สร้างความสับสน – พาธ PDB แบบสุ่ม
47DB52AB94B9A303E85ED1AA1DD949605157417E N / A Win32/Smokeloader.A เลเยอร์ 1 เวอร์ชัน TEA พร้อม SmokeLoader บรรจุอยู่ภายใน เคล็ดลับต่อต้านอีมูเลเตอร์ในเลเยอร์ 1
70BC8C2DC62CF894E765950DE60EC5BD2128D55B N / A Win32/Smokeloader.F เลเยอร์ 1 รุ่น TEA พร้อม SmokeLoader บรรจุอยู่ภายใน
88B125DDA928462FDB00C459131B232A3CD21887 N / A Win32/Kryptik.GDTA เลเยอร์ 1 เวอร์ชัน TEA โดยมี Hermes อัดแน่นอยู่ภายใน สร้างความสับสน – กำบังค่า
90A443787B464877AD9EB57536F51556B5BA8117 N / A Win32/Kovter.C เวอร์ชัน XTEA ของเลเยอร์ 1 โดยมี Kovter บรรจุอยู่ภายใน
249BED77C1349BE7EC1FC182AFCCB1234ADFACDF N / A Win32/Smokeloader.F เลเยอร์ 1 รุ่น TEA พร้อม SmokeLoader บรรจุอยู่ภายใน
3101B17D73031384F555AE3ACD7139BBBAB3F525 N / A Win32/TrojanDownloader.Amadey.A เลเยอร์ 1 เวอร์ชัน TEA โดยบรรจุ Amadey ไว้ข้างใน
8946E40255B57E95BAB041687A2F0F0E15F5FFCE N / A Win32/Kryptik.GKIN เลเยอร์ 1 เวอร์ชัน LCG ซึ่งบรรจุ GandCrab ไว้ข้างใน ทำให้สับสน – ตั้งชื่อส่วนต่างๆ
946082F225C76F2FFBE92235F0FAF9FB9E33B784 N / A Win32/Filecoder.Locky.C รุ่น LCG ของ Layer 1 โดยบรรจุ Locky ไว้ด้านใน
A8ACF307EA747B24D7C405DEEF70B50B2B3F2186 N / A MSIL/Spy.RedLine.B เลเยอร์ 1 เวอร์ชัน LCG พร้อม RedLine Stealer บรรจุอยู่ภายใน
F8039D04FF310CEF9CA47AC03025BD38A3587D10 N / A Win32/Smokeloader.F เลเยอร์ 1 รุ่น TEA พร้อม SmokeLoader บรรจุอยู่ภายใน

วัตถุที่มีชื่อ

ประเภทวัตถุ ชื่อวัตถุ
ชั้น โคตรดีโนซ่า9uin
หน้าต่าง mfoaskdfnoa

เทคนิค MITER ATT&CK

ตารางนี้ถูกสร้างขึ้นโดยใช้ 12 รุ่น ของเทคนิคองค์กร MITER ATT&CK

ชั้นเชิง ID Name รายละเอียด
การกระทำ T1106 API ดั้งเดิม AceCryptor สามารถเริ่มกระบวนการโดยใช้ CreateProcessก API
การหลบหลีกการป้องกัน T1497.003 Virtualization/Sandbox Evasion: การหลบเลี่ยงตามเวลา AceCryptor ใช้การวนซ้ำด้วยรหัสที่กำหนดเองเพื่อชะลอการดำเนินการของฟังก์ชันหลัก
T1497.001 Virtualization/Sandbox Evasion: การตรวจสอบระบบ AceCryptor ใช้เทคนิคหลายอย่างในการตรวจจับแซนด์บ็อกซ์และอีมูเลเตอร์
T1140 ถอดรหัสซอร์สโค้ดที่สร้างความสับสน/ถอดรหัสไฟล์หรือข้อมูล AceCryptor ใช้การเข้ารหัส TEA, LCG, XTEA หรือ RC4 และการบีบอัด LZO_1Z เพื่อแยกรหัสที่ไม่ขึ้นกับตำแหน่งและเพย์โหลด
T1027 ไฟล์หรือข้อมูลที่ทำให้สับสน AceCryptor มาสก์ค่าต่างๆ เช่น ความยาวของเพย์โหลด ค่าคงที่ที่รู้จักของอัลกอริทึมการถอดรหัส หรือคีย์ถอดรหัส
T1055.012 กระบวนการฉีด: กระบวนการกลวง AceCryptor สามารถสร้างกระบวนการใหม่ในสถานะระงับเพื่อยกเลิกการแมปหน่วยความจำและแทนที่ด้วยเพย์โหลดที่ซ่อนอยู่
T1620 กำลังโหลดรหัสสะท้อนแสง AceCryptor สามารถใช้ตัวโหลดแบบสะท้อนแสงเพื่อเขียนอิมเมจใหม่และแทนที่ด้วยเพย์โหลดที่ซ่อนอยู่ (Windows PE)

จุด_img

ข่าวกรองล่าสุด

จุด_img

แชทกับเรา

สวัสดี! ฉันจะช่วยคุณได้อย่างไร?