Como saber o que um aplicativo estava fazendo em segundo plano?

5

Eu quero saber o que um aplicativo estava fazendo em segundo plano. Há algum registro de monitoramento ou qualquer histórico registrado do que qualquer aplicativo estava fazendo em segundo plano? Estou falando de qualquer aplicativo regular, não um serviço ou processo do sistema.

    
por Amr Ibrahim 20.12.2012 / 13:06

1 resposta

3

Em suma (resumo do abaixo):

USE o AppArmor

Na minha opinião, uma das suas melhores apostas para ver o que o programa está fazendo é AppArmor . AppArmor é um dos [LSM] [1] (módulos Linux Security) no kernel e no caso do Ubuntu o "LSM de escolha" que já está instalado no seu sistema:)

algum plano de fundo para o AppArmor + LSM

(você pode pular esta parte de explicação e ir diretamente para a receita / solução abaixo)

Em palavras curtas e muito provavelmente "simplificadoras demais": AppArmor é um LSM. O LSM está no kernel e, portanto, perfeito para monitorar o material. Alternativas em "userspace" (não no kernel) poderiam, por exemplo, não ser tão excelentes e invioláveis quanto um LSM como AppArmor . O AppArmor no kernel é consultado sobre todas as solicitações que os programas têm sobre recursos. De certa forma, é pedido "permissão / acesso" aos recursos que os programas fazem. Se um programa desejar acessar /path/to/somefile.txt , o AppArmor / LSM será notificado e poderá recusar ou rejeitar isso. O AppArmor é configurado usando Perfis para que ele possa saber as coisas que um programa pode ou não acessar. Na verdade, se há "não Perfil" AppArmor apenas permite que todos os acessos e não muito. Então, como nosso objetivo seria "monitorar" ou "pesquisar" o programa sobre o qual você tem dúvidas, precisamos configurar um perfil temporário, para que o AppArmor se importe. Normalmente, o objetivo de tal perfil é, na verdade, restringir o programa. Nós "apenas" queremos "monitorá-lo". No AppArmor, isso é chamado de modo "reclamar" do perfil. Neste "modo de reclamação" o programa ainda pode fazer tudo, mas o AppArmor registrará todas essas coisas no arquivo de log em /var/log/syslog

Um perfil do AppArmor para definir o aplicativo /usr/bin/programXYZ no modo de reclamação (= monitorá-lo) é um arquivo de texto no diretório /etc/apparmor.d/ que ficaria assim:

/usr/bin/XYZ flags(complain) {
#empty
}

Com esse perfil para /usr/bin/programXYZ no modo de reclamação, o AppArmor monitora e grava todas as informações em /var/log/syslog . Isso parece, por exemplo, assim.

Dec 21 11:13:44 ubuntu kernel: [23726.684803] type=1400 audit(1356084824.937:1445): apparmor="STATUS" operation="profile_load" name="/usr/bin/programXYZ" pid=17517 comm="apparmor_parser"
Dec 21 11:13:55 ubuntu kernel: [23737.312157] type=1400 audit(1356084835.589:1446): apparmor="ALLOWED" operation="open" parent=17446 profile="/usr/bin/programXYZ" name="/etc/ld.so.cache" pid=17518 comm="df" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Dec 21 11:13:55 ubuntu kernel: [23737.312176] type=1400 audit(1356084835.589:1447): apparmor="ALLOWED" operation="getattr" parent=17446 profile="/usr/bin/programXYZ" name="/etc/ld.so.cache" pid=17518 comm="df" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Dec 21 11:13:55 ubuntu kernel: [23737.312225] type=1400 audit(1356084835.589:1448): apparmor="ALLOWED" operation="open" parent=17446 profile="/usr/bin/programXYZ" name="/lib/i386-linux-gnu/libc-2.15.so" pid=17518 comm="df" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Dec 21 11:13:55 ubuntu kernel: [23737.312250] type=1400 audit(1356084835.589:1449): apparmor="ALLOWED" operation="getattr" parent=17446 profile="/usr/bin/programXYZ" name="/lib/i386-linux-gnu/libc-2.15.so" pid=17518 comm="df" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Dec 21 11:13:55 ubuntu kernel: [23737.312269] type=1400 audit(1356084835.589:1450): apparmor="ALLOWED" operation="file_mmap" parent=17446 profile="/usr/bin/programXYZ" name="/lib/i386-linux-gnu/libc-2.15.so" pid=17518 comm="df" requested_mask="mr" denied_mask="mr" fsuid=1000 ouid=0

Como você pode ver, há um registro de tudo que o /usr/bin/programXYZ acessou (arquivo) e concluiu (isto é, processos iniciados).

A solução / configuração para tal perfil temporário (recepie)

observação: parece "complicado" (muitos passos), na verdade não é. Eu simplesmente queria explicá-lo muito bem, incorpo e explicar bem para entender.

  1. Fique feliz que o AppArmor já está instalado na sua caixa do Ubuntu:)
  2. Descubra o caminho do programa em que você está interessado. Em um tipo de terminal which programXYZ e você provavelmente verá algo como /path/to/programXYZ . Vamos supor aqui que isso seria /usr/bin/programXYZ .
  3. Gere um perfil do Apparmor para definir o programa no modo de reclamação (lembre-se disso é o que faz o AppArmor se importar com ele. Supondo que você não seja root, isso seria feito com um comando peculiar (ainda correto): %código%. É claro que você precisa alterar sudo bash -c " echo -e \"/usr/bin/programXYZ flags=(complain) {\n #enpty\n}\" >/etc/apparmor.d/myTempProfile" para o caminho que você descobriu na etapa anterior.
  4. Em seguida, você pode verificar se o perfil foi gerado corretamente por /usr/bin/programXYZ , o que deve ser impresso assim:
/usr/bin/programXYZ flags(complain) {
#empty
}
  1. Saiba que temos que definir o perfil recém-criado (no arquivo sudo cat /etc/apparmor.d/myTempProfile ) ativo. Isso feito por este comando: /etc/apparmor.d/myTempProfile
  2. Agora, depois de tudo está configurado. Você precisa iniciar o programa novamente. Se o programa já estiver em execução, isso ainda não é capturado pelo AppArmor. Então, você pode gerenciar manualmente matar uma reinicialização do programa. Ou se é uma espécie de deamon "autostarted" você deve reiniciar o sistema.
  3. Parabéns: você sabe que pode pesquisar em / var / log / syslog para ver o que o AppArmor registra em relação ao seu porgamXYZ. Uma boa maneira de fazer isso pode estar no terminal com este comando: sudo apparmor_parser -r /etc/apparmor.d/myTempProfile"

Se houver alguma dúvida ou você tiver problemas para implementar, comente aqui para que eu possa ajudá-lo!

Observação: Seguindo estas instruções, você obterá uma lista abrangente de coisas que um programa faz. Facilmente pode haver mais de 100 coisas que um programa faz que são registradas pelo AppArmor. Afinal, qualquer acesso (por exemplo, carregar uma biblioteca compartilhada) é sempre algo que o AppArmor registra. Se o seu programa tiver muitas dependências e usar um número razoável de objetos compartilhados, a lista poderá ficar bastante longa. Eu digo isso para que você não fique assustado com o grande número de informações que a reclamação do AppArmor gerará para você. Pode ser um desafio ver tudo isso. No lado positivo, você não arriscará supervisionar nada que sudo cat /var/log/syslog | grep "/usr/bin/programXYZ" faça.

    
por humanityANDpeace 21.12.2012 / 12:12

Tags