É seguro que um servidor de produção tenha a instalação instalada?

39

Durante a configuração das instâncias do meu servidor virtual, eu solicito que alguns aplicativos sejam criados usando make . Há algum risco de segurança associado a ter make instalado? Ou devo limpá-lo antes que a instância seja implantada?

Eu também tenho o compilador gcc no servidor que uso para criar aplicativos antes da implantação.

    
por S-K' 15.05.2014 / 19:46

6 respostas

48

Algumas pessoas argumentam que a presença de ferramentas de desenvolvimento em uma máquina de produção facilitará a vida de um invasor. Isso, no entanto, é um pequeno roadbump para um atacante, que qualquer outro argumento que você possa encontrar a favor ou contra a instalação das ferramentas de desenvolvimento pesará mais.

Se um atacante foi capaz de penetrar no sistema até o momento, o que poderia invocar quaisquer ferramentas presentes no servidor, então você já tem uma grave violação de segurança. Sem ferramentas de desenvolvimento, há muitas outras maneiras de gravar dados binários em um arquivo e, em seguida, executar um chmod nesse arquivo. Um invasor querendo usar um executável de compilação personalizado no sistema neste momento poderia muito bem construir isso em sua própria máquina e transferi-lo para o servidor.

Existem outras coisas muito mais relevantes a serem observadas. Se um software instalado contiver um bug de segurança, há algumas maneiras de expô-lo a um invasor:

  • O pacote pode conter um executável suid ou sgid.
  • O pacote pode estar iniciando serviços no sistema.
  • O pacote pode instalar scripts que são chamados automaticamente sob certas circunstâncias (isso inclui tarefas agendadas, mas scripts podem ser chamados por outros eventos, por exemplo, quando o estado de uma interface de rede é alterado ou quando um usuário efetua login).
  • O pacote pode instalar inodes de dispositivo.

Eu não esperaria que as ferramentas de desenvolvimento correspondessem a uma das opções acima e, como tal, não é um pacote de alto risco.

Se você tiver fluxos de trabalho nos quais faria uso das ferramentas de desenvolvimento, primeiro precisará decidir se esses são fluxos de trabalho razoáveis e, se forem, deverá instalar as ferramentas de desenvolvimento.

Se você achar que realmente não precisa dessas ferramentas no servidor, evite instalá-las por vários motivos:

  • Economiza espaço em disco, tanto no servidor quanto nos backups.
  • Menos softwares instalados facilitam o rastreamento de suas dependências.
  • Se você não precisar do pacote, não há motivo para arriscar a segurança adicional, mesmo que o risco de segurança seja pequeno.

Se você decidir que, por motivos de segurança, não permitirá que usuários sem privilégios coloquem seus próprios executáveis no servidor, o que você deve evitar não são as ferramentas de desenvolvimento, mas diretórios graváveis para esses usuários em sistemas de arquivos montados com execução permissões. Ainda pode haver um uso para ferramentas de desenvolvimento mesmo nessas circunstâncias, mas não é muito provável.

    
por 15.05.2014 / 20:27
15

make é um shell que possui uma sintaxe diferente de bash .

Um compilador como gcc é um poderoso awk configurado com um conjunto de substituições que o padrão awk não suporta. É um sort ou cat não compatível com POSIX que injeta lixo na saída. É um editor de texto interativo (pense em vi ) que é configurado para fazer alguma edição na inicialização, depois sair antes de exibir a interface do usuário.

Não há nada intrinsecamente inseguro, eles não tornam sua máquina mais insegura do que uma onde você tem o bash + cat + redirecionamento de shell.

    
por 16.05.2014 / 18:54
15

make está bom. make é meramente uma estrutura de controle e automação de dependência. Ele é tipicamente usado em conjunto com compiladores, e aqueles preferencialmente não deveriam estar disponíveis em um sistema de produção, já que eles são completamente desnecessários. O mesmo vale para todos os pacotes desnecessários, sejam bibliotecas compartilhadas, intérpretes, etc. O software instalado nos sistemas de produção deve ser estritamente controlado e somente os pacotes exigidos pelo aplicativo devem estar presentes.

Você deve criar seu aplicativo em um servidor de desenvolvimento, empacotá-lo e, em seguida, implantar o pacote binário em seus sistemas de produção.

Nota: as ferramentas de empacotamento nativas sugam . Não se incomode em tentar criá-los. Em vez disso, confira fpm do Jordan Sissel. Isso torna a embalagem uma alegria absoluta.

    
por 15.05.2014 / 19:49
9

Ao contrário, o possível problema não é ter make no servidor de produção, o possível problema é criar os aplicativos no servidor de produção, em vez de implantar imagens pré-construídas testadas. Pode haver razões válidas para esta metodologia, mas é uma contra a qual eu argumentaria vigorosamente se eu pedisse para adotá-la.

    
por 15.05.2014 / 19:49
4

Você está perguntando se make deve ser instalado em um servidor de produção, mas minha verdadeira pergunta seria: quem tem acesso a esse servidor de produção & Que proteções você tem para lidar com uma incursão? Se make não foi instalado, mas alguém ganhar root de acesso, adivinhe? Eles podem instalar manualmente o make e o que quiserem.

A dura realidade sobre a segurança dos computadores é tão importante quanto você quer evitar o acesso indesejado, sendo obcecado com o bloqueio de acesso não é tão importante quanto:

  1. Quem tem acesso ao servidor?
  2. O que você pode fazer para reverter as consequências de uma pausa?

Tudo depende do tipo de trabalho que você faz. Eu trabalho principalmente no mundo dos servidores web & minha atitude é basicamente, qualquer pessoa que tenha acesso ao servidor de produção de mim precisa provar habilidades, conhecimento & maturidade. É isso aí. Às vezes demora alguns dias. Às vezes leva meses. Mas, basicamente, a sua melhor linha de segurança em servidores de produção está controlando o acesso sobre as diversas outras coisas que fazemos para proteger os servidores.

    
por 16.05.2014 / 23:50
1

make em si é inofensivo. Tudo o que faz é executar aplicativos em uma ordem definida, dependendo das dependências especificadas e de quais arquivos já existem no sistema. Pode até ser útil como parte do processo de instalação: você pode usá-lo para colocar arquivos pré-construídos onde eles precisam ir, ou executar testes de unidade ou outras coisas.

No entanto, você precisa considerar o que exatamente deseja usá-lo. É freqüentemente usado em conjunto com compiladores e outras ferramentas para construir aplicativos, e aqueles poderiam ser usados para negar algumas de suas linhas de defesa. Mas make não pode fazer essas coisas se as ferramentas não estiverem disponíveis.

    
por 17.05.2014 / 16:56