コロナに負けず、できることを少しずつ。

[ICT] Asus RT-AC1200HP をReal-Time Linux 端末として遊ぶ確認

NO IMAGE

家庭用無線LANルーター Asus RT-AC1200HP は、夜のおっさん(おっさん女子)のオモチャです。
(大人のオモチャではなく、ってシモネタかよw)

 [amazon_enhanced asin=”B0152TRT84″ /][amazon_enhanced asin=”B01JANLAAG” /][amazon_enhanced asin=”B00U5QNTZC” /][amazon_enhanced asin=”B01H70163U” /][amazon_enhanced asin=”B00S9SGNNS” /]

===

■中に入りましょう。

Web UI から keypeir を流せば、/home/root/.ssh へ格納されるので、ssh console から root ログインしよう。

admin@RT-AC1200HP:/tmp/home/root# uname -a
Linux RT-AC1200HP 2.6.36 #2 Thu Jul 16 15:30:51 CST 2015 mips GNU/Linux

ほんこれ(ほんと、これ)。 Real-Time Linux です。
家庭用機器として遊ぶには十分なスペックがありそうで、ないようで。確認しましょう。

admin@RT-AC1200HP:/tmp/home/root# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 12.8M 12.8M 0 100% /
tmpfs 61.8M 1.2M 60.6M 2% /tmp
devfs 61.8M 0 61.8M 0% /dev
/dev/sda1 59.6G 816.2M 58.8G 1% /tmp/mnt/USB3_NST1

