Konferensi DEFCON 27. Mobil Anda adalah mobil saya. Bagian 2

Konferensi DEFCON 27. Mobil Anda adalah mobil saya. Bagian 1

Di akhir video Anda mendengar bunyi klik - itu berfungsi membuka kunci roda kemudi mekanis, yang tidak bisa kita selesaikan secara elektronik. Perlu untuk menggunakan sesuatu yang mekanis, untuk memecahkan kunci silinder secara manual atau untuk melakukan sesuatu yang serupa, yang saya tidak akan lakukan dengan mobilnya. Semua firmware yang ditunjukkan dalam video ini akan tersedia di GitHub setelah presentasi saya, jadi Anda cukup pergi ke alamat yang ditunjukkan pada slide dan unduh file OpenRemoteStart.

Mari kita bicara tentang apa yang sebenarnya terjadi ketika kita menambahkan Internet ke sistem ini, karena itu seharusnya bermanfaat, bukan? Seperti yang saya katakan, saya membeli modul kontrol alarm jarak jauh yang disebut MyCar. Ini tersedia dalam berbagai versi, saya punya model Linkr LT-1.



MyCar hanyalah sebuah merek, dan modul-modul tersebut dijual dengan nama Linkr LT-1, MyCar KIA, Visions MyCar, Carlink (CL6), dll. Ternyata, untuk beberapa waktu dealer KIA di Kanada memasang sistem ini pada mobil atau, paling tidak, aplikasi bernama MyCar KIA. Menariknya, aplikasi ini tidak lagi tersedia untuk diunduh di AppStore. Saya juga ingin mencatat bahwa saya memilih produk Fortin dan MyCar, tetapi menurut ulasan pengguna pada forum topik alarm mobil freelance, sistem lain berperilaku tidak lebih baik dan memiliki masalah yang sama.

Saya punya pertanyaan penting: mengapa produk dengan masalah keamanan dijual di pasar sekunder untuk alarm mobil, dan apakah itu mengganggu siapa pun? Karena itu, jika ada di antara Anda yang tertarik dengan sistem starter jarak jauh, perhatikan beberapa keadaan penting. Pertama, seperti yang saya sebutkan sebelumnya, jika sistem DS tidak dipasang dengan benar pada mobil dengan transmisi mekanis, sangat mungkin bahwa setelah mesin jarak jauh mulai, mobil hanya akan pergi tanpa pengemudi jika beberapa gigi ada di gearbox. Ini sangat berbahaya. Bahaya kedua adalah bahwa jika seseorang memarkir mobil di garasi yang terhubung ke rumah dan mesinnya secara tidak sengaja dinyalakan dari jarak jauh, Anda bisa mati lemas karena akumulasi karbon monoksida. Jadi jika Anda memiliki sistem DS dan garasi terpasang,Anda pasti harus memiliki detektor karbon monoksida.

Jika Anda menggunakan sistem DS, jangan pernah mencoba menghidupkan mesin mesin tanpa tahu persis di mana letaknya, karena konsekuensinya bisa menjadi bencana.

MyCar, kotak hitam kecil dengan dua kabel yang keluar, memiliki 8 port, dua di antaranya untuk antarmuka debugger. Menghubungkan ke antarmuka ini menunjukkan bahwa perangkat ini menjalankan Linux, yang pembuatnya diam. Sangat mudah untuk masuk ke shell firmware menggunakan kata sandi oelinux 123, tetapi Anda dapat menggunakan Mesin AE tanpa masuk, yang memungkinkan Anda untuk memasukkan perintah AT dari baris perintah, termasuk perintah untuk mengubah alamat IP perangkat yang berkomunikasi dengan modul ini.



