Paper ini membahas tentang firmware hacking pada router Pineapple MK5 dengan cara mengflashkan firmware MK5 yang telah dimodifikasi ke dalam router GL-inet. Prosesnya meliputi analisis firmware menggunakan Binwalk untuk mengetahui struktur dan kompresi file, ekstraksi menggunakan Firmware Mod Kit, modifikasi file menggunakan hex editor, dan penulisan ulang firmware hasil modifikasi ke dalam router GL-inet melalui USB serial.
Devsecops: membangun kemampuan soc di dalam devsecops pipeline - Dedi Dwianto
Firmware hacking, slash the pineapple for fun
1. Firmware Hacking, Slash the Pineapple for Fun
smrx86
Independent Researcher
ramatrinanda@gmail.com
Abstrak
Firmware hacking secara umum dapat dipahami sebagai tindakan mengkustomisasi konten sebuah
firmware untuk kemudian di tulis ulang/flashing pada rom memori perangkat terkait. Tujuannya beragam,
mulai untuk melakukan patching/penambalan celah keamanan hingga menanamkan malware. Dalam paper ini
firmware hacking dilakukan untuk mengeksploitasi firmware pineapple MK 5 untuk di flashing kedalam router
GL-inet.
Kata kunci: Firmware hacking, reverse engineering, eksploitasi, flashing.
1. Pengantar
Di berbagai kesempatan berbeda, saya sering menemukan tulisan yang menyarankan untuk
mempelajari openwrt sebagai gerbang untuk memahami linux secara keseluruhan. Dengannya anda bisa
mempelajari linux fundamental, networking, wireless security bahkan firmware developing sekalipun.
Semua itu dikarnakan ketersediaan dan kemudahan framework dalam membuild sebuah firmware untuk
banyak platform chipset.1
Berbagai fungsionalitas dapat dengan mudah dikreasikan dengan openwrt. Sebuah perangkat
portable multiguna bisa dibuat dengan biaya yang rendah dan tingkat penggunaan energi yang efisien.
Dan karena kehandalan yang dimilikinya openwrt menjadi sebuah operating system yang sulit untuk di
tolak oleh banyak firmware developer.
Sebagai contoh dibidang security, nama Hak5 menjadi sangat dikenal dan menjadi buah bibir karna
penggunaan openwrt. Sejak versi awal pineapple, OS ini dipilih untuk mempersenjatai router-router
yang mereka dipasarkan. Pengembangan pineapple sendiri oleh hak5 team terbilang cukup pesat, dalam
kurun waktu 2011 s/d 2015 puluhan ver firmware mulai dari Mk 1 hingga MK 5 sudah di publishkan.
Versi yang terakhir keluar adalah versi 2.3 yang ditujukan untuk router MK 5.
Disis lain,
Layaknya gula diantara semut, para opreaker melihat keberadaan pineapple sebagai buruan untuk
objek penelitian. Mereka memandang openwrt sebagai petunjuk penting yang memungkinkan untuk
mengembangkan perangkat penetrasinya sendiri.2
Kendati minim dari sisi source code namun hal
tersebut tidak menjadi penghalang. Berbagai metode selalu diupayakan dan firmware hacking adalah
salah satu diantaranya.
Dengan motivasi yang sama seperti tersebut diatas, maka paper ini dibuat. Tujuannya sederhana,
guna memberikan sedikit gambaran tentang firmware hacking disertai pembuktian implementasi
firmware MK 5 pada router GL-inet. Dalam hal ini pemilihan router GL-inet didasarkan banyak
kemiripan yang dimilikinya dengan router MK 5 ( jenis CPU chipset, Wlan, besar ROM maupun
kapasitas RAM). Selain itu router ini juga terbilang relatif murah dan gampang didapatkan dari toko-
toko penjualan perangkat komputer secara online.
1.1. Pengenalan Konsep
Sebelum melangkah lebih jauh ada baiknya kita mengenal dan memahami perihal tentang firmware
dan firmware hacking.
1.1.a. Firmware dan Firmware Hacking
Firmware bisa didefinisikan sebagai software inti/utama yang terdapat dalam Rom memori sebuah
perangkat keras. Dia bertanggung jawab atas semua fungsi operasi dasar baik itu input maupun output.
1 Alan Holt and Chi-Yu Huang, "Embedded Operating Systems, A Practical Approach," in introduction,
virtualisation. London, Springer-Verlag, 2014, pp. 7.
2 Andy Davis. “Blue for the pineapple.”, Internet: http://penturalabs.wordpress.com/2013/04/25/blue-for-the-
pineapple/, Apr. 25, 2013[Apr. 20,2015].
2. Firmware hampir digunakan di semua alat-alat elektronik yang dibekali rom memory, ex: dvd player.
Handphone, kamera digital, harddisk komputer hingga peralatan-peralatan medis. 3
Untuk menunjang keterbaruan informasi atau perbaikan atas celah dimilikinya, firmware di dalam
perangkat tersebut juga dibekali kemampuan untuk ditulis ulang atau diupgrade. Dibagian inilah
firmware hacking mengambil perannya.4
Firmware hacking bisa dipahami sebagai metode mengkustomisasi konten sebuah firmware untuk
kemudian ditulis ulang (flashing) pada rom perangkat terkait. Serangkaian kode yang
dikostumisasi/dimodifikasi bisa saja ditujukan melakukan perbaikan atau malah untuk menanamkan
malware ke dalam firmware tersebut. Proses firmware hacking sendiri melibatkan reverse engineering
dalam tahapan pelaksanaannya.
Secara umum firmware hacking dilakukan melalui beberapa tahapan.5
1. Recognize firmware, recognize adalah tahap dimana kita menggali sebanyak-banyaknya
informasi yang terkandung dalam sebuah firmware.
2. Extracting/unpacking firmware, di tahap ini kita melakukan upacking semua file yang
terkandung dalam firmware.
3. Sorting & find unique file, file-file yang kita dapatkan kemudian disortir dan untuk file yang
dalam premis awal pantas dimodifikasi akan ditandai.
4. Debugging test, ini adalah tahapan dimana kita mencoba menjalankan firmware secara
keseluruhan atau hanya file-file tertentu untuk kemudian kita evaluasi. Debugging test bisa
dijalankan diatas emulator atau diperangkat berplatform sama yang sudah dimonitoring lewat
koneksi uart ataupun jtag.
5. Eksplotation & Final Repacking, tahapan terakhir menindak lanjuti hasil evaluasi debugging
test dengan melakukan eksploitasi terhadap file terkait dan baru kemudian di repacking kembali
menjadi sebuah firmware file.
Gambar 1. Tahapan-tahapan firmware hacking.
1.2. Informasi Dasar Perangkat Keras.
Router Mk 5 adalah perangkat yang khusus dibuat dan dipasarkan oleh hak5. Beberapa fitur yang
dimilikinya jarang ditemukan pada router lain. Diantaranya adalah keberadaan slot sd card untuk
menyimpan infusion aplikasi pineapple, 7 buah dip switch serta adanya 2 wlan chipset card guna
memaksimalkan eksploitasi jaringan nirkabel.
Berikut ini spesifikasi dan bundling router MK 5:6
3 Pinzaru. "What is firmware?.", internet:http://incepator.pinzaru.ro/software/what-is-firmware/, Apr.
2015[Jun. 6,2015].
4 Wikipedia. "Firmware.", internet: http://en.m.wikipedia.org/wiki/Firmware, last edited, Jun. 5, 2015[Jun.
10, 2015].
5 Silverbug and Redhidden. “Fu~n of Attacking Firmware .”, avaiable:
http://www.powerofcommunity.net/poc2012/re&si.pdf, 2012[Jun. 10, 2015].
6 Andy Davis. “Naked WiFi Pineapple Mark V!.”, Internet:
https://penturalabs.wordpress.com/2013/10/27/naked-wifi-pineapple-mark-v/, Oct. 27, 2013[Apr. 20,2013].
3. CPU 400 MHz MIPS Atheros AR9331 version 1 SoC
Memory 16 MB ROM (w25q128 (16384 Kbytes)), 64 MB DDR2 RAM (Hynix
H5PS5162GFR-Y5C)
Disk Micro SD support up to 32 GB, FAT or EXT, 2 GB Included
Mode Select 5 DIP Switches 2 System, 3 User configurable
Wireless Atheros AR9331 IEEE 802.11 b/g/n + Realtek RTL8187 IEEE 802.11 a/b/g
Ports (2) SMA Antenna, 10/100 Ethernet, USB 2.0, Micro SD, TTL Serial,
Expansion Bus
Power DC in Variable 5-12v, ~1A, 5.5mm*2.1mm connector, International Power
Supply
Status Indicators Power LED, Ethernet LED, Wireless 1 LED, Wireless 2 LED
JTAG (Tags are on reverse of board)(IO6=TDI, IO7=TDO,IO8=TMS)
Default OS Customized Openwrt
MTD partition info
0x000000000000-0x000000020000 : "u-boot"
0x000000020000-0x000000102744 : "kernel"
0x000000102744-0x000000ff0000 : "rootfs"
0x000000bb0000-0x000000ff0000 : "rootfs_data"
0x000000ff0000-0x000001000000 : "art"
0x000000020000-0x000000ff0000 : "firmware"
Gambar 2. Board router MK 5.
4. Sedangkan perangkat yang akan kita gunakan untuk di flash dengan firmware MK 5 yang
dimodifikasi adalah router bermerk GL-inet.
Berikut spesifikasi dari router GL-inet:
CPU 400 MHz MIPS Atheros AR9331 version 1 SoC
Memory 16 MB ROM (winbound w25q128 FYSC (16384 Kbytes)), 64 MB DDR RAM
(Etrontech EM6AB160TSD-5D) .
Wireless Atheros AR9331 IEEE 802.11 b/g/n.
Ports (2) 10/100 Ethernet, USB 2.0, TTL Serial, (6) exposed unheader GPIO pin.
Power Miniusb powered 5v, ~1A.
Status Indicators Power LED, Ethernet LED.
Default Os Customized Openwrt
MTD partition info
0x000000000000-0x000000020000 : "u-boot"
0x000000020000-0x00000010272c : "kernel"
0x00000010272c-0x000000ff0000 : "rootfs"
0x000000cc0000-0x000000ff0000 : "rootfs_data"
0x000000ff0000-0x000001000000 : "art"
0x000000020000-0x000000ff0000 : "firmware"
Uboot costumized by pepe2k, this the most important change of it's modification is an inclusion of a
web server, based on **[uIP 0.9 TCP/IP stack](http://www.gaisler.com/doc/net/uip-
0.9/doc/html/main.html)**. It allows to upgrade **firmware**, **U-Boot** and **ART** (Atheros
Radio Test) images, directly from your web browser, without need to access serial console and
running a TFTP server. You can find similar firmware recovery mode, also based on uIP 0.9 TCP/IP
stack, in **D-Link** routers.
Gambar 3. Board router GL-Inet
Diatas kertas memang terlihat perbedaan yang amat mencolok antara router MK 5 versus router GL-
inet, tapi jika dilihat dari sisi cpu chipset, besar rom dan ram akan terlihat kesetaraan antara keduanya.
5. Dari banyak riset sebelumnya penulis berhipotesa bahwa firmware MK 5 berpeluang besar bisa di
flashing dan dijalankan di router GL-inet. Tapi tentu melewati prosedur firmware hacking sebelumnya.
1.3. Persiapan Lab/ Lab Preparation.
Ada beberapa peralatan dan software yang perlu disediakan sebelum memulai riset. Diantaranya
adalah:
• Binwalk v 2.1.0 (linux software) 7
: Binwalk adalah aplikasi yang didisain untuk melakukan
analisis firmware, ekstraksi dan reverse engineering file firmware image. Untuk melakukan
penginstalan binwalk di perlukan beberapa dependencies python 2.7 / 3 dan python lzma.
Binwalk dapat di install dengan menginput perintah di shell terminal seperti berikut:
$ sudo apt-get install python-lzma
$ wget https://github.com/devttys0/binwalk/archive/master.zip
$ unzip master.zip
$ (cd binwalk-master && sudo python setup.py install)
• Firmware-mod-kit (linux software)8
: fungsi utama tool ini adalah untuk melakukan extraksi dan
sekaligus me-repack ulang file firmware image. Firmware-mod-kit dapat diinstal dengan cara
perintah seperti dibawah ini di shell terminal:
$ sudo apt-get install subversion build-essential zlib1g-dev
$ mkdir firmware_mod_kit
$ cd firmware_mod_kit
$ svn checkout http://firmware-mod-kit.googlecode.com/svn/trunk/ firmware-
mod-kit-read-only
• Hex editor (software), ada banyak jenis hex editor yang bisa gunakan untuk melakukan
modifikasi file. Di paper ini saya menggunakan Ghex.
• USB2TTL (hardware) : USB2TTL adalah usb dongle yang digunakan untuk memonitoring dan
menginterrupt perintah lewat koneksi UART yang terdapat pada perangkat. Dongle ini sangat
diperlukan dalam proses debugging yang dijalankan lewat aplikasi minicom/putty. Berikut
tampilan dongle tersebut.
Gambar 4. Dongle USB2TTL dan cara pemasangannya di GL-inet
2. Firmware Hacking
2.1. Recognize Firmware Image
Firmware yang akan kita analisa adalah firmware versi upgrade-2.2.0.bin. Pemilihan file firmware
versi upgrade-2.2.0.bin di banding versi upgrade-2.3.0.bin didasarkan info yang didapatkan dari
halaman bugtracker pineapple yang memperlihatkan bahwa versi upgrade-2.3.0.bin memiliki bug yang
7 Craig Heffner, "Quick Start Guide.", Internet: https://github.com/devttys0/binwalk/wiki/Quick-Start-Guide,
Dec. 1, 2014[Jun. 6, 2015].
8 "DD-WRT Mod Kit.", Internet: http://3iii.dk/wiki/index.php?title=DD-WRT_Mod_Kit&oldid=37, [Dec.
27,2014].
6. serius di tool karma-nya.9
Pada tahap pertama ini kita akan mengindetifikasi firmware image dengan
bantuan Binwalk.
Berikut hasilnya:
$ binwalk upgrade-2.2.0.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
512 0x200 LZMA compressed data, properties: 0x6D, dictionary
size: 8388608 bytes, uncompressed size: 2805816 bytes
927532 0xE272C Squashfs filesystem, little endian, version 4.0,
compression:xz, size: 12259772 bytes, 2932 inodes, blocksize: 262144 bytes,
blocksize: 262144 bytes, created: 2015-01-12 22:39:23
Jika anda menginstal binwalk disertai graph plugin anda juga bisa menganalisa firmware ini dengan
dalam bentuk grafik signature entrophy. Berikut tampilannya:
Gambar 5. Hasil analisa entrophy dan signature binwalk dalam bentuk grafik.
Dari hasil analisa binwalk kita mendapatkan hasil firmware ini terdiri dari 2 bagian utama yakni:
• Bagian header yang dikompresi dengan LZMA, bagian ini mengambil posisi diawal firmware.
• Bagian rootfs yang bertipe Squashfs dan dikompresi dengan xz.
2.2. Extracting Firmware Image
Aplikasi Binwalk sebenarnya bisa melakukan ekstraksi, tapi kita akan menemui kesulitan jika akan
melakukan repack ulang. Maka pada tahap ini kita akan menggunakan firmware mod kit. Untuk
memudahkan proses ekstraksi kita perlu menempatkan file firmware image dalam folder yang sama
dengan lokasi script firmware mod kit.
Berikut tampilannya:
$ ./extract-firmware.sh upgrade-2.2.0.bin fmk/
Firmware Mod Kit (build-ng) 0.82, (c)2011-2013 Craig Heffner, Jeremy Collake
Scanning firmware...
9 Lihat halaman website https://www.wifipineapple.com/?bugs_pub&action=view&id=302 yang menyatakan
adanya bug blacklist karma pada versi upgrade-2.3.0.bin. Selain itu lihat juga indeks jumlah download
versi upgrade-2.2.0.bin yang lebih tinggi ketimbang versi upgrade-2.3.0.bin di
https://www.wifipineapple.com/?downloads.
7. Scan Time: 2015-06-21 11:24:28
Signatures: 193
Target File: /home/smrx86/firmware_mod_kit/firmware-mod-kit-read-only/upgrade-
2.2.0.bin
MD5 Checksum: 457a32d5b78cbdb5cf47fcb0fd3b719a
DECIMAL HEX DESCRIPTION
----------------------------------------------------------------------------------
---------------------
512 0x200 LZMA compressed data, properties: 0x6D, dictionary size:
8388608 bytes, uncompressed size: 2805816 bytes
927532 0xE272C Squashfs filesystem, little endian, version 4.0,
compression: size: 12259772 bytes, 2932 inodes, blocksize: 262144 bytes,
created: Tue Jan 13 05:39:23 2015
Extracting 927532 bytes of header image at offset 0
Extracting squashfs file system at offset 927532
Extracting 96 byte footer from offset 13238180
Extracting squashfs files...
[sudo] password for smrx86:
Firmware extraction successful!
Firmware parts can be found in '/home/smrx86/firmware_mod_kit/firmware-mod-kit-
read-only/fmk/*'
Hasil ekstraksi firmware bisa kita temukan di folder fmk/ seperti berikut:
$ tree -a fmk/
fmk
├── image_parts
│ ├── footer.img
│ ├── header.img
│ └── rootfs.img
├── list
├── logs
│ ├── binwalk.log
│ └── config.log
├── new-filesystem.squashfs
├── new-firmware.bin
├── openwrt.bin
└── rootfs
├── bin
│ ├── ash -> busybox
│ ├── bash
…........
Kalau melihat hasil identifikasi yang dilakukan firmware mod kit terlihat ada perbedaan hasil dengan
yang sebelumnya kita lakukan dengan Binwalk. Terlihat bahwa part firmware yang bertipe Squashfs
tidak dikenali jenis kompresinya. Hal ini disebabkan oleh tool binwalk yang dibundling didalam
Firmware mod kit merupakan versi yang lama. Oleh karena itulah kita hanya akan mengacu pada
informasi yang didapatkan lewat tahapan pertama (hasil binwalk v 2.1.0).
2.3. Sorting and Find Unique File.
Setelah mengektraksi kita akan melakukan indentifikasi file dan modifikasi awal sebelum melakukan
debugging test. Adapun file yang perlu kita tandai adalah fstab (./fmk/rootfs/etc/config/fstab) dan file
format_sd (./fmk/rootfs/pineapple/components/system/resources/includes/files/format_sd) yang sangat
erat kaitannya dengan penggunaan slot micro sd & card di router MK 5. File fstab ini tidak perlu
langsung di edit karna akan dilakukan bersama file lainnya di tahap eksploitasi.
Tapi untuk melakukan debugging ada file yang harus dimodifikasi. File yang akan kita examine
tersebut adalah header.img (./fmk/image_parts/header.img). “Header.img” merupakan part 1 dari
firmware yang dikompresi dengan LZMA. Part ini menyimpan ID machine/hardware yang akan dicek
setiap kali kita akan melakukan flashing lewat web ui ataupun terminal ssh. Tanpa modifikasi proses
flashing akan dihentikan/halt seketika.
8. Gambar 6. Kegagalan verifikasi saat proses flashing akibat header id yang tak dimodifikasi.
Untuk menghindari hal tersebut diperlukan pengeditan dengan hex editor pada header.img di offset
0x0040.10
Nilai yang dirubah mengacu pada Table. HW identification in lzma header.11
Gambar 7. Modifikasi hardware id pada header di offset 0x0040.
Setelah melakukan pengeditan header.img dan menyimpannya, maka proses dilanjutkan dengan
repacking awal dengan mengeksekusi ./build-firmware.sh. Namun sebelumnya kita akan melakukan
modif file build-firmware.sh (./ build-firmware.sh) dan config.log (./fmk/logs/config.log) agar bisa
melakukan repacking dengan kompresi xz.
Gambar 8. Modifikasi build-firmware.sh supaya mendukung kompresi jenis xz.
10 Tomcom "Flashing TP-Link TL-MR3040 v2.0 (Version / Revison 2) with V1.0 Image.", Internet:
https://forum.openwrt.org/viewtopic.php?id=44090, May, 9, 2013[Jun. 22, 2015].
11 Lihat tabel di Lampiran.
9. Gambar 9. Modifikasi config.log pada bagian fs_compression dari “gzip” ke “xz”.
Setelah melakukan pengeditan ./build-firmware.sh, dan config.log kita juga perlu menghapus
beberapa file agar nantinya tak bermasalah dalam ukuran firmware yg di build. Dalam hal ini saya
menghapus file notification.gif (./fmk/rootfs/pineapple/includes/img/notification.gif) karna perannya tak
terlalu signifikan.12
Baru kemudian dilanjutkan dengan membuild firmware.
$ sudo su
[sudo] password for smrx86:
# rm -Rf ./fmk/rootfs/pineapple/includes/img/notification.gif
# ./build-firmware.sh fmk/
Firmware Mod Kit (build-ng) 0.82, (c)2011-2013 Craig Heffner, Jeremy Collake
Building new squashfs file system...
Parallel mksquashfs: Using 2 processors
Creating 4.0 filesystem on /home/smrx86/firmware_mod_kit/firmware-mod-kit-read-
only/fmk/new-filesystem.squashfs, block size 262144.
[=============================================================/]
2538/2538 100%
Exportable Squashfs 4.0 filesystem, xz compressed, data block size 262144
compressed data, compressed metadata, compressed fragments, compressed
xattrs
duplicates are removed
Filesystem size 12008.79 Kbytes (11.73 Mbytes)
26.02% of uncompressed filesystem size (46147.47 Kbytes)
Inode table size 24208 bytes (23.64 Kbytes)
25.29% of uncompressed inode table size (95708 bytes)
Directory table size 27464 bytes (26.82 Kbytes)
46.95% of uncompressed directory table size (58494 bytes)
Number of duplicate files found 77
…...
Remaining free bytes in firmware image: 10360
Processing 0 header(s) from /home/smrx86/firmware_mod_kit/firmware-mod-kit-read-
only/fmk/new-firmware.bin...
CRC update failed.
Firmware header not supported; firmware checksums may be incorrect. New firmware
image has been saved to: /home/smrx86/firmware_mod_kit/firmware-mod-kit-read-
only/fmk/new-firmware.bin
# mv ./fmk/new-firmware.bin ./fmk/openwrt.bin
dari hasil build fmk terlihat notif bahwa “CRC update firmware. Firmware header not support...”.
Tapi notif tersebut bisa diabaikan. Hasil build tersimpan di ./fmk/openwrt.bin
12 Kompresi “xz” sebenarnya mempunyai opsi untuk memilih tingkat kompresinya. Namun binwalk tidak
dapat mendeteksi dan memeberikan informasi berapa persentase kompresi yang digunakan. Sehingga
dianjurkan memakai opsi default. Penggunaan opsi yang tak sesuai akan menyebabkan proses flashing tak
berjalan seperti seharusnya.
10. 2.4. Debugging Test.
Debugging test bisa saja dilakukan dengan emulator atau vbox dengan openwrt x86, tapi
kemampuannya terbatas pada konfigurasi atau hanya frontend dari WebUI nya. Disini saya lebih
memilih menggunakan router yang sesungguhnya yakni GL-inet. Proses dimulai dengan mencoba
memflash router dengan firmware yang telah kita build dari web browser sembari mengawasinya lewat
minicom.
Gambar 10. Setelah modifikasi header id verifikasi firmware pun dapat di bypass.
Dari monitoring lewat mincom ataupun web browser terlihat firmware berhasil tanpa kendala
verifikasi. Pastikan menghilangkan centang keep setting sebelum melakukan upgrade.
Beberapa saat setelah upgrade dilakukan router akan reboot dan pindahkan koneksi kabel lan ke
port eth0/wan di router GL-inet. Ini dikarnakan firmware MK 5 dicompile sesuai hardware yang
dipasarkannya dengan support hanya satu port ethernet saja.
Berikut log minicom setelah router reboot:
$ sudo minicom
[sudo] password for smrx86:
Welcome to minicom 2.5
OPTIONS: I18n
Compiled on May 2 2011, 00:39:27.
Port /dev/ttyUSB2
Press CTRL-A Z for help on special keys
*****************************************
* U-Boot 1.1.4 (Jun 25 2014) *
*****************************************
AP121 (AR9331) U-Boot for GL-iNet
DRAM: 64 MB
FLASH: Winbond W25Q128 (16 MB)
LED on during eth initialization...
11. Hit any key to stop autobooting: 0
Booting image at: 0x9F020000
Image name: OpenWrt r40348
Image type: MIPS Linux Kernel Image (lzma compressed)
Data size: 927020 Bytes = 905.3 kB
Load address: 0x80060000
Entry point: 0x80060000
Uncompressing kernel image... OK!
Starting kernel...
[ 0.000000] Linux version 3.3.8 (sebkinne@buildtop) (gcc version 4.6.3 201205
[ 0.000000] bootconsole [early0] enabled
[ 0.000000] CPU revision is: 00019374 (MIPS 24Kc)
[ 0.000000] SoC: Atheros AR9330 rev 1
[ 0.000000] Clocks: CPU:400.000MHz, DDR:400.000MHz, AHB:200.000MHz, Ref:25.0z
…....................................
[ 0.490000] Creating 5 MTD partitions on "spi0.0":
[ 0.500000] 0x000000000000-0x000000020000 : "u-boot"
[ 0.510000] 0x000000020000-0x00000010272c : "kernel"
[ 0.510000] mtd: partition "kernel" must either start or end on erase block y
[ 0.520000] 0x00000010272c-0x000000ff0000 : "rootfs"
[ 0.530000] mtd: partition "rootfs" must either start or end on erase block y
[ 0.540000] mtd: partition "rootfs" set to be root filesystem
[ 0.550000] mtd: partition "rootfs_data" created automatically, ofs=CC0000,
[ 0.550000] 0x000000cc0000-0x000000ff0000 : "rootfs_data"
[ 0.560000] 0x000000ff0000-0x000001000000 : "art"
[ 0.570000] 0x000000020000-0x000000ff0000 : "firmware"
….........
- preinit -
Press the [f] key and hit [enter] to enter failsafe mode
regular preinit -
Usai memastikan bahwa flashing berhasil dan mendapatkan ip address barulah kita mengarahkan
web browser ke halaman admin f/w pineapple di http://172.16.42.1:1471/ .
Dari halaman admin kita bisa menemukan bahwa frontend MK 5 memiliki proteksi yang unik
dengan script yang mentrigger 4 led nya sebagai kunci akses awal.
Gambar 11. Proteksi halaman admin pineapple yang berfungsi mentrigger nyala led pada router MK 5.
12. Beberapa kali uji coba memperlihatkan sistem proteksi ini tidak memiliki limit attempt dan
memperlihatkan respon failure dengan string yang sama. Menggunakan string “wrong pattern entered”
kita bisa melacak script mana yang bertanggung jawab untuk puzzle ini dari folder rootfs/pineapple
hasil ekstraksi fmk.
$ grep -lr -e 'wrong|pattern|entered' *
components/system/configuration/help.json
components/system/network/functions.php
includes/welcome/welcome.inc.php
includes/welcome/welcome.php
Adapun file yang menjalankan proteksi ini adalah welcome.inc.php
(./fmk/rootfs/pineapple/includes/welcome/welcome.inc.php). Dari sini kita lanjutkan ke proses
eksploitasi.
2.5. Eksploitation and Final Repacking.
Selain file welcome.inc.php juga ada beberapa file lain yang perlu di edit pada tahap eksploitasi ini.
Berikut ini adalah file-file tersebut dan keterangan modifikasinya:
• fstab (./fmk/rootfs/etc/config/fstab) : file ini bertugas untuk mengatur mounting additonal
storage seperti UFD ataupun Micro sd seperti yang dimiliki router MK 5. Karna akan
menggunakan UFD sebagai media penyimpanan tambahan maka fstab perlu diedit menjadi
seperti berikut:
$ cat ./fmk/rootfs/etc/config/fstab
config global automount
option from_fstab 1
option anon_mount 1
config global autoswap
option from_fstab 1
option anon_swap 0
config mount
option target /sd
option device /dev/sda1
option fstype auto
option options rw,sync
option enabled 1
option enabled_fsck 0
config swap
option device /dev/sda2
option enabled 1
• format_sd (./fmk/rootfs/pineapple/components/system/resources/includes/files/format_sd): shell
script ini bertugas untuk melakukan pemformatan sd card supaya memiliki 2 partisi yakni
partisi 1 yang berformat ext4 dan partisi 2 yang di format sebagai swap. Untuk itu perlu kita
edit terlebih dahulu hingga seperti berikut:
$ cat
./fmk/rootfs/pineapple/components/system/resources/includes/files/format_sd
#!/bin/bash
#2013 - WiFiPineapple.com
[[ -f /tmp/sd_format.progress ]] && {
exit 0
}
#Function to find and reset the SD device
function reset_sd {
DEVICE=$(find / -name idProduct -exec grep -l 6366 {} + | awk -F '/'
'{ print $(NF-1) }')
echo $DEVICE > /sys/bus/usb/drivers/usb/unbind
sleep 2
echo $DEVICE > /sys/bus/usb/drivers/usb/bind
13. }
touch /tmp/sd_format.progress
reset_sd
sleep 5
umount /sd
swapoff /dev/sda2
sleep 2
cat
/pineapple/components/system/resources/includes/files/fdisk_instructions |
fdisk /dev/sda
sleep 2
umount /sd
mkfs.ext4 /dev/sda1
sleep 2
mkfs.ext4 /dev/sda2
mkswap /dev/sda2
mount /dev/sda1 /sd
swapon /dev/sda2
rm /tmp/sd_format.progress
• welcome.inc.php (./fmk/rootfs/pineapple/includes/welcome/welcome.inc.php), ini adalah file
yang mengatur proteksi ke dalam webui admin pineapple. Dilihat dari scriptnya terlihat hanya
tiga led yang berguna sebagai kunci (amber, blue, red). Sedangkan value nya selalu berubah
setiap kali attempt dan ini didapat dari random array di dalam function generateLEDpattern().
Untuk itu kita akan memberikan exact value di function verifyPineapple($post) supaya
memberikan pola amber = blink, blue= off dan red = on. Berikut hasil modifikasinya:
$ cat ./fmk/rootfs/pineapple/includes/welcome/welcome.inc.php
<?php
namespace pineapple;
.........................
function verifyPineapple($post)
{
$action_array = array('off', 'on', 'blink');
if (isset($_SESSION['verify_pattern'])
&& isset($post['amber'])
&& isset($post['blue'])
&& isset($post['red'])
) {
$current_state = str_split($_SESSION['verify_pattern']);
if (array_search($post['amber'], $action_array) == 2
&& array_search($post['blue'], $action_array) == 0
&& array_search($post['red'], $action_array) == 1
) {
$_SESSION['verified'] = true;
return passwordForm();
}
}
generateLEDpattern();
return verifyForm(true);
}
…......................
14. Setelah ke tiga file tersebut kita modif barulah kita lakukan final repacking kembali dengan
mengeksekusi build-firmware.
$ sudo ./build-firmware.sh fmk/
Firmware Mod Kit (build-ng) 0.82, (c)2011-2013 Craig Heffner, Jeremy
Collake
Building new squashfs file system...
Parallel mksquashfs: Using 2 processors
Creating 4.0 filesystem on /home/smrx86/firmware_mod_kit/firmware-mod-kit-
read-only/fmk/new-filesystem.squashfs, block size 262144.
[=============================================================/] 2538/2538
100%
Exportable Squashfs 4.0 filesystem, xz compressed, data block size 262144
compressed data, compressed metadata, compressed fragments,
compressed xattrs
duplicates are removed
…...
Number of uids 1
root (0)
Number of gids 1
root (0)
Remaining free bytes in firmware image: 10360
Processing 0 header(s) from /home/smrx86/firmware_mod_kit/firmware-mod-kit-
read-only/fmk/new-firmware.bin...
CRC update failed.
Firmware header not supported; firmware checksums may be incorrect. New
firmware image has been saved to: /home/smrx86/firmware_mod_kit/firmware-
mod-kit-read-only/fmk/new-firmware.bin
$ mv ./fmk/new-firmware.bin /fmk/upgrade-Gl-inet2MK5.bin
$ md5sum upgrade-Gl-inet2MK5.bin
5c740cb210cc49fb6d1333f35456788d upgrade-Gl-inet2MK5.bin
Dan pada tahap akhir ini hasil final repacking bisa ditemukan di ./fmk/upgrade-Gl-inet2MK5.bin.
3. Pembuktian / Proof of Concept
3.1. Flashing dan Baypass Proteksi UI
Kendati flashing perangkat dapat dilakukan lewat console Uboot, tapi dalam PoC ini flashing
dilakukan dengan halaman default firmware upgrade yang disediakan oleh stock f/w GL-inet. Selain
lebih mudah, hal ini juga dilakukan untuk melihat lolos atau tidaknya verifikasi yang dilakukan lewat
cgi sysupgrade. Dari percobaan didapatkan hasil bahwa firmware ini lolos cek verify.
Gambar 12. firmware upgrade-Gl-inet2MK5.bin lolos cek verify saat akan melakukan upgrade.
Selain itu proteksi admin pineapple juga sukses di bypass dengan pola slash, seperti tampilan
berikut:
15. Gambar 13. Proteksi halaman admin di bypass dengan pola SLASH.
3.2. Karma Test
Karma adalah tool yang digunakan untuk wireless hacking. Tool ini bekerja dengan automatis
membroadcast SSID sesuai dengan SSID request yang terdeteksi di sekitarnya. Berikut gambaran
previewnya:
Gambar 14. Hasil log saat karma sedang aktif.
3.3. Fstab dan UFD Mounting
Dari modifikasi file config fstab yang dilakukan pada tahapan firmware hacking tampak fstab
bekerja dengan baik dan flashdisk dimounting dan dikenali sebagai /sd:
16. Gambar 15. Flashdisk berhasil dimounting dan dikenali sebagai /sd.
3.4. Infusions dan PoC nya
Berikut preview PoC dari beberapa infusion di router GL-inet
3.4.a. Sslstrip
Sslstrip bekerja dengan mengalihkan client yang merequset halaman https ke protokol http.
Gambar 16. log sslstrip yang menunjukkan request https ://mail.google.com dialihkan protokol http.
3.4.b. Trapcookies
Trapcookies bekerja dengan bantuan dnsspoof untuk mengarahkan alamat website tertentu ke sebuah
halaman phising yang merekam cookies dan menyimpannya kedalam log file.
17. Gambar 17. Log dari trapcookies yang menangkap dan menyimpan cookies setelah client disasarkan
oleh dnsspoof.
4. Kesimpulan
Firmware pineapple MK 5 dapat di flashing kedalam router Gl-inet dengan melakukan firmware
hacking sebelumnya. Modifikasi konten firmware yang paling urgen adalah perubahan hardware id di
part LZMA header. Sedangkan modifikasi minor pada file config dan UI diperlukan untuk dapat
menjalankan cgi dengan lancar.
5. Ucapan Terima Kasih
Terima kasih kepada Cindy Wijaya, Xopal Unil, Tisaros Kaskus, Openwrt Indonesia, Om Hero lirva32,
Brahmanggi Aditya, Richy Hendra, Ade Surya, …all human or not (^^) who always support inspired
me. And ofcourse it’s U… ra’
7. Referensi
[1] Alan Holt and Chi-Yu Huang, "Embedded Operating Systems, A Practical Approach," in
introduction, virtualisation. London, Springer-Verlag, 2014, pp. 7.
[2] Andy Davis. “Blue for the pineapple.”, Internet:
http://penturalabs.wordpress.com/2013/04/25/blue-for-the-pineapple/, Apr. 25, 2013[Apr.
20,2015].
[3] Andy Davis. “Naked WiFi Pineapple Mark V!.”, Internet:
https://penturalabs.wordpress.com/2013/10/27/naked-wifi-pineapple-mark-v/, Oct. 27,
2013[Apr. 20,2013].
[4] Craig Heffner, "Binwalk, Quick Start Guide.", Internet:
https://github.com/devttys0/binwalk/wiki/Quick-Start-Guide, Dec. 1, 2014[Jun. 6, 2015].
[5] Craig Heffner, "Mucking About With SquashFS.", internet:
http://www.devttys0.com/2014/08/mucking-about-with-squashfs/, Aug. 20, 2014[Jun. 9, 2015].
[6] Craig Heffner, "Extracting Non-Standard SquashFS Images Extracting Non-Standard
SquashFS Images.", internet: http://www.devttys0.com/2011/08/extracting-non-standard-
squashfs-images/, Aug. 7, 2011[Jun. 9, 2015].
[7] "DD-WRT Mod Kit.", Internet: http://3iii.dk/wiki/index.php?title=DD-
WRT_Mod_Kit&oldid=37, [Dec. 27,2014].
[8] “Firmware mod kit.”, Internet: http://www.bitsum.com/firmware_mod_kit.htm, [Apr.
20,2015].
[9] Git openwrt, “mktplikfw.c.” internet : http://git.openwrt.org/?
p=openwrt.git;a=blob;f=tools/firmware-utils/src/mktplinkfw.c [Jun. 26, 2015]
[10] Hero Suhartono, “Information Theft: Wireless Router Shareport for Phun and profit.”
Internet: http://www.slideshare.net/idsecconf/idsecconf2014-paper [Jun. 9, 2015]
[11] Hak5. “Pineapple MK V firmware.”, avaiable: https://www.wifipineapple.com/index.php?
downloads&download_mk5_upgrade=2.2.0, Jan. 12, 2015 [Apr. 20, 2015].
18. [12] Jonas Zaddach and Andrei Costin."Embedded Devices Security and Firmware Reverse
Engineering." , Avaiable: https://media.blackhat.com/us-13/US-13-Zaddach-Workshop-on-
Embedded-Devices-Security-and-Firmware-Reverse-Engineering-WP.pdf, 2013[Jun. 14,
2015].
[13] Pinzaru. "What is firmware?.", internet:http://incepator.pinzaru.ro/software/what-is-
firmware/, Apr. 2015[Jun. 6,2015].
[14] Silverbug and Redhidden. “Fu~n of Attacking Firmware.”, avaiable:
http://www.powerofcommunity.net/poc2012/re&si.pdf, 2012[Jun. 10, 2015].
[15] Tomcom "Flashing TP-Link TL-MR3040 v2.0 (Version / Revison 2) with V1.0 Image.",
Internet: https://forum.openwrt.org/viewtopic.php?id=44090, May, 9, 2013[Jun. 22, 2015].
[16] Wikipedia. "Firmware.", internet: http://en.m.wikipedia.org/wiki/Firmware, last edited, Jun.
5, 2015[Jun. 10, 2015].
[17] Wiki openwrt. “TRX vs. TRX2 vs. BIN.”, Internet: http://wiki.openwrt.org/doc/techref/header,
[Jun. 26, 2015]
8. Penulis
Penulis Pertama
Photo (2x3cm)
Smrx86, seorang blogger enthusiast, addict akan perkembangan tekhnologi terutama yang
berkaitan dengan komputer dan semua hal turunannya. Sempat menjadi pembicara di
Idsecconf 2013 (Universitas Airlangga) dan Idsecconf 2014 (UPN Veteran Yogyakarta) .
Saya bisa dihubungi lewat kontak email: ramatrinanda@gmail.com atau twitter di
https://twitter.com/smrx86.