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

PF suspeita que TSE foi alvo de nova tentativa de ataque após o 1º turno

Siga o UOL no

Felipe Amorim

Do UOL, em Brasília

28/11/2020 17h21

A Polícia Federal suspeita que o mesmo grupo investigado pelo ataque hacker ao TSE (Tribunal Superior Eleitoral) tentou ar os sistemas da corte quatro dias após a realização do primeiro turno.

Sinais de novas tentativas de ataque foram identificadas no último dia 19 pelo sistema de segurança do TSE, segundo apontam documentos obtidos pela reportagem do UOL. A nova investida não obteve sucesso.

A suspeita da PF é de que a fonte da nova tentativa de ataque partiu de Portugal, de computadores ligados ao hacker Zambrius, um dos investigados pelo ataque ao TSE.

No dia do primeiro turno, 15 de novembro, hackers divulgaram dados do tribunal, como Fs, senhas e email funcional de funcionários e ex-ministros do TSE.

Naquele mesmo dia, o presidente do TSE, Luís Roberto Barroso, afirmou que as investigações até o momento apontavam que os dados foram obtidos em uma invasão aos sistemas do tribunal ocorrida em data anterior, possivelmente antes de 1º de setembro.

Prisão em Portugal

Hoje, a Polícia Federal realizou a Operação Exploit, que resultou na prisão de um suspeito em Portugal e no cumprimento de mandados de busca e apreensão contra outros três suspeitos nas cidades de São Paulo e Uberlândia (MG).

A PF não confirmou a identidade do investigado preso em Portugal. Segundo o jornal português Diário de Notícias, trata-se do hacker Zambrius, o cidadão português Tomás Bonifácio Pedroso, de 19 anos, e que já estava em prisão domiciliar por crimes cibernéticos.

O hacker é apontado como líder do grupo CyberTeam, que reivindicou publicamente a autoria do ataque ao TSE que resultou no vazamento de dados de ex-ministros e funcionários do tribunal. O vazamento das informações foi divulgada no dia do primeiro turno das eleições em 15 de outubro.

A Polícia Federal também investiga a participação do grupo hacker brasileiro Noias do Amazonas (NDA). Hoje, três homens apontados como integrantes do grupo foram alvo de mandados de busca e apreensão.

A Polícia Federal também investiga se a atuação do grupo investigado teve relação com as falhas no aplicativo e-Título, utilizado para justificar o voto e identificar o eleitor no dia das eleições.

O ataque hacker não afetou o sistema de apuração do resultado das eleições e não teve relação com o atraso na divulgação dos resultados no primeiro turno.

O atraso na totalização dos votos foi provocado por uma falha na operação do supercomputador utilizado para compilar e divulgar os dados das urnas de todo o país.

Segundo o TSE, por causa da pandemia do novo coronavírus não houve tempo para submeter o computador a todos os testes antes das eleições e, por isso, o sistema de inteligência artificial da máquina demorou a realizar de forma eficiente o processo de contagem dos votos.