Jika kita melihat baris di bawah ini, kita dapat melihat alamat IP server tempat modul MyCar menerima pembaruan firmware. Perangkat ini dilengkapi dengan L-port, yang memungkinkan Anda untuk "mendengarkan" perintah yang diterima oleh modul. Dengan menggunakan Mesin AE dan mengubah IP perangkat yang dipasangkan, saya dapat menentukan bahwa perangkat ini berkomunikasi dengan DS menggunakan protokol UDP yang tidak terenkripsi.

Saya tidak secara khusus mempelajari hal ini, tetapi saya pikir ini adalah fakta yang cukup signifikan dan menarik. Jika Anda tertarik pada informasi tambahan tentang perangkat ini, lihat slide ini - ini menunjukkan tegangan 3.3V, kecepatan transfer data 115200 baud, alamat server untuk memperbarui firmware, kata sandi root dan tautan ke manual pengguna.



Perangkat mungkin juga "toleran" terhadap tegangan pasokan yang lebih tinggi.

Seperti yang saya katakan, ini bisa sangat dingin di sini. Sekitar sebulan setelah saya mempresentasikan sistem ini kepada pacar saya, saya memutuskan untuk mengeluarkan unit dari mobil dan bekerja dengan baik. Faktanya adalah bahwa sepanjang bulan ini saya berpikir tentang kerentanan perangkat ini. Minggu berikutnya mereka berjanji es ke -30F Β°, jadi saya harus buru-buru. Saya terhubung ke shell dan membuatnya bekerja, tetapi karena koneksi seluler di laboratorium rumah saya tidak begitu baik, saya memutuskan untuk bekerja dengan unit di komputer lain. Perangkat FTDI yang saya gunakan memiliki kabel pendek, jadi saya menemukan yang lain, lebih lama, menghubungkannya ke unit DS, menghubungkannya ke komputer, dan segera setelah saya menyalakan daya, modul saya mulai merokok!

Dari sini kita bisa belajar pelajaran: jika Anda terlibat dalam peretasan perangkat keras, siapkan blok cadangan! Pacar saya merumuskan moral cerita ini: jika belahan jiwa Anda adalah seorang hacker, jangan biarkan dia bermain dengan hadiah Natal Anda! Dan sekarang mari kita lihat perangkat lunaknya, saya pikir tidak ada yang merokok di sini.



Saya meluncurkan server proxy pria-di-tengah, mematikan SSL memeriksa pada ponsel saya dan mulai menonton lalu lintas apa aplikasi dikirim ke bagian server. Saat mendaftar, saya perhatikan bahwa sistem mengambil alamat email saya dan mengirimkannya ke layanan web untuk memastikan bahwa alamat ini dikaitkan dengan akun yang ada. Menariknya, sistem menggunakan otentikasi dasar dalam kasus ini, karena saya belum membuat akun. Saya tidak tahu apa yang harus dilakukan dengan informasi ini, jadi saya hanya menuliskannya di buku catatan dan melanjutkan. Saya membuat akun dan masuk, dan hal pertama yang dilakukan aplikasi saat masuk adalah memanggil layanan web untuk memeriksa pengguna saat ini. Jadi saya hanya memanggil server web ini menggunakan kredensial yang saya lihat sebelumnya, dan yang digunakan untuk memverifikasi ituApakah alamat email saya ada dan Admin Mycar telah menerima akses sebagai respons.



Saya ragu bahwa ini adalah akun administrator sebenarnya dari sistem, karena, meskipun suaranya keras, ia memiliki hak istimewa yang rendah. Pada akhirnya, kita semua mengenal orang-orang seperti itu.

Oleh karena itu, saya membuat permintaan lain - tim EngineStart, untuk memulai mobil dari akun ini, klik "Kirim", saya mendapatkan status perintah - "200 OK", dan setelah sekitar tiga detik mobil saya mulai bergerak.



