Security vs Cloud blog | Security

Security vs Cloud blog

Здесь найдете заметки по безопасности, облакам и предпринимательству

MCS 300 - безопасность в IoT и управление теплым полом

Как некто написал "не многие знают что буква S в аббревиатуре IoT означает Secure".
Воочию столкнулся с безопасностью в выпускаемых на рынок решениях IoT. 
Прикупил домой вот такой девайс для управления теплым полом по WiFi на кухне и балконе.


После установки я столкнулся с особенностями сурового российского IoT. 
Для начала выяснилось, что оные девайсы работают где-то день, и затем отваливаются от приложения. При этом Ping спокойно продолжает работать. Грешил на роутер, поменял настройки, поменял порты, наконец поменял роутер, но сказочный девайс всеравно требовал перезагрузки перед уходом из квартиры :) Хотя если выставить расписание, оно продолжало работать и после потери связи с ним.

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

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

Но на безопасности история не закончилась.
Через месяц работы внезапно обновилась прошивка устройств и они перестали отваливаться от сети. Я искренне поверил что разработчики пофиксили утечки, сделали какие-то очистки добы оно начало нормально работать, но оказалось они нашли универсальный способ. Руководствуясь принципом "Семь бед, один ресет" устройство перезапускалось каждый час, переподключалось к сети и спокойно работало дальше. И самое смешное, что такое решение действительно всех устроило тк постоянно устройство не нужно, а работоспособность в итоге была обеспечена. :)

PKI в .NET4 - базовые функции и возможности

По сегодняшней лекции использования инфраструктуры открытых ключей в .NET (2 курс) выкладываю первую презентацию.
Коротенько рассмотрены пространство имен System.Security.Cryptography и простые сценарии использования крипто-провайдеров. Вторую часть лекции выложу позже, скачать также можно здесь.


PKI_net4_base_functions.pdf (2,4MB)

SymmetricKey support is not available right now - JWT токены в ASP.NET vNext (beta 8)

Вот мучаешься два дня, чувствуешь себя дураком, а оказывается "SymmetricKey support is not available right now. Closing issue dup of #58".
Собственно о чем пост - в ASP.NET vNext DNX 5 (beta 8) есть JWT-токены. Но, Оказывается, использовать их с симметричной криптографией просто так не получится - по умолчанию нет поддержки SymmetricKey в SignatureProvider. 
Чтобы разрулить эту проблему, пр придется написать свой провайдер. Возмем основу AssymetricSignatureProvider и допишем поддердку MAC для SymmetricSignatureProvider. Что получилось  - в аттаче :)

SymmetricSignatureProvider_DNX5_beta8.zip (5,5KB)

Меняем парольв PFX/PKCS12-контейнере

Иногда всплывает элементарная задача - сменить или задать пароль на PFX-контейнер с сертификатом и ключем. И выливается это в запуск утилит OpenSSL из консоли. В общем из пушки по воробьям :)
При этом в .NET это делается всего за 3 шага.
Необходимо:
- Открыть PFX/PKCS12-контейнер с флагом, разрешающим экспорт закрытого ключа, указав старый пароль
- Вызвать метод Export с флагом X509ContentType.Pfx и новым паролем для получения нового контейнера в виде бинарного массива
- Сохранить массив на диск и вуаля - получаем новый контейнер.
При экспорте PFX-контейнера есть одна хитрость. Новый пароль задается с помощью класса SecureString. Для удобного получения объекта SecureString из обычной строки можно использовать небольшое расширение:

public static SecureString ToSecureString(this string input)
{
            if (string.IsNullOrWhiteSpace(input))
                return null;

            SecureString res = new SecureString();
            foreach (char c in input.ToCharArray())
                res.AppendChar(c);
            return res;
}

Само приложение с исходниками для изменения пароля на PFX-контейнеры в приложении

PFXChangePassword.zip (53,7KB)

Коротенько о PKI

Откуда пошла Инфраструктура Открытых Ключей? И почему именно Инфраструктура?
На самом деле появилась она самым логичнейшим способом - в результате эволюции. 
Вспомним Энигму и симметричные криптосистемы. Они стойкие, позволяют шифровать данные с огромной скоростью, но при большом числе абонентов приходятя использовать единые для всех ключи, иначе задача даставки ключевой инфомации становится нереальной. 
Например для 100 абонентов - нужно чуть меньше чем 100-факториал ключей. Блакнотов не хватит! :)
Значит приходится использовать общие ключи, а это значит теряется контроль. Стоит кому-то каким-либо способом получить ключ - он может читать любую переписку абонентов. Да и доказать, какая часть системы была скомпрометирована - не реально.
Когда появились ассиметричные криптосистемы ex RSA - ключи стали попарно независимы. Те это можно представить как почтовый ящик: Открытый ключ - номер дома и почтового ящика, а секртеный ключ - есть только у меня и позволяет мне этот ящит открыть.
Здесь на 100 абонентов нужно всего 100 пар ключей. 
Но и тут есть довольно банальные уязвимости. Открытый ключ должен доставляться доверенным способом или быть как-то проверяемым. Иначе мне могут подсунуть чужой ключ, я зашифрую данные для третьей строны, Они их прочтет, подправит и спокойно передаст дальше.
По аналогии с почтовым ящиком - если я пришел положить письмо, а кто-то взял и преписал номер ящика на свой. Я передам пимьо злоумышленнику, он его прочтет и уже потом может изменить и положить в ящик реального адресата.
Вот здесь и появляется Инфраструктура Открытых Ключей. 

Суть его проста - мы доставляем доверенно только 1 ключ нашего Главного Пользователя (Удостоверяющего Центра), а он заверяет все остальные ключи. И если мы получаем чей-то ключ то  начале проверяем его с помощью ключа УЦ.

На самом деле это объяснение на пальцах, и в PKI еще много интересныз и мощных инструментов, таких как политики, OID-ы, типы документов. 
Если интересно посмотреть как это все работает в картинках - в приложении презентация по введению в PKI :)

pki_one_day_introduction_lyubko.pdf (1,3MB)

Восстановление пароля для PFX/P12/PKCS12 контейнера

Забыв очередной раз вариацию пароля для PFX-файла для Пуш-уведомлений полез в студенческие лабораторки и выковорил небольшую софтинку для восстановления паролей для PFX/PKCS12 контейнеров.
Восстанавливает она их прямым перебором.
Понятно что способ подойдет только если пароль небольшой и Вы примерно знаете где искать, но этого, обычно, бывает достаточно. 
Программка собрана на .NET 4.5 в Visual Studio 2013 и доступна с исходными кодами

Суть работы приложения на этом скриншоте:


PFXPasswordRecovery.zip (64,3KB)