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