21 ноября, 13:17

Если вас тоже бесят постоянные всплывашки “подпишись на обновления нашего сайта”, то эта мини-статья для вас. Описано, как их отключить в Firefox, Яндекс.Браузер, Chrome, Safari и Edge.

15 ноября, 11:38
Добро пожаловать в эру Quantum - Как Firefox снова стал быстрый и в чём он станет ещё быстрее

Представляю на внимание перевод статьи из блога Lin Clark на hacks.mozilla.org. Низкая скорость работы, медленный интерфейс – главная причина, по которой люди бежали с Firefox. Сейчас всё иначе, Firefox не только стал быстрее, но и принёс в процесс рендеринга множество инноваций, главная из которых – параллельный рендеринг. Вчера вышел релиз Firefox 57 с огромным количеством улучшений, очень рекомендую его попробовать.

Люди заметили, что Firefox снова быстрый.

За последние семь месяцев мы стремительно заменили основные части движка, представив Rust и части Servo для Firefox. Кроме того, была начата грандиозная очистка кодовой базы для повышения производительности, как очевидной, так и не очевидной.

Мы называем этот проект Quantum, и первый общий выпуск возрожденного Firefox Quantum выходит завтра (прим. перев. 14 ноября).

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

Так что, давайте посмотрим, в чем Firefox снова быстрый и в чем он будет ещё быстрее.

Укладка фундамента с крупнозернистым (coarse-grained) параллелизмом

Чтобы быть быстрее, нам нужно использовать преимущества железа, появившиеся за последние 10 лет.

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

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

Хотя, это может быть и сложно. С параллелизмом можно допустить коварные ошибки, которые трудно увидеть и трудно отладить. Например, если двум ядрам необходимо добавить 1 к одной и той же области в памяти, одно из ядер, скорее всего, перепишет другое, если вы не будете проявлять особой осторожности.

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

В браузере довольно легко найти эти крупные зёрна. У каждой вкладки есть своя, отдельная часть работы. Есть также вещи кроме вкладок — например, браузер chrome — и они тоже могут обрабатываться отдельно.

Таким образом, страницы могут работать с собственной скоростью, при этом не блокируя друг друга. Если в фоновой вкладке имеется длительно исполняющийся скрипт, он не блокирует работу в активной вкладке.

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

Это заняло некоторое время, но мы туда добрались. В рамках проекта Electrolysis мы, наконец, сделали доступной мультипроцессорность для всех пользователей. И Quantum, с другими проектами, делает наше использование крупнозернистого параллелизма ещё лучше.

Electrolysis

Electrolysis заложил основу для проекта Quantum. Он ввёл своего рода мультипроцессорную архитектуру, подобную той, которая была представлена в Chrome. Поскольку это было настолько большое изменение, мы ввели его медленно, тестируя его небольшими группами пользователей, начиная с 2016 года, прежде чем она стала доступной всем пользователям Firefox в середине 2017 года.

Quantum Compositor

Quantum Compositor перенёс композитор в свой собственный процесс. Самая большая победа здесь в том, что это сделало Firefox более стабильным. Наличие отдельного процесса означает, что при сбое графического драйвера не произойдёт падение всего Firefox. Но наличие этого отдельного процесса также делает Firefox более отзывчивым.

Quantum DOM

Даже при разделении содержимого окон между ядрами и наличии отдельного основного потока для каждого из них, по-прежнему остаётся много задач, которые должен выполнять основной поток. И некоторые из них важнее других. Например, реакция на нажатие клавиши важнее, чем выполнение сборки мусора. Quantum DOM даёт нам возможность определить приоритетность этих задач. Это делает Firefox более отзывчивым. Основная часть этой работы уже была завершена, но мы всё-таки планируем продолжить эту работу, введя упреждающее планирование (pre-emptive scheduling).

Наилучшее использование железа с мелкозернистым (fine-grained) параллелизмом

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

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

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

Но с крупнозернистым параллелизмом вы не можете отделить работу от одного ядра другому. Здесь нет границ между работами.

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

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

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

Но мы знали, что браузер должен был сделать этот сдвиг, потому мы начали инвестировать в исследования. Мы создали язык, свободный от этих гонок – Rust. Затем мы создали браузерный движок – Servo – который полностью использовал это мелкозернистый параллелизм. Благодаря этому мы доказали, что этом может сработать, и что у вас будет меньше ошибок при движении быстрее.

Quantum CSS (aka Stylo)

