Ядро Linux, спрятанное внутри Windows 10

    В августе 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
      –18
      Мелкомягкие поняли, что проиграли битву за мобильники и решили полностью оккупировать десктопы?
        +26
        Вообще-то, они давно их купировали.
          –15

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

            +4
            Вы забыли тег «сарказм» или плашку «на правах шутки» (:
              +4
              Интернет-опрос показал что 100% пользуются интернетом… Приправьте это статистикой с сайта, где пасутся клерки, добавьте щепотку данных с игровых сайтов и получите…
                +2
                Вывсёврёти :)
                Миллионы пользователей Facebook не подозревают, что сидят в интернете
                Пруф:
                https://m.geektimes.ru/post/245674/
                  0

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

                  +2

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

                    0
                    Вообще-то если просуммировать проценты разных версий windows, то даже в этом опросе доля винды больше 52-х процентов.
                  0
                  Скажите, что вы такое забористое принимаете?
                  Я тоже хочу в фантастические миры ;)
                  +33
                  Пусть меня жутко заминусуют, но текстовый транскрипт не на русском языке, да ещё и в виде статьи — это уже хамство, про видео я промолчу.
                    –38
                    Стыдно, считать, что имеешь отношение ИТ и не знать английский хотя бы на базовом уровне. Там много терминов, их нет необходимости переводить, иначе сбегутся «знатоки» перевода и заявят, что все переведено не так.
                      +33
                      Рискну предположить, что дело не в том что кто-то знает английский, а кто то не знает. Автор комментария сделал замечание о том что качество статьи никакое, по сути вы просто кинули ссылку на видео.

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

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

                          Всех, кого задело отсутствие русского перевода субтитров и содержания видео, приглашаю вместо упражнения в комментариях принять участие в краудсорсинге перевода данного выступления. Процесс идет на ресурсе Нотабеноид. Если у вас нет инвайта, напишите мне в личку.
                          +1
                          есть два варианта по «имеешь отношение к <% чему-либо %> и не <% (знать/уметь) %> <% (что-либо)%> хотя бы на базовом уровне».
                          Вариант 1. Основы профессии. Например — быть математиком и не знать простых арифметических операций, типа умножение, сложение, деление.
                          Вариант 2. Ложная связь с профессией. Например — IT не подразумевает обязательную связь с английским. Т.к. пройдет время и будут слова «Стыдно, считать, что имеешь отношение к ИТ и не знать китайский/индийский хотя бы на базовом уровне». Да и в самом ИТ слишком много профессий, некоторые динамично развиваются, другие в принципе не требуют современных знаний, достаточно 10-летней давности.
                            +2
                            Например: преподаватель информатики в музыкальном училище (не путать с муз.школой!), где достаточно базовых знаний, а методички и учебники готовятся на русском языке совершенно другими людьми. Тут даже знания про паскаль/си будут избыточны, т.к. студенты уже сделали выбор своей профессии. Соответственно, такой учитель информатики связан с ИТ, но не обязан знать английский вообще.
                            И тут он поставил линукс для себя поэкспериментировать по инструкциям из интернета, нашел интересную программу, которая не запускается на Windows. Видит русский заголовок, заходит с надеждой, что если не сегодня, то совсем скоро его любимая программа будет запускаться на Windows, хочет прочитать аннотацию и посмотреть видео. В обоих случаях его ждет облом, т.к. автор поста просто занимался копи-пастой. Единственным выходом — использование автоматизированных средств перевода или знакомых с базовым английским.
                            +2
                            А мне понравилась статья. Не знал об этом докладе и спасибо автору, за новую инфу. В любом случае никто никого не заставляет смотреть и всегда можно почитать другою статью.
                            –1
                            Перефразирую:
                            Стыдно, считать, что все читатели имеют непосредственное отношение к IT, а имеющие поголовно знают английский хотя бы на базовом уровне. Там всего около 286 слов, их требуется переводить, иначе сбегутся знатоки и заявят, что хамство давать текстовый транскрипт не на русском языке, да и еще в виде статьи.
                              +1
                              Ну мне вот легко хватит знаний английского, чтобы прочитать этот текст. Но лень, я хочу на русском.
                                +2
                                Одно дело знать английский, чтобы мочь перевести термины и читать MSDN без словаря (я так мог ещё на первых курсах универа) и совсем другое — без усилий на лету понимать связный текст (я так не могу до сих пор).
                                –1
                                Включаете скайп, звоните на другой аккаунт, а там указываете что нужен перевод на русском.
                                  +2
                                  Кстати, надо попробовать такой вариант из направления mad skills.
                                  +1
                                  Ну вообще мне понравилась статья, и классно, что она есть хоть в таком виде.
                                  +1
                                  Лучше расскажите, зачем это чудо нужно?
                                    +1
                                    Мелкомягкие стараются пересадить на 10 винду, как можно больше народу.
                                      0
                                      Я уже на 10 винде.
                                      У меня есть это WSL

                                      Что я могу с ним делать полезного или весёлого?
                                        +2
                                        Писать и тестировать на Windows софт, который будет работать на Linux. Кроссплатформенная разработка намного проще становится как никак.
                                          0
                                          Это да, но вдруг ещё что нибудь есть.

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

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


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

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

                                                а тут он сразу есть :)
                                        +3
                                        Думаю, одна из первоочередных целей — запуск Docker без установки виртуальной linux-машины
                                          +1
                                          нет, docker в WSL не работает. Для этого в MS запилили отдельную подсистему, windows containers, которая пока есть только в Windows Server (но думаю, в будущем ее включат и на десктопах)
                                            0
                                            Windows 10 Pro тоже есть
                                              +1
                                              нет. То, что есть в windows 10, MS называет «контейнеры hyper-v» — т. е. на самом деле это никакие не контейнеры, а просто образы виртуалок hyper-v, которыми можно управлять из docker. Настоящие контейнеры (полностью аналогичные линуксовым) MS называет «контейнеры windows server», в windows 10 pro их нет
                                        +7
                                        Н-да, четыре то абзаца можно было и перевести. Или хотя-бы краткую выжимку своими словами.
                                          +2
                                          Приход Linux на Windows очень на руку разработчикам С++, т.к. весь сочный стэк (Clang, Cling, итп) теперь можно гонять не отходя от кассы. Также теперь очень хорошо очерчен переход с Docker на «натив»: сначала ты устанавливаешь в Докере поиграться, а если что-то тебе нравится, перебазируешь в Ubuntu 14 которая в Anniversary Preview. А еще это огромный плюс для всех кто уже давно делает «code on windows, run on linux» т.к. теперь можно для начала запускать локально. Понятно что есть ограничения и, на текущий момент, существенные косяки (например, даже запустив bash как административный процесс, все равно приходится использовать sudo), но это Бета версия. Хочется думать что МС (и хватит уже называть их «мелкомягкими»!) поправит к следующему релизу баги и все будет еще лучше.
                                            +3
                                            Было бы очень хорошо, если бы была более тесная интеграция линукс-подсистемы.

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

                                            Ну и добавление поддержки того, чего сейчас нет (RAW-сокеты и т.д.)
                                              +1
                                              Поддержка добавлена будет. Если хотите, можете на github поддержать предложения. Их реализуют и довольно быстро (вон недавно для компиляции Go даже добавили исправления), но проблем в том, что WSL это часть ядра, и они не могут просто выпустить новую версию. Тут и бюрократия, и технические причины, ибо WSL частенько использует то, что будет в ядре только с новой ОС. Поэтому приходится ждать релиза самой ОС.
                                                –1
                                                Вроде как Windows 10 это последняя Windows.
                                                  +1
                                                  Речь, очевидно, о новых билдах. Это слова самого разработчика — они бы рады выпускать внеочередные обновления, потому как они есть и работают, но есть ограничения, в том числе технические, почему так нельзя. Поэтому приходится ждать новых крупных билдов.
                                                  +1
                                                  Есть инсайдерская программа, там обновления ядра выкатываются вместе с WSL
                                                    0
                                                    Это понятно. Но не все же хотят сидеть на тестовых сборках только для того, чтобы WSL обновлялся быстрее.
                                                    0
                                                    Если хотите, можете на github поддержать предложения.


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

                                                    Не надо, ради ЛММ. Меня уже смущает огромное количество файлов ".filename" в этой папке от всяких приложений кроссплатформенных.
                                                    +9
                                                    Почему хватит называть их мелкомягкими?
                                                      –2
                                                      Ну как-то это презрительно и вульгарно, хоть и является дословным переводом.
                                                        0
                                                        Ну так оно всегда было презрительным и вульгарным. Почему именно сейчас хватит?
                                                          –2
                                                          Просто правила хорошего тона в публичном месте. Я ни на что большее не намекаю.
                                                            +2
                                                            Даже в журналах их так называют. В этом ничего плохого нет.
                                                          +3
                                                          Скажем спасибо, что «маздай» почти уже ушёл из лексикона людей.
                                                            0
                                                            В 2016 году, выражение «маздай» это что-то типа конца света у Свидетелей Иеговы. Он у них должен был в 1914 году наступить и вот уже больше века переносится.
                                                            +2
                                                            Ну не сказал бы что вульгарно и презрительно. Просто «неправильно» т.к. под словом «soft» подразумевается совершенно другое значение.

                                                            Ваш вариант с МС, тоже не совсем хорош, он очень похож на английские «MC» (Эм-Си), да и мало ли какой русской аббревиатуре может соответствовать, т.е. значение МС нужно улавливать из контекста, что не есть хорошо. Лучше уж просто «Майкрософт» или «Microsoft», ну или хотя бы «Микрософт», на худой конец можно и английскую аббревиатуру «MS» использовать, благо встречается она гораздо чаще (MS Office, MS Windows и т.п.).
                                                        +7
                                                        Теперь на Windows программы тоже можно запускать из под Wine ヘ(◕。◕ヘ)
                                                        it's magic.gif
                                                        we need to go deeper.jpeg
                                                          –1
                                                          А с цигвином нельзя собрать было?
                                                            +1
                                                            А в Wine можно Cygwin запустить!
                                                            0
                                                            Я правильно понимаю, что, используя тулзы от Алекса, можно из Linux окружения запустить Windows приложение, но получить консольный вывод не получится?
                                                            Т.е. Внутри Linux окружения я не могу сделать var=$(lxexec dir c:\\)? Т.е. сделать смогу, но результат не получу.
                                                              0
                                                              Хм… Если можно организовывать общую память между двумя «мирами», то может быть и Х-сервер с нормальным ускорением сделают…
                                                                0
                                                                А 8 оракловая java так и не работает, печаль
                                                                  +2
                                                                  > исследователь компьютерной безопасности Алекс Ионеску, автор бестселлера «Windows Internals»

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


                                                                    можете проверить сами
                                                                    .
                                                                      +1
                                                                      «Автор» в современном русском языке означает, что это или единственный автор, или основной. Так что замечание правильное, Алекс именно соавтор. (А называя его автором, вы вводите читателей в заблуждение.)
                                                                        –1
                                                                        У этой книги несколько авторов, и каждый из них автор. Книжка изначально не русская, так что я оперирую оригинальной терминологией.
                                                                          +2
                                                                          оригинальной терминологией вы можете оперировать только на языке оригинала ;-)
                                                                    +1
                                                                    > implemented a full blown Linux 3.4 kernel

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

                                                                      Зачем путать людей, говоря «implemented a Linux kernel»?
                                                                        +2
                                                                        Вы точно прочитали про этот WSL? WSL это не ядро Linux и никакое ядро внутрь они не клали. WSL это реализация интерфейса между Linux ядром и User-space — т.е. syscall'ы. Куда эти syscall'ы уходят самим приложениями уже пофиг. А уходят они в NT ядро, где что-то реализовано поверх имеющихся компонентов, что-то переписано с нуля, а что-то комбинация этих решений. Поэтому и с лицензиями никаких проблем — там нет ни строчки кода из Linux.
                                                                          +4
                                                                          Извиняюсь, был неправ, правда тогда указание релиза ядра Linux становится совсем уже бессмыслицей.
                                                                      0
                                                                      А что с лицензией в результате?
                                                                      Если они засунули к себе внутрь ядро linux, то они, конечно, молодцы, но только оно GPL-ное. И если они действительно засунули ядро linux внутрь и интегрировали с windows, то где теперь я, как законный обладатель их продукта, могу увидеть его полный исходный код ибо теперь windows тоже должен быть под GPL.
                                                                        0
                                                                        Думаю, там наполовину готовые компоненты, наполовину эмуляция API, так что выкладывать там нечего, изменений мало, и все они уже выложены.
                                                                          +2
                                                                          Видео посмотрите и все будет понятно. Никаких проблем с лицензией там нет
                                                                          0
                                                                          Это всё конечно очень здорово и замечательно что МS внедрил Linux kernel и теперь %username% может поиграться с тем же bash или ещё что то запустить…
                                                                          Но как то это не практично на мой взгляд.
                                                                          Может давайте интегрируем Windows в линукс и все будут ходить на костылях?
                                                                          Зачем к феррари прикручивать газонокосилку или «интегрировать» в газонокосилку спидометр?
                                                                          Потом все эти костыли ПО поддерживать…
                                                                            +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

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

                                                                                После того как всё встанет, появится программа «Bash на Ubunta на Windows»
                                                                                  +1
                                                                                  Уже без режима разработчика. Просто после аниверсари апдейта в компонентах.
                                                                                    0
                                                                                    Спасибо.

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

                                                                                P.S. И, да, что тут странного, если про Bash в винде писали здесь же https://habrahabr.ru/post/280560/ еще весной, не говоря что и обсуждали, как его заюзать правильно.
                                                                                  0
                                                                                  «Ядро Linux, спрятанное внутри Windows 10»
                                                                                  Хороший заголовок, юристы напряглись ;)
                                                                                  Линус Торнвальдс в ядре 3.4 использовал NT — kernel

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

                                                                                  Самое читаемое