71
пост №1852

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

У них есть внутренний сервис, который проверяет доступы (бабки, квоты и т. д.) перед тем, как API запрос доходит до любого продукта.

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

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

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

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

К сожалению, программист забыл настроить фича-флаги для этого кода. Кусочек программы с ошибкой запустился на всех пользователей сразу. Удивительно, что это не заметили на этапе code review!

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

Тут в дело вступает, на мой взгляд, первая ошибка (а не просто человеческая небрежность) инженеров — система контроля доступа настроена так, что при отсутствии ответа от программы проверок она отклоняет запрос. Так называемый fail closed. Хорошо для замков на банковских сейфах, плохо для пожарных выходов.
В нашем случае система не пропускает ни один запрос.

Дежурные инженеры замечают проблему в течение 2 минут, за 10 минут находят причину (дежурная система и дежурные инженеры у Гугла достойны восхищения) и нажимают большую красную кнопку, которая должна выключить эту часть программы (ее программисты сделали). Ее включение занимает еще 30 минут. (Не понятно, почему этот механизм занимает 30 минут, а не 20 миллисекунд, но движемся дальше).

Система заработала, но из-за того, что она лежала 40 минут, накопилось много желающих отправить запрос еще раз, и они создали эффект толпы, которая набежала и перегрузила остальные соседние сервисы через наш сервис проверок. Оказалось, что он не ждет какое-то время, если нужный сервис отказывается ответить на запрос (для этого есть красивая схема exponential back off), а долбит до упаду, тем самым не давая системе возможности восстановиться. Пришлось руками ограничивать число запросов. На постепенную, ручную разгрузку очередей ушло еще 2 часа.

Ко всему прочему, Гугл час не мог опубликовать уведомление о проблеме, потому что сервис публикации статус-страниц зависит от системы, которая упала.

Как вывод, Гугл обещает пройтись по всем сервисам и убедиться, что они, во-первых, fail open, то есть пропускают запросы, когда падают, во-вторых, реализуют exponential back off, если на их запрос не отвечают, а не добивают лежачего, и, наконец, в-третьих, что даже глобальные добавления правил должны прилетать во все регионы не сразу, а с некоторыми задержками. Ещё обещают добавить эти проверки в свои статические анализаторы кода, завидую!

Первые два пункта можно и нужно использовать в каждом проекте, даже если ты не Гугл.

72
пост №1514

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

Главная страница открывается, но пропали все данные о прошлых заказах, нельзя оформить новый заказ, в личном кабинете не отображается даже имя пользователя.

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

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

Отдельно обращу внимание на отвратительную внешнюю коммуникацию. Берите пример с Cloudflare, они хорошо объясняются, когда что-то идет не так.

73
пост №311

Этот блог называется запуск завтра, а у нас на самом деле завтра запуск самого крупного проекта Медузы so far.

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

Каждый запуск — как экзамен в универе, перед ним страшно, даже если всё приготовил и знаешь предмет 🙈

74
75
пост №178

Помните, «кремлевские хакеры» ломали оппозиционеров через краденые смски?

«Коммерческие хакеры» начали использовать дыру под названием SMS в промышленных масштабах для опустошения банковских счетов законопослушных бюргеров. А значит, не далек день, когда мы перестанем пользоваться смсками для любых штук связанных с безопасностью. Наконец-то.

Чтобы вы не удивлялись, протокол GSM (2G) — 1987 года выпуска, контрольный протокол SS7 — 1975 (это не опечатка).

Учитывая, что нас уже больше 3 тысяч, я чувствую некоторую ответственность, так что вот социальная реклама: используйте Google Authenticator для получения одноразовых кодов, не смс. И включите 2-факторную аутентификацию, пароль слишком легко потерять.

76
пост №916

Космическая история: фронтендеры Ютуба убили Internet Explorer 6, без согласования с руководством разместив баннер «мы скоро перестанем поддерживать этот браузер, поставьте что-нибудь посвежее» в июле 2009.

Чтобы вы понимали контекст, в июле 2009 года это был браузер четверти пользователей интернета. IE6 было уже 8 лет, он глючил, тормозил и решительно не подходил для современного интернета 2009го, но ни один крупный сайт не был готов сказать четверти пользователей интернета «сорян, ваш браузер — говно».

Фронтендеры ютуба совершили настоящий заговор, протащили релиз мимо QA, переводчиков, вообще всех и задеплоили его на на один из самых популярных сайтов в интернете.

В 2009, IE6 ненавидили уже все фронтендеры без исключения. Практически сразу после запуска баннера на Youtube, фронтендеры Google Docs использовали пример Ютуб как обоснование для того, чтобы выкатить такой же баннер на Google Docs (все думали, «вряд ли Ютуб провернул такое без соответствующих согласований»). Иронично, но когда о баннере узнали в руководстве ютуба, они решили, что это просто копия баннера с Google Drive («и кто-то наверняка согласовал это ранее»).

Когда правда вскрылась — было уже поздно, баннер был практически на всех сайтах в интернете, а IE6 —обречен. Цель оправдывает средства.

Рассказывает один из участников заговора (там есть, как отреагировали юристы и PR-щики). 💎

77
пост №1849

Удивительно, на какие ухищрения идут Яндекс и Фейсбук, чтобы отследить, на какие веб-сайты мы ходим.

Если на вашем Андроид-телефоне установлен Инстаграм или Яндекс.Карты, то при открытии веб-страниц с трекером Фейсбука или Яндекса соответствующая компания знает, что это именно вы открыли веб-страницу. Не спасут даже режим инкогнито и отдельный браузер.

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

После публикации статьи Фейсбук перестал это делать, Яндекс — продолжает. Производители браузеров спешно исправляют уязвимость.

Под iOS это не работает только потому, что там нельзя запустить долгоживущие фоновые процессы, это сделано для экономии батареи.

Интересно, наложит ли кто-то из европейских регуляторов оборотные штрафы?

78
79
пост №1910

14 октября Европейский Союз решит, сломать конфиденциальность переписки сейчас или отложить этот вопрос еще на год.

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

Если сообщение содержит детское порно или склонение ребенка к чему плохому — то оно отправляется правоохранителям на проверку. А еще все должны предъявлять документы для регистрации в мессенджерах.

Инициативу прозвали Chat control, закон впервые выдвинули аж в 2022 году. Тогда его поддержали только 5 стран. Для принятия нужно согласие 15 из 27 стран Евросоюза с 65% населения ЕС. Сегодня 12 стран за, 7 против и благодаря позиции Германии (18% населения ЕС), в этот раз опять пронесло. Скорее всего, его чуть поредактируют и снова выдвинут в 2026.

Если в России ФСБ требует у всех мессенджеров ключи шифрования, то тут все тоньше — «это затрагивает только подозрительные сообщения». То, что список «запрещенки» потом расширится, и что технические ошибки неминуемо приведут утечкам законной переписки — это «страхи отдельных алармистов», «подумайте о детях!»

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

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

Инструмент для граждан ЕС, чтобы обратиться к своему депутату — здесь.

80
пост №1294

Адская дырка во встроенном почтовом клиенте macOS, или почему нужно обновлять софт.

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

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

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

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

Схема атаки в одной картинке.