Благодаря Stylo, работа по вычислению стилей CSS является полностью распараллеленой для всех ядерах процессора. Stylo использует метод, называемый кража задач (work stealing), для эффективного разделения работы между ядрами, так что они все остаются заняты. С помощью этого вы получаете линейное ускорение. Вы делите время, необходимое для вычисления таблицы стилей CSS, на столько ядер, сколько у вас есть.

Quantum Render (с поддержкой WebRender)

Другая часть аппаратного обеспечения, которая сильно распараллелена – это графический процессор. Он имеет сотни или тысячи ядер. Вы должны провести много планирования, чтобы убедиться, что эти ядра остаются такими же занятыми, как они могут. Это то, что делает WebRender.

WebRender выйдет в 2018 году и воспользуется преимуществами современных графических процессоров. Тем временем мы также атаковали эту проблему под другим углом. Проект Advanced Layers изменяет существующую систему уровней Firefox для поддержки пакетного рендеринга. Это дает нам немедленные выигрыши, оптимизируя в Firefox текущих моделей использования GPU.

???

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

Убедитесь, что мы продолжаем становиться быстрее и никогда не замедляемся

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

Поэтому мы создали ещё одну часть Quantum, чтобы исправить это… в основном, для нанесения удара по производительности браузера, которая найдёт эти проблемы и мобилизует команды для исправления их.

Quantum Flow

Команда Quantum Flow была этой ударной силой. Вместо того, чтобы сосредоточиться на общей производительности определённой подсистемы, они оптимизировали конкретные важные варианты использования – например, загружая ленту в социальной сети – и работали в разных группах, чтобы понять, почему это менее отзывчиво в Firefox, чем в других браузерах.

Quantum Flow принёс нам много больших побед производительности. По пути мы также разработали инструменты и процессы, облегчающие поиск и отслеживание этих типов проблем.

Так что же происходит с Quantum Flow сейчас?

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

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

Завтра всё только начинается

Завтра большой день для нас в Mozilla. В течение прошлого года мы активно работали над тем, чтобы сделать Firefox быстрым. Но это только начало.

В течение следующего года мы будем постоянно улучшать производительность. Мы с нетерпением ждем возможности поделиться ими с вами!

Попробуйте релиз Firefox Quantum или выпуск Developer Edition, чтобы быть уверенным, что вы получаете последние обновления по мере их появления.

27 октября, 0:38
Иллюзия защищённости в сети на примере Telegram

Telegram — мессенджер для смартфонов, позиционирующий себя как безопасный, защищающий не только от злоумышленников, но и от государственных структур. Маркетинг сделал своё дело и мессенджер получил свою аудиторию, но при этом многие известные специалисты критикуют Telegram за низкую защищённость. [1][2][3]

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

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

Для начала — а зачем защищать свои данные? Фразу «мне нечего скрывать» каждый слышал хотя бы однажды. Специалисты в области безопасности – многократно.

Аргумент «мне нечего скрывать» очень нравится организаторам различных систем контроля и слежки, которые «режут» наше с вами право на неприкосновенность частной жизни. «Давайте сюда сумку и выложите все из карманов. — весело говорят они. — Ноутбук и смартфон мы заберем на экспертизу. Не переживайте: если вы честный человек, вам нечего скрывать, правда?»

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

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

Вы вряд ли будете в восторге, если кто-то завладеет вашим аккаунтом в соцсети и начнет распространять оскорбительные сообщения, вирусы или спам. Мы не скрываем факты. Да, у нас есть банковский счет, электронная почта, аккаунт в Фейсбуке. Это не секрет. Что же тогда мы делаем? Защищаем перечисленное от несанкционированного, произвольного доступа.

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

Человек, поведавший о коррупции в правоохранительных органах, рискует оказаться жертвой преследования со стороны властей, если им станет известно его имя. Член ЛГБТ-сообщества, не совершивший самостоятельно «каминг-аут» и не подготовившийся к нему, может не выдержать тяжелый психологический прессинг на работе со стороны начальства и коллег. Широкое распространение информации о готовящемся семинаре способно привести к срыву мероприятия из-за подоспевших экстремистов, не согласных с повесткой. Готовы ли вы поставить под удар жизнь, здоровье, психологическое благополучие, карьеру, финансы, рабочие планы и прочие ценности других людей, тех, кто вам доверился? [4][5]

1. Привязка к номеру телефона

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

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

В апреле 2016 года были взломаны Telegram аккаунты оппозиционного активиста Олега Козловского и сотрудника Фонда борьбы с коррупцией Георгия Албурова.[6] Оба были пользователями МТС, и о том, что услуга SMS отделом технической безопасности МТС была отключена в 2:25 ночи 29 апреля и включена в 4:55 сообщили Козловскому в службе поддержки компании. В этот промежуток времени, в 3 часа ночи, злоумышленниками был произведён вход в аккаунт оппозиционеров, введя секретный код, который доставляется по SMS. [7][8]

