;(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 ataque, site da Americanas volta: 5 questões para entender o que rolou

Lojas Americanas teve site derrubado por cibercriminosos - Divulgação
Lojas Americanas teve site derrubado por cibercriminosos Imagem: Divulgação

Abinoan Santiago

Colaboração para Tilt, em Florianópolis

23/02/2022 14h43

Sem funcionar desde sábado (19), o site da varejista Americanas retornou hoje de maneira gradual. A plataforma caiu após a constatação de um "o não autorizado", segundo informou a empresa.

Como prevenção, os sites da Submarino e Shoptime — que fazem parte do mesmo conglomerado varejista — também foram retirados do ar. Até às 12h56 (horário de Brasília) de hoje, apenas o domínio da Shoptime permanecia com o problema.

"Estamos voltando de forma gradual, disponibilizando produtos e funcionalidades progressivamente para que você possa comprar com segurança", dizia o comunicado da Americanas no topo do seu site.

Os dias sem vender produtos representaram perda de R$ 3,5 bilhões em valor de mercado da Americanas na Bolsa de Valores brasileira (B3).

Mas o que pode ter acontecido para que o ataque tenha resultado em um dano tão grande? Tilt explica.

O rolou?

A Americanas comunicou que o problema que resultou a queda de seu site foi um "o não autorizado.

Para Thiago Ayub, diretor de tecnologia da Sage Networks, empresa de cibersegurança de redes, o comunicado da empresa indica que alguém invadiu o sistema da Americanas.

"Isso significa que alguém de fora da empresa obteve o remoto aos sistemas dela de maneira não autorizada. Era alguém que não deveria ter contato com dados cadastrais, sistemas de pagamentos e plataforma. É uma invasão", explicou.

Por isso é perigoso?

Ao invadir o sistema de uma empresa, o grupo cibercriminoso tem o a diversos dados, desde aos dados cadastrais até transações de pagamentos, se for o caso.

Em nota, a Americanas disse hoje que não há evidência de comprometimento da base de dados.

"[O invasor] pode alterar dados, sequestrar dados e apagá-los. Todos esses cenários representam um risco muito sério às empresas e aos seus clientes. Se um pagamento for alterado, será que pode ser desviado? Os dados dos clientes podem ser comercializados? Tudo isso poderia acontecer", diz Auyb.

Quem assumiu autoria do ataque?

Horas depois de o site da Americanas sair do ar, internautas começaram a dizer que o ataque veio do grupo cibercriminoso "Lapsus", o mesmo que derrubou os sites do Ministério da Saúde, no fim de 2021. Só que o grupo não assumiu a autoria, o que torna tudo uma especulação.

"Sou criterioso e cuidadoso para dizer de quem é a autoria, porque não disseram isso. Estão atribuindo a eles porque no momento da indisponibilidade dos sites o grupo soltou mensagem debochando da situação", ressalta Ayub.

Por que Submarino e Shoptime também saíram do ar?

O ataque foi contra a Americanas, mas por "medidas de segurança", a Americanas S.A. também suspendeu as plataformas do grupo, incluindo, a da Submarino e da Shoptime. Isso indica que as três empresas podem usar sistemas de cibersegurança semelhantes.

"Para sanar algumas dúvidas iniciais de segurança, é comum retirar do ar sites relacionados por seus gestores, até que se saiba a extensão dos danos e do o não autorizado", explica o especialista.

Qual a lição que o ataque deixa?

A invasão nos sistemas da Americanas expôs a fragilidade da empresa em relação à cibersegurança, mesmo sendo uma companhia com valor de mercado bilionário.

"Mais uma vez uma grande empresa foi pega de surpresa em ataque desse tipo. Se fazem treinamento de evacuação de incêndio todos os anos, mas quanto à tecnologia de informação, isso é indicativo de que não estavam preparados para um cenário de 'o autorizado'. Não fizeram simulação da situação", concluiu Ayub.

Outros ataques contra grandes empresas

Em agosto de 2021, o site de uma das maiores lojas de fast fashion no país, a Renner, sofreu um ataque hacker com infecção de ransomware, deixando-o indisponível para os consumidores.

Em outubro, foi a vez de uma das maiores seguradoras do Brasil, a Porto Seguro, ser atacada, o que resultou em uma instabilidade parcial em seus canais de atendimento e em alguns de seus sistemas. No mesmo mês, uma das mais conhecidas agências de turismo, a CVC Brasil, ou pela mesma situação.

"O mais assombroso disso é que não se tratam de pequenas empresas com problemas de segurança, mas as grandes e renomadas, o que faz soar o alerta: precisamos fazer mais pela cibersegurança", disse a professora Alessandra Montini, diretora do LABDATA-FIA, em coluna a Tilt.