Saya Greg Heffner, dan ini adalah percakapan tentang bagaimana seorang hacker Hollywood menggunakan kamera pengintai. Beberapa dari Anda mungkin atau mungkin tidak tahu bahwa ketika pekerjaan saya tentang topik ini pertama kali diterbitkan, sebuah artikel muncul di portal Internet Reuters.

Bagi saya, sebagai pembicara, itu sangat bagus. Tetapi masalahnya adalah bahwa artikel itu memutuskan untuk menekankan bahwa saya bekerja untuk lembaga tertentu dengan nama tiga huruf, yang tentang itu hanya ada sedikit catatan di media baru-baru ini. Dan mereka melangkah lebih jauh sehingga mereka mengklaim bahwa saya mempresentasikan di BlackHat pekerjaan saya dilakukan untuk agen tiga huruf ini. Publikasi ini menghasilkan beberapa panggilan telepon yang sangat menarik dari mantan majikan saya.
Untungnya, ada orang yang menjawab panggilan telepon saya, jadi pada dasarnya mereka meneriaki mereka, bukan pada saya, tetapi saya masih harus meyakinkan orang dan, pada akhirnya, saya bisa meyakinkan mantan majikan bahwa kadang-kadang orang di Internet juga salah.
Oleh karena itu, untuk menjadi sangat jelas, saya akan menjelaskan bahwa pembicaraan hari ini bukan tentang pekerjaan apa pun yang pernah saya lakukan untuk mantan majikan, tetapi tentang apa yang saya lakukan untuk majikan saya saat ini. Saya bekerja sebagai penganalisa kerentanan penuh waktu untuk Solusi Jaringan Taktis, saya juga mengajar kursus operasi perangkat tertanam dan terkadang mencoba-coba peretasan perangkat nirkabel.
Hari ini saya akan berbicara tentang keamanan kamera pengintai, atau lebih tepatnya, kurangnya keamanan ini. Pada awal masa lalu, 2011, saya mulai mempelajari masalah keamanan firmware kamera yang terhubung ke jaringan pengawasan, dan menemukan banyak hal menarik.
Saya akan mengesampingkan ancaman "nol hari", saya akan membicarakannya ketika saya sampai di sana, pertama saya akan menunjukkan kepada Anda bagaimana, dalam gaya seorang peretas Hollywood sejati, saya dapat memanfaatkan kerentanan yang saya temukan.
Jadi, ketika saya mulai mempelajari kamera pengintai, dan saya harus mengatakan bahwa saya mempelajari banyak perangkat bawaan, tetapi bukan kamera, saya ingin memulai dengan sesuatu yang sederhana, yang tentunya akan menjamin saya kemenangan. Saya memilih D-Link karena mereka tidak pernah mengecewakan.

Saya memilih DCS-7410, dengan harga sekitar $ 900, ini adalah salah satu kamera cuaca luar ruang yang paling mahal D-Link, bekerja dalam mode siang dan malam. Seperti kamera lain, yang akan kita bicarakan hari ini, ia memiliki antarmuka administratif dan mendukung akses ke aliran video melalui Internet ke server web, dan juga diberdayakan melalui jaringan (PoE). Ini membuatnya menjadi target yang sangat menarik bagi penyerang.
Secara khusus, kamera ini menggunakan Lighttpd II, server web open source yang tidak sering digunakan dengan perangkat tertanam. Para pengembang menciptakan konfigurasi yang waras dan aturan yang membatasi akses ke apa yang dapat dicapai melalui server web.
Pada slide berikutnya Anda melihat bahwa jika Anda ingin mendapatkan sesuatu di direktori administratif cgi / admin, Anda harus memiliki hak administrator. Jika Anda ingin mendapatkan sesuatu di direktori video, Anda bisa menjadi pengguna apa saja, tetapi Anda harus diotorisasi. Mereka memiliki entri dan aturan masuk untuk setiap direktori di antarmuka web, kecuali untuk direktori cgi-bin.


Sebagian besar skrip cgi kamera berada di direktori cgi protected. Direktori cgi-bin yang tidak dilindungi hanya berisi satu file, rtpd.cgi, yang merupakan skrip bash shell yang digunakan untuk memulai dan menghentikan protokol transport kamera RTP secara real time.

Namun, skrip rtpd.cgi memiliki kelemahan serius. Ini mem-parsing parameter kueri dengan mengganti semua ampersand & di string $ QUERY_STRING dengan spasi, dan kemudian mendapatkan hasilnya menggunakan fungsi eval:

