Pada 2019, kami menemukan toko di Internet yang mendistribusikan perangkat lunak untuk mesin industri berat. Kami mengunduh beberapa aplikasi ini dan merekayasa baliknya untuk memahami cara kerjanya. Kode mereka ditulis dalam salah satu bahasa pemrograman berpemilik yang digunakan untuk mengotomatiskan robot industri yang merakit mobil dan mengemas makanan pada konveyor. Kerentanan ditemukan di salah satu aplikasi ini, yang memulai penelitian kami tentang Otomasi Rogue: Kode Rentan dan Berbahaya dalam Pemrograman Industri .
Setelah memeriksa detail teknis dan kelemahan dari delapan lingkungan pemrograman industri paling populer (ABB, Comau, Denso, Fanuc, Kawasaki, Kuka, Mitsubishi, dan Universal Robots), kami menemukan bahwa bahasa-bahasa ini dapat digunakan untuk membuat malware worm yang akan berpindah dari satu bahasa. rentan terhadap robot lain, mematuhi perintah jarak jauh dari operator mereka.
Kekurangan yang ditemukan adalah hasil dari pilihan desain yang dibuat beberapa dekade lalu. Solusi ini menentukan teknologi, metode, dan alat yang masih digunakan saat ini untuk pemrograman peralatan industri. Pertimbangkan implikasi dari pilihan ini dalam konteks ancaman dunia maya modern.
Mencuri data dari robot
Kami menemukan kasus nyata dari server web yang rentan yang diimplementasikan sebagai aplikasi untuk dijalankan pada robot industri. Server web, yang ditulis dalam ABB Rapid, berisi kerentanan traversal yang memungkinkan penyerang terhubung ke robot melalui jaringan dan menyalin file apa pun dari pengontrol robot, termasuk log. File semacam itu kemungkinan besar berisi berbagai data dan pengetahuan rahasia, sehingga dapat dijual secara menguntungkan di pasar bawah tanah.
Jika penyerang berhasil meretas komputer di jaringan yang sama dengan robot, ia akan dapat terhubung ke server web pengontrol yang menyamar sebagai agen, meminta file yang diminati, dan mengambilnya tanpa otorisasi, karena program memenuhi permintaan apa pun dari agen.
Fragmen kode aplikasi yang rentan. Sumber (selanjutnya, kecuali dinyatakan lain): Trend Micro
Line 493 memanggil fungsi sendFile untuk mengirim file yang diminta ke klien. PageString tidak difilter dengan cara apa pun, jadi mungkin berisi "... /" atau jalur lain. Ini memungkinkan Anda melintasi sistem file dan mengunduh hampir semua file.
Skema eksploitasi kerentanan
Yang penting dalam hal ini adalah komentar yang ditinggalkan oleh pengembang server web yang rentan dalam kode. Dia tahu bahwa kode yang dia tulis rentan, tetapi tidak melakukan apa pun untuk memperbaiki masalah, karena dia berasumsi bahwa semua permintaan akan datang dari browser yang "benar", yang akan memvalidasi data input dan tidak mengizinkan string seperti ".. . \\ ... \\ ":
,
Eksploitasi beberapa kerentanan dapat menimbulkan konsekuensi di dunia fisik, misalnya, merugikan produk jadi atau bahkan orang di sekitarnya.
Dalam proyek sumber terbuka untuk robot industri Kuka, kami menemukan kerentanan yang memungkinkan Anda mengubah lintasan bagian yang bergerak. Program ini menerima aliran koordinat melalui jaringan dan mentransfernya ke aktuator, yang melakukan gerakan yang ditentukan. Untuk ini, kelas prosedur khusus digunakan - server otomatisasi gerak. Ini adalah antarmuka standar yang memungkinkan OEM robot industri menyediakan cara yang konsisten untuk mengontrol pergerakan produk mereka.
Kode rentan dari server otomatisasi lalu lintas tidak berisi pemeriksaan apa pun untuk keabsahan data yang ditransfer ke sana
Kode server tidak memeriksa dengan cara apa pun dari mana bagian koordinat berikutnya untuk pergerakan robot berasal; itu tidak menyediakan otentikasi internal. Satu-satunya pertahanan adalah memeriksa alamat MAC dan alamat IP pengirim, yang mana pun dapat dengan mudah dipalsukan oleh penyusup yang telah menembus jaringan.
Di bangku laboratorium kami, kami memastikan bahwa dengan menggunakan spoofing, dapat memalsukan lalu lintas antara robot dan stasiun kerja teknik. Seorang penyerang dapat mengirim koordinat sewenang-wenang, dan robot hanya melakukannya, yang dalam produksi nyata akan menyebabkan kecelakaan.
Dengan memasukkan paket jaringan dengan koordinat yang salah ke dalam lalu lintas, kami dapat mendorong manipulator keluar dari zona keamanan beberapa kali dan mengenai objek fisik dengan "tangan" robot. Akibatnya, "lengan" yang digunakan robot untuk mengambil objek jatuh: Lengan robot yang jatuh
adalah hasil dari memasukkan koordinat yang tidak aman ke dalam lalu lintas
Malware dinamis
Jenis serangan ini mengasumsikan bahwa robot menjalankan program yang ditulis oleh integrator sistem yang dipercaya dapat dipercaya. Pada kenyataannya, program apa pun yang dibuat oleh integrator dianggap tepercaya dan diterapkan tanpa pemeriksaan keamanan kode.
Dengan mengorbankan integrator atau mengganti program di penyimpanan jaringan yang rentan, Anda dapat memasukkan kode berbahaya ke dalam jaringan perusahaan secara tidak terlihat: tambahkan bootloader yang mengunduh modul yang dibutuhkan penyerang dan menjalankannya sebagai bagian dari siklus produksi standar.
Pengunduh malware yang ditulis dalam bahasa pemrograman untuk robot industri
Untuk menguji konsep ini, kami menulis dropper dalam bahasa pemrograman untuk robot industri dan memastikan bahwa program eksternal dapat digunakan untuk memuat kode ke dalam pengontrol robot dan menjalankannya. Setelah dikontrol, program semacam itu dapat melakukan tindakan jahat lebih lanjut dengan mengumpulkan informasi tentang infrastruktur jaringan, mencuri file dan kredensial.
Kerentanan RCE yang tidak biasa
Salah satu temuan kami adalah program yang sepenuhnya terhormat yang meluncurkan fungsi untuk eksekusi, yang namanya diterima melalui jaringan. Untuk mengeksekusinya, ia menggunakan pemuatan kode dinamis, tetapi tidak tertarik pada apa yang diluncurkannya: program tidak menyediakan untuk memeriksa integritas pustaka yang dimuat.
Logika rentan dari aplikasi "terhormat"
Sebuah fragmen kode yang mengimplementasikan logika rentan.
Meskipun program itu sendiri tidak berisi fungsi jahat, penyerang dapat menggunakannya untuk mengeluarkan perintah ke robot pada waktu yang tepat, yang memengaruhi dunia fisik.
Mahkota Penciptaan - Cacing Berbahaya
Untuk mendemonstrasikan keseriusan masalah yang terdeteksi, kami telah mengembangkan program dengan fungsi propagasi mandiri dan pembaruan otomatis, pemuatan kode secara dinamis dari server kontrol, dan kemampuan untuk mengontrolnya dari jarak jauh. Program pemindaian juga dapat melakukan pemindaian jaringan, mentransfer file sewenang-wenang ke server perintah dan kontrol, memelihara daftar perangkat yang terinfeksi, dan bertindak sebagai bot.
Logika program PoC yang mensimulasikan kerja malware nyata.
Formasi daftar file yang ditemukan dan mengirimkannya ke server kontrol
Sumber masalah
Setelah menganalisis delapan bahasa pemrograman otomasi industri populer yang dikembangkan dalam beberapa dekade terakhir, kami sampai pada kesimpulan bahwa alasan utama untuk kerentanan yang teridentifikasi dan potensial adalah bahwa bahasa-bahasa ini berisi cara tingkat rendah untuk mengakses sumber daya sistem. Meskipun alat ini sendiri tidak berbahaya, penyerang dapat menggunakannya untuk tujuan lain, yang sangat memengaruhi keselamatan robot, operator, dan sistem yang terhubung. Misalnya, mereka dapat digunakan untuk menggerakkan manipulator ke atas, mengangkat benda kerja, menurunkan manipulator ke bawah, dan melepaskan benda kerja.
Kumpulan fungsi canggih yang kaya ini memberi para insinyur proses kebebasan untuk mengembangkan aplikasi di mana mereka dapat mengambil data dari jaringan, membaca dan menulis file. Namun, karena platform tidak menyediakan akses aman ke fitur-fitur canggih ini, penyerang dapat menggunakannya untuk menulis modul berbahaya.
Masalah lain dengan bahasa usang untuk otomasi industri (Industrial Robots Programming Language, IRPL), yang diwarisi bersama dengan peralatannya, adalah bahwa mereka tidak memiliki alat untuk memeriksa kode untuk pola yang tidak aman, mirip dengan alat untuk C, C ++, C #, Java. PHP dan Python.
Setiap OEM membuat bahasa dan lingkungannya sendiri di mana program target akan dijalankan. Beberapa di antaranya didasarkan pada sistem operasi real-time (RTOS), tetapi secara keseluruhan tidak ada standarisasi. Semantik dari setiap IRPL juga unik dan dapat berbeda secara signifikan dari semantik bahasa pemrograman tujuan umum. Beberapa kemampuan, seperti untuk memanipulasi string atau operasi kriptografi, tidak ada di IRPL atau tidak semaju dalam bahasa tradisional.
Sumber utama kerentanan dalam program yang ditulis dalam IRPL adalah tiga fungsi utama:
- bekerja dengan file dan direktori,
- memuat modul secara dinamis dan memanggil fungsi dengan nama,
- fungsi jaringan - menerima dan mengirimkan data ke sistem eksternal.
Fungsi berbahaya tersedia di IRPL
Bagaimana melindungi diri sendiri
Seperti halnya aplikasi perangkat lunak yang menangani data tidak tepercaya, sistem otomasi industri harus dirancang, diterapkan, dikonfigurasi, dan digunakan dengan mekanisme keamanan yang sesuai.
Rekomendasi gabungan untuk memastikan keamanan program untuk otomasi industri
Oleh karena itu, saat menulis program semacam itu, Anda harus dipandu oleh prinsip-prinsip berikut:
- Pikirkan robot industri sebagai komputer, dan aplikasi untuk mereka sebagai kode yang sangat penting;
- mengotentikasi semua komunikasi;
- menerapkan kebijakan kontrol akses;
- menerapkan validasi input jika memungkinkan;
- memastikan sanitasi output yang berkelanjutan;
- Saat menangani kesalahan, jangan paparkan detail teknis yang tidak perlu;
- membuat konfigurasi dan prosedur penerapan yang benar;
- Menerapkan proses manajemen perubahan untuk kode otomasi industri.
Tua atau pintar?
Sementara pengembang perangkat lunak tradisional telah berjuang dengan konsekuensi pemrograman yang tidak aman selama beberapa dekade dan mengembangkan berbagai teknik untuk memastikan kemenangan, dunia otomasi industri tidak siap untuk mendeteksi dan mencegah eksploitasi kerentanan.
Mengingat kecepatan konvergensi IT / OT, sangat penting untuk memperkenalkan metode pengembangan kode yang aman ke dalam industri otomasi industri. Jika tidak, beberapa tahun ke depan dapat memberi kita banyak laporan tentang insiden di industri, dan konsekuensi dari insiden ini akan terwujud tidak hanya di dunia maya, tetapi juga di dunia fisik.