logo
code:Haemophilus influenzae

ここに書かれていることは無保証です。同じことを行って問題が発生しても、 龍義は責任をとりません。

LD-WBBR/Bの解析2

Tatsuyoshi tech diary に戻る

LD-WBBR/Bの新ファームウェア解析
from 4/5/2004

関連:LD-WBBR/Bの解析
関連:LD-WBBR/Bについて


新ファームウェア エレコムさんが方針転換をしたようで、セキュリティfixの新ファームウェアが出た。 今回はこのファームウェアを解析する。使用したのは LD-WBBR/B 用のファームウェア LD-WBBRB233.exe である。この新しいファームウェアの kernel は Linux version 2.4.2 (root@VMware_Linux) (gcc version 2.97 20001120 (experimental)) #485 Thu Apr 15 20:15:35 JST 2004 となり、kernel のバージョンはあがってないが、コンパイルをし直したようである。 前回の Linux version 2.4.2 (root@VMware_Linux) (gcc version 2.97 20001120 (experimental)) #482 Mon Jun 17 14:30:23 JST 2002 と比べると、約2年の間があり、その間に 3回ほどコンパイルを行ったようである。
なかみ1 以下、 initrd の中身である。 [toyota@kashyyyk]372% tree . |-- a -> /crom/a |-- bin -> /crom/bin |-- crom |-- dev | |-- console -> ttyS0 | |-- crom | |-- initrd | |-- kmem | |-- mem | |-- modem -> ttyS1 | |-- null | |-- ppp | |-- ptmx | |-- pts | |-- ram -> ram1 | |-- ram0 | |-- ram1 | |-- ram2 | |-- tap0 | |-- tsdrv0 | |-- tsdrv1 | |-- tty | |-- tty0 | |-- ttyS0 | |-- ttyS1 | |-- usblpt0 | `-- zero |-- etc | |-- codepages -> /mnt/usr/local/samba/lib/codepages | |-- dhclient-script | |-- dhcpd.conf | |-- fstab | |-- group | |-- hostname | |-- hosts | |-- hosts.allow | |-- hosts.deny | |-- hosts.org | |-- inetd.conf | |-- init | |-- init.d | | |-- rc.local | | |-- rcS | | `-- reboot | |-- inittab | |-- ioctl.save | |-- issue | |-- issue.net | |-- login.defs | |-- mime.types | |-- nsswitch.conf | |-- passwd | |-- ppp | | |-- chap-secrets | | |-- firewall-masq | | |-- firewall-standalone | | |-- ip-down | | |-- ip-down.d | | |-- ip-up | | |-- ip-up.d | | |-- options | | |-- pap-secrets [error opening dir] | | |-- peers | | |-- plugins | | |-- pppoe.conf | | |-- resolv | | |-- resolv.conf | | `-- rp-pppoe-gui | | |-- conf.base | | |-- connection-info | | `-- passwd | |-- profile | |-- protocols | |-- services | |-- shadow | |-- smb.conf -> ../usr/local/samba/lib/smb.conf | `-- syslog.conf |-- i | |-- ash.static | `-- mount.static |-- i.sh |-- lib -> /crom/lib |-- lost+found |-- mnt |-- proc |-- root |-- sbin -> /crom/sbin |-- tmp |-- usr -> /crom/usr |-- usr_local_etc | |-- mdn.conf | |-- mdnsproxy.base | `-- ppxp | |-- catcap | |-- chat | | |-- justnet | | |-- modemlogin | | `-- nifty | |-- conf | | |-- debug | | |-- default | | |-- gettyppp | | |-- lcp.def | | |-- modem | | |-- ppxprc | | |-- qdial | | |-- report | | |-- serial | | |-- serial.os | | `-- server | |-- ip | | |-- droutedown | | |-- drouteup | | |-- drupmq | | |-- hroutedown | | |-- hrouteup | | |-- rcstart | | `-- rcstop | |-- keybind | |-- modem | | |-- default -> generic | | |-- generic | | |-- me1414 | | |-- mn128 | | `-- standard | |-- passwd | `-- rc |-- var `-- wwwroot 27 directories, 102 files 以下の緑のファイルが、なくなったと思うファイル。しかし、 [error opening dir] が 出ているので、確実ではない。 | `-- rc | |-- dnsproxy.rc | |-- start | `-- stop |-- var | |-- dhcp | |-- lock | |-- log | | `-- ppxp | |-- mdnsproxy | |-- run | |-- spool | `-- state | `-- dhcp | `-- dhcpd.leases `-- wwwroot |-- MODEL |-- VERSION |-- phase |-- side_mode `-- tsap -> /crom/wwwroot/tsap
なかみ2 以下、フラッシュの中(と思われる)の中身である。赤の部分が増えたファイル。 [toyota@kashyyyk]374% tree . |-- a | |-- bin | | |-- df | | |-- ls | | |-- ping | | `-- ps | |-- lib | | `-- libproc.so.2.0.6 | |-- sbin | `-- usr | |-- bin | | |-- sum | | `-- tail | `-- local | `-- sbin | `-- ttcp |-- bin | |-- bash | |-- cat | |-- cp | |-- dd | |-- echo | |-- false | |-- grep | |-- hostname | |-- kill | |-- login | |-- mkdir | |-- mount | |-- netstat | |-- pwd | |-- rm | |-- sed | |-- sh -> bash | |-- sleep | |-- umount | `-- uname |-- lib | |-- ld-2.2.1.so | |-- ld-linux.so.2 -> ld-2.2.1.so | |-- libc-2.2.1.so | |-- libc.so | |-- libc.so.6 -> libc-2.2.1.so | |-- libc.so.6.1 -> libc-2.2.1.so | |-- libcrypt-2.2.1.so | |-- libcrypt.so -> libcrypt.so.1 | |-- libcrypt.so.1 -> libcrypt-2.2.1.so | |-- libdl-2.2.1.so | |-- libdl.so -> libdl.so.2 | |-- libdl.so.2 -> libdl-2.2.1.so | |-- libnss_dns-2.2.1.so | |-- libnss_dns.so -> libnss_dns.so.2 | |-- libnss_dns.so.2 -> libnss_dns-2.2.1.so | |-- libnss_files-2.2.1.so | |-- libnss_files.so -> libnss_files.so.2 | |-- libnss_files.so.2 -> libnss_files-2.2.1.so | |-- libpam.so -> libpam.so.0 | |-- libpam.so.0 -> libpam.so.0.72 | |-- libpam.so.0.72 | |-- libpthread-0.9.so | |-- libpthread.so -> libpthread.so.0 | |-- libpthread.so.0 -> libpthread-0.9.so | |-- libresolv-2.2.1.so | |-- libresolv.so -> ../../lib/libresolv.so.2 | |-- libresolv.so.2 -> libresolv-2.2.1.so | |-- librt-2.2.1.so | |-- librt.so -> librt.so.1 | |-- librt.so.1 -> librt-2.2.1.so | |-- libtermcap.so.2 -> libtermcap.so.2.0.8 | |-- libtermcap.so.2.0.8 | `-- modules |-- sbin | |-- brctl | |-- dhclient | |-- halt | |-- ifconfig | |-- init | |-- iptables | |-- klogd | |-- mke2fs | |-- mount.smbfs -> /usr/sbin/smbmount | |-- reboot -> halt | |-- route | `-- syslogd |-- usr | |-- bin | | |-- basename | | |-- brg_down.sh | | |-- brg_up.sh | | |-- cleanup.sh | | |-- ctlm | | |-- dhcpCS.sh | | |-- dhcp_clnt_down.sh | | |-- dhcp_clnt_up.sh | | |-- dhcp_serv_down.sh | | |-- dhcp_serv_up.sh | | |-- dialer_down.sh | | |-- dirname | | |-- expr | | |-- flets | | |-- id | | |-- killall | | |-- logger | | |-- masq_init.sh | | |-- mdnsproxy_down.sh | | |-- mdnsproxy_up.sh | | |-- mount.sh | | |-- msq_down.sh | | |-- msq_init.sh | | |-- msq_up.sh | | |-- msq_up_wan.sh | | |-- mt.sh | | |-- nkf | | |-- param_print.sh | | |-- pppipget.sh | | |-- pppoaup.sh | | |-- ppxp | | |-- ppxpd_down.sh | | |-- rep_clitest.sh | | |-- reset_eth0.sh | | |-- restart_daemon.sh | | |-- roamd | | |-- roamd_down.sh | | |-- roamd_up.sh | | |-- scif_off.sh | | |-- scif_on.sh | | |-- setsid | | |-- shttpd.sh | | |-- tail.sh | | |-- tap0conf.sh | | |-- tty | | `-- umountmnt.sh | |-- lib | |-- local | | |-- etc -> /usr_local_etc | | |-- lib | | | `-- iptables | | | |-- libipt_DNAT.so | | | |-- libipt_MASQUERADE.so | | | |-- libipt_SNAT.so | | | |-- libipt_icmp.so | | | |-- libipt_standard.so | | | |-- libipt_tcp.so | | | `-- libipt_udp.so | | |-- sbin | | | |-- mdnsproxy | | | |-- ppxpd | | | `-- shttpd | | `-- share | | `-- mdnkit | | `-- jp.map | |-- sbin | | |-- adsl-connect | | |-- adsl-start | | |-- adsl-status | | |-- adsl-stop | | |-- clictlm | | |-- clitest | | |-- dhcpd | | |-- execf | | |-- in.telnetd | | |-- inetd | | |-- io | | |-- iwconfig | | |-- pppd | | |-- pppoe | | |-- tsap_adsld | | `-- tsap_flashd2 | `-- share | `-- terminfo | `-- k | `-- kterm `-- wwwroot `-- tsap |-- ecgi | |-- AdslStat.class | |-- ConnStat.class | |-- auto_conn.cgi -> tsap.cgi | |-- confirm.cgi -> tsap.cgi | |-- dial.cgi -> tsap.cgi | |-- dialconf.cgi -> tsap.cgi | |-- discdial.cgi -> tsap.cgi | |-- discpppoa.cgi -> tsap.cgi | |-- discpppoe.cgi -> tsap.cgi | |-- ecgi -> ../ecgi | |-- ehtml -> ../ehtml | |-- eimage -> ../eimage | |-- idebug.cgi -> tsap.cgi | |-- initnetwork.cgi -> tsap.cgi | |-- ipup_mdnsproxy.cgi -> tsap.cgi | |-- kantan0.cgi -> tsap.cgi | |-- kantan1.cgi -> tsap.cgi | |-- kantan2.cgi -> tsap.cgi | |-- kantan3.cgi -> tsap.cgi | |-- kantan4.cgi -> tsap.cgi | |-- kantanA.cgi -> tsap.cgi | |-- kantanM.cgi -> tsap.cgi | |-- logoff.cgi -> tsap.cgi | |-- macconf.cgi -> tsap.cgi | |-- maclist.cgi -> tsap.cgi | |-- mforward.cgi -> tsap.cgi | |-- misc.cgi -> tsap.cgi | |-- modem_info.cgi -> tsap.cgi | |-- network.cgi -> tsap.cgi | |-- pblkadd.cgi -> tsap.cgi | |-- pblkdel.cgi -> tsap.cgi | |-- pblock.cgi -> tsap.cgi | |-- pforward.cgi -> tsap.cgi | |-- pfwdadd.cgi -> tsap.cgi | |-- pfwddel.cgi -> tsap.cgi | |-- pppoa.cgi -> tsap.cgi | |-- pppoaconf.cgi -> tsap.cgi | |-- pppoe.cgi -> tsap.cgi | |-- pppoeconf.cgi -> tsap.cgi | |-- print.cgi -> tsap.cgi | |-- reboot.cgi -> tsap.cgi | |-- setdialconf.cgi -> tsap.cgi | |-- setfact192_AP2.cgi -> tsap.cgi | |-- setfact192_AP3.cgi -> tsap.cgi | |-- setfactest_AP2.cgi -> tsap.cgi | |-- setfactest_AP3.cgi -> tsap.cgi | |-- setidebug.cgi -> tsap.cgi | |-- setiptables.cgi -> tsap.cgi | |-- setkantanA.cgi -> tsap.cgi | |-- setkantanC.cgi -> tsap.cgi | |-- setkantanM.cgi -> tsap.cgi | |-- setmisc.cgi -> tsap.cgi | |-- setnetwork.cgi -> tsap.cgi | |-- setpasswd_initialize.cgi -> tsap.cgi | |-- setpppoaconf.cgi -> tsap.cgi | |-- setpppoeconf.cgi -> tsap.cgi | |-- settingtop.cgi -> tsap.cgi | |-- settop.cgi -> tsap.cgi | |-- settop_A.cgi -> tsap.cgi | |-- settop_B.cgi -> tsap.cgi | |-- settop_D.cgi -> tsap.cgi | |-- settop_E.cgi -> tsap.cgi | |-- settop_K.cgi -> tsap.cgi | |-- settop_M.cgi -> tsap.cgi | |-- setwvlan.cgi -> tsap.cgi | |-- side.cgi -> tsap.cgi | |-- syslog.cgi -> tsap.cgi | |-- top.cgi -> tsap.cgi | |-- tsap.cgi | |-- wep.cgi -> tsap.cgi | `-- wvlan.cgi -> tsap.cgi |-- ehtml | |-- confirm.html | |-- dialconf.html | |-- dialdown.html | |-- dialup.html | |-- end.html | |-- end_reboot.html | |-- end_refresh.html | |-- end_top.html | |-- idebug.html | |-- iptables.html | |-- kantan1.html | |-- kantan2.html | |-- kantan3.html | |-- kantan4.html | |-- kantanA.html | |-- kantanM.html | |-- macconf.html | |-- maclist.html | |-- mforward.html | |-- misc.html | |-- modem_info.html | |-- network.html | |-- network2.html | |-- pblock.html | |-- pforward.html | |-- pppoaconf.html | |-- pppoadown.html | |-- pppoaup.html | |-- pppoeconf_AP2.html | |-- pppoeconf_AP3.html | |-- pppoedown.html | |-- pppoeup.html | |-- settingtop.html | |-- side.html | |-- syslog.html | |-- top_A.html | |-- top_B.html | |-- top_D.html | |-- top_E.html | `-- wvlan.html `-- eimage |-- Dialup.gif |-- Dialup_g.gif |-- Dmz.gif |-- Dmz_g.gif |-- Hensyu.gif |-- Hozon.gif |-- Ichiran.gif |-- Ippatu.gif |-- Ippatu_g.gif |-- Mac.gif |-- Main.gif |-- Memory.gif |-- Modoru.gif |-- Network.gif |-- Next.gif |-- No.gif |-- PPPoA.gif |-- PPPoA_g.gif |-- PPPoE.gif |-- PPPoE_g.gif |-- Packet.gif |-- Packet_g.gif |-- Reboot.gif |-- Rebootflash.gif |-- Rogoff.gif |-- Saihyouji.gif |-- Saikidou.gif |-- Sakujyo.gif |-- Setudan.gif |-- Setuzoku.gif |-- Setuzokuset.gif |-- Touroku.gif |-- Tuika.gif |-- Virtual.gif |-- Virtual_g.gif |-- Wireless.gif |-- Yes.gif |-- bridge.gif |-- bridge_g.gif |-- broadlogo.gif |-- c_batsu.gif |-- c_check.gif |-- c_white.gif |-- laneedlogo.gif |-- ttl_dialjotai.gif |-- ttl_dialsettei.gif |-- ttl_dialsetuzoku.gif |-- ttl_dmz.gif |-- ttl_ippatu.gif |-- ttl_kantan.gif |-- ttl_macitiran.gif |-- ttl_macsettei.gif |-- ttl_musen.gif |-- ttl_network.gif |-- ttl_packet.gif |-- ttl_poajotai.gif |-- ttl_poasettei.gif |-- ttl_poasetuzoku.gif |-- ttl_poejotai.gif |-- ttl_poesettei.gif |-- ttl_poesetuzoku.gif |-- ttl_setteijokyo.gif |-- ttl_syosai.gif `-- ttl_virtual.gif 33 directories, 319 files なくなったファイル(シンボリックリンクだけど)は iptables.cgi のみ。 セキュリティ fix は iptables.cgi の削除だけで、残りは bridge mode 用の 変更だと思われる。
変更内容について エレコムさんのファームウェアのページには、変更内容が以下のように書かれている。 ・Telnetポートを無効にしました。 ・当社メンテナンス用に設けていた管理用アカウント/CGIを削除しました。 ・WAN側からのファームアップを禁止しました。 ・ファームアップの際にパスワードが必要になりました。 ・ファームウェアファイルにスクランブルをかけました。 1つ1つ確認してみる。 ・Telnetポートを無効にしました。 initrd の中身から /etc/inetd.conf を確認した。 #telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd となっている。無効になっているようである。 ・当社メンテナンス用に設けていた管理用アカウント/CGIを削除しました。 initrd の中身から /etc/passwd を確認した。 [toyota@kashyyyk]376% cat passwd root:x:0:0:root:/root:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh www-data::33:33:www-data:/var/www:/bin/sh ftp:x:104:104::/home:/bin/sh nobody:x:65534:65534:nobody:/home:/bin/sh tsubota アカウントが削除されている。しかし、パスワードが設定されていないユーザ www-data がまだ存在するようである。telnet が無効になったといえ、これはちょっと 考えて欲しかった。 なかみ2、の内容から iptables.cgi が削除されたのは確認した。 私は最初、「管理用アカウント/CGIを削除しました。」を見て、 CGI という名前の アカウントを削除したのかと思った。「管理用アカウントとCGIを削除しました。」と 書いて欲しかった。 (2004年5月10日追記:いつのまにか表示が「アカウントとCGI」に変更されてました) ・WAN側からのファームアップを禁止しました。 まだ確認していません。 ・ファームアップの際にパスワードが必要になりました。 まだ確認していません。 ・ファームウェアファイルにスクランブルをかけました。 これは、ダウンロードしたファームウェアファイル WBBRB133.exe にスクランブルを かけている、ということのようであるが、スクランブルがかかっていること自体は 確認した。しかし、ファームウェアをアップロードする際の通信は、ここで言う スクランブルが掛かっていないため、パケットキャプチャソフトを使うか、もしくは 9002 番ポートを使った簡単なサーバソフトを作ることにより、中身が取り出せる。 なかみ、なかみ2はこうして取り出したものである。 そう考えると、ここでスクランブルをかけた意味が良くわからない。何の意味が あって、スクランブルをかけたのだろう。
tsap.cgi について CGI のプログラム本体である tsap.cgi を眺めていたのだけど、中に複数のプロバイダの アカウント情報が存在するようである。具体的に言うと、 tsubota さんが使っていたと 思われるユーザ名とパスワードである。この情報については試していないので(当たり前か) 確実かどうかは不明である。 上記の、なかみ、なかみ2、を取り出したプログラムを公開しようと思ったのだが、 この情報が含まれているので、公開しないことにした。
感想 1ヶ月弱の期間で対応したのは、素晴らしいと思うが、全般に渡ってもう少しチェックを して欲しかった。ファームウェアファイルにスクランブルをかけた点について、深読み すると色々と考えられるのだが、中身に自信があるのだったら必要ないのでは、と思う。

by Tatsuyoshi
since 2003