Jadi jika Anda hanya ingin menghentikan kamera, cukup kirim permintaan: rtpd.cgi? Action = stop. Bila digunakan sebagaimana dimaksud, permintaan HTTP berikut akan mengubah nama? Tindakan, yang nilainya akan diatur ke posisi "mulai":
$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?action=start
Tetapi karena data dalam $ query_string dieksekusi secara membabi buta oleh metode eval, penyerang dapat mengeksekusi perintah apa pun hanya dengan menetapkannya sebagai bagian dari parameter http GET:
$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?reboot
Dengan demikian, hacker akan dapat me-reboot kamera. Sebenarnya sulit bagi saya untuk mengkategorikan kerentanan ini, karena ini bahkan bukan injeksi perintah, kami tidak memasukkan apa pun, tetapi cukup biarkan program dijalankan dengan parameter lain. Saya menyebut kerentanan ini "Ron Burgundy," karena ini benar-benar akan melakukan apa pun yang Anda masukkan dalam string kueri.

Penyerang dapat menggunakan kerentanan ini untuk mendapatkan kata sandi administrator kamera normal dari NVRAM. Perintah berikut dijalankan oleh skrip startup kamera setelah mem-boot ulang dan mengirim browser Anda respons seperti ini:

Sekarang Anda tidak hanya memiliki akses root, karena setelah menerima kata sandi, Anda juga menjadi administrator, sehingga Anda dapat melakukan apa saja dengan kamera dan video.
Ternyata, D-link, seperti banyak produsen, sangat suka menggunakan kembali kode dengan menginstal firmware yang sama, dan ini adalah kasus di banyak produk mereka. Tetapi ini tidak hanya mempengaruhi produk D-link, karena praktik yang sama digunakan oleh Trendnet dan beberapa produsen "non-merek" lainnya dari perangkat tersebut. Penggunaan kembali kode sekarang tersebar luas, baik di antara produsen dengan merek yang sama dan antara merek yang berbeda. Kerentanan ini terkandung dalam firmware dari banyak model kamera yang diindeks pada sumber daya koleksi kerentanan komputer Shodan Dork.

Kerentanan ini mungkin tampak akrab bagi sebagian orang, dan ini mungkin karena setelah pidato saya tentang hal ini, Core Security menetapkan indeks kerentanan CVE-2013-1599 untuk produk-produk ini, menunjukkan bahwa itu hanya ada di perangkat D-link, tanpa menyebutkan apa pun. dari pabrikan lain yang menggunakan firmware yang sama di perangkat mereka. Bahkan jika salah satu produsen memperbaiki kesalahan ini dalam versi firmware baru, sebagian besar perangkat akan tetap rentan selama 3 tahun, karena biasanya tidak ada yang memperbarui firmware tepat waktu, dan beberapa tidak tahu apa itu. Seperti yang saya katakan, produk D-link adalah salah satu target serangan yang paling terjangkau, jadi mari kita lihat kamera dari produsen yang lebih terkemuka, seperti Cisco dengan model PVC 2300. Ini adalah kamera IP kelas bisnis kelas menengah senilai $ 500.

Saat ini juga memiliki server web, dan menyediakan otentikasi menggunakan file kata sandi dalam format HTTP.

Sebagian besar orang mengenal sistem ini - Anda memasang file kata sandi HTTP, atau lebih tepatnya, tautan ke file kata sandi terpusat di direktori mana pun yang ingin Anda lindungi dengan kata sandi. Oleh karena itu, jika Anda melihat firmware, antarmuka web dari setiap direktori berisi file kata sandi .htpasswd, kecuali satu direktori, oamp, yang terletak di / usr / local / www / oamp.

Alih-alih file kata sandi, itu berisi banyak file XML yang berfungsi sebagai tautan ke file biner oamp.cgi. Mari kita lihat apa yang dilakukan cgi ini. Ternyata itu mengimplementasikan semacam mini-API, yang benar-benar terpisah dari semua yang berjalan di antarmuka web.

Ia mengharapkan Anda dimintai tindakan tertentu, termasuk mengunduh file konfigurasi, memperbarui file konfigurasi, mengunduh file pembaruan firmware, memperbarui firmware, dan banyak lagi. Para pengembang tidak sebodoh itu, jadi sebelum menjalankan permintaan Anda, oamp.cgi memeriksa untuk melihat apakah Anda memiliki ID Sesi yang benar dan valid.

Jika Anda tidak memiliki pengidentifikasi sesi yang valid, maka satu-satunya hal yang dapat dilakukan adalah memasukkan login.

