Как стать автором
Обновить

Компания НеоБИТ временно не ведёт блог на Хабре

Сначала показывать

Как запустить программу без операционной системы

Время на прочтение13 мин
Количество просмотров182K

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

В интернете существует огромное количество описаний и туториалов о для того как написать собственную мини-ОС, даже существуют сотни готовых маленьких хобби-ОС. Один из наиболее достойных ресурсов по этой тематике, который хотелось бы особо выделить, это портал osdev.org. Для дополнения предыдущей статьи про PCI (и возможности писать последующие статьи о различных функциях, которые присутствуют в любой современной ОС), мы опишем пошаговые инструкции по созданию загрузочного диска с привычной программой на языке С. Мы старались писать максимально подробно, чтобы во всем можно было разобраться самостоятельно.

Итак, цель: затратив как можно меньше усилий, создать собственную загрузочную флешку, которая всего-навсего печатает на экране компьютера классический “Hello World”.

Читать дальше →
Всего голосов 196: ↑188 и ↓8+180
Комментарии69

Как запустить программу без операционной системы: часть 3: Графика

Время на прочтение17 мин
Количество просмотров57K


В этой части попробуем сделать “невозможное”: научимся использовать графический дисплей без операционной системы. На самом деле это задача не из легких, особенно в случае работы в 32-х битном защищенном режиме, и особенно если хочется использовать приличное разрешение экрана а не 320x200x8. Но все по порядку: раз хотим графику – значит нужно работать с видеокартой.

Современные графические карты – это практически полноценные компьютеры по мощности не уступающие основному: тут и декодирование MPEG2 в качестве 1080p, поддержка 3D графики и шейдеров, технологии вроде CUDA, и многое другое. Это все выглядит весьма сложно. С другой стороны видеокарты – это всего лишь очередной PCI девайс, такой же, как и остальные. Это устройство мы даже “нашли” в предыдущей статье с номером класса устройства 0x03 (class_name=graphics adapter). Как и с любым, устройством с видеокартой можно работать при помощи портов ввода-вывода или MMIO областей памяти, а сама видеокарта может использовать DMA и прерывания для взаимодействия с основным процессором. Если посмотреть на диапазон портов ввода-вывода, доступных у видео карт, то мы увидим, что всего ей выделяется менее 50-ти байт – не так уж и много с учетом огромной функциональности, которой обладают современные видеокарты.
Читать дальше →
Всего голосов 129: ↑126 и ↓3+123
Комментарии10

Как запустить программу без операционной системы: часть 2

Время на прочтение8 мин
Количество просмотров65K


В первой части нашей статьи мы рассказали о том, каким образом можно получить простую программу “Hello World”, которая запускается без операционной системы и печатает сообщение на экран.

В этой части статьи, хочется развить получившийся в первой части код таким образом, чтобы он мог быть отлажен через GDB, компилировался через оболочку Visual Studio и печатал на экран список PCI устройств.

! ВАЖНО!: Все дальнейшие действия могут успешно осуществляться только после успешного прохождения всех 6-ти шагов описанных в первой части статьи).

Читать дальше →
Всего голосов 124: ↑118 и ↓6+112
Комментарии9

Персональное развлекательное устройство от РЖД — взгляд со стороны пассажира

Время на прочтение4 мин
Количество просмотров67K
В очередную поездку на Сапсане из Москвы в Питер мы заметили, что наконец хоть как-то заработали персональные развлекательные системы (если их можно так назвать), те самые, которые выдвигаются из правого подлокотника сидений. До последнего времени они не функционировали вообще и/или были заклеены от таких, как мы, бумагой. И, чтобы скоротать почти 4 часа поездки и просто из собственного любопытства, мы решили разобраться, какие же функции сейчас может предоставить данное развлекательное средство. Отвертки с собой не было (да, и не одобрили бы проводницы, если бы мы начали раскурочивать эти драгоценные устройства), поэтому ограничились внешним обзором, перезагрузили устройство, посмотрели, какая там ОС и аппаратные характеристики.
внутри много фото
Всего голосов 91: ↑80 и ↓11+69
Комментарии66

Как запустить программу без операционной системы: часть 5. Обращение к BIOS из ОС

Время на прочтение15 мин
Количество просмотров52K

В самой первой части нашей серии «Как запустить программу без операционной системы» мы остановились на том, что загрузили ядро с помощью GRUB’а и распечатали на экран классический “Hello World!”. Теперь мы покажем, как можно использовать прерывания BIOS’а в ядре ОС. А для начала — рассмотрим, что же такое прерывания BIOS’а, для чего они используются, и почему возникают проблемы с их вызовом.
Читать дальше →
Всего голосов 71: ↑68 и ↓3+65
Комментарии4

Как запустить программу без операционной системы: часть 4. Параллельные вычисления

