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

Suspeito de ataque hacker ao sistema do TSE é preso em Portugal

Siga o UOL no

Do UOL, em São Paulo e em Brasília

28/11/2020 11h59Atualizada em 28/11/2020 22h43

Uma operação coordenada pela Polícia Federal em parceria com a polícia portuguesa prendeu hoje um suspeito de envolvimento no ataque hacker ao sistema do TSE (Tribunal Superior Eleitoral), que divulgou dados do tribunal no dia do primeiro turno da eleições municipais. A prisão ocorreu em Portugal.

Três mandados de busca e apreensão e três medidas cautelares também estão sendo cumpridos em Minas Gerais e São Paulo. Em Portugal, além da prisão do suspeito, um mandado de busca e apreensão está em execução.

Segundo a PF, "o inquérito policial aponta que um grupo de hackers brasileiros e portugueses, liderados por um cidadão português, foi responsável pelos ataques criminosos aos sistemas do TSE" no primeiro turno das Eleições de 2020, realizado no dia 15 de novembro.

Ainda segundo a corporação, os crimes apurados no inquérito policial são os de invasão de dispositivo informático e de associação criminosa, ambos previstos no Código Penal, além de outros previstos no Código Eleitoral e na Lei das Eleições (9.504/97).

Realizada na véspera do segundo turno das eleições municipais, que será realizado amanhã, a operação foi chamada de "Exploit", em referência a uma parte de software, um pedaço de dados ou uma sequência de comandos que tomam vantagem de um defeito a fim de causar um comportamento acidental ou imprevisto no software ou hardware de um computador ou em algum dispositivo eletrônico.

A operação ocorre com a cooperação da Polícia Judiciária Portuguesa - Unidade Nacional de Combate ao Cibercrime e Criminalidade Tecnológica. Os mandados no Brasil foram expedidos pelo Juízo da 1ª Zona Eleitoral do Distrito Federal.

Grupo português de hackers

Nesta semana, o grupo português CyberTeam, liderado pelo hacker conhecido como Zambrius, assumiu publicamente a autoria do vazamento de dados privados e do ataque cibernético ao TSE durante o primeiro turno. Não há confirmação se a prisão de hoje está relacionada a este grupo.

Ao longo deste ano, o CyberTeam disse ter atacado ao menos outras 61 páginas com o domínio ".br". Desde 2017, foram 140. A invasão de sites do Ministério da Saúde, que prejudicou a divulgação de dados sobre covid-19, também foi reivindicada pelo grupo.

Ataque ao sistema TSE começaram antes do 1º turno

As investigações, realizadas pela Polícia Federal com a colaboração do TSE, apontam que a invasão aos sistemas do tribunal provavelmente ocorreu em data anterior a 1º de setembro e teria partido de Portugal. Porém, ainda não há precisão sobre a data.

A investigação aponta que o grupo conseguiu ar dados de 2020 relativos a informações de funcionários do tribunal. Inicialmente, acreditava-se que o ataque havia obtido apenas informações do período entre 2001 e 2010 relativos a dados funcionais de ex-ministros e servidores.

O presidente do TSE, ministro Luís Roberto Barroso, disse suspeitar de "motivação política" no episódio, com o objetivo de minar a credibilidade do sistema eleitoral.

A invasão aos dados do TSE, segundo o tribunal, não trouxe risco ao sistema de votação eletrônica. As urnas não ficam conectadas à internet, e a transmissão dos votos para totalização do resultado é feita por uma rede própria do tribunal que usa comunicação criptografada. Além disso, o processo de soma dos votos é realizado por um computador exclusivamente dedicado a esse processo.

No dia de realização do primeiro turno, um segundo ataque mirou os sistemas do TSE, com a intenção de retirá-los do ar. Conhecido como ataque de negação de serviço, esse tipo de prática consiste na realização artificial de milhares de os simultâneos a um site na expectativa de que a sobrecarga derrube o sistema.

Esse segundo ataque foi neutralizado pelo tribunal, segundo informou o ministro Barroso. A origem do segundo ataque foi identificada no Brasil, Nova Zelândia e Estados Unidos.

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á!