blank

blank

O artigo “Educated Manticore: Iran-aligned threat actor targeting Israel via improved arsenal of tools” publicado em 2023 pela Check Point Research, relata a descoberta de uma nova campanha cibernética realizada por um grupo de ameaças conhecido como “Manticore” e que supostamente tem ligações com o governo iraniano.

De acordo com o relatório, o Manticore tem como alvo principal Israel e seus arredores, com foco em setores como aeronáutica, tecnologia e defesa. Os alvos incluem empresas privadas e governamentais, bem como indivíduos relacionados a esses setores.

O relatório também revela que o Manticore aprimorou sua capacidade técnica, utilizando técnicas avançadas de engenharia social, malware personalizado e a exploração de vulnerabilidades em softwares para infectar seus alvos. Além disso, o grupo tem usado táticas de evasão para evitar detecção, como a segmentação de seus ataques e o uso de servidores de comando e controle (C2) distribuídos.

blank
Iscas descoberta pela Check Point Research

Os pesquisadores da Check Point observam que a campanha do Manticore é particularmente preocupante, já que o grupo é altamente sofisticado e está em constante evolução. O relatório alerta que o grupo provavelmente continuará a evoluir suas táticas e ferramentas, tornando-se uma ameaça cada vez mais séria e difícil de detectar.

Além disso, a pesquisa sugere que a campanha do Manticore faz parte de uma estratégia mais ampla do governo iraniano para aumentar sua presença cibernética na região. O relatório observa que, à medida que os conflitos políticos e militares se intensificam na região, as atividades cibernéticas provavelmente se tornarão uma ferramenta cada vez mais importante para o governo iraniano.

O relatório da Check Point Research destaca a crescente ameaça que grupos de ameaças patrocinados pelo estado, como o Manticore, representam para a segurança cibernética de Israel e de outras nações da região. O relatório enfatiza a necessidade de uma maior colaboração internacional na luta contra esses grupos e destaca a importância de manter sistemas de segurança atualizados e alertas às ameaças em constante evolução.

IOCs

C&C domains

subinfralab[.]info
deersharpfork[.]info
blackturtle.hopto[.]org

Hashes

Archives

3e1ed006e120a1afaa49f93b4156a992f8d799b1888ca6202c1098862323c308 29318f46476dc0cfd7b928a2861fea1b761496eb5d6a26040e481c3bd655051a 13bab4e32cd6365dba40424d20525cb84b4c6d71d3c5088fe94a6cfe07573e8e 6e842691116c188b823b7692181a428e9255af3516857b9f2eebdeca4638e96e bc8f075c1b3fa54f1d9f4ac622258f3e8a484714521d89aa170246ce04701441 706510916cfc7624ec5d9f9598c95570d48fa8601eecbbae307e0af7618d1460

PE files

e5ba06943abb666f69f757fcd591dd1cceb66cad698fb894d9bc8911282198c4 97a615e69c38db9dffda6be7c11dd27547ce4036a4998a1469fa81b548c6f0b0 e5016dfeae584de20a90f1bef073c862028f410d5b0ae4c074a696b8f8528037 5704bc31061c7ca675bb9d56b9b56a175bf949accf6542999b3a7305af485906 4fcde8ec5983cf1465ff7dbcd7d90fcd47d666b0b8352db1dcd311084ed1b3e8 7cc9d887d47f99ca37d2fee6171067df70b4417e96fdb661b9fef697124444cc bdb2a12f2f84c3742240b8b9e1d6638a73c6b8752aff476051fe33a0bb408010 5d216f5625caf92d224200647147d27bb79e1cff6c8a9fbcac63f321f6bbf02b 62d0b8b5d4281ce107c43d36f222680b0cc85844b8973b645095ccdfb128454d

LNK

1672a14a3e54a127493a2b8257599c5582204846a78521b139b074155003cba4 0f4d309f0145324a6867108bb04a8d5d292e7939223d6d63f44e21a1ce45ce4e

PowerShell

