;(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 apura atuação de grupo brasileiro e hacker português em ataque ao TSE

Sede do TSE (Tribunal Superior Eleitoral), em Brasília - Divulgação
Sede do TSE (Tribunal Superior Eleitoral), em Brasília Imagem: Divulgação

Felipe Amorim

Do UOL, em Brasília

28/11/2020 16h40

A Polícia Federal investiga a participação de um grupo hacker brasileiro, em conjunto com um hacker português, no ataque aos sistemas do TSE (Tribunal Superior Eleitoral) realizado este ano.

Os grupos Noias do Amazonas (NDA), formado por brasileiros, e o CyberTeam, composto por portugueses e brasileiros, estão no centro das investigações da Polícia Federal, segundo apontam documentos obtidos pela reportagem do UOL.

Três homens identificados como integrantes do Noias do Amazonas foram alvo da operação de busca e apreensão deflagrada hoje pela polícia em São Paulo e Minas Gerais. Os investigados têm 19, 24 e 35 anos. Dois deles moram na capital paulista e um em Uberlândia (MG).

O hacker português conhecido como Zambrius é líder do grupo CyberTeam e foi identificado pela PF como o principal responsável pelo ataque. O CyberTem já havia reivindicado publicamente a autoria do vazamento de dados do TSE durante o primeiro turno das eleições.

Zambrius, que já estava em prisão domiciliar, foi detido hoje, segundo o jornal português Diário de Notícias. Ele é o cidadão português Tomás Bonifácio Pedroso, de 19 anos.

A Polícia Federal informou hoje foi realizada a prisão de um suspeito em Portugal, mas não confirmou a identidade do investigado preso.

A investigação da PF aponta que ao menos desde 2016 o CyberTeam tem feito ataques digitais a órgãos públicos portugueses e brasileiros, muitas vezes em parceria com hackers brasileiros. O grupo brasileiro NDA foi identificado pelos investigadores como um dos principais colaboradores do CyberTeam.

O ataque ao TSE

No dia do primeiro turno das eleições municipais, realizado no último dia 15, foram divulgadas na internet dados do TSE obtidos por meio de uma invasão hacker ao sistema do tribunal.

Os hackers obtiveram informações como Fs, senhas e email funcional de funcionários e ex-ministros do TSE.

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 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.

Você utiliza a Alexa? O UOL é o parceiro oficial da assistente de voz da Amazon, com boletins de notícias e dados atualizados das últimas pesquisas eleitorais e dos resultados do 2º turno. Para saber sobre a eleição na sua cidade com a credibilidade do UOL, pergunte: "Alexa, qual é o resultado da pesquisa eleitoral em São Paulo?", por exemplo, ou "Alexa, quem ganhou a eleição no Rio de Janeiro?". Nos encontramos lá!