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

Spoofing: entenda a técnica hacker usada para invadir o celular de Moro

O ataque de um hacker pode começar após um vítimas serem alvo de "spoofing" sem saber - pxhere.com
O ataque de um hacker pode começar após um vítimas serem alvo de 'spoofing' sem saber Imagem: pxhere.com

Renan Dionisio

Colaboração para o UOL

24/07/2019 17h19

Foi só a Polícia Federal prender quatro suspeitos de invadir o celular do Ministro da Justiça Sergio Moro, durante a Operação Spoofing, realizada nesta terça-feira (23), que muitas dúvidas surgiram sobre o que viria a ser a palavra em inglês.

Ainda mais porque as investigações começaram pouco antes de conversas de Moro pelo Telegram começarem a ser publicadas pelo site The Intercept Brasil e outros veículos no início de junho. Por ora, os investigadores não estabeleceram conexão entre os hackers e as mensagens.

Derivado de "spoof", que, em tradução livre, significa "enganar", "spoofing" é uma técnica usada por hackers para ludibriar vítimas por meio da falsificação de identidade ou de aparelhos em meios digitais. Por meio dela, o hacker pode interceptar informações importantes como dados bancários e mensagens pessoais.

Esse recurso é muito utilizado no Brasil como artifício de engenharia social. Os golpistas usam páginas de internet e emails falsos para enganar vítimas e obter informações verídicas delas. Com esses dados, am ferramentas digitais, como contas de WhatsApp ou de email do alvo, para todo tipo de golpe, como pedir dinheiro a contatos.

Tipos de Spoofing e como se proteger

Os tipos mais comuns de spoofing ligados a crime cibernético são:

  • Email: o hacker manda uma mensagem eletrônica falsa se ando por algum conhecido da vítima.
  • Site: uma página na internet falsa é criada para se ar pelo site e real e atrair cliques. Geralmente, esses sites tentam falsificar sites bancários ou de lojas online. Quando tentar comprar algo, o usuário submeterá as credenciais de o a conta bancária ou cartão de crédito aos hackers.
  • SMS: Disparando um torpedo, o hacker tenta se ar por um banco ou outra instituição para pedir informações sigilosas do cliente.
  • De Identificador de Chamadas: ao fazer uma ligação telefônica, o golpista consegue fazer o número de telefone da vítima aparecer na tela do celular dela.
  • IP: ao ocultar o local de origem de um IP (protocolo de internet, espécie de identidade virtual de aparelhos conectados) para enganar os sistemas, hackers podem, por exemplo, impedir que um servidor bloqueie suas requisições de o. Esse artifício pode ser usado em ataques de negação (DDoS), quando vários os são direcionados a um servidor específico para sobrecarrega-lo e tirá-lo do ar.

Para se proteger dessas formas de spoofing, é preciso ficar atento aos endereços de email que chegam à caixa de entrada e aos sites visitados para ter certeza de que são legítimos. Suspeitar de números de telefone que enviam SMS com links e pedidos suspeitos também ajuda a não cair nesses golpes.