O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

PQI Air Pen Hack

1.888 visualizações

Publicada em

PQI Air Pen をあれこれして鹿児島Linux勉強会2017.04(2017-04-08)で発表したもの
https://kagolug.connpass.com/event/52477/

※Marpで書き出したpdfとSlideshareは相性が悪いようなので駄目な場合は以下のあたりをみてください
https://speakerdeck.com/matoken/pqi-air-pen-hack
https://bitbucket.org/matoken/lu-er-dao-linuxmian-qiang-hui-2017.04

Publicada em: Tecnologia
  • Seja o primeiro a comentar

PQI Air Pen Hack

  1. 1. PQI Air Pen Hack KenichiroMATOHARA(@matoken) http://matoken.org 鹿児島Linux勉強会2017.04(2017­04­08) サンエールかごしま 小研修室3 @matoken
  2. 2. KenichiroMATOHARA( @matoken ) PC­UNIX/OSS, OpenStreetMap, 電子工作, 自転車…… altanativeが好き,多様性は正義 @matoken
  3. 3. PQI Air Pen Hack @matoken
  4. 4. 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
  5. 5. 主な使い方 有線LANを繋いで電源を入れると無線LANのアクセスポイント になる microSDを接続しているとhttp/ftpでアクセスできるNASになる 電源Off状態でPCとUSB接続するとmicroSDリーダーになる @matoken
  6. 6. 逸般的な使い方 ftp/telnetで使う busyboxを差し替えて使いやすくする ボタンを利用してアプリケーションを制御 LEDを利用して状況をお知らせ chrootでDebianのユーザランドを利用する : @matoken
  7. 7. ちょっと叩いてみる 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.214 Host is up (0.0012s latency). MAC Address: 80:DB:31:01:A4:B8 (Power Quotient International)   : 192.168.2.214でした. @matoken
  8. 8. ポートスキャンしてみる $ 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.214 Host is up (0.037s latency). Not shown: 995 closed ports PORT     STATE SERVICE VERSION 21/tcp   open  ftp     vsftpd 2.0.7 23/tcp   open  telnet  BusyBox telnetd 1.0 53/tcp   open  domain  dnsmasq 2.52 | dns­nsid: |_  bind.version: dnsmasq­2.52 80/tcp   open  http    Brivo EdgeReader access control http |_http­title: PQI Air Pen 8080/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 resul Nmap done: 1 IP address (1 host up) scanned in 37.14 seconds @matoken
  9. 9. $ 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.214 Host is up (0.035s latency). Not shown: 995 closed ports PORT     STATE SERVICE 21/tcp   open  ftp 23/tcp   open  telnet 53/tcp   open  domain 80/tcp   open  http 8080/tcp open  http­proxy Nmap done: 1 IP address (1 host up) scanned in 0.61 seconds @matoken
  10. 10. アクセスしてみる 80番ポートにアクセスすると認証無しで設定画面にアクセス出 来る 8080番はファイルのアクセスが出来る.こちらも認証なし. @matoken
  11. 11. ftp/telnetは要認証 $ nc 192.168.2.214 21 220 (vsFTPd 2.0.7) USER anonimouse 331 Please specify the password. PASS matoken@gmail.com 530 Login incorrect. $ nc 192.168.2.214 23 ������!����          (none) login:  (none) login:  @matoken
  12. 12. パケットキャプチャしてPQI Air Penの ID/PASSを調べる ググれば判るけどせっかくなので調べる Android版のアプリがあってファイルのやり取りが出来る この通信内容を見るときっとアクセス方法が判る @matoken
  13. 13. パケットキャプチャしてみる 適当なWi­Fiの使えるPCを用意してネットワークカードをmonitor modeにしてパケットキャプチャをします. 今回の環境はこんな感じ. PC : LENOVO Thinkpad X200 NIC : Intel Corporation PRO/Wireless 5100 AGN OS : Ubuntu 17.04 amd64 Driver : iwldvm, iwlwifi @matoken
  14. 14. 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 (C           Quality=70/70  Signal            Encryption key:off           ESSID:"PQI Air Pen" @matoken
  15. 15. phyとネットワークインターフェイスの確認 $ /sbin/iw dev phy#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
  16. 16. デバイスがmonitor modeになれるか確認する $ /sbin/iw phy phy0 info | lv   :     Supported interface modes:          * IBSS          * managed          * monitor   :     software interface modes (can always be added)          * monitor ※monitorになれない場合はドライバを変更すると対応できる場合も あります. @matoken
  17. 17. 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
  18. 18. 他のチャンネルはこんな感じ ch1 : 2412 ch2 : 2417 ch3 : 2422 ch4 : 2427 ch5 : 2432 ch6 : 2437 ch7 : 2442 ch8 : 2447 ch9 : 2452 ch10 : 2457 ch11 : 2462 ch12 : 2467 ch13 : 2472 ch14 : 2484 @matoken
  19. 19. 確認 $ /sbin/iwconfig mon0 @matoken
  20. 20. パケットキャプチャをしながらスマートフォン公式 アプリを使ってみる tcpdumpでパケットをキャプチャしながらスマートフォンでPQi Air Penのネットワークに繋いだ状態で公式アプリを起動して更新など を行います. ※パケットがたくさん飛んでいるような場合はフィルタを書いたり Wiresharkなどを使うと便利です. @matoken
  21. 21. $ 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
  22. 22. 01:26:05.791087 2462 MHz 11n ­39dBm signal antenna 3 72.2 hort GI mixed IP 192.168.200.102.50396 > 192.168.200.1.21 12, ack 20, win 115, options [nop,nop,TS val 35410347 ecr   FTP: USER root E..?O.@.@..z...f.............wu....s    ...... ..Q.....USER root ...2     : USER root @matoken
  23. 23. 01:27:11.238673 2462 MHz 11n ­40dBm signal antenna 3 72.2 E..@.@@.@./....f.....H.....F.[.&...s....... ..k....PASS pqiap .5.Z PASS pqiap @matoken
  24. 24. FTP接続で root:pqiap のようです. @matoken
  25. 25. インターフェイスを戻す sudo iw dev mon0 del sudo iw phy phy0 interface add wls1 type managed @matoken
  26. 26. ftp接続を試してみる $ nc 192.168.200.1 21 220 (vsFTPd 2.0.7) user root 331 Please specify the password. pass pqiap 230 Login successful. @matoken
  27. 27. telnetを試してみる $ nc 192.168.200.1 23 ������!����(none) login:  (none) login: root root Password: pqiap BusyBox v1.01 (2013.01.03­08:27+0000) Built­in shell (ash) Enter 'help' for a list of built­in commands. ~ # uname ­a uname ­a Linux (none) 2.6.31.AirPen_V0.1.22­g5eca71a #319 Thu Jan 3 16: @matoken
  28. 28. ということで中に入れるようになりました :) @matoken
  29. 29. ~ # cat /proc/cpuinfo cat /proc/cpuinfo system type             : Atheros AR9330 (Hornet) processor               : 0 cpu model               : MIPS 24Kc V7.4 BogoMIPS                : 232.96 wait instruction        : yes microsecond timers      : yes tlb_entries             : 16 extra interrupt vector  : yes hardware watchpoint     : yes, count: 4, address/irw mask: [0x ASEs implemented        : mips16 shadow register sets    : 1 core                    : 0 VCED exceptions         : not available VCEI exceptions         : not available @matoken
  30. 30. ~ # cat /proc/meminfo cat /proc/meminfo MemTotal:          29208 kB MemFree:           19432 kB Buffers:             120 kB Cached:             2628 kB SwapCached:            0 kB Active:             2536 kB Inactive:           1240 kB Active(anon):       1028 kB Inactive(anon):        0 kB Active(file):       1508 kB Inactive(file):     1240 kB Unevictable:           0 kB Mlocked:               0 kB SwapTotal:             0 kB SwapFree:              0 kB Dirty:                 0 kB Writeback:             0 kB AnonPages:          1052 kB Mapped:             1088 kB   : ※ロットによってRAMは32MB/64MBがあるらしい@matoken
  31. 31. ~ # lsmod lsmod Module                  Size  Used by    Tainted: P   umac 576480 0 ­ Live 0xc02b6000 ath_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 0xc0096000 asf 6816 3 umac,ath_dev,ath_hal, Live 0xc0089000 (P) athrs_gmac 49616 0 ­ Live 0xc0072000 usb_storage 38400 0 ­ Live 0xc003e000 ehci_hcd 32928 0 ­ Live 0xc001d000 @matoken
  32. 32. ~ # mount mount /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
  33. 33.     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
  34. 34. GPIOを触ってみる /proc/gpio/ があったので叩いてみる # ls ­lA /proc/gpio/ ls ­lA /proc/gpio/ ­r­­r­­r­­    1 root     root            0 Jan  1 07:22 gpio12 ­r­­r­­r­­    1 root     root            0 Jan  1 07:22 gpio22 ­rw­r­­r­­    1 root     root            0 Jan  1 07:22 gpio23 ­rw­r­­r­­    1 root     root            0 Jan  1 07:22 gpio27 ­r­­r­­r­­    1 root     root            0 Jan  1 07:22 gpio6_ ­rw­r­­r­­    1 root     root            0 Jan  1 07:22 gpio7_ ­r­­r­­r­­    1 root     root            0 Jan  1 07:22 gpio8_ @matoken
  35. 35. 赤LED(ὐ) : /proc/gpio/gpio7_out 0 : On 1 : Off /proc/gpio # echo 1 > gpio7_out echo 1 > gpio7_out /proc/gpio # echo 0 > gpio7_out echo 0 > gpio7_out @matoken
  36. 36. 黄緑LED(ὐ) : /proc/gpio/gpio23_out 0 : Off 1 : On /proc/gpio # echo 0 > gpio23_out echo 0 > gpio23_out /proc/gpio # echo 1 > gpio23_out echo 1 > gpio23_out @matoken
  37. 37. 横面同期ボタン(ὐ) : /proc/gpio/gpio22_in 0 : On 1 : Off /proc/gpio # cat gpio22_in cat gpio22_in 0 /proc/gpio # cat gpio22_in cat gpio22_in 1 @matoken
  38. 38. という感じで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
  39. 39. https://twitter.com/matoken/status/840754952670597120 @matoken
  40. 40. microSDを用意 microSDのない状態でAir Penにデータを書き込んでも消えてし まう microSDを用意してそこにデータを置くことに @matoken
  41. 41. ext4が使えない 対応していないのでext2で……. # cat /proc/filesystems nodev   sysfs nodev   rootfs nodev   bdev nodev   proc nodev   sockfs nodev   usbfs nodev   pipefs nodev   tmpfs nodev   inotifyfs nodev   devpts     ext2     squashfs nodev   ramfs     vfat     msdos     ntfs nodev   autofs nodev   fuse     fuseblk nodev   fusectl@matoken
  42. 42. microSDのマウント場所  /tmp/www/ftp 以下にマウントされる 複数パーティションの場合はすべてマウントされる 以下はfatとext2の2つのパーティションを用意した時の例 ~ # mount mount /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
  43. 43. 使いづらいので新しいbusyboxを置いてお く $ wget https://www.busybox.net/downloads/binaries/1.26.2­defco ­O ­ | curl ­T ­ ­u root:pqiap  ­­ftp­create­dirs ftp://192.168.2.211/sda1/bin/ busybox @matoken
  44. 44. 新しいbusyboxを優先するように # cat busybox­link.sh cat busybox­link.sh #!/bin/sh BUSYBOX="/tmp/www/ftp/sda1/bin/busybox" PREFIX="/tmp/opt" mkdir ­p ${PREFIX}/bin mkdir ­p ${PREFIX}/sbin mkdir ­p ${PREFIX}/usr/bin mkdir ­p ${PREFIX}/usr/sbin cd ${PREFIX} ${BUSYBOX} ­­list­full | while read cmd do   echo "#­­ ${cmd}" #  ${BUSYBOX} rm ${cmd}   echo ${BUSYBOX} ln ­s ${BUSYBOX} ${PREFIX}/${cmd}   ${BUSYBOX} ln ­s ${BUSYBOX} ${PREFIX}/${cmd} done PATH=${PREFIX}/bin:${PREFIX}/usr/bin:${PREFIX}/sbin:${PREFIX} @matoken
  45. 45. もっと色々なコマンドを使いたい Debianにはmipsのarchがある chroot環境を作ると便利かも? @matoken
  46. 46. hostPCでchroot環境作成 debootstrapで $ mkdir debian_stable_mips $ fakeroot # /usr//sbin/debootstrap ­­foreign ­­arch=mipsel stable debian とかしてイメージを作成してmicroSDにcpする @matoken
  47. 47. 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
  48. 48. 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
  49. 49. 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/de @matoken
  50. 50. ~ # mount ­­rbind /proc /tmp/www/ftp/sda2/proc ~ # mount ­­rbind /sys /tmp/www/ftp/sda2/sys  @matoken
  51. 51. aptが使えるようになった # apt­get update     : W: GPG error: http://ftp.riken.jp squeeze Release: No keyring  # apt­get install dropbear     : WARNING: The following packages cannot be authenticated!   gcc­4.4­base libc­bin libgcc1 libc6 zlib1g dropbear Install these packages without verification [y/N]? y     : 鍵が……. @matoken
  52. 52. 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 /bi root@(none):/# dropbear @matoken
  53. 53. 別マシンから接続……繋がらない cipherの中にはあるけどマッチしないとなる $ ssh root@192.168.2.202 Unable to negotiate with 192.168.2.202 port 22: no matching $ ssh ­Q kex | grep diffie­hellman­group1­sha1 diffie­hellman­group1­sha1 @matoken
  54. 54. sshオプションで解決したけどPTYがない diffie­hellman­group1­sha1はサポートから外されているのでオ プションに指定して強制 PTYに繋がらないのでとりあえずbash ­iで入る $ apt­get changelog openssh­server | grep ­A2 diffie­hellman­g     ­ Support for the 1024­bit diffie­hellman­group1­sha1 key        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 root@192.16 PTY allocation request failed $ ssh ­o KexAlgorithms=+diffie­hellman­group1­sha1 root@192.16 @matoken
  55. 55. 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
  56. 56. chroot scriptにまとめておく #!/bin/sh export DEBIANROOT=/tmp/www/ftp/sda2 cp /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}/dev mount ­t proc none ${DEBIANROOT}/proc mount ­o bind /sys ${DEBIANROOT}/sys mount ­t devpts none ${DEBIANROOT}/dev/pts /tmp/www/ftp/sda1/bin/busybox chroot ${DEBIANROOT} /bin/bash @matoken
  57. 57. とりあえず500円分以上には遊んだ感 @matoken
  58. 58. source code請求 PQIの問い合わせメールアドレスにGPLなソース欲しいけど請 求方法教えてと投げる 1週間ほどでダウンロードリンクがメールで届く 俺たちの戦いはこれからだ!? @matoken
  59. 59. 参考文献 PQI Air Pen ­ PQIグループ­ モバイル向け周辺機器の総合メー カー   [Apple アクセサリ, モバイルアクセサリ, モバイルバッ テリー, USB フラッシュドライブ, Wi­Fi ストレージ, 充電器] Debian ­­ ディストリビューションアーカイブ chroot ­ Debian Wiki @matoken

×