Ternyata, akun Admin Mycar memang merupakan akun administrator, yang dikodekan ke dalam aplikasi seluler. Tapi itu belum semuanya. Di salah satu slide sebelumnya, Anda melihat sesuatu seperti kunci API. Sekali lagi, dari memantau lalu lintas server proxy palsu saya, saya mengetahui bahwa kunci API ini dapat digunakan sebagai ganti nama pengguna dan kata sandi. Jika Anda menggunakan "API" dan salah satu kunci ini sebagai nama pengguna, Anda dapat mengotentikasi pengguna.



Jadi saya menyalin isi baris "APIKey", menempelkannya ke baris Kata Sandi aplikasi POST dan mengklik tombol "Kirim".



Namun, ini tidak berhasil, dan selama 5 menit saya tidak mengerti mengapa. Akhirnya, saya sadar bahwa saya lupa untuk memotong tanda kutip dan koma di kunci API yang disalin, yang saya diberitahu tentang: "Anda membuat kesalahan dalam sintaks SQL." Menjadi jelas bagi saya bahwa Anda cukup menggunakan injeksi SQL dasar untuk mem-bypass seluruh proses login dan menjadi administrator atau pengguna yang Anda inginkan. Saya tidak berpikir ada orang yang mencoba mencuri mobil menggunakan injeksi SQL, jadi mari kita coba melakukannya.





Secara umum, saya masuk dengan akun saya, mengklik "Kirim" dan menerima status "200 OK" sebagai tanggapan. Kali ini saya sadar untuk merekam video. Agak gelap karena saya menembak larut malam dari jendela kantor saya. Jadi, saya memasukkan perintah, dan Anda melihat melalui jendela yang di bagian bawah di halaman lampu mobil menyala. Pada awalnya, cahayanya lemah, tetapi kemudian lampu depan mulai bersinar dengan kekuatan penuh - ini menyalakan mesin. Jadi, saya mulai mobil menggunakan injeksi SQL (penonton tepuk tangan).

Tapi itu belum semuanya. Injeksi SQL dapat digunakan tidak hanya untuk otorisasi, tetapi juga untuk mengganti parameter lain, seperti URL, parameter tubuh string kueri, dll. Bahkan, sistem ini menggunakan injeksi SQL di mana-mana. Melihat pesan kesalahan, Anda dapat melihat bahwa apa yang kami masukkan sebagai kata sandi dibandingkan langsung dengan kolom kata sandi dalam database.



Ini berarti mereka menggunakan kata sandi teks sederhana dalam injeksi SQL. Seperti kata pepatah, "ini sama sekali tidak baik, tetapi bahkan sangat buruk!" Tapi cukup tentang SQL, mari kita lihat apa lagi yang bisa dilakukan untuk memulai mobil dari jarak jauh. Anda cukup mengirim perintah "EngineStart" dan sebagai imbalannya Anda mendapatkan pengenal integer, yang merupakan pengidentifikasi dari perintah ini, dalam hal ini ID = 3. Mengetahui pengenal, Anda dapat "mengeluarkan" layanan yang melaporkan status perintah ini.



Jadi, dengan menambah atau mengurangi nilai ID, saya β€œmenarik” status tim mana pun yang pernah dikirim ke sistem ini.



Namun, ini tidak terlalu menarik, dan saya bertanya-tanya apakah ada indikasi langsung dari objek yang dapat saya gunakan untuk menyalakan mobil saya. Oleh karena itu, saya meluncurkan perintah EngineStart atas nama pengguna yang sah dari akun saya, dan kemudian mencoba menyebutnya melalui akun pengguna lain, yang seharusnya tidak memiliki akses ke sistem. Sebagai tanggapan, saya menerima pesan kesalahan: "Akun ini di luar konteks hierarki." Jadi, mungkin, metode peretasan ini tidak akan berfungsi. Namun, jika Anda melihat API ini, Anda akan melihat bahwa itu menggandakan informasi - alamat email pengguna sebanding dengan ID akunnya.



Jika Anda mengembangkan API atau meretas API, duplikasi informasi yang kami lihat di URL ini dapat menjadi sumber kesalahan. Dalam hal ini, bug API dapat memanifestasikan diri dalam empat cara berbeda.