Причины, по которым Козловскому отключили и включили SMS-сервис, в службе поддержки называть отказались — ему предложили написать письменный запрос. Также, как не было объяснено, каким образом SMS-сообщение с кодом попало в руки злоумышленников.

Вскоре МТС опроверг сообщения службы поддержки, заявив, что отключение SMS-услуги не производилось. [9] «Никаких целенаправленных действий по отключению услуг не производилось», но компания «не исключает вероятности вирусной атаки или доступа к аккаунту через веб-интерфейс», – заявил пресс-секретарь группы МТС Дмитрий Солодовников. [10]

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

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

Кстати говоря, включение двухэтапной аутентификации в Telegram совсем не спасёт вас от взлома, лишь обеспечит уничтожение истории переписки. [11]

Известны также случаи, когда оператор в огромных количествах выдавал дубли SIM-карт. [12] Но для атаки не всегда требуется «помощь» со стороны оператора.

Несмотря на то, что в мобильных сетях используются современные технологии, они основаны на устаревшем наборе протоколов SS7 — Signalling System No.7, которые уходят корнями в семидесятые годы прошлого века. При этом сети унаследовали все недостатки безопасности протоколов SS7, которые сейчас практически невозможно устранить.

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

Эти уязвимости, в том числе позволяют перехватывать звонки и SMS-сообщения, а впервые о них стало известно в 2001 году. Раньше инструменты для взлома SS7 были только у спецслужб, а в настоящее время они доступны службам безопасности корпораций и обычным хакерам. Некоторые компании вполне легально торгуют оборудованием и программами для взлома сотовых сетей, а в интернете полно инструкций по организации атак и перехвату звонков и трафика. Ни один оператор в мире не застрахован от подобных атак, как бы он ни защищался. [13]

Существует конспирологическая теория, что уязвимости были специально встроены в фундаментальную основу технологии SS7 для того, чтобы спецслужбы могли незаметно вести прослушку. Об этом в 2013 году говорил Эдвард Сноуден, обнародовавший документы, за которые его сейчас преследуют правоохранительные органы США. По его словам, благодаря этим уязвимостям спецслужбы США, Великобритании и других стран долгие годы следят за гражданами, в том числе вполне законопослушными. [14]

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

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

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

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

2. Контактный лист хранится на сервере

Даже если вы использовали только секретные чаты, но злоумышленниками был получен доступ к вашему аккаунту — они получат возможность запросить список ваших контактов, что создает след из «хлебных крошек», который может помочь правоохранительным органам в расследовании.

Сервису Telegram же это позволяет выстроить гигантскую карту социальных связей всех пользователей, установив, каким образом они связаны друг с другом. [2] Список телефонных контактов непрерывно синхронизируется с сервером. Если вы на несколько минут подключите Google аккаунт друга, либо поставите другую SIM-карту, все контакты с них будут отправлены на сервера мессенджера. [15]

3. Telegram рассылает избыточное количество метаданных

Telegram отправляет просто гигантские объемы служебных данных на сервер. Но это еще полбеды. Приложение рассылает уведомления всему списку контактов каждый раз, когда открывается или скрывается окно приложения.

Злоумышленник, фактически, может «оформить подписку» на все метаданые жертвы, просто добавив её в свой список контактов. К сожалению, взаимного согласия мессенджер в таком случае не спрашивает. Более того, жертва ничего об этом не узнает, так как никаких уведомлений не будет, и злоумышленник вообще не отобразится в списке контактов Telegram. [16]

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

Для защиты от такой атаки необходимо в настройках приватности выбрать отображение времени последнего посещения «Только для моих контактов» или «Ни для кого».

4. Шифрование выключено по-умолчанию

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

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

В декабре 2015 в твиттере возник спор по поводу защищённости Telegram между Павлом Дуровым и представителями Open Whisper Systems, разработчиками защищённого мессенджера Signal, и Эдвардом Сноуденом. Представители OWS, ответили одному из пользователей твиттера, который считал, что Telegram достаточно безопасный, что тот по-умолчанию не шифрует сообщения. Сноуден добавил, что Telegram следует провести масштабное обновление, чтобы избавиться от «опасных» настроек по умолчанию.

Мокси Марлинспайк — основатель OWS и создатель мессенджера Signal, ранее работавший главой отдела безопасности Twitter — подчеркнул, что существует разница между тем, как позицинирует себя Telegram и чем он является на самом деле. [17] Главный технолог Американского союза гражданских свобод Кристофер Согоян считает, что позиционирование мессенджера с точки зрения безопасности неоправданно, поскольку компании должны думать о защите по умолчанию, а не заставлять пользователей менять настройки клиента. [18]

