Знание черной шляпы для программистов с белой шляпой

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

В какой степени, по вашему мнению, честный программист должен знать методы вредоносных программистов?

Ответ 1

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

Мы действительно очень серьезно относились к образованию разработчиков, и мы предоставляли как можно больше групп разработчиков как базовую подготовку в области безопасного развития. Мышление о безопасности действительно требует сдвига в мышлении от нормального развития, поэтому мы попытаемся заставить разработчиков задуматься о том, как быть в порядке вещей. Один из опоры, который мы использовали, был одним из этих домашних сейфов с цифровой клавиатурой. Мы бы позволили разработчикам изучить его внутри и снаружи, чтобы попытаться найти способ взломать его. (Решение заключалось в том, чтобы надавить на ручку, давая сейфу острый bash сверху, что заставило бы болт отскакивать от его spring в соленоиде.) Хотя мы не давали бы им конкретных черно- мы поговорим об ошибках внедрения, которые вызывают эти уязвимости, особенно о тех вещах, с которыми они, возможно, раньше не встречались, например, переполнения целого числа или компиляторы, оптимизирующие вызовы функций (например, memset для очистки паролей). Мы опубликовали ежемесячный информационный бюллетень по безопасности, который предложил разработчикам выявить ошибки, связанные с безопасностью, в небольших образцах кода, что, безусловно, показало, сколько они пропустит.

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

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

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

Ответ 2

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

Ответ 3

Я буду немного еретическим и выхожу на конечность и скажу:

  • Вам действительно нужно поговорить с sysadmin/сетевые пользователи, которые защищают их машин. Эти люди ежедневно разбираются с концепцией взломов и всегда ищут потенциальных эксплойтов, которые будут использоваться против них. По большей части игнорируйте "мотивационный" аспект того, как думают злоумышленники, поскольку дни "взлома за известность" давно прошли. Сосредоточьтесь на методологии. Компетентный администратор сможет легко это продемонстрировать.

Когда вы пишете программу, вы представляете, что (надеюсь) бесшовный, гладкий интерфейс для ${any-else-accepts-your-programs-I/O}. В этом случае это может быть конечный пользователь, или это может быть другой процесс на другой машине, но это не имеет значения. ВСЕГДА полагаем, что "клиент" вашего приложения потенциально враждебен, независимо от того, является ли он машиной или человеком.

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

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

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

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

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

Ответ 4

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

Ответ 5

В какой степени, по вашему мнению, честный программист должен знать методы вредоносных программистов?

Вам нужно знать больше, чем они.

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

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

alt text http://ecx.images-amazon.com/images/I/51rqNSV141L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg alt text http://ecx.images-amazon.com/images/I/519BX6GJZVL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

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

Ответ 9

Одно слово предостережения: Состояние штата Орегон против Рэндала Шварца.

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

Вы несете ответственность за то, чтобы знать, как можно взломать собственное программное обеспечение, и нести ответственность за постоянное обновление программного обеспечения сторонних разработчиков. Было бы неплохо иметь план экстренной помощи для борьбы с нападением, особенно если вы являетесь высокопрофессиональной или высокоценной целью. Некоторые места захотят немедленно закрыть отверстие, но наш сайт, как правило, оставляет определенные отверстия открытыми, чтобы помочь правоохранительным органам поймать преступников. Команда ИТ-безопасности время от времени объявляет о том, что она будет проводить сканирование портов, чтобы SA не беспокоилась об этом.

Ответ 10

Дизайн для зла. "Когда добро глупо, зло всегда будет торжествовать".

Короче говоря, если вы не думаете, как преступник, это не значит, что преступники не будут.

Ответ 11

Я лично не вижу технической разницы. Конечно, мотивы разные, но техническая игра такая же. Ему нравится спрашивать, какую войну нужно знать о "лакомствах".

Ответ - все это, даже если они не активно практикуют его.

Ответ 12

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

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

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

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

Ответ 13

Один навык, который часто упускается, - это социальная инженерия.

Многие люди просто не узнают, когда их связывают. В предыдущей компании VP провела тест, имея трех (женщин) временных сотрудников в конференц-залах, которые вызывают программистов и системных администраторов, и работают из script, чтобы попытаться заставить кого-то предоставить доступ или открыть пароли. Каждый из темпов получил доступ к чему-то в первый час звонков.

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

Ответ 14

Один из методов, которым нужно научиться White Hats, - это проверить/смягчить/подумать с точки зрения социальной инженерии, потому что самая большая угроза безопасности - люди.

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

Ответ 15

мы, белые шляпы и серые шляпы, должны быть хороши на миллион вещей, эти черные шляпы и skiddies только должны преуспеть в одной вещи

Ответ 16

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

Ответ 17

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

Если вам интересно защитить свой код от взлома/злоупотребления/etc. вы потратите слишком много времени на это. Просто купите пакет, чтобы защитить основы и просто двигайтесь дальше.

Ответ 18

Вам нужно понять методы использования "плохих парней", поэтому некоторое понимание является обязательным.

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

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

Ответ 19

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

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

Ответ 20

2 стороны одной и той же монеты. Помимо намерения - какой вопрос? Те же навыки, различная реализация.

Ответ 21

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

Поэтому вам не нужно знать, что "черный чек" должен быть защищен...

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