Jump to content
Калькуляторы

"Железный" брелок для ssh ключей

Давно чувствовал себя некомфортно храня приватные ключи на сервере, так как их украсть с помощью трояна - "как два пальца".

Если рассматривать всякие смарткарты, Yubikey и прочую лабуду - то во первых попробуй их еще купи(очень многие не хотят продавать крипто в РФ или Ливан), во вторых это кот в мешке, начиная от вероятных бекдоров, сложностей с экспортом из США и импортом в РФ, заканчивая тем, что большинство ограничивается одним ключиком и обычно не выше RSA2048. Опять же - смарткарты это сплошной ASN и TLV, в которых неизменно будут находить баги с помощью которых вероятно можно "выдернуть" ключи софтово.

Есть gnuk- но он мягко говоря странный, и традиционно отказывается от RSA2048, т.к. "медленно" и т.п.

Наваял код под платку, которая чуть больше ардуинки и в китае стоит ~$5, если использовать "официальную" флешу - можно хранить около 3-4 ключа RSA4096. Если использовать "неофициальную" область памяти - то около 16 ключей.

Работает практически напрямую с кастомным ssh agent

PoC есть, конечно с кучей ограничений - пока один RSA4096 ключ (сугубо т.к. пока еще не допилил код выбора ключа :) )

Запланированный функционал:

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

Есть еще аппаратные side-channel attacks - но опять же это все сложно, и в принципе для тех кому это критично - решаемо софтово.

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

Есть минус - на максимальном RSA4096 - логин занимает 10-15 секунд, т.к. подпись таким ключом дело небыстрое для несчастного 72mhz Cortex-M3

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

 

Вероятно прошивка и кастомный ssh agent станут opensource, но пока я еще над этим размышляю.

Ваше мнение, нужно ли это?

Для оценки размеров - где-то так (только плата отличается, тут stm32f0, у меня stm32f1):

 

Special-offer-STM32-development-board-STM32F051C8T6-core-plate-minimum-system-board-of-STM32F0-ARM-.jpg

Share this post


Link to post
Share on other sites

На ебее эти платки $2-$3, продается их валом - это почти самая популярная девборда на этом типе процессоров.

Например вот: https://www.ebay.com/itm/1pcs-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-Arduino/201414966215?epid=10003269727&hash=item2ee5447bc7:g:X-oAAOSw6BtVVACk

Неудобство в том, что для них желателен корпус, но любой 3d принтер эту проблему решит. (или просто в термоусадку)

Ну и для первоначальной прошивки нужен человек с программатором (который тоже кстати стоит копейки).

Share this post


Link to post
Share on other sites

Мне лично  из железа интересно вот что.

1) Есть KeePass для Android

2) При каких-то особо шаманских телодвижениях оно может делать вид, что телефон - это USB клавиатура и набирать пароли на компьютере.

Я, кстати, до сих пор не понимаю, почему эмуляция USB клавиатуры - не штатная функция смартфонов, вот так шаманить надо с мелкими шансами на успех.

3) Аналогично - можно притвориться Bluetooth клавиатурой. Шансов на успех больше, но тоже "фи".

4) Для решения этой проблемы был изобретен некий InputStick, которой keepass тоже умеет пользоваться.

Нетрудно заметить, что она беспроводное. Еще раз "фи".

 

Так вот, хочется железку, которая делает то же самое, но проводное. Причем лучше даже не USB железку, а, скажем, через звуковой джек (DTMF или чем-то подобным пускай в проводе свистит).

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

 

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

 

 

А если чисто софтово - то для ssh теоретически возможен такой кривой и хрупкий способ

1) Запускаем ssh агента на смарте

2) При помощи bluetooth или USB tethering сооружаем сеть комп-смарт, по которой и пробрасываем соединение агента. Т.е. удаленный комп<->локальный комп<->смарт.

Share this post


Link to post
Share on other sites

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

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

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

В донгле пароль дешифруется и отправляется по эмулятору клавиатуры на комп.

 

Share this post


Link to post
Share on other sites

20 минут назад, nuclearcat сказал:

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

Соответственно приватный ключик вполне может украсть троян, который напичкан эксплоитами для получения рута (ну или хуже если телефон уже зарутован).

 

А считаю смарт, который в нормальном состоянии отключен от сетей и подключается к ним только по большим праздникам, для апдейта софта (которого все равно обычно нет), вполне безопасным для целевого использования.

А именно - чтобы троян на компе всю связку паролей/ключей вместе с passphrase к ней не спер. И чтобы передачи пароля через буфер обмена (парольница->проложение) не было. Плюс удобство использования - не надо устраивать процесс синхронизации связки между разными устройствами.

 

Если нужно будет круче - тогда уж 'настоящий' токен надо брать.

Share this post


Link to post
Share on other sites

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

Выходит те же 2 бакса и все равно намного безопаснее смарта.

Share this post


Link to post
Share on other sites