5. Надежность шифрования

Технология шифрования MTProto, разработанная Николаем Дуровым, вызывает вопросы у многих специалистов по безопасности. Дело в том, что серверная часть шифрования закрыта, а шифрование на стороне клиентов никто серьёзно не проверял. Да, был объявлен конкурс на взлом с денежным призом. Однако мероприятие подверглось критике, так как потенциальные победители утверждали, что были ограничены в своих действиях и имели в распоряжении только зашифрованное содержимое переписки, были приведены примеры того, как при заданных правилами конкурса условиях даже заведомо уязвимый алгоритм было бы невозможно взломать. [19]

Спустя год Павел Дуров объявил о начале нового конкурса. Хакерам предлагалось «вскрыть» переписку двух ботов и уже дозволялось не просто выступать в роли наблюдателя, как в случае с первым конкурсом, но и проводить активные атаки. Несмотря на то, что условия конкурса были изменены, возникли вопросы и к правдивости такого конкурса. [18]

Закрытость кода для независимого аудита делает его потенциально уязвимым для будущих атак, как заявил вирусный аналитик ESET Russia Артем Баранов.

6. Имеет центральный сервер

Все клиенты подключаются к одному облаку и нет возможности установить серверную часть мессенджера на свой компьютер, либо просто выбрать тот сервер, которому вы больше доверяете. Если спецслужбы придут и взломают сервер, либо трактор перережет провод — все пользователи от этого пострадают. В случае с Telegram, в котором почти вся переписка хранится на сервере, это особенно неприятно. Павел Дуров утверждает, что никто не может получить доступ к данным, даже если тот проникнет в серверную, [17] однако это совершенно не мешает, например, блокировать Telegram каналы.

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

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

[1] https://tjournal.ru/56949-durov-snowden-telegram-signal

[2] https://medium.com/@thegrugq/operational-telegram-cbbaadb9013a

[3] https://www.gazeta.ru/tech/2016/06/28/8335127/whats_wrong_with_messenger.shtml

[4] https://safe.rublacklist.net/nothingtohide/

[5] https://amnesty.org.ru/ru/2015-04-30-slezhka/

[6] https://meduza.io/news/2016/04/29/mts-otklyuchil-oppozitsioneram-sms-servis-vo-vremya-vzloma-ih-telegram

[7] https://twitter.com/alburov/status/726042734952370176

[8] https://www.facebook.com/kozlovsky/posts/10208948934790884

[9] https://meduza.io/news/2016/04/29/mts-oproverg-tselenapravlennoe-otklyuchenie-sms-oppozitsioneram-vo-vremya-vzloma-telegram

[10] https://versia.ru/vzlom-akkauntov-v-messendzhere-telegram-ne-oboshelsya-bez-uchastiya-kompanii-mts-utverzhdayut-postradavshie

[11] https://geektimes.ru/post/278770/

[12] https://habrahabr.ru/post/267447/

[13] https://www.ptsecurity.com/upload/corporate/ru-ru/analytics/PT-SS7-security-2014-rus.pdf

[14] https://www.iguides.ru/main/services/mts_obvinili_v_posobnichestve_pri_vzlome_akkauntov_telegram/

[15] https://geektimes.ru/post/291495/

[16] https://oflisback.github.io/telegram-stalking/

[17] https://tjournal.ru/56949-durov-snowden-telegram-signal

[18] https://www.gazeta.ru/tech/2016/06/28/8335127/whats_wrong_with_messenger.shtml

[19] https://habrahabr.ru/post/206724/

11 октября, 8:58

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

02 октября, 16:44
Замена устаревшим дополнениям в Firefox 57

14 ноября выходит Firefox версии 57. С виду ничего важного, однако это одна из самых важных вех в развитии браузера. В этой версии будет окончательно завершен переход с Gecko на компоненты Quantum - проекта комбинирующего проверенные временем компоненты движка Gecko с новыми возможностями по обеспечению многопоточной обработки данных, предоставляемые языком Rust и движком Servo, благодаря чему многократно возрастёт скорость работы, догнав и перегнав конкурентов. Также в новой версии будет добавлен новый интерфейс Photon, в котором учтены ошибки прошлого интерфейса Australis. Но, к сожалению, не обошлось без жертв. В Firefox 57 будет удалена поддержка устаревших дополнений, написанных с использованием XUL / XPCOM, и будут поддерживаться только дополнения, написанные с использованием WebExtensions. Какие-то дополнения уже давно забросили авторы, какие-то не могут быть переписаны, т.к. на данный момент ещё нет подходящих API, как итог - после обновления большая часть дополнений может перестать работать (возле устаревших дополнений уже сейчас висит плашечка "LEGACY", которая как-бы предупреждает).

