14
A crash course on Crash – FISL 12 1 A crash course on crash The Kernel crash analysis tool Rafael Aquini & Marcelo Mello Fórum Internacional do Software Livre 12 Porto Alegre - RS - Brasil

A crash course on Crash (FISL12)

Embed Size (px)

DESCRIPTION

A small talk given at FISL 12 about the kernel crash analysis tool (crash)

Citation preview

Page 1: A crash course on Crash (FISL12)

A crash course on Crash – FISL 121

A crash course on crash

The Kernel crash analysis tool

Rafael Aquini & Marcelo MelloFórum Internacional do Software Livre 12

Porto Alegre - RS - Brasil

Page 2: A crash course on Crash (FISL12)

A crash course on Crash – FISL 122

Agenda:

● O que é crash?

● Por que crash?

● Os requisitos para começar sua análise

● Lock n' load: o contexto do crash

● O conjunto de comandos

● Estudos de caso:● Under the hood: Investigando o Kernel on-the-fly com crash

● Dirty work: Caçando “NULL pointer dereference” em device drivers

Page 3: A crash course on Crash (FISL12)

A crash course on Crash – FISL 123

O que é crash?

● Utilitário de análise imagens de memória do Kernel, baseado no comando crash do UNIX SVR4, significantemente melhorado após um 'merge' completo com o GNU gdb debugger

● O “casamento” das duas ferramentas combina efetivamente as capacidades de “source-level debugging” do gdb com a natureza específica de análise de Kernel do crash

● Projetado para ser independente de versão de Linux

● Upstream: http://people.redhat.com/anderson/

Page 4: A crash course on Crash (FISL12)

A crash course on Crash – FISL 124

Por que crash?

● Projetado com foco em flexibilidade e extensibilidade, crash pode ter seu conjunto de comandos facilmente extendido, para atender as necessidades mais específicas de desenvolvedores e analistas;

● Pode ser utilizado para investigar as seguintes bases:● Live Linux systems; ● Linux kernel core dumps criados com:

● kdump (makedumpfile, netdump, diskdump)● xendump original, e ELF-format (XEN guests)● virsh dump (KVM guests)● IBM standalone core dump (s390, s390x)● LKCD (Linux Kernel Crash Dumps) Sourceforge project

Page 5: A crash course on Crash (FISL12)

A crash course on Crash – FISL 125

Por que crash?

● Por você ser um sysadmin responsável;

● Porque você vai querer saber a causa do problema;

● Para coletar evidências (memória RAM é volátil);

Por que você não é fotógrafo!!

Page 6: A crash course on Crash (FISL12)

A crash course on Crash – FISL 126

Os requisitos para começar sua análise

Page 7: A crash course on Crash (FISL12)

A crash course on Crash – FISL 127

Os requisitos para começar sua análise

# yum install –enablerepo=fedora-debuginfo –enablerepo=updates-debuginfo \ kexec-tools kernel-debuginfo crash

# /etc/grub.conf kernel /vmlinuz-xxxx crashkernel=128M crashkernel=128M@16M

# /etc/sysctl.confkernel.panic_on_oops = 1

# chkconfig kdump on

system-config-kdump

quantidade de memória reservada

início da região de memória reservada

Page 8: A crash course on Crash (FISL12)

A crash course on Crash – FISL 128

Os requisitos para começar sua análise.

● Código-objeto do kernel:● vmlinux obrigatoriamente de mesmo release do kernel que

gerou a imagem de memória, e compilado com a flag -g –– assim possuindo os simbolos de debug

● Imagem de memória:● Kernel crash dump (vmcore) criado por umas das ferramentas

citadas, ou acesso a /dev/mem em um live-system

● Plataforma e tipo de cpu:● x86, x86_64, ia64, ppc64, arm, s390 e s390x

● Linux kernel:● Compatibilidade assegurada de Red Hat 6.0 (2.2.5-12) até

RHEL6 (2.6.32+)

Page 9: A crash course on Crash (FISL12)

A crash course on Crash – FISL 129

Lock n' load: o contexto do crash

● Muitos comandos do crash são "context-sensitive";

● Após invocar uma sessão do crash, o contexto corrente é determinado seguindo os critérios:

● Em dumpfiles:● a tarefa que rodava quando die() die_nmi() foi chamada

● a tarefa que rodava quando panic() foi chamada

● a tarefa que rodava quando a interrupção de teclado ALT-SYSRQ-c foi recebida

● a tarefa que rodava quando echo "c" > /proc/sysrq-trigger foi emitido

● Em um “live-system”:● a própria tarefa do crash

Page 10: A crash course on Crash (FISL12)

A crash course on Crash – FISL 1210

Page 11: A crash course on Crash (FISL12)

A crash course on Crash – FISL 1211

O conjunto de comandos

● Display dos símbolos e estruturas do Kernel (gdb)● struct; union; *; p; whatis; sym; dis;

● Estado do sistema (kernel-aware)● bt; dev; files; fuser; irq; kmem; log; mach; mod; mount; net; ps; pte; runq; sig; swap; sys; task; timer; vm; vtop; waitq;

● Funções utilitárias (helpers)● ascii; btop; eval; list; ptob; ptov; search; rd; wr;

● Controle da sessão● alias; exit; extend; foreach (bt, vm, task, files, net, set, sig, vtop); gdb; repeat; set;

Page 12: A crash course on Crash (FISL12)

A crash course on Crash – FISL 1212

Antes de arregaçar as mangas:

● Material de consulta:● http://people.redhat.com/anderson/crash_whitepaper● http://en.wikipedia.org/wiki/X86_assembly_language● http://en.wikipedia.org/wiki/X86_architecture● http://en.wikipedia.org/wiki/X86_instruction_listings● http://en.wikipedia.org/wiki/X86-64

● Kernel source tree (source rpm)

● Cscope● http://cscope.sourceforge.net/

Page 13: A crash course on Crash (FISL12)

A crash course on Crash – FISL 1213

“Talk is cheap... So, show me the code!”

Linus Torvalds

DEMO

Page 14: A crash course on Crash (FISL12)

A crash course on Crash – FISL 1214

Obrigado!!

Dúvidas??