Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial Internet of Things >> Tertanam

Apakah string teks rentan dalam perangkat lunak yang disematkan?

Selama bertahun-tahun, keamanan komputer desktop telah menjadi perhatian. Setelah mesin terhubung ke Internet, secara intrinsik ada kemungkinan untuk beberapa jenis serangan. Penyusupan tersebut mungkin untuk mencuri data, merusak sistem atau mengubah operasinya dalam beberapa cara. Sarana proteksi sudah dikenal luas dan diterapkan secara luas. Sistem tertanam sepertinya selalu kebal dari masalah seperti itu, karena mereka jarang terhubung ke jaringan, dan kode mereka biasanya ada di ROM. Hal-hal telah berubah. Sebagian besar sistem modern terhubung ke Internet dan merupakan praktik umum untuk menyalin kode ke RAM dan dieksekusi dari sana. Ini berarti bahwa keamanan sekarang menjadi pertimbangan desain perangkat lunak tertanam yang penting.

Bahasa Inggris adalah alat komunikasi yang hebat. Ini adalah bahasa yang sangat ekspresif yang memungkinkan komunikasi dengan sangat presisi dan halus. Namun, dalam percakapan sehari-hari, kebanyakan dari kita malas dan sering menggunakan kata-kata yang tidak akurat 100%. Contoh yang saya pikirkan di sini adalah cara keselamatan dan keamanan digunakan hampir secara bergantian, seolah-olah mereka adalah sinonim. Saya pikir definisi terbaik yang pernah saya dengar adalah seperti ini:keselamatan adalah proses melindungi dunia dari perangkat; keamanan melindungi perangkat dari dunia. Keamanan adalah topik saya hari ini.

Jika suatu sistem benar-benar harus benar-benar anti peluru, enkripsi tingkat industri diperlukan. Ini biasanya memerlukan dukungan perangkat keras khusus, yang, meskipun tersedia, mungkin dianggap berlebihan untuk aplikasi di mana keamanan tinggi seperti itu tidak diperlukan. Dalam kasus seperti itu, ada opsi lain dan itulah yang ingin saya jelajahi.

Jika seorang peretas dapat memperoleh akses ke konten memori perangkat, mereka dapat mulai mencari tahu apa yang dilakukannya dan bagaimana melakukannya. Ini adalah tahap pertama dalam mengubah operasinya. Kode dapat dibongkar dan, karenanya, logika dapat diungkapkan. Tanpa enkripsi, hanya sedikit yang dapat dilakukan untuk mencegah hal ini. Hal berikutnya yang mungkin dilakukan peretas adalah melihat hex/ASCII dump data dan melihat apa yang dapat mereka temukan di sana yang masuk akal. Mereka mencari pola dan struktur yang dapat dikenali. Di sinilah beberapa tindakan pencegahan dapat diambil. Meskipun enkripsi mungkin bukan pilihan, kebingungan adalah kemungkinan.

Tujuan pengaburan data adalah untuk menunda atau menghalangi peretas hanya dengan membuat data tersebut kurang dapat dikenali apa adanya. Memindai melalui dump memori, salah satu hal yang mudah dikenali adalah string teks. Jadi, inilah yang akan saya fokuskan di sini.

Dalam kode C/C++, string teks biasanya hanya urutan byte yang berisi kode ASCII yang diakhiri oleh byte nol. Itu sangat mudah dikenali, jadi saya akan mengubahnya. Pertama, alih-alih terminator nol, byte pertama dari setiap string akan menjadi penentu panjang. Karakter string akan membuat datanya sedikit diacak, agar terlihat kurang familiar – yang akan saya lakukan hanyalah menukar dua nibble dari setiap byte. Saya perlu memiliki program utilitas di mana saya akan memberi makan string teks biasa dan itu menghasilkan deklarasi untuk array dengan inisialisasi yang sesuai. Berikut adalah fungsi inti dari utilitas ini:

