Mobile Pentesting

Intro

Al een tijd liep ik met het idee rond om een Android telefoon in te zetten als (draadloos) pentesting (penetration testing) apparaat. Helaas waren de tutorials die ik online tegen kwam incompleet, ouderwets of werkten gewoonweg niet. Daarom besloot ik deze tutorial te schrijven wat met iedere (unlocked en rooted) Android telefoon zou moeten werken.

Update

If you prefer not to build the entire ROM yourself but only the kernel, have a look at this post. It guides you through with easy to follow steps.

Requirements

Om dit geheel werkend te krijgen heb je twee dingen nodig. Een ROM (of kernel) met de juiste modules (drivers) geladen. En een draadloze chip dat 'monitor mode' ondersteund. Een paar van deze chips zijn:

  • Atheros AR9271
  • MediaTek MT7601u
  • Ralink RT3070
  • Ralink RT3572
  • Ralink RT5370
  • Ralink RT5572
  • Realtek RTL8812AU
  • Realtek RTL8189FTV
  • Vele anderen
Paar van mijn draadloze netwerkkaarten

In deze tutorial gebruik ik de MediaTek M7601u van AliExpress.

If you have the same phone as me (Xiaomi Redmi Note 7 / Lavender) you can download my ROM @ AndroidFileHost hier.

The ROM built process

Dependencies

Ik gebruik Ubuntu 18.04 in deze tutorial. Ubuntu kan je native draaien of binnen een virtual machine.

sudo apt update && apt upgrade -y

Voor de Android repo moeten we wat software installeren

sudo apt install bc bison build-essential ccache curl flex g++-multilib \
gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev \
lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev \ 
libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync \
schedtool squashfs-tools xsltproc zip zlib1g-dev python

Repo download

Download en installeer het repo bestand

mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

voet ~/bin toe aan PATH door het volgende aan ~/.profile toe te voegen

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Gevolgd door een:

source ~/.profile

Download de Pixel-Experience repo. Dit zal een tijd gaan duren afhankelijk van je internetverbinding.

mkdir pixel-experience && cd pixel-experience
repo init -u https://github.com/PixelExperience/manifest -b ten
repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags

Device and vendor tree

After it finishes. Download the device/vendor tree and kernel for your device. (mine is xiaomi redmi note 7- lavender)

export USE_CACHE=1
ccache -M 50G
. build/envsetup.sh
lunch aosp_lavender-userdebug

Kernel modification

Now we have to modify the kernel config in order to add support for additional wireless cards.

cd kernel/xiaomi/lavender
export ARCH=arm64
make lavender-perf_defconfig
make menuconfig

In menuconfig voeg to/wijzig de volgde items:

Schakel loadable module support in

  • Schakel loadable module support in
    • Module versioning support (deselecteren)
    • Source checksum for all modules (deselecteren)
    • Module signature verification (deselecteren)

Dit heb ik gedaan omdat als we later een extra module willen compileren (via kernel build / make modules) er niet geklaagd wordt over een 'verkeerde' signeercode.

Schakel mac80211 en cfg80211 support in

  • Networking support
    • Wireless
      • cfg80211 – wireless configuration API (buit-in select)
      • Generic IEEE 802.11 Networking Stack (mac80211) (module selecteren)

Schakel Wireless Lan device support in

  • Device Drivers
    • Network device support
      • Wireless LAN
        • Select wireless lan drivers you need (module selecteren)
Ik heb Atheros HTC (ath9k-htc) support ingeschakeld
Ralink (rt30xx) support
En MediaTek (mt7601u) support

Exit en sla de config file op en kopieer deze naar de config locatie van Pixel-Experience. Nogmaals de mijne is lavender.

cp .config arch/arm64/configs/lavender-perf_defconfig

Een make mrproper of de kernel source op te schonen.

make clean && make mrproper

Module edit

Voor de volgende stap moeten we drie bestanden wijzigen om ervoor te zorgen dat de Atheros module succesvol kan worden gecompileerd.

  • kernel/xiaomi/lavender/net/mac80211/mlme.c
  • kernel/xiaomi/lavender/net/mac80211/tx.c
  • kernel/xiaomi/lavender/drivers/net/wireless/ath/regd.c

MAC80211

kernel/xiaomi/lavender/net/mac80211/mlme.c
Op regel 1343 vervang IEEE80211_BAND_60GHZ with NL80211_BAND_60GHZ

kernel/xiaomi/lavender/net/mac80211/tx.c
Op regel 167 vervang IEEE80211_BAND_60GHZ with NL80211_BAND_60GHZ

Atheros