16 минут назад, nuclearcat сказал:

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

Выходит те же 2 бакса и все равно намного безопаснее смарта.

С интерфейсом проблема - у меня паролей много. Смарт нужен именно для того, чтобы какой-то GUI был, не требующий установки чего-либо на самом компе. И да, в кармане не переносимо. А в чем небезопасность отключенного от сетей смарта - я так и не понял.

Share this post


Link to post
Share on other sites

1 час назад, alibek сказал:

Смарт не бывает отключен от сетей. Разве что в свинцовом бункере.

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

Случай, когда такую угрозу следует воспринимать всерьез, тоже требует 'настоящего' токена. 

Share this post


Link to post
Share on other sites

9 часов назад, nuclearcat сказал:

Вероятно прошивка и кастомный ssh agent станут opensource

То есть по-вашему это кто-то будет воспринимать всерьёз и доверять вам свои SSH-ключи, если оно не будет open-source?

ох лол.

Share this post


Link to post
Share on other sites

 Хранение всего и вся при себе. :) Решение простое, многие бухгалтерши носят всю бухгалтерию и ключи прямо в декольте, на флэкшках. Мужику видимо гульфик со стразами и 32Г флешкой пригодится. Или блатное кольцо типа для прохода в метро.

Share this post


Link to post
Share on other sites

Есть два варианта -

1)достаточный интерес и feedback чтобы проект стал opensource.

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

 

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

У одного огромная вероятность влететь в buffer overflow, и после этого ключи вытаскиваются элементарно, и перепроверить весь код - наврядли кто-то сможет. (Кстати из-за этого он еще и на дешевом железе не заработает).

У второго вроде бы как код открытый, но есть отдельный крипточип,который не позволяет сгенерить ключ самостоятельно. И если кто в теме, тот знает, чем это вылезло эстонцам.

 

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Кстати, а что за хрень с кастомным ssh-agentом, который, судя по тексту, отделен от прошивки? Как-то это никуда не вписывается, ssh-agent должен крутиться на девайсе и быть частью той самой прошивки, и не быть никаким кастомным. Если агент ставится на комп, то это мало чем от зашифрованных ключей на флэшке отличается, ну только менее безопасно. :) Или вы там, боже упаси, еще и крипто пишите?

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

Share this post


Link to post
Share on other sites

58 минут назад, ttttt сказал:

Кстати, а что за хрень с кастомным ssh-agentом, который, судя по тексту, отделен от прошивки? Как-то это никуда не вписывается, ssh-agent должен крутиться на девайсе и быть частью той самой прошивки, и не быть никаким кастомным. 

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

Share this post


Link to post
Share on other sites

7 часов назад, ttttt сказал:

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

И какую верификацию вам предоставит к примеру Yubikey? Думаете даст исходники и покажет HDL модель? :)

Или т.к. они верифицируются в NIST и подобных? Ну так эта верификация такова, что чтобы ее пройти, надо соответствовать их алгоритмам. А уже хорошо известно, что например в их алгоритме генерации ключей было заложена мина (Dual_EC DRBG). Причем такие верификаторы от преднамеренного ослабления средств никогда не откажутся, свеженький факап - CVE-2017-15361.

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

 

6 часов назад, Sergey Gilfanov сказал:

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

Даже еще проще. В типичном интерфейсе смарткарт обычно дофига всего наворочено, чтобы это было универсальным средством (а потом получаются сюрпризы в виде heartbleed, когда одна из мало кому нужных фич оказывается с сюрпризом), хотя когда я поколупал все это - на самом деле требуется лишь несколько криптографических операций с закрытым ключом. Конечно крипто я беру из проверенных источников, и сами функции таковы, что там очень сложно подать на вход такие данные, чтобы к примеру получить buffer overflow и утечку приватного ключа, но честно говорю - донгл подобного класса не рассчитан на защиту от side-channel атак и прочего, т.к. если владелец откроет ключ с явно подключенным к донглу оборудованием типа глитчера - то ему наврядли и смарткарта поможет, это уже клиника.

И все становится просто. Моя софтина вообще никаких сетевых функций не имеет, ее можно вообще изолировать от всего, единственное что она делает - открывает донгл (serial port) и слушает на unix socket и отвечает по ssh-agent протоколу (https://tools.ietf.org/html/draft-miller-ssh-agent-02), всякие упаковки распаковки структур из протокола ssh agent она делает на компе владельца, а на донгл передает криптографические запросы которые требуют работы с закрытым ключом - в самом упрощенном виде, по CDC Serial.

Share this post


Link to post
Share on other sites

6 часов назад, grifin.ru сказал:

А чем е-токены, ру-токены, джакарты вас не устраивают ?

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

А самое главное у них обычно потолок RSA2048.

 

7 часов назад, ttttt сказал:

Кстати, а что за хрень с кастомным ssh-agentом, который, судя по тексту, отделен от прошивки? Как-то это никуда не вписывается, ssh-agent должен крутиться на девайсе и быть частью той самой прошивки, и не быть никаким кастомным. Если агент ставится на комп, то это мало чем от зашифрованных ключей на флэшке отличается, ну только менее безопасно. :) Или вы там, боже упаси, еще и крипто пишите?

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

