Подготовлен (https://hardenedbsd.org/article/op/2018-12-17/stable-release... первый стабильный выпуск HardenedBSD 12 (http://hardenedbsd.org/), форка операционной системы FreeBSD 12 (https://www.opennet.dev/opennews/art.shtml?num=49769), в который интегрированы дополнительные механизмы защиты (https://hardenedbsd.org/content/easy-feature-comparison) и техники противодействия методам эксплуатации уязвимостей. Установочные iso-образы и сборки для виртуальных машин сформированы (http://installer.hardenedbsd.org/pub/HardenedBSD/releases/am... для архитектуры AMD64. По мере готовности развиваемые проектом HardenedBSD по возможности переносятся в основные ветки FreeBSD.
По сравнению с HardenedBSD 11 в новой ветке реализованы следующие улучшения:
- При сборке приложений задействован механизм проверки целостности выполнения программ Non-Cross-DSO CFI (Control Flow Integrity), нацеленный на выявление некоторых форм неопределённого поведения, которые потенциально могут привести к нарушению нормального потока управления (проброс на произвольное место в памяти) в результате атаки на приложение. Для ядра CFI пока не применяется;
- Дополнительная изоляция гипервизора bhyve;
- Возможность включения режима отладки непривилегированных процессов
(sysctl security.bsd.unprivileged_process_debug) для отдельных jail-окружений;
- Применение метода защиты retpoline (https://www.opennet.dev/opennews/art.shtml?num=47864) для блокирования уязвимости Spectre v2 на этапе сборки приложений из портов и базовой системы;- Отключение по умолчанию технологии одновременной многопоточности (SMT или Hyper-Threading). Для включения следует установить переменную machdep.hyperthreading_allowed=1 в loader.conf;
- Перевод связанных с компилятором утилит ar, nm и objdump на реализации от проекта LLVM (llvm-ar, llvm-nm, and llvm-objdump);
- Сборка приложений с включением оптимизации на этапе связывания (LTO, Link-Time Optimization).
Из особенностей (https://github.com/HardenedBSD/hardenedBSD/wiki#features) HardenedBSD можно отметить:
- Реализации ASLR (Address Space Layout Randomization), NOEXEC и SEGVGUARD (защита от обхода ASLR);
- Более защищённые варианты mprotect и procfs/linprocfs;
- Ограничение некоторых настроек sysctl;
- Усиление защиты на стадии загрузки;
- Запрет маппинга страниц памяти одновременно в режиме исполнения и записи (W^X);
- Усиление защиты сетевого стека, добавление рандомизации идентификаторов IP и временных адресов IPv6;
- Защита от метода работы эксплоитов SROP (https://en.wikipedia.org/wiki/Sigreturn-oriented_programming) (Sigreturn-oriented programming);
- Изоляция большей части исполняемых файлов базовой системы на уровне ограничения доступа к системным вызовам;
- Возможность запуска программ только из разрешённых каталогов;
- Сборка исполняемых файлов базовой системы и портов в режиме PIE (Position-Independent Executables) с защитой от переполнения стека (SafeStack), механизмом проверки целостности выполнения программы CFI (Control Flow Integrity), защитой от эксплуатации уязвимостей Spectre (патчи retpoline) и включением опций RELRO и BIND_NOW;
- Для применения к приложениям дополнительных техник защиты предлагается утилита secadm (https://www.opennet.dev/opennews/art.shtml?num=41361).
URL: https://hardenedbsd.org/article/op/2018-12-17/stable-release...
Новость: https://www.opennet.dev/opennews/art.shtml?num=49808
Часть этого и во фряшечке легко включается.
>Часть этого и во фряшечке легко включается.Как со фряхе собирать порты с LTO? Ибо официальный метод не работает: https://wiki.freebsd.org/LinkTimeOptimisations
configure:4075: /usr/local/bin/clang70 -O2 -pipe -O2 -pipe -march=native -mtune=native -flto -DLIBICONV_PLUG -fstack-protector -fno-strict-aliasing -I/usr/local/include -DLIBICONV_PLUG -fuse-ld=gold -Wl,--plugin /usr/local/llvm70/lib/LLVMgold.so -L/usr/local/lib -fstack-protector conftest.c >&5
Assertion failed: (PassInf && "Expected all immutable passes to be initialized"), function addImmutablePass, file /tmpfs/usr/ports/devel/llvm70/work/llvm-7.0.1.src/lib/IR/LegacyPassManager.cpp, line 812.
clang-7: error: unable to execute command: Abort trap (core dumped)
Попробуй в /etc/make.conf:---
LLVM_VERSION?=70
LLVM_LTO?=true.if !empty(LLVM_VERSION)
CC=/usr/local/llvm${LLVM_VERSION}/bin/clang
CXX=/usr/local/llvm${LLVM_VERSION}/bin/clang++
CPP=/usr/local/llvm${LLVM_VERSION}/bin/clang-cpp
LDFLAGS+=-Wl,-rpath=/usr/local/llvm${LLVM_VERSION}/lib
CONFIGURE_ENV+=LLVM_CONFIG=/usr/local/llvm${LLVM_VERSION}/bin/llvm-config
. if !empty(LLVM_LTO)
CFLAGS.clang+=-flto=full
LD=/usr/local/llvm${LLVM_VERSION}/bin/ld.lld
LDFLAGS+=-fuse-ld=gold -Wl,--plugin /usr/local/llvm${LLVM_VERSION}/lib/LLVMgold.so
. endif
.endif
---ну, до ума доведёшь напильником, т.к. мир я этим не собирал - только net/svnup...
$ uname -srm
FreeBSD 12.0-RELEASE amd64
>ну, до ума доведёшь напильникомДа я бы с радостью. Только сборка почти каждого пакета вываливается с ошибкой:
Assertion failed: (PassInf && "Expected all immutable passes to be initialized"), function addImmutablePass, file /usr/ports/devel/llvm70/work/llvm-7.0.1.src/lib/IR/LegacyPassManager.cpp, line 812.
clang-7: error: unable to execute command: Abort trap (core dumped)
clang-7: error: linker command failed due to signal (use -v to see invocation)Если юзать gcc+lto то собирается почти все. Так что можно утверждать, что clang+lto поломан и никто не собирается его чинить.
> Да я бы с радостью. Только сборка почти каждого пакета вываливается с ошибкой:не каждого.
я кое-что уже проверил.
net/svnup, databases/sqlite3, ports-mgmt/pkg, editors/libreoffice, mail/thunderbird, www/firefox
собираются и есть выигрыш в размере результирующего бинаря.ты фигачишь -flto=full в CFLAGS, а в мурзилках - в CFLAGS.clang
p.s. и, да - правильно
LDFLAGS+=-fuse-ld=gold -Wl--plugin=/usr/local/llvm${LLVM_VERSION}/lib/LLVMgold.so
>ты фигачишь -flto=full в CFLAGS, а в мурзилках - в CFLAGS.clangТак если зафигачить в CFLAGS.clang то оно не будет юзаться. Посмотри листинг выполняемых команд при компляции.
>вот и devel/cmake подтянулся
А теперь возьми и вместо:
CFLAGS.clang+=-flto=full
поставь:
CFLAGS.clang+=-O2
...и увидишь, что размер бинарника не изменится ни на байт.Вот пример:
с CFLAGS.clang+=-O2:# ls -l `pkg info -l cmake | grep \/bin\/ccmake`
-rwxr-xr-x 1 root wheel 4265752 Dec 21 04:35 /usr/local/bin/ccmake
# md5 /usr/local/bin/ccmake
MD5 (/usr/local/bin/ccmake) = 41eeae1983e4cd6fb3827d8598651727с CFLAGS.clang+=-flto=full:
# ls -l `pkg info -l cmake | grep \/bin\/ccmake`
-rwxr-xr-x 1 root wheel 4265752 Dec 21 04:41 /usr/local/bin/ccmake
kp ports/devel/llvm70 # md5 /usr/local/bin/ccmake
MD5 (/usr/local/bin/ccmake) = 41eeae1983e4cd6fb3827d8598651727А разницу в размере ты скорее всего получил за счет того, что компилял не штатным компилятором и линковал другим линкером.
А если забирать -flto в CFLAGS, то видно как LTO колбасит при линковке дольше обычного, md5 и размер результирующего бинарника меняется.
----------------------------------------------------------
Вот тебе пример компиляции uWSGI:
Штатный компилятор:
-r-xr-xr-x 1 root wheel 871688 Dec 21 04:50 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = 1f9ebc989affbded937d26720aff9b5fclang70 из портов. В /etc/make.conf добавленно все что ты писал выше, только закомментированны CFLAGS.clang и LDFLAGS:
-r-xr-xr-x 1 root wheel 879928 Dec 21 04:51 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = a3fa26c2ad12591aa99d19ac93c8a16eРаскомментированы CFLAGS.clang и LDFLAGS:
-r-xr-xr-x 1 root wheel 874928 Dec 21 04:51 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = cfe5af237673e679341dcbbed04224efА теперь добавляем в CFLAGS -flto=full:
-r-xr-xr-x 1 root wheel 952768 Dec 21 04:52 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = b9d6776db2c70695bc7267c46689b4d4А вот если собрать с -flto=thin:
-r-xr-xr-x 1 root wheel 965040 Dec 21 05:00 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = ba91b7c8470fd87c7a048518fe5110ee...и если еще добавить в LDFLAGS: ,-plugin-opt,jobs=24 то линкует значительно быстрее чем -flto=full
вот и devel/cmake подтянулся:штатным:
$ ls -l `pkg info -l cmake | fgrep local/bin`
-rwxr-xr-x 1 root wheel 4399952 12 дек. 20:17 /usr/local/bin/ccmake
-rwxr-xr-x 1 root wheel 4760408 12 дек. 20:17 /usr/local/bin/cmake
-rwxr-xr-x 1 root wheel 4912056 12 дек. 20:17 /usr/local/bin/cpack
-rwxr-xr-x 1 root wheel 5735560 12 дек. 20:17 /usr/local/bin/ctestllvm70+lto:
$ ls -l `pkg info -l cmake | fgrep local/bin`
-rwxr-xr-x 1 root wheel 4184272 20 дек. 16:11 /usr/local/bin/ccmake
-rwxr-xr-x 1 root wheel 4527688 20 дек. 16:11 /usr/local/bin/cmake
-rwxr-xr-x 1 root wheel 4660184 20 дек. 16:11 /usr/local/bin/cpack
-rwxr-xr-x 1 root wheel 5446984 20 дек. 16:11 /usr/local/bin/ctest$ make -V CFLAGS
-O2 -fno-strict-aliasing -fmerge-all-constants -pipe -fstack-protector -isystem /usr/local/include$ make -V CFLAGS.clang
-flto=full$ make -V LDFLAGS
-Wl,-rpath=/usr/local/llvm70/lib -fuse-ld=gold -Wl,--plugin=/usr/local/llvm70/lib/LLVMgold.so -fstack-protector
Ты, как я понял, контрибутишь в неё. Что говорят про пересмотр сроков поддержки? К чему готовиться?
В основном в порты.
Я редко читаю рассылку и есть закрытые рассылки куда у меня доступа нет, так что я вообще не в теме.
В целом я же говорил на этот счёт тут, что разработчиков мало и многие вообще сидят на карренте, те он уже 13, а 12 это то куда им приходится бэкпортировать стабилизировавшиеся фичи.
А 11 это окаменевшая история куда что либо портировать ещё более затратно.Нашёл багу с поведением shutdown(), накорябал тулсу которая собиралась и на BSD и на линухах и показывала какие последовательности socket() accept() shutdown() close() и чего то ещё как отрабатывают на разных BSD и линухе.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227259
Это породило два совершенно разных патча для 11 и 12 (куррент на тот момент).ИМХО, помимо скромных ресурсов ещё есть часто искреннее не понимание зачем нужно сидеть на таком всяком старье и почему разрабы должны тащить туда апдейты когда народу тупо лень обновляться.
Разговоры о починке чего либо часто начинаются с "а на карренте это воспроизводится?", хотя ты сидишь на относительно свежем стабле (даже не релизе).
Ну вот рэдхэт зарабатывает бабло на таких ленивых пользователях, арч просто искатели приключений, а тут нечто среднее, где есть ветка для разработки, ветка куда кидают стабильные фичи, и ветка которая доживает своё с минимальным обслуживанием вообще.
Для себя я не вижу никакой проблемы в сидении на стабле или хотя бы на релизе, ибо мажорные обновления всё равно редки и только при них требуется пересобирать весь софт.
>часто искреннее не понимание зачем нужно сидеть на таком всяком старьеВот это "искреннее непонимание" и есть самое грустное.
>ветка которая доживает своё с минимальным обслуживанием вообще.
Это ещё печальнее.
>Для себя я не вижу никакой проблемы в сидении на стабле
Ну да, ты ведь разработчик, то, что для многих это геморрой, тебя мало интересует ("Почему бы не обновиться?" А почему собственно кому-то впёрло обновляться?
Так и останутся от пользователей фри несколько сотен разработчиков и нетфликс с соней(
Даже то, что когда-то было дебианом имеет поддержку в 5 лет, слака тоже. У слаки видимо прорва ресурсов.
> Даже то, что когда-то было дебианом имеет поддержку в 5 лет, слака тоже. У слаки видимо прорва ресурсов.Давай не будем лукавить, все LTS линукс-ядра поддерживают десятки разрабов на профессиональной основе. А зафиксировать версии ПО в дистрах слаки и деба - много ума не надо, в этом и профит, кстати.
Думаю что все адепты длительного суппорта всяких старых версий получают за это вполне конкретные бабки.
Здесь же открытый проект, каждый пилит что ему интересно и надо, естессно любителей некрофилии нет.
Есть немного разработчиков нанятых на деньги фонда, но они в основном пилят новые фичи, чинят баги и вот собственно потом бэкпортируют или делают отдельный патч для ещё поддерживаемых веток.
Если занять их только поддержкой старого барахла тогда прогресс ещё сильнее замедлится.Хотите всякие LTS по 5 лет - тащите деньги, думаю по самым скромным прикидкам нужно 0,5-1м зелени ежегодно только на это, чтобы хватило на 5-10 фулл тайм разрабов.
> Хотите всякие LTS по 5 лет - тащите деньги, думаю по самым
> скромным прикидкам нужно 0,5-1м зелени ежегодно только на это, чтобы хватило
> на 5-10 фулл тайм разрабов.Предлагаю запомнить этот твит и через годик посмотреть, сколько добавилось денег и юзеров. А затем ещё через год.
Мой прогноз таков, что на троллинг-релизы (с телегой багов позади, которые никто чинить не собирается) не будет никаких денег вообще.
>[оверквотинг удален]
> вполне конкретные бабки.
> Здесь же открытый проект, каждый пилит что ему интересно и надо, естессно
> любителей некрофилии нет.
> Есть немного разработчиков нанятых на деньги фонда, но они в основном пилят
> новые фичи, чинят баги и вот собственно потом бэкпортируют или делают
> отдельный патч для ещё поддерживаемых веток.
> Если занять их только поддержкой старого барахла тогда прогресс ещё сильнее замедлится.
> Хотите всякие LTS по 5 лет - тащите деньги, думаю по самым
> скромным прикидкам нужно 0,5-1м зелени ежегодно только на это, чтобы хватило
> на 5-10 фулл тайм разрабов.А, "никто никаму ничего не должен!!!". Ну останетесь без пользователей. Превратитесь в аналог федорки, вместо рэдхэт работая на нетфликс, эплю и соню, кукарекая о свободе.
> любителей некрофилии нет.Зато любителей копрофилии хоть отбавляй, им подавай свеженькое оно.
Повторяю для тех, кто за танковой бронёй: троллинг-релиз уместен только для энтузиастов, либо больших компаний, способных стабилизировать натроленное.
И 5 лет это небольшой срок.
> И 5 лет это небольшой срок.Только что как раз об этом подумалось. Для меня двадцать лет назад как вчера были, а для половины анонимов опеннета тогда жизнь только-только началась. Очень разная временная шкала и вообще ощущение времени.
Я и сам конца 80-х выпуска. Просто у людей, даже людей в летах, стала на удивление короткая память, это касается всего. Ну и эгоизм зашкаливает.
Субъективное восприятие течения времени зависит от возраста и от общей внутренней активности процессов организма. Мы постепенно замедляемся и приближаемся к тому нехорошему гомеостатическому состоянию, которое заканчивается смертью. :) После сорока и пресловутого КСВ внутреннее переживание течения времени страшно «ускоряется» и самое это время «сжимается»: год — вообще ни о чём, пять лет? — только вчера же вот было. А лет в 20—25 это ого-го как много! И когда вроде уже многое знаешь и умеешь, и так много хочется ещё узнать и суметь, а уже некогда, по сути, уже мало что успеешь. Это единственный существенный (помимо ухудшения здоровья) недостаток взросления, на мой взгляд. Впрочем, к чему бухтеть? Радоваться надо каждому новому дню. :-)
В чем преимущество если есть OpenBSD?, в которой это тоже реализовано.
В том,что сабж основан на фре. Со всеми вытекающими.К чему такие странные вопросы?
В том, что делают нормально, а не советуют тупо отключать HT/SMP просто на всякий.
Предотвратив тем самым кучу новых уязвимостей, ага. Какой плохой Тео.
То ли дело - бракоделы из intel!
Это Тео ленивый бракодел, ибо рубит с плеча, когда во всех остальных осях проблему успешно решили.Н - Некомпетентность
> проблему успешно решили.ага-ага. за последний год "проблему успешно решали" несколько раз - т.е. проблема по определению не решена вовсе. так что тео молодец.
>ага-ага. за последний год "проблему успешно решали" несколько раз - т.е. проблема по определению не решена вовсеЛинуксопроблемы-линуксопроблемочки. А вот в ненавистной венде как-то решили, причем без просадки производительности.
Жырните, батяня.
Один из пачтей для обсуждаемых бэкдоров ложил десятку в синий экран после перезагрузки. Предшественник этого патча делал из процессора тыкву срезая производительность почти в два раза, ио тоже притормаживало заметно.
Так что не надо тут про «без просадки производительности».
>>ага-ага. за последний год "проблему успешно решали" несколько раз - т.е. проблема по определению не решена вовсе
> Линуксопроблемы-линуксопроблемочки. А вот в ненавистной венде как-то решили, причем без
> просадки производительности.Вин10 сама по себе проблема в месте с её заШИТником и копраной. Даже браузер себе убожества не смогли сделать, легли под гуглю.
Её нигде не решили. Её _нельзя_ решить. Решение надо делать начисто в кремнии.Так что пока ты за свои же деньги употребляешь с лопаты корм, которым тебя кормят обещатели счастья, никакой безопасности не прибавляется.
Но Тео, конечно, в сравнении с тобой удручающе некомпетентен.
> Это Тео ленивый бракодел, ибо рубит с плеча, когда во всех остальных осях проблему успешно решили.Ага. То-то недавно новость была, в которой Линус оподливился и признал, что проще выключить SMT, чем что-то фиксить - и то производительность меньше просядет. Ну и в hardenedbsd, в которой "делают нормально, а не советуют тупо отключать HT/SMP":
> Отключение по умолчанию технологии одновременной многопоточности (SMT или Hyper-Threading). Для включения следует установить переменную machdep.hyperthreading_allowed=1 в loader.conf;
(Цитата из текущей новости)
> Н - Некомпетентность
Подписываться под сообщением было не обязательно.
В обычной фре всё это тоже можно реализовать . Этот же дист просто из коробки типа всё предоставляет. Короче такой себе вариант. Странно, что из платформ только AMD64. А где всё остальное? Где? Тогда как фря поддерживает более широкий круг архитектур. Ну может быть кому-то и поможет этот HardenedBSD. Но если паранойить, тогда сразу на опенку надо переходить.
> В обычной фре всё это тоже можно реализовать .Можно. Правда, как обычно - "Да, но пока еще нет. Но вот совсем скоро да, просто пока еще нет".
> Этот же дист просто из коробки типа всё предоставляет. Короче такой себе вариант.Нет, это не "дист" в лучших традициях Денисок и любителей нескучных обоин - обоин там нет, нехило пропатчено ядро (HardenedBSD пилится самими автор(ами) патчей, https://lists.freebsd.org/pipermail/freebsd-arch/2014-July/0... есть дополнительные sysctl-ки, управление:
https://github.com/HardenedBSD> Странно, что из платформ только AMD64. А где всё остальное? Где?
Наверное, ждет спонсирования и/или помощи анонима?
> has been tested and is known to work on amd64, i386, arm, arm64, and risc-vhttps://github.com/HardenedBSD/hardenedBSD/wiki
Branch Repository Binary Updates Purpose
hardened/current/master HardenedBSD amd64, arm64 Main development branch (13-CURRENT)
Всё правильно. В этом и смысл. Не хотите возиться со всеми этими настройками - сразу ставите.
А так то да.
А куда его ставить? На x86 роутер? На стораджи для zfs?
Не поверите, существует еще много разных приложений, кроме apache+php+mysql.Ради интереса, пробегитесь по папочкам /usr/ports/astro, /usr/ports/biology, /usr/ports/finance, /usr/ports/match, /usr/ports/science.
/usr/ports/games забыли
Где я упомянул apache etc? Вы совсем больны, сходите к сексопатологу
Тут весь вопрос, сколько всякой фигни в качестве служб и открытых портов будет запущено сразу после установки, если как во Фре, то ясно, что OpenBSD лучше.
Всё в безопасности как и в театре начинается от вешалки-установки, если система с дырами в безопасности стояла непропатченная 20 минут(пока админ попьёт кофейку и обновит систему), то какое этой системе может быть потом доверие?
В тексте новости же написано, что по умолчанию включены mac_bsdextended и capsium.
Ну и поищите там `secadm` с примерами.
А что, кто-то кроме смол-офисных и домашних админов ставит ОС вручную и оставляет непропатченную сиситему просто так включеной и в сети пока идёт на перерыв?
Ещё и пароль к базе и клиент-банку на бумажке записывают и к монитору клеят. Да, и уходят на обед пощебетять всем отделом, а дверь не запирается. А оператор системы видеонаблюдения в это самое время со своей девушкой болтает по телефону, пока у него на мультиплексоре выносят с территории ценное имущество.Лучше тебе даже не знать, анон, _как_ бывает в жизни на самом деле, а не в сказках.
судя по этой таблице по части внедрения безопасных технологий FreeBSD не только от OpenBSD отстаёт, но и от NetBSD и тем более HardenedBSD
Фактически не то что отстаёт, а вовсе ничего не внедряет.
В общем у FreeBSD до сих пор цель как и раньше - быстрее всех BSD систем работать на i386 :)
Это как автомобили автовазовцев - лишь бы ездили быстро, остального ничего не надо, никакой безопасности или комфорта, чисто двигатель и жестянка для защиты от непогоды.
А как же капсикум?
Эти чудила таких словей не знають.
> Эти чудила таких словей не знають.Ну про заточку под 86 он во многом прав. Что там с RISC-V, вроде фряшники чуть ли не пионеры были, а сейчас тихо.
И что со сроками поддержки, хотя бы на 86.
С RISC-V там всё примерно так же, как и самой архитектурой.
Зато по ARM64 прогресс.
> С RISC-V там всё примерно так же, как и самой архитектурой.
> Зато по ARM64 прогресс.И куда этот арм ставить, на сервак что ли? Спасибо, пользуйтесь на здоровье сами, мне тормозное "энергосберегающее" шерето не нужно.
И что со сроками поддержки? Все сохраняют гордое молчание.
> И куда этот арм ставить, на сервак что ли?Вангую что через несколько лет серверы на ARM64 будут иметь заметную долю на рынке.
Так что FreeBSD правильно оценивает перспективы.> И что со сроками поддержки?
Сроки сейчас в процессе обсуждения. За деталями в мэйл лист.
>серверы на ARM64 будут иметь заметную долю на рынке.Пожелаю удачи счастливым покупателям, она им пригодится.
>Так что FreeBSD правильно оценивает перспективы.
Перспективы лизания интелова зада? Значит не зря они усилили поддержку фрибсд.
>Сроки сейчас в процессе обсуждения
Так полгода или год? Стрёмно озвучить предложения?
Троллинг-релиз не нужен эксплуатантам. Если это произойдёт, фряха будет нужна только горстке корпоративщиков, имеющих ресурсы для стабилизации этого сроллинга. Впрочем, эта злокачественная тенденция характерна почти всего "свободного" и несвободного софта.