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

https://linuxtldr.com/mknod-command/

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://hskinnemoen.github.io/qemu/system/target-mips.html

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:

https://qemu-project.gitlab.io/qemu/system/images.html

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/firmadyne/libnvram/releases/tag/v1.0

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

https://people.debian.org/~aurel32/qemu/mips/