Engenharia Reversa#
Passos iniciais - Análise de firmware#
fontes: https://n0.lol/intro-to-firmware-analysis/ https://faisalfs10x.github.io/thm/IoT#
binwalk - facilitador para extração de informações de binarios e extração do squashfs
radare2 - similar ao guidra, mas interface TUI.
obter informações do binario/firmware
binwalk
Extração do squashfs
binwalk -e
cd _rootfs*
identifique o tipo da arquitetura do processador via algum binário:
file bin/busybox bin/busybox: ELF 32-bit MSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped
iniciando o qemu chrootado:
cp $(command -v qemu-mips) .
sudo chroot . /qemu-mips /bin/sh
procurar o /etc/inittab; /etc/init.d/rcS /etc/init.d/* algo util.
qemu scripts:
https://github.com/firmadyne/firmadyne/blob/master/scripts/makeImage.sh
github.com/attify/firmware-analysis-toolkit/blob/master/fat.py
Sobre o /dev:
https://unix.stackexchange.com/questions/241173/how-are-dev-linux-files-created
Documentação oficial do kernel linux, padronizando os tipos de arquivos:
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/devices.txt
Kernel Mips:
https://github.com/pr0v3rbs/FirmAE_kernel-v4.1/releases/tag/v1.0
https://github.com/zyw-200/FirmAFL/blob/master/firmadyne_modify/makeImage.sh
https://downloads.openwrt.org/releases/24.10.3/targets/malta/le/
Tentativa de criar e emular hardware com QEMU:#
Documentação para usar um dir como disco:
Cria a imagem do disco
qemu-img create -f raw name.img size
Criar uma partição primaria:
fdisk name.img
Mapeia o disco em um dispositivo de loopback:
kpartx -asv name.img
- -a - add partition
- -s - Sync mode
- -v - Verbose
- -d - Disconnect/remove loop*
Criar a tabela do sistema de arquivo: Assumindo que no comando anterior foi atribuido para o loop0.
mkfs.ext2 -L QEMU /dev/mapper/loop0p1 mount …
sincronize?
rsync –progress -aLKptl ROOTFS DESTINATION
ou
tar cv * | tar xC DESTINATION
Dependencias:#
https://github.com/pr0v3rbs/FirmAE_kernel-v4.1/releases/tag/v1.0
https://www.cs.jhu.edu/~cs333/reference.html Documentação do MIPS
Verifique o Endianess!#
use o radare2 iI bin/busybox.
O utilitário readelf pode ser mais rápido que o r2.
Para a ferramenta qemu-system-mips{el}
o el é para little-endian.
teste: vou usar esse kernel: https://downloads.openwrt.org/releases/24.10.3/targets/malta/be
- Não deu certo pois subiu o rootfs do openwrt!
Coisas aleatorias que fui achando e salvando:#
https://github.com/therealsaumil/emux/blob/master/docs/emulating-dlink-dcs935.md