59
PQI Air Pen Hack KenichiroMATOHARA(@matoken) http://matoken.org 鹿児島Linux勉強会2017.04(20170408) サンエールかごしま 小研修室3 @matoken

PQI Air Pen Hack

Embed Size (px)

Citation preview

Page 1: PQI Air Pen Hack

PQI Air Pen HackKenichiroMATOHARA(@matoken)

http://matoken.org

鹿児島Linux勉強会2017.04(2017­04­08)

サンエールかごしま 小研修室3

@matoken

Page 2: PQI Air Pen Hack

KenichiroMATOHARA( @matoken )PC­UNIX/OSS, OpenStreetMap, 電子工作, 自転車……

altanativeが好き,多様性は正義

@matoken

Page 3: PQI Air Pen Hack

PQI Air Pen Hack

@matoken

Page 4: PQI Air Pen Hack

PQI Air Pen有線LANを無線LANにしてくれたりmicroSDをNAS的に使ったり

バッテリ内蔵で1時間くらい単体動作可能中はLinuxで出来ているftp/telnetが空いていていじくれるNTT X­Storeで送料込み500円だった!

「PQI Air Pen」Linux搭載でtelnetできるワイヤレスアクセスポイントが500円

今はAmazonとかで1kくらい http://amzn.to/2ofxKxk

@matoken

Page 5: PQI Air Pen Hack

主な使い方有線LANを繋いで電源を入れると無線LANのアクセスポイントになるmicroSDを接続しているとhttp/ftpでアクセスできるNASになる

電源Off状態でPCとUSB接続するとmicroSDリーダーになる

@matoken

Page 6: PQI Air Pen Hack

逸般的な使い方ftp/telnetで使うbusyboxを差し替えて使いやすくするボタンを利用してアプリケーションを制御

LEDを利用して状況をお知らせchrootでDebianのユーザランドを利用する:

@matoken

Page 7: PQI Air Pen Hack

ちょっと叩いてみるdhcpの提供されているネットワークケーブルを繋いで電源をれてちょっと叩いてみる.

まずはdhcp poolのipから探してみる.