Jika Anda melihat kasus 2 dan 3, dilingkari merah, Anda dapat melihat tautan langsung ke objek. Dalam kedua kasus, sistem tidak memeriksa apakah Anda berwenang untuk menjalankan perintah ini. Saya mencoba kasus 2 dan tidak berhasil, tetapi bagaimana dengan kasus 3? Di sini kita hanya perlu mengganti pengenal akun USER_EMAIL di URL, karena itu langsung ditautkan ke pengenal akun ACCOUNT_ID. Sebelumnya, kami menggunakan pengidentifikasi akun korban, dan sekarang kami menggunakan akun penyerang. Oleh karena itu, saya menggunakan pengidentifikasi akun peretas dan pengidentifikasi perangkat korban, mengirim perintah dan, seperti yang diharapkan, menerima status perintah "200 OK" dan mendapatkan kendali atas aplikasi MyCar.
Jadi, dengan menggunakan tiga vektor serangan yang berbeda, kami dapat melakukan segala sesuatu yang dapat dilakukan oleh pengguna aplikasi yang sah. Ini berarti Anda dapat menemukan mobil apa pun di kota, mengatur merek dan modelnya dalam aplikasi, dan kemudian membuka kunci mobil dari jarak jauh dan memulainya. Kita dapat mematikan atau menghidupkan alarm, membuat perubahan pada menu layanan mobil dan memeriksa status tim mana pun. Dan semua ini dapat dilakukan dengan tiga cara berbeda.



Jelas, pengembang MyCar mencoba memperbaiki bug sistem. Jadi, dalam kasus kata sandi hard-coded, mereka hanya meletakkan server proxy terbalik di depan aplikasi untuk menyembunyikan kredensial yang digunakan untuk otorisasi. Masalahnya adalah bahwa proksi terbalik bukanlah sihir dan tidak dapat memperbaiki semua masalah. Mereka menyimpan injeksi SQL di layanan pihak ketiga, jadi bahkan tanpa kata sandi, saya masih bisa menggunakannya melalui prosedur verifikasi pengguna.



Saya memutuskan untuk melihat lebih dekat pada struktur URL. Anda mungkin telah memperhatikan bahwa semua alamat yang digunakan oleh sistem mengandung m2m. Setelah memutuskan bahwa ini adalah beberapa jenis interaksi internal untuk mekanisme otorisasi dalam aplikasi MyCar, saya memasukkan surat-surat ini di Google dan menemukan situs web M2M Suite. Satu-satunya hal yang harus Anda lakukan setelah melihat formulir ini adalah memasukkan beberapa kutipan di sana dan lihat apa yang terjadi. Dan yang terjadi adalah Anda mendapatkan injeksi SQL yang tepat (tepuk tangan hadirin).





Dan ini terjadi beberapa bulan setelah pengembang melaporkan masalah dengan injeksi SQL. Jika aplikasi memiliki masalah seperti itu, mereka harus diperbaiki sesegera mungkin, tetapi seperti yang Anda lihat, pengembang tidak melakukan apa pun. Mengabaikan pengguna seperti itu, saya merasa ofensif.

Modul MyCar memiliki unit GPS, sehingga dapat melacak lokasi mobil Anda dan menampilkannya di aplikasi. Tapi, ternyata, mereka tidak hanya menyimpan lokasi mobil saat ini. Mereka menyimpan banyak sekali informasi, jauh lebih banyak dari yang dibutuhkan untuk melacak lokasi mesin saat ini. Dalam kasus saya, selama 13 hari menggunakan aplikasi, mereka mengumpulkan sedikit kurang dari dua ribu titik geolokasi tempat yang dikunjungi mobil saya. Kebijakan privasi pengembang MyCar tidak mengatakan sepatah kata pun tentang kumpulan informasi ini.

