Os artigos refletem a opinião pessoal do autor, e não de seus empregadores.

quarta-feira, 16 de outubro de 2019

A Nova Era das Aplicações


Muito geralmente as inovações em TI não são assim não novas. Foram criadas ou desenvolvidas muitos antes, vão sendo usadas aos poucos até que o motivador, ou a necessidade, surja, e muito rapidamente tornam-se o padrão. É o caso atual do novo modo, por assim dizer, de desenvolver as aplicações. Em uma série de artigos irei discutir as implicações para a segurança, que são grandes. Antes, porém, é necessário descrever o que é esse novo modo.
Desde que a informática existe, o modo comum de desenvolver uma aplicação é em único bloco, utilizando uma linguagem de programação, e para ser executado em um determinado sistema operacional. Por mais que as técnicas tenham evoluído, com uso de objetos e tal, um aplicativo sempre continuou a ser um aplicativo único. Fábricas de software se especializaram em reaproveitar códigos e rotinas, com estas sendo compiladas em conjunto. A virtualização mudou a camada de hardware desse modelo, já que diferentes servidores virtuais passaram a funcionar compartilhando o mesmo hardware, mas o caráter das aplicações não mudou. Durante o processo, esses servidores virtuais começaram a sair dos datacenters físicos e migraram para nuvens, com seu complicado emaranhado virtual de rede e serviços, e grandes empresas acabaram por adotar o mesmo conceito em suas nuvens privadas. E é aqui que o desenvolvimento começa a mudar de fato.
A evolução da nuvem se fez em paralelo à digitalização da sociedade e do consumo, que migrou do computador pessoal para o smartphone. O ponto em que estamos hoje é o exemplo disso. De onde fazemos uma TED mais rapidamente: do computador ou do celular? E reservas de restaurantes, compras em geral, e compra de ingressos? Tudo é mais rápido e eficiente a partir de nossos dispositivos móveis. Vejam que não citei as apps que já nasceram na nuvem e no celular, como o Uber e afins. Mais recentemente, as aplicações de Internet executadas no PC e no celular passaram a convergir, a ser na prática as mesmas. O cerne de toda essa evolução, ou revolução se você preferir, é o container.
A técnica apareceu pela primeira vez no longínquo ano de 1979, atrelado ao Unix, porém permaneceu adormecido até a primeira década dos anos 2000, quando o Google começou a investir na tecnologia até que em 2013 ela finalmente começou a decolar via plataformas de software livre. As empresas símbolo da modernidade na web, como Amazon, Google e Netflix executam tudo em containers. Como alardeado pelo Google em sua página, “ele permite que os times de desenvolvimento se movam rápido, publiquem software eficientemente, e operem em uma escala sem precedentes”. A cada semana, diz a empresa, eles iniciam mais de dois bilhões de containers. Em um processo natural, a técnica chegou às empresas “tradicionais”, que viram nele uma excelente ferramenta de agilidade, eficiência e redução do custo de seus sistemas. Hoje, o container caminha rápido para tornar-se a técnica padrão de desenvolvimento de aplicações. Mas o que é ele exatamente?
Um container digital carrega o mesmo contexto de um container físico para transporte: um ambiente isolado, alguns são refrigerados por exemplo, que sai facilmente de um caminhão para um trem, e do trem para um navio, ou vice-versa. Em informática um container é um módulo que contém tudo o que necessita para rodar, inclusive o que seria o seu sistema operacional, abstraindo-se completamente do ambiente à sua volta. É diferente de uma máquina virtual, que abstrai somente o hardware, mas se comporta de maneira idêntica à uma instalada em um servidor físico. Uma máquina virtual ao iniciar carrega todas os componentes e bibliotecas padrão, inclusive as que não são necessárias. Já o container contém tudo o que necessita, e pode ser executado diretamente no kernel do sistema operacional, sendo, portanto, mais leve e mais rápido.
A tecnologia aplicada ao desenvolvimento fez com que as aplicações “explodissem”, permitindo que funções executem em diferentes containers que trocam dados entre si, dependentes na execução, mas não no desenvolvimento, como microservices. Cada módulo pode ser desenvolvido em diferentes linguagens de aplicação, estar instalado em qualquer lugar, em qualquer nuvem publica ou privada, ou em qualquer computador, e ser publicado independentemente dos outros módulos. Desenvolvedores podem testá-los em seu próprio computador, da mesma forma que é executado. O suprassumo desse modelo é a computação serverless, ou seja, a abstração total para o provedor de serviços de nuvem. A escalabilidade e resiliência desse modelo é impressionante, com os módulos se multiplicando dinamicamente, ou recuperando-se de falhas também automaticamente, e de maneira transparente.
Toda essa longa introdução foi necessária para introduzir o tema da segurança para esse ambiente, que irei discutir nas próximas edições. Para antecipar o desafio é só pensar no modelo atual e tradicional de segurança da informação. Nem digo para o perímetro, mas para o datacenter. Vamos considerar uma empresa que deseja impedir que malware interfira com um de seus sistemas. A solução é imediata: instalar um agente de endpoint security, ou um NGFW/NGIPS. Começando pelo endpoint, onde instalamos? Não há um único servidor. Se for serverless, a empresa nem sabe onde está instalado cada módulo de microserviço. Mas mesmo que soubesse, como se instala um agente em algo que está isolado e conectado diretamente ao kernel. Vamos então para a rede. Onde instalamos o NGFW/NGIPS? É uma rede virtualizada! Então instalamos na rede virtual. Mas não há uma rede virtual, pois o ambiente está distribuído.
Assim como as soluções de segurança tradicionais não se encaixam nesse ambiente, as ameaças e vetores de ataque são também diferentes. Há novas ameaças e vulnerabilidades com o que se preocupar, e por isso há novas medidas que devem ser tomadas. Temos que pensar a segurança de maneira diferente. São esses os temas que irei tratar nos próximos artigos.

Nenhum comentário:

Postar um comentário