Рекомендую посмотреть вот эту таблицу, из неё можно узнать, какие из дополнений будут (или не будут) портированы, или подыскать им альтернативу.

UP: Также Mozilla запустила специальный сайт, который поможет найти альтернативу дополнениям.

Для тех, кому интересно, почему Mozilla пришлось отказаться от большей части дополнений Firefox, я хочу процитировать комментарий пользователя VEG с хабра:

Расширения имеют полный доступ к внутренностям браузера. Они могут изменить всё что угодно, но при этом очень чувствительны к любым внутренним изменениям. Представьте, нет никакой инкапсуляции. Расширения имеют доступ абсолютно ко всему. В самых плохих случаях расширения могут патчить код некоторых функций UI браузера на лету. Малейшие изменения в этом ломают те или иные расширения. Причём расширения могут не просто ломаться, а продолжать работать неправильно, с утечками памяти, тормозить и т.д. Авторы расширений часто не следят пристально за своими расширениями, часто забрасывают. В итоге — при обновлениях браузера у пользователей часто случаются проблемы с расширениями, что часто проявляется в виде нестабильности или тормозов, что сильно портит репутацию браузеру. Мало кто из пользователей готов снисходительно относиться к подобным проблемам в обмен на максимальную гибкость. По этой же причине у разработчиков связаны руки. Они не могут позволить себе вносить серьёзные изменения в браузер. Исторически Firefox всегда работал в один поток. Все вкладки, код всех расширений, код главного окна — всё в один поток (и всё на JS). И просто так это не изменить — все расширения, которые хоть как-то обращались с контентом вкладок, опирались на простой синхронный способ доступа к контенту вкладки. Это нельзя просто так разнести на потоки или процессы. Соответственно: А. Оно работает медленно; Б. Оно небезопасно (вкладки выполняются в процессе с обычными правами); В. Падает вкладка — падает всё. Последние несколько лет они это меняли, ввели многопроцессность и всё такое. Но до сих пор большинство расширений не поддерживают это, до сих пор большинство расширений опирается compatibility shims, которые разработчики добавили для совместимости, но эти заглушки делают браузер даже ещё медленнее, потому что добавилось взаимодействие между процессами. Расширения должны быть переписаны, скрипты для интерфейса и контента должны быть строго разделены, и должны общаться через механизм сообщений, то есть если раньше основной скрипт прямо из интерфейса мог обратиться к документу и наделать кучу работы, то сейчас всю работу должен делать отдельный контент-скрипт, который отдаст результат основному скрипту через установленный канал. Но авторы расширений не спешат с переписыванием. Как результат — внедрение многопроцессности много лет переносилось, дорабатывалось, перерабатывалось, и внедрили это совсем недавно, с толстым слоем совместимости, который делает всё ещё хуже (в плане производительности). Mozilla уже несколько лет пишет новый движок Servo. Но пока расширения так сильно завязаны на внутренности браузера, о таких переменах в Firefox говорить не приходится. У разработчиков связаны руки. Отказом от старых расширений и переходом на WebExtensions Mozilla решает сразу несколько критичных проблем: 1. Расширения больше не будут иметь доступ к внутренностям. Это развяжет руки разработчикам и они наконец смогут вносить существенные изменения в архитектуру браузера. 2. Расширения не будут ломаться после каждого обновления. У них будет узкое специализированное API, которое будет стабильно. 3. Многопроцессность сможет работать в полную силу. Вы сами назвали браузер «тормозиллой» не просто так. У Firefox действительно такая репутация. Ну а что вы хотите, в один поток много работы быстро не сделаешь, а внедрять многопроцессность они начали недавно, и то она много у кого не работает как надо из-за расширений. 4. Соответственно это и попытка исправить репутацию браузера, который воспринимается людьми как «тормозной», «глючный», с «регулярно отваливающимися расширениями». Недостатка при этом два, существенных: 1. Отвалятся все старые расширения. 2. Многие из старых расширений будут невозможны на новом API из-за того, что стабильные API на все случаи жизни придумать невозможно (например, API для модификации существующих элементов GUI браузера), а доступа к внутренностям браузера не будет. Второй пункт они могли бы решить, предоставив полный доступ к внутренностям, но они таким образом опять свяжут себе руки и останутся с теми же проблемами, которые они пытаются решить. Я объясняю, почему разработчики Firefox решились на этот тяжёлый шаг. Но я не рад, что они идут на этот шаг. У меня Firefox увешан расширениями с ног до головы и очень тонко настроен под мои нужды, что не может предложить ни один другой браузер. И я очень привык ко всем добавленным расширениями фишкам GUI, что делали мой сёрфинг гораздо приятнее. Я сам поддерживаю несколько расширений, и 3 из 4 не смогут быть перенесены на WebExtensions. И по этой причине я принял решение оставаться на Firefox 52 ESR так долго как это будет возможно. Я сижу на Firefox с самой первой версии, а до этого был ещё и на Mozilla Suite. При этом всё это время я наблюдал полный спектр проблем с Firefox. Расширения отваливались. Иногда не целиком, иногда — частично, ломая попутно что-нибудь малосвязанное с этим. Расширения, которыми я пользовался, забрасывались авторами (и 2 из них мне пришлось самому форкнуть, доработать и поддерживать). Мои кастомные стили также иногда ломались, и их тоже приходилось иногда дописывать. Я программист, я могу себе это позволить. Я понимаю, почему оно так, принимаю это и не жалуюсь. Но что тут говорить об обычных пользователях, когда даже большинство других программистов точно так как и обычные пользователи жалуются на описанные выше проблемы? Я мог быть снисходительным к описанным проблемам из-за тех безграничных возможностей кастомизации, что даёт уже устаревшая система расширений. Но 99% других пользователей это не волнует. Они хотят просто браузер, который работает быстро, стабильно, и не требует внимания на очередную починку очередной поломки. Тех, кто готов возиться с браузером для решения проблем даже раз в полгода или в год — ничтожно мало. По сути, они это делают для всех ругающихся на Mozilla из-за проблем совместимости расширений между разными версиями Firefox. То есть если раньше перманентно ругались по чуть-чуть на пути Firefox 1.0 → Firefox 56, то после релиза Firefox 57 будет большой взрыв ругани, недели которого которого хватит на 3 года вперёд. А вот следом — проблема будет по сути решена. Нет полного доступа к внутренностям браузера → нет расширений, которые будут ломаться при изменении внутренностей → нет нытья о том, что «злая Mozilla всё опять поломала». Я ещё в 2013 году (когда Opera отказалась от Presto) писал, что нужно быть благодарным Mozilla за то, что они упорно поддерживают свой гиковский подход, хоть он и проблемный и регулярно портит им репутацию. Вот, ещё 4 года продержались. Все 4 года кто-нибудь обязательно поливал их помоями из-за поломки очередного расширения или других связанных проблем. Хорошая демонстрация того, как сложно им было решиться на такой радикальный шаг по решению обозначенной проблемы. Очень уж не хотелось потерять свои уникальные расширения. Потратили уйму времени на внедрение многопроцессности в текущую архитектуру, только-только успели внедрить это в браузер, да и то не успели полностью перейти (и многие расширения до сих пор не адаптированы), слой совместимости, который сильно тормозит браузер, если расширения опираются на этот слой, всё ещё включен. Но в итоге исправление репутации «глючного и постоянно ломающегося браузера» перевесило и оказалось более важным. Разработчики в блоге говорят что ни при каких обстоятельствах они не будут переносить момент отказа от XUL, хотя некоторые на это и надеются (и я тоже сразу надеялся, что сроки перенесут).