Ini sendiri menarik karena mereka menerapkan pemeriksaan otentikasi yang tidak digunakan di tempat lain di antarmuka. Saya mulai mengerti bagaimana mereka mengontrol input, yaitu login. Mereka mengandalkan nama pengguna dan kata sandi Anda, dan tidak ada lagi kejutan.


Dan kemudian mereka melakukan dua panggilan ke fungsi PRO_GetStr, dan saya tidak tahu apa pengaruhnya. Tapi saya tahu bahwa panggilan pertama ke fungsi ini memberinya dua baris - OAMP dan nama pengguna L1_usr, dan panggilan kedua - dua baris lagi, OAMP dan kata sandi L1_pwd.


Kemudian, nilai pertama dikembalikan untuk pengguna L1 dan dibandingkan dengan pengguna nama pengguna, L1_usr ditentukan selama otentikasi, dan nilai kedua dari string juga dikembalikan - kata sandi sandi, L1_usr, yang dibandingkan dengan kata sandi yang dimasukkan oleh pengguna saat login.


Agaknya, nama pengguna dan kata sandi L1 ini, apa pun nilainya, memberikan info masuk yang benar untuk antarmuka OAMP ini. Satu-satunya tempat lain yang bisa saya temukan di firmware, dan yang benar-benar terkait dengan nama pengguna dan kata sandi pengguna, ada di file konfigurasi.

Dan nilai-nilai ini adalah kode-keras dalam perangkat yang menggunakan file konfigurasi bagian OAMP selama operasi. Anda melihat bahwa nilai login pengguna L1 diatur di baris L1_admin, dan nilai kata sandi pengguna berada di baris L1_51.
Dan ini adalah masalah nyata, karena semua antarmuka OAMP ini dan akun hard-coded ini benar-benar tidak berdokumen, jadi tidak ada yang tahu bahwa mereka ada di sana, kecuali untuk orang-orang yang repot-repot melihat firmware. Tentu saja, administrator tidak akan pernah melakukan ini.
Tetapi bahkan jika dia mengetahuinya, tidak ada cara baginya untuk mengubah nilai-nilai ini, karena tidak ada antarmuka administrator di kamera ini. Masalah dengan kata sandi rahasia hard-coded adalah, berkat penggunaan backdoors, mereka tetap rahasia untuk waktu yang singkat.
Dengan demikian, kita dapat menggunakan akun backdoor ini untuk masuk dan mendapatkan ID sesi. Sekarang kami dapat mengirim ID sesi ini bersama dengan permintaan kami, kami juga dapat meminta tindakan lain yang didukung oleh oamp.cgi, termasuk mengunduh file konfigurasi pengaturan.


Masalahnya adalah jika Anda mencoba mendekripsi menggunakan Base64, ini tidak berfungsi, Anda hanya mendapatkan banyak sampah. Ini adalah kasus ketika Base64 bukan Base64.

Alasan untuk ini menjadi jelas ketika Anda melihat kode final Base64 dalam file biner dari PVC-2300 firmware itu sendiri - dasar untuk pengkodean dibuat di sini, tetapi menggunakan string kunci Base64 non-standar, yang ditemukan ketika menganalisis enkripsi dan dekripsi kode 64. Untungnya, dengan Dengan menggunakan Python, sangat mudah untuk mengubah string kunci dalam modul Python Base64 menjadi string kunci khusus, seperti yang ditunjukkan dalam slide.

Jadi, dengan beberapa string Python, kita dapat dengan mudah mendekripsi file konfigurasi dan mengubahnya menjadi teks biasa, yang memberi kita opsi masuk di bawah login administrator.

Setelah menguasai kamera, kita bisa melihat ruang server. Masalahnya adalah bahwa melihat ruang server benar-benar menangkap 10 detik pertama, tetapi kemudian menjadi tugas yang agak membosankan.

Karena itu, saya kembali ke kode dan mulai mempelajari kemungkinan mengunduh firmware. Ini sebenarnya sangat menarik, karena alih-alih mengunduh file firmware ke perangkat dari situs resmi, Anda dapat menentukan URL Anda sendiri, perangkat akan pergi ke alamat ini dan mengunduh apa yang dianggapnya sebagai firmware.

Fungsi system2 hanya menghasilkan perintah dari string format dan url sebelum memanggil fungsi sistem libc, yang memungkinkan penyerang untuk memasukkan perintah shell sewenang-wenang melalui parameter url. Perintah penyerang akan dieksekusi dengan hak pengguna super, dan karena pemeriksaan dilakukan oleh nilai url, sangat mudah untuk mem-bypassnya dengan bantuan skrip ini:
$ wget --header=”sessionID: 57592414” http://192.168.1.101/oamp/System.xml?action=loadFirmware&url=https://127.0.0.1:6 5534/;reboot;
Setelah itu, komputer yang terletak di URL ini reboot dan Anda dapat menjalankan perintah apa pun yang Anda inginkan.