$ sudo nmap ­sP 192.168.2.200­Starting Nmap 7.40 ( https://nmap.org ) at 2017­03­08 11: :Nmap scan report for 192.168.2.214Host is up (0.0012s latency).MAC Address: 80:DB:31:01:A4:B8 (Power Quotient International) :

192.168.2.214でした.

@matoken

Page 8: PQI Air Pen Hack

ポートスキャンしてみる

$ nmap ­A 192.168.2.214

Starting Nmap 7.40 ( https://nmap.org ) at 2017­03­08 11:Nmap scan report for 192.168.2.214Host is up (0.037s latency).Not shown: 995 closed portsPORT STATE SERVICE VERSION21/tcp open ftp vsftpd 2.0.723/tcp open telnet BusyBox telnetd 1.053/tcp open domain dnsmasq 2.52| dns­nsid:|_ bind.version: dnsmasq­2.5280/tcp open http Brivo EdgeReader access control http|_http­title: PQI Air Pen8080/tcp open http Mongoose httpd 3.7 (directory listing)|_http­title: Index of /Service Info: OS: Unix; Device: security­misc

Service detection performed. Please report any incorrect results Nmap done: 1 IP address (1 host up) scanned in 37.14 seconds

@matoken

Page 9: PQI Air Pen Hack

$ nmap ­P 0­65536 192.168.2.214

Starting Nmap 7.40 ( https://nmap.org ) at 2017­03­08 11:Nmap scan report for 192.168.2.214Host is up (0.035s latency).Not shown: 995 closed portsPORT STATE SERVICE21/tcp open ftp23/tcp open telnet53/tcp open domain80/tcp open http8080/tcp open http­proxy

Nmap done: 1 IP address (1 host up) scanned in 0.61 seconds

@matoken

Page 10: PQI Air Pen Hack

アクセスしてみる80番ポートにアクセスすると認証無しで設定画面にアクセス出来る

8080番はファイルのアクセスが出来る.こちらも認証なし.

@matoken

Page 11: PQI Air Pen Hack

ftp/telnetは要認証$ nc 192.168.2.214 21220 (vsFTPd 2.0.7)USER anonimouse331 Please specify the password.PASS [email protected] Login incorrect.

$ nc 192.168.2.214 23! (none) login:

(none) login:

@matoken

Page 12: PQI Air Pen Hack

パケットキャプチャしてPQI Air PenのID/PASSを調べる

ググれば判るけどせっかくなので調べるAndroid版のアプリがあってファイルのやり取りが出来る

この通信内容を見るときっとアクセス方法が判る

@matoken

Page 13: PQI Air Pen Hack

パケットキャプチャしてみる適当なWi­Fiの使えるPCを用意してネットワークカードをmonitormodeにしてパケットキャプチャをします.今回の環境はこんな感じ.

PC : LENOVO Thinkpad X200

NIC : Intel Corporation PRO/Wireless 5100 AGN

OS : Ubuntu 17.04 amd64

Driver : iwldvm, iwlwifi

@matoken

Page 14: PQI Air Pen Hack

AQI Air Penの無線チャンネルを確認しておくここでは11

$ nmcli d wifi | egrep 'SSID|PQI'* SSID モード CHAN レート 信号 バー セキュリティ PQI Air Pen インフラ 11 54 Mbit/s 100 ­­

$ sudo /sbin/iwlist wls1 scanning | grep ­B 5 "PQI Air Pen" Cell 09 ­ Address: 80:DB:31:01:A4:B7 Channel:11 Frequency:2.462 GHz (Channel Quality=70/70 Signal level= Encryption key:off ESSID:"PQI Air Pen"

@matoken

Page 15: PQI Air Pen Hack

phyとネットワークインターフェイスの確認

$ /sbin/iw devphy#0 Interface wls1 ifindex 8 wdev 0x3 addr 00:22:fa:33:45:6a type managed channel 8 (2447 MHz), width: 20 MHz, center1: txpower 15.00 dBm

@matoken

Page 16: PQI Air Pen Hack

デバイスがmonitor modeになれるか確認する

$ /sbin/iw phy phy0 info | lv : Supported interface modes: * IBSS * managed * monitor : software interface modes (can always be added): * monitor

※monitorになれない場合はドライバを変更すると対応できる場合もあります.

@matoken

Page 17: PQI Air Pen Hack

monitor modeのインターフェイスを作る

$ sudo iw phy phy0 interface add mon0 type monitor

managed modeのインターフェイスを削除する

$ sudo iw dev wls1 del

monitor modeのインターフェイス(mon0)をUpする

$ sudo ifconfig mon0 up

monitor modeのインターフェイスの無線チャンネルを設定する

上の方で11チャンネルだったので2462に設定します.

$ sudo iw dev mon0 set freq 2462

@matoken

Page 18: PQI Air Pen Hack

他のチャンネルはこんな感じ

ch1 : 2412ch2 : 2417ch3 : 2422ch4 : 2427ch5 : 2432ch6 : 2437ch7 : 2442ch8 : 2447ch9 : 2452ch10 : 2457ch11 : 2462ch12 : 2467ch13 : 2472ch14 : 2484

@matoken

Page 19: PQI Air Pen Hack

確認

$ /sbin/iwconfig mon0

@matoken

Page 20: PQI Air Pen Hack

パケットキャプチャをしながらスマートフォン公式アプリを使ってみる

tcpdumpでパケットをキャプチャしながらスマートフォンでPQi AirPenのネットワークに繋いだ状態で公式アプリを起動して更新などを行います.

※パケットがたくさん飛んでいるような場合はフィルタを書いたりWiresharkなどを使うと便利です.

@matoken

Page 21: PQI Air Pen Hack

$ sudo tcpdump ­i mon0 ­n ­A ­s0 :01:27:10.970158 1.0 Mb/s 2462 MHz 11b ­34dBm signal antenna E..Hv.@.@..­.......f...H.[.....;...P.P........:..k.220 (vsFTPd 2.0.7)...e :

FTP

@matoken

Page 22: PQI Air Pen Hack

01:26:05.791087 2462 MHz 11n ­39dBm signal antenna 3 72.2hort GI mixed IP 192.168.200.102.50396 > 192.168.200.1.2112, ack 20, win 115, options [nop,nop,TS val 35410347 ecr FTP: USER rootE..?O.@[email protected] ........Q.....USER root...2 :

USER root

@matoken

Page 23: PQI Air Pen Hack

01:27:11.238673 2462 MHz 11n ­40dBm signal antenna 3 72.2E..@.@@.@./....f.....H.....F.[.&...s.........k....\PASS pqiap.5.Z

PASS pqiap

@matoken

Page 24: PQI Air Pen Hack

FTP接続で root:pqiap のようです.

@matoken

Page 25: PQI Air Pen Hack

インターフェイスを戻す

sudo iw dev mon0 delsudo iw phy phy0 interface add wls1 type managed

@matoken

Page 26: PQI Air Pen Hack

ftp接続を試してみる

$ nc 192.168.200.1 21220 (vsFTPd 2.0.7)user root331 Please specify the password.pass pqiap230 Login successful.

@matoken

Page 27: PQI Air Pen Hack

telnetを試してみる

$ nc 192.168.200.1 23!(none) login:

(none) login: rootrootPassword: pqiap

BusyBox v1.01 (2013.01.03­08:27+0000) Built­in shell (ash)Enter 'help' for a list of built­in commands.

~ # uname ­auname ­aLinux (none) 2.6.31.AirPen_V0.1.22­g5eca71a #319 Thu Jan 3 16:27:02 CST 2013 mips unknown

@matoken

Page 28: PQI Air Pen Hack

ということで中に入れるようになりました :)

@matoken

Page 29: PQI Air Pen Hack

~ # cat /proc/cpuinfocat /proc/cpuinfosystem type : Atheros AR9330 (Hornet)processor : 0cpu model : MIPS 24Kc V7.4BogoMIPS : 232.96wait instruction : yesmicrosecond timers : yestlb_entries : 16extra interrupt vector : yeshardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0048, 0x0ff8, 0x093b]ASEs implemented : mips16shadow register sets : 1core : 0VCED exceptions : not availableVCEI exceptions : not available

@matoken

Page 30: PQI Air Pen Hack

~ # cat /proc/meminfocat /proc/meminfoMemTotal: 29208 kBMemFree: 19432 kBBuffers: 120 kBCached: 2628 kBSwapCached: 0 kBActive: 2536 kBInactive: 1240 kBActive(anon): 1028 kBInactive(anon): 0 kBActive(file): 1508 kBInactive(file): 1240 kBUnevictable: 0 kBMlocked: 0 kBSwapTotal: 0 kBSwapFree: 0 kBDirty: 0 kBWriteback: 0 kBAnonPages: 1052 kBMapped: 1088 kB :

※ロットによってRAMは32MB/64MBがあるらしい@matoken

Page 31: PQI Air Pen Hack

~ # lsmodlsmodModule Size Used by Tainted: P umac 576480 0 ­ Live 0xc02b6000ath_dev 207072 1 umac, Live 0xc01c3000 (P)ath_rate_atheros 20032 1 ath_dev, Live 0xc0174000 (P)ath_hal 371936 2 umac,ath_dev, Live 0xc010b000 (P)adf 9904 3 umac,ath_dev,ath_hal, Live 0xc0096000asf 6816 3 umac,ath_dev,ath_hal, Live 0xc0089000 (P)athrs_gmac 49616 0 ­ Live 0xc0072000usb_storage 38400 0 ­ Live 0xc003e000ehci_hcd 32928 0 ­ Live 0xc001d000

@matoken

Page 32: PQI Air Pen Hack

~ # mountmount/dev/mtdblock5 on / type squashfs (ro,relatime)/proc on /proc type proc (rw,relatime)devpts on /dev/pts type devpts (rw,relatime,mode=600)none on /tmp type ramfs (rw,relatime)/sys on /sys type sysfs (rw,relatime)udev on /dev type ramfs (rw,relatime)/dev/pts on /dev/pts type devpts (rw,relatime,mode=600)

@matoken

Page 33: PQI Air Pen Hack

1 root 192 S init 2 root SW< [kthreadd] 3 root SW< [ksoftirqd/0] 4 root SW< [events/0] 5 root SW< [khelper] 8 root SW< [async/mgr] 83 root SW< [kblockd/0] 92 root SW< [khubd] 111 root SW [pdflush] 112 root SW [pdflush] 113 root SW< [kswapd0] 142 root SW< [mtdblockd] 182 root SW< [unlzma/0] 199 root 412 S rc init 200 root 216 S wdog 202 root 196 S /sbin/getty ttyS0 115200 205 root SW< [scsi_eh_0] 206 root SW< [usb­storage] 253 root 376 S < /sbin/udevd ­d 402 root 308 S hostapd ­B /tmp/secbr0 406 root 160 S udhcpd /etc/udhcpd_br0.conf 430 root 404 S shttpd ­root /tmp/www/ftp ­ports 432 root 356 S /sbin/vsftpd 438 root 132 S /usr/sbin/telnetd 442 nobody 396 S /sbin/dnsmasq 450 root 84 S /usr/sbin/httpd ­h /tmp/www/ 488 root 304 R ­sh @matoken

Page 34: PQI Air Pen Hack

GPIOを触ってみる/proc/gpio/ があったので叩いてみる

# ls ­lA /proc/gpio/ls ­lA /proc/gpio/­r­­r­­r­­ 1 root root 0 Jan 1 07:22 gpio12_in­r­­r­­r­­ 1 root root 0 Jan 1 07:22 gpio22_in­rw­r­­r­­ 1 root root 0 Jan 1 07:22 gpio23_out­rw­r­­r­­ 1 root root 0 Jan 1 07:22 gpio27_out­r­­r­­r­­ 1 root root 0 Jan 1 07:22 gpio6_in­rw­r­­r­­ 1 root root 0 Jan 1 07:22 gpio7_out­r­­r­­r­­ 1 root root 0 Jan 1 07:22 gpio8_in

@matoken

Page 35: PQI Air Pen Hack

赤LED(ὐ) : /proc/gpio/gpio7_out0 : On

1 : Off

/proc/gpio # echo 1 > gpio7_outecho 1 > gpio7_out/proc/gpio # echo 0 > gpio7_outecho 0 > gpio7_out

@matoken

Page 36: PQI Air Pen Hack

黄緑LED(ὐ) : /proc/gpio/gpio23_out0 : Off

1 : On

/proc/gpio # echo 0 > gpio23_outecho 0 > gpio23_out/proc/gpio # echo 1 > gpio23_outecho 1 > gpio23_out

@matoken

Page 37: PQI Air Pen Hack

横面同期ボタン(ὐ) : /proc/gpio/gpio22_in0 : On

1 : Off

/proc/gpio # cat gpio22_incat gpio22_in0/proc/gpio # cat gpio22_incat gpio22_in1

@matoken

Page 38: PQI Air Pen Hack

という感じで2つのLEDと1つのボタンは簡単に利用できました.他はちょっと叩いただけでは割らなかったです.とりあえずこんな感じで横の同期ボタンを押すとLEDx2を光らせるということが出来ます.

~ # while :> do> if [ cat /proc/gpio/gpio22_in = '0' ]; then> echo on> echo 0 > /proc/gpio/gpio7_out> echo 1 > /proc/gpio/gpio23_out> break> fi> sleep 1> done

@matoken

Page 39: PQI Air Pen Hack

https://twitter.com/matoken/status/840754952670597120

@matoken

Page 40: PQI Air Pen Hack

microSDを用意microSDのない状態でAir Penにデータを書き込んでも消えてしまう

microSDを用意してそこにデータを置くことに

@matoken

Page 41: PQI Air Pen Hack

ext4が使えない対応していないのでext2で…….

# cat /proc/filesystemsnodev sysfsnodev rootfsnodev bdevnodev procnodev sockfsnodev usbfsnodev pipefsnodev tmpfsnodev inotifyfsnodev devpts ext2 squashfsnodev ramfs vfat msdos ntfsnodev autofsnodev fuse fuseblknodev fusectl@matoken

Page 42: PQI Air Pen Hack

microSDのマウント場所 /tmp/www/ftp 以下にマウントされる複数パーティションの場合はすべてマウントされる

以下はfatとext2の2つのパーティションを用意した時の例

~ # mountmount/dev/mtdblock5 on / type squashfs (ro,relatime)/proc on /proc type proc (rw,relatime)devpts on /dev/pts type devpts (rw,relatime,mode=600)none on /tmp type ramfs (rw,relatime)/sys on /sys type sysfs (rw,relatime)udev on /dev type ramfs (rw,relatime)/dev/pts on /dev/pts type devpts (rw,relatime,mode=600)/dev/sda1 on /tmp/www/ftp/sda1 type vfat (rw,relatime,fmask/dev/sda2 on /tmp/www/ftp/sda2 type ext2 (rw,relatime,errors

@matoken

Page 43: PQI Air Pen Hack

使いづらいので新しいbusyboxを置いておく$ wget https://www.busybox.net/downloads/binaries/1.26.2­defconfig­multiarch/busybox­mips \­O ­ | curl ­T ­ ­u root:pqiap \­­ftp­create­dirs ftp://192.168.2.211/sda1/bin/busybox

@matoken

Page 44: PQI Air Pen Hack

新しいbusyboxを優先するように# cat busybox­link.shcat busybox­link.sh#!/bin/sh

BUSYBOX="/tmp/www/ftp/sda1/bin/busybox"PREFIX="/tmp/opt"

mkdir ­p $PREFIX/binmkdir ­p $PREFIX/sbinmkdir ­p $PREFIX/usr/binmkdir ­p $PREFIX/usr/sbincd $PREFIX$BUSYBOX ­­list­full | while read cmddo echo "#­­ $cmd"# $BUSYBOX rm $cmd echo $BUSYBOX ln ­s $BUSYBOX $PREFIX/$cmd $BUSYBOX ln ­s $BUSYBOX $PREFIX/$cmddone

PATH=$PREFIX/bin:$PREFIX/usr/bin:$PREFIX/sbin:$PREFIX@matoken

Page 45: PQI Air Pen Hack

もっと色々なコマンドを使いたいDebianにはmipsのarchがあるchroot環境を作ると便利かも?

@matoken

Page 46: PQI Air Pen Hack

hostPCでchroot環境作成debootstrapで

$ mkdir debian_stable_mips$ fakeroot# /usr//sbin/debootstrap ­­foreign ­­arch=mipsel stable debian_stable_mips

とかしてイメージを作成してmicroSDにcpする

@matoken

Page 47: PQI Air Pen Hack

Air Penでchrootエラーorz

~ # /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /bin/FATAL: kernel too old

@matoken

Page 48: PQI Air Pen Hack

oldoldstableのsqueezeを試すversionが近そうなsqueezeのイメージを試すといけた

# /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /bin/

セキュリティ??

@matoken

Page 49: PQI Air Pen Hack

aptとかが使えるようにネットワークとaptの設定$ cp /etc/hosts /tmp/www/ftp/sda2/etc/$ cp /etc/resolv.conf /tmp/www/ftp/sda2/etc/$ echo 'deb http://ftp.riken.jp/Linux/debian/debian­archive/debian/ squeeze main'

@matoken

Page 50: PQI Air Pen Hack

~ # mount ­­rbind /proc /tmp/www/ftp/sda2/proc~ # mount ­­rbind /sys /tmp/www/ftp/sda2/sys

@matoken

Page 51: PQI Air Pen Hack

aptが使えるようになった# apt­get update :W: GPG error: http://ftp.riken.jp squeeze Release: No keyring installed in /etc/apt/trusted.gpg.d/.# apt­get install dropbear :WARNING: The following packages cannot be authenticated! gcc­4.4­base libc­bin libgcc1 libc6 zlib1g dropbearInstall these packages without verification [y/N]? y :

鍵が…….

@matoken

Page 52: PQI Air Pen Hack

dropbearでsshを試すhostのユーザ情報をcpしてchroot後dropbearを起動

~ # cp /etc/passwd /tmp/www/ftp/sda2/etc/~ # cp /etc/group /tmp/www/ftp/sda2/etc/~ # cp ­p /etc/shadow /tmp/www/ftp/sda2/etc/~ # /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /bin/bashroot@(none):/# dropbear

@matoken

Page 53: PQI Air Pen Hack

別マシンから接続……繋がらないcipherの中にはあるけどマッチしないとなる

$ ssh [email protected] to negotiate with 192.168.2.202 port 22: no matching$ ssh ­Q kex | grep diffie­hellman­group1­sha1diffie­hellman­group1­sha1

@matoken

Page 54: PQI Air Pen Hack

sshオプションで解決したけどPTYがないdiffie­hellman­group1­sha1はサポートから外されているのでオプションに指定して強制PTYに繋がらないのでとりあえずbash ­iで入る

$ apt­get changelog openssh­server | grep ­A2 diffie­hellman­group1­sha1 ­ Support for the 1024­bit diffie­hellman­group1­sha1 key exchange is disabled by default at run­time. It may be re­enabled instructions at http://www.openssh.com/legacy.html$ ssh ­o KexAlgorithms=+diffie­hellman­group1­sha1 [email protected] allocation request failed$ ssh ­o KexAlgorithms=+diffie­hellman­group1­sha1 [email protected]

@matoken

Page 55: PQI Air Pen Hack

PTYを用意するAir Penのchroot前にmountしておく­­rbindを使いたいけど非対応

~ # mount ­o bind /dev $DEBIANROOT/dev~ # mount ­t proc none $DEBIANROOT/proc~ # mount ­o bind /sys $DEBIANROOT/sys~ # mount ­t devpts none $DEBIANROOT/dev/pts

@matoken

Page 56: PQI Air Pen Hack

chroot scriptにまとめておく#!/bin/sh

export DEBIANROOT=/tmp/www/ftp/sda2cp /etc/hosts $DEBIANROOT/etc/cp /etc/resolv.conf $DEBIANROOT/etc/cp /etc/passwd $DEBIANROOT/etc/cp /etc/group $DEBIANROOT/etc/cp /etc/shadow $DEBIANROOT/etc/

echo > $DEBIANROOT/etc/mtab

mount ­o bind /dev $DEBIANROOT/devmount ­t proc none $DEBIANROOT/procmount ­o bind /sys $DEBIANROOT/sysmount ­t devpts none $DEBIANROOT/dev/pts

/tmp/www/ftp/sda1/bin/busybox chroot $DEBIANROOT /bin/bash

@matoken

Page 57: PQI Air Pen Hack

とりあえず500円分以上には遊んだ感

@matoken

Page 58: PQI Air Pen Hack

source code請求PQIの問い合わせメールアドレスにGPLなソース欲しいけど請求方法教えてと投げる

1週間ほどでダウンロードリンクがメールで届く

俺たちの戦いはこれからだ!?

@matoken

Page 59: PQI Air Pen Hack

参考文献PQI Air Pen ­ PQIグループ­ モバイル向け周辺機器の総合メーカー [Apple アクセサリ, モバイルアクセサリ, モバイルバッテリー, USB フラッシュドライブ, Wi­Fi ストレージ, 充電器]Debian ­­ ディストリビューションアーカイブchroot ­ Debian Wiki

@matoken