Firmware hacking, slash the pineapple for fun

20
Firmware Hacking, Slash the Pineapple for Fun smrx86 Independent Researcher [email protected] 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].

Transcript of Firmware hacking, slash the pineapple for fun

Firmware Hacking, Slash the Pineapple for Funsmrx86

Independent [email protected]

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 HackingFirmware 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].

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].

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.

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.

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].

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.

Scan Time: 2015-06-21 11:24:28Signatures: 193Target File: /home/smrx86/firmware_mod_kit/firmware-mod-kit-read-only/upgrade-2.2.0.binMD5 Checksum: 457a32d5b78cbdb5cf47fcb0fd3b719a

DECIMAL HEX DESCRIPTION-------------------------------------------------------------------------------------------------------512 0x200 LZMA compressed data, properties: 0x6D, dictionary size: 8388608 bytes, uncompressed size: 2805816 bytes927532 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 0Extracting squashfs file system at offset 927532Extracting 96 byte footer from offset 13238180Extracting 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.

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.

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.

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 MBFLASH: Winbond W25Q128 (16 MB)

LED on during eth initialization...

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.

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

}

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); }

…......................

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:

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:

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. SslstripSslstrip 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.

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].

[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 PertamaPhoto (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: [email protected] atau twitter di https://twitter.com/smrx86.

Lampiran

Table 1. HW identification in lzma header13

Vendor Product name Offset location hexcode

Hak5 MK 5 0x0040 6D 6B 35 31

GL-INET gl-inet-v1 0x0040 08 00 00 01

Konke Kankun smart plug 0x0040 07 03 01 01

TP-LINK tl-mr3220-v1 0x0040 32 20 00 01

TP-LINK TLMR3220V2 0x0040 32 20 00 02

TP-LINK tl-mr3420-v1 0x0040 34 20 00 01

TP-LINK tl-wa701n-v1 0x0040 07 01 00 01

TP-LINK TLWA7510NV1 0x0040 75 10 00 01

TP-LINK TLWA901NV1 0x0040 09 01 00 01

TP-LINK TLWA901NV2 0x0040 09 01 00 02

TP-LINK TLWR740NV1 0x0040 07 40 00 01

TP-LINK TLWR740NV3 0x0040 07 40 00 03

TP-LINK TLWR741NV1 0x0040 07 41 00 01

TP-LINK tl-wr743nd-v1 0x0040 07 43 00 01

TP-LINK tl-wr841nd-v3 0x0040 08 41 00 03

TP-LINK TLWR841NV5 0x0040 08 41 00 05

TP-LINK TLWR841NV7 0x0040 08 41 00 07

TP-LINK TLWR842 0x0040 08 42 00 01

TP-LINK TLWR941NV2 0x0040 09 41 00 02

TP-LINK TLWR941NV4 0x0040 09 41 00 04

TP-LINK tl-wr1043nd-v1 0x0040 10 43 00 01

TP-LINK tl-mr11u-v1 0x0040 00 11 01 01

TP-LINK tl-mr3020-v1 0x0040 30 20 00 01

TP-LINK tl-mr3040-v1 0x0040 30 40 00 01

TP-LINK tl-mr3040-v2 0x0040 30 40 00 02

TP-LINK tl-wr703n-v1 0x0040 07 03 01 01

TP-LINK TLWR740NV4 0x0040 07 40 00 04

TP-LINK TLWR741NV4 0x0040 07 41 00 04

TP-LINK TLWR841NV8 0x0040 08 41 00 08

TP-LINK TL-WR1041N-v2 0x0040 10 41 00 02

TP-LINK tl-wr2543-v1 0x0040 25 43 00 01

TP-LINK TLWDR3600V1 0x0040 36 00 00 01

TP-LINK TLWDR4300V1 0x0040 43 00 00 01

TP-LINK TLWDR4310V1 0x0040 43 10 00 01

13 Lihat dalam mktplikfw.c.” di http://git.openwrt.org/?p=openwrt.git;a=blob;f=tools/firmware-utils/src/mktplinkfw.c

TP-LINK BIN Header layout14

0 1 2 3 4 5 6 7 8 9 a b c d e f +---------------------------------------------------------------+| version | vendor_name... |+---------------------------------------------------------------+| ...vendor_name | fw_version... |+---------------------------------------------------------------+| ...fw_version... |+---------------------------------------------------------------+| ...fw_version |+---------------------------------------------------------------+| hw_id | hw_rev | unk1 | md5sum1... |+---------------------------------------------------------------+| ...md5sum1 | unk2 |+---------------------------------------------------------------+| md5sum2 |+---------------------------------------------------------------+| unk3 | kernel_la | kernel_ep | fw_length |+---------------------------------------------------------------+| kernel_ofs | kernel_len | rootfs_ofs | rootfs_len |+---------------------------------------------------------------+| boot_ofs | boot_len |ver_hi |ver_mid| ver_lo| pad...|+---------------------------------------------------------------+| ...pad... |+---------------------------------------------------------------+

14 Lihat “TRX vs. TRX2 vs. BIN.”, Internet: http://wiki.openwrt.org/doc/techref/header.