Время на прочтение18 мин
Количество просмотров30K
После долгого перерыва продолжаем делать интересные штуки, как всегда на чистом железе без операционной системы. В этой части статьи научимся использовать весь потенциал процессоров: будем запускать программу сразу на нескольких ядрах процессора в полностью параллельном режиме. Чтобы провернуть такое, нам потребуется многое сделать для расширения функциональности программы полученной в части 3.

Просто так выполнять какие-то вычисления на ядрах процессора – скучно, поэтому нужна задача, которая требует больших вычислительных ресурсов, хорошо раскладывается на параллельные вычисления, да и выглядит прикольно. Предлагаем сделать программу, которая рендерит простенькую 3D-сцену, используя алгоритм обратной трассировки лучей, или, по-простому, Ray Tracing.

Начнем с самого начала: наша цель параллельные вычисления на всех ядрах процессора. Все современные процессоры для PC, да и ARM уже тоже (я молчу про GPU) – это многоядерные процессоры. Что же это означает? Это означает, что вместо одного вычислительного ядра у процессора на одном компьютере присутствует несколько ядер. В общем случае, все выглядит несколько сложнее: на компьютере может быть установлено несколько сокетов (чипов процессора), в рамках каждого чипа (в рамках одного кристалла) может находиться сразу несколько физических ядер, а в рамках каждого физического ядра может находиться несколько логических ядер (например, те, что возникают при использовании технологии Hyper Threading). Все это схематично представлено на рисунке ниже, и называется топологией.


Читать дальше →
Всего голосов 60: ↑58 и ↓2+56
Комментарии6

Виртуальные твари и места их обитания: прошлое и настоящее TTY в Linux

Время на прочтение14 мин
Количество просмотров67K
Ubuntu интегрирована в Windows 10 Redstone, Visual Studio 2017 обзавелась поддержкой разработки под Linux – даже Microsoft сдает позиции в пользу растущего числа сторонников Торвальдса, а ты всё еще не знаешь тайны виртуального терминала в современных дистрибутивах?

Хочешь исправить этот пробел и открываешь исходный код? TTY, MASTER, SLAVE, N_TTY, VT, PTS, PTMX… Нагромождение понятий, виртуальных устройств и беспорядочная магия? Всё это складывается в довольно логичную картину, если вспомнить, с чего всё началось…
Читать дальше →
Всего голосов 59: ↑56 и ↓3+53
Комментарии27

Использование оболочки Visual Studio 2010 для компиляции проектов с помощью gcc в Linux

Время на прочтение8 мин
Количество просмотров36K
Ни для кого не секрет, что Microsoft Visual Studio 2010 представляет собой мощную IDE, которая, помимо всего, позволяет заменять команды сборки проекта проектов путем внесения изменений в .vcxproj файлах. Как выяснилось, можно использовать эту возможность, чтобы заставить Visual Studio собирать проекты с помощью gcc, работающего на другом компьютере под управлением Linux. При этом обращение к gcc на Linux должно происходить по сети, например по ssh. В этой статье мы расскажем вам о проделанном нами эксперименте по такой необычной настройке Visual Studio.

Предположим, у нас есть программа:
Читать дальше →
Всего голосов 48: ↑44 и ↓4+40
Комментарии15

Постквантовая криптография и закат RSA — реальная угроза или мнимое будущее?

Время на прочтение14 мин
Количество просмотров39K
RSA, эллиптические кривые, квантовый компьютер, изогении… На первый взгляд, эти слова напоминают какие-то заклинания, но все куда проще сложнее, чем кажется!

Необходимость перехода к криптографии, устойчивой к атаке на квантовом компьютере, уже официально анонсирована NIST и NSA, из чего вывод довольно-таки простой: пора вылезать из зоны комфорта!

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

Чтобы разобраться в тонкостях криптографии на эллиптических кривых, проследить новомодные веяния постквантовой криптографии и даже прикоснуться к ней с помощью библиотеки Microsoft SIDH, добро пожаловать под кат, %username%!
Читать дальше →
Всего голосов 39: ↑37 и ↓2+35
Комментарии46

Поиск уязвимости методом фаззинга и разработка шеллкода для её эксплуатации

Время на прочтение9 мин
Количество просмотров22K
Для поиска уязвимостей все средства хороши, а чем хорош фаззинг? Ответ прост: тем, что он дает возможность проверить, как себя поведёт программа, получившая на вход заведомо некорректные (а зачастую и вообще случайные) данные, которые не всегда входят во множество тестов разработчика.

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

В этой статье мы:

  • продемонстрируем, как фаззить обработчик JSON-запросов;
  • используя фаззинг, найдём уязвимость переполнения буфера;
  • напишем шеллкод на Ассемблере для эксплуатации найденной уязвимости.

