Відповідно до коментаря, який я виголосив на запитання:
один важливий момент був майже затьмарений майже всіма ... Моя початкова реакція була дуже схожа на @Michael Brooks, поки я не зрозумів, як @stefanw, що питання тут порушено вимоги , але це те, що вони є.
Але тоді мені сталося, що це може бути навіть не так! Тут відсутня точка - невимовна вартість активів програми. Простіше кажучи, для системи з низьким значенням цілком захищений механізм аутентифікації, що включає весь процес, буде надмірним і неправильним вибором безпеки.
Очевидно, що для банку "найкращі практики" є обов'язковими, і немає ніякого способу етичного порушення CWE-257. Але легко подумати про системи низької вартості, де це просто не варто (але простий пароль все-таки потрібен).
Важливо пам’ятати, справжня експертиза безпеки полягає у пошуку відповідних вигод, а не в догматичному розливі «найкращих практик», які кожен може читати в Інтернеті.
Як такий, я пропоную інше рішення:
Залежно від вартості системи та ТІЛЬКО ЯКЩО система належним чином має низьку вартість без «дорогого» активу (сама ідентифікація, включена), І є дійсні бізнес-вимоги, які роблять належний процес неможливо (або досить складно / дорого), І клієнт усвідомлює всі застереження ...
Тоді може бути доречним просто дозволити реверсивне шифрування, без спеціальних обручів, щоб проскочити через них.
Я зупиняюсь лише кажу, що взагалі не заважати шифруванню, тому що це дуже просто / дешево реалізувати (навіть з огляду на пропускне управління ключами), і це НЕЧЕМУ захищає (більше, ніж витрати на його реалізацію). Крім того, варто переглянути, як надати користувачеві оригінальний пароль, будь то електронною поштою, відображенням на екрані тощо.
Оскільки тут припущення, що значення викраденого пароля (навіть у сукупності) досить низьке, будь-яке з ці рішення можуть бути дійсними.
Оскільки триває жвава дискусія, насправді РІЗНОВІ жваві дискусії, у різних публікаціях та окремих темах коментарів я додам деякі пояснення та відповім на деякі дуже хороші моменти, які були порушені в інших місцях тут.
Для початку, я думаю, що всім тут зрозуміло, що дозволяти отримати оригінальний пароль користувача - це погана практика, і взагалі - не гарна ідея. Це зовсім не спірне ...
Далі я наголошу, що в багатьох, найестократніших ситуаціях - це дійсно неправильно, навіть недобросовісно, гидко і негарно .
Однак суть питання полягає в принципі , чи існує будь-яка ситуація, коли це не потрібно буде забороняти, і якщо так, то як це зробити найбільш правильним чином, відповідним ситуації .
Тепер, як згадували @Thomas, @sfussenegger і мало хто, єдиний правильний спосіб відповісти на це питання - це зробити ретельний аналіз ризику будь-якої заданої (або гіпотетичної) ситуації, щоб зрозуміти, про що йде мова, наскільки це варто захистити та які інші пом'якшення існують для забезпечення цього захисту.
Ні, це НЕ казкове слово, це один з основних, найважливіших інструментів професіонала безпеки. Найкращі практики хороші до певного моменту (як правило, як рекомендації для недосвідчених та хакі), після цього береться продуманий аналіз ризику.
Знаєте, це смішно - я завжди вважав себе одним із фанатиків із безпеки, і я якось перебуваю на протилежному боці тих так званих "експертів з безпеки" ... Ну, правда - бо я фанатик, і справжній експерт із безпеки в реальному житті - я не вірю в розслідування догм (або найкращих практик) БЕЗ цього найважливішого аналізу ризиків .
"Остерігайтеся ревника безпеки, який швидко застосує все до пояса інструментів, не знаючи, перед чим захищається справжня проблема. Більше безпеки не обов'язково прирівнюється до доброї безпеки".
Аналіз ризиків та справжні фанатики безпеки вказували б на розумніший компроміс на основі вартості / ризику, заснований на ризику, потенційній втраті, можливих загрозах, додаткових пом'якшеннях тощо. Будь-який "експерт з питань безпеки", який не може вказати на обґрунтований аналіз ризику як на Основа для їхніх рекомендацій або підтримка логічних ходів, але натомість вважають за краще носити догми та КВС, навіть не розуміючи, як проводити аналіз ризику, - це нічого, однак Хаки безпеки, і їхня експертиза не варта туалетного паперу, на який вони надрукували.
Дійсно, саме так ми отримуємо смішність, що полягає в безпеці аеропорту.
Але перш ніж ми поговоримо про відповідні компроміси, які слід здійснити у цій СИТУАЦІЇ, давайте подивимось на очевидні ризики (очевидні, оскільки у нас немає всієї основної інформації щодо цієї ситуації, ми всі гіпотезуємо - оскільки питання полягає в тому, що гіпотетично ситуація може виникнути ...)
Припустимо, система НИЗЬКОЇ ЦІННОСТІ, але не настільки дрібна, що це доступ для громадськості - власник системи хоче запобігти випадковій себе, але "висока" безпека не настільки важлива, як простота використання. (Так, це законний компроміс з ACCEPT ризиком того, що будь-який досвідчений сценарій-малюк може зламати сайт ... Зачекайте, зараз APT не в моді ...?)
Наприклад, скажімо, я влаштовую простий сайт для великого сімейного зібрання, що дозволяє кожному замислитись над тим, куди ми хочемо поїхати в цю подорож у цьому році. Мене менше турбує якийсь анонімний хакер або навіть двоюрідний брат Фред, що притискається до неодноразових пропозицій повернутися до озера Вантанамананабікілікі, так як я про тетку Ерма, яка не зможе ввійти, коли їй потрібно. Тепер, тітка Ерма, будучи фізиком-ядерником, не дуже добре запам’ятовує паролі чи взагалі навіть не користується комп’ютерами… Тому я хочу зняти всі можливі для неї тертя. Знову ж таки, я НЕ турбуюся про хаки, я просто не хочу дурних помилок неправильного входу - я хочу знати, хто йде, і що вони хочуть.
У всякому разі.
Тож які наші основні ризики тут, якщо ми симетрично шифруємо паролі, замість того, щоб використовувати односторонній хеш?
- Виявляє себе за користувачів? Ні, я вже прийняв цей ризик, не цікаво.
- Злий адміністратор? Ну, можливо ... Але знову ж, мені байдуже, чи хтось може себе представити іншому користувачеві, ВНУТРІШНІЙ чи ні ... і все одно злий адміністратор отримає ваш пароль, незважаючи ні на що - якщо ваш адміністратор пішов погано, його гра все одно.
- Ще одне питання, яке було порушено, - це те, що особистість насправді ділиться між кількома системами. Ах! Це дуже цікавий ризик, який потребує уважного огляду.
Дозвольте мені почати з твердження , що це не реальні особистості Thats загальні, швидше за доказ , або засвідчення справжності. Гаразд, оскільки загальний пароль фактично дозволить мені ввійти до іншої системи (скажімо, мого банківського рахунку чи gmail), це фактично однакова ідентичність, тому це просто семантика ... За винятком того, що це не так . У цьому сценарії ідентичність керується окремо кожною системою (хоча можуть бути сторонні системи ідентифікаторів, такі як OAuth - все-таки її відокремленість від ідентичності в цій системі - докладніше про це пізніше).
Таким чином, основна суть ризику тут полягає в тому, що користувач охоче вводить свій (той самий) пароль у кілька різних систем - і тепер я (адміністратор) або будь-який інший хакер мого сайту отримаю доступ до паролів тітки Ерми для сайт ядерної ракети.
Хммм.
Вам щось тут здається?
Це повинно.
Почнемо з того, що захист системи ядерних ракет не є моєю відповідальністю , я просто будую майданчик для виїздів із сімейства фракінових (для моєї родини MY). То чия відповідальність це? Гм ... А як щодо системи ядерних ракет? Дух.
По-друге, якщо я хотів вкрасти чийсь пароль (той, хто, як відомо, неодноразово використовує один і той же пароль між захищеними сайтами, а не дуже захищеними) - чому б мені не хотілося зламати ваш сайт? Або бореться з вашим симетричним шифруванням? Goshdarnitall, я можу просто створити власний простий веб-сайт , дозволити користувачам підписатися, щоб отримувати ДУЖЕ ВАЖЛИВІ НОВИнки про все, що вони хочуть ... Puffo Presto, я "вкрав" їх паролі.
Так, освіта користувачів завжди повертається, щоб вкусити нас в hienie, чи не так?
І ви нічого не можете з цим зробити ... Навіть якщо ви МОЖЕТЕ хешувати свої паролі на своєму сайті, і робити все інше, про що може придумати TSA, ви додали захист до свого пароля НЕ ОДНО , ЩО вони збираються зберегти безладно вставляти свої паролі на кожен сайт, на який вони стикаються. НЕ ДАЙТЕ НЕ СПІВИТИ спробу.
Інакше кажучи, ви не володієте своїми паролями , тому перестаньте намагатися діяти так, як ви.
Отже, мої шановні експерти з питань безпеки, як стара жінка давала запитання у Венді: "ДЕ РИЗИК?"
Ще кілька моментів у відповіді на деякі питання, підняті вище:
- CWE не є законом, не регулюванням, ані стандартом. Це сукупність загальних слабких місць , тобто зворотного "Кращих практик".
- Питання спільної ідентичності є актуальною проблемою, але неправильно зрозумілою (або неправильно представленою) з боку наявних тут. Це питання обміну ідентичністю само по собі (!), А не про зламання паролів на малоцінних системах. Якщо ви ділитесь паролем між малоцінною та високоцінною системою, проблема вже є!
- До речі, попередній пункт насправді вказував би ПРОТИ на використання OAuth тощо, як для цих малоцінних систем, так і для високоцінних банківських систем.
- Я знаю, що це був лише приклад, але (на жаль) системи ФБР насправді не є найбільш захищеними. Не зовсім як сервери блогу вашої кішки, але вони не перевершують деякі більш безпечні банки.
- Розділене знання або подвійне управління ключами шифрування НЕ відбувається тільки у військових, адже PCI-DSS тепер вимагає цього в основному від усіх продавців, тому його вже не так далеко (якщо значення це виправдовує).
- Для всіх тих, хто скаржиться, що подібні питання - це те, що професія розробника виглядає так погано: саме такі відповіді роблять професію безпеки ще гіршою. Знову ж, аналіз ризиків, орієнтований на бізнес - це те, що потрібно, інакше ви робите себе марними. Крім того, що помиляюся.
- Я думаю, саме тому не годиться просто брати звичайного розробника і кидати на нього більше обов'язків з безпеки, не навчаючись думати інакше і шукати правильні компроміси. Без образи, для тих, хто ви тут, я все за це - але більше навчання в порядку.
Вау. Який довгий пост ...
Але щоб відповісти на ваше первісне запитання, @Shane:
- Поясніть замовнику правильний спосіб робити речі.
- Якщо він все ж наполягає, поясніть ще дещо, наполягайте, сперечайтесь. Киньте істерику, якщо потрібно.
- Поясніть БІЗНЕС-РИЗИК йому. Деталі хороші, цифри кращі, демонстрація в прямому ефірі, як правило, найкраща.
- ЯКЩО ВИНАГАЄ наполягати та наводити вагомі ділові причини - саме час надати вам судовий виклик:
чи цей веб-сайт недоцільний? Це справді ділова справа? Це досить добре для вас? Чи немає інших ризиків, які ви можете врахувати, які переважали б діючі причини бізнесу? (І звичайно, клієнт НЕ шкідливий сайт, але це так.
Якщо так, просто йдіть прямо вперед. Не варто витрачати зусиль, тертя та втраченого використання (у цій гіпотетичній ситуації), щоб встановити необхідний процес. Будь-яке інше рішення (знову ж таки, у цій ситуації) - це поганий компроміс.
Отже, підсумок та фактична відповідь - зашифруйте його за допомогою простого симетричного алгоритму, захистіть ключ шифрування сильними ACL та, можливо, DPAPI тощо, задокументуйте його та змусіть клієнт (хто є достатньо старшим, щоб прийняти це рішення). це.