Compartilhe seus truques de hacking enviando PRs para osHackTricks 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
sudounshare-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 que unshare. 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ção alloc_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 o unshare. Essa opção faz com que o unshare bifurque um novo processo após criar o novo namespace de PID.
Executar %unshare -fp /bin/bash% garante que o comando unshare 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.
```bash 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 ``` ### Entrar dentro de um namespace de Tempo ```bash 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`).