6.1 KiB
Namespace de Tempo
Aprenda hacking AWS do zero ao avançado com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
O namespace de tempo no Linux permite deslocamentos por namespace nos relógios monótono e de tempo de inicialização do sistema. É comumente usado em contêineres Linux para alterar a data/hora dentro de um contêiner e ajustar os relógios após a restauração de um ponto de verificação ou snapshot.
Laboratório:
Criar diferentes Namespaces
CLI
sudo unshare -T [--mount-proc] /bin/bash
Ao montar uma nova instância do sistema de arquivos /proc
usando o parâmetro --mount-proc
, você garante que o novo namespace de montagem tenha uma visão precisa e isolada das informações de processo específicas daquele namespace.
Erro: bash: fork: Não é possível alocar memória
Quando o unshare
é executado sem a opção -f
, um erro é encontrado devido à forma como o Linux lida com os novos namespaces de PID (Process ID). Os detalhes-chave e a solução são descritos abaixo:
- Explicação do Problema:
- O kernel do Linux permite que um processo crie novos namespaces usando a chamada de sistema
unshare
. No entanto, o processo que inicia a criação de um novo namespace de PID (referido como o processo "unshare") não entra no novo namespace; apenas seus processos filhos o fazem. - Executar
%unshare -p /bin/bash%
inicia/bin/bash
no mesmo processo queunshare
. Consequentemente,/bin/bash
e seus processos filhos estão no namespace PID original. - O primeiro processo filho do
/bin/bash
no novo namespace se torna o PID 1. Quando esse processo sai, ele aciona a limpeza do namespace se não houver outros processos, pois o PID 1 tem o papel especial de adotar processos órfãos. O kernel do Linux então desabilitará a alocação de PID nesse namespace.
- Consequência:
- A saída do PID 1 em um novo namespace leva à limpeza da flag
PIDNS_HASH_ADDING
. Isso resulta na funçãoalloc_pid
falhando ao alocar um novo PID ao criar um novo processo, produzindo o erro "Cannot allocate memory".
- Solução:
- O problema pode ser resolvido usando a opção
-f
com ounshare
. Essa opção faz com que ounshare
bifurque um novo processo após criar o novo namespace de PID. - Executar
%unshare -fp /bin/bash%
garante que o comandounshare
se torne o PID 1 no novo namespace./bin/bash
e seus processos filhos são então seguramente contidos dentro desse novo namespace, evitando a saída prematura do PID 1 e permitindo a alocação normal de PID.
Ao garantir que o unshare
seja executado com a flag -f
, o novo namespace de PID é mantido corretamente, permitindo que /bin/bash
e seus sub-processos operem sem encontrar o erro de alocação de memória.
Docker
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
Verifique em qual namespace está o seu processo
ls -l /proc/self/ns/time
lrwxrwxrwx 1 root root 0 Apr 4 21:16 /proc/self/ns/time -> 'time:[4026531834]'
Encontrar todos os namespaces de Tempo
{% code overflow="wrap" %}
sudo find /proc -maxdepth 3 -type l -name time -exec readlink {} \; 2>/dev/null | sort -u
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name time -exec ls -l {} \; 2>/dev/null | grep <ns-number>
Entrar dentro de um namespace de Tempo
nsenter -T TARGET_PID --pid /bin/bash
Também, você só pode entrar em outro namespace de processo se for root. E você não pode entrar em outro namespace sem um descritor apontando para ele (como /proc/self/ns/net
).
Referências
- https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory
- https://www.phoronix.com/news/Linux-Time-Namespace-Coming
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.