;(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

Facilitando a vida do ladrão: dado vazado é prato cheio para golpe no 'Zap'

Estúdio Rebimboca/UOL
Imagem: Estúdio Rebimboca/UOL

Guilherme Tagiaroli

De Tilt, em São Paulo

10/06/2021 04h00Atualizada em 20/08/2021 14h45

De tempos em tempos, há registros de grandes vazamentos de dados pessoais — um grande aqui no Brasil expôs dados de 220 milhões de pessoas. Talvez você ache que tudo bem, pois não tem nada a esconder, porém as informações de diferentes bases de informações vazadas facilitam a vida de criminosos. O roubo e a clonagem de contas de WhatsApp estão aí para provar.

Você sabia que uma das formas de os golpistas agirem é pegando informações vazadas de bancos de dados para traçar o perfil das vítimas? É por isso que precisamos ficar mais atentos e adotar hábitos mais seguros para diminuir os riscos.

Como isso acontece?

Dificilmente se tem todas as informações completas de uma vítima em um só vazamento. Mas criminosos especializados podem cruzar vários blocos de dados de vazamentos diferentes e construir um banco robusto de informações com detalhes pessoais sobre várias pessoas.

Por exemplo: em um dos arquivos há nome e email. O outro possui nome, email e senha. Um terceiro tem nome, data de nascimento e endereço. Ao juntar tudo isso a partir do campo nome, é possível traçar perfis de potenciais vítimas.

"Existe uma ligação umbilical entre esses megavazamentos e o aumento de golpes. Vale lembrar que não são necessários muitos dados pessoais. Bastam uma ou duas informações de uma vítima que um golpe muito agressivo se concretiza", explicou Carlos Affonso de Souza, diretor do ITS Rio, durante no TDC (The Developer's Conference).

"Quanto mais completas forem as informações, o criminoso consegue se ar por um terceiro [como um banco] de maneira mais convincente", acrescentou.

Em golpes por WhatsApp, muitas vezes, o atacante tem número do telefone e nome — que também pode ser obtido, por exemplo, em algum anúncio de venda de itens online.

Em posse disso, o golpista vai para a segunda etapa que é chamada de engenharia social, que nada mais é do que a habilidade do criminoso de convencer a vítima a fornecer o código de autenticação do WhatsApp sem que ela perceba.

"Uma pessoa entra em contato com a vítima e diz que vai mandar um código para liberar o anúncio, que na verdade é uma sequência numérica que permite ar o WhatsApp remotamente", resume Souza.

A terceira parte do golpe é o roubo da conta. Em posse dela, o golpista finge ser a vitima e começa a pedir dinheiro emprestado para os contatos dela.

Uma vítima recente deste tipo de fraude foi a mãe da modelo Carol Trentini. Um criminoso se ou por ela e solicitou dinheiro à mãe dela. Achando que interagia com a filha, a mãe transferiu todas suas economias, pois achou que estaria ajudando-a em uma emergência.

Ainda que o WhatsApp, pela rapidez na comunicação, seja usado para golpes, a consolidação de dados vazados pode auxiliar em outros tipos de ataques, como solicitação de cartão de crédito (quando se tem nome completo, F, entre outros dados), spam por SMS (quando se tem o número do telefone) ou mesmo phishing por telefone ou e-mail, que atrai vítimas com mensagens bombásticas (como revelação de fotos comprometedoras suas ou regularização de pendências financeiras) para roubo de dinheiro ou instalação de malware.

Mais uma vez: quanto mais informações, mais convincente o golpe pode ser.

Como se proteger de golpes dados via WhatsApp

  • Jamais compartilhe o código de ativação do WhatsApp;
  • Desconfie se a pessoa por trás da ligação/mensagem usar gírias, frases informais demais, cometer erros de português ou se comunicar como seu conhecido (no caso de algum amigo ou parente pedir dinheiro);
  • Fique ainda mais em alerta se no contato for pedido a instalação de algum programa em seu aparelho, exigirem pagamento e/ou informações pessoais (senhas, documentos pessoais);
  • Para aumentar a proteção, ative a verificação em duas etapas do WhatsApp (aprenda a configurar aqui). Mesmo que o criminoso consiga ter o seu código de verificação, ele vai precisar inserir também uma senha de seis dígitos criada por você. Ou seja, só sabendo essa informação para conseguir roubar o seu perfil.