Privilégios
Privilégios de processos no OpenSolaris
Objetivo Criar um Dscript que monitore quais privilégios são usados
pelo sistema e quando os privilégios são recebidos ou devolvidos.
Privilégios O que é?
Habilita um processo a completar alguma tarefa que normalmente iria requerer privilégios administrativos ou de superusuário.
Possível divisão: All:
Grupo de todos os privilégios possíveis que um processo pode receber.
Basic: Grupo de privilégios que são atribuídos normalmente a todos os
processos.
Dtrace Providers
Metodologia Provider: sdt
Probes: priv-ok: requisição de privilégio com sucesso priv-err: requisição de privilégio sem sucesso
Script D: monitoramento de privilégios
#!/usr/sbin/dtrace -s/* Não exibe mensagens de alerta do dtrace */#pragma D option quiet/* * Mensagem de inicialização */dtrace:::BEGIN{
printf("\nMonitorando a utilizacao de privilegios... Ctrl-C pára a execução.\n");printf("%15s %15s %25s %15s\n", "execname", "probe", "probefunc", "privilégio");
}/* * Detecta quando um processo tentou utilizar algum privilegio. * se a tentativa ocorrer com sucesso, o probename será priv-ok; * se a tentativa falhar, o probename será priv-err. Isto significa * que o processo não tem permissão para utilizar o recurso solicitado.*/sdt:::priv-* {
printf("%15s %15s %25s %15d\n", execname, probename, probefunc, arg0);}
Script Perl: geração de tabela de privilégios
use Sun::Solaris::Privilege qw(:ALL);
printf("%4s %20s\n", "id", "privilégio");
while ($priv = priv_getbynum($i)) {
printf("%4d %20s\n", $i, $priv);$i++;
}
Tabela de Privilégios 0 contract_event 1 contract_identity 2 contract_observer 3 cpc_cpu 4 dtrace_kernel 5 dtrace_proc 6 dtrace_user 7 file_chown 8 file_chown_self 9 file_dac_execute 10 file_dac_read 11 file_dac_search 12 file_dac_write 13 file_downgrade_sl 14 file_link_any 15 file_owner 16 file_setid 17 file_upgrade_sl 18 file_flag_set 19 graphics_access
20 graphics_map 21 ipc_dac_read 22 ipc_dac_write 23 ipc_owner 24 net_bindmlp 25 net_icmpaccess 26 net_mac_aware 27 net_observability 28 net_privaddr 29 net_rawaccess 30 proc_audit 31 proc_chroot 32 proc_clock_highres 33 proc_exec 34 proc_fork 35 proc_info 36 proc_lock_memory 37 proc_owner 38 proc_priocntl 39 proc_session
Tabela de Privilégios 40 proc_setid 41 proc_taskid 42 proc_zone 43 sys_acct 44 sys_admin 45 sys_audit 46 sys_config 47 sys_devices 48 sys_ipc_config 49 sys_linkdir 50 sys_mount 51 sys_dl_config 52 sys_ip_config 53 sys_net_config 54 sys_nfs 55 sys_res_config 56 sys_resource 57 sys_smb 58 sys_suser_compat 59 sys_time
60 sys_trans_label 61 virt_manage 62 win_colormap 63 win_config 64 win_dac_read 65 win_dac_write 66 win_devices 67 win_dga 68 win_downgrade_sl 69 win_fontpath 70 win_mac_read 71 win_mac_write 72 win_selection 73 win_upgrade_sl 74 xvm_control
Script Python: monitoramento de privilégios#!/usr/bin/python# -*- coding: utf-8 -*-import osfrom time import sleepprivilegiosTxt = open("privilegios.txt")privilegios = {}for linha in privilegiosTxt.readlines():
try:id, priv = linha.split()privilegios[int(id)] = priv
except:pass
os.system("./privilegios.d > saidaD &")arquivo = open("saidaD")print "Monitorando privilégios de processos"print "%15s %15s %10s %25s" % ("execname", "probe", "id", "privilégio")while True:
linha = arquivo.readline()if not linha:
sleep(1)continue
try:execname, probe, probefunc, id = linha.split()print "%15s %15s %10s %25s" % (execname, probe, id, privilegios[int(id)])
except:pass
Execução – Script D
Execução – Script Python
Execução – Erro de Permissão de Escrita
Execução – Erro de Permissão de Escrita
Obrigado! Filipe Morgado Simões de Campos Rafael Barbolo Lopes Rafael Ivan Garcia