Modo monitor na placa broadcom BCM4313

Atualização: a partir do ubuntu 11.04 esta placa passou a ter modo monitor por padrão.

Neste tutorial irei descrever os passos para habilitar o modo monitor (também chamado de Modo de Monitoramento ou modo RFMON) na placa wireless BCM4313 fabricada pela broadcom. Os procedimentos foram realizados no sistema operacional Ubuntu GNU/Linux 10.10, no qual esta placa é reconhecida e funciona perfeitamente com o driver, outrora proprietário, da broadcom, porém não é suportado o modo monitor.

O driver que será instalado tem, atualmente, suporte para os seguintes chips:

Nome | ID do dispositivo

BCM4313 | 0x4727

BCM43224 | 0x4353

BCM43225 | 0x4357

Para fins de informação publico os dados da placa obtidos com o comando lshw -html:

id:
network
description: Wireless interface
product: BCM4313 802.11b/g LP-PHY
vendor: Broadcom Corporation
physical id:
bus info:
pci@0000:12:00.0
logical name:
eth1
version: 01
serial: removido
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
configuration:
broadcast = yes
driver = wl0
driverversion = 5.60.48.36
latency =
multicast = yes
wireless = IEEE 802.11
resources:
irq : 17
memory : fbc00000-fbc03fff

Saída do lspci, transcrevi apenas informações da placa:

12:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g LP-PHY (rev 01)

Primeiramente é preciso realizar o download do código fonte do driver e do firmware do linux, além dos pacotes necessários para compilação e uso de repositórios git, para isso execute em um terminal:

mkdir BCM4313; cd BCM4313
sudo apt-get install build-essential git-core
wget -O linux-next-a694cb1.tar.gz http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=snapshot;h=a694cb1016824f478da2dcef9658f902aefe3b14;sf=tgz
tar -xvzf linux-next-a694cb1.tar.gz
git clone git://git.kernel.org/pub/scm/linux/kernel/git/dwmw2/linux-firmware.git

Após o repositório git ser clonado para a sua máquina entre no diretório linux-next, abra o arquivo Makefile e adicione no final dele o seguinte conteúdo:

KDIR    := /lib/modules/$(shell uname -r)/build
ccflags-y += -I$(SUBDIRS)/include -I$(SUBDIRS)/sys -I$(SUBDIRS)/phy

default:
    echo $(PWD)
    $(MAKE) -C $(KDIR) SUBDIRS=$(shell pwd) CONFIG_BRCM80211_PCI=y V=1 modules

Agora compile e copie o módulo para o diretório correto.

make
sudo cp brcm80211.ko /lib/modules/$(uname -r)/

Passamos ao firmware.

cd ../linux-firmware/
sudo cp brcm/bcm43xx* /lib/firmware/brcm
sudo ln -s /lib/firmware/brcm/bcm43xx-0-610-809-0.fw /lib/firmware/brcm/bcm43xx-0.fw
sudo ln -s /lib/firmware/brcm/bcm43xx_hdr-0-610-809-0.fw /lib/firmware/brcm/bcm43xx_hdr-0.fw

Carregando o módulo:

sudo modprobe mac80211
sudo insmod /lib/modules/$(uname -r)/brcm80211.ko
sudo depmod -a

Se você obter um erro parecido com o abaixo revise todos os procedimentos que foram executados.

insmod: error inserting ‘/lib/modules/2.6.35-25-generic/brcm80211.ko’: -1 Invalid module format

Agora é preciso fazer com que o módulo seja carregado no processo de inicialização do sistema, para isso abra o arquivo /etc/modules (como root) e insira uma linha contendo:

brcm80211

Depois abra o arquivo /usr/lib/pm-utils/defaults (também como root) e após o trecho _# SUSPENDMODULES=”” insira:

SUSPEND_MODULES="brcm80211"

Reinicie o computador, após isso você deve ser capaz de colocar a placa em modo monitor. No meu caso a placa passou a ser reconhecida como wlan0, antes era eth1.

wlan0     IEEE 802.11bgn  ESSID:off/any
          Mode:Managed  Frequency:2.462 GHz  Access Point: Not-Associated
          Tx-Power=19 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

Update:

Atualmente, quando se vai realizar alguma tarefa, injeção de pacotes, por exemplo, com o aireplay, aparecerá uma mensagem do tipo:

mon0 is on channel -1, but the AP uses channel 6

Para solucionar o problema acesse: Corrigindo canal negativo no aircrack-ng.

Referências:

http://ubuntuforums.org/showthread.php?t=1617380