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

Site da Saúde foi alvo de pichação virtual; incerteza sobre dados preocupa

Getty Images/iStockphoto
Imagem: Getty Images/iStockphoto

Guilherme Tagiaroli

De Tilt, em São Paulo

10/12/2021 16h50

Desde a madrugada desta sexta-feira (10), o site do Ministério da Saúde e sistemas da pasta, como o ConecteSUS (que permite obter o certificado de vacinação contra a covid-19), estão fora do ar devido a um ataque hacker. A Polícia Federal ainda investiga o que pode ter ocorrido, mas o que se sabe até agora, segundo especialistas de segurança consultados por Tilt, é que houve um defacement (uma espécie de pichação virtual) ao site da pasta e algum tipo de o à rede.

Sobre o caso, o ministro Marcelo Queiroga, do Ministério da Saúde, afirmou que "os dados não serão perdidos". No entanto, a integridade das informações armazenadas nos sistemas do órgão ainda preocupa, pois não se sabe ainda a extensão do ataque e nem se houve o roubo delas.

Pichação virtual

Ao tentar ar a página do Ministério da Saúde mais cedo, aparecia uma tela escura em que um grupo de cibercriminosos dizia que a pasta tinha sido alvo de um ransomware (quando dados são sequestrados e só liberados mediante pagamento de resgate) e que "50 TB de dados foram copiados e excluídos".

Mensagem publicada em ataque feito ao site do Ministério da Saúde - Reprodução - Reprodução
Sites do Ministério da Saúde e ConecteSUS saem do ar após suposto ataque hacker nesta madrugada
Imagem: Reprodução

O Ministério da Saúde confirma que houve um incidente de segurança em parte de seus sistemas, mas não detalha se ocorreu um ransonmware. Em todo caso, a pasta decidiu adiar por uma semana a cobrança de aporte de vacinação para viajantes.

Por parte do órgão, sabemos também que o conteúdo exibido até então no site saude.gov.br foi redirecionado para a página gov.br/saude.

"Alguém com o à rede do Ministério conseguiu controlar a infraestrutura e virou um 'super usuário', tirando o a outros servidores", explica Hiago Kin, presidente da Associação Brasileira de Segurança Cibernético. "Este processo dificulta a tarefa de recuperar o o aos dados", complementa, justificando o apagão em outros serviços da pasta.

Apesar do grupo cibercriminoso citar que trata-se de um ransonware, os entrevistados acham improvável.

Andrew Martinez, diretor-presidente da empresa de segurança HackerSec, explica que, por enquanto, a única certeza é que houve uma ação em que alteraram o conteúdo da página web do Ministério da Saúde, na técnica defacement.

Eduardo Schultze, líder de inteligência em ameaças da empresa de segurança Axur, considera o método de ameaça usado no ataque virtual pouco comum entre cibercriminosos que trabalham com ransonware. Segundo ele, o grupo que reivindica a autoria costuma usar mais a estratégia defacement em suas ações.

Além disso, Schultze acrescenta que dificilmente há um publicização logo de cara em caso de sequestro de dados. "Grupos de ransomware costumam atacar um servidor de autenticação que paralisa a companhia. A chantagem é feita via email ou por meio de uma mensagem deixada em um banco de dados. Se não tiver resposta, aí os atacantes tornam as informações públicas."

"Os alvos mais comuns de grupos que usam ramsonware são empresas. Geralmente, quem faz defacement em página governamental quer notoriedade", afirma.

Fabio Assolini, analista sênior da empresa de antivírus Kaspersky, divide a mesma opinião sobre o tipo de ataque envolver a pichação virtual: "Foi uma sabotagem com objetivos financeiros".

Vale lembrar que em fevereiro deste ano houve uma ação cibernética do tipo também em sistemas do Ministério da Saúde, e o autor escreveu na página inicial: "Este site está um lixo" para criticar problemas de segurança da rede.

Incerteza sobre roubo de dados

Segundo os especialistas consultados, a grande questão é se houve ou não comprometimento de dados. "Roubar 50 TB (terabytes) não é uma tarefa tão simples. É um processo instável e lento", comentou Kin.

Martinez acrescenta que roubar 50 TB levaria dias e, caso tenha ocorrido, o ataque foi feito pelo menos uma semana antes e só agora que foi divulgado pelo grupo. "O cenário de que invadiram de madrugada e obtiveram as informações é quase impossível."

Segundo Assolini, existe ainda a chance de que os atacantes estejam "jogando um verde para colher maduro".

"Existe a possibilidade de os cibercriminosos estarem blefando. É possível que eles tenham feito o defacement e derrubado o serviço apenas para pedir um pagamento", explica. Nestes casos é comum também que os grupos façam ataques a instituições famosas justamente para ficarem mais conhecidos e conseguirem novos trabalhos.

A certeza de que os dados foram obtidos só ocorrerá se o Ministério da Saúde reconhecer que houve extração ou simplesmente se as informações forem disponibilizadas na internet.

Se houve mesmo a extração de dados, infelizmente, não há muito o que ser feito por parte de nós, cidadãos. "Seria mais um incidente em que informações da população são disponibilizadas para cibercriminosos", finaliza Assolini.

Vale lembrar que a LGPD (Lei Geral de Proteção de Dados) determina que, caso exista um vazamento comprovado de dados sensíveis de pessoas —ou seja, que poderiam ajudar a identificá-las—, a empresa pública ou privada deverá notificar os órgãos competentes e as pessoas envolvidas.

Em caso de vazamento comprovado, a legislação pode aplicar multa entre outras penalidades, como advertência e obrigação de eliminar os dados pessoais envolvidos. O órgão chamado ANPD (Autoridade Nacional de Proteção de Dados) é o responsável pela fiscalização.