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

Após suposto ataque, estados têm problemas para atualizar casos de covid-19

Tela de computador do Ministério da Saúde mostra que máquina foi criptografada - Reprodução/UOL
Tela de computador do Ministério da Saúde mostra que máquina foi criptografada Imagem: Reprodução/UOL

Mirthyani Bezerra

Colaboração para Tilt

10/11/2020 14h51

O Ministério da Saúde informou que conseguiu restabelecer parte dos sistemas de informação que estavam fora do ar desde a última quinta-feira (5), quando um suposto ataque hacker teria afetado a rede da pasta. No mesmo dia, hackers conseguiram invadir os sistemas do STJ (Superior Tribunal de Justiça) e do governo do Distrito Federal, mas a pasta fala genericamente de um vírus no sistema. Por causa do problema, estados estão tendo dificuldade para apresentar dados atualizados da covid-19.

Em nota divulgada ontem, o Ministério da Saúde informou que segue monitorando as demais páginas que ainda não estão totalmente normalizadas e podem, eventualmente, precisar de ajustes. "Devido ao trabalho de prevenção e segurança do DataSUS (Departamento de Informática do Sistema Único de Saúde) algumas páginas ainda podem apresentar instabilidades nos próximos dias e ficar temporariamente indisponíveis", diz o texto.

Ontem, quatro estados deixaram de divulgar seus números: Amapá, Minas Gerais, Rio de Janeiro e São Paulo. O primeiro informou que a dificuldade é causada pelo apagão que o Estado enfrenta desde a semana ada e que não há previsão de retorno da divulgação de dados. Já os outros três relatam problemas para a inserção de informações na plataforma e-SUS.

Estado com maior número de casos e mortes de covid-19 no país, São Paulo não atualiza os registros de mortes e contaminações desde o dia 6 de novembro. Ontem, o governador do Estado, João Doria, enviou ao Ministério da Saúde um ofício pedindo explicações sobre como as falhas no sistema têm dificultado a atualização dos dados relativos à pandemia do coronavírus no Brasil.

Segundo o governador, as informações epidemiológicas sobre a pandemia não estão sendo processadas pela pasta por razões desconhecidas.

O Rio de Janeiro, por sua vez, não atualizou dados relativos às mortes causadas pela covid-19.

"O Ministério ainda apura o que motivou a ocorrência do vírus no sistema. Não é possível fazer afirmações conclusivas. A pasta ainda aguarda a perícia do sistema", diz o texto.

Essa é a segunda vez que o sistema de atualização de dados relativos à pandemia no Brasil apresenta problemas. Em junho desse ano, o site oficial foi tirado do ar e colocado de volta sem o total de mortes causadas pela doença.

A invasão

Na nota divulgada ontem, a pasta não confirmou ter sido vítima de um ataque hacker, se restringindo a dizer que suas redes foram sido afetadas "por um vírus" que atingiu algumas estações de trabalho do órgão.

Por precaução, a equipe bloqueou o o à internet, o que, segundo o Ministério, conseguiu controlar a propagação do vírus e evitar maiores prejuízos ao parque tecnológico do Ministério, "garantindo a segurança dos dados".

Na semana ada, também por meio de uma nota, o Ministério da Saúde disse que não havia indícios de que o vírus seria uma tentativa de invasão, pois não havia sido identificado danos à integridade dos dados.

A reportagem do UOL teve o a uma reprodução de tela que mostra uma mensagem de bloqueio em uma das máquinas da pasta, indicando que a informação foi criptografada— algo típico de ataque por ransomware. No dia da invasão, técnicos do Ministério, ouvidos reservadamente, afirmaram acreditar se tratar sim de um ataque feito por hackers.

Os servidores do Ministério ficaram sem o às contas de correio eletrônico. A assessoria de imprensa do órgão afirmou que os emails do setor ainda enfrentam problemas.