16 сентября, 23:50
Пару слов про обновление блога

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

Почти все изменения и так видны, я же хочу в этом посте рассказать, почему их внёс.

Первым делом можно заметить появившуюся боковую панель, пришедшую на замену старой вылезающей панели (на мобильных она всё так же вылезает при свайпе экрана), на которой обновил список моих актуальных контактов и добавил блок проектов. Я давно хотел каким-то образом выводить список моих проектов, чтобы если кто-то нашёл мой блог, он мог бы перейти по ссылкам — вдруг его жизнь от этого станет лучше. С этой целью теперь в боковой панели расположен список репозиториев, некоторые из них мои, некоторые не мои, но я могу гордиться своим вкладом в их разработку. Репозитории отсортированы по дате последнего обновления, для этого я написал небольшой плагин, собирающий данные с GitHub, Bitbucket и GitLab.

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

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

Улучшил комментарии, добавив древовидный вид и панельку с вводом BB-кодов.

А, ну и наконец, теперь страницы загружаются по ajax, без перезагрузки страницы, чтоб трафик экономить) Раньше это уже было, но глючило, потому отключал. Сейчас без ошибок работает.

Вроде бы теперь классненько выглядит.

29 августа, 20:05

Добавил на сайт RSS ленту, чтоб было проще следить за обновлениями