Если чуток доработать и добавить внешнюю клавиатуру для ввода пин кода и кнопку подтверждения запроса - спасет.

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

 

Share this post


Link to post
Share on other sites

Давай я тебя помучаю :)

 

0. А ты тоже слышал что ECDSA уже хана?)

1. Для настоящего параноика RSA4096 - очень мало, если посмотреть, то скажем 16к RSA соответствует ECDSA 512, типа по оценкам nist, да и вообще 4к маловатый запас.

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

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

4. А аппаратный генератор случайных чисел планируется там же?)

 

 

13 часов назад, Sergey Gilfanov сказал:
12 часов назад, Sergey Gilfanov сказал:

А считаю смарт, который в нормальном состоянии отключен от сетей и подключается к ним только по большим праздникам, для апдейта софта (которого все равно обычно нет), вполне безопасным для целевого использования.

Доверять что то андройду или яблоку бесполезно.

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

Share this post


Link to post
Share on other sites

2 минуты назад, Ivan_83 сказал:

Давай я тебя помучаю :)

 

0. А ты тоже слышал что ECDSA уже хана?)

1. Для настоящего параноика RSA4096 - очень мало, если посмотреть, то скажем 16к RSA соответствует ECDSA 512, типа по оценкам nist, да и вообще 4к маловатый запас.

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

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

4. А аппаратный генератор случайных чисел планируется там же?)

 

 

Доверять что то андройду или яблоку бесполезно.

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

0. Можно ссылку?

1. 4096 уже с большим трудом в микроконтроллерах. ECDSA планируется, его сделать несложно, но меня еще интересует Ed25519. Правда скорее всего вся эта радость не в одном донгле(если использовать самый дешевый), ресурсов маловато.

2. Ну, прошивка такова - что сколько ты ей дашь места для ключей - столько их и будет. Лично для себя я возьму эту платку, другой чип за $5 с 512кб флеша (вместо 64), сдую старый, поставлю новый, и все дела. А потом вообще свою платку запилю, с блекджеком и прочими удовольствиями.

3. По таймеру - читаешь мои мысли :) Электролит не поможет, типичный недорогой метод защиты - два конденсатора, от одного работаем, второй заряжается, и потом меняем, но все это уже выходит дороже. Эпоксидку снимают, лучше сделать толковый tamper detection. Но во всем этом огромный минус - удорожает устройство. Можно сделать отдельную сверхзащищенную версию, но ее доработка займет немалое время, а достойный анализ на уязвимости нашару никто делать не будет, намного вероятнее то, что за этот анализ заплатит тот, кто хочет украсть данные с железки.

4. Если для генерации ключей - ни в коем случае, при закрытой прошивке. С открытой - возможно, если сделать грамотно, при соответствующей обработке хешами и других источниках рандомных данных можно воспользоваться даже встроенным, но это должно быть прозрачно. Если по другим операциям(например генерация seed, но в данный момент это не требуется) - то максимум чиповый rng будет смешиватся с хостовым. Более-менее сносный генератор RNG это шум стабилитрона (но для него надо пилить отдельную схему), остальное - от лукавого.

 

Share this post


Link to post
Share on other sites

0. https://kiwibyrd.org/2016/10/07/1610/

1. Я понимаю что считать долго...

3. Ну дроссели ещё, считай LC фильтр собрать. Эпоксидку то снять можно, она скорее как пломба-предохранитель, чтобы было видно имел ли кто то физ доступ к флешке. Больше и не надо, ИМХО.

4. Я видел какие то открытые проекты такого.

Share this post


Link to post
Share on other sites

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

LC не поможет, еще и L будет работать как антенна :)

Да, но дорого и обычно отдельное устройство, т.е. сугубо для RNG.

Share this post


Link to post
Share on other sites

Там же написано, что якобы оно и без квантовых прекрасно может работать против ECDSA и скорее всего ed25519.

Для RSA потребуется по кванту на бит, если взять 16к то хватит ещё лет на 5-10, учитывая что на публике показали только вот 50 кубит, можно предположить что в кулуарах родили уже 256 так что половину ECDSA и ed25519 уже можно закапывать, даже без учёта того открытия на которое намекается в ссылке.

Я в ближайшее время планирую вернутся на rsa16к или даже 32к попробую, хоть с ними и приходится по 1-10 секунд ждать при коннекте пока посчитается, зато зачётный тролинг ссш брут ботов :)

(ecdsa тоже зачотно тролит - они обычно его не умеют и отваливаются сразу же)

 

А как тогда LC фильтры работают?)

К тому же фольга вокруг или что то по толще.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.