Разбирать будем на примере исходных данных задания прошлого NeoQUEST. Известно, что 64-хбитный Linux-сервер обрабатывает запросы в формате JSON, которые заканчиваются нуль-терминатором (символом с кодом 0). Для получения ключа требуется отправить запрос с верным паролем, при этом доступа к исходным кодам и к бинарнику серверного процесса нет, даны только IP-адрес и порт. В легенде к заданию также было указано, что MD5-хеш правильного пароля содержится где-то в памяти процесса после следующих 5 символов: «hash:». А для того, чтобы вытащить пароль из памяти процесса, необходима возможность удалённого исполнения кода.
Читать дальше →
Всего голосов 41: ↑38 и ↓3+35
Комментарии6

Как найти PCI устройства без операционной системы

Время на прочтение7 мин
Количество просмотров38K
В ходе работы нам периодически приходится сталкиваться с достаточно низкоуровневым взаимодействием с аппаратной частью. В данной статье мы хотим показать, каким образом происходит опрос PCI-устройств для их идентификации и загрузки соответствующих драйверов устройств.

В качестве минимальной базы для работы с PCI-устройствами будем использовать ядро, поддерживающее спецификацию Multiboot. Так удастся избежать необходимости писать собственный загрузочный сектор и загрузчик (loader). Кроме того, этот вопрос и так отлично освещен в интернете. В качестве загрузчика будет выступать GRUB. Грузиться мы будем с флэшки, так как с нее удобно загружать и виртуальную, и реальную машину. В качестве виртуальной машины будем использовать QEMU. В качестве реальной машины должна выступать машина с обычным BIOS-ом (не UEFI), поддерживающим загрузку с USB-HDD (обычно присутствует опция Legacy USB support). Для работы понадобятся Ubuntu Linux со следующими программами: expect, qemu, grub (их можно легко установить при помощи команды sudo apt-get install). Используемый gcc должен компилировать 32х битный код.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии5

Эй, телевизор, ты что, самый «умный»?

Время на прочтение4 мин
Количество просмотров16K
Про опасности использования «умных» телевизоров слышали, наверное, все. Говорят, что они наблюдают за владельцем и прослушивают его разговоры. Но это не тревожит большинство пользователей, которые продолжают спокойно заполнять формы авторизации прямо на экране TV.

Мы решили проверить, реально ли сделать что-то интересное с умным телевизором, не имея физического доступа к нему (спойлер: реально!), и готовы рассказать об этом на примере разбора задания с NeoQUEST!
Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии31

Использование отладчика GDB по максимуму

Время на прочтение4 мин
Количество просмотров39K
В нашей повседневной работе, как и всем, требуется много пользоваться отладчиком. В силу специфики работы: (разработка ОС, использование технологий виртуализации наподобие Intel-VT, ит.д.) нам часто требуется использовать отладчик для работы со специфическими случаями: отладка кода загрузчика ядра, отладка загрузчиков виртуальных машин, а так же в принципе обеспечение возможности отлаживать ОС собственной разработки. Именно эти особые случаи так пафосно названы в заголовке ”по максимуму”.

Для решения всех этих задач (и конечно, многих других) мы используем gdb. Возможно использование и таких оболочек как DDD, но лично я предпочитаю использовать cgdb как оптимальный выбор, особенно для случая работы с отладчиком по ssh.
В этой статье мы расскажем о том, как можно использовать gdb для отладки кода загрузочных секторов и загрузчиков.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии3

Решето под названием Adobe Flash

Время на прочтение7 мин
Количество просмотров22K
Пока еще широко распространенный продукт Flash Player компании Adobe печально известен своей безопасностью. Регулярно становится известно об очередной zero-day уязвимости во Flash, используемой хакерами в APT-кампаниях. 2015 год выдался особенно урожайным на такие уязвимости. Большая доля критических RCE-уязвимостей были вызваны некорректной работой с памятью: была возможна запись в освобожденную память в куче процесса Flash.

В этой статье мы поисследовали безопасность Adobe Flash и выяснили, что многие его «дыры в безопасности» — хронические, и решить их можно разве что переписыванием кода с нуля, в то время как разработчики ставят заплатку на заплатку, что, конечно, не повышает уровень безопасности. А еще мы продемонстрируем некоторые найденные нами и незакрытые на данный момент уязвимости!
Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии66

Хардкорный олдскул: QEMU и реверс образа флоппика

Время на прочтение15 мин
Количество просмотров12K

В преддверии "очной ставки" NeoQUEST-2015, которая состоится уже завтра, 2 июля в 11:00, в Санкт-Петербурге, публикуем write-up последнего неразобранного задания online-этапа!

