Почему безопасность через неясность – плохая идея?

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

Это только я, или это перебор? Каковы альтернативы?

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

Как упомянуто в @ ThomasPadron-McCarty ниже в комментарии ниже:

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

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

Obscurity никогда не следует использовать в качестве альтернативы надлежащим методам безопасности.

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

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

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

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

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

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

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

Интересный материал.

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

Кроме того, дополнительное шифрование потребует дополнительных накладных расходов.

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

Лучшие альтернативы безопасности – устранение потенциальных недостатков вашего кода, таких как принудительные входы для предотвращения инъекционных атак.

Одним из факторов является способность восстанавливаться после нарушения безопасности. Если кто-то узнает ваш пароль, просто перезагрузите его. Но если кто-то раскроет вашу неясную схему, вас будут звать.

Использование безвестности, поскольку все эти люди согласны, это не безопасность, а покупка времени. Тем не менее, наличие приличной системы безопасности реализовано, тогда добавление дополнительного слоя неясности по-прежнему полезна. Допустим, завтра кто-то найдет непревзойденную трещину в службе ssh, которая не может быть исправлена ​​немедленно.

Как правило, я реализовал в доме … все публичные серверы выставляют только необходимые порты (http / https) и ничего больше. Затем один публичный сервер будет иметь ssh, который подвергнется воздействию интернета на некотором неясном порту с высоким номером и настройке триггера сканирования порта, чтобы заблокировать любые IP-адреса, которые пытаются его найти.

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

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

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

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

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

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

Чтобы сделать это, вы должны быть уверены во всем, кроме пароля. Обычно это означает использование стандартного криптоанализа, на который смотрели многочисленные эксперты. Любой может создать шифр, который они не могут сломать, но не все могут сделать шифр Брюс Шнайер не может сломаться. Поскольку существует основательное отсутствие теоретических оснований для защиты шифров, безопасность шифрования определяется тем, что многие очень умные и знающие люди пытаются придумать атаки, даже если они не практичны (атаки на шифры всегда улучшаются , не хуже). Это означает, что криптоалгоритм должен быть широко известен. У меня очень большая уверенность в стандарте Advanced Encryption Standard, и почти никто в патентованном алгоритме Джо не написал и не запутался.

Однако были проблемы с реализацией криптоалгоритмов. Легко нечаянно оставлять отверстия, в которых ключ может быть найден, или другие промахи. Это произошло с альтернативным сигнатурным полем для PGP и слабостями SSL, реализованными на Debian Linux. Это даже случилось с OpenBSD, который, вероятно, является наиболее безопасной операционной системой, доступной (я думаю, что за два года это может быть до двух эксплойтов). Поэтому это должно быть сделано уважаемой компанией, и мне было бы лучше, если бы реализации были с открытым исходным кодом. (Закрытый источник не остановит определенного атакующего, но для случайных хороших парней окажется труднее найти дыры, которые нужно закрыть).

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

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

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

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

Продукты, которые полагаются на свою безопасность на «черный ящик», не могут воспользоваться преимуществами такого теста. Конечно, быть «черным ящиком» всегда вызывает подозрение (часто оправданное), что они все равно не выдерживают такого контроля.

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

Помимо того, что бит семантики и выбор nit, STO (Безопасность через безвестность), очевидно, плох в любом случае, когда вам нужна реальная безопасность. Однако могут быть случаи, когда это не имеет значения. Я часто использую XOR для текстового файла, который я не хочу читать. Но мне все равно, если они это сделают, я бы предпочел, чтобы его не читали. В этом случае это не имеет значения, и XOR-панель является прекрасным примером простого поиска STO.

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

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

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

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

Если ОС – Windows, посмотрите на использование API защиты данных (DPAPI). Это не безопасность безвестности и является хорошим способом хранения учетных данных для автономного процесса. Как почти все говорят здесь, безопасность через неясность не дает вам большой защиты.

http://msdn.microsoft.com/en-us/library/ms995355.aspx

http://msdn.microsoft.com/en-us/library/ms998280.aspx

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

Как было показано снова и снова, если ваша единственная защита заключается в том, что «никто не знает, что у задней двери / ошибка / эксплойт есть», тогда все, что требуется, – это один человек, который наткнется на него, и через несколько минут сотни людей будут знать. На следующий день, почти все, кто хочет знать, будут. Уч.

  • Шифрование файлов cookie в ASP.NET
  • Почему при использовании функции Non-Random IV с режимом CBC существует уязвимость?
  • Java - шифрование / дешифрование имени пользователя и пароля из файла конфигурации
  • Фундаментальное различие между алгоритмами Hashing и Encryption
  • Должен ли я налагать максимальную длину на пароли?
  • Давайте будем гением компьютера.