Почему безопасность через безвестность-плохая идея? [закрытый]
недавно я столкнулся с системой, в которой все соединения с БД управлялись подпрограммами, скрытыми различными способами, включая кодировку base 64, md5sums и различные другие методы.
Это только я, или это перебор? Каковы альтернативы?
14 ответов:
безопасность через безвестность будет хоронить ваши деньги под деревом. Единственное, что делает его безопасным, никто не знает, что она есть. Настоящая безопасность заключается в том, чтобы поместить его за замок или комбинацию, скажем, в сейф. Вы можете поставить сейф на углу улицы, потому что то, что делает его безопасным является то, что никто не может попасть внутрь него, но вы.
Как упоминалось @ThomasPadron-McCarty ниже в комментарии ниже:
Если кто-то узнает пароль, вы можете просто измените пароль, что очень просто. Если кто-то найдет место, нужно выкопать деньги и перевезти их куда-то еще, что гораздо больше работы. И если вы используете безопасность по неизвестности в программе, вам придется переписать программу.
неизвестность никогда не должна использоваться в качестве альтернативы надлежащим методам безопасности.
неизвестность как средство скрытие исходного кода для предотвращения копирования-это еще одна тема. Я довольно разделен на эту тему; я могу понять, почему вы можете захотеть это сделать, лично я никогда не был в ситуации, когда это было бы нужно.
безопасность через неизвестность-интересная тема. Это (справедливо) оклеветано в качестве замены эффективной безопасности. Типичный принцип в криптографии заключается в том, что сообщение неизвестно, а содержание-нет. Алгоритмы для encyrption обычно широко публикуются, анализируются математиками, и через некоторое время создается некоторая уверенность в их эффективности, но никогда нет гарантии, что они эффективны.
некоторые люди скрывают свои алгоритмы шифрования, но это считается опасной практикой, потому что тогда такие алгоритмы не прошли такой же тщательной проверки. Только такие организации, как АНБ, которые имеют значительный бюджет и штат математиков, могут уйти от такого подхода.
одним из наиболее интересных событий последних лет стал риск стеганография, который является практика скрывает сообщение в изображениях, звуковых файлов или некоторых других средств массовой информации. Самая большая проблема в стегоанализа определение того, есть ли сообщение или нет, делая эту безопасность через неясность.
в прошлом году я наткнулся на историю, которая исследователи рассчитывают мощность стеганографического канала но действительно интересная вещь об этом:
изучение стего-канала таким образом приводит к некоторым нелогичным результаты: например, в некоторых обстоятельства, удваивающие количество алгоритмы, ищущие скрытые данные могут увеличение емкость стеганографический канал.
интересные вещи.
основная причина, по которой это плохая идея, заключается в том, что она не устраняет основные проблемы, а просто пытается их скрыть. Рано или поздно, проблемы будут обнаружены.
кроме того, дополнительное шифрование потребует дополнительных накладных расходов.
наконец, чрезмерная неясность (например, использование контрольных сумм) делает обслуживание кошмаром.
лучшие альтернативы безопасности-это устранение потенциальных недостатков в вашем коде, таких как принудительные входы для предотвращения инъекции атаки.
один фактор возможность восстановления после нарушения безопасности. Если кто-то обнаружит ваш пароль, просто сбросьте его. Но если кто-то раскроет вашу тайную схему, вы обливаетесь из шланга.
использование неизвестности, как все эти люди согласны, это не безопасность, это покупка себе времени. Тем не менее, наличие достойной системы безопасности, реализованной затем, добавление дополнительного уровня неясности по-прежнему полезно. Допустим, завтра кто-то найдет непревзойденную трещину/дыру в службе ssh, которая не может быть исправлена немедленно.
Как правило я реализовал в дом... все общедоступные серверы предоставляют только необходимые порты (http / https) и ничего больше. Затем один общедоступный сервер будет иметь ssh, выставленный в интернет на каком-то неясном высоком пронумерованном Порту и настройке триггера сканирования портов, чтобы заблокировать любые IP-адреса, которые пытаются его найти.
безвестности имеет свое место в мире безопасности, но не как первая и последняя линия обороны. В приведенном выше примере я не получаю никаких атак скриптов/ботов на ssh, потому что они не хотят тратить время на поиск нестандартного порта службы ssh, и если они это сделают, их вряд ли найдут его до другого уровня безопасности и отрезает их.
все доступные формы безопасности на самом деле являются формами безопасности через неясность. Каждый метод увеличивает сложность и обеспечивает лучшую безопасность, но все они полагаются на некоторый алгоритм и один или несколько ключей для восстановления зашифрованных данных. "Безопасность через неизвестность", как большинство называют это, когда кто-то выбирает один из самых простых и простых алгоритмов взлома.
алгоритмы, такие как сдвиг символов легко реализовать и легко взломать, поэтому они являются плохая идея. Это, вероятно, лучше, чем ничего, но это, в лучшем случае, только остановит случайный взгляд на данных от легкого чтения.
в интернете есть отличные ресурсы, которые вы можете использовать, чтобы узнать обо всех доступных методах шифрования и их сильных и слабых сторонах.
безопасность заключается в том, чтобы впускать людей или не пускать их в зависимости от того, что они знают, кто они, или что у них есть. В настоящее время биометрия не очень хорошо находит, кто вы, и всегда будут проблемы с ней (считыватели отпечатков пальцев для тех, кто попал в тяжелую аварию, поддельные отпечатки пальцев и т. д.). Так что, на самом деле, большая часть безопасности заключается в том, чтобы запутать что-то.
хорошая безопасность заключается в том, чтобы держать вещи, которые вы должны держать в секрете до минимума. Если вы есть правильно зашифрованный канал AES, вы можете позволить плохим парням увидеть все, кроме пароля, и вы в безопасности. Это означает, что у вас есть гораздо меньшая область, открытая для атаки, и вы можете сосредоточиться на защите паролей. (Не то чтобы это тривиально.)
для того чтобы сделать это, вы должны иметь уверенность во всем, кроме пароля. Обычно это означает использование криптографии отраслевого стандарта, на которую смотрели многочисленные эксперты. Любой может создать шифр, который не сможет взломать, но не каждый может сделать шифр Брюс Шнайер не может сломать. Поскольку существует полное отсутствие теоретических основ для безопасности шифров, безопасность шифра определяется тем, что многие очень умные и знающие люди пытаются придумать атаки, даже если они не практичны (атаки на шифры всегда становятся лучше, никогда не хуже). Это означает, что алгоритм шифрования должен быть широко известен. У меня есть очень сильная уверенность в продвинутом стандарте шифрования, и почти нет в a проприетарный алгоритм Джо написал и запутал.
однако были проблемы с реализацией криптоалгоритмов. Легко непреднамеренно оставить отверстия, в которых можно найти ключ, или другое зло. Это произошло с альтернативным полем подписи для PGP и слабыми местами с SSL, реализованным на Debian Linux. Это даже случилось с OpenBSD, которая, вероятно, является самой безопасной операционной системой, доступной (я думаю, что это до двух эксплойтов за десять лет). Поэтому это должно быть сделано уважаемой компанией, и я бы чувствовал себя лучше, если бы реализации были с открытым исходным кодом. (Закрытый источник не остановит решительного атакующего, но это сделает его более трудным для случайных хороших парней, чтобы найти отверстия, которые будут закрыты.)
поэтому, если бы я хотел безопасности, я бы постарался, чтобы моя система была как можно более надежной, что означает, как можно более открытым, за исключением пароля.
многослойная безопасность по неизвестности поверх уже защищенной системы может помочь некоторые, но если система защищена, это не будет необходимо, и если она небезопасна, лучше всего сделать ее безопасной. Подумайте о безвестности, как о менее авторитетных формах "альтернативной медицины" - это очень вряд ли поможет, и хотя это вряд ли сильно повредит само по себе, это может сделать пациента менее вероятным, чтобы увидеть компетентного врача или специалиста по компьютерной безопасности, в зависимости от того.
наконец, я хотел бы сделать по собственной инициативе и бескорыстно разъем для Брюс Шнайер блог, а не более чем заинтересованный читатель. Я много узнал о безопасности от него.
один из лучших способов оценки, тестирования или улучшения продукта безопасности-это ударить по нему большой умной группой сверстников.
продукты которые полагаются для их безопасности На быть "черным ящиком" не могут иметь преимущество этого вида теста. Конечно, быть "черным ящиком" всегда вызывает подозрение (часто оправданное), что они все равно не выдержат такого рода проверки.
Я утверждал в одном случае, что защита паролем-это действительно безопасность через неизвестность. Единственная безопасность, о которой я могу думать, что это не будет STO, - это какая-то биометрическая безопасность.
кроме того, что немного семантики и NIT picking, STO (безопасность через неясность), очевидно, плохо в любом случае, когда вам нужна реальная безопасность. Однако могут быть случаи, когда это не имеет значения. Я часто буду XOR pad текстовый файл, который я не хочу, чтобы кто-то читал. Но мне действительно все равно, если они это сделают, я бы просто предпочитаю не читать. В этом случае это не имеет значения, и XOR pad является прекрасным примером простого поиска STO.
Это почти никогда не хорошая идея. Это то же самое сказать, это хорошая идея, чтобы ездить без ремня безопасности? Конечно, вы можете найти некоторые случаи, когда это подходит, но anwser из-за опыта кажется очевидным.
слабое шифрование будет сдерживать только наименее мотивированных хакеров, поэтому оно не бесполезно, оно просто не очень ценно, особенно когда доступно сильное шифрование, такое как AES.
безопасность через неизвестность основана на предположении, что вы умны, а ваши пользователи глупы. Если это предположение основано на высокомерии, а не на эмпирических данных, то ваши пользователи-и хакеры-определят, как вызвать скрытый метод, открыть несвязанную страницу, декомпилировать и извлечь обычный текстовый пароль от .dll и др.
тем не менее, предоставление полных метаданных пользователям не является хорошей идеей, и затенение-это совершенно правильный метод, если вы поддерживаете его с помощью шифрования, авторизации, аутентификации и всех этих других принципов безопасности.
Если ОС Windows, посмотрите на использование API защиты данных (DPAPI). Это не безопасность по неизвестности,а хороший способ хранения учетных данных для автоматического процесса. Как почти все говорят здесь, безопасность через неясность не дает вам максимальную защиту.
один момент, который я должен добавить, который еще не был затронут, - это невероятная способность интернета разбивать безопасность через неизвестность.
Как было показано снова и снова, если ваша единственная защита заключается в том, что "никто не знает, что задняя дверь/ошибка/эксплойт есть", то все, что нужно, - это один человек, чтобы наткнуться на него, и в течение нескольких минут сотни людей узнают. На следующий день, почти все, кто хочет знать, будет. Ай.