Namun, semakin parah. Anda mungkin berpendapat bahwa ini hanyalah efek samping dari implementasi layanan geolokasi. Tetapi kenyataannya adalah bahwa alih-alih hanya membuat daftar tempat mobil Anda berada, mereka menggunakan API lain yang menganalisis data ini dan menentukan tempat-tempat di mana mobil Anda paling sering. Sekali lagi, sejauh yang saya tahu, dalam kebijakan privasi tidak ada petunjuk tentang fungsi tersebut. Mungkin ini tidak begitu mengejutkan, karena setelah banyak pencarian, saya menemukan perusahaan induk MyCar bernama Procon Analytics, pergi ke situs mereka dan mengunjungi bagian FAQ. Di sini saya menemukan pertanyaan: "Bagaimana Anda memastikan keamanan data?". Tanggapan perusahaan adalah: "Tidak seperti lingkungan cloud publik yang memperjuangkan prioritas penyimpanan,Procon Analytics menggunakan cloud virtualnya sendiri, yang digunakan khusus untuk pengguna aplikasi kami dan dilindungi dari pengguna lain. Ini adalah lingkungan cloud khusus dengan tingkat perlindungan tinggi, yang menyediakan ketersediaan mudah dan kecepatan pengiriman layanan. Dengan bekerja dengan Procon Analytics, Anda dapat yakin bahwa data Anda terlindungi dengan baik. " Saya bahkan tidak tahu harus berkata apa ...



Jika Anda masuk ke halaman Facebook mereka, Anda bisa mencari lebih menarik. Di sini mereka langsung menulis: "Melindungi informasi tentang kendaraan Anda sangat penting!". Yah, saya hanya bisa setuju dengan pernyataan ini.

Jadi, kembali ke pertanyaan saya mulai dengan: "Bagaimana ini terjadi dan bagaimana ini bisa dihindari"? Dan yang lebih penting, bagaimana kita, sebagai komunitas, mencegah hal ini?

Ini adalah akhir dari laporan saya, tetapi saya masih bisa menjawab beberapa pertanyaan (tepuk tangan hadirin).

Apakah Anda bertanya apakah mereka telah memperbaiki semuanya? Saat ini, saya pikir mereka telah memperbaiki semua bug yang saya laporkan kepada mereka, kecuali untuk kekurangan kebijakan privasi, yang saya sebutkan di akhir pidato. Terakhir kali saya memeriksanya, semuanya tidak berubah. Untuk pertanyaan itu, dapatkah saya mengedit parameter unit kontrol mesin elektronik ECU dengan cara ini, saya akan menjawab bahwa tugas saya adalah mengedit parameter mobil hanya di aplikasi MyCar. Ini menyimpan representasi digital dari mobil, yang diedit menggunakan akses langsung ke objek, injeksi SQL, atau vektor serangan lain.

Pertanyaan terakhir adalah: apakah saya memiliki sistem start engine tanpa kunci di dalam mobil dengan tombol Start, dan bagaimana situasi dengan mengunci setir dalam kasus ini? Jawaban saya adalah MyCar memiliki tombol seperti itu, sehingga sistem ini tidak memiliki kunci setir. Saya menduga bahwa jika Anda menginstal sistem ini, Anda pasti tidak dapat mengandalkan kunci untuk mengunci kemudi.


Sedikit iklan :)


Terima kasih untuk tetap bersama kami. Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikan kepada teman Anda VPS berbasis cloud untuk pengembang mulai $ 4,99 , analog unik dari server entry-level yang diciptakan oleh kami untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mulai dari $ 19 atau cara membagi server? (opsi tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).

Dell R730xd 2 kali lebih murah di pusat data Equinix Tier IV di Amsterdam? Hanya kami yang memiliki 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV dari $ 199 di Belanda!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mulai dari $ 99! Baca tentang Cara Membangun Infrastruktur Bldg. kelas c menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?

All Articles