void scramble(int index, unsigned char *input){    unsigned char *charpointer, character; printf("unsigned char string%d[%d] ={0x%02x,", index,          strlen(input)+1, strlen(input)); penunjuk karakter =masukan; while(*charpointer)    {        character =*charpointer++; karakter =((karakter &0x0f) <<4) | ((karakter &0xf0)>> 4); printf("0x%02x", karakter); if (*charpointer)            printf(","); }    printf("};  // \"%s\"\n", masukan);}

Jika saya melewatkan fungsi ini dengan indeks 4 dan string "Hello world" (asli ya?), hasilnya adalah:

unsigned char string4[12] ={0x0b, 0x84, 0x56, 0xc6, 0xc6, 0xf6, 0x02, 0x77, 0xf6, 0x27, 0xc6, 0x46}; // "Halo dunia"

Saya dapat menyalin dan menempelkan ini ke dalam kode saya, maka yang perlu saya lakukan hanyalah menulis sebuah fungsi untuk menguraikan teks ketika saya perlu menampilkannya. Alih-alih memberi setiap string nomor indeks, saya bisa memberinya nama arbitrer dengan mengganti indeks parameter dengan string. Perhatikan bahwa kode yang dihasilkan agak mendokumentasikan diri sendiri, karena komentar menunjukkan string dalam bentuk yang dapat dibaca, tetapi, tentu saja, ini hanya muncul di kode sumber. Jika peretas memiliki akses ke kode sumber Anda, maka Anda berada dalam masalah yang cukup besar sehingga saya tidak dapat membantu lebih lanjut!

Berikut adalah beberapa kode untuk mengilustrasikan proses penguraian:

void main(){    unsigned char temp, buffer[50]; int jumlah =string4[0], indeks=0; while(count--)    {        temp =string4[index+1]; suhu =((suhu &0x0f) <<4) | ((temp &0xf0)>> 4); buffer[indeks] =suhu; indeks++; }    buffer[indeks] =0; printf("-%s-\n", buffer);}

Pertukaran camilan di setiap byte adalah salah satu dari banyak cara berbeda yang dapat dilakukan pengacakan. Kemungkinan lain adalah, katakanlah, putar kiri setiap karakter sebanyak tiga bit. Berikut adalah beberapa kode untuk melakukan hal itu:

unsigned char leftrotate3(unsigned char c){    c =(c <<3) | (c>> 5); kembali c;}

Teknik kebingungan yang telah saya uraikan mengacak string berdasarkan karakter demi karakter. Dimungkinkan untuk melakukan sesuatu pada seluruh string sebagai gantinya. Misalnya, perlakukan string sebagai urutan bit yang panjang dan putar angka sewenang-wenang ke kiri. Saya akan menyerahkan pengkodean algoritme ini kepada pembaca yang lebih antusias.

Perlu dicatat bahwa efek samping dari pelokalan semua string teks adalah membuat versi perangkat lunak yang berbeda untuk bahasa lain cukup mudah.

Saya harus mengulangi dan menekankan bahwa pengaburan data jauh dari bukti peluru dan akan, paling banter, memperlambat peretas yang serius. Jika tidak ada yang lain, kode pengacakan dapat dibongkar. Trik dengan teknik ini adalah membuat kebingungan sebagai jejak yang sulit untuk diikuti. Jika Anda benar-benar membutuhkan keamanan yang lebih besar, Anda harus melihat enkripsi penuh.


Tertanam

  1. Piano
  2. Peran Sistem Tertanam di Mobil
  3. Dasar-dasar Sistem dan Aplikasi Tertanam
  4. 10 Fitur Perangkat Lunak Alur Kerja Pencetakan 3D yang Benar-benar Penting 
  5. Arsitektur SOAFEE untuk tepi tertanam memungkinkan mobil yang ditentukan perangkat lunak
  6. Menggunakan DevOps untuk Mengatasi Tantangan Perangkat Lunak Tertanam
  7. Apakah robot mendekati pabrik Anda?
  8. Perangkat Lunak Tertanam mengubah Sifat Rantai Pasokan Perangkat Keras
  9. Apa manfaat interkoneksi perangkat lunak untuk pabrik pintar?
  10. Mengapa Lembaga Keagamaan Mengimplementasikan Perangkat Lunak Manajemen Fasilitas