В августе 2016 в очередной раз состоялось мероприятие Black Hat USA.

Black Hat Conference — конференция по компьютерной безопасности, объединяющая множество людей, интересующихся информационной безопасностью. Конференцию посещают как представители федеральных агентств и корпораций, так и хакеры. Briefings регулярно проходит в Лас-Вегасе, Амстердаме и Токио. Мероприятие, предназначенное специально для Федеральных служб, проводится в Вашингтоне, округ Колумбия.

Предлагаю вашему вниманию видеозапись и слайды одного из наиболее интересных докладов конференции «Ядро Linux, спрятанное внутри Windows 10». Докладчиком выступил небезызвестный исследователь компьютерной безопасности Алекс Ионеску, один из авторов бестселлера «Windows Internals».



Слайды и листинги кода к выступлению Алекса Ионеску. К сожалению, пока доклад доступен только на английском языке.

Краткое содержание доклада
Initially known as «Project Astoria» and delivered in beta builds of Windows 10 Threshold 2 for Mobile, Microsoft implemented a full blown Linux 3.4 kernel in the core of the Windows operating system, including full support for VFS, BSD Sockets, ptrace, and a bonafide ELF loader. After a short cancellation, it's back and improved in Windows 10 Anniversary Update («Redstone»), under the guise of Bash Shell interoperability. This new kernel and related components can run 100% native, unmodified Linux binaries, meaning that NT can now execute Linux system calls, schedule thread groups, fork processes, and access the VDSO!

As it's implemented using a full-blown, built-in, loaded-by-default, Ring 0 driver with kernel privileges, this not a mere wrapper library or user-mode system call converter like the POSIX subsystem of yore. The very thought of an alternate virtual file system layer, networking stack, memory and process management logic, and complicated ELF parser and loader in the kernel should tantalize exploit writers — why choose from the attack surface of a single kernel, when there's now two?

But it's not just about the attack surface — what effects does this have on security software? Do these frankenLinux processes show up in Procmon or other security drivers? Do they have PEBs and TEBs? Is there even an EPROCESS? And can a Windows machine, and the kernel, now be attacked by Linux/Android malware? How are Linux system calls implemented and intercepted?

As usual, we'll take a look at the internals of this entirely new paradigm shift in the Windows OS, and touch the boundaries of the undocumented and unsupported to discover interesting design flaws and abusable assumptions, which lead to a wealth of new security challenges on Windows 10 Anniversary Update («Redstone») machines.


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

Записи других выступлений с Black Hat USA 2016.
Поделиться с друзьями
-->

