Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Являются ли текстовые строки уязвимостью во встроенном ПО?

На протяжении многих лет безопасность настольных компьютеров была проблемой. Как только машина подключена к Интернету, существует внутренняя возможность для какой-либо атаки. Такие проникновения могут иметь целью украсть данные, повредить систему или каким-либо образом изменить ее работу. Средства защиты хорошо известны и широко применяются. Встраиваемые системы всегда казались невосприимчивыми к подобным проблемам, поскольку они редко были подключены к сети, и их код обычно находился в ПЗУ. Времена изменились. Большая часть современных систем подключена к Интернету, и обычной практикой является копирование кода в ОЗУ и выполнение оттуда. Это означает, что безопасность теперь является важным аспектом проектирования встроенного программного обеспечения.

Английский язык - отличный инструмент общения. Это очень выразительный язык, позволяющий общаться с большой точностью и тонкостью. Однако в повседневной речи большинство из нас ленивы и часто употребляет слова без стопроцентной точности. Я имею в виду пример того, как безопасность и безопасность используются почти взаимозаменяемо, как если бы они были синонимами. Я думаю, что лучшее определение, которое я слышал, звучит примерно так:безопасность - это процесс защиты мира от устройства; безопасность защищает устройство от мира. Безопасность - моя тема на сегодня.

Если система действительно должна быть полностью защищенной от пуль, требуется шифрование промышленного уровня. Обычно для этого требуется специальная аппаратная поддержка, которая, хотя и доступна, может считаться излишней для приложения, в котором такая высокая безопасность не требуется. В таких случаях есть другие варианты, и это то, что я хотел бы изучить.

Если хакер может получить доступ к содержимому памяти устройства, он может начать выяснять, что и как оно делает. Это первый этап изменения его работы. Код можно разобрать и, следовательно, раскрыть логику. Без шифрования этого мало что можно сделать. Следующее, что может сделать хакер, - это посмотреть на шестнадцатеричный / ASCII-дамп данных и посмотреть, что они могут там найти, что имеет смысл. Они ищут узоры и узнаваемые структуры. Здесь могут быть предприняты некоторые меры предосторожности. Хотя шифрование может быть недопустимым вариантом, возможно обфускация.

Цель обфускации данных - задержать или отпугнуть хакера, просто сделав данные менее узнаваемыми. При сканировании дампа памяти одна из простых вещей, которую можно обнаружить, - это текстовые строки. Итак, это то, на чем я сосредоточусь здесь.

В коде C / C ++ текстовые строки обычно представляют собой просто последовательности байтов, содержащие коды ASCII, оканчивающиеся нулевым байтом. Это очень легко заметить, поэтому я исправлю это. Во-первых, вместо нулевого терминатора первый байт каждой строки будет спецификатором длины. Данные символов строки будут слегка зашифрованы, чтобы они выглядели менее знакомыми - все, что я сделаю, это поменяю местами два полубайта каждого байта. Мне нужна служебная программа, в которую я буду вводить простые текстовые строки, и она генерирует объявление для массива с соответствующей инициализацией. Вот функция, лежащая в основе этой утилиты:

 void scramble (int index, unsigned char * input) {unsigned char * charpointer, character; printf ("строка символов без знака% d [% d] ={0x% 02x,", индекс, strlen (ввод) +1, strlen (ввод)); charpointer =ввод; в то время как (* charpointer) {character =* charpointer ++; символ =((символ &0x0f) <<4) | ((символ &0xf0)>> 4); printf ("0x% 02x", символ); если (* charpointer) printf (","); } Printf ("}; // \"% s \ "\ n", input);} 

Если бы я передал этой функции индекс 4 и строку «Hello world» (исходно, а?), Результат был бы следующим:

 unsigned char string4 [12] ={0x0b, 0x84, 0x56, 0xc6, 0xc6, 0xf6, 0x02, 0x77, 0xf6, 0x27, 0xc6, 0x46}; // «Привет, мир» 

Я могу скопировать и вставить это в свой код, тогда все, что мне нужно сделать, это написать функцию для расшифровки текста, когда мне нужно его отобразить. Вместо того, чтобы давать каждой строке порядковый номер, я мог бы дать ей произвольное имя, заменив индекс параметр со строкой. Обратите внимание, что сгенерированный код в некоторой степени самодокументируется, поскольку комментарий показывает строку в читаемой форме, но, конечно, это появляется только в исходном коде. Если у хакера есть доступ к вашему исходному коду, значит, у вас достаточно проблем, и я ничем не могу помочь!

Вот код, иллюстрирующий процесс дескремблирования:

 void main () {временный символ без знака, буфер [50]; int count =string4 [0], index =0; в то время как (количество--) {темп =строка4 [индекс + 1]; temp =((temp &0x0f) <<4) | ((temp &0xf0)>> 4); буфер [индекс] =темп; index ++; } Буфер [индекс] =0; printf ("-% s- \ n", буфер);} 

Замена полубайтов в каждом байте - один из многих способов выполнения скремблирования. Другая возможность - это, скажем, повернуть каждый символ влево на три бита. Вот код для этого:

 символ без знака leftrotate3 (символ без знака c) {c =(c <<3) | (c>> 5); return c;} 

Методы запутывания, которые я описал, шифруют строку посимвольно. Вместо этого можно было бы что-то делать со всей строкой. Например, рассматривайте строку как длинную последовательность битов и поверните ее на произвольное число влево. Я оставлю написание этого алгоритма более увлеченным читателям.

Стоит отметить, что побочным эффектом локализации всех текстовых строк является простота создания разных версий программного обеспечения для других языков.

Я должен повторить и подчеркнуть, что обфускация данных далеко не пуленепробиваемая и в лучшем случае замедлит серьезного хакера. По крайней мере, код дескремблирования можно разобрать. Хитрость с этой техникой состоит в том, чтобы затруднить отслеживание запутывания. Если вам действительно нужна большая безопасность, вы должны обратить внимание на полное шифрование.


Встроенный

  1. Фортепиано
  2. Роль встроенных систем в автомобилях
  3. Основы встроенной системы и приложений
  4. 10 действительно важных функций программного обеспечения для рабочего процесса 3D-печати
  5. Архитектура SOAFEE для встроенной периферии позволяет программно определяемым автомобилям
  6. Использование DevOps для решения проблем встроенного программного обеспечения
  7. Роботы приближаются к вашему заводу?
  8. Встроенное программное обеспечение меняет характер цепочек поставок оборудования
  9. Каковы преимущества программного взаимодействия для умного завода?
  10. Почему религиозные учреждения внедряют программное обеспечение для управления объектами