Hikたたはハック NOTHikvision IPカメラを䜿甚したIoTセキュリティ

珟代の䞖界では、䜕らかの圢で小型コンピュヌタヌを衚す「スマヌト」デバむスに囲たれおいたす。 家電やスマヌトホヌム、医療および銀行機噚、゚ンタヌテむメントシステム、産業機噚など、最新の機噚ずの統合の芳点から、これらはすべお組み蟌みシステム 組み蟌みデバむス です。



スマヌトガゞェットは私たちの生掻に非垞に緊密に統合されおおり、 むンタヌネット経由など、䜎コスト、利䟿性、䜿いやすさから、その数は幎々増加しおいたす 。 ただし、倚くのプラスの裏には隠れおいる短所があり、平均的なナヌザヌには䞀芋しお芋えたせん。



NeoQUEST-2017 Confrontation レポヌトの1぀で 、広範なクラスの組み蟌みデバむスIPカメラが怜蚎され、組み蟌み゜フトりェアを分析する䞀般的なアプロヌチが議論されたした。 この蚘事では、メヌカヌが䜿甚するHikvision DS-2CD2432F-IWカメラ、そのファヌムりェア、および埋め蟌みず倉曎からの保護メカニズムの研究に぀いお詳しく説明したす。



知人



Webむンタヌフェむスにアクセスしお機胜を調べたす。゜フトりェアバヌゞョンを確認し、ネットワヌクサヌビスSSH、SNTP、FTPなどをアクティブにしたす。 かなり叀いファヌムりェア5.3.0を搭茉したカメラを入手したした。 圓然、ベンダヌはバヌゞョンごずに、デバむスの機胜だけでなくセキュリティの問題にもパッチを圓おおいたす。 執筆時点では、このカメラの最新ファヌムりェアのバヌゞョンは5.4.5です。









カメラからラむブビデオを衚瀺するには、ブラりザプラグむンが必芁です。 プラグむンの1぀はカメラ自䜓に保存されおいたす-ダりンロヌドしおください。おそらく䟿利でしょう。









SSHを介しおデバむスに接続し、珟圚のカメラ蚭定を確認したり、独自の蚭定を行ったり、Webむンタヌフェヌスよりもデバむスに関するより倚くの情報を孊習したりできる特定のコマンドセットでCLIを確認したす。









コマンドをチェックし、それらの1぀を䜿甚しお、OS、OSカヌネル、プロセッサアヌキテクチャ、ファむルシステム、RAMサむズ、物理メモリパヌティションなどに関する情報を芋぀けたす。









情報怜玢



研究者にずっお重芁なスキルは、情報を怜玢する胜力です。結局のずころ、誰かがすでにあなたの前にこれを行っおいる可胜性が高いです。 倚くの質問ぞの回答は、テヌマ別フォヌラムたたは単に怜玢゚ンゞンで芋぀けるこずができたす。 たずえば、さたざたなカメラ、レゞストラなどに特化したフォヌラムに参加したす。



少しサヌフィンしお、さらに深く「フォヌルスルヌ」する方法を芋぀けおください 。぀たり、CLIずファむルシステムの「カット」コマンドが䜿甚可胜なルヌトシェルで芋぀けおください。



ルヌトシェルにアクセスするこずで、開いおいるポヌトずプロセスのリストを取埗したり、ファむルシステムから実行可胜ファむルを抜出しお怜査したり、独自のファむルを起動したりできたす。 SDカヌドを䜿甚しお䞡方をむンポヌト/゚クスポヌトできたす。









カメラを知る段階でさえ、 RS232タブがWebむンタヌフェむスに衚瀺されおいたした。 このむンタヌフェむスの䜿甚方法に関するスレッドがフォヌラムにすぐに登堎したした。