27 августа, 16:09
Сказ о том, как я стал более свободен. Android без Google Apps

Дисклеймер: если вы жить не можете без «Окей, гугл», то лучше пропустите этот пост, чтобы не калечить психику.

Однажды я перепрошил свой телефон, а раз так, то решил заодно попробовать отказаться от Google Play Services. Google Apps поставляются с большинством android смартфонов, множество программ привязаны к ним, зачем мне всё это нужно? Вот в чём дело:

  • Любое приложение (даже не требующее никаких прав) может с ним общаться.
  • GApps имеют доступ к сети.
  • GApps позволяют Google в любой момент установить/удалить с вашего телефона любое приложение.
  • GApps постоянно держат открытое сетевое соединение с серверами гугла (для нужд push-нотификаций).
  • GApps — нереально огромное количество кода. Стоковый образ (если верить http://openGApps.org/) будет весить около 700Мб.

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

Так давайте скорее удалим их? А вот всё не так просто.

А что если удалить GApps?

Во-первых, современные прошивки сильно привязаны к гуглосервисам. Это означает, что скорее всего вам придётся перепрошить свой смартфон на прошивку, которая поставляется без GApps, либо удалить их с помощью скрипта, если кто-то установил GApps на ваш AOSP/CyanogenMod/LineageOS, или у вас стоковая прошивка Nexus/Pixel.

Во-вторых, большое количество приложений привязаны к Google Apps и тяжело отказаться от разнообразия android программ. Amazon, например, имеет свой немаленький магазин приложений, для попадания в который нужно пересобрать приложение с перепривязкой на Amazon сервисы. Яндекс, например, воспользовался своим положением и решил пойти простым путём — обратился за помощью к государству, чтоб тот наказал гугл за то, что он такой молодец, на свободном рынке смог занять доминирующую позицию. А вот о проектах, которые выступают в роли прокси для гуглов, амазонов и прочих - не слышно.

Нас спасёт microG

Но суть не в этом. Часто тяжело отказаться от GApps и к нам на помощь приходит microG - свободная реимплементация проприетарных Google Play Services Framework. Программы, использующие гугловые сервисы, работают, пуши от них приходят, навигация по WiFi (на основе данных Mozilla, OpenBMap, Apple, или локальной базы) работает, вместо встроенных в приложения Google Maps отображается OpenStreetMap, Play Store тоже можно открыть (как установив официальное приложение, так и свободную реализацию Yalp Store). Даже на хромкаст можно транслировать из ютуба (он использует первую версию Cast API, а большинство приложений — v2, которая пока что не реализована). Что ещё нужно? И ведь всё это можно настроить, разрешив или запретив каким-то приложениям доступ к пушам, например.

Однако, и к прошивке, на которую можно установить microG существуют дополнительные требования: она должна либо из коробки поддерживать подделку подписи, либо быть деодексированой (проще говоря, в подпапках /system/app и /system/framework не должно быть файлов *.odex).

Установка microG

Проще всего установить microG следующим образом:

1. Сначала прошить Magisk поверх прошивки — такую полезную штуку, которая позволяет вносить изменения в /system поверх раздела, не модицицируя его, а также прятать рут от приложений типа Сбербанка и Покемонов.

2. Прошить NanoMod — модуль для Magisk, который позволяет установить разом microG, репозиторий свободных приложений F-Droid, набор OpenSources альтернатив приложениям и новые рингтоны =) Рекомендую перед прошивкой NanoMod-VERSION.zip запустить NanoMod-setupwizard-VERSION.zip и выбрать, что хотите.

3. Разобраться с подделкой подписи. Об этом смотрите в документации о Signature Spoofing. Мне же показалось проще вручную пропатчить файл, воспользовавшись этой инструкцией.

4. Всё! Теперь вы свободны от рабства гугла =) Не забывайте только, что кроме гугл сервисов ваши данные также сливают множество других проприетарных приложений.

Далее хочу поделиться списком некоторых моих приложений, некоторые из которых я давно уже использую, а некоторые — нашёл только сейчас, с полным отказом от Google Apps.

Список установленных у меня приложений

Для начала, я использую лаунчер Smart Launcher v2.12. Хоть я и отключил доступ в интернет этой проприетарщине и приходится вручную перемещать иконки между категориями, не могу отказаться от удобной категоризации программ и открытия категорий свайпом.

Fennec F-Droid — он же Firefox, только с вырезанными бинарниками.
Kate MoDile — (проприетарь) неофициальный клиент для VK. Отличается от Kate Mobile возвращённым кэшем для музыки. Ни в коем случае не используйте официальное приложение Вконтакте!
OpenVPN для Android — чтоб выходить в интернет через мой сервер. В Печальной России Настоящего без этого никак =(
ProtonMail — (проприетарщина) не особо доверяю закрытым решениям, да и POP3/IMAP/SMTP не поддерживается, но не нашёл лучше.
Tusky — клиент для Mastodon. Это такой твиттер с ограничением в 500 символов, децентрализацией и открытым кодом. Я уже писал об этом сервисе ранее.
Ingress — (проприетарщина) играю я в эту игрушку, да. Привязана к гуглосервисам и microG прекрасно их заменяет.
NewPipe — позволяет смотреть ютуб с выключеным экраном, в свёрнутом режиме, в плавающем окошке, менять скорость воспроизведения и многое другое. Но не поддерживает возможность подписки на каналы.
Youtube — (проприетарщина) SkyTybe умеет использовать собственные подписки, но не поддерживает стримы, потому вынужден использовать официальное приложение YouTube, некоторые видео открывая в NewPipe.
PodListen — приложение для прослушивания подкастов.
OsmAnd~ — оффлайн навигация.
StreetComplete — приложение, в котором в формате квестов можно улучшать OpenStreetMap.
AdAway — блокировщик рекламных баннеров.
Amaze — файловый менеджер и не только. Хорошая открытая альтернатива скатившемуся ES Проводник.
F-Droid — репозиторий открытого ПО для Android. Кстати, сейчас уже можно скачать альфа версию приложения, где значительно улучшен интерфейс.
FBReader — чтоб книжки читать.
KDE Connect — программка для интеграции смартфона с KDE и другими оболочками линуксов.
Keepass2Android в автономном режиме — менеджер паролей. На десктопе для управления базой паролей использую KeePassXC.
oandbackup — замечательная утилита для бекапов.
Syncthing — программа для p2p синхронизации данных с десктопом и другими вашими устройствами.
Yalp Store — чтобы скачивать приложения из Google Play Store.
AFWall+ — файрвол для андроида.
Клавиатура Android (AOSP) — поддерживает набор свайпом. Как gboard, только без слива текстов в гугл.

Вместо вывода

Несмотря на то, что Android — открытая операционная система, она сильно привязана к проприетарным компонентам. Здорово, что появляются проекты типа microG, но для обычного пользователя крайне сложно на них перейти. Ну а лично я с отказом от GApps увеличил свободное место в памяти телефона и увеличил его время работы от зарядки. Сейчас, кроме экрана, больше всех энергии отбирает Шагомер, но это временно, пока не появится браслет.

08 апреля, 11:50
Новый модный сервис микроблогов Mastodon

Многих пользователей взбесила новая система упоминаний в твиттере. Настолько, что до этого мало кому известный сервис микроблогов Mastodon, запущенный ещё в октябре 2016 года, получил множество новых пользователей. Например, на одном из серверов - mastodon.social - число  выросло на 76% — до 41 тысячи.

Mastodon - проект с открытым исходным кодом и федеративной сетью серверов. Кто-угодно может запустить свой сервер и продолжать общаться с остальным миром. После наплыва пользователей mastodon.social был вынужден временно закрыть регистрацию, но можно любой сервер выбрать из списка серверов Mastodon.

Существуют несколько приложений для работы с Mastodon, кроме самого сайта, на данный момент для Android, iOS, Chrome и CLI. Я установил первый попавшийся клиент Tusky и он вполне неплох. Я бы даже сказал, лучше большинства Twitter клиентов.

При реплае ник пользователя, ссылки и картинки учитываются, но зато здесь сообщение ограничено 500 символами. С того момента, как twitter перестал учитывать упоминания и ссылки в твите, ограничение в 140 символов перестало иметь необходимость, ведь раньше длина твита была ограничена длинной SMS сообщения.

Для упоминания пользователя в рамках сервера можно писать ник в привычном виде: @modos189 Если пользователь находится на другом сервере, или вы пишете свой ник, чтобы вас могли найти, необходимо указать и сервер: @[email protected] То, что два раза пишется @ немного непривычно, но совершенно не вижу в этом проблемы. При ответе, конечно, и логин, и название сервера автоматически подставляется - ничего вручную писать не требуется.

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

Полнотекстового поиска пока нет, но судя по всему, скоро будет. Можно искать по хэштегам, причем поиск производится тоже сразу по всем серверам.

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

Не уверен, что буду в ближайшее время что-то писать, но кому интересно - можете подписываться на мой микроблог: @[email protected]