LinuxForum.Fans
Тема

getline и вирус

Автор: volod 9 сообщений 1901 просмотров
25.03.2019 19:22 #431192

Приветствую!

Возник вопрос по безопасности и программировании.

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

text
#include <fstream>

void rf(char *nFile) { char s[128];

ifstream rf(nFile);

if (rf != NULL) { rf.getline(s, sizeof(s));

short k=0; while ( k<128 && s[k]!='\n' && s[k]!='\0' ) k++;

if (s[0]=='X' && k<128) cout<<s<<"\n"; else cout<<"Error\n"; }

rf.close(); }

Если отправитель будет скомпрометирован и
пришлет вместо данных файл с вирусом,
а программа попробует его считать - чем это чревато?

Могут ли быть выполнены микрокоманды при вызове getline ?
Т.е. не приведет ли это (например) к зависанию исполняемой программы?

Возможно, системе вреда и не будет (пользователь не привилегирован).
Вопрос в защите данных пользователя.

25.03.2019 21:25 #431195

Я не специалист по C, но, насколько я понял, Вы просто считываете файл и выводите его на экран. По сути, делаете то же самое, что команда [console=inline]cat[/console]. А что в таком случае будет? Ничего, просто отобразятся символы и всё.
Лучше подумайте над обработкой служебных символов, коды которых меньше 32. Там и новая строка, и табуляция, и много чего ещё есть :) .

P.S. Используйте соответствующие BB-коды.

25.03.2019 22:00 · отредактировано #431197
"Rizado" написал:
Ничего, просто отобразятся символы и всё.

А также будут обработаны ESC-последовательности. Не все из них совершенно безобидны.

26.03.2019 08:45 #431205

Правильно ли я понимаю, что при вызове getline данные считываются из ПЗУ в ОЗУ посредством системной шины ПК. При этом процессор дает команды "перенести блок памяти XX-YY ПЗУ в aa-bb ОЗУ", а сами данные рассматриваются как байты, но не как команды, перемещаются только по материнской плате, и в процессор никак не попадают?

Может ли какая либо микросхема, обеспечивающая при прохождении через себя этого потока данных, распознать их как управляющий код и перенаправить на процессор для выполнение?

Речь не о закладках в микросхемы - там может быть все что угодно.
Речь о схемотехнике компьютера и обработкой ядром Линукса потоков команд и потоков данных.
Есть ли точка на этом пути, где они пересекаются и данные "вдруг" превращаются в команды?

Допустим, на экран информация не выводиться, а анализируется внутри программы.
Могут ли (например ESC-последовательности) нестандартно себя повести на этапе их чтения?

Простите, возможно "дую на воду" и потенциальной опасности от самих программ, принимающих почту, больше (ведь "каким-то образом" файл уже получен системой).
Всегда есть вариант чтения данных из файла посимвольно rf.get(s[k]).

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

26.03.2019 13:57 #431208
"volod" написал:
Есть ли точка на этом пути, где они пересекаются и данные "вдруг" превращаются в команды?

Смотрите, вот пример. Компиляция программы из исходников и есть превращение данных − исходного текста программы на языке высокого (не обязательно, можно и ассемблер) уровня в команды, которые процессор способен исполнить. Но это происходит не «вдруг», а по команде человека.

"volod" написал:
Могут ли (например ESC-последовательности) нестандартно себя повести на этапе их чтения?

Начните читать отсюда, а затем по ссылкам: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BE%D1%82%D0%B2%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85

26.03.2019 14:38 #431209
Rizado написал:
Начните читать отсюда

Data Execution Prevention (DEP) — функция безопасности, встроенная в Linux, Mac OS X, Android и Windows, которая не позволяет приложению исполнять код из области памяти, помеченной как «только для данных».

Благодарю.
Т.е., когда в область памяти будет прочитан исполняемый (уже ранее кем-то созданный) код, это будет просто набор байтов. Теоретически - на интерпретацию (выполнение) он уйти не должен.

26.03.2019 14:40 #431210

volod, если сильно боитесь вирусов, переходите на платформу 8051/AVR, там память для данных и программ разделена физически :D .

26.03.2019 20:05 #431216
"volod" написал:
Теоретически - на интерпретацию (выполнение) он уйти не должен.

Тут зависит от того что обрабатывает вывод, в данном случае это терминал, а следовательно как сказал bormant он чувствителен к ESC-последовательностям, в которые в некоторых случаях могут привести к нежелательному результату.
Если вывод перенаправляется в файл, то тут нет ни чего страшного.
Добавлено: 26.03.2019 20:05:05

Если опасаетесь вирусов, то можно выполнять в sandbox.
Просто выполнить команду sandbox в определенном каталоге, после чего нельзя будет записать ничего выше этого каталога, в каталоге можно менять что угодно. То есть пострадать может только содержимое внутри каталога а выше ни чего. Разве только может удастся повесить систему,в таком случае, но после перезагрузки система будет в порядке.

08.09.2019 22:24 #432844
"volod" написал:
и
пришлет вместо данных файл с вирусом,
а программа попробует его считать - чем это чревато?

А вы давно видели последний раз вирус под Linux? (именно вирус, а не просто какое-то вредоносное ПО)
Если видели, то: где и когда? как вирус назывался?
Добавлено: 08.09.2019 22:24:39

"bormant" написал:
А также будут обработаны ESC-последовательности. Не все из них совершенно безобидны.

ESC-последовательности могут быть очень даже "обидны" *OK*
Но они не могут быть вредоносны.
Или вы видели? *CRAZY*

Войдите или зарегистрируйтесь, чтобы ответить.