код операционной системы windows
В сеть утекли исходные коды операционной системы Windows 10 [маленькая часть]
UPD Выяснилось, что theregister все сильно преувеличил.
По информации портала theregister.co.uk недавно произошла массивная утечка приватных билдов ОС Windows 10 и фрагментов ее исходных кодов.
Массив из 32 терабайтов данных (в архивированном виде — 8 терабайт), состоящий из официальных и приватных образов, закрытой технической документации и исходных текстов, оказался загруженным на ресурс betaarchive.com
Предполагается, что конфиденциальные данные в этом дампе были нелегально скопированы из внутреннего хранилища Microsoft приблизительно в марте 2017 года.
По сообщениям людей, успевших ознакомиться с материалами внушительного архива, утекшие исходные коды в нем относятся к Microsoft’s Shared Source Kit. Этот набор включает в себя исходники базовых драйверов Windows 10, стеков Wi-Fi,USB и PnP, драйверов систем хранения и ARM-версии ядра OneCore.
На данный момент имеются все предпосылки того, что инцидент окажется не менее значительным, чем в свое время утечка исходных кодов Windows 2000.
В довершение этого «праздника», в утекшем массиве среди вполне официальных билдов Windows 10 и Windows Server 2016 были обнаружены и секретные экземпляры, которые никогда не предназначались для публичного доступа, а использовались инженерами компании для поиска багов и экспериментального тестирования.
По мнению Криса Уильямса, редактора theregister, Internet ждет новая волна эксплоитов и вирусов, использующих ранее неизвестные уязвимости в коде новейших версий Windows.
Источник утечки и обстоятельства произошедшего пока не ясны. Представители компании Microsoft на момент публикации никак не про комментировали ситуацию.
Грандиозная утечка: Исходный код самой народной версии Windows выложен в Сеть
Неизвестные слили в Сеть исходники Windows XP, одной из самых популярных и любимых миллионами ОС Microsoft. Вместе с ними утекли коды Windows Server 2003, а несколько месяцев назад Microsoft допустила утечку кодов Windows NT 3.5 и прошивки консоли Xbox первого поколения.
Windows XP ушла в народ
Корпорация Microsoft допустила утечку исходного кода ОС Windows XP, выпущенной в 2001 г. и на момент публикации материала не поддерживаемой. Как пишет портал Tom’s Hardware, архив с кодом получил распространение среди пользователей анонимного форума 4chan, а сам файл был многократно размещен на различных торрентах и файлообменниках, включая Mega, ранее известный как MegaUpload.
На момент публикации материала представители Microsoft не комментировали утечку. Подлинность выложенных в Сети файлов не была подтверждена или опровергнута.
Бояться почти нечего
Столь крупная утечка Microsoft, даже если все файлы окажутся настоящими, особой опасности сама по себе не представляет. Несмотря на широкую популярность Windows XP в свои годы и даже после релиза в 2007 г. Windows Vista, которую Microsoft готовила на ее замену, в 2020 г. она давно утратила актуальность.
По состоянию на август 2020 г. почти 19-летняя Windows XP (она вышла в октябре 2001 г.) была установлена не более чем на 1,16% Windows-компьютерах, согласно статистике StatCounter. Столь незначительным показателям система обязана даже не своим возрастом, а отсутствием технической поддержки – Microsoft прекратила обновлять ее 8 апреля 2014 г.
Ввиду того, что компьютеров на Windows XP практически не осталось, хакеры, по мнению специалистов Tom’s Hardware, с высокой степенью вероятности не станут использовать ее исходный код для новых эксплойтов. В финансовом плане им это будет невыгодно.
В то же время информация, которую киберпреступники могут получить из исходного кода Windows XP, может обеспечить им возможность успешного поиска уязвимостей в новых версиях ОС Microsoft.
Стоит добавить: есть вероятность, что архив содержит не весь код операционной системы.
Возможная польза от утечки
Появление в Сети кодов Windows XP имеет и положительную сторону. Ввиду отсутствия ее поддержки со стороны Microsoft все производители компьютерных комплектующих и периферии перестали адаптировать свою продукцию под эту ОС.
Имея на руках исходники системы, компьютерные энтузиасты получат возможность интегрировать в Windows XP поддержку современного оборудования или заставить корректно работать под ней актуальные версии ПО. Насколько подобные изыскания обоснованы ввиду того, что сама ОС не обновляется более шести лет и, следовательно, имеет массу уязвимостей, неизвестно.
Microsoft регулярно теряет исходники
Для Microsoft появление в интернете исходников ее программных продуктов – не первое за 2020 г. В мае 2020 г. она упустила в Сеть код программного обеспечения игровой приставки Xbox самого первого поколения. Консоль вышла в ноябре 2001 г., почти одновременно с Windows XP, и на момент публикации материала она уже устарела и давно не производится. Как сообщал CNews, в ноябре 2020 г. Microsoft начнет поставки Xbox Series X и Series S – четвертого по счету поколения своей приставки.
Напомним, что программное обеспечение первого Xbox – это ни что иное, как ОС Windows 2000, только сильно модифицированная. Поддержку полноценной Windows 2000 Microsoft прекратила 13 июля 2010 г.
Но утечкой сурс-кода Xbox все не ограничилось. Вместе с ним в распоряжении всех пользователей интернета оказались исходники ОС Windows NT 3.5 – второй операционной системой линейки Windows NT, которую Microsoft выпустила в сентябре 1994 г. Ее поддержка прекращена 31 декабря 2001 г.
Изучаем дерево исходников Windows 10: от телеметрии до open source
Насколько бы закрытым ни было программное обеспечение Microsoft, информации о своем внутреннем устройстве оно выдает предостаточно. К примеру, экспорт функций из библиотеки по именам дает представление о ее интерфейсах. В свободном доступе есть и отладочные символы, которые повсеместно используются для диагностики ошибок в ОС. Однако на руках у нас все равно имеются только скомпилированные бинарные модули. Становится интересно: а какими они были до компиляции? Давайте попробуем разобраться, как вытащить побольше информации об исходных кодах, не делая ничего незаконного.
Идея, конечно, не нова. В свое время подобное делали и Марк Руссинович, и Алекс Ионеску. Мне лишь было интересно получить свежие данные, немного дополнив и уточнив уже проделанную другими работу. Для эксперимента нам понадобятся пакеты отладочных символов, которые есть в свободном доступе. Я взял пакеты для последней релизной версии «десятки» (64 бита), причем решил исследовать и релизный пакет (free build), и отладочный (checked build).
Отладочные символы — это набор файлов с расширением pdb (program database, база данных программы), в которых хранится различная информация для расширения возможностей отладки бинарных модулей в ОС, включая имена глобалов, функций и структур данных, иногда вместе с их содержимым.
Помимо символов можно взять условно доступную отладочную сборку «десятки». Такая сборка богата на ассерты, в которых бывают описаны не только недокументированые и отсуствующие в символьных файлах имена переменных, но и номер строки в файле, в котором сработал ассерт.
В примере видно не только имя файла и его расширение, но и структура каталогов до него, очень полезная даже без корня.
Натравливаем на файлы символов утилиту strings от sysinternals и получаем около 13 ГБ сырых данных. А вот кормить все файлы из дистрибутива отладочной сборки подряд — так себе идея, ненужных данных будет слишком много. Ограничимся набором расширений: exe — исполняемые файлы, sys — драйвера, dll — билиотеки, ocx — ActiveX-компоненты, cpl — компоненты панели управления, efi — EFI-приложения, в частности загрузчик. Сырых данных от дистрибутива набралось 5,3 ГБ.
К своему удивлению я обнаружил, что не так много программ способны хотя бы открыть файлы размером в десяток гигабайт, и уж тем более единицы смогли поддержать функцию поиска внутри таких файлов. В данном эксперименте для ручного просмотра сырых и промежуточных данных использовался 010 Editor. Фильтрация данных дешево и сердито осуществлялась скриптами на питоне.
Фильтрация данных из символьных файлов
В символьных файлах помимо прочего содержится информация компоновщика. То есть, в символьном файле присутствует список объектных файлов, которые использовались для компоновки соответствующего бинарника, причем в компоновщике используется полный путь до объектного файла.
Получаем абсолютные пути, сортируем, удаляем дубликаты. К слову, мусора получилось не так много, и он был удален вручную.
При осмотре полученных данных стала понятна примерная структура дерева исходных кодов. Корень — «d:\th», что по всей видимости означает threshold, в соответствии с названием ноябрьской версии Windows 10 — Threshold 1. Однако файлов с корнем «d:\th» оказалось мало. Это объясняется тем, что компоновщик принимает уже собранные файлы. А сборка объектников осуществляется в папки «d:\th.obj.amd64fre» для релизной сборки и «d:\th.obj.amd64chk» для отладочной.
Для примера:
d:\th.obj.amd64fre\shell\osshell\games\freecell\objfre\amd64\freecellgame.obj
это бывший
d:\th\shell\osshell\games\freecell\freecellgame.c??
По поводу расширения файлов: объектный файл получается из кучи разных типов исходного файла: «c», «cpp», «cxx», «asm» и т. д. На данном этапе неясно, какой именно тип исходного файла использовался, поэтому оставим расширение «c??».
Помимо папки «d:\th» наблюдается множество других корней. Например, «d:\th.public.chk» и «d:\th.public.fre». Данную папку мы опустим ввиду того, что в ней хранится публичная часть sdk, то есть она нам не очень интересна. Также стоит отметить различные пути проектов для драйверов, которые, судя по всему, собираются где-то на рабочих местах разработчиков:
c:\users\joseph-liu\desktop\sources\rtl819xp_src\common\objfre_win7_amd64\amd64\eeprom.obj
C:\ALLPROJECTS\SW_MODEM\pcm\amd64\pcm.lib
C:\Palau\palau_10.4.292.0\sw\host\drivers\becndis\inbox\WS10\sandbox\Debug\x64\eth_tx.obj
C:\Users\avarde\Desktop\inbox\working\Contents\Sources\wl\sys\amd64\bcmwl63a\bcmwl63a\x64\Windows8Debug\nicpci.obj
Другими словами, существует набор драйверов устройств, отвечающих стандартам, например, USB XHCI, которые входят в дерево исходных кодов ОС. А все специфичные драйвера собираются где-то в другом месте.
Выходные данные становятся все красивее! Однако на этом этапе дополнительные данные получить уже практически невозможно. Переходим к следующему набору сырых данных.
Фильтрация данных из исполняемых файлов
На этом этапе есть несколько проблем с данными, полученными из символов. Первая проблема: мы не уверены, что правильно откатили путь сборки исходного файла в объектный файл.
И они действительно есть! То есть, для большинства каталогов можно утверждать, что их структура восстановлена правильно. Конечно, все еще остаются сомнительные каталоги, но думаю, эта погрешность вполне приемлема. Попутно можно смело заменять расширение «c??» на расширение совпавшего по пути исходника.
Вторая проблема — заголовочные файлы. Дело в том, что это важная часть исходных файлов, однако из заголовочника не получается объектный файл, а это значит, что из информации об объектных файлах нельзя восстановить заголовочники. Приходится довольствоваться малым, а именно теми заголовочниками, которые мы нашли в сырых данных бинарных файлов.
Третья проблема: мы все еще не знаем большинство расширений исходных файлов.
Ну а как же исходники на ассемблере? За последним штрихом можно обратиться к Windows Research Kernel — исходным кодам Windows XP — и часть исходников на ассемблере переименовать вручную.
Изучаем полученные данные
Телеметрия
Какое-то время я изучал вопрос об устройстве телеметрии в Windows 10. К сожалению, анализ на скорую руку не выявил ничего стоящего. Я не нашел никаких кейлоггеров, никакой утечки чувствительных данных, ничего, к чему можно было бы прикопаться. И первым ключевым словом для поиска среди исходных файлов было «telemetry». Результат превзошел мои ожидания: 424 совпадения. Самые интересные приведу ниже.
Комментировать, пожалуй, не стоит, поскольку все равно достоверно ничего не известно. Однако эти данные могут послужить хорошей отправной точкой для более детального исследования.
Kernel Patch Protection
Следующая находка — всеми любимый PatchGuard. Правда, в дереве исходников ОС присутствует только один файл непонятного, скорее всего бинарного типа.
d:\th\minkernel\ntos\ke\patchgd.wmp
Поискав совпадения в нефильтрованных данных, я обнаружил, что на самом деле Kernel Patch Protection — это отдельный проект.
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen00.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen01.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen02.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen03.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen04.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen05.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen06.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen07.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen08.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen09.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgd.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda2.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda3.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda4.c??
Сомнительные файлы
Не придумав больше ничего меня интересующего, я начал искать все подряд — и остался доволен!
d:\th\windows\core\ntgdi\fondrv\otfd\atmdrvr\umlib\backdoor.c??
в драйвере шрифтов?
d:\th\inetcore\edgehtml\src\site\webaudio\opensource\wtf\wtfvector.h
Web Template Framework, это всего лишь Web Template Framework, спорная аббревиатура. Погодите,
Open source?
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libjpeg\jaricom.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libpng\png.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libtiff\tif_compress.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\zlib\deflate.c??
Думаю, на этой находке пора закругляться.
Архив с текстовым файлом со списком исходников приведен по ссылке. Делитесь своими находками в комментариях!
Открытые коды Windows: сила закона
The monster must die
Я не отношу себя к специалистам IT-сферы, ортодоксальным пользователям
интернета или сумасшедшим геймерам, однако у меня есть компьютер, я работаю с
определённым программным обеспечением и слежу за компьютерно-информационной
ситуацией в мире. В первую очередь из-за того, что мы живём в post/информационном,
глобализированном мире, где компьютеры управляют атомными станциями, военными
объектами стратегического назначения, и, да простят меня закоренелые
славянофилы, мышлением большинства населения. Влияние на высокотехнологичную
сферу post/общества определяет влияние на человечество в целом. Особенно, если
это влияние оказывает монополист.
Microsoft же, несколько неоднозначно истолковав решение комиссии ЕС,
предложила открыть исходные коды Windows Server 2003 и предоставить документации
с описанием протоколов под определенными лицензиями, которые, естественно, надо
будет купить. Пока неясно, удовлетворят ли европейских чиновников новые
предложения Microsoft. Представители ЕС уже заявили, что внимательно изучат её
заявления. Однако не исключено, что конфликт ЕС с Microsoft этим не исчерпается,
поскольку американская корпорация и европейские структуры также спорят о цене
лицензий на использование кода Windows. К тому же, авторы иска к Microsoft
считают, что последняя не имеет права брать деньги за лицензии на сетевые
протоколы, поскольку это стандартное программное обеспечение, зашифрованное для
противодействия конкурентам. В самой корпорации, однако, утверждают, что речь
идет об уникальных разработках.
Чего, собственно, добиваются все эти «антимонопольные» процессы, помимо,
конечно же, ограничения роста компании? Во-первых, принудить Microsoft выпустить
ограниченную версию Windows, из которой поставщики могли полностью выкинуть
любую прикладную программу, так или иначе «ущемляющую» интересы конкурентов –
всякие мультимедийные утилиты, вроде Windows Media Player или Internet Explorer.
Во-вторых, приказать Microsoft предоставить конкурентам всю необходимую
техническую информацию, с тем, чтобы их софт мог безглючно работать с Windows.
В-третьих, открыть исходники всей операционной системы для тщательного изучения.
Теперь следует более подробно остановиться на открытии исходного кода Windows.
Заглянуть в него очень хотелось бы и конкурентам, и разработчикам из open source
community, и, вполне вероятно, хакерам ;). Вот последних в Microsoft, видимо,
убоялись больше всего. Не однократно представители Microsoft заявляли, что
открытость – это как раз не преимущество, что утверждают сторонники Linux, а
страшная опасность: дескать, любой желающий может найти нужную ему дыру, и
использовать её во зло – вирус написать, или взлом устроить. Поэтому лучше
скрывать исходные коды, вместе со всеми их дырами. Напомню, что в сообществе
открытых программ принято инспектировать коды, выявлять ошибки, заявлять о них и
пытаться залатать. Кто во что горазд. Неоднократно высказывались мысли и о том,
что в исходниках Windows наличествуют такие огрехи, что открывать их означает и
впрямь поставить под теоретическую угрозу всех тех, кто пользуется продукцией
Microsoft. Скорее всего Microsoft Windows во всех своих версиях содержит
уязвимость, которую исправить невозможно (по мнению некоторых сторонних
исследователей в разных версиях подобные Абсолютные Ошибки разные). Лечить её
примерно то же самое, как заделывать дыру в середине фундамента, на котором уже
стоит многоэтажный дом. Безусловно Microsoft прекрасно осведомлены насчёт
наличия Абсолютной ошибки, но не считают её уязвимостью. Конечно, ведь исходные
коды пока ещё скрыты от глаз общественности.
Даже лояльные к Microsoft чиновники понимают, что закрытость исходных кодов и
технической информации делает программы корпорации потенциально опасными для
национальных интересов страны. Кто может гарантировать, что те дыры, которые все
время находят хакеры, не оставлены Microsoft специально, чтобы заглядывать в
компьютеры пользователей? Пусть это не так. Менеджмент Microsoft состоит из
кристально честных людей. Но кто поручится, что под давлением правительственных
структур Соединенных Штатов случайно допущенные ошибки не будут использованы без
ведома других государств на их территории? Не стоит забывать, что идет
масштабная антитеррористическая кампания, а Microsoft обвиняется многими
американскими штатами и правительственными организациями в монополизме и
нечестной конкуренции. В таком положении вряд ли Билл Гейтс будет
последовательно отстаивать права граждан других стран.
Исходные коды разрешено просматривать, но изменять их можно только вместе со
специалистами Microsoft. Кроме этого компания предоставляет техническую
информацию о платформе Windows для создания более защищенных вычислительных
систем. Да, сразу и не поймешь где же тут защита, когда все интимные защитные
операции делаются при участии и под присмотром сотрудников Microsoft? Но сила
Microsoft, конечно, не в кодах, а в знании психологии.
Несколько лет назад много шума наделал история с кражей и распространением
через интернет исходников 2000 и NT 4.0. Часть кода, появившаяся в интернете,
являлась, по мнению экспертов, первым сервис-паком для Windows 2000 и
датировалась 25 июля 2000 года. Предполагалось, что источником утечки стал файл
разгрузки оперативной памяти, сгенерированный одним из компьютеров компании
Mainsoft, работающим под Linux. В ходе расследования утечки исходных кодов
операционных систем Windows 2000 и Windows NT стало известно, что в свободном
доступе оказалось порядке 15 процентов оригинального текста программ. Речь идет
о 30915 файлах исходного кода Windows 2000, содержащих 13,5 миллиона строк
текста, и 95103 файлах и 28 миллионах строк кода Windows NT. Исходный код был
написан на языках программирования ассемблер, С и С++.
Quality on conscience of the buyer
А как же обстоят дела с открытием кода Windows 2003, спросит внимательный
читатель. Ну его нах, отвечают представители IT-сферы. Microsoft никто и не
просил открывать коды этой системы. Это вообще нужно только самой Microsoft.
Клонировать код можно и без Microsoft, а вот получить внятную документацию –
нет. Microsoft стремится лицензировать собственное ПО, чтобы иметь ещё больше
возможностей контроля доступа. Ещё в 2004 году решение Еврокомиссии говорило о
том, что Компании следует в 120-дневный срок предоставить точную документацию
интерфейса. Раскрытая информация должна была обновляться каждый раз после
выпуска новых версий. Речь об исходных кодах вообще не шла. Представители
Microsoft с умным видом заявили, что «исходный код – это и есть окончательная
документация, ДНК системы». Действительно, не отмажешься. От таких определений в
пору сходить с ума юристам и устраивать бесконечные судебные процессы. На чём,
собственно, и строится Компания вот уже столько лет.
В 2004 году Microsoft по решению ЕС предоставила 12.000 страничный (ага, это
не опечатка – 12 тысяч страниц) трактат с описанием исходного кода. Тогда
разобраться в нём евроспециалисты не смогли. В нынешнем году майкрасофтовцы
сжалились и пообещали всего 500 часов техподдержки с попыткой объяснения, чего
же они там на 12.000 страниц написали. Складывается впечатление, что Microsoft
как может, в рамках доступного законодательства, тормозит процесс, известный по
аксиоме «всё тайное рано или поздно становится явным» и при этом ещё пытается
проводить выгодную для себя политику запатентованных продуктов. Программа по
«разоблачению» Windows у Microsoft предполагает предоставление только справочных
лицензий на исходный код. Поэтому Microsoft позволит просматривать код,
обнаруживать в нем ошибки, но не разрешит вносить изменения. Так что если вы
создаете собственные приложения для Windows, то можете отлаживать код этих
приложений и код Windows с соответствующими API. По идеи это означает, что при
анализе функций защиты никто не станет проводить полную проверку защиты Windows,
но компоненты, связанные с вашим приложением, проверить будет возможно. Если же
вы обнаружите ошибку в Windows, то обязаны будете сообщить о ней в офис
Microsoft. И даже если вы предложите способ устранения ошибки, Компания
оставляет за собой правой выбирать, включать или нет его в следующий сервис-пак.
Даже при оптимальном варианте исследования кода Компания предоставит около
95% Windows. Еще три процента кода Microsoft вроде как не принадлежит, а
некоторые места – такие, как код активации продукта – имеют слишком большую
ценность, чтобы их открывать. К тому же распространение некоторых
криптографических элементов ограничено правительством США и не может быть
экспортированы в другие страны.