Kerentanan ini diuji pada semua versi firmware dari dua model kamera pengintai Cisco - PVC-2300 dan WVC-2300, kamera serupa dengan dua antena. Pada saat penulisan ini, Shodan telah menunjukkan lebih dari 500 kamera IP publik dan berpotensi rentan yang dimiliki oleh hotel, ruang server, dan perusahaan teknik yang mengembangkan peralatan untuk Stasiun Luar Angkasa Internasional.
Jadi, D-link dan Cisco tidak melindungi kamera pengawas dengan benar, meskipun Anda tahu bahwa kamera ini bukan produk utama mereka. Karena itu, mari kita lihat merek yang berspesialisasi secara khusus dalam desain dan pembuatan kamera pengintai. Saya memilih IQ Invision, yang menghasilkan kamera definisi tinggi yang mahal, seperti IQ 832n, seharga lebih dari $ 1000 masing-masing, yang tidak murah sama sekali.

Alasan utama ketertarikan saya adalah mereka yang membuat kamera dipasang di kompleks bisnis tempat saya bekerja, jadi ada alasan pribadi untuk ini. Jadi, apa yang Anda dapatkan menggunakan kamera pengintai profesional untuk seribu dolar?
Secara default, kamera ini menyediakan gambar video yang tidak diautentikasi, dan tidak ada studi instalasi kamera yang luas yang mampu mengubah pengaturan default ini. Sementara antarmuka administratif dilindungi kata sandi, antarmuka pengguna menyediakan akses ke sumber daya kamera apa pun tanpa otentikasi, yang menciptakan bidang serangan yang luas.

Pengaturan otentikasi administrator dapat diubah oleh administrator, tetapi coba tebak berapa banyak administrator yang menghubungkan kamera mereka ke Internet tanpa mengubah pengaturan default - hampir semuanya. Namun, sebagian besar administrator di kompleks kami cukup pintar untuk mengubah pengaturan ini, jadi saya mulai melihat apa lagi yang bisa saya lakukan tanpa otentikasi. Ternyata saya bisa dengan bebas mengakses halaman tersebut.

Ini berisi sejumlah pengaturan kamera, seperti pengaturan fokus, yang tidak semenarik nama pengguna dan kata sandi. Yang lebih menarik adalah kode di balik halaman oidtable.cgi ini. Jika Anda membongkar biner ini, Anda dapat melihat bahwa halaman hanya menerima satu parameter, grep, yang digunakan untuk memfilter hasil yang dikembalikan ke halaman oidtable.cgi.

Setelah memeriksa bahwa nilai parameter yang disediakan kurang dari 32 karakter, oidtable.cgi menempatkan nilai ini di baris perintah dan meneruskannya ke popen:


Apa yang saya lihat membuat saya menggambarkan "facepalm" dan mendorong saya untuk menyuntikkan beberapa tim.

Anda lihat di sini, sama seperti dalam kasus D-Link, saya dapat menjalankan perintah PS dan mendapatkan output yang dikirim kembali ke browser saya. Jadi, tanpa otentikasi, saya dapat dengan mudah memasukkan perintah shell arbitrer yang akan dieksekusi sebagai root. Daftar proses menunjukkan bahwa Netcat sudah terpasang di kamera ini dengan kemampuan untuk memasukkan tanda hubung-e, jadi saya yakin bahwa sebagian besar orang di sini dapat membuat perintah yang lebih menarik untuk dieksekusi daripada daftar proses. Namun, tujuan utama saya adalah masuk ke panel admin, dan saya menemukan cara untuk melakukannya.
16:30 mnt
Konferensi BLACK HAT USA. Bagaimana seorang hacker Hollywood menggunakan kamera pengintai. Bagian 2Terima kasih telah tinggal bersama kami. Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikannya kepada teman-teman Anda,
diskon 30% untuk pengguna Habr pada analog unik dari server entry-level yang kami buat untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps dari $ 20 atau bagaimana membagi server? (opsi tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps hingga Desember secara gratis ketika membayar untuk jangka waktu enam bulan, Anda dapat memesan di
sini .
Dell R730xd 2 kali lebih murah? Hanya kami yang memiliki
2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV dari $ 249 di Belanda dan Amerika Serikat! Baca tentang
Cara Membangun Infrastruktur Bldg. kelas menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?