пятница, 2 августа 2013 г.

17 советов разработчикам для защиты кода

Совет №1: Строго тестируйте входные данные

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

Есть решение: тестировать размер и структуру входных данных и никогда не доверять человеку по ту сторону соединения.

Как правило, программисты стремятся к большей гибкости. На проверку каждого бита данных уходит много времени и сил. Такие языки передачи данных, как XML и JSON не гарантируют безопасность данных. Но для защиты кода программисты обязаны проводить проверку.


Совет №2: Храните то, что нужно и не битом больше

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

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

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

Совет №3: Не стоит чрезмерно доверять паролям

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

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

В любом случае не стоит полагаться исключительно на пароль, каким бы длинным и качественным он не был.

Совет №4: Согласовывайте требования

Сборка безопасного кода происходит не в редакторе. Когда руководители составляют черновой вариант требований и обсуждают их с разработчиками, каждому необходимо серьезно подумать, к каким проблемам может в будущем привести каждое требование.

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

Совет №5: Добавляйте задержки в код

Многие атаки основаны на методе грубой силы. Может потребоваться триллион итераций, но компьютер не отреагирует. Некоторые боты считывают данные из БД, отправляя миллионы запросов. Остальные перебирают всевозможные варианты паролей, пока не угадают.

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

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

Совет №6: Используйте шифрование чаще, чем вам кажется необходимым

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

Что непостижимо для вас - то непостижимо и для хакеров. Шифрование личных данных перед записью их в БД избавит вас от переживаний о самой БД, базовой операционной системе и отчасти о гипервизоре.

Правильная доза шифрования не обязательно урезает функциональность. Кроме того, дополнительная защита - тоже полезная фича.

Совет №7: Создавайте преграды

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

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

Совет №8: Используйте протестированные библиотеки

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

Совет №9: Используйте внутренние API

Один из первых уроков, которые получают программисты - разбиение кода на модули и осуществление связи между ними через API. Этот метод играет архиважную роль для безопасности, ведь API упрощает проверку взаимодействий, поиск дыр и устранение проблем. Модули можно исследовать отдельно, а результаты - объединить.

Имеет смысл также создать внутренние подмодули, потому что части анализировать легче, чем целое.

Совет №10: Привлекайте внешних аудиторов к критическому анализу кода

Каждый из нас может воспользоваться редактором. Если предприятие инвестирует в надежную базу установленного оборудования, то должно вкладывать и в проверки кода. Таким образом можно выявить дефекты и получить советы по улучшению кода.

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

Совет №11: Подружитесь с анализаторами кода

Хотя анализаторы кода не такие умные, как человек, не стоит списывать их со счетов. В конце концов, они усердны, не устают, не скучают, не хотят пить и есть.

Анализаторы кода вроде FindBugs, разработанного в Университете Мэриленда, обнаруживают типичные ошибки. Большинство из них не связаны с безопасностью, но некоторые крайне опасны.

Совет №12: Ограничьте привилегии

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

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

Совет №13: Смоделируйте угрозу

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

Иногда полезно подумать и представить, кому могут понадобиться ваши данные. А потом проектировать и реализовать систему, учитывая возможность атаки.

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

Совет №14: Доверие - понятие двухстороннее

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

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

Совет №15: Будьте в курсе последних угроз

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

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

Совет №16: Глубокое исследование принесет свои плоды

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

Не жалейте времени и денег на книги, ведь так вы получите ценные знания от самых высокооплачиваемых консультантов. Книга, которая стоит $200 или $300 покажется безумно дорогой, но за час консультант берет $500 и настаивает на минимальном 20-часовом курсе.

Совет №17: Самообучайтесь

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

Комментариев нет:

Отправить комментарий