【基本編】格安中華セキュリティ・カメラのWeb設定を探検する HTMLをハッキングしてみて今更わかったこと総まとめ
以前、テック大家さん的にAmazonでよく見かけるセキュリティ・カメラってどうなの?という記事を書きました。今日はこのカメラを技術的な興味から深堀りをしていくことになります。
注目するのはこのカメラが持つWebベースの設定画面。WiFiホームルーターなどでWebブラウザで使う設定画面ありますよね。あれです。
以前の記事で登場した格安セキュリティ・カメラにも似たような機能があるのですが、これが中々興味深かったのです。そこで、本記事はハックまがいのお遊びネタになっています。
以前の記事は以下のリンクから、合わせてご覧ください。
ActiveXコントロールなんか使っているぞ!
カメラのWeb設定画面は、以下のようにアクセスします。
http://192.168.0.112
カメラにHTTPサーバーが搭載されているというわけです。もちろん、認証が必要でユーザ名とパスワードの入力を求められます。
一見なんのことはないWebの設定画面です。でもこの設定画面、なんとActiveXコントロールを使うのです。ActiveXとは、すでに時代遅れになっているMicrosoft製のWebブラウザであるInternet Explorerでのみ使える技術です。Windowsでしか使えません。そして2023年現在、Internet Explorer はWindowsにすら搭載されなくなっているブラウザです。
Flashなんか使っているぞ!
カメラのWeb設定画面のHTMLのソースコードを追ってみると、WindowsのIE以外のプラットフォームに対しては、Flash Playerを使うコードもあります。Flashは、一時はWebのサイトのアニメーション表示やインタラクティブなページで人気のあり、一斉風靡したテクノロジーです。こちらもActiveX同様、既に時代遅れ。開発元(買収した会社)であるAdobeも既にサポート停止をお知らせしています。
実は筆者、テック大家さんがWebサービスの仕事をしていたのは2000年前半でした。その当時はまだ、フロントエンド開発、バックエンド開発、といった用語もなかったと記憶しています。そして、ActiveXやFlash Playerなどのブラウザ・プラグインの全盛期。ActiveXはC++、Flash Playerで動作するコンテンツはJavaScriptに似たスクリプト言語、でそれぞれ開発されていました。
ところがこれらの技術は、主にセキュリティ観点から、どんどん脇役に追いやられるという歴史をたどることになります。その後に登場した、AJAXと呼ばれるJavaScriptを駆使したインタラクティブなWebのUIの開発コンセプトの登場や、モダンブラウザと呼ばれる一連のブラウザ進化の流れのなかで完全に消滅されられたのでした。今では、ブラウザを拡張する手段も様変わり。Chromeの拡張機能のような、HTML/JavaScriptをベースにしたブラウザ拡張へ技術がシフトしていたのです。
ActiveXやプラグインの何がセキュリティ的に問題だったかと言うと、これらの技術はWindowsなどのOSの機能を直接使うことができました。OSの機能の例として、例えば、ファイル・ディレクトリへのアクセスです。普通JavaScriptを実行するブラウザは、JavaScriptのプログラムに対して、ローカルファイルの読み書きの機能を提供しません。Webアプリの開発者はそういったプログラムを作ることはできなかったのです。ところが、ActiveXを使うとそれが可能になる。しかも、ActiveXのインストールはブラウザが面倒を見てくれるのでユーザはあまり意識せずにそういった拡張ソフトウェア・モジュールを使うことができました。これは逆に言うと、悪意を持った開発者ならユーザにそれとわからずに、ユーザのローカルファイルを消したり奪ったりできるということに他なりません。
また設計上の課題として、ActiveXがもしバグでクラッシュしてしまうとブラウザごと「落ちる」という状況もあったと記憶しています。
そんな危険な技術だったがために、次第に追いやられ、HTML/JavaScript規格の拡張や、モダンブラウザ自体の進化など、別の技術に取って代わられたという歴史があります。
と、まぁ、私の中華製の格安カメラは、こんな感じの古い技術を駆使してWebベースの設定画面が実装されているのです。
Web設定画面のソースコードは、カメラのソフトウェア(ファームウェア)の一部として内蔵されいるわけです。ですので「Webページ」といってもいわゆるネットワーク上のサーバーにあるソフトウェアのように頻繁に更新できるわけでもありません。カメラの内臓のファームウェアバージョンアップとして更新するしかないです。
そして、その更新もあるのかないのかよくわからない中国製メーカーが相手です。今どきの最新Web技術を使ったWeb設定画面に更新されるということは、まず期待できないでしょう。
Internet Explorer(IE)で使ってみた
ではもともと、このカメラのWeb設定画面では、どんな感じでActiveXが動作していたのでしょう。興味が湧いてきました。そこで、ちょうど手元に、昔のPCのWindows 7インストールDiscがあったので、VirtualBoxにインストールしてActiveXを動作させてみることにしたのです。
既にMicrosoftが非サポートを表明しているOSだけあり、動かすのはなかなかに難しい。
でも、とにかくIEを更新してカメラのWeb設定画面を開いてみました。すると、以下のようにActiveXコントロールのダウンロードを促すメッセージが表示されます。
ダウンロードすると、以下のようなインストーラーが起動して、必要なモジュールのインストールが始まります。
ちなみに、ソースコードを解析して以下のことがわかりました。
このActiveXは、p2pip.netというドメインの以下のリンクからダウンロードしています。ActiveX のインストーラー自体は、外部のサーバーに置かれているのですね(2023年12月現在ダウンロード可能)。
http://p2pip.net/ClientPlus_Setup.exe
ところが、肝心の動作は、なぜか期待通りではありませんした。もしかしたら筆者が使い方をわかっていないだけかも知れません。でも、カメラの映像が出てきても良さそうなところで使われているActiveXコントロールは、真っ黒な絵を表示したままでした。
使えそうな機能をハッキング
せっかくWindows 7を引っ張り出してきて、しばしノスタルジーを感じていたわけですが、ActiveXやFlashがないと全く使えないかと言うとそんなこともありません。安心して下さい。モダンブラウザ(最近のChrome、Edge、Firefox、Safari等)でも、一応動作して最低限の設定は問題なく行えます。
ただし、この画面でできることは、以前の記事で説明したCamHiスマホアプリを使えばほぼ可能です。ですので、ブラウザを使ってガリガリと設定をする必要性はあまりありません。
そんな中、色々調べていくとちょっと使えそうだな、と思える機能(URL)がいくつかあるではないですか。いくつかご紹介します。
リアルタイムに静止画を取得できるURL
/auto.jpgのようにアクセスすると、現在カメラが捉えているJPEG画像がブラウザに表示されます。例えば、カメラのIPアドレスが192.168.0.112であれば、デフォルトで以下のようにアクセスします。
http://192.168.0.112/auto.jpg
このURLは既にユーザ名とパスワードで認証が済んでいるブラウザで表示されます。別のプログラムから呼び出す場合は、BASIC認証の機能を使って、
http://username:passord@192.168.0.112/auto.jpg
のようにすればよいでしょう。
SDカードをブラウズするURL
SDカードの中のディレクトリ構造や、撮影された画像・動画のダウンロードもWebブラウザから行えます。/sdにアクセスします。上記同様、例えば、カメラのIPアドレスが192.168.0.112であれば、以下のようにアクセスします。
http://192.168.0.112/sd/
CGIインターフェース(API)
動的なWebページを実現するためにCGI (Common Gateway Interface)とよばれる仕組みが古くからあります。カメラのWeb設定画面は動的なページである必要があるわけですが、CGIをちょっと変わった使い方をしていました。古くからあるCGIは動的な一つのページを丸ごと返してくるような仕組みとして使われていました。しかし、このカメラのCGI(と呼ばれるURL)はちょっと奇妙な使い方をしていました。
REST APIと呼ばれるHTTPベースのインターフェースを実現する仕組みに近いです。しかし、それともちょっと違っていて筆者にはやりたいことはわかるけど、妙な仕組みに見えます。
/web/cgi-bin/hi3510/param.cgi
というURLです。例えば、IPアドレスが192.168.0.112であるカメラがあると、以下のようにパラメータ付きで呼び出します。
http://192.168.0.112/web/cgi-bin/hi3510/param.cgi?cmd=getnetcattr
これを呼び出すと、以下のようなJavaScriptの一部のコードが返ってきます。
var dhcpflag="on";
var ip="192.168.0.101";
var netmask="255.255.255.0";
var gateway="192.168.0.1";
var dnsstat="1";
var fdnsip="192.168.0.1";
var sdnsip="";
var macaddress="00:C2:31:8F:C0:DB";
var networktype="LAN";
昔からあるCGIはHTMLのページそのものを返すものとして使われていましたので、CGIとは名ばかり。もはやAPI (Application Programming Interface)と呼んだ方がよいでしょう。
上のコードは、URL野パレメータの文字列に入れたgetnetattrという名前から想像できる通り、カメラのネットワーク設定の値です。var 〇〇=××;のようにJavaScriptの変数名に値を代入するコードになっています。
ネットを調べてみると、カメラのこの仕組みをドキュメント化している会社(?)がありました。いや、カメラの内部のソフトを作っている会社が公式に書いている資料なのかも知れません。いくつかありましたがそのうちの一つはこちら→FI9821W-CGI-Commands.pdf。これを見ると、まさにAPIマニュアル。
さて、この話を続けると長くなりそうなので、別記事にしました。ご興味がある方は合わせてご覧ください。
では、本日はこの辺で。
ディスカッション
コメント一覧
まだ、コメントがありません