最近よく聞かれる、IPカメラの話。特に古い機種。うん、Hikvisionのやつ。
今更?って思うかもしれないけど、[CVE-2017-7921]。これ、まだ生きてる。正直、かなり。なぜかって?…ファームウェアを更新できない、させないデバイスが山ほどあるから。プロバイダー側の都合でね。結果、脆弱性が放置されてる。
重点一句話
古いHikvisionのカメラは、認証を回避して内部情報(ユーザー情報やスナップショットとか)を引っこ抜ける脆弱性 [CVE-2017-7921] が、未だに多数放置されてるって話。
…もちろん、自分の管理下にないデバイスで試すのは違法。これは絶対。あくまで、自分の資産を守るための知識として。
なぜ今この古い脆弱性の話?
ネットで検索すると、技術的な解説はたくさん出てくる。PoCコードとか、Nmapスクリプトとか。でも、それって攻撃者側の視点ばっかり。もっと大事なことがあるはず。
まず、なんで何年も前の脆弱性が残ってるのか。技術的な問題じゃない。ビジネスの問題。リース品だったり、管理契約で「余計なことするな」って縛られてたり。結果、アップデートできない。…いや、しない。この「できない」と「しない」の差は大きい。
次に、攻撃されたら「何が」起きるのか。みんな「ハッキングされる」としか言わないけど、具体性が足りない。この脆弱性の場合、カメラのハードウェア情報、ファームウェアのバージョン、そして一番ヤバいのが、管理者含むユーザーの認証情報がごっそり抜かれる可能性がある。あ、あとカメラの静止画スナップショットも。つまり、ただ覗かれるだけじゃない。次の攻撃への足がかりにされる。
日本のJPCERT/CCも当時もちろん注意喚起してた。でも、アメリカのNISTが深刻度をスコアリングするのとは別に、日本の中小企業とか、なんなら個人宅で、自分が使ってるカメラのメーカーすら知らないケースが多いのが現実。そこが一番根深い問題かもしれない。
どうやってやるか…その手順
まあ、一応、どういう流れでやられるのか、その手順をメモしておく。
ステップ1:インターネット全体から候補を探す
まず使うのはShodan。IoTデバイス版のGoogleみたいなもの。ルーター、サーバー、そしてIPカメラ。ネットに繋がってるあらゆるものをインデックスしてる検索エンジン。
ここでHikvision製のカメラに絞り込むための検索クエリ、まあ「dork」ってやつを使う。これはちょっとググれば出てくる。今回は手元にあるからそれを使うとして…。
ShodanのCLI(コマンドラインツール)は便利。APIキーを設定して、こんな感じで実行する。
shodan download <出力ファイル名> <検索クエリ>
これで、検索結果がJSON形式でごそっとダウンロードされる。元の記事だと860件だったみたいだけど、これは国を絞ったからだろうな。全世界なら、もっと桁が違う。
次に、このJSONファイルからIPアドレスだけを抜き出す。
shodan parse --fields ip_str <JSONファイル.json.gz> > <IPリスト.txt>
これで、攻撃対象候補のIPアドレスリストが出来上がる。簡単だ。
ステップ2:脆弱性があるか個別にスキャン
IPリストができたら、次はNmapの出番。言わずと知れたポートスキャナー。映画にもよく出てくるやつね。Trinityが使ってたのが有名か…。余談だけど。
この脆弱性[CVE-2017-7921]をチェックするための専用スクリプト(NSE - Nmap Scripting Engine)がある。Tomas Savenas氏が作ったLuaスクリプトがよく使われる。
コマンドはこんな感じ。
nmap -Pn -n -p80 --script <Luaスクリプトのパス> -iL <さっき作ったIPリスト.txt>
これで、リストにあるIPアドレスに対して、片っ端から脆弱性があるかどうかを自動でチェックしてくれる。結果を見れば、どれが「当たり」か一目瞭然。
Metasploitにもこの脆弱性を悪用するためのモジュールがある。「gather/hikvision_info_disclosure_cve_2017_7921」。ここまで来ると、もう完全に攻撃フェーズの話。
で、結局何が手に入るのか
脆弱性を見つけて、認証情報を手に入れたら、次はどうなるか。
カメラの映像にアクセスする。RTSP(Real Time Streaming Protocol)っていうプロトコルを使うのが一般的。セキュリティカメラが映像をリアルタイムで送るための規格。
これを観るのに便利なのがFFmpeg。動画とか音声とかを扱うための万能ツールキット。その中に入ってるffplayを使えば、一行でストリームに接続できる。
ffplay -i <rtsp://ユーザー名:パスワード@IPアドレス>
これで、リアルタイムの映像が筒抜けになる。夜中のオフィス、誰もいないはずの倉庫、自宅の玄関…。まあ、そういうこと。
スキャンツール比較のメモ
今回出てきたShodanとNmap。似てるようで、役割が全然違う。混同してる人もいるから、整理しておく。
| ツール | 主な用途 | スケール | 必要なもの | 個人的なメモ |
|---|---|---|---|---|
| Shodan | インターネットに接続されたデバイスの検索 | 惑星規模。めちゃくちゃ広い。 | アカウント、APIキー、検索クエリの知識。 | どこの海にどんな魚がいるか調べるための魚群探知機。まずはこれで大まかな場所を特定する感じ。 |
| Nmap | 特定のターゲットのポートや脆弱性のスキャン | 限定的。IPアドレスのリストに対して使う。 | ターゲットのIPリスト、スキャン目的に応じた知識(スクリプトとか)。 | 釣ってきた魚(あるいは釣りたい魚群)を一匹ずつ調べるための道具。毒があるか、食べられるか、とか。より精密な調査。 |
よくある間違いとか、考え違い
この手の話で、いくつか誤解がある。
- 「うちは大丈夫」という思い込み。…これが一番危ない。自社のネットワークに何が繋がっているか、正確に把握してる担当者は少ない。特に古い機器は忘れられがち。
- パスワードを変えれば安全?…今回の脆弱性は認証「前」の問題。認証をバイパスされるから、どれだけ複雑なパスワードを設定していても、意味がないケースがある。根本的な対策はファームウェアの更新。
- ファイヤーウォールがあればOK?…設定次第。カメラが外部から直接アクセスできるようになってたら、ファイヤーウォールは素通り。そもそも、なぜ外部からアクセスできる設定になってるのか、そこから見直すべき。
結局、デジタルな世界に「絶対安全」はない。IoT機器が増えれば増えるほど、こういうセキュリティの穴は必然的に増えていく。新しい技術は便利だけど、その分、新しいリスクも生まれる。それだけのこと。
…自分のネットワークにぶら下がってる機器、最後にちゃんとリストアップしたの、いつだろう。案外、忘れてるものがあるかもしれない。
もしよかったら、自分の環境で「こんなの繋がってたのか…」って驚いた経験、コメントで教えてくれると面白いかも。