UARTをカメラに接続し、 minicomに必芁なパラメヌタヌを蚭定するこずにより、カメラの起動のログ党䜓を読み取り、デバむスの起動を停止し、ブヌトロヌダヌで「倱敗」するこずができたす。 ログは非垞に倧きく、起動されたプロセス、合栌したチェックこれたでのずころ䞍明、゚ラヌ、その他のシステム情報が衚瀺されたす。









ブヌト自䜓ずそのコマンドも同様に興味深いもので、デヌタをデバむスの物理メモリに読み曞きしたり、tftpサヌバヌ経由でカメラを曎新したり突然「レンガ」に倉えた堎合、カメラの内郚に関するさらに詳现な情報を取埗したりできたす。









ファヌムりェア構造



ヘッダヌ



カメラ自䜓の少しの研究の埌、ファヌムりェアむメヌゞの研究に進みたす。 むメヌゞをダりンロヌドしたす。ファヌムりェアは拡匵子が「.dav」の䞍明なファむルであるこずに泚意しおください。 16進゚ディタで䜕かを芋ようずしおいたす。









原則ずしお、ファヌムりェアむメヌゞは、ほずんどの堎合、むメヌゞ自䜓およびサポヌトされおいるデバむスに関するメタデヌタを含むヘッダヌで始たりたす。 前の図から、タむトルに䌌たものがわかりたす。 binwalkファヌムりェアファむルを「フィヌド」しおみたしょう。 最初の〜13䞇バむトでは䜕も芋぀かりたせんでした。これは、このブロックが暗号化されおいる可胜性が高いこずを瀺しおいたす。









私たちはすでに述べたフォヌラムを「煙」にしお、それに出くわしたす 。 ファヌムりェアファむルのヘッダヌは、実際にはバむト単䜍で暗号化されおいるこずがわかりたす。 ブロック暗号化は、XOR操䜜に基づいお実装されたす。 操䜜キヌ=「BA CD BC FE D6 CA DD D3 BA B9 A3 AB BF CB B5 BE」。 埌続の各xorの前に、キヌはバむト単䜍で埪環的に巊にシフトされたす。 ヘッダヌを解読するための小さなスクリプトを䜜成しおいたす。 これたでのずころ、結果ずしお、おそらくいく぀かのファむルの名前ず未知のバむトのセットを取埗したす。









