Уязвимость Atoi() против внедрения ошибок

Я использую atoi для преобразования строки в целое число во встроенном приложении c. Тем не менее, я мог бы использовать уязвимость в atoi(), используя атаку с внедрением ошибок часов. Я имею в виду, что когда у меня есть один или несколько сбоев, процессор пропускает некоторые символы и возвращает ошибочное целое число. Есть ли альтернатива для функции atoi, которая более устойчива к внедрению ошибок? Могу ли я использовать его дополнение (функция itoa) для восстановления строки и сравнения двух строк?

  • Я видел функцию strtol как альтернативу для проверки вместо atoi(). может ли это быть причиной моей проблемы или он просто возвращает ошибки программного обеспечения?

person elik1991    schedule 12.04.2021    source источник
comment
Вы можете просто вызвать atoi() дважды и посмотреть, получите ли вы тот же результат.   -  person Barmar    schedule 13.04.2021
comment
Атака с внедрением ошибок часов Получение ошибочного целого числа от atoi() было бы наилучшим сценарием. Типичный случай — просто зависает процессор. На самом деле, вероятность того, что вы могли сбить часы, и единственным эффектом является пропущенная цифра в atoi(), настолько низка, что этот вопрос по сути бессмысленен.   -  person user3386109    schedule 13.04.2021
comment
@ user3386109 Действительно. Все решения по борьбе с глитч-атаками, которые я видел до сих пор, в значительной степени бессмысленны, потому что они могут вызвать что угодно. Например, пропуск инструкции (или группы) целиком.   -  person Eugene Sh.    schedule 13.04.2021
comment
Я думаю, кто-то, у кого есть возможность глючить часы в вашем железе, уже владеет вами.   -  person Andrew Henle    schedule 13.04.2021
comment
From: darkreading.com/edge/theedge/ тактовые сигналы прерываются, ЦП и другие компоненты обработки могут пропускать инструкции, временно приостанавливать выполнение программ или вести себя другим образом, который может позволить злоумышленникам подсовывать вредоносные инструкции в пробелы в обработке. Если он у вас есть, у вас гораздо большие проблемы, чем atoi У вас будет такая же проблема с itoa или сравнением или почти с любым кодом ты пишешь.   -  person Craig Estey    schedule 13.04.2021
comment
процессор пропустил несколько символов и возвращает ошибочное целое число. --› так что atoi() работал нормально, просто был неверный ввод? Или ошибка произошла внутри atoi()?   -  person chux - Reinstate Monica    schedule 13.04.2021


Ответы (1)


Это типичный случай, когда процессор управляется котом Шрёдингера. Своими квантовыми лапами она может решить, какие инструкции выполнить, а какие пропустить...

Трудно представить код, который был бы устойчивым в такой среде.

На самом деле, любая попытка проверки согласованности вывода может быть сорвана, если пропустить соответствующие инструкции.

Как прокомментировал Бармар, вы можете просто дважды вызвать atoi() и сравнить значения, надеясь на момент отвлечения внимания на сбой часов.

person chqrlie    schedule 12.04.2021
comment
Если 2 вызова не совпадают, требуется 3-й вызов, который надеюсь соответствует предыдущему. - person chux - Reinstate Monica; 13.04.2021
comment
@chux-ReinstateMonica: Если 2 вызова не совпадают, значит, определенно происходит что-то подозрительное... Если вы находитесь на Земле, прерывание процесса запуска кажется предпочтительнее, если вы находитесь на Луне или в одиночестве на Марсе, все равно запускайте и надейтесь на Голливуд сценарий со счастливым концом. - person chqrlie; 13.04.2021
comment
... или 5. Мне нравится ваша идея следующего шага, зависящего от местоположения. - person chux - Reinstate Monica; 13.04.2021
comment
Я видел функцию strtol как альтернативу для проверки вместо atoi(). может ли это быть причиной моей проблемы или он просто возвращает ошибки программного обеспечения? - person elik1991; 13.04.2021
comment
@ elik1991: strtol - это альтернатива atoi(), которая имеет явное преимущество в правильной обработке значений за пределами диапазона типа long. Однако никакой специальной обработки сбоев часов нет. - person chqrlie; 13.04.2021