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

Não, o Musk não deixará o Twitter; lives no YouTube são falsas e perigosas

Canais no YouTube são invadidos com falsa live de Elon Musk - Reprodução/Tilt
Canais no YouTube são invadidos com falsa live de Elon Musk Imagem: Reprodução/Tilt

De Tilt, em São Paulo

03/01/2023 17h16

Diversos canais do YouTube parecem estar sendo alvos de uma ação cibercriminosa em massa, em que as páginas são fraudadas para transmitir falsas lives de um anúncio de Elon Musk deixando a liderança do Twitter.

Na tarde desta terça-feira (3), o canal do YouTube Coisa Nossa, com 2,16 milhões de inscritos e ligado ao Guaraná Antarctica, foi alterado para realizar uma falsa transmissão ao vivo, com nome e imagens alterados para os da Tesla.

O golpe se aproveita da imagem do bilionário para exibir um QR code que leva a uma página de fraude, prometendo doação em criptomoedas.

Embora a live fraudulenta tenha sido derrubada, outros canais brasileiros foram alvos do mesmo ataque:

  • O canal Casa do Saber, com 1,16 milhões de inscritos, também foi alterado por uma ação cibercriminosa, transmitindo a mesma live falsa -- e com o mesmo título;
  • O canal da Boticário, com 2,18 milhões de inscritos, foi vítima da mesma ação;
  • O canal Toyzera, com 418 mil inscritos, também foi alterado para transmitir o mesmo vídeo.
Em todos estes vídeos, os cibercriminosos postam links nos chats que levam a um site falso, reforçando aos participantes que foram doadas criptomoedas Bitcoin e Ethereum em nome da fabricante de carros, Tesla.

A medida em que estas lives são encerradas — por intervenção do YouTube ou pelos próprios operadores do ataque, que arquivam os vídeos — a transmissão recomeça outra vez, em outro canal com nomes envolvendo Tesla e Twitter.

Procurado por Tilt, o YouTube ainda está averiguando o assunto e não respondeu até a publicação.

Como funciona o golpe?

O QR Code funciona como um "código de barras" para o armazenamento de mensagens de texto, incluindo links para sites.

Ao ser escaneado pela câmera do celular, o texto é lido pelo aparelho, e a informação é aberta pelo navegador. Nestas situações, cibercriminosos podem se aproveitar do código para aplicar fraudes.

As ações criminosas mais comuns são de direcionamento para outras páginas (ou URLs), que podem aplicar golpes de phishing (para roubar dados pessoais ou dinheiro) ou instalar um malware (softwares maliciosos) no dispositivo da vítima.

E se eu esbarrar em um vídeo destes?

Além de não clicar em nenhum link ou escanear o QR code fraudulento, é importante que você denuncie o vídeo ao YouTube por spam ou fraude. Para isso, no computador:

  1. Clique nos "..." ao lado do botão "Compartilhar";
  2. Vá até a opção "Denunciar";
  3. Selecione a opção "Spam ou enganoso";
  4. Clique em "Golpes ou fraude";
  5. Na descrição da reclamação, comente o que há de errado com o vídeo;
  6. Clique em "Denunciar" e depois, "Fechar".