The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Экспериментальная поддержка пересборки ядра Linux в Clang с механизмом защиты CFI

21.11.2019 10:44

Кес Кук (Kees Cook), бывший главный сисадмин kernel.org и лидер Ubuntu Security Team, ныне работающий в компании Google над обеспечением защиты Android и ChromeOS, подготовил экспериментальный репозиторий с патчами, позволяющими собрать ядро для архитектуры x86_64 с использованием компилятора Clang и активацией механизма защиты CFI (Control Flow Integrity). CFI обеспечивает выявление некоторых форм неопределённого поведения, которые потенциально могут привести к нарушению нормального потока управления (control flow) в результате выполнения эксплоитов.

Напомним, что в LLVM 9 были включены изменения, необходимые для сборки ядра Linux с использованием Clang для систем с архитектурой x86_64. Проекты Android и ChromeOS уже применяют Clang для сборки ядра и Google тестирует Clang в качестве основной платформы для сборки ядер для своих рабочих Linux-систем. Варианты ядра, собираемые при помощи Clang, также развивают проекты Linaro и CrOS.

  1. Главная ссылка к новости (https://outflux.net/blog/archi...)
  2. OpenNews: Инициатива по передаче в основное ядро Linux специфичных для Android изменений
  3. OpenNews: Google открыл код ClusterFuzz, платформы для выявления ошибок и уязвимостей
  4. OpenNews: Фреймворк для написания защищённых драйверов для ядра Linux на языке Rust
  5. OpenNews: Обеспечена возможность сборки ядер Linux 4.4 и 4.9 при помощи Clang
  6. OpenNews: Анонсирован проект LLVMLinux, нацеленный на обеспечение сборки ядра Linux при помощи Clang
Лицензия: CC-BY
Тип: К сведению
Ключевые слова: linux, llvm, clang
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (52) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, netricks (?), 11:40, 21/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Любопытно, там же куча кода написана с расширениями gnu... Как он это обошел?
     
     
  • 2.3, Medoed (?), 11:48, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Clang умеет в большинство расширений GNU.
     
  • 2.4, Ordu (ok), 11:50, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Там не особо-то и используется, в смысле далеко не все расширения используются. Шланг же поддерживает некоторые из этих расширений.
     
  • 2.15, кельвин (?), 13:41, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    вроде как написали врапер для каждого из ядровых GCCизмов, но это не точно.
     
  • 2.32, Аноним84701 (ok), 16:33, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Любопытно, там же куча кода написана с расширениями gnu... Как он это обошел?

    https://releases.llvm.org/6.0.0/tools/clang/docs/LanguageExtensions.html
    > In addition to the language extensions listed here, Clang aims to support a broad range of GCC extensions.

    [code]
      -std=<standard>
                  Specify the language standard to compile for.
    ...
                     gnu89
                     gnu90
                        ISO C 1990 with GNU extensions
    ...
                     gnu99
                        ISO C 1999 with GNU extensions

    ...
                     gnu11
                        ISO C 2011 with GNU extensions
    ...    
                     gnu17
                        ISO C 2017 with GNU extensions
    [/code]

     
     
  • 3.33, Аноним (33), 17:17, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    А goto только на той неделе добавили...
     
     
  • 4.36, Ivan_83 (ok), 17:39, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Враки, я goto в clang юзал ещё в 3.3 чтоли, и фряха бы без goto не собралась.
     
     
  • 5.40, Аноним (33), 18:48, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Враки, я goto в clang юзал ещё в 3.3 чтоли, и фряха
    > бы без goto не собралась.

    Как ты его юзал интересно, если только в 9 добавили? Ври да не завирайся.

     
     
  • 6.44, Аноним84701 (ok), 19:35, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как ты его юзал интересно, если только в 9 добавили? Ври да  не завирайся.

    Наверное молча – добавленный "asm goto" != "C-goto" и сам по себе довольно специфичная штука.
    https://bugs.llvm.org/show_bug.cgi?id=9295

     
     
  • 7.46, Аноним (33), 19:44, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >> Как ты его юзал интересно, если только в 9 добавили? Ври да  не завирайся.
    > Наверное молча – добавленный "asm goto" != "C-goto" и сам по себе
    > довольно специфичная штука.
    > https://bugs.llvm.org/show_bug.cgi?id=9295
    >специфичная штука

    Да вот только ядро без неё было не собрать. Об этом я и сказал изначально. Не такая уж и специфичная, просто не принято у нас писать на ассемблере (тем более на гнутом, логичнее сразу взять насм/фасм). Если бы больше программистов вручную оптимизировали свой высокоуровневый сишный код, эта фича могла бы быть более популярной.

     
     
  • 8.48, Аноним84701 (ok), 20:54, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https lwn net Articles 734071 2017 https lwn net Articles 655544 2015 ... текст свёрнут, показать
     
     
  • 9.49, Аноним (33), 21:00, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Странные ссылки Это старые мамонтовые ядра, нынешним она вроде как обязательно ... текст свёрнут, показать
     
  • 6.50, Ivan_83 (ok), 01:47, 23/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Не задумываясь, не было у меня проблем с этим, всё собиралось и работало.
     
  • 2.56, nc (ok), 08:06, 26/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Расширения gnu давно пора принять в стандарт языка. Простые и полезные.
     

  • 1.5, Аноним (5), 11:59, 21/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    gcc капец? gcc-сец?
     
     
  • 2.6, пох. (?), 12:15, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +9 +/
    в анально-огороженной инфраструктуре гуглозондов - да, давно к этому шло.

    Мэйнстримные линуксы как собирались gcc, так и будут, не плачьте.

     
  • 2.24, Аноним (24), 14:54, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, X-капец, SysVinit-капец, GCC-капец, ... Только они всё живут и здравствуют.
     
  • 2.35, evkogan (?), 17:33, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Еще совсем недавно производительность кода собранного шлангом сильно отставала.
    Для ядра это особенно критично.
    И я не верю что это уже победили.
    Так что это шаг туда, но идти еще долго.
     
     
  • 3.37, Ivan_83 (ok), 17:40, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Там очень не очевидно с производительностью, потому что какие то вещи получаются быстрее какие то медленее.
     
  • 3.42, Аноним84701 (ok), 19:06, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Еще совсем недавно производительность кода собранного шлангом сильно отставала.
    > Для ядра это особенно критично.

    https://www.phoronix.com/scan.php?page=article&item=gcc9-clang8-hedt&num=2
    Отставание, как оно есть.

    Ну и как раз в ядре без бенчей  clang vs gcc как-то не очень верится в "критичную" разницу [работы ядра], ведь
    такая "критичная" оптимизация (обычно) подразумевают значительную "трансформацию" изначального кода  -- что как раз в ядре (обычно таки) совсем нежелательно.
    См. "теплые отзывы" на "вумничание" того же gcc:
    http://lkml.iu.edu//hypermail/linux/kernel/1407.3/00650.html
    > Re: Random panic in load_balance() with 3.16-rc
    > From: Linus Torvalds
    > Lookie here, your compiler does some absolutely insane things with the spilling, including spilling a *constant*.

    https://lore.kernel.org/patchwork/patch/773330/
    > gcc-7 has an "optimization" pass that completely screws up, and generates the code expansion for the (impossible) case

    https://lkml.org/lkml/2018/6/7/980
    > Mark notes that gcc optimization passes have the potential to elide necessary invocations of this instruction sequence, so mark the asm volatile.

     
  • 3.55, Softwayer (?), 03:28, 25/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Для ядра это особенно критично.

    Это ещё почему?

     

  • 1.7, Аноним (7), 12:38, 21/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Так это что, я наконец могу перестать говорить, что я использую "ГАНУСЛЭШЛИНУКС"???
     
     
  • 2.8, Аноним (8), 12:45, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    да, когда сумеешь обойтись без mv, cp, cat, dd... и прочего гнутого шлака
     
     
  • 3.9, Аноним (9), 13:01, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Их уже переписывают на Rust?
     
     
  • 4.10, Аноним (10), 13:05, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Их можно взять из BSD.
     
     
  • 5.11, Аноним (33), 13:11, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Только если не пользоваться.
     
     
  • 6.43, Аноним84701 (ok), 19:12, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Только если не пользоваться.

    Не стесняйтесь аргументировать более, хм,  подробно.

     
  • 4.29, имя (ok), 15:25, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Их уже переписывают на Rust?

    2014: https://www.opennet.ru/opennews/art.shtml?num=39989

     
  • 3.12, Аноним (12), 13:14, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Есть бсд версии этих утилит
     
     
  • 4.13, Аноним (13), 13:17, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Компилятор тут вообще ни при чём.
     
  • 3.17, fooser (?), 14:26, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    с каких это пор busybox стал гнутым софтом?
     
     
  • 4.18, fooser (?), 14:29, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    интересно, если я скомпиляю ведро линукса clang-ом, обвешу systemd, busybox, zsh и прочими негнутыми аналогами системного софта - я ж могу не называть Линукс гну/линуксом?

    кстати инетересно подсчитать сколько в современных дистрах осталось гнутого софта.

     
     
  • 5.25, Аноним (24), 15:01, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ну-ка расскажи нам, как ты ЛёнькоД заставишь работать с busybox и mucl?
     
  • 4.19, Аноним (19), 14:30, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Действительно.
     
  • 4.20, Аноним (19), 14:32, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А, я думал это ирония, а ты реально поехавший.
     

  • 1.22, ан (?), 14:37, 21/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А зачем? Что это в идеале даст? Больше вопрос в целом о настойчивом желании собрать ядро клангом, чем защите CFI.
    С переводом лисы на кланг время компиляции уменьшилось примерно в полтора раза, лиса стала пошустрее на старом железе, но по началу вылетала на js менюшках, сейчас вроде вылечили. Но ядро то зачем?
     
     
  • 2.26, Аноним (24), 15:11, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    "Мы шлангисты тоже так могём, мы крутые!"
     
  • 2.28, Аноним (28), 15:24, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Хотят перестать зависить от GNU. Android – это Non-GNU Linux.
     
     
  • 3.39, Аноним (39), 18:05, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А зависимость теперь от Apple их не беспокоит? :-) Ворон ворону глаз не выклюет конечно, но по моему вряд ли в этом дело. Скорее верится в энергоэффективность и экономию на оплате электричества, для ДЦ это может быть заметно.
     
     
  • 4.41, Аноним (41), 18:51, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >А зависимость теперь от Apple их не беспокоит?

    А нет никакой зависимости от Apple. У GCC рантаймовые компоненты либо под LGPLv3, либо используют хитрые условия про eligible compilation process, а у шланга все пермессивное.

     
  • 4.45, Аноним84701 (ok), 19:40, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > А зависимость теперь от Apple их не беспокоит? :-)

    Ну, зависимость WebKit от Apple Гугла как-то не очень остановила ;)

     
     
  • 5.51, Аноним (51), 17:56, 24/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так сказали же, ворон ворону глаз не выклюет.
     
  • 2.30, Аноним (33), 15:46, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Ядро слишком долго компилируется. Они экономят электроэнергию. Корпорации очень беспокоят вопросы эффективности и сохранения природы (по этой же причине они используют угольные электростанции).
     
     
  • 3.47, Аноним (33), 20:29, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вот минусуете, а ведь это основной "аргумент" сторонников шланга. :D

    И в корпоративных презенташках а ля "зачем нам нужен шланг" тоже видел регулярно.

     
  • 3.52, Аноним (51), 17:58, 24/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >сохранения природы
    >угольные электростанции

    Здесь какое-то противоречие.

     
     
  • 4.54, Аноним (33), 18:02, 24/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >>сохранения природы
    >>угольные электростанции
    > Здесь какое-то противоречие.

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

     
  • 2.38, Ivan_83 (ok), 17:42, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Наверное линуксойдов заело что фряха собирается шлангом без патчей шланга, а линукс нет, вот и починили, как смогли :)
     
     
  • 3.53, Аноним (51), 18:00, 24/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Мне, как пользователю Linux, пофиг. Главное, что и дальше GCC собиралось, им и буду собирать.
     

  • 1.23, Вуыкло (?), 14:50, 21/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Лучше б на Rust переписали
     
     
  • 2.27, Аноним (24), 15:14, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Что на Rust переписать, всё ядро? Лет за сколько тогда?
     
     
  • 3.31, НяшМяш (ok), 16:15, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Для них уже написали идеальную систему, но им всё равно мало... https://www.redox-os.org/
     
  • 3.34, Вуыкло (?), 17:27, 21/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это был вовсе не сарказм, тебе не стоит переживать о своем IQ
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру