Офтоп
GeekBrains _
7548

Учись на чужих факапах: разбираем громкие ошибки в программировании и их решения

GeekBrains о серьезных ошибках в программировании, от которых зависят миллиардные состояния, репутация и будущее бизнесов и проектов. Чек-лист для разработчика и стартапера перед запуском нового продукта или бета-тестированием.

В закладки

1. Переполнение буфера

Исторически одна из самых опасных ошибок. Именно благодаря ей на свет появились черви Морриса и Nimda. Червь Морриса, например, в какой-то момент поразил все узлы зарождающейся всемирной паутины — ARPANET — и полностью парализовал ее работу. Сумма ущерба составила почти $100 млн.

Как исправляли: создатель червя Морриса сам явился с повинной и объяснил механизм действий. Его распространение стало возможно из-за неправильного вычисления позиций записи в память. Ошибку исправили, ограничив запись данных только «пределами» буфера.

2. Незащищенный SQL-запрос

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

Известные инциденты, случавшиеся с Sony, Nokia, Heartland Payment Systems и даже сайтом Леди Гага, произошли благодаря успешным SQL-атакам, компрометирующим информацию, хранящуюся в базах данных приложения. LulzSec, одна из известных хакерских групп, сделала SQL-инъекции своим основным оружием.

Как исправляли: автоматической проверкой, фильтрацией входных параметров — чисел, строк, дат, данных в специальных форматах; настройкой второго уровня защиты — определения признаков, характерных для работы хакерских утилит типа Sqlmap; созданием и регулярным пополнением черного списка хостов, с которых проводились SQL-инъекции.

3. Переполнение стека памяти

В 2014 году мировому ИТ-сообществу была представлена ошибка под названием Heartbleed, возникающая в библиотеке OpenSSL протокола TLS. Данный баг, вызванный переполнением стека памяти, позволяет практически любому человеку, подключённому к интернету, считать пользовательскую информацию объёмом до 64 кБ с компьютера с запущенным процессом OpenSSL. По приведённым в отчёте данным, около 17% всех защищенных сайтов использовали данный протокол и, как следствие, имели уязвимость Heartbleed.

Как исправляли: в итоге исправлениями всерьез занялись только Windows и Mozilla, а Google отделался лишь оперативным выпуском патча. Таким образом, где-то в интернете до сих пор бродит баг Heartbleed, злоумышленники до сих пор с его помощью извлекают личные данные, а ущербы от их действий продолжают расти.

4. Описка в коде из-за схожести символов

В отличие от остальных пунктов нашего обзора, эта ошибка не носит системный характер, а просто имеет место быть из-за пресловутого человеческого фактора и случается как с новичками, так и с профессионалами. По сути, от нее никто не застрахован.

Она заключается в том, что программист при составлении кода может допустить «грамматическую» ошибку, то есть, попросту говоря, перепутать символы. Самым ярким примером такой ошибки служит знаменитый факап с запуском к Венере аппарата «Маринер-1» стоимостью $18,5 млн, который взорвался спустя несколько минут после взлета. В случившемся принято винить специалиста, который при программировании аппарата вместо верхнего подчеркивания ввел дефис, что и привело к глобальному сбою системы.

Как исправляли: перед полетом аппарата «Маринер-2» были много раз скрупулезно проверены все коды, используемые при запуске ракеты. Мораль: даже если речь не идет о подобного рода масштабных проектах, где сбой в коде может привести к непредсказуемым последствиям, а запускаете вы «всего лишь» какой-нибудь приятный интернет-сервис — все равно проверьте код еще раз.

5. Инъекции команд ОС

Некоторое ПО используют встроенные команды операционной системы, например, для извлечения данных компьютера или запуска приложения. В этом случае здесь может возникнуть схожая ошибка — инъекции команд вашей ОС.

Так всего месяц назад самый популярный Linux для бизнеса был атакован через Twitter. Ошибка в DHCP-клиенте Red Hat Enterprise Linux позволяет выполнять произвольные команды на атакуемых машинах с правами «суперпользователя». Пробный эксплойт для бага уже существует и активно распространяется через Twitter.

Как исправляли: выпустили экстренные обновления, позволяющие проводить проверку данных.

6. Рискованные алгоритмы

При работе с персональными данными необходимо надёжно их защищать. Не стоит полагаться на собственные силы, ведь в мире существует множество готового ПО и алгоритмов, которые работают куда лучше вашего неопытного мозга. Впрочем, даже к их использованию надо подходить с умом. Так алгоритм хэширования SHA-1 устарел и легко взламывается современными хакерами.

В 2016 году был взломан Dropbox. В ходе взлома хакеры получили данные более 68 млн. пользователей. Больше половины украденных паролей были хешированы алгоритмом SHA-1.

Как исправить: стоит отдать предпочтение SHA-2 или SHA-3. В противном случае, вы рискуете не только репутацией своего ПО, но и вполне осязаемыми деньгами.

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

{ "author_name": "GeekBrains _", "author_type": "self", "tags": [], "comments": 19, "likes": 17, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 41912, "is_wide": false, "is_ugc": true, "date": "Sat, 14 Jul 2018 17:26:53 +0300", "is_special": false }
Объявление на vc.ru
0
19 комментариев
Популярные
По порядку
Написать комментарий...
18

"Известные инциденты, случавшиеся с Sony, Nokia, Heartland Payment Systems и ДАЖЕ С САЙТОМ Леди Гага..."
Вот от Гаги такого не ожидал, это ж самый технологичный сайт в мире, не то, что всякие Sony, Nokia и т.д.

Ответить
2

Круче Гаги только Тейлор Свифт

Ответить
2

Это видимо на тот случай, если читатель не слышал ни разу о Sony, Nokia, Heartland Payment Systems. Видимо предположили, что о Леди Гаге, как раз, этот человек наверняка слышал.

Ответить
10

Покажите хоть как выглядит это "верхнее подчеркивание"

Ответить
1

В целях цензуры пропустил кое-чё

Ответить
1

Заодно бесят люди, которые пишут "нижнее подчеркивание" (как будто оно бывает каким-то, кроме нижнего)

Ответить
11

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

Ответить
7

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

Ответить
3

по мне так эта статья больше для хабра, чем для vc

Ответить
3

На хабре за такую статью порвали бы в клочья: "верхнее подчёркивание", "исправлениями всерьез занялись только Windows и Mozilla, а Google отделался лишь оперативным выпуском патча" — это, может, для "предпринимателей нового поколения" и потянет, а на хабре не простили бы.

Ответить
1

vc в хабр превращается

Ответить
2

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

Ответить
2

"компьютера с запущенным процессом OpenSSL"

Статью явно писала журналистка для домохозяек. На Хабре бы за такое забанили навечно.

Ответить
1

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

Ответить
0

В основном все какое-то такое т.к. такое позволительно джунам совершать. Но вот «Описка в коде из-за схожести символов» это интересный и частый кейс. Например при конвертации файлов между разными системами могут появляться невидимые символы, отчего некоторые компиляторы начинают «чудить». Тоже можно было бы осветить про такие невидимые чудо-символы, сколько с ними времени было потрачено вникуда :)

Ответить
0

Да ладно вам, какой сеньор себе с ногу не стрелял?

Ответить
2

Кто себе в ногу не стрелял, тот не сеньор!

Ответить

Комментарий удален

Комментарий удален

0

Heartbleed с переполнением стека никак не связан.

алгоритм хэширования SHA-1 устарел и легко взламывается современными хакерами

Успешная атака (shattered) оценивается в ~$110000 по ресурсам на GPU и 1 год по времени

Ответить

Комментарии