普段の癖で、df -k という、レガシー環境な引数を付けがちなおっさんですが、人間らしく human 引数で(謎

組み込みに注意が必要なメモリについてカタログスペックでは、
128 MBメインメモリ
16 MBフラッシュメモリ
とのことなので、資源は有効活用しないとダメですね。

外付け USB フラッシュ は、挿すだけで自動マウント /tmp/mnt/USB_NST1 です。すでに torrent で ubuntu ダウンロード確認したので 816.2M ほど消費済み。次はカタログにないスペックを確認しませう。見るべきポイントは赤字で書いてみました。

admin@RT-AC1200HP:/tmp/home/root# cat /proc/cpuinfo
system type : MT7620
processor : 0
cpu model : MIPS 24Kc V5.0 ← 組み込み CPU
BogoMIPS : 386.04  ← インチキ CPU ベンチマーク
wait instruction : yes
microsecond timers : yes
tlb_entries : 32
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
ASEs implemented : mips16 dsp
shadow register sets : 1
core : 0
VCED exceptions : not available
VCEI exceptions : not available

ほんと、カスみたいです ちょっとネットワークに特化したオモチャ向きですね。

===

■どんなコマンドが使えそうかしら?

admin@RT-AC1200HP:/tmp/home/root# cd /bin
admin@RT-AC1200HP:/bin# ls
ash cp fgrep iwconfig mii_mgr nice pwd sed umount
ated date flash iwlist mkdir ntfs-3g reg sh uname
busybox dd fsync iwpriv mknod nvram rm sleep usleep
cat df grep kill more pidof rmdir sync vi
chmod dmesg gunzip ln mount ping rstats tar watch
chown echo gzip login mv ping6 rt2860apd touch wscd
comgt egrep ionice ls netstat ps rtinicapd true zcat

ショボい・・

admin@RT-AC1200HP:/bin# cd /sbin
admin@RT-AC1200HP:/sbin# ls
ATE fsck.ext2 mod_folder stainfo_5g
FREAD fsck.ext3 modify_if_exist_new_folder swapoff
FWRITE fsck.minix modprobe swapon
add_account get_account_list mount.ntfs switchmode
add_folder get_all_folder mount.ntfs-3g syslogd
add_multi_routes get_apps_name mtd-erase tcpcheck
arp get_folder_list mtd-unlock test_disk1
asus_lp get_permission mtd-write test_disk2
asus_sd get_phy_speed ntp test_endian
asus_sg get_phy_status ots test_if_exist_account
asus_sr get_var_file_name pc test_if_exist_share
asus_tty halt pc_block test_of_var_files
asus_usb_interface hotplug radio test_share
asus_usbbcm hotplug2 rc tune2fs
asuscfe_2g hour_monitor rcheck udevtrigger
asuscfe_5g how_many_layer read_sms udhcpc
auto_macclone ifconfig reboot usb_notify
autodet init restart_wireless usbled
blkid initial_all_var_file rmmod vconfig
chk_app_state initial_folder_list route wanduck
console initial_var_file rsasign_check watchdog
create_if_no_var_files insmod rtkswitch watchdog02
ddns_updated klogd run_app_script wimaxc
del_account led_ctrl run_pptpd wimaxd
del_folder lminus run_sshd wlcconnect
delay_exec lplus run_telnetd wlcscan
disk_monitor lsmod send_sms wpsaide
disk_remove mdev service write_3g_ppp_conf
e2fsck mke2fs set_permission write_smb_conf
ejusb mkfs.ext2 setconsole write_webdav_conf
fdisk mkfs.ext3 setup_dnsmq zcip
firmware_check mkswap sigmon
free_caches mod_account stainfo_2g

これまた、asus コマンドなどメーカ都合だらけですね。宝探しなのか、爆弾探しなのか。

admin@RT-AC1200HP:/sbin# cd /usr/bin
admin@RT-AC1200HP:/usr/bin# ls
[ dbclient env killall printf ssh traceroute6
[[ dirname ether-wake less readlink strings unzip
awk dropbear expr logger renice tail uptime
basename dropbearconvert find lsusb scp test wc
clear dropbearkey flock md5sum sdparm top which
cmp dropbearmulti free nohup smbpasswd tr
cut du head nslookup sort traceroute

ユーティリティを実現している Web UI があった(ネットワーク・ツールとして)ので、それらの実働部隊はここにいるのかな、と。

admin@RT-AC1200HP:/usr/bin# which make
admin@RT-AC1200HP:/usr/bin# which gcc

あああ、抜かれてあるんだよな。そうだよな、そんなコマンドを残したままプロダクト出荷しないよな、出荷していたことがある某C とは大違い(大人の都合により社名記載ができません。

===

■少し遊べるように環境を探ってみようか。

(元に戻す復活の呪文が必要なら conf 類はバックアップ取得しといてね、Web UI でも使って

Shared Object (Windows でいうところの DLLっぽいもの) を lighthttod / Web UI 経由でお話しているので、そこから遊ぶヒントを探すかと。

admin@RT-AC1200HP:/usr/lib# ls
ebtables libjson-c.so.2 libxml2.so mod_indexfile.so
l2tp libjson-c.so.2.0.1 libxml2.so.2 mod_magnet.so
libbcmcrypto.so liblightsql.so libxtables.so mod_mysql_vhost.so
libbigballofmud.so libmssl.so libxtables.so.7 mod_proxy.so
libcrypto.so libneon.so libxtables.so.7.0.0 mod_redirect.so
libcrypto.so.1.0.0 libneon.so.27 libz.so.1 mod_rewrite.so
libcurl.so libneon.so.27.2.6 mod_access.so mod_rrdtool.so
libcurl.so.4 libnvram.so mod_accesslog.so mod_scgi.so
libcurl.so.4.2.0 libpcre.so mod_aicloud_auth.so mod_secdownload.so
libeap.so libpcre.so.1 mod_aidisk_access.so mod_setenv.so
libeap.so.0 libpcre.so.1.0.1 mod_alias.so mod_sharelink.so
libeap.so.0.0.0 libshared.so mod_auth.so mod_simple_vhost.so
libebtc.so libsmbclient.so mod_cgi.so mod_smbdav.so
libip4tc.so libsmbclient.so.0 mod_cml.so mod_ssi.so
libip4tc.so.0 libsqlite3.so.0 mod_compress.so mod_staticfile.so
libip4tc.so.0.0.0 libssl.so mod_create_captcha_image.so mod_status.so
libip6tc.so libssl.so.1.0.0 mod_dirlisting.so mod_trigger_b4_dl.so
libip6tc.so.0 libusb-0.1.so.4 mod_evasive.so mod_userdir.so
libip6tc.so.0.0.0 libusb-0.1.so.4.4.4 mod_evhost.so mod_usertrack.so
libiptc.so libusb-1.0.so mod_expire.so mod_webdav.so
libiptc.so.0 libusb-1.0.so.0 mod_extforward.so pppd
libiptc.so.0.0.0 libusb-1.0.so.0.0.0 mod_fastcgi.so tc
libjson-c.so libusb.so mod_flv_streaming.so xtables

これまた、ほとんどそぎ落とされていますね。だけど、ファームウェア・アップデートができる機器なので、環境に合わせて so (Shared Object) を転送すればイケるんじゃね?的な妄想をするも、そのために破るのか、、破るの?俺が?メンドクサイという気持ちが出てくる。

lighthttpd.conf はファイル属性で 666 なので書き換え自由。消してしまって大事にならぬように、備忘録を兼ねてここに残しておくw

admin@RT-AC1200HP:/tmp# cat lighttpd.conf
server.modules+=(“mod_aicloud_auth”)
server.modules+=(“mod_alias”)
server.modules+=(“mod_userdir”)
server.modules+=(“mod_aidisk_access”)
server.modules+=(“mod_sharelink”)
server.modules+=(“mod_create_captcha_image”)
server.modules+=(“mod_webdav”)
server.modules+=(“mod_smbdav”)
server.modules+=(“mod_redirect”)
server.modules+=(“mod_compress”)
server.modules+=(“mod_usertrack”)
server.modules+=(“mod_rewrite”)
server.modules+=(“mod_access”)
server.modules+=(“mod_auth”)
server.port=8082
server.document-root=”/tmp/lighttpd/www”
server.upload-dirs=(“/tmp/lighttpd/uploads”)
server.errorlog=”/tmp/lighttpd/err.log”
server.pid-file=”/tmp/lighttpd/lighttpd.pid”
server.arpping-interface=”br0″
server.errorfile-prefix=”/usr/lighttpd/css/status-”
dir-listing.activate=”disable”
server.syslog=”/tmp/lighttpd/syslog.log”
mimetype.assign = (
“.html” => “text/html”,
“.htm” => “text/html”,
“.css” => “text/css”,
“.js” => “text/javascript”,
“.swf” => “application/x-shockwave-flash”,
“” => “application/x-octet-stream”)
index-file.names = ( “index.php”, “index.html”,
“index.htm”, “default.htm”,
” index.lighttpd.html” )
url.access-deny = ( “~”, “.inc” )
static-file.exclude-extensions = ( “.php”, “.pl”, “.fcgi” )
compress.cache-dir = “/tmp/lighttpd/compress/”
compress.filetype = ( “application/x-javascript”, “text/css”, “text/html”, “text/plain” )
aicloud.max-sharelink = 15
$SERVER[“socket”]==”:8082″{
$HTTP[“url”]=~”^/RT-AC1200HP($|/)”{
server.document-root = “/”
alias.url=(“/RT-AC1200HP”=>”/mnt”)
webdav.activate=”enable”
webdav.is-readonly=”disable”
webdav.sqlite-db-name=”/tmp/lighttpd/webdav.db”
}
else $HTTP[“url”]=~”^/smb($|/)”{
server.document-root = “/”
alias.url=(“/smb”=>”/usr/lighttpd”)
smbdav.auth_ntlm = (“Microsoft-WebDAV”,”xxBitKinex”,”WebDrive”)
webdav.activate=”enable”
webdav.is-readonly=”disable”
url.aicloud-auth-deny = (“jplayer”)
}
else $HTTP[“url”] =~ “^/favicon.ico$”{
server.document-root = “/”
alias.url = ( “/favicon.ico” => “/usr/lighttpd/css/favicon.ico” )
webdav.activate = “enable”
webdav.is-readonly = “enable”
}
else $HTTP[“url”] !~ “^/smb($|/|.)” {
server.document-root = “smb://”
smbdav.activate = “enable”
smbdav.is-readonly = “disable”
smbdav.always-auth = “enable”
smbdav.sqlite-db-name = “/tmp/lighttpd/smbdav.db”
usertrack.cookie-name = “SMBSESSID”
}
}
$SERVER[“socket”]==”:443″{
ssl.pemfile=”/etc/server.pem”
ssl.engine=”enable”
$HTTP[“url”]=~”^/RT-AC1200HP($|/)”{
server.document-root = “/”
alias.url=(“/RT-AC1200HP”=>”/mnt”)
webdav.activate=”enable”
webdav.is-readonly=”disable”
webdav.sqlite-db-name=”/tmp/lighttpd/webdav.db”
}
else $HTTP[“url”]=~”^/smb($|/)”{
server.document-root = “/”
alias.url=(“/smb”=>”/usr/lighttpd”)
smbdav.auth_ntlm = (“Microsoft-WebDAV”,”xxBitKinex”,”WebDrive”)
webdav.activate=”enable”
webdav.is-readonly=”disable”
url.aicloud-auth-deny = (“jplayer”)
}
else $HTTP[“url”] =~ “^/favicon.ico$”{
server.document-root = “/”
alias.url = ( “/favicon.ico” => “/usr/lighttpd/css/favicon.ico” )
webdav.activate = “enable”
webdav.is-readonly = “enable”
}
else $HTTP[“url”] =~ “^/aicloud.crt$”{
server.document-root = “/”
alias.url = ( “/aicloud.crt” => “/etc/cert.pem” )
webdav.activate = “enable”
webdav.is-readonly = “enable”
}
else $HTTP[“url”] !~ “^/smb($|/|.)” {
server.document-root = “smb://”
smbdav.activate = “enable”
smbdav.is-readonly = “disable”
smbdav.always-auth = “enable”
smbdav.sqlite-db-name = “/tmp/lighttpd/smbdav.db”
usertrack.cookie-name = “SMBSESSID”
}
}
debug.log-request-header=”disable”
debug.log-response-header=”disable”
debug.log-request-handling=”disable”
debug.log-file-not-found=”disable”
debug.log-condition-handling=”disable”

だけど、 vim エディタは入ってる。 Web UI が応答しなくなった時(組み込み機器でやらかしたときは、直接 conf を書き換えて復旧させることだって)に有効な環境のようだ。前述の lighthttpd.conf はここで直接編集できたw (よいこは無理をしないでね

admin@RT-AC1200HP:/usr/lib# vi -v
vi: invalid option — v
BusyBox v1.17.4 (2015-07-16 14:55:51 CST) multi-call binary.

Usage: vi [OPTIONS] [FILE]…

Edit FILE

Options:
-c Initial command to run ($EXINIT also available)
-R Read-only
-H Short help regarding available features

ああ、BusyBox か。起動 log を見ても良かったな、ssh で入ってあれこれ探検するよりも。

syslog を見よう、ってか見とけよ俺。

Jan 1 09:00:15 syslogd started: BusyBox v1.17.4
Jan 1 09:00:15 kernel: klogd started: BusyBox v1.17.4 (2015-07-16 14:55:51 CST)
Jan 1 09:00:15 kernel: Linux version 2.6.36 (root@asus) (gcc version 4.2.4) #2 Thu Jul 16 15:30:51 CST 2015
Jan 1 09:00:15 kernel: The CPU feqenuce set to 580 MHz
Jan 1 09:00:15 kernel: PCIE: bypass PCIe DLL.
Jan 1 09:00:15 kernel: PCIE: Elastic buffer control: Addr:0x68 -> 0xB4
Jan 1 09:00:15 kernel: disable all power about PCIe
Jan 1 09:00:15 kernel: Zone PFN ranges:
Jan 1 09:00:15 kernel: Normal 0x00000000 -> 0x00008000
Jan 1 09:00:15 kernel: Movable zone start PFN for each node
Jan 1 09:00:15 kernel: early_node_map[1] active PFN ranges
Jan 1 09:00:15 kernel: 0: 0x00000000 -> 0x00008000
Jan 1 09:00:15 kernel: Built 1 zonelists in Zone order, mobility grouping off. Total pages: 32512
Jan 1 09:00:15 kernel: Kernel command line: console=ttyS1,115200n8 root=/dev/mtdblock4 rootfstype=squashfs
Jan 1 09:00:15 kernel: Primary instruction cache 64kB, VIPT, , 4-waylinesize 32 bytes.
Jan 1 09:00:15 kernel: Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
Jan 1 09:00:15 kernel: init_r4k_clocksource: cpu_has_counter(128) mips_hpt_frequency(290000000)
Jan 1 09:00:15 kernel: new mips_hpt_frequency(289260310)
Jan 1 09:00:15 kernel: Mount-cache hash table entries: 512
Jan 1 09:00:15 kernel: RALINK_GPIOMODE = 1a341c
Jan 1 09:00:15 kernel: RALINK_GPIOMODE = 18341c
Jan 1 09:00:15 kernel: PPLL_CFG1=0xe58000
Jan 1 09:00:15 kernel: MT7620 PPLL lock
Jan 1 09:00:15 kernel: PPLL_DRV =0x80080504
Jan 1 09:00:15 kernel: start PCIe register access
Jan 1 09:00:15 kernel: RALINK_RSTCTRL = 2400000
Jan 1 09:00:15 kernel: RALINK_CLKCFG1 = 75afffc0
Jan 1 09:00:15 kernel: *************** MT7620 PCIe RC mode *************
Jan 1 09:00:15 kernel: PCIE0 enabled
Jan 1 09:00:15 kernel: init_rt2880pci done
Jan 1 09:00:15 kernel: bio: create slab <bio-0> at 0
Jan 1 09:00:15 kernel: BAR0 at slot 0 = 0
Jan 1 09:00:15 kernel: bus=0x0, slot = 0x0
Jan 1 09:00:15 kernel: res[0]->start = 0
Jan 1 09:00:15 kernel: res[0]->end = 0
Jan 1 09:00:15 kernel: res[1]->start = 20200000
Jan 1 09:00:15 kernel: res[1]->end = 2020ffff
Jan 1 09:00:15 kernel: res[2]->start = 0
Jan 1 09:00:15 kernel: res[2]->end = 0
Jan 1 09:00:15 kernel: res[3]->start = 0
Jan 1 09:00:15 kernel: res[3]->end = 0
Jan 1 09:00:15 kernel: res[4]->start = 0
Jan 1 09:00:15 kernel: res[4]->end = 0
Jan 1 09:00:15 kernel: res[5]->start = 0
Jan 1 09:00:15 kernel: res[5]->end = 0
Jan 1 09:00:15 kernel: bus=0x1, slot = 0x0
Jan 1 09:00:15 kernel: res[0]->start = 20000000
Jan 1 09:00:15 kernel: res[0]->end = 200fffff
Jan 1 09:00:15 kernel: res[1]->start = 0
Jan 1 09:00:15 kernel: res[1]->end = 0
Jan 1 09:00:15 kernel: res[2]->start = 0
Jan 1 09:00:15 kernel: res[2]->end = 0
Jan 1 09:00:15 kernel: res[3]->start = 0
Jan 1 09:00:15 kernel: res[3]->end = 0
Jan 1 09:00:15 kernel: res[4]->start = 0
Jan 1 09:00:15 kernel: res[4]->end = 0
Jan 1 09:00:15 kernel: res[5]->start = 0
Jan 1 09:00:15 kernel: res[5]->end = 0
Jan 1 09:00:15 kernel: Load Ralink Timer0 Module
Jan 1 09:00:15 kernel: Load Ralink Timer1 Module
Jan 1 09:00:15 kernel: RT3xxx EHCI/OHCI init.
Jan 1 09:00:15 kernel: Ralink gpio driver initialized
Jan 1 09:00:15 kernel: Ralink SPI flash driver, SPI clock: 48MHz

以下、(ry

gcc version 4.2.4 環境で開発されているなら、対応 CPU エミュレートして流し込んでみればいいじゃね?的な妄想が閃く。

===

■少し前のスキルでは遊べないぞな?

ICT 業界ではなく、医療福祉介護業界へ移ってきたおっさん。少し前(3年前)のイクスプロイト調査手法では歯が立たない。なんでだ?と思って、脆弱性情報をみてみたら、よくある Asus 穴はフィックスされていたんですね。

>> http://routersecurity.org/bugs.php <<

ちょっと、トホホ感もしますが、本当のトホホは俺のスキルの無さです。

備忘録: Asus ダウンロードサイト
http://www.asus.com/jp/Networking/RTAC1200HP/HelpDesk_Download/

説明GPL of ASUS RT-AC1200HP for firmware 3.0.0.4.380.3421
ファイルサイズ689.85 MBytes更新 2016/06/13
ダウンロード元グローバル

↑ ファームウェアが GPL 公開されてたww ということは、アレですよ。ええ、アレですね。ラッキーです。
でも、ソースを読むのか・・・。

===
もう午前2時前、そろそろ寝ます。

ルータで遊ぶより、1969年 北米カリフォルニア州 ランターマン法「当事者の主体性を地湧現する PC-IPP, RC によるケースマネジメント」によるソーシャルワーカー1人あたりの担当ケース数が80 という日本とは比較にならないほどの規模は何故実現したんだろうか?と疑問を、持っていたのでそれを自習する時間は翌朝へ持ち越し。

寝ます。では、おやすみなさいとう!

以上

Asusカテゴリの最新記事