Подобные ошибки создают уязвимости из числа наиболее часто встречающихся в таком широко используемом программном обеспечении, как Firefox, Chrome, Windows, Android и iOS. Я больше года отслеживал информацию о проблемах с безопасностью в этих проектах, и почти в каждом релизе этих продуктов больше половины уязвимостей связаны с некорректной работой с памятью.
Ещё больше беспокоит тот факт, что уязвимости высокого и критического уровней (дающие возможность атакующему выполнять на вашем компьютере произвольный код; это самые опасные уязвимости) -- почти всегда используют некорректный доступ к памяти. За последний год, изучая защищённость широко используемых библиотек для обработки изображений ImageMagick и GraphicsMagic, я обнаружил более 400 уязвимостей этой категории.
Квалифицированный мужик.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Смысл в том, что надо бы создать более защищенные, чем С++, языки программирования. LVV>И переписать на них все, что можно переписать.
Еще эффективнее было бы кроме этого переделать все железяки на гарвардскую архитектуру, и заменить их. И примерно так же реалистично.
Здравствуйте, Sharowarsheg,
S> Еще эффективнее было бы кроме этого переделать все железяки на гарвардскую архитектуру, и заменить их. И примерно так же реалистично.
Хмм. Железяки с гарвардом точно так же подвержены уязвимостям. Есличо, как практик говорю.
Здравствуйте, Vlad_SP, Вы писали:
V_S>Здравствуйте, Sharowarsheg,
S>> Еще эффективнее было бы кроме этого переделать все железяки на гарвардскую архитектуру, и заменить их. И примерно так же реалистично.
V_S>Хмм. Железяки с гарвардом точно так же подвержены уязвимостям. Есличо, как практик говорю.
Managed языки тоже подвержены уязвимостям, это если из имеющихся.
А вообще
надо бы создать более защищенные, чем С++, языки программирования. И переписать на них все, что можно переписать.
ну и, соответственно, надо бы создать более защищенные железяки (чем гарвардская архитектура), и заменить все железяки, которые можно заменить.
S>надо бы создать более защищенные, чем С++, языки программирования. И переписать на них все, что можно переписать.
S>ну и, соответственно, надо бы создать более защищенные железяки (чем гарвардская архитектура), и заменить все железяки, которые можно заменить.
Имеем "ассиметричность информации на рынке" — в полной красе!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
S>>А вообще S>>
S>>надо бы создать более защищенные, чем С++, языки программирования. И переписать на них все, что можно переписать.
S>>ну и, соответственно, надо бы создать более защищенные железяки (чем гарвардская архитектура), и заменить все железяки, которые можно заменить. LVV>Имеем "ассиметричность информации на рынке" — в полной красе!
Создал новый консольный проект на C++ в VC2017 (сегодня обновил её).
Начал его(проект) рихтовать, а потом откатил назад чтобы запостить сюда:
// test_for_oledb_property_v2.cpp : This file contains the 'main' function. Program execution begins and ends there.
//#include"pch.h"#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu
// Tips for Getting Started:
// 1. Use the Solution Explorer window to add/manage files
// 2. Use the Team Explorer window to connect to source control
// 3. Use the Output window to see build output and other messages
// 4. Use the Error List window to view errors
// 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
// 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
А вы тут про "с памятью неправильно работают".
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, LaptevVV, Вы писали:
LVV>Смысл в том, что надо бы создать более защищенные, чем С++, языки программирования.
Смысл в рекламе rust.
LVV>И переписать на них все, что можно переписать.
Проблема как раз не в языках, а в этом "всё"-м. Люди вынуждены использовать и доверять внешним библиотекам, т.к. создавать самим их с нуля очень накладно.
Да в здравом уме это будет финансировать? Проще это "всё" положить в виртуальную машину и её контролировать.
тут утверждают что проблема интернетов не в c++, а в распи№%@$стве лёгком бардаке.
Здравствуйте, LaptevVV, Вы писали:
LVV>Смысл в том, что надо бы создать более защищенные, чем С++, языки программирования. LVV>И переписать на них все, что можно переписать.
Позиция автора достаточно понятна, но она стремительно теряет актуальность. В основном картина, описанная там, характерна для второй половины 1990-х, начала 2000-х. Это тогда активно соревновались, кто больше найдёт дырок переполнения буфера, а названия типа imap-uw вызывали у всех, кто хоть немного слышал такое, фейспалм или вырывание волос на себе, в зависимости от характера или настроения.
Примерно тогда же начались затыкания наиболее мрачных видов дырок — в работе с C-like строками — которые привели к появлению подпорок в виде функций типа strlcpy, strncat_s, и тому подобных. Именно эта проблема в основном решена. Да, отдельные случаи вылазят и сейчас. Но их относительная доля, по сравнению с прежней картиной, ничтожна.
А вот другие виды уязвимостей вышли на передний план, например:
1. SQL injections. Против них никак не помогает, например, что PHP сам управляет памятью и не позволяет выйти за границы. Зато в официальной документации PHP до сих пор открыто присутствует формирование запроса через прямую подстановку, и то — вызов mysql_real_escape_string там появился достаточно недавно (а должен был ещё 20 лет назад);
3. Разнообразные возможности выйти из sandboxʼа полномочий в скриптах на веб-страницах и т.п;
4. Проблемы криптографии (типа доморощенного дырявого алгоритма);
и так далее и так далее, смотреть хотя бы CWE list —
никакая замена C++ на Rust/Go/etc. этому не поможет.
LVV>Алекс -- специалист по безопасности софта в проекте Mozilla, где он занимается песочницей и борется с уязвимостями в проекте Firefox. Ранее он был программистом в компании the United States Digital Service, а также членом совета директоров двух организаций: Python Software Foundation и Django Software Foundation.
Занятие формирует мировоззрение, а молотку всё вокруг кажется гвоздями.
Rust для Firefox, скорее всего, на пользу. Но не против уязвимостей, а против потери памяти при работе (что характерно для всех браузеров).
И даже проблемы того же sandboxingʼа он не исправит.
Здравствуйте, LaptevVV, Вы писали:
LVV>Смысл в том, что надо бы создать более защищенные, чем С++, языки программирования. LVV>И переписать на них все, что можно переписать.
По-моему, это все мелочи. Реальная проблема заключается в том, что C++ — это ОЧЕНЬ сложный язык программирования. У человека в голове есть вполне конечное число извилин, и если 80% из них заняты борьбой с языком программирования, на все остальное остается только 20%.
Кстати, rust, за который агитирует автор статьи, не сильно проще C++. И я предполагаю, что программы на rust'е будут в среднем не более качественные. Хотя, наверное, там будут популярны не ошибки переполнения буфера (от которых rust защищает), а какие-то другие ошибки.
Здравствуйте, qwertyuiop, Вы писали:
Q>Можно вкратце, о чем там речь?
Речь там о том, что большая часть ошибок в программе связана с некорректным доступом к памяти (переполнение буфера, выход за границу массива, использование уже освобожденной памяти и т.п.), а C++ не предоставляет автоматической защиты от такого рода ошибок. И что есть более другие языки программирования, например, любимый мозиловцами Rust, которые такую защиту предоставляют. И если переписать все программы на таких языках, то орки превратятся в эльфов, и мир станет лучше, добрее и безопаснее.
Здравствуйте, Pzz, Вы писали:
Pzz>Кстати, rust, за который агитирует автор статьи, не сильно проще C++. И я предполагаю, что программы на rust'е будут в среднем не более качественные. Хотя, наверное, там будут популярны не ошибки переполнения буфера (от которых rust защищает), а какие-то другие ошибки.
Есть таки разница, что на Rust надо постараться, чтобы скомпилировалось. А на C++ это проще — именно в основных проблемных зонах — но потом сложнее найти, почему не работает
Остальные ошибки, о которых я упоминал в предыдущем комментарии, от этой замены не уйдут, и не появятся.
Здравствуйте, LaptevVV, Вы писали:
LVV>Смысл в том, что надо бы создать более защищенные, чем С++, языки программирования. LVV>И переписать на них все, что можно переписать.
Ну, он прав абсолютно. Но, увы, этого никто делать не будет.
Не только из-за С++. Есть проблема гораздо посерьезней — TCP. Это вообще тренд в последнее время, хаять все технологии зарекомендовавшие себя на протяжении 30++ лет и доказавшие свою жизнеспособность и гибкость, менять их на кота в мешке, принимая безумное количество сырых стандартов и пытаясь выгадать себе конкурентное преимущество.
Да, и конечно, ни в коем случае никакой обратной совместимости!