Menurut saya banyak orang, terutama di usia muda, ingin menjadi peretas yang keren. Situs hack, telepon, sistem akses. Jadi saya memiliki sedikit antusiasme kekanak-kanakan ini. Oleh karena itu, secara berkala mencari-cari di berbagai perangkat lunak dan tidak menemukan sesuatu yang berharga. Tetapi suatu hari, keberuntungan muncul untuk saya, dan bahkan apa! ACS, penuh dengan kerentanan yang memungkinkan akses untuk mengontrol seluruh sistem (membuka / menutup pintu, menambahkan kartu akses Anda, dll.).
Menarik? Kalau begitu selamat datang di kat!
Semua yang dijelaskan di bawah ini dilakukan di bangku tes. Artikel ini ditulis semata-mata untuk tujuan pendidikan dan secara umum ini semua adalah penemuan penulis.
SKUD - kontrol akses dan sistem manajemen
Kebetulan pada suatu waktu saya bekerja di perusahaan konstruksi dan jalan, di mana saya menulis satu set program untuk menerbitkan pass, mengeluarkan makanan untuk pass ini dan melaporkan. Saya perlu mengintegrasikan semua ini dengan satu ACS yang cukup populer. Pengembang menanggapi permintaan dokumentasi untuk waktu yang lama, dan tenggat waktu dibakar. Saya harus memahami perangkat lunak mereka sendiri.

Perkiraan skema operasi ACS
Saya mulai belajar dari database. Server ACS bekerja dengan basis data firebird 2.5. Login dan kata sandi untuk itu ternyata standar, yang sudah sangat mengkhawatirkan, tetapi kata sandi dapat diatur dalam pengaturan program. Kata sandi dalam database ke akun di-hash, tetapi tanpa garam, yang buruk, tetapi sekali lagi tidak kritis. Ini menyimpan semua zona bagian, pengguna, nomor kartu mereka, akses dan alamat pengontrol.

Db
Selanjutnya, kami mengambil beberapa program untuk mengendus lalu lintas (saya mengambil "SmatrSniff", yang pertama yang dapat melihat lalu lintas localhost) dan melihat apa yang klien kirim ke server. Semua data melewati TCP dan beberapa lainnya melalui UDP dalam bentuk yang tidak dienkripsi. Dan di sini kesenangan dimulai. Server pertama-tama mengirim kata sandi yang jelas dari basis data, lokasinya, dan baru kemudian memeriksa nama pengguna dan kata sandi!

Kata sandi dari database masterkey
Ternyata, tanpa mengetahui nama pengguna dan kata sandi, kita bisa mendapatkan akses penuh ke database, yang memberi kita kemungkinan yang hampir tak terbatas. Kita dapat memberi diri kita kartu dengan akses ke objek apa pun. Tetapkan kartu Anda ke pengguna lain dan gunakan namanya. Tetapi agar data ini dapat diunggah ke pengendali, Anda perlu memberikan perintah ke server dari klien. Meskipun kami dapat mengambil kata sandi untuk klien dari basis data, gunakan basis data MD5 terbuka dan mencoba menemukan kata sandi untuk hash (Saya akan mengingatkan Anda bahwa kata sandi dalam basis data bebas garam), tetapi jika kata sandi rumit, maka kemungkinan besar tidak ada yang akan berhasil. Kami harus menunggu seseorang mengklik tombol unggah lengkap.
Lalu saya melihat, dan apakah otorisasi memengaruhi apa pun. Untuk melakukan ini, saya mencoba mengulangi permintaan ke server menggunakan "TCP / IP Builder". Dan ya, permintaan berikutnya ke server tidak berfungsi tanpa otorisasi (mengirim penolakan sebagai tanggapan). Di sini saya sedikit tertekan, karena untuk integrasi saya harus menerapkan pengulangan seluruh rantai otorisasi dan hanya kemudian mengirim paket untuk memuat data ke controller.
Akhirnya, saya memutuskan untuk mengulangi permintaan untuk mentransfer pintu ke mode terbuka. Server menjawab "ok" dan pintu berbunyi bip. Tanpa izin apa pun. Saya mengulangi hal yang sama dari komputer lain di jaringan lokal dan itu berhasil juga.

Perkiraan jenis paket
Ini berarti bahwa kita dapat membuka / menutup pintu apa pun dari komputer mana pun di jaringan lokal. Tetapkan kartu untuk Anda sendiri dan segera unduh data ini ke pengontrol. Lalu dengan tenang menelusuri objek dan menghapus semua log kunjungan kami.
Saya menghabiskan beberapa jam untuk mempelajari protokol komunikasi antara controller dan server untuk akhirnya memecahkannya, tetapi saya tidak dapat sepenuhnya memahami format data. Tapi saya yakin tidak ada perlindungan. Paket-paket pasti memiliki alamat mac dari controller dan server / gateway (mengikat ke server pergi ke alamat mac, tidak ada kunci enkripsi dan sejenisnya di database, sehingga Anda kemungkinan besar bisa berpura-pura menjadi server untuk controller mengetahui server mac). Sayangnya, tidak ada tempat pembuangan atau akses ke peralatan, jadi saya tidak bisa menunjukkannya.
Akibatnya, kami memiliki kerentanan kontrol akses penuh, yang memberi kami akses tak terbatas ke bagian-bagian ke objek. Karena rendahnya biaya komponen dan perangkat lunak bebas, ACS ini sangat umum. Dia berdiri di banyak sekolah di Moskow, dan saya melihatnya di situs lain. Perusahaan membanggakan hadiah pada berbagai acara. Saya tidak secara spesifik menyebutkan nama organisasi, saya juga tidak menulis kepada mereka tentang hal itu. Karena saya percaya bahwa kerentanan pada tingkat arsitektur tidak dapat diperbaiki tanpa menulis ulang semua perangkat lunak dari awal dan memperbarui semua peralatan orang yang membeli sistem ini (ada beberapa lubang yang lebih serius di tingkat arsitektur, tetapi menggambarkan mereka akan melipatgandakan artikel). Bagi mereka yang telah belajar dari layar ACS dan terinstal di Anda, saya menyarankan Anda untuk sepenuhnya mengisolasi jaringan (yang tampaknya dianggap "praktik terbaik") di mana semua komponen sistem berada, dan akses ke database untuk menambah karyawan dilakukan hanya melalui VPN. Konfigurasi perutean yang tepat juga dapat membantu.