Комментарии (80)


  1. Terras
    15.10.2016 14:02
    -18

    Мелкомягкие поняли, что проиграли битву за мобильники и решили полностью оккупировать десктопы?


    1. Jeditobe
      15.10.2016 14:05
      +26

      Вообще-то, они давно их купировали.


      1. yarric
        15.10.2016 21:47
        -15

        Ну как сказать — оккупировали… Вот по данным Stackoverflow Mac OS X и Linux уже практически опережают Windows.


        1. daggert
          15.10.2016 21:50
          +4

          Вы забыли тег «сарказм» или плашку «на правах шутки» (:


        1. Guderian
          16.10.2016 10:09
          +4

          Интернет-опрос показал что 100% пользуются интернетом… Приправьте это статистикой с сайта, где пасутся клерки, добавьте щепотку данных с игровых сайтов и получите…


          1. undersky
            19.10.2016 00:26
            +2

            Вывсёврёти :)
            Миллионы пользователей Facebook не подозревают, что сидят в интернете
            Пруф:
            https://m.geektimes.ru/post/245674/


          1. yarric
            21.10.2016 18:30

            В прошлых опросах лидировала винда — не понимаю, откуда столько эмоций.


        1. Nagg
          16.10.2016 21:55
          +2

          А по данным Steam, доля линукса — 0.9%, макоси — 3.5% и более 95% Windows. Статистика — она такая статистика ;-).


        1. murzilka
          19.10.2016 17:53

          Вообще-то если просуммировать проценты разных версий windows, то даже в этом опросе доля винды больше 52-х процентов.


    1. Al_Azif
      15.10.2016 21:32

      Скажите, что вы такое забористое принимаете?
      Я тоже хочу в фантастические миры ;)


  1. VaalKIA
    15.10.2016 14:28
    +33

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


    1. Jeditobe
      15.10.2016 15:10
      -38

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


      1. zxcabs
        15.10.2016 16:09
        +33

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

        От себя добавлю, что прикрываться фразой: «Стыдно, считать, что имеешь отношение ИТ и не знать английский хотя бы на базовом уровне.», совсем некрасиво, потому что это шаблонный ответ на все вида: «Стыдно, считать, что имеешь отношение к <% чему-либо %> и не <% (знать/уметь) %> <% (что-либо)%> хотя бы на базовом уровне.». Это как последний аргумент: «Сначала добейся».


        1. FForth
          15.10.2016 17:12
          +8

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

          P.S. Сервис Google translate более/мение может сделать перевод английского текста.


          1. Jeditobe
            15.10.2016 23:53
            +3

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

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


        1. IvanTamerlan
          15.10.2016 20:08
          +1

          есть два варианта по «имеешь отношение к <% чему-либо %> и не <% (знать/уметь) %> <% (что-либо)%> хотя бы на базовом уровне».
          Вариант 1. Основы профессии. Например — быть математиком и не знать простых арифметических операций, типа умножение, сложение, деление.
          Вариант 2. Ложная связь с профессией. Например — IT не подразумевает обязательную связь с английским. Т.к. пройдет время и будут слова «Стыдно, считать, что имеешь отношение к ИТ и не знать китайский/индийский хотя бы на базовом уровне». Да и в самом ИТ слишком много профессий, некоторые динамично развиваются, другие в принципе не требуют современных знаний, достаточно 10-летней давности.


          1. IvanTamerlan
            15.10.2016 20:19
            +2

            Например: преподаватель информатики в музыкальном училище (не путать с муз.школой!), где достаточно базовых знаний, а методички и учебники готовятся на русском языке совершенно другими людьми. Тут даже знания про паскаль/си будут избыточны, т.к. студенты уже сделали выбор своей профессии. Соответственно, такой учитель информатики связан с ИТ, но не обязан знать английский вообще.
            И тут он поставил линукс для себя поэкспериментировать по инструкциям из интернета, нашел интересную программу, которая не запускается на Windows. Видит русский заголовок, заходит с надеждой, что если не сегодня, то совсем скоро его любимая программа будет запускаться на Windows, хочет прочитать аннотацию и посмотреть видео. В обоих случаях его ждет облом, т.к. автор поста просто занимался копи-пастой. Единственным выходом — использование автоматизированных средств перевода или знакомых с базовым английским.


        1. Inkstyle
          17.10.2016 02:17
          +2

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


      1. IvanTamerlan
        15.10.2016 19:50
        -1

        Перефразирую:
        Стыдно, считать, что все читатели имеют непосредственное отношение к IT, а имеющие поголовно знают английский хотя бы на базовом уровне. Там всего около 286 слов, их требуется переводить, иначе сбегутся знатоки и заявят, что хамство давать текстовый транскрипт не на русском языке, да и еще в виде статьи.


      1. asmrnv777
        15.10.2016 23:47
        +1

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


      1. semmaxim
        16.10.2016 13:20
        +2

        Одно дело знать английский, чтобы мочь перевести термины и читать MSDN без словаря (я так мог ещё на первых курсах универа) и совсем другое — без усилий на лету понимать связный текст (я так не могу до сих пор).


    1. AigizK
      15.10.2016 17:05
      -1

      Включаете скайп, звоните на другой аккаунт, а там указываете что нужен перевод на русском.


      1. Jeditobe
        16.10.2016 00:23
        +2

        Кстати, надо попробовать такой вариант из направления mad skills.


    1. uSasha
      17.10.2016 10:52
      +1

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


  1. muxa_ru
    15.10.2016 14:30
    +1

    Лучше расскажите, зачем это чудо нужно?


    1. ZoomLS
      15.10.2016 14:42
      +1

      Мелкомягкие стараются пересадить на 10 винду, как можно больше народу.


      1. muxa_ru
        15.10.2016 15:14

        Я уже на 10 винде.
        У меня есть это WSL

        Что я могу с ним делать полезного или весёлого?


        1. creker
          15.10.2016 16:12
          +2

          Писать и тестировать на Windows софт, который будет работать на Linux. Кроссплатформенная разработка намного проще становится как никак.


          1. muxa_ru
            15.10.2016 16:23

            Это да, но вдруг ещё что нибудь есть.

            Вот, например, хуиз проверять стало легче :)


            1. foxmuldercp
              15.10.2016 18:23
              +1

              Жм, "довод в копилочку". А если серьезно — у любого хостера на сайте с вероятностью больше 50% есть эта функция, так что она работает даже с мобильного.


              Но вообще возить с собой линуксовую виртуалку можно и в фиче Hyper-V которая есть в Win начиная с вин8, у меня таких виртуалок на ноуте бывает до десятка…
              но убунту прямо в винде имеет ряд ограничений, вроде работы сокетов только под админскими правами процесса bash


            1. Garrett
              15.10.2016 21:21

              Так Whois же есть под windows? Или его функционала недостаточно?


              1. muxa_ru
                15.10.2016 21:57

                его надо отдельно ставить

                а тут он сразу есть :)


    1. kxl
      15.10.2016 20:59
      +3

      Думаю, одна из первоочередных целей — запуск Docker без установки виртуальной linux-машины


      1. Laney1
        16.10.2016 07:58
        +1

        нет, docker в WSL не работает. Для этого в MS запилили отдельную подсистему, windows containers, которая пока есть только в Windows Server (но думаю, в будущем ее включат и на десктопах)


        1. Myrddin
          16.10.2016 19:27

          Windows 10 Pro тоже есть


          1. Laney1
            16.10.2016 19:50
            +1

            нет. То, что есть в windows 10, MS называет «контейнеры hyper-v» — т. е. на самом деле это никакие не контейнеры, а просто образы виртуалок hyper-v, которыми можно управлять из docker. Настоящие контейнеры (полностью аналогичные линуксовым) MS называет «контейнеры windows server», в windows 10 pro их нет


  1. etz
    15.10.2016 14:35
    +7

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


  1. mezastel
    15.10.2016 15:11
    +2

    Приход Linux на Windows очень на руку разработчикам С++, т.к. весь сочный стэк (Clang, Cling, итп) теперь можно гонять не отходя от кассы. Также теперь очень хорошо очерчен переход с Docker на «натив»: сначала ты устанавливаешь в Докере поиграться, а если что-то тебе нравится, перебазируешь в Ubuntu 14 которая в Anniversary Preview. А еще это огромный плюс для всех кто уже давно делает «code on windows, run on linux» т.к. теперь можно для начала запускать локально. Понятно что есть ограничения и, на текущий момент, существенные косяки (например, даже запустив bash как административный процесс, все равно приходится использовать sudo), но это Бета версия. Хочется думать что МС (и хватит уже называть их «мелкомягкими»!) поправит к следующему релизу баги и все будет еще лучше.


    1. Alex_ME
      15.10.2016 15:29
      +3

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

      1. Для каждого пользователя Windows существует как бы своя Ubuntu. С одной стороны хорошо — можно грохнуть ее в начальное состояние, если что-то сломал. С другой стороны, хотелось бы, чтобы было соответствие между учетными записями Windows и Ubuntu. Так же было бы удобно, если /home был бы ссылкой на C:\Users\%username%\ (наверное, можно сделать самому)
      2. Прозрачный вызов программ. К примеру, в каком-нибудь QtCreator (первое, что в голову) gcc, а не MinGW

      Ну и добавление поддержки того, чего сейчас нет (RAW-сокеты и т.д.)


      1. creker
        15.10.2016 16:11
        +1

        Поддержка добавлена будет. Если хотите, можете на github поддержать предложения. Их реализуют и довольно быстро (вон недавно для компиляции Go даже добавили исправления), но проблем в том, что WSL это часть ядра, и они не могут просто выпустить новую версию. Тут и бюрократия, и технические причины, ибо WSL частенько использует то, что будет в ядре только с новой ОС. Поэтому приходится ждать релиза самой ОС.


        1. mezastel
          15.10.2016 16:15
          -1

          Вроде как Windows 10 это последняя Windows.


          1. creker
            15.10.2016 17:07
            +1

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


        1. Myrddin
          15.10.2016 16:52
          +1

          Есть инсайдерская программа, там обновления ядра выкатываются вместе с WSL


          1. creker
            15.10.2016 17:08

            Это понятно. Но не все же хотят сидеть на тестовых сборках только для того, чтобы WSL обновлялся быстрее.


        1. Alex_ME
          15.10.2016 23:10

          Если хотите, можете на github поддержать предложения.


          Вы об этом репозитории?


      1. daggert
        15.10.2016 16:28
        +2

        >Так же было бы удобно, если /home был бы ссылкой на C:\Users\%username%\ (наверное, можно сделать самому)

        Не надо, ради ЛММ. Меня уже смущает огромное количество файлов ".filename" в этой папке от всяких приложений кроссплатформенных.


    1. AllexIn
      15.10.2016 16:09
      +9

      Почему хватит называть их мелкомягкими?


      1. mezastel
        15.10.2016 16:14
        -2

        Ну как-то это презрительно и вульгарно, хоть и является дословным переводом.


        1. AllexIn
          15.10.2016 16:15

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


          1. mezastel
            15.10.2016 16:16
            -2

            Просто правила хорошего тона в публичном месте. Я ни на что большее не намекаю.


            1. ZoomLS
              15.10.2016 16:39
              +2

              Даже в журналах их так называют. В этом ничего плохого нет.


        1. 23rd
          15.10.2016 16:27
          +3

          Скажем спасибо, что «маздай» почти уже ушёл из лексикона людей.


          1. muxa_ru
            15.10.2016 16:33

            В 2016 году, выражение «маздай» это что-то типа конца света у Свидетелей Иеговы. Он у них должен был в 1914 году наступить и вот уже больше века переносится.


        1. Rampages
          15.10.2016 16:45
          +2

          Ну не сказал бы что вульгарно и презрительно. Просто «неправильно» т.к. под словом «soft» подразумевается совершенно другое значение.

          Ваш вариант с МС, тоже не совсем хорош, он очень похож на английские «MC» (Эм-Си), да и мало ли какой русской аббревиатуре может соответствовать, т.е. значение МС нужно улавливать из контекста, что не есть хорошо. Лучше уж просто «Майкрософт» или «Microsoft», ну или хотя бы «Микрософт», на худой конец можно и английскую аббревиатуру «MS» использовать, благо встречается она гораздо чаще (MS Office, MS Windows и т.п.).


  1. Rampages
    15.10.2016 16:37
    +7

    Теперь на Windows программы тоже можно запускать из под Wine ?(????)
    it's magic.gif
    we need to go deeper.jpeg


    1. Lsh
      15.10.2016 16:47
      -1

      А с цигвином нельзя собрать было?


    1. TheBeast
      17.10.2016 13:28
      +1

      А в Wine можно Cygwin запустить!


  1. Lsh
    15.10.2016 16:47

    Я правильно понимаю, что, используя тулзы от Алекса, можно из Linux окружения запустить Windows приложение, но получить консольный вывод не получится?
    Т.е. Внутри Linux окружения я не могу сделать var=$(lxexec dir c:\\)? Т.е. сделать смогу, но результат не получу.


  1. Lsh
    15.10.2016 16:50

    Хм… Если можно организовывать общую память между двумя «мирами», то может быть и Х-сервер с нормальным ускорением сделают…


  1. fogone
    15.10.2016 17:17

    А 8 оракловая java так и не работает, печаль


  1. d_olex
    15.10.2016 17:40
    +2

    > исследователь компьютерной безопасности Алекс Ионеску, автор бестселлера «Windows Internals»

    Алекс, безусловно, отличный чувак, но в случае с указанной книгой он является всего-лишь соавтором ее 4-го издания.


    1. Jeditobe
      16.10.2016 00:22
      +6

      Не бывает «всего лишь соавторов». У этой книги уже 7 изданий, существенно отличающиеся друг от друга. И над разными изданиями не всегда работали одни и те же люди. К слову, первое издание вообще было написано Helen Custer, а не Марком Руссиновичем или Девидом Соломоном (работали над последующими изданиями). Алекс Ионеску принял непосредственное участие в написании пятого, шестого и седьмого изданий, и начиная с шестого, указан как автор, с теми же правами, что остальные указанные авторы.


      можете проверить сами
      .


      1. mister_fog
        16.10.2016 10:04
        +1

        «Автор» в современном русском языке означает, что это или единственный автор, или основной. Так что замечание правильное, Алекс именно соавтор. (А называя его автором, вы вводите читателей в заблуждение.)


        1. Jeditobe
          16.10.2016 12:48
          -1

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


          1. Busla
            16.10.2016 14:14
            +2

            оригинальной терминологией вы можете оперировать только на языке оригинала ;-)


  1. Cheater
    15.10.2016 23:45
    +1

    > implemented a full blown Linux 3.4 kernel

    Во-первых, мб всё-таки какое-то самописное POSIX-совместимое ядро, а не ядро Linux? Во-вторых, сразу два выражения звучат довольно бессмысленно: «implemented a kernel» (они с ним что угодно сделали — «integrated», «built in», но не «implemented») и указание конкретного релиза ядра.


    1. Cheater
      16.10.2016 00:23
      +2

      А, понятно, почитал про этот wsl. Никакого ядра они не реализовали, они реализовали интерфейс к ядру Linux, и положили внутрь это самое ядро Linux.

      Зачем путать людей, говоря «implemented a Linux kernel»?


      1. creker
        16.10.2016 00:47
        +2

        Вы точно прочитали про этот WSL? WSL это не ядро Linux и никакое ядро внутрь они не клали. WSL это реализация интерфейса между Linux ядром и User-space — т.е. syscall'ы. Куда эти syscall'ы уходят самим приложениями уже пофиг. А уходят они в NT ядро, где что-то реализовано поверх имеющихся компонентов, что-то переписано с нуля, а что-то комбинация этих решений. Поэтому и с лицензиями никаких проблем — там нет ни строчки кода из Linux.


        1. Cheater
          16.10.2016 09:08
          +4

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


  1. Alcor
    16.10.2016 00:01

    А что с лицензией в результате?
    Если они засунули к себе внутрь ядро linux, то они, конечно, молодцы, но только оно GPL-ное. И если они действительно засунули ядро linux внутрь и интегрировали с windows, то где теперь я, как законный обладатель их продукта, могу увидеть его полный исходный код ибо теперь windows тоже должен быть под GPL.


    1. sumanai
      16.10.2016 00:19

      Думаю, там наполовину готовые компоненты, наполовину эмуляция API, так что выкладывать там нечего, изменений мало, и все они уже выложены.


    1. creker
      16.10.2016 00:42
      +2

      Видео посмотрите и все будет понятно. Никаких проблем с лицензией там нет


  1. freethetan
    16.10.2016 00:01

    Это всё конечно очень здорово и замечательно что МS внедрил Linux kernel и теперь %username% может поиграться с тем же bash или ещё что то запустить…
    Но как то это не практично на мой взгляд.
    Может давайте интегрируем Windows в линукс и все будут ходить на костылях?
    Зачем к феррари прикручивать газонокосилку или «интегрировать» в газонокосилку спидометр?
    Потом все эти костыли ПО поддерживать…


  1. TLT-IX
    16.10.2016 00:01
    +3

    Похоже, эра Windows-firewall-ов закончилась!
    Любая дрянь, попав в систему, плотно там обоснуется

    • Documented kernel API did not provide notification for Pico processes or threads
    • Invisible from endpoint security products/AV

    • WSL processes and libraries (.so) are not loaded as SEC_IMAGE, so no image load notifications
    • Invisible from endpoint security products/AV
    • Completely bypasses AppLocker rules

    • SeLocateProcessImageName returns NULL for Pico processes
    • Cannot create firewall rules or get the name in WFP callout driver


  1. VSOP_juDGe
    17.10.2016 14:17

    А ламп-стек поднимется? И где вообще в винде это пощупать?


    1. muxa_ru
      17.10.2016 14:27

      — win10 pro
      — получить какой-то там новый большой апдейт до сборки не ниже 14393
      — включить «режим разработчика»
      — в «Включение или отключение компонентов Windows» появлется куча всего включая «Подсистема Windows для Linux (бета-версия)»

      После того как всё встанет, появится программа «Bash на Ubunta на Windows»


      1. daggert
        17.10.2016 15:17
        +1

        Уже без режима разработчика. Просто после аниверсари апдейта в компонентах.


        1. muxa_ru
          17.10.2016 15:21

          Спасибо.

          Надо будет попробовать отключить и попробовать снова поставить без режима разработчика.


  1. dmitry_ch
    19.10.2016 18:16

    Почему бы не перевод видео предлагать делать, а просто кратко, экрана на 2-3, не изложить тезисы доклада?

    P.S. И, да, что тут странного, если про Bash в винде писали здесь же https://habrahabr.ru/post/280560/ еще весной, не говоря что и обсуждали, как его заюзать правильно.


  1. olegy
    19.10.2016 20:02

    «Ядро Linux, спрятанное внутри Windows 10»
    Хороший заголовок, юристы напряглись ;)
    Линус Торнвальдс в ядре 3.4 использовал NT — kernel