Operous
Blog

Como construir um fluxo "curl | bash" de maneira confiável

Entenda como a segurança e conveniência podem andar juntas.

Instalar e configurar software de terceiros para gerenciar servidores pode ser um trabalho moroso. A tarefa é acompanhada de um conjunto de requisitos que devem ser atendidos apenas para atingir algo funcional.

Operous vai disponibilizar um método conveniente para configurar seus servidores para que eles sejam testados continuamente. Você apenas copia e cola um comando curto e não perde seu tempo com atividades não produtivas.

Curl

O método que vamos usar é conhecido como “curl pipe bash”. Esse método de execução de scripts já foi assunto de algumas discussões quentes, com opiniões fortes tanto contra quanto a favor da técnica.

Diversos fabricantes oferecem esse método de instalação, alguns o chamam de “convenience script”, um nome que expressa muito bem o seu propósito.

Abaixo você pode conferir como será simples e rápido configurar o Operous no seu servidor:

Installer

Neste artigo vamos discutir preocupações de segurança que surgem frente ao método “curl pipe bash” e o que nós fizemos para lidar com elas.

Conveniência e segurança são dois lados de uma mesma moeda

Durante um bom tempo a indústria acreditava que conveniência é uma característica que vai contra segurança. Quanto mais difícil for acessar o seu serviço, mais seguro ele é.

Esse pensamento mudou. Estamos caminhando para o consenso de que para construir um sistema seguro ele também precisa ser conveniente para seus usuários.

Um exemplo sobre essa mudança são as novas recomendações do NIST para senhas: pedir para as pessoas criarem senhas mais longas, porém memoráveis, e trocá-las com menos frequência (apenas quando comprometidas) aumenta a segurança.

Outros avanços nessa área são: autenticação multi-fator e gerenciadores de senhas com boa experiência de usuário. Quando uma quantidade adequada de esforço é colocada na construção de algo seguro e conveniente, o resultado é um aumento notável na segurança e produtividade.

Sabemos que empurrar complexidade para o usuário é um caminho que não devemos traçar. Portanto, tomamos o cuidado de acomodar essa complexidade no design do nosso sistema para alcançar um produto com boa segurança e usabilidade.

O script de configuração foi feito para simplificar esse processo para você. Trabalhamos para tirar essa complexidade de suas mãos e acomodá-la em nosso produto, com o objetivo de ter uma experiência mais rápida, segura e fácil, para que você não desperdice seu tempo com trabalho improdutivo.

Problemas considerados

Agora vamos nos aprofundar nas considerações técnicas que entraram na implementação desse sistema, para que você não se preocupe com elas.

Ataque man-in-the-middle

Preocupação: Um atacante entre o nosso web server e o seu servidor poderia mudar o conteúdo do script ou injetar código nele, modificando seu comportamento esperado.

Solução: Todo o nosso conteúdo será servido com o que há de estado da arte em TLS. Não será possível baixar o script ou acessar qualquer página do Operous através de uma conexão insegura, reduzindo significativamente o risco de adulteração do conteúdo servido.

Alteração silenciosa do texto copiado

Preocupação: APIs modernas de clipboard do JavaScript permitem que um script modifique um texto copiado sem gerar alertas ou pedir confirmação. Isso poderia ser usado para fazer você rodar no shell algo diferente do que você pensa que copiou no website.

Solução: Não temos absolutamente motivo algum para enganar nossos usuários dessa forma. Além disso, a injeção de JavaScript por terceiros através de adulteração de conteúdo é evitada com o uso de TLS.

Detecção de client

Preocupação: Um web server retorna respostas distintas baseado no User-Agent da requisição ou através de outras formas de detecção do client. O script que você vê no browser pode não ser o mesmo baixado no servidor.

Solução: Reiteramos que não temos motivos para fazer isso. De qualquer forma, além de servir conteúdo apenas via TLS, um checksum estará disponível junto com o script, para que ao baixá-lo você possa validar o conteúdo antes de executá-lo.

Conteúdo parcial e problemas de rede

Preocupação: Um erro de rede entre a origem do script e o agente curl pode resultar em um download incompleto, o que resultaria na execução parcial do script. Isso é de fato perigoso pois qualquer comando incompleto poderia ser executado.

Solução: Nós resolvemos essa preocupação envolvendo o “corpo” do script dentro de uma função que é chamada no final. Se algo de errado realmente acontecer, o script definirá apenas algumas funções, mas não fará nada.

Servidor web comprometido

Preocupação: Mesmo usando TLS para distribuir todo o conteúdo, ainda assim há espaço para adulteração do conteúdo do script, explorando uma vulnerabilidade no web server e alterando sua configuração para servir um script diferente. Um ataque semelhante pode ser feito tomando controle da publicação de dependências do projeto, ou explorando vulnerabilidades em bibliotecas usadas.

Solução: Nossa infraestrutura é automatizada para garantir o provisionamento e uso de softwares atualizados. Também auditamos constantemente as bibliotecas que usamos em nossa aplicação para evitar vulnerabilidades conhecidas.

Também contaremos com um sistema separado que irá monitorar continuamente o script, baixando-o e verificando seu conteúdo com o checksum esperado Se uma invasão desse tipo acontecer, poderemos cruzar os dados de monitoramento com nossos eventos de auditoria para informar aos usuários que podem ter baixado um script não autorizado.

Conclusão

Alcançar conveniência e segurança não é uma tarefa fácil.

O método do Operous para registro de um servidor com um único e breve comando é parte da nossa estratégia de fazer você obter resultados com nossos testes em seus servidores o mais rápido possível.

Instalar software de terceiros não tem que ser complicado. O Operous vai tornar fácil a configuração do servidor que será testado.

Com nosso script conveniente que desenvolvemos do zero, você testará seus servidores rapidamente e com facilidade.

Referências

Security vs. Convenience Is curl | bash insecure Friends don't let friends Curl | Bash Don't Pipe to your Shell copy-paste-shell Piping curl to s(hell) Curl to shell isn't so bad Detecting the use of "curl | bash" server side Why curl | sudo bash is good

  • seguranca
  • servidores
Proactively solve your server configuration problems

Parte do seu time

Servidores mal configurados são a grande causa de incidentes e impactos na disponibilidade de aplicações. Containers ou máquinas virtuais, on-premise ou cloud, te ajudamos a alcançar uma operação eficaz.

Scale the capacity of your development team with automation of security settings

Assessment automatizado

O Operous direciona sua equipe para atuar somente no que é necessário e importante, trazendo insights sobre seus servidores

Visibilidade para todos

Não importa se o seu servidor é on-premise ou cloud pública, trazemos indicadores para escalar a gestão e garantir uma visibilidade assertiva

Tranquilidade para a equipe

Conte com nosso serviço que informa continuamente sua equipe sobre o estado atual de seus servidores e direciona melhorias necessárias sem complicação

Economize horas, noites e até finais de semana incorporando redução de riscos dentro do seu fluxo CI/CD

Aumente a eficiência do seu time de desenvolvimento usando o Operous para garantir de forma automatizada e contínua a segurança e boas práticas de configuração de servidores.

Inscreva-se para ser um dos primeiros a conhecer o Operous.