From: Sergey Matveev Date: Wed, 4 Jul 2018 18:42:47 +0000 (+0300) Subject: Google воюет против HTTP X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b1ac1638ae7ee50c6f7c6fcbd57730b83a807330;p=stargrave-blog.git Google воюет против HTTP https://habr.com/post/415981/ Лично я на стороне противников подобного внедрения HTTPS. Если точнее, то я в корне не согласен с понятием "безопасный HTTPS". И всё упирается в инфраструктуру публичных ключей. Во-первых, нужно понимать что Google только отвечает за свой Chrome проприетарный. Что хотят то и делают -- их поделие, вольны и в праве. Если я буду использовать просто самоподписанные сертификаты для HTTPS, то что поменяется? Если пользователь будет использовать certificate pinning и как-то out-of-HTTPS-band узнает мой сертификат и будет ему доверять, то будет ли это безопасно? Безусловно! Третьи лица не задействованы, доверие к публичному ключу сервера полное, определение факта подмены пакетов будет. Против такого использования HTTPS-а я не против -- оно (ну, с учётом использования свежей версии TLS протокола, хороших библиотек, итд) будет безопасно с моей точки зрения. Если я буду использовать HTTP, но оно будет идти поверх Tor (к .onion) или I2P (к .i2p) или Freenet (.freenet) или поверх cjdns, или поверх IPsec/SSH туннеля, то будет ли такое соединение безопасно? В случае с Tor/I2P/Freenet/cjdns -- да, так как сам факт подключения к заданному узлу аутентифицирует публичный ключ сервера и MitM не останется незамеченным. HTTPS нет, но лично у меня нареканий нет. Даже более того: лично я бы только так и предпочитал использовать ресурсы, так как у них самоаутентифицирующиеся адреса, не нужен долбанный транспортный TLS протокол, броузер с поддержкой certificate pinning. Если IPsec/SSH туннели аутентифицированы, то тоже всё ok. Будет ли что-либо из этого считаться доверенным в Chrome? Нет. Если я по HTTP качаю собранные пакеты для своего дистрибутива и эти пакеты OpenPGP подписаны доверяемой мной стороной, публичные ключи которой я знаю (обменялся на конференции), то безопасно ли это? Или я качаю документы, пускай даже подписанные HTML страницы. Это безопасно: MitM не сможет изменить трафик. Конфиденциальности нет -- верно. Кто-то скажет что произойдёт и утечка фактов скачивания того или иного документа: по размеру файлов, порядку скачивания это, как правило, не сложно будет сделать и с HTTPS. О других проблемах которые HTTPS не решит и добавит других касательно этого случая писал в 09b4c5f483eaf11b15d503bdc4f5dd449c32c84d. Проблема с certificate pinning-ом это то, как доверенно получить сертификат сервера. Для этого в Web принято использовать инфраструктуру публичных ключей (PKI). Если коротко, то добавляется третье лицо которому оба участника (клиент, сервер) доверяют и это третье лицо заверяет что сертификат доверенный. Тут то и проблема: репутация всех этих центров сертификации не самая лучшая и мы прекрасно знаем что они не дают никаких гарантий. Почти все крупные CA были замечены в недопустимом: d722fb300a046783c9bf7bec055c18dcb828f8ee И на Google они выдавали сертификаты и на Microsoft. А сколько 100% имеющихся случаев когда спецслужбы просят их выпустить для MitM-а сертификат для прослушки трафика? И ничего с этими CA не случалось. С CA которые бесплатно выпускали сертификаты или которые были не под контролем США -- по любой, за уши притянутой причине, США-подконтрольные компании (Google, Mozilla, Microsoft) убирали их сертификаты из списка доверенных. Сплошная политика и лицемерие о которой предпочитают молчать. Доверенный с точки зрения Google Chrome сайт это тот, чей CA является доверенным с точки зрения Google (+Microsoft/Apple/итд). То есть "доверенным" сайтом будет тот, как правило, кого "одобрили" эти корпорации (или не одобрила только Google: http://www.chromium.org/Home/chromium-security/root-ca-policy). Бесплатные и китайские CA -- выпиливают (проблема бизнесу и политике страны). Особняком стоит Let's Encrypt, внезапно который взялась поддерживать куча компаний и активно преактивно подталкивает людей к его использованию. Нужно понимать чем им это может быть выгодно. Вместо сотен разрозненных CA выдающих миллионы сертификатов, мы имеем один большой пребольшой в котором сконцентрирован контроль над доверием доступа к сайтам. А чтобы люди не полагались на certificate pinning, то у него относительно короткоживущие сертификаты -- и действительно я на множество сайтов, судя по моей БД сертификатов, захожу действительно раз в 1-2 месяца, каждый раз видя уже недействительный с точки зрения pinning сертификат. Ещё раз замечу: CA от которого зависит доверие к всё увеличивающемуся количеству серверов, который один и который под контролем страны, мягко говоря, не боящейся заниматься прослушкой. Идеально чтобы подталкивать использовать именно его, Let's Encrypt, а не платные решения (очевидно что никто не хочет платить за то, что можно получить бесплатно). Забудем о Let's Encrypt. Так можно ли считать доверенным HTTPS при использовании PKI? Лично для меня в общем случае -- нет. С какой стати я должен доверять либо этим корпорациям либо сотням неизвестно каких CA? Допустим лишь малая часть их этих CA поставляемых с броузером или ОС -- не очень "благонадёжны". Но достаточно лишь ровно одного неблагонадёжного CA чтобы можно было безнаказанно делать MitM. По опыту крупных известных CA -- мы видим что наказания даже за раскрытые инциденты не последует и репутация тут не работает. Но Chrome будет считать это безопасным. Если использовать certificate pinning вместе с PKI, то это можно считать надёжным. Но смысл PKI тут уже теряется, разве что Chrome не будет ругаться. А что будет если MitM всё же сделают, подменив сертификат на самоподписанный какой-нибудь? Всплывёт предупреждение, точно такое же как и для HTTPS сайтов честно подписанных крупными CA, но по каким-то политическим причинам не добавленных Google/Microsoft/Apple в список доверенных. Пользователь либо уйдёт -- тем самым контроль США/корпораций за тем куда можно/стоит ходить пользователю будет успешным. Речи про безопасность тут нет, если что -- на аутентичность и конфиденциальность это никак не повлияет. Либо пользователь нажмёт "плюнуть и всё-равно зайти". Как ему отличить был ли действительно совершён MitM или это просто политические игры систем которые он использует? Без какого-либо дополнительного out-of-band канала (DANE, DNSSEC, связь с сервером ещё другим образом, итд) -- никак. В итоге, даже при настоящем злонамеренном грязном MitM-е пользователь как баран повинуется указаниям корпораций (кстати лучше справляющихся с цензурой, таким образом, чем многие государства) (и действительно защищён, но не от прослушки/изменения трафика теми кто контролирует CA (государства например, спецслужбы)), либо всё-равно нажимает "продолжить". Есть ещё крупный миф о том, что подмена сообщений -- одно, но вот когда нет конфиденциальности передаваемых данных (ну куда по сайтикам вы ходите), то это позволяет проводить слежку, видеть ваши действия. Действительно, не поспоришь. Но вот только слежка проводится в первую очередь JavaScript-скриптами которые любят сразу же стучаться на счётчики типа Google Analytics, а во вторую очередь DNS запросами. Почти вся слежка проводится этими методами, так как она дешевле и больше данных выдаёт. HTTPS не защитит ни от того, ни от другого. Самое страшное, как мне кажется, во всей этой истории с Chrome и "небезопасным HTTP" и "безопасным HTTPS" -- то, что пользователь не в состоянии больше оценивать риски. Используя HTTP он точно знает что это не безопасно и он прикидывает что ему можно/стоит делать. Используя HTTPS он видит мнимую безопасность -- ему показывается что всё безопасно, что вы общаетесь *именно* с указанным сервером, хотя это может быть очень далеко от правды, так как эта "безопасность" в руках одного из трёхсот CA включённом в вашем броузере/ОС, репутация которых далека от идеала. А вполне себе отличный вариант с хождением по HTTP на cjdns адреса будут считаться небезопасным. Нет *ничего* хуже иллюзии безопасности, так как риски становится невозможно оценивать. Ну а кроме иллюзии безопасности в общем случае (но я ничего особо не имею против certificate pinning например), HTTPS добавляет и кучу дополнительных серьёзных проблем: невозможность делать кэширующие прокси/зеркала (опять же, например для хранения OpenPGP подписанного кода), вопросы производительности. Плюс не забывать что сертификаты, как правило, стоят немалых денег и требуют постоянного обновления. Сколько бесплатных CA сейчас поставляются с броузерами/ОС? Ровно один Let's Encrypt? А что будет когда он упадёт или исчезнет по тем или иным причинам? Миллионы ресурсов, привыкших к HTTPS-у из-за усилий Google что будут делать? Уверен что побегут покупать уж какие есть сертификаты, не бесплатные -- profit всем корпорациям и, повторюсь, всё такая же иллюзия безопасности. Отдельного упоминания заслуживает Cloudflare. Многие рекомендуют его использовать как HTTPS-frontend для вашего сайта. Во-первых, это полностью рушит саму идею того что HTTPS гарантирует что вы связываетесь вот именно с чётко указанным сервером. Во-вторых, Cloudflare крайне не любит "посетителей" из Tor и не даёт им доступа. Захотели повышения рейтинга в выдаче Google и решили разместиться за Cloudflare? Получайте кучу отрезанных от него пользователей и... гарантию что MitM совершается буквально (ok, "доверенными" вами людьми). ---