Напоминаем, что вход на мероприятие свободный, и мы ждём всех, кто интересуется информационной безопасностью! NeoQUEST — это шанс узнать что-то новое, усовершенствовать свои «хакерские» навыки, пообщаться с коллегами, понаблюдать за решающим соревнованием лучших хакеров, и просто отлично провести время!

Подробнее про место проведения и темы докладов NeoQUEST-2015 можно прочитать тут и там.

Задание online-этапа, оставленное «на десерт», было достаточно олдскульным: достаточно уже того, что речь шла о дампе всеми давно забытого флоппи-диска! О том, как участникам квеста пришлось повозиться с реверсом и с QEMU — под катом!
Читать дальше →
Всего голосов 26: ↑25 и ↓1+24
Комментарии13

Гремлины и ELFийская магия: а что, если ELF-файл — это контейнер?

Время на прочтение5 мин
Количество просмотров7.8K
Мы, дети 90-х, любим добавить в задания NeoQUEST что-нибудь олдскульное. В этом году нам вспомнились гремлины, и мы добавили их в легенду одного из заданий соревнования «Очной ставки» NeoQUEST-2017.

Однако, под внешне забавной легендой скрывается вполне себе реальная практическая задача: а что, если привычные ELF-файлы — не просто исполняемые файлы, а контейнеры, открыть которые нам предстоит? Для этого придется испытать довольно-таки обширные возможности objcopy и освежить в памяти организацию ELF-файла.

Чтобы вычислить подозрительные секции, необходимо представлять секционный и сегментный состав типичного ELF. Помимо этого, конечно, пригодится и опыт — например, общение с firmware embedded-систем вполне может подсказать подходящие идеи!

Думаете, готовы на 100%? Уверены, что гремлинам удастся вас удивить спрятанными архивами, попорченными таблицами символов, а также аудиофайлами, которые зазвучат только в руках умелого мастера! Под катом — исходники к заданию и прохождение, чтобы каждый читатель Хабра мог собственноручно попробовать пройти задание!
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии5

Как запустить программу без операционной системы: часть 6. Поддержка работы с дисками с файловой системой FAT

Время на прочтение11 мин
Количество просмотров21K
В пятой части нашей серии статей мы показали, как можно использовать прерывания BIOS'а после перехода в защищенный режим, и в качестве примера определили размер оперативной памяти. Сегодня мы разовьем этот успех и реализуем полноценную поддержку работы с дисками с файловой системой FAT16 и FAT32. Работу с файлами на диске можно разбить на 2 части: работа с файловой системой и работа с диском на уровне чтения/записи секторов. Можно сказать, что для этого нам нужно написать «драйвер» файловой системы и «драйвер» диска.
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии3

Открыта регистрация на NeoQUEST-2018: стимпанк-экспедиция в Атлантиду

Время на прочтение4 мин
Количество просмотров4K

Регистрация на ежегодное соревнование по кибербезопасности NeoQUEST-2018 открыта!

Индивидуальный CTF продлится с 5 по 16 марта, и в этом году команда NeoQUEST отправит тебя в экспедицию за сокровищами Атлантиды! Добро пожаловать под кат: там мы приоткроем тайну о тематике заданий и расскажем, что новенького будет на «Очной ставке»!
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии0

Скрытый JS-майнинг в браузере

Время на прочтение4 мин
Количество просмотров17K

В преддверии NeoQUEST мы любим делиться разными историями, которые косвенно могут помочь участникам при прохождении заданий. В этот раз рассказываем абсолютно реальную историю на тему скрытого JS-майнинга в браузере пользователя, отчаянно намекая на то, что в NeoQUEST-2018 будет что помайнить!

Тема ранее уже поднималась на Хабре, но фантазия вирусописателей неиссякаема! Недавно мы обнаружили более масштабное применение майнинга на JS в браузере пользователя. Будь бдителен, хабраюзер, и добро пожаловать под кат: расскажем обо всем подробнее!
Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии15

1000 и 1 способ обойти Safe Exam Browser

Время на прочтение6 мин
Количество просмотров79K
Ну ладно, не 1000 и 1 способ, но их довольно много! О чем это мы? О том, что пандемия COVID-19 внесла много изменений в нашу жизнь, в том числе, и в образование — как школьное, так и ВУЗовское. Уроки, лекции и семинары перешли в онлайн-формат, а вопрос, как быть с контролем успеваемости, остался. Как преподавателям убедиться, что сдающий экзамен студент не открыл в соседней вкладке шпаргалки?

В России эту проблему решили с помощью open-source программы Safe Exam Browser (SEB). Казалось бы, теперь ни один искатель халявы не сможет смухлевать, но так ли уж неприступна эта «крепость»? Заходи под кат, сегодня мы расскажем и покажем кучу способов обмануть SEB!
Читать дальше →
Всего голосов 15: ↑14 и ↓1+17
Комментарии39