Será que o alias global da bomba bifurcada impediria a sua execução?

Será que o alias global da bomba bifurcada impediria a sua execução?

Se você definisse globalmente

alias ':(){ :|:& };:'='echo fork bomb averted'

seria essa uma estratégia de segurança eficaz para evitar a execução da bomba Bash ou ainda haveria uma maneira de executá-la?

Suponho que a questão seja: existe uma maneira de executar um comando quando ele tem um alias para outra coisa?

Responder1

Os dois , não, três , ... Entre os principais obstáculos para isso estão:

  1. Não é um nome válido para um alias.Manual on-line do Bash:

    Os caracteres ... e qualquer um dos metacaracteres do shell ou caracteres entre aspas listados acima podem não aparecer em um nome alternativo.

    (, ), &e |espaços em branco foram lançados no Bash 4.4.

  2. Essa string em particular não é a única maneira de escrever uma bomba bifurcada no shell, apenas famosa porque parece obscura. Por exemplo, não há necessidade de chamar a função :em vez de algo realmente composto por letras.

  3. Se você pudesse definir o alias, o usuário poderia cancelar a definição do alias, contorná-lo escapando do nome do alias na linha de comando ou desabilitar completamente os aliases, possivelmente executando a função em um script (o Bash não expande aliases em shells não interativos) .

  4. Mesmo que o shell seja restrito o suficiente para parar todas as versões de uma fork bomb, um sistema de uso geral terá outros utilitários programáveis ​​que podem recorrer e bifurcar subprocessos. Tem Perl ou um compilador C? Bastante fácil. Até mesmo awk provavelmente poderia fazer isso. Mesmo que você não os tenha instalado, você também precisará impedir que o usuário traga binários compilados de fora do sistema ou execute /bin/sho que provavelmente precisa ser um shell totalmente operacional para que o resto do sistema funcione.

Apenas useulimit -u(ou seja RLIMIT_NPROC) ou equivalente para restringir o número de processos que um usuário pode iniciar. Na maioria dos sistemas Linux hápam_limitsque pode definir o limite de contagem de processos antes que qualquer comando escolhido pelo usuário seja iniciado.

Algo assim /etc/security/limits.confcolocaria um limite rígido de 50 processos para todos os usuários:

*        hard    nproc           50

(Stephen Kittjá mencionadoponto 1, Jeff Schallermencionado2 e 3.)

Responder2

Não. Existem muitas maneiras de escrever uma bomba-garfo.

O malvado escritor da fork-bomb tentará novamente com um nome de função diferente. Ou outras alterações até que sua bomba for bem-sucedida.

O escritor inadvertido da bomba-garfo não produzirá a bomba-garfo canônica em primeiro lugar.

Na verdade, é bastante fácil se tornar um escritor inadvertido de bombas fork. Por exemplo, você poderia simplesmente usar recursivo makecom um externo, unchecked cd, combinando-o com a -jopção e subdiretórios inexistentes - um exemplo real que encontrei uma vez.

Você não pode se proteger contra todas as possibilidades e certamente não contra um invasor determinado.Tudo o que você conseguirá é aumentar a complexidade do seu sistema.

Responder3

Você não pode usar o nome de bomba bifurcada, porque não é umanome alternativo válido:

$ alias ':(){ :|:& };:'='echo fork bomb averted'
bash: alias: `:(){ :|:& };:': invalid alias name

Os caracteres '/', '$', '`', '=' e qualquer um dos metacaracteres do shell ou caracteres entre aspas listados acima podem não aparecer em um nome alternativo.

Alguns shells não verificam nomes de alias quando são declarados, mas ao interpretar comandos, e então ignoram o nome inválido. Uma bomba fork sempre incluirá &, que não pode ser incluída em um nome alternativo válido, portanto, não é possível se proteger dessa forma.

Responder4

Duas vezes, não.

Essa não é a única maneira de escrever uma bomba-garfo.

Existem também várias maneiras de executar "um comando" quando há um alias:

command the-command
\the-command

Exemplo:

$ alias ls=not-really-ls
$ ls
-bash: not-really-ls: command not found
$ \ls
jeff.html  output.png
$ command ls
jeff.html  output.png

informação relacionada