737cb075ba0b5ed6d8901dcd798eecff0bc8585091bc232c54f92df7f9e9e817 cd813d56cf9f2201a2fa69e77fb9acaaa37e64183c708de64cb5cb7c3035a184 c0de9b90a0ac591147d62864264bf00b6ec17c55f7095fdf58923085fe502400 59a4b11b9fb93e3de7c27c25258cec43de38f86f37d88615687ab8402e4ae51e

Appendix A – IDAPython script to de-obfuscate the Educated Manticore binary files

import idaapi, idc, idautils
def NopRange(startEa, endEa):
for b in range(startEa,endEa):
idc.patch_byte(b,0x90)
def DetectJunkBB(bb: idaapi.BasicBlock):
global BBJunkCount
global BBsJunk
for head in idautils.Heads(bb.start_ea, bb.end_ea):
if(idc.get_operand_type(head,1) == idc.o_imm and (idc.get_operand_value(head,1) & 0xffffffff) == 0x9e3779b9):
BBsJunk.append(bb)
BBJunkCount += 1
for bbSS in bb.succs():
if(bbSS.start_ea == bb.start_ea):
continue
if (not [SShead for SShead in idautils.Heads(bbSS.start_ea, bbSS.end_ea) if idc.print_insn_mnem(SShead) == “call”]):
BBsJunk.append(bbSS)
BBJunkCount += 1
return
BBJunkCount = 0
BBsJunk = []
funcs = idautils.Functions()
for funcAddr in funcs:
func = idaapi.get_func(funcAddr)
fChart = idaapi.FlowChart(func, None, idaapi.FC_PREDS | idaapi.FC_NOEXT)
for bb in fChart:
DetectJunkBB(bb)
for bb in BBsJunk:
NopRange(bb.start_ea, bb.end_ea)
print(“Cleaned BBs with JUNK code: %d” % (BBJunkCount))

Appendix B – IDAPython script to decrypt the Educated Manticore binary strings

import idaapi, idc, idautils
# “return False” in condition – indicates not to break on BP, if “return True” the BP will break -> use False just for logging
cond = “”“import idc
RAX = idc.get_reg_value(“rax“)
RIP = idc.get_reg_value(“rip“)
decString = idc.get_strlit_contents(RAX,-1, idc.STRTYPE_C16)
if decString == None:
decString = idc.get_strlit_contents(RAX,-1, idc.STRTYPE_C)
print(“Decrypted String: %s Address:0x%x” % (decString ,RIP))
idc.set_cmt(RIP, str(decString), False)
loc = RIP
comment = str(decString)
cfunc = idaapi.decompile(loc)
eamap = cfunc.get_eamap()
decompObjAddr = eamap[loc][0].ea
tl = idaapi.treeloc_t()
tl.ea = decompObjAddr
commentSet = False
for itp in range (idaapi.ITP_SEMI, idaapi.ITP_COLON):#range to cover different ending – orphans cmts
tl.itp = itp
cfunc.set_user_cmt(tl, comment)
cfunc.save_user_cmts()
unused = cfunc.__str__()
if not cfunc.has_orphan_cmts():
commentSet = True
cfunc.save_user_cmts()
break
cfunc.del_orphan_cmts()
if not commentSet:
print (“pseudo comment error at %08x” % loc)
return False
“”
decryptionFunctions = [0x14000C650, 0x14000C770, 0x14000C890, 0x14000C9A0, 0x14000CAC0, 0x14002B010, 0x14002B130, 0x14002B250, 0x14002B4F0, 0x14002B5E0, 0x14002B700, 0x140035200, 0x140035320]
for decFunc in decryptionFunctions:
codeRefs = idautils.CodeRefsTo(decFunc,1)
for ref in codeRefs:
ea = idc.next_head(ref)
idaapi.add_bpt(ea, 0, idaapi.BPT_SOFT)
bpt = idaapi.bpt_t()
idaapi.get_bpt(ea, bpt)
bpt.elang = ‘Python’
bpt.condition = cond
idaapi.update_bpt(bpt)

Descubra mais sobre DCiber

Assine para receber os posts mais recentes por e-mail.