kernel/xiaomi/lavender/drivers/net/wireless/ath/regd.c
Op regel 670 en 672 vervang IEEE80211_BAND_2GHZ with NL80211_BAND_2GHZ

Built the ROM

Nu kunnen we de ROM gaat bouwen om deze te kunnen flashen naar de telefoon. Dit kan een tijd duren afhankelijk van je computer. Op mijn AMD 3700x duur het ongeveer 45 minuten.

Start the build in the root of the Pixel-Experience directory with:

mka bacon -j$(nproc --all)

Zodra dit is afgerond heb je als het goed is een ROM zip bestand in de output directory.

ls out/target/product/lavender

Flash the ROM

Met dit bestand kunnen de telefoon flashen met nieuwe software inclusief de draadloze modules en a aria-label=" (opens in a new tab)" href="https://github.com/topjohnwu/Magisk/releases/" target="_blank" rel="noreferrer noopener">Magisk (tbv rooten telefoon) En vanuit gaande dat de telefoon reeds geunlocked is en TWRP is geinstalleerd.

  • Schakel de telefoon uit
  • Hou volumeknop omhoog + powerknop tegelijk in
  • TWRP start op
  • Ga naar: Wipe
    • Swipe to Factory Reset
    • Format Data -> Yes
  • Ga naar: Advanced
    • ADB Sideload
      • Select wipe cache & dalvik
      • Slide to start ADB Sideload
  • On the PC side go to the directory of the newly created ROM
    • Type: adb sideload PixelExperience_lavender_10.0-20200130-0720-UNOFFICIAL.zip
  • When ROM installation finishes go back and sideload Magisk
    • Type: adb sideload Magisk.zip
  • Now reboot the phone
  • First boot could take some time. Be patient

Magisk

After the phone boots go through the usual setup (wifi, google account etc) then go to magiskmanager.com to download and install Magisk Manager.

If successful it should look like this

Termux

So what we’ve achieved so far is that we have a rooted Android phone with the proper modules installed. Next we need to install Termux and the Kali Nethunter chroot to take advantage of the huge pentesting software collection Kali offers. Although i’m only going to use Wifite and Bettercap in this example.

Install Termux through the Google Playstore and start it up

In Termux first update

pkg update

Then install the root-repo

pkg install root-repo

Load the modules

Now we can load the wireless modules

tsudo /system/bin/modprobe -d /vendor/lib/modules/ ath9k-htc
tsudo /system/bin/modprobe -d /vendor/lib/modules/ mt7601u

To load the modules at Termux startup create a script called m.sh

pkg install nano
nano m.sh

Insert the following code into m.sh

#!/bin/bash

export PATH=&PATH:/system/bin/

modules="/vendor/lib/modules/"

tsudo modprobe -d $modules ath9k-htc
tsudo modprobe -d $modules rt2800usb
tsudo modprobe -d $modules mt7601u

Make m.sh executable and edit bashrc

chmod +x m.sh
nano ~/.bashrc

Add this line to bashrc

bash m.sh

Kali

Now that module loading is setup correctly we can proceed to download Kali Nethunter installer script

curl -LO https://raw.githubusercontent.com/Hax4us/Nethunter-In-Termux/master/kalinethunter

Install Kali Nethunter

chmod +x kalinethunter
./kalinethunter

Start Kali Nethunter

tsudo startkali

Apt update & upgrade

apt update && apt upgrade -y

Wifite

After upgrading Kali we’re ready to proceed to install Wifite. If you’re not familiar with Wifite it’s a handy tool to probe surrounding wireless networks with different kinds of attack.

  • PMKID – Clientless WPA PSK capture
  • WPA – Standard deauth PSK capture
  • WPS – Pixiedust/Bully WPS attack
  • WEP – Weak IV’s
  • etc
apt install wifite bully pyrit macchanger hcxtools hcxdumptool

Run Wifite.

wifite

Bettercap

Optionally you can install Bettercap. Bettercap is the swiss army knife when is comes to (wireless) networks and has a neat mass deauth script. (which captures handshakes)

apt install bettercap bettercap-ui bettercap-caplets

Run Bettercap

bettercap -iface wlan1 -caplet http-ui

On your phone point your browser to: http://127.0.0.1

In the caplets tab on top of your screen there is a caplet called “mass-deauth”. Select it and click on the “play button”

Bettercap will start to search for wireless networks and it’s clients and capturing handshakes by deauthing all of them.

Captured handshakes will be stored in the hs directory. Convert these cap files to hccapx with cap2hccapx for use with Hashcat.

So thats it. A fully functioning mobile pentesting device built with your own ROM.

nl_NLDutch