Como posso enumerar o syscalls do Linux não filtrado? [duplicado]

2

Qual é a melhor maneira de enumerar todos os syscalls do Linux disponíveis?

Para esclarecer, estou perguntando como descobrir quais syscalls estão sendo filtrados pelo seccomp durante a execução em um ambiente de contêiner.

    
por Mick 29.07.2018 / 22:04

1 resposta

2

Eu encontrei dois métodos possíveis para enumerar o syscalls do Linux. Um envolve um bash one-liner , mas depende da distribuição da sua distribuição para todos as manpages relevantes. O outro, o strace , uma ferramenta que pode ser usada para descobrir e rastrear todo e qualquer tipo de syscalls possíveis.

strace

strace pode ser encontrado em GitHub e GitLab . Eu não posso garantir o seu ambiente, e se você quiser verificar se há syscalls dentro de um contêiner, esta solução não seria a ideal, no entanto, funciona melhor do que o one-liner do bash, pois as páginas de manual podem não ser instaladas.

Filter by type of syscall:

strace -e trace=%desc     Trace all file descriptor related system calls.
                %file     Trace all system calls which take a file name as an argument.
                %fstat    Trace fstat and fstatat syscall variants.
                %fstatfs  Trace fstatfs, fstatfs64, fstatvfs, osf_fstatfs, and osf_fstatfs64 system calls.
                %ipc      Trace all IPC related system calls.
                %lstat    Trace lstat syscall variants.
                %memory   Trace all memory mapping related system calls.
                %network  Trace all the network related system calls.
                %process  Trace all system calls which involve process management.
                %pure     Trace syscalls that always succeed and have no arguments.
                %signal   Trace all signal related system calls.
                %stat     Trace stat syscall variants.
                %statfs   Trace statfs, statfs64, statvfs, osf_statfs, and osf_statfs64 system calls.
                %%stat    Trace syscalls used for requesting file status.
                %%statfs  Trace syscalls related to file system statistics.

No entanto, se você tiver uma lista de syscalls específicas que deseja procurar, use o seguinte comando:

strace -e [syscall1],[syscall2],[syscall3],...,[syscalln]

Eu também estou incluindo este blog para mais informações na strace.

Bash one-liner

Eu estarei fazendo referência à página de manual syscalls, Link 1 Link 2 , bem como esta página da Web com conselhos sobre como completar a tarefa de enumerar todos os syscalls disponíveis para um determinado sistema Linux.

O indivíduo na página da Web sugere que você possa fazer referência a suas páginas de manual para obter uma lista completa de syscalls. Este exemplo dá saída em uma lista anotada.

ls /usr/share/man/man2 | sed -e s/.2.gz//g | xargs man -s 2 -k  | sort | grep -v 'unimplemented system calls'

Conclusão

Mais uma vez, gostaria de observar que, se a sua distribuição não enviar todos os seus pacotes com todas as suas páginas de manual relevantes, então o one-liner bash ficaria aquém. Se a saída da lista anotada não for necessária e essa solução não couber na saída desejada, atualize sua postagem para definir melhor sua meta.

Também incluirei um link para uma ferramenta python usada para procurar por syscalls . Isso pode ser uma boa referência para comparar quais syscalls você descobre com o que está disponível.

Por favor, comente se você tiver dúvidas ou problemas com esta resposta. Eu sugiro que você leia cada link que eu forneci completamente antes de tentar os comandos. Eu aprecio o feedback para corrigir quaisquer equívocos e melhorar minhas postagens. Eu posso atualizar minha resposta conforme necessário.

Melhor da Sorte!

    
por 29.07.2018 / 23:09