
Código PoC da apresentação do DEF CON 25
python-truss [options]
python-truss é uma ferramenta de rastreamento (tracing) de um processo Python, semelhante ao truss(1) do Solaris. Ela injeta código em um processo Python em execução e imprime os detalhes de cada chamada de função. Os rastreamentos de chamadas podem ser filtrados por módulo ou por tipo de chamada (entrada, saída, ou exceção).
Por exemplo:
# truss -p 1234
Python: Entering module call: os.getcwd()
Python: Exiting module call: os.getcwd() -> '/home/dan'
Python: Entering module call: os.path.realpath()
Python: Entering module call: os.path.realpath()
Python: Exiting module call: os.path.realpath() -> '/home/dan'
Python: Exiting module call: os.path.realpath() -> '/home/dan'
Python: Entering module call: os.listdir('/home/dan')
Python: Exiting module call: os.listdir('/home/dan') -> ['.bashrc', '.ssh', '.vimrc']
Python: Entering module call: posix.stat()
Python: Exiting module call: posix.stat() -> posix.stat_result(st_mode=16877, st_ino=1092340, st_dev=16777218L, st_nlink=3, st_uid=501, st_gid=20, st_size=102, st_atime=1319930363, st_mtime=1312848303, st_ctime=1312848303)
Python: Entering module call: os.path.isdir()
Python: Exiting module call: os.path.isdir() -> False
Python: Entering module call: os.path.expanduser()
Python: Exiting module call: os.path.expanduser() -> '/home/dan'
-p PID, --pid PID:
Anexar ao processo com o PID informado.
-P, --pending:
Anexar a processos futuros (ainda não iniciados).
-t, --trace:
Habilitar o rastreamento de chamadas. O padrão é rastrear chamadas de entrada e saída. Isso é equivalente a --trace-in --trace-out.
--trace-in:
Rastrear chamadas na entrada.
--trace-out:
Rastrear chamadas na saída.
--trace-exception:
Rastrear chamadas que geram exceção.
-f, --follow:
Rastrear processos filhos (não implementado).
-d, --debug:
Habilitar a saída de depuração interna.
--attach:
Anexar ao processo (não implementado).
-v, --version:
Exibir o número da versão e sair.
-h, --help:
Exibir uma mensagem de ajuda e sair.
Para anexar a um processo existente e rastrear todas as chamadas pertencentes ao módulo os:
$ truss -p 1234 --trace-in --trace-out os
Para iniciar um novo processo e rastrear todas as chamadas com base em expressões regulares:
$ truss --pending --trace='os.path.*' python
PYTHON_TRUSS_SERVER:
O servidor a ser usado para anexação.Esta ferramenta é apenas para fins educacionais. Ela não deve ser usada em sistemas de produção sem o devido entendimento das suas implicações.
Danilo J. S. Bellini
2012, Danilo J. S. Bellini