;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Novo golpe usa 0800 e confirmação de Pix para atrair vítimas; veja cuidados

Falsa mensagem de SMS avisa de Pix que a pessoa não fez; saiba como se cuidar - Reprodução/Kaspersky
Falsa mensagem de SMS avisa de Pix que a pessoa não fez; saiba como se cuidar Imagem: Reprodução/Kaspersky

Barbara Mannara

Colaboração para Tilt, do Rio de Janeiro

24/01/2022 12h19

Você costuma receber mensagens de texto de organizações conhecidas que usam o número 0800? Pois saiba que tem um novo golpe na praça usando justamente esse prefixo para atrair vítimas com um pedido (falso) de confirmação de Pix. O alerta foi feito por pesquisadores da empresa de segurança digital Kaspersky.

Os cibercriminosos atuam no Brasil e visam roubar números de cartões de crédito e tokens de autenticação para operações financeiras. O uso do número 0800 serve para ganhar a confiança da vítima, já que é comumente utilizado por centrais reais de bancos. Com isso, os golpistas acabam roubando dados financeiros com mais facilidade.

Como o golpe funciona

Para começar, a vítima recebe um recado via SMS contendo uma mensagem que parece verdadeira. O recado é recebido por meio de um short-code —um número de envio curto, normalmente com cinco ou seis dígitos, que também são popularmente utilizados por serviços oficiais. Só que nesse caso, a origem é fraudulenta.

No exemplo compartilhado pela Kaspersky, a mensagem alertava para um suposto Pix transferido pelo usuário, que nunca ocorreu de verdade. Logo em seguida, há um número iniciado por "0800" de um suposto serviço de atendimento ao consumidor para a pessoa saber mais detalhes sobre a transação.

Quando a pessoa entra em contato com o telefone 0800 contido na mensagem, os golpistas pedem a confirmação de dados da conta e agência bancária —é aí que acontece o roubo de dados. Além disso, os criminosos perguntam se a vítima possui alguma autenticação temporária ativada (via token, por exemplo).

Caso tenha, o criminoso, se ando por um atendente bancário, solicitará o código de ativação para conseguir ar e concluir a fraude.

Para completar, o golpista avisa sobre o cancelamento dos cartões da conta da vítima e aproveita para se apossar dos números dos cartões de crédito. Na investigação da Kaspersky, o falso atendente foi ainda mais longe: ao não receber o número do cartão de crédito, insistiu em saber o endereço para retirada do cartão "cancelado".

Saiba como se proteger

A Kaspersky explica que não é possível bloquear esse tipo de tentativa de golpe, já que os números no estilo "0800" e short-code são ferramentas legítimas de comunicação.

"Não é fácil registrar um número 0800 e os shorts-codes são um canal usados exclusivamente por um seleto grupo de empresas, como bancos, operadoras e grandes lojas. Isso mostra o quanto as fraudes estão refinadas", explica Fabio Assolini, analista sênior de segurança da Kaspersky no Brasil, em comunicado.

Então vale ficar em alerta: para proteger seus dados financeiros, é importante sempre entrar em contato com o serviço de cartão de crédito ou bancário por meio do número de telefone oficial e/ou pelo aplicativo direto. Esse contato pode ser encontrado nas plataformas autênticas, como o site verificado do banco, ou nas faturas do cartão.

E, principalmente, a dica é sempre duvidar de mensagens recebidas por números desconhecidos, seja via SMS ou quaisquer outras plataformas de recados. "O conhecimento sobre o golpe é a melhor prevenção", completa Assolini.