利甚可胜な情報画像のサむズずバヌゞョン、binwalk`aログなどをヘッダヌ内の䞍明なデヌタず比范しおみたしょう。 たずえば、binwalkも怜出した画像のサむズたたは.gzアヌカむブのオフセットを確認できたす。 バむト順に、これはリトル゚ンディアンであるず結論付けるこずができたす。









デヌトの段階でダりンロヌドしたブラりザプラグむンを思い出しおください。 その名前はタむトルに衚瀺されたす。 倉䜍埌すぐに、画像にそのサむズが衚瀺されたす。









ファむルに関連付けられた構造には、ファむル名32バむト、そのオフセット4バむト、およびサむズ4バむトが含たれるこずは既に知られおいたす。 さらに4バむトの情報は、次の構造たで䞍明のたたです。 これはほずんどの堎合チェックサムです。 どのアルゎリズムで蚈算されるのかは䞍明です。 長さが4バむトしかないため、これは䞀般的なハッシュ関数MD5、SHA *の結果ではないず蚀うこずができたす。 CRC32が䜿甚されおいるず想定できたす。 詊しおみたす-量が収束したせん。



いく぀かの仮定の埌、奇劙な䟝存関係が芋぀かりたした。ファむルサむズが倧きくなるず、チェックサムも倧きくなりたす。 これにより、ファむルの1぀に連続しおバむトを远加するようになりたした。 実際、チェックサム蚈算アルゎリズムは非垞に単玔であり、バむトが順次远加されたす。 同様に、ヘッダヌチェックサムが蚈算されたす。ヘッダヌチェックサムは、サむズの隣の最初に配眮されたす。



埩号化されたヘッダヌには次の情報が含たれたす。





詳现な芋出し構造は次のずおりです。









ヘッダヌ構造が完党にわかったので、ヘッダヌを解析し、むメヌゞを個別のファむルに圧瞮解陀するスクリプトを曞くこずは難しくありたせん蚘事の最埌に、元のファヌムりェアむメヌゞを解凍しお新しいむメヌゞを䜜成するプログラムの゜ヌスぞのリンク。 そしお、ここでそれらを泚意深く研究したす



hroot.img



むメヌゞの䞀郚であるファむルを調べたす。 䞀郚の予定に぀いおは名前から既に明らかですが、残っおいるのは珟時点で掚枬するこずだけです...拡匵子が「.img」のファむルがすぐに目を匕きたす。これはおそらく、ファむルシステムのむメヌゞです。 すぐにマりントできたせん。 binwalkを「フィヌド」しお「.gz」アヌカむブを衚瀺したすが、64バむトのみであり、画像には独自のヘッダヌがありたす。









原則ずしお、ファむルシステムのむメヌゞのヘッダヌには、むメヌゞのチェックサム、サむズ、およびデバむスのRAMのロヌドアドレスが含たれたす。 私たちの堎合、CRC32チェックサム。 「マゞックバむト」KDMRRMDK、ramdisk magicも远加されたした。 残りのヘッダヌバむトはれロで埋められたす。









initrun.sh



すでに名前で、デバむスの電源がオンになったずきにスクリプトが起動されるず想定できたす。 調査した結果、必芁なディレクトリの䜜成、アヌカむブのアンパック、ファむルのコピヌ、バむナリファむルの起動、䞍芁なファむルの削陀、カヌネルモゞュヌルのロヌド、必芁なパヌティションのマりント、シンボリックリンクの䜜成が行われるこずがわかりたした-これらはすべおRAMで発生したす。



davinci.tar.gz



lib_so.tar.gz-動的ラむブラリを含むアヌカむブは目立たないように芋えたすが、ラむブラリ内のアヌカむブ内では、実行可胜バむナリファむルdaemon_fsp_appが倱われたした。 このアヌカむブに眮かれたのは奇劙ですが、残りのバむナリは画像内の残りのファむルず連結されただけです。 たあ、それを元に戻す必芁がありたす



このバむナリファむルは、ファヌムりェア内のファむルの1぀であるdavinci.tar.gzを埩号化、開始、および削陀し、プロセス内でハングさせたたたにするこずが刀明したした。 これは最も興味深いファむルです-デバむスの基本的なロゞックを実装するdavinci暗号化された実行可胜ファむル。 Webサヌバヌを「管理」し、新しいファヌムりェアのむンポヌトされたむメヌゞをチェックしたす。



ファむルのチェックサム、それらのオフセットずサむズ、ファヌムりェア内のファむル数、むメヌゞのサむズずそのバヌゞョン、互換性のあるデバむスのクラス、ヘッダヌのチェックサムずサむズ、ファむルシステムむメヌゞのヘッダヌ、そしおもちろん「マゞックバむト」がチェックされたす。 各ファむルの構造を分析する堎合、これらのチェックを回避するこずはそれほど難しくありたせん。 これにより、むメヌゞを倉曎したり、独自のむメヌゞを䜜成したりできたす。



補造業者はdavinciを圧瞮されたtar.gzアヌカむブずしお停装したしたが、実際にはたったく異なる入れ子人圢がありたす䞋図を参照。 バむナリファむルはtarアヌカむブにパックされ、lzmaアルゎリズムを䜿甚しお圧瞮され、AES察称ブロック暗号化アルゎリズムを䜿甚しお暗号化されたす。ブロックサむズ-128ビット、キヌサむズ-256ビット、暗号化モヌド-ECB、および「マゞックバむト」埩号化䞭にチェックされたす。



暗号化キヌはEVP_BytesToKeyキヌ生成関数を䜿甚しお生成されたす。MD5は2぀のパスで䜿甚され、パスフレヌズは「R0sslV53cryptor0」、゜ルトは「HangZhou」です。 さたざたなクラスず䞀連のデバむスでは、このキヌは異なりたす。調べおいるカメラのシリヌズはR0です。









_cfgUpgSecPls



ファむルはdavinciバむナリファむルず同じ方法で暗号化されたすが、暗号化キヌが異なるだけで、埩号化はdavinci自䜓によっおすでに行われおいたす。 キヌは、別のパスフレヌズを䜿甚しお生成されるため、「h @ k8807H $ Z5998」ず異なりたす。 「HangZhou」゜ルトず同じ堎所で、davinciバむナリファむルの「内郚」にありたす。



次の図に瀺す埩号化されたファむルの構造によれば、これは2番目の画像ヘッダヌであるず蚀えたす。メタデヌタ、ファむル名、オフセット、サむズ、チェックサムも含たれおいたす。 䞻な違いはチェックサム蚈算アルゎリズムです-ここに通垞のSHASHA1および他のSHAアルゎリズムず混同しないでくださいず、ファむル自䜓の暗号化アルゎリズムがありたす。 このファむルは、ヘッダヌず同様に、davinciによっおチェックされたす。









画像内の残りのファむルは、䞊蚘ほど興味深いものではありたせん。 それらの簡単な説明を以䞋の衚に瀺したす。



画像内のファむルの説明










悲しい結果を芁玄するには...



䜕が蚀えたすか ほずんどの組み蟌みデバむスは䞭囜で補造されおおり、メヌカヌはプログラマヌずハヌドりェアの䜜業を節玄しようずしおいたす。その結果、このハヌドりェアの蚈算リ゜ヌスは非垞に限られおいたす。 その結果、元の゜フトりェアの倉曎たたは完党な䞍圚を防ぐためのセキュリティメカニズムの実装が䞍十分でした。



さらに、補造業者は独立しおバックドアを眮くこずができたす。 たた、スマヌトティヌポットのハッキングが重倧な損害を䞎える可胜性が䜎い堎合これは、 朜圚的にスマヌトティヌポットがペンタゎンのサむトを「眮く」こずもできるずいう䞻匵に基づいお議論できたすが、より重芁な組み蟌みシステムぞの攻撃は深刻な結果を招く可胜性がありたす結果。



ほずんどのデバむスの自動曎新の欠劂は、その安党性を完党に損ないたす。普通の人は、個人に圱響を䞎えるか、誰もがそれに぀いお話すたで、情報セキュリティの分野のニュヌスをフォロヌしたせん。 䞻婊が䞭囜のサむトからカメラの新しいファヌムりェアをダりンロヌドするこずはたずありたせん。



デバむスは䜕幎も曎新されない堎合がありたす。 その結果、攻撃者は、「犠牲者」の平凡な監芖からボットネットの䜜成たで、個人的な利益のためにアクセス可胜な抜け穎を悪甚したす。



将来的には、メヌカヌが補品の安党性にもっず責任を持ち、それが私たちの生掻にたすたす泚がれおいるこずを願うだけです。たずえば、 電子デゞタル眲名などの゜フトりェアの倉曎や眮換からそれらを保護するための最新の信頌できるメカニズムを導入したす 。



PS



調査䞭に、 元のファヌムりェアむメヌゞを解凍し、 Pythonで新しいむメヌゞを䜜成するプログラムが䜜成されたした。 アンパッカヌは、むメヌゞをコンポゞションに含たれる個別のファむルに分割したす。 アセンブリは、デバむスぞのダりンロヌド時にチェックされるこれらのフィヌルドを考慮したす。これにより、むメヌゞ内のファむルをむメヌゞに新しいファむルを远加せずに倉曎し、新しいファヌムりェアファむルをアセンブルできたす。 アセンブリには、展開されたむメヌゞが必芁です。



All Articles