Forwarded from Авва
В мире компьютерной безопасности сегодня интересный день. Точнее, он начался вчера вечером, когда немецкий разработчик Андрес Фройнд опубликовал отчет о тайной лазейке (бэкдор), которую он обнаружил в новых версиях широко используемой библиотеки для сжатия liblzma (часть архиватора xz). Лазейка позволяет взломщикам заходить через SSH на системы, в которых установлены эти новые версии - к счастью, похоже, что это всего несколько дистрибутивов Линукса в их до-релизовых версиях.
Всех очень впечатлило, насколько эта лазейка была сделана хитро, и как взломщик или взломщики серьезно поработали над тем, чтобы замести следы:
- взломщик под именем/псевдонимом Jia Tan почти два года (!) участвовал в разработке опенсорсного пакета xz, завоевал доверие его мейнтейнеров и получил доступ к прямому коммиту в его репозиторию. Он сделал больше 700 коммитов, лишь малая часть которых медленно подготовила код для лазейки
- основной код лазейки спрятан в тестовых файлах проекта (примеры "плохих" и "хороших" архивов)
- исходный код, который включает лазейку в собственно библиотеку, вообще не является частью основной репозитории в Github. Он спрятан в тар-архивах двух последних релизов, которые обычно используются мейнтейнерами дистрибутивов. То есть есть таг релиза, есть архив, якобы собранный из репозитории в момент этого тага, но на самом деле в нем есть крохотная добавка; в самой репозитории ее нет
- эта добавка прячется в конфигурационной магии autoconf, которую все ненавидят лютой ненавистью и никто никогда не заглядывает внутрь
- она проверяет, когда исходники конфигурируют именно для постройки дебиан-пакета или RPM-пакета (т.е. то, что будут делать мейтейнеры дистрибутивов), и только в этом случае вынимает из тестовых файлов определенные куски и добавляет в код библиотеки
- внутри библиотеки код лазейки заменяет несколько функций, которые работают с символьными таблицами библиотек во время их подгружения. Затрачены специальные усилия, чтобы имена функций не появлялись в двоичном коде. Что именно дальше делает код лазейки, до конца еще не ясно, но он обрабатывает сам символьные таблицы библиотек, и видимо находит то, что имеет отношение к SSH серверу, и что-то там заменяет. Это еще проверяют сейчас.
- интересно, что openssh, стандартный SSH-сервер под линуксом, не использует библиотеку liblzma, в которую вставили эту лазейку, но несколько популярных дистрибутивов добавляют в него поддержку уведомлений системы, systemd, а библиотека libsystemd уже в свою очередь использует liblzma.
- после того, как вышли версии библиотеки с ошибкой, несколько разных людей с незамеченными до того именами (очевидно, альты взломщика или сообщники) стали открывать запросы в разных программах и пакетах сделать апгрейд на эти новые версии, и в некоторых случаях преуспели
Взломщик допустил только одну ошибку: код лазейки, когда он работает как часть openssh, довольно медленно обрабатывает эти символьные таблицы, или что он еще там делает, и даже неудачная попытка логина на такую систему занимает на полсекунды дольше, чем обычно. Андрес Фройнд заметил эти полсекунды задержки. Они его раздражали. Он решил найти, какой новый баг к этому приводит, и нашел эту лазейку.
Если бы все происходило быстро и не было задержки в полсекунды, очень может быть, что это не заметили бы месяцы и годы, и этот код попал бы в основные дистрибутивы, в версии Линукса, которые запускаются у основных облачных провайдеров итд. Они реально очень, ОЧЕНЬ хорошо замели следы.
Теперь все думают, что надо было/надо теперь делать по-другому, и как обнаружить следующую лазейку такого типа - или предыдущую, если она уже есть и никто не знает! - не опираясь на удачу и героическую занудливость Андреаса Фройнда.
Всех очень впечатлило, насколько эта лазейка была сделана хитро, и как взломщик или взломщики серьезно поработали над тем, чтобы замести следы:
- взломщик под именем/псевдонимом Jia Tan почти два года (!) участвовал в разработке опенсорсного пакета xz, завоевал доверие его мейнтейнеров и получил доступ к прямому коммиту в его репозиторию. Он сделал больше 700 коммитов, лишь малая часть которых медленно подготовила код для лазейки
- основной код лазейки спрятан в тестовых файлах проекта (примеры "плохих" и "хороших" архивов)
- исходный код, который включает лазейку в собственно библиотеку, вообще не является частью основной репозитории в Github. Он спрятан в тар-архивах двух последних релизов, которые обычно используются мейнтейнерами дистрибутивов. То есть есть таг релиза, есть архив, якобы собранный из репозитории в момент этого тага, но на самом деле в нем есть крохотная добавка; в самой репозитории ее нет
- эта добавка прячется в конфигурационной магии autoconf, которую все ненавидят лютой ненавистью и никто никогда не заглядывает внутрь
- она проверяет, когда исходники конфигурируют именно для постройки дебиан-пакета или RPM-пакета (т.е. то, что будут делать мейтейнеры дистрибутивов), и только в этом случае вынимает из тестовых файлов определенные куски и добавляет в код библиотеки
- внутри библиотеки код лазейки заменяет несколько функций, которые работают с символьными таблицами библиотек во время их подгружения. Затрачены специальные усилия, чтобы имена функций не появлялись в двоичном коде. Что именно дальше делает код лазейки, до конца еще не ясно, но он обрабатывает сам символьные таблицы библиотек, и видимо находит то, что имеет отношение к SSH серверу, и что-то там заменяет. Это еще проверяют сейчас.
- интересно, что openssh, стандартный SSH-сервер под линуксом, не использует библиотеку liblzma, в которую вставили эту лазейку, но несколько популярных дистрибутивов добавляют в него поддержку уведомлений системы, systemd, а библиотека libsystemd уже в свою очередь использует liblzma.
- после того, как вышли версии библиотеки с ошибкой, несколько разных людей с незамеченными до того именами (очевидно, альты взломщика или сообщники) стали открывать запросы в разных программах и пакетах сделать апгрейд на эти новые версии, и в некоторых случаях преуспели
Взломщик допустил только одну ошибку: код лазейки, когда он работает как часть openssh, довольно медленно обрабатывает эти символьные таблицы, или что он еще там делает, и даже неудачная попытка логина на такую систему занимает на полсекунды дольше, чем обычно. Андрес Фройнд заметил эти полсекунды задержки. Они его раздражали. Он решил найти, какой новый баг к этому приводит, и нашел эту лазейку.
Если бы все происходило быстро и не было задержки в полсекунды, очень может быть, что это не заметили бы месяцы и годы, и этот код попал бы в основные дистрибутивы, в версии Линукса, которые запускаются у основных облачных провайдеров итд. Они реально очень, ОЧЕНЬ хорошо замели следы.
Теперь все думают, что надо было/надо теперь делать по-другому, и как обнаружить следующую лазейку такого типа - или предыдущую, если она уже есть и никто не знает! - не опираясь на удачу и героическую занудливость Андреаса Фройнда.
🤯26👏4😭4
SQLite, конечно, потрясающая БД. Подвернулся интересный пост, где чел рассказывает, как её подтюнить для использования в небольших сервисах, что это даёт, и чем это может быть чревато. Ну, что сказать, заманчивая идея! Удивительное совпадение, последние пару недель я как раз про это подумывал для одного маленького сервиса.
#sqlite #db #server
#sqlite #db #server
🤔3🤣2
Небольшая поделка на Go, чтобы получать embeddings для текстов от разных провайдеров и визуализировать их 2D и 3D проекции. Проект на самом деле пока скорее игрушка (ну не будет никто много настоящих данных туда руками вбивать), но круто, что при необходимости можно это дело подхачить, и уже смотреть на проекции своих настоящих векторов. Ну и нельзя не радоваться, что всё больше ML-related вещей пишутся для Go. Прототип на питоне ок, но прод - это давайте как-то без нас.
#go #embedding
#go #embedding
Совсем оффтоп, но очень уж забавным показалось. Everyone is John. Очень простая ролевая настолка под открытой лицензией, в которой вы - голос в голове сумасшедшего, и ваша задача - как можно больше раз заставить Джона сделать именно то, чем одержим ваш "голос".
Всё гениальное просто, и всё простое гениально!
#game #rpg
Всё гениальное просто, и всё простое гениально!
#game #rpg
🥴3❤1👎1
Не в первый раз жалобы на AI-generated иллюстрации к постам. Мне они в кайф, но если они не нравятся большинству, уберём. Итак?
Anonymous Poll
72%
Оставить 👍
28%
Прекратить 👎
🤯1
Никогда раньше не задумывался, что происходит с картами или с GPS координатами, когда случаются сдвиги тектонических плит. Вот по ссылке можно почитать разное интересное про эту и другие проблемы.
#gps #maps
#gps #maps
😱6🔥1
Garbage Collection for Systems Programmers. Чел в каком-то смысле старается развенчать миф о том, что GC - это точно медленно, и уж где-где, а ядре ОС его точно нет и быть не может.
#gc #memory
#gc #memory
👍1
Чудесная заметка про системных программистов и отладку проблем в ядре ОС или в распределенной системе.
#programming #system #debug
I described the bug, which involved concurrent threads and corrupted state and asynchronous message delivery across multiple machines, and my coworker said, “Yeah, that sounds bad. Have you checked the log files for errors?” I said, “Indeed, I would do that if I hadn’t broken every component that a logging system needs to log data. I have a network file system, and I have broken the network, and I have broken the file system, and my machines crash when I make eye contact with them. I HAVE NO TOOLS BECAUSE I’VE DESTROYED MY TOOLS WITH MY TOOLS. My only logging option is to hire monks to transcribe the subjective experience of watching my machines die as I weep tears of blood.”
#programming #system #debug
🔥1
Удивительное рядом. Прикольная уязвимость в больших почтовых клиентах, которая позволяет показать или скрыть часть письма в зависимости от того, переслали его или нет.
#cybersec #vulnerability #email
#cybersec #vulnerability #email
👍1
Google взялись за safe-by-default библиотеки для Go. Там и shell / YAML шаблоны со всякими доп. защитами от злого инпута, и работа с файлами с жестким контролем доступа к папкам, и всякое разное вокруг работы с архивами.
#go #cybersec #library
#go #cybersec #library
😁3
Сразу скажу, не без спорных моментов, но все же интересный пост про билд тулы. Путь от Make до современных e2e систем с вкраплениями истории и набором линз, под которыми на очередную билд систему можно смотреть.
#build
#build
Пусть старый, но не ставший от этого менее интересным разбор реализации Go интерфейсов в gc компиляторах.
#go #interface #compiler
#go #interface #compiler
Защитники веба не дремлют. Все уже смирились с тем, что люди берут строки и из них выполняют JS или вставляют HTML. Теперь этот процесс пытаются сделать безопаснее: идея Trusted Types должна позволить зафорсить санитайзинг таких произвольных потенциально зловредных строк.
#cybersec #browser #js
#cybersec #browser #js
🤮2
V8 Sandbox выходит из экспериментального статуса. По ссылке можно почитать чуть детальнее, что это, от каких memory проблем оно должно нас защищать и как.
#cybersec #browser #chrome
#cybersec #browser #chrome
Forwarded from Local-first и децентрализация (Victor Grishchenko)
Чтобы программировать, нужно быть молодым. Вот я решил проверить, как дела у WebAssembly. Если помните, это легковесная среда выполнения для безопасного подмножества ассемблера. В wasm можно компилить разные программки на C и Rust и запускать в браузере. Ну либо эмбедить этот код в свою программу. С webassembly.org перехожу на wasmtime. Ну, понятно, там советуют
Ну, что тут сказать. Это явно нужно запускать в электроне. Там незаметно будет.
P.S. Есть ещё wasmer, "blazing fast and secure WebAssembly runtime that enables incredibly lightweight containers", но он пока скачивается, репка под гиг.
P.P.S. билдится уже, 600 зависимостей.
P.P.P.S. с
P.P.P.P.S. Там ещё у подпроектов свои сотни зависимостей.
Итого, при сборке wasmer упал rustc.
Резюме. rm -rf: lightweight and incredibly secure.
curl | sh сразу, печалька. Я всё-таки git clone делаю. 120MB репка. Легковесный ассемблер, ага. cargo build скачивает зависимости, их сотни. Билд ломается, в библиотеке machine learning чего-то не хватает. Ах, да, ещё git submodule забыл. git ещё скачивает... cargo build срабатывает, вот и результат-rw-r--r--. 2 gritzko gritzko 346489812 Apr 18 09:37 libwasmtime_cli.rlib
-rwxr-xr-x. 2 gritzko gritzko 434775592 Apr 18 09:37 wasmtime
Ну, что тут сказать. Это явно нужно запускать в электроне. Там незаметно будет.
P.S. Есть ещё wasmer, "blazing fast and secure WebAssembly runtime that enables incredibly lightweight containers", но он пока скачивается, репка под гиг.
P.P.S. билдится уже, 600 зависимостей.
P.P.P.S. с
rustc 1.79.0-nightly (c9f8f3438 2024-03-27) не собралосьP.P.P.P.S. Там ещё у подпроектов свои сотни зависимостей.
Итого, при сборке wasmer упал rustc.
error: rustc interrupted by SIGSEGV, printing backtrace
/usr/local/bin/../lib/librustc_driver-4caab773549df9ac.so(+0x3016246)[0x7fa4b2016246]
/lib64/libc.so.6(+0x3e9a0)[0x7fa4aee5c9a0]
/usr/local/bin/../lib/../lib/libLLVM.so.18.1-rust-1.79.0-nightly(+0x621d6eb)[0x7fa4ad61d6eb]
Резюме. rm -rf: lightweight and incredibly secure.
👎1😁1
Интервью с незрячим разработчиком. Рассказывает, как ему удается работать, почему Windows, и даже как немного получается писать фронтенд.
#accessibility
#accessibility
🔥4🤯4
Прикольно, чел хотел написать бесконечный цикл, но только чтобы оптимизирующий компилятор этого не понял. Для этого он взял частный случай великой теоремы Ферма, и сильно удивился, когда некоторые компиляторы её «опровергли» и успешно цикл оптимизировали.
#compiler #c #optimize
#compiler #c #optimize
😁2
В Minecraft был веселый баг: сидя в лодке, останешься живым при падении с любой высоты. Ну, почти с любой. Было несколько конкретных высот, при падении с которых лодка ломалась, а персонаж умирал. Оказалось, дело в т.ч. в неточности float’ов. В видео можно посмотреть детальнее.
За ссылку скажем спасибо @osipxd.
#talk #gamedev #bug
За ссылку скажем спасибо @osipxd.
#talk #gamedev #bug
😁9👍1
Статус точка что-нибудь точка ком сайты, которые радостно светят нам зелеными графиками и довольными “All systems operational” сообщениями, когда на самом деле все сломано, - это уже классика. OpenAI - одни из таких. И поэтому я очень рад вот этому независимому мониторинг дашборду, который, как показала практика, чуть лучше отображает реальное положение дел.
#ai #monitoring #tool
#ai #monitoring #tool
👍4