Filippo Valsorda из компании CloudFlare подготовил (https://blog.filippo.io/ssh-whoami-filippo-io/) заслуживающий внимания сервис, выдающий персональные данные пользователя (ФИО, email и т.п.) при выполнении команды "ssh whoami.filippo.io", без проведения какой-либо аутентификации. Некоторые восприняли данный сервис как демонстрацию неизвестной ранее уязвимости в OpenSSH, но на самом деле в реализации сервиса используются штатные особенности работы.В частности, при попытке соединения с сервером, ssh-клиент автоматически последовательно отправляет все имеющиеся открытые ключи пользователя - если очередной ключ не подошёл, отправляется следующий и т.д. В том числе отправляются открытые ключи, используемые для GitHub. Так как GitHub предоставляет доступ к открытым ключам пользователей, в сервисе whoami.filippo.io используется данная возможность и осуществляется сверка переданных в рамках текущего сеанса ключей с содержимым базы ключей GitHub. В случае совпадения ключа, загружаются и выводятся данные из профиля на GitHub.
Для запрета отправки всех открытых ключей с явной привязкой заданных ключей к хостам, в .ssh/config можно указать:
<font color="#461b7e">
IdentitiesOnly yes
Host github.com
IdentityFile ~/.ssh/id_rsa
</font>Исходные тексты сервиса можно загрузить здесь (https://github.com/FiloSottile/whosthere).
URL: https://news.ycombinator.com/item?id=10004678
Новость: http://www.opennet.me/opennews/art.shtml?num=42725
Это не баг, а просто особенность работы с ключами.
Но как вы догадались, Холмс?!В новости и говорится, что это "трюк", а не баг и не уязвимость.
"Это не баг, это фича" - пробурчал Тео, пересчитывая микрософтовские доллары.
А я, блин, не мог понять, как ssh определяет, который из моих ключей использовать при аутентификации. Так он, зараза, втыкает их все по очереди, пока какой-нибудь не подойдёт... Плятт.
> А я, блин, не мог понять, как ssh определяет, который из моих
> ключей использовать при аутентификации. Так он, зараза, втыкает их все по
> очереди, пока какой-нибудь не подойдёт... Плятт.Но ведь есть ssh_config где мало того что можно всё намертво привязать, так ещё и алиасы можно делать.
Хорошо написанная программа никогда и ничего не использует по умолчанию, а всегда ругается на не указанные настройки; здесь же, получается, по умолчанию начинает слать и перебирать ключи -- зашибись программисты там сидят, как в МС, прямо, которые рассылают по умолчанию из смартфонов пароли "друзьям" ;)
Да, имея твой открытый ключ, люди смогут разрешить тебе ходить на их серваки. Ты в опасносте.
Таки в опасносте. Ведь кто попало может записывать и анализировать твои посещения вплоть до полной деанонимизации (через тот же Гитхаб). Мелочь, а неприятно.
ну так заведи для дурьхаба отдельный ключ и не суй его больше никуда.
Это не поможет. Ведь SSH при переборе подсунет мой гитхабовский ключ на, к примеру, Битбакете. И последний будет знать, что вот этот аккаунт на нем, и тот аккаунт на Гитхабе - это аккаунт одного и того же человека. Даже если ключи я генерировал для них разные.
Положим, что способ, описанный в посте, поможет. Но почему он не задан по умолчанию? Ведь об "уязвимости" еще нужно узнать, прежде чем ее исправить. А где гарантии, что разработчики других граблей по умолчанию не положили? Изучать код? Читать мануалы? Для каждой программы? Жизни не хватит - все проверять. ИМХО ПО для безопасности, рассчитанное на обывателей, должно быть безопасным по умолчанию или хотя бы большими красными буквами предупреждать о рисках.
обыватели. ssh. отличная шутка, евгений ваганович!а мануалы, конечно, читать не надо. не барское это дело.
Никаких шуток. Чтобы пользоваться ssh не обязательно быть экспертом по криптографии. Достаточно быть рядовым программистом или админом локалхоста и знать пару команд.
А читать все мануалы от корки до корки - неоправданная (порой непозволительная) роскошь для занятых своим делом людей.
видишь ли, у «занятых своим делом людей» есть специальные сотрудники, которые настраивают им всё, что надо. а если таких сотрудников нет, то это гуаноконтора «нищеброд‐рога‐копыта». смешно читать про то, как работники таких контор рассуждают про «занятых своим делом людей».
И тем не менее, Кэп, западло в дефолтах в программе которая по части секурити - это фигово, да.Их таких хороших надо с LibreSSL объединить - два грабледрома найдут друг друга наконец.
> И тем не менее, Кэп, западло в дефолтах в программе которая по
> части секурити - это фигово, да.фигово. только вот в ssh я западла всё ещё упорно не вижу.
> фигово. только вот в ssh я западла всё ещё упорно не вижу.Действительно! Оно хреново защищает траффик сессии. Оно встает колом при нашествии стайки ботов, отсылает ВСЕ ключи кому попало. Но никаких проблем ты не видишь. Наверное, тебе надо бы купить очки? Или разобраться с "свое г-но не пахнет".
Замечательная программа, гули. Лажается там и тут в прямых обязанностях, зато умеет горбатый недоvpn, кривой портфорвард, кой-как качает файлы даже. Что у нас там насчет юниксвея то применительно к этому швейцарскому ножу с 120 лезвиями? Или в тренде только ругань системды? Вот это я и называю лицемерием и двойными стандартами.
есть мнение, что очки нужны тому, кто вместо «никакого западла» умудряется прочитать «никаких проблем».
> Или в тренде только ругань системды?Ну, несмотря на недостатки, сколько я не обновлял ssh оно ещё ни разу не превратило комп в незагружающийся кирпич без возможности что-либо понять и попробовать штатно как-то это исправить. И если с ssh что-то шло не так как я ожидал, то простым добавлением ключиков -v, чаще всего, удавалось понять в чем причина и как-то все исправить даже без гугления и досконального изучения вороха документации (а вот с кирпича как-то даже загуглить проблематично бывало).
А анонимность - вообще нифига не штатный режим работы в интернете. Хочешь анонимности - настраивай.
Нет, всего лишь хочу, чтобы программы делали то, что заявлено без таких совершенно необязательных побочных эффектов, как этот.
что ssh не делает из того, что заявлено?
> что ssh не делает из того, что заявлено?Оно делает то что нигде так по простому и громко не заявлено - шлет вообще все ключи кому попало. А вот это уже западло, а-ля скачка блобятины хромом без спроса.
> Оно делает то что нигде так по простому и громко не заявлено
> - шлет вообще все ключи кому попало. А вот это уже
> западло, а-ля скачка блобятины хромом без спроса.нет. совершенно разные вещи. тебе слово «публичный» в словосочетании «публичный ключ» ни на что не намекает?
> нет. совершенно разные вещи. тебе слово «публичный» в словосочетании «публичный
> ключ» ни на что не намекает?Публичный ключ и отсылка вообще всех публичных ключей до которых оно дотянулось - весьма разные вещи. Я не против чтобы Васин сервак знал что я на нем юзер такой-то. Но вот знать о том какой я юзер на еще пачке серверов - ему явно излишне. И вообще совсем не требуется для выполнения задачи.
Ну и вообще, если уж ID ремотного хоста известен - можно наверное было бы и хранить соответствие "ключ такой-то слать только такому-то ID". Или нечто наподобие. Но вместо этого в этом крапе наворачивают всякие недо-впн и прочие файлокачалки. Отличный SSL номер два получится, так держать.
> Публичный ключ и отсылка вообще всех публичных ключей до которых оно дотянулось
> - весьма разные вещи.тогда расскажи, как ты себе представляешь механизм назначения соответствий ключу и сайту, чтобы без ручной работы? да, вот этому сайту, на который ты в первый раз заходишь, и поленился прописать ключи руками.
> Ну и вообще, если уж ID ремотного хоста известен - можно наверное
> было бы и хранить соответствие "ключ такой-то слать только такому-то ID".кто мешает сделать обёртку, или вовсе своего клиента — не ясно. а openssh из коробки работает вот так, это никакой ни разу не секрет. авторам софта так показалось удобно. всем остальным, видимо, тоже, раз никто до сих пор это не починил. и ты бы об этом тоже задумываться не стал, если бы не эта новость. а почему? а потому что тебе тоже плевать на секурити, и правило «пока не прочитал документацию и лично не проверил настройки — вместо секурити у меня дырка» ты игнорируешь так же, как и большинство людей.
чем ты возмущён — я в упор не понимаю. тем, что в деле безопасности поленился и понадеялся на других?
Зашибись ты специалист. Если не знал об этом, значит никогда не запускал ссш-клиента в дебаге.
Что интересно, PuTTY, над которым на этом ресурсе принято потешаться, требует явного указания конкретного ключа для каждой сессии, и такой хренью, как отдача хосту всех ключей по одному, не занимается.
что не менее интересно — ssh тоже так умеет. но читать документацию — это же западло!
Не, вот извините. Западло - это когда программы пытаются умничать и в результате оказывают медвежью услугу. Подтерев своему обладателю зад наждачкой. С аргументом "извините, туалетной бумаги нет".
нет тут никакого западла и никаких медвежьих услуг. юзер не прочитал документацию, наложил кучу ключей? так пусть не использует консольный ssh, для него это слишком сложно.
> нет тут никакого западла и никаких медвежьих услуг. юзер не прочитал документацию,
> наложил кучу ключей? так пусть не использует консольный ssh, для него
> это слишком сложно.Ну окей, я подумаю над этим. Софт который без спроса отсылает пачку ключей на левые серваки - это нечто типа openssl. И тут скорее уже на грани чтения исходников. Как, не почитал исходники? Ну получи, лох! Где-то я такую логику видел. Виндой, кажется, называлось.
> нет тут никакого западла и никаких медвежьих услуг. юзер не прочитал документацию,
> наложил кучу ключей? так пусть не использует консольный ssh, для него
> это слишком сложно.Да даже без документации, вот наложив кучу ключей, как можно не задаться вопросом "а как ssh поймет куда какой совать?". А если такие вопросы не возникают (что показатель что юзер и знать этого не хочет, а хочет чтоб автоматически все как-нибудь сработало), то как можно потом ругаться что "ssh делает что-то не так", ведь он сделал именно что от него и хотели - автоматически разобрался с неопределенностью ))
> как можно не задаться вопросом "а как ssh поймет куда какой совать?".Вопрос такой возникает. Но, если ответа на него нет (нет времени читать документацию, нет навыка править конфиг, или просто мазгов мало), то приходится полагаться на дефолт. А дефолт, как оказывается, имеет пользователя во все... то есть сует все ключи подряд во все скважины.
Обидно.
нет мозгов — зачем в консоль полез?
> нет мозгов — зачем в консоль полез?А таких как ты наслушался потому что. Захотелось секурности, знаешь ли. В интернетах спецы вроде тебя все уши прожужжали, что аутентификация по ключу безопасней паролей.
ну да. а то, что при этом надо мозги включать и понимать, что делаешь — это нет, это сообразить никак. вот правильно говорят, что дурака учить — только портить.
> а то, что при этом надо мозги включать и понимать,
> что делаешь — это нет, это сообразить никак.Сообразить, что надо включить мозги? У тебя рекурсия.
Я среднестатистический человек. Таких как я -- миллиарды. Наличие включенных мозгов у меня не предполагается. И я ставлю среднестатистический пакет ПО, предполагая, что им можно безопасно пользоваться с настройками по умолчанию. Мало того, что без копания в конфигах пользование этим пакетом несекурно, так ещё находится арису, который меня обзывает дураком.
> Я среднестатистический человек. Таких как я -- миллиарды. Наличие включенных мозгов у
> меня не предполагается.это твои личные проблемы. зачем ты полез туда, где наличие рабочих, невыключеных мозгов — prerequisite, я не знаю. да и знать не хочу, мне за решение твоих проблем не платят.
>> Я среднестатистический человек. Таких как я -- миллиарды. Наличие включенных мозгов у
>> меня не предполагается.
> это твои личные проблемы.Поясняю специально для тебя: если у миллиардов юзеров одна и та же проблемя, она уже не является личной.
> зачем ты полез туда, где наличие рабочих, невыключеных мозгов — prerequisite
А ты не находишь "немножко дэбильным" тот факт, что для безопасного пользования таким массовым ПО требуются мозги/знания выше среднего?
> мне за решение твоих проблем не платят.
За комментарии на опеннете тебе тоже не платят, но тем не менее ты убиваешь на них своё время. Правда ведь не платят, а?
> Поясняю специально для тебя: если у миллиардов юзеров одна и та же
> проблемя, она уже не является личной.ну, устраивайте кружки безмозглых дебилов и там жалуйтесь друг другу.
>> зачем ты полез туда, где наличие рабочих, невыключеных мозгов — prerequisite
> А ты не находишь "немножко дэбильным" тот факт, что для безопасного пользования
> таким массовым ПО требуются мозги/знания выше среднего?нет. потому что ты опять наврал. не надо «выше среднего» достаточно «умнее улитки». но я могу понять, почему для тебя это «выше среднего».
>> мне за решение твоих проблем не платят.
> За комментарии на опеннете тебе тоже не платят, но тем не менее
> ты убиваешь на них своё время. Правда ведь не платят, а?спасибо. ты такой дурак, что даже почти эталон.
> ну, устраивайте кружки безмозглых дебилов и там жалуйтесь друг другу.Давно устроили. Интернетом называется.
> нет. потому что ты опять наврал. не надо «выше среднего» достаточно «умнее
> улитки». но я могу понять, почему для тебя это «выше среднего».Перечитай новость. Уйма людей, использующих авторизацию по ключу, отправляет все свои ключи. Это и есть "среднее".
> спасибо. ты такой дурак, что даже почти эталон.
Можно без "почти". Человек -- мера всех вещей.
>> ну, устраивайте кружки безмозглых дебилов и там жалуйтесь друг другу.
> Давно устроили. Интернетом называется.а вот это пока всё ещё только ваши влажные мечты.
>> нет. потому что ты опять наврал. не надо «выше среднего» достаточно «умнее
>> улитки». но я могу понять, почему для тебя это «выше среднего».
> Перечитай новость. Уйма людей, использующих авторизацию по ключу, отправляет все свои ключи.
> Это и есть "среднее".я понимаю, что тебе не хочется быть дураком, и ты предпочитаешь называть это «средний». но ты всё равно дурак, это факт.
>> спасибо. ты такой дурак, что даже почти эталон.
> Можно без "почти". Человек -- мера всех вещей.нет, на эталон не дотягиваешь. и да, «Человек — мера всех вещей» — редкостный идиотизм. вот поэтому я вас, людей, и не люблю.
> а вот это пока всё ещё только ваши влажные мечты.А кто, по-твоему, сидит в интернетах? И чем они, по-твоему, там занимаются? Именно безмозглые дебилы и именно жалобами.
> я понимаю, что тебе не хочется быть дураком, и ты предпочитаешь называть
> это «средний». но ты всё равно дурак, это факт.Нет, меня вполне устраивает быть дураком. Беда в том, что таких, как я, -- полная планета. Уже который раз пытаюсь тебе это объяснить, но ты слишком умный, чтобы понять.
> «Человек — мера всех вещей» — редкостный идиотизм.
Иди скажи это Протагору. Хотя ему, я думаю, пофиг. У него своя мера.
> вот поэтому я вас, людей, и не люблю.
О, господи, только твоей любви мне не хватало...
> Нет, меня вполне устраивает быть дураком. Беда в том, что таких, как
> я, -- полная планета.это опять ваша личная беда. продолжайте жаловаться и крепчать, пока вас сношают.
>> «Человек — мера всех вещей» — редкостный идиотизм.
> Иди скажи это Протагору. Хотя ему, я думаю, пофиг. У него своя
> мера.если кого‐то угораздило родиться во времена античности — это не делает его автоматически умным, а его высказывания истинными. такие дела.
О сколько нам открытий чудных... готовит запуск ssh с -v
А -vvv тем паче.
проверил. не определяет. фуфло.
Дык... как и всё, что на go же написано
> проверил. не определяет. фуфло.Как, и тебя? :)
проверил. не определяет. фуфло.
> А может у тебя нет аккаунта на гитхабе?
> проверил. не определяет. фуфло.Дык у тебя поди нет ключа на гитхабе. Не отменяет того факта что оно льет все ключи абы какой ремоте по дефолту, что как бы EPIC FAIL.
Представь себе картину маслом: Вася - устраивает кому-то "apt". Не тот который get. А тут как раз Петя из интересующей группы забредает на подставной сервак. Очень удобно, знаешь ли, ненавязчиво и беспаливно посмотреть - куда этот Петя доступ вообще имеет. И имеет ли смысл дальше его атаковать, или же стоит переключиться на другую мишень, более интересную. В эпоху когда могут ненавязчиво пропатчить фирмварь HDD - такие вещи уже не смотрятся безобидно.
$ ssh whoami.filippo.io
The authenticity of host 'whoami.filippo.io (178.32.139.168)' can't be established.
RSA key fingerprint is c8:9a:b0:9d:59:96:24:37:70:4c:ef:eb:31:47:68:40.
Are you sure you want to continue connecting (yes/no)? no
Host key verification failed.В конце концов, в ssh не просто так спрашивают "(yes/no)?"
Но ведь это yes/no совсем про другое. Оно же в первый раз на любой хост спрашивает.
> Но ведь это yes/no совсем про другое. Оно же в первый раз
> на любой хост спрашивает.Именно.
В этот момент у пользователя есть выбор, передавать ли информацию обо всех своих публичных ключах на новый хост, на который он ни разу не заходил.
> В этот момент у пользователя есть выбор, передавать ли информацию обо всех
> своих публичных ключах на новый хост, на который он ни разу не заходил.Вот только этот момент совершенно не очевиден тем кто не в курсе интимных особенностей криптографии и весьма тонких деталей реализации в openssh.
>> В этот момент у пользователя есть выбор, передавать ли информацию обо всех
>> своих публичных ключах на новый хост, на который он ни разу не заходил.
> Вот только этот момент совершенно не очевиден тем кто не в курсе
> интимных особенностей криптографии и весьма тонких деталей реализации в openssh.Зато это предупреждение требует от тебя явно сказать yes, после которого из громкой фразы "шлет все ключи кому попало" вычеркивайте часть про "кому попало". Вы (и только вы) приняли решение вообще попытаться подключиться к чему-то чего ssh ранее не знал, и повторно подтвердили ещё свое желание. А если из фразы убрать про кому попало, а перед словом "ключи" добавить слово "публичные", то фраза становится безобидной (хоть и неприятной из-за слова "все").
Лично я вообще не понимаю как так можно - вот ты создал специальный, отдельный ключ для работы с каким-то сервисом (уже заморочился и не поленился), как его можно взять и не прописать в конфиг? Надеясь на что? Что ssh угадает причем именно с первого раза какой из вороха ключей ему использовать?
> В этот момент у пользователя есть выбор, передавать ли информацию обо всех своих публичных ключах на новый хост, на который он ни разу не заходил.А почему меня как пользователя вообще должно волновать, что я передаю кому-то свои публичные ключи? На то они ведь они и публичные.
>> Но ведь это yes/no совсем про другое.
А y/n тут про то, что ssh предлагает Вам удостовериться, что Вы подключаетесь именно к тому хосту, к которому хотите, а не к хитрожопому посреднеку.
Для тупеньких: в твоей базе открытых ключей нет такого хоста, ssh-клиент тебя спрашивает добавить или нет. Если ключ подменят, то клиент тебе скажет, что ключ сменился.
> Для тупеньких: в твоей базе открытых ключей нет такого хоста, ssh-клиент тебя
> спрашивает добавить или нет. Если ключ подменят, то клиент тебе скажет,
> что ключ сменился.Просто попробуйте посмотреть дальше собственного носа.
В этот момент пользователь может остановиться и подумать, передавать ли информацию обо всех своих публичных ключах на новый хост, на который он ни разу не заходил?
Или нажать "no" и добавить в .ssh/config настройки для этого хоста.
А смотрящим дальше своего носа не приходила идея подумать о цели конекта еще при наборе команды?
Ну и никакого выбора насчет передачи ключей на этом вопросе нет. Это вопрос о продолжении соединения. Методы аутентификации задаются в другом месте.
> В этот момент пользователь может остановиться и подумать, передавать ли информацию обо
> всех своих публичных ключах на новый хост,Когда Вася конектится к гитхабу - ему совершенно не очевидно что какое-нибудь АНБ (или просто очередные хацкеры гитхаба, коих уже бывали целые полчища), поднажавшее на админов гитхаба (или просто разломав их сервак) - резвенько получит полный список ресурсов, где у Васи вообще права были. А дальше уже можно намного прицельнее атаковать наиболее интересных Вась. А не всяких скрипткидей с доступом только на свой локалхост.
> Когда Вася конектится к гитхабу - ему совершенно не очевидно что какое-нибудь
> АНБ (или просто очередные хацкеры гитхаба, коих уже бывали целые полчища),
> поднажавшее на админов гитхаба (или просто разломав их сервак) - резвенько
> получит полный список ресурсов, где у Васи вообще права были.более того: это и мне не очевидно. можно полюбопытствовать, каким образом они это сделают? а‐а‐а, вася дебил, и у него один публичный ключ для всего? дак дебилов защищать бессмысленно: они любую защиту поставят раком, даже не заметив этого.
у меня 14 ключей, а перебирает только первые 3. До гитхабовского ключа даже не доходит.
Ну потому, что крикуны выше даже после отсылки в маны не стали их читать и предпочли дальше пищать про не удобные узкие штаны. SSH не посылает все ключи. Он пытается использовать вполне определённые ключи (разные алгоритмы шифрования) identity, id_dsa, ..., id_rsaТак вот если у тебя ключ-пара .ssh/githib/id_rsa{,.pub} или .ssh/id_rsa_for_github{,.pub} то они будут использованы ТОЛЬКО при явном запросе (IdentityFile в конфиге для хоста или -i параметр командной строки)
парсер конфигов ssh очень фигово сделан, опции тоже не удобно моделировать и нету regexp масок.
> парсер конфигов ssh очень фигово сделан, опции тоже не удобно моделировать и
> нету regexp масок.Оно открытое - усовершенствуй!
> Оно открытое - усовершенствуй!Учитывая что оно течет туеву хучу информации о траффике в сессии - усовершенствовать его надо гильотиной^W rm -rf.
Довольно странное поведение "по умолчанию".
А то, что тот же трюк можно провернуть с HTTPS никто не думал?
Ну только низкий %% пользователей с персональными ключами SSL в веб браузерах не даст такого фифекта как с SSH. А так да, все тоже самое (даже хуже, я не помню чтото опций в браузерах по привязке ключей из стора к серерам, т.е. сливаться будут всем, по их запросу.).