The OpenNET Project / Index page

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

В LLVM/Clang добавлена техника защиты стека SafeStack

28.06.2015 03:04

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

SafeStack позволяет предотвратить получение контроля над помещёнными в стек указателями в программах на C/C++ через сохранение указателей (адреса возврата, указатели на функции и т.п.) в отдельной изолированной области памяти, доступ к которой производится только с использованием специальных проверок корректности обращения к памяти. Таким образом, стек приложения разделяется на две части - защищённый стек для хранения указателей, адресов из регистров и локальных переменных, и незащищённый стек, в котором сохраняется всё остальное. В защищённый стек данные добавляются только после статической проверки и доступ к ним ограничен, что существенно усложняет организацию получения контроля над выполнением кода в результате совершения атак.

Накладные расходы от реализуемых в SafeStack дополнительных проверок несущественны и составляют 0.01-0.05%, что существенно меньше, чем при использовании методов на основе добавления меток в стек (stack cookies). Более того, в некоторых случаях наблюдается даже ускорение работы программы за счёт более эффективного использования кэша. Метод защиты отмечен как стабильный и уже опробованный при сборке Chromium, базовой системы FreeBSD и более 100 пакетов. Для включения SafeStack в clang добавлены новые опции "-fsafe-stack" и "-fno-safe-stack" (по умолчанию новый режим отключен), для отключения режима для отдельных функций реализован атрибут no_safe_stack.

  1. Главная ссылка к новости (http://blog.llvm.org/2015/06/l...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/42517-clang
Ключевые слова: clang, safestack, llvm
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (64) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, торкман (?), 09:36, 28/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А надо ли для этого переписывать что-то в ПО или пересборка данным цлангом сама всё сделает?
     
     
  • 2.3, Ku Klux Klan (?), 10:38, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    -fsanitize=safe-stack
     
  • 2.6, Ku Klux Klan (?), 11:03, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    http://reviews.llvm.org/D6095
     

  • 1.2, Аноним (-), 10:04, 28/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –18 +/
    Даешь больше разных костылей.
     
     
  • 2.4, bav (ok), 10:50, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Даешь больше разных костылей.

    Благородный дон предлагает переписать весь опасный софт на управляемых языках?

     
     
  • 3.5, Аноним (-), 10:59, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • –9 +/
    Видимо да и я его в этом поддерживаю.
     
     
  • 4.8, Ku Klux Klan (?), 11:32, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Разработчики того что используешь, плюнут тебе на лицо за "переписать".
    И в этом я их поддерживаю.
     
     
  • 5.13, Xasd (ok), 13:04, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а рано или поздно -- всё равно перепишут.

    (на чём-то типа Rust, или что там будет после Rust?)

    так-что хоть плюйся, хоть не плюйся, а "вечного" софта можно только по пальцам перещитать :-) ..

     
     
  • 6.17, Ku Klux Klan (?), 13:57, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > так-что хоть плюйся

    В твоих потных фантазиях

     
     
  • 7.19, Аноним (-), 14:13, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > В твоих потных фантазиях

    И много у мусью приложений на коболе/алголе/фортране?

     
     
  • 8.20, Ku Klux Klan (?), 14:14, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ерланге Питоне Голанге ... текст свёрнут, показать
     
     
  • 9.24, Аноним (-), 14:33, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    И как, много вы на этом уже написали ну хотя-бы операционок, для начала ... текст свёрнут, показать
     
  • 9.36, Аноним (-), 15:00, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Т е мусью изящно s слился s перевел стрелки Или мусье все еще использует ба... текст свёрнут, показать
     
  • 8.51, anonnymous (?), 18:32, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    На коболе в пиндосии кое-где финсофт ещё крутится, на фортране брутальные матема... текст свёрнут, показать
     
  • 4.9, bav (ok), 11:46, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Можешь начинать, мы тебя поддерживаем.
     
  • 4.22, Аноним (-), 14:31, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >  Видимо да и я его в этом поддерживаю.

    Ну вот и перепишите таким макаром хотя-бы свою операционку, для начала.

     
     
  • 5.45, Аноним (-), 15:51, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > операционку
    > для начала
     
     
  • 6.61, Аноним (-), 04:13, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >> операционку
    >> для начала

    Ну да, именно так. Без операционки вы на компьютере много не наработаете. Хотя, конечно, начинать надо с бутлоадера, чтобы совсем уж для начала. Но мы же гуманисты и предоставим хипстоте подумать как запускать операционку самостоятельно :). А то они засцут еще проц из питона инициализировать, а это уже не интересно...

     
  • 3.11, Аноним (-), 11:58, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    нет
     
  • 3.15, none7 (ok), 13:24, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Зачем на управляемых? С++ с контролем границ массива вполне достаточно, оптимизация любые лишние проверки просто съест. Останутся только те, которые программист не заметил. А от реализаций полагающихся на то, что где то в аргументах значение не приведёт к переполнению, нужно избавляться.
     
     
  • 4.18, bav (ok), 14:01, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Зачем на управляемых?
    > С++ с контролем границ массива

    /0

     
     
  • 5.21, Crazy Alex (ok), 14:31, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Сюрприз - если писать на плюсах, а не его C-подмножестве, получить переполнение суметь надо. Но если мусью не знает, что такое vector - тем хуже для него.
     
     
  • 6.31, bav (ok), 14:47, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Но если мусью не знает, что такое vector - тем хуже для него.

    Мусью также знает что operator[] не делает проверок. И мы опять таки возвращаемся к управляемым языкам.

     
     
  • 7.35, Crazy Alex (ok), 14:59, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Мусью знает, что для вектора этот оператор лезет в кучу, а не на стек. И что в каноничном плюсовом коде в основном используются итераторы, а не []. А уж там, где идёт обработка внешних данных, [] вообще не нужен. Все проблемы начинаются, когда на плюсах пишут как на сях или когда считают себя самыми умными и вместо стандартных функций лезут в строки напрямую.
     
     
  • 8.43, Школьник (ok), 15:32, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Равно как и итераторы, поскольку у классического vector память под буфер всегда ... текст свёрнут, показать
     
     
  • 9.48, Crazy Alex (ok), 16:56, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    В общем да, но, ситуация, когда нужно использовать одно значение - обычно совсе... текст свёрнут, показать
     
  • 6.32, bav (ok), 14:50, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Я понял, ты неправильно сагрился на /0. Пикантность ситуации заключаетсяв том, что проверки за выход границ в рантайме есть не что иное как управляемый язык.
     
     
  • 7.37, Crazy Alex (ok), 15:02, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Я сагрился на идею проверок в рантайме в основном. Хороший код их не требует - те же iterator/range/foreach, например.
     
  • 2.27, Нанобот (ok), 14:37, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Даешь больше разных костылей.

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

     
     
  • 3.39, Аноним (-), 15:08, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Грошь - цена гуманитариям называющих костыли технологиями.
     

  • 1.14, Аноним (-), 13:07, 28/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасает только от очень ограниченного множества атак, остальные - пруцца!
     
     
  • 2.16, Аноним (-), 13:30, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Спасает только от очень ограниченного множества атак, остальные - пруцца!

    А от дыр в ПоХаПе и питоне -- вообще не помогает!1

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

     
     
  • 3.34, Аноним (-), 14:55, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > и питоне

    Капитан О, чота ты увлекся. По сравнению с PHP Питон как армированный бетон.

     
     
  • 4.62, Аноним (-), 04:15, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Питон как армированный бетон.

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

    Вот только недавно в убунте и дебиане разлетелись апдейты бидона закрывающие ПОЛДЮЖИНЫ CVE, включая удаленное выполнение кода. Сюрприз!

     
  • 2.25, Нанобот (ok), 14:35, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • –3 +/
    да эт понятно, непробиваемых защит пока не придумали, а всё, что придумали, имеет ограниченную эффективность
     
     
  • 3.30, Аноним (-), 14:44, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    https://grsecurity.net/ очень много классов разных атак. Скажем от всех давно известных.
     
     
  • 4.38, Аноним (-), 15:04, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Так это АНБ в мэйнстримовых дистрах всё никак допуск не дает на задействование этих технологий?
     
     
  • 5.42, Аноним (-), 15:31, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Наверно. gradm конкурент selinux...
     
  • 5.44, Аноним (-), 15:40, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Главное производители процессоров добавляют аппаратные фичи необходимые для использования фич безопасности без потерь производительности.

    А в вопросе безопасности итак надо собирать всё с исходников.. Кто знает что там в бинарных дистрах накомпилили: http://www.opennet.dev/opennews/art.shtml?num=42476

     
     
  • 6.63, Аноним (-), 04:17, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > фич безопасности без потерь производительности.

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

     
     
  • 7.68, Аноним (-), 11:28, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Никакого вендорлочества пока не заметил. Многие производители процов разных архитектур добавляют фичи для ускорения и аппаратной реализации разных аспектов безопасности.
     

  • 1.26, Crazy Alex (ok), 14:37, 28/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Чтобы в более-менее приличном коде на плюсах получить ошибки такого рода - постараться надо, вообще-то. Но если правда оверхед такой малый - чего ж нет, тем более, что это всего лишь флаг компиляции - выкинуть всегда можно при надобности. Хотя мне очень интересны результаты бенчмарков не от авторов технологии.
     
     
  • 2.53, all_glory_to_the_hypnotoad (ok), 20:39, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >  Но если правда оверхед такой малый

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

     
     
  • 3.57, Crazy Alex (ok), 21:45, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот и поглядим. Мне самому не очень верится.
     

  • 1.28, Аноним (-), 14:38, 28/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как на счёт рандомизации стека, позиционно независимых бинарей и ALSR в ядре Л... большой текст свёрнут, показать
     
     
  • 2.33, Crazy Alex (ok), 14:53, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    У всего есть своя область применения. Рандомизация не дружит с prelink, -f-stack-protector сотоварищи (и PIE) просаживают производительность. Эти ребята заявляют, что их подход даёт практически бесплатную защиту стека.
     
     
  • 3.41, Аноним (-), 15:28, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Мы говорим о безопасности скомпиленных программ То есть об одной области Да, p... большой текст свёрнут, показать
     
     
  • 4.49, Crazy Alex (ok), 17:04, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну а вот эта штука с прелинком дружит и при этом от так защищает. И нет, область не одна - есть ситуации, где безопасность абсолютно критична. А есть - и гораздо больше - где, в общем-то, можно и пережить. Вон, на винде народ регулярно троянов ловит и не умер до сих пор. А есть - где вообще пофигу - например, если это твоя собственная программа, вообще не выходящая за пределы твоей машины. Поэтому сколко за какую безопасность платить - дело индивидуальное.

    Кстати, твой non-executable bit уже сто раз обходили. Ну да, приходится вписывать не код, а адрес перехода и параметры вызова. А рандомизация в твоём варианте, насколько я понимаю, заставляет каждое приложение держать свой набор библиотек в памяти

     
  • 4.54, all_glory_to_the_hypnotoad (ok), 20:41, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Да, prelink должен быть удалён с системы и не использоватся больше по причине безопасности!

    +, дебильный костыль, давно пора его убить.

     
  • 4.65, Аноним (-), 04:31, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Да, prelink должен быть удалён с системы и не использоватся больше по
    > причине безопасности!

    А если в целях безопаности удалить вообще кернель - представляете себе, как обломаются хакеры?

     
  • 2.64, Аноним (-), 04:25, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Так собирай с -pie - и будут позиционно независимые Так там давно уже сделано ... большой текст свёрнут, показать
     
     
  • 3.69, Аноним (-), 11:49, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Да, и paxtest тоже дебиановцы написали Но замечу два момента 1 Не все проги в... большой текст свёрнут, показать
     

  • 1.29, Аноним (-), 14:43, 28/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Rust на LLVM, его безопасность тоже увеличится? Я всегда думал это задача программиста учитывать особенности языка. А задача компилятора - всё это оптимизировать и показать ошибки.
     
  • 1.55, клоун (?), 21:02, 28/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Раньше:

    mov eax, 10
    push eax
    cmp eax,ebx

    Теперь:
    savemov eax, 10
    savepush eax
    savecmp eax,ebx

    Прогресс, ***та.

     
     
  • 2.56, Аноним (-), 21:43, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >[оверквотинг удален]
    >
    > mov eax, 10
    > push eax
    > cmp eax,ebx
    >
    > Теперь:
    > savemov eax, 10
    > savepush eax
    > savecmp eax,ebx
    >

    Прогресс, ***та.
    >
    > Вот же клоун, ***та.

     
  • 2.58, Dz (?), 23:27, 28/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Радуйся, что не:

    Call_virtual_machine (asm_code){
      Call_virtual_safe_heap (asm_code);
      ...
    }

    Call_virtual_safe_heap (asm_code) {
      Move_asm_to_safe_zone (asm_code);
      ...
    }

    И так через дюжину жирных фреймворков и виртуализаций

     
     
  • 3.59, Аноним (-), 01:59, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > И так через дюжину жирных фреймворков и виртуализаций

    Энтерпрайзники благодарят вас за отличную идею!


     
     
  • 4.74, Аноним (-), 17:31, 30/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >> И так через дюжину жирных фреймворков и виртуализаций
    > Энтерпрайзники благодарят вас за отличную идею!

    Загляните в код Firefox сначала.

     
  • 2.66, z (??), 10:46, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну глянул бы в исходники и не порол ***ты
     

  • 1.67, Аноним (-), 10:59, 29/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто-нибудь может объяснить, почему просто не сделать два стека - один для данных, другой - для адресов возврата? Все же уже было в 68xx...
     
     
  • 2.71, Crazy Alex (ok), 14:04, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А заодно Гарвардскую архитектуру использовать ;-)
     

  • 1.70, Аноним (-), 13:48, 29/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати, а можно FreeBSD и ее порты собрать с -fsafe-stack? :)
     
     
  • 2.72, Аноним (-), 14:13, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    clang 3.7 еще не вышел
     
  • 2.73, Аноним (-), 14:16, 29/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    The SafeStack pass to protect against stack-based memory corruption errors has been added. r239761.
     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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