Ведущий: Михаил Якшин
В докладе будут рассмотрены современные подходы к обратной разработке бинарных файлов: с чего начинают, что хотят получить на выходе, какими инструментами традиционно пользуются. Будет продемонстрирован новый проект— Kaitai Struct, представляющий собой инструментарий для декларативного описания бинарных структур данных с выводом результата в виде готовых библиотек на языках C++, Java, JavaScript, Python и Ruby. Несколько практических примеров использования обратной разработки помогут участникам лучше ознакомиться с проблематикой.
Перехват беспроводных гаджетов — от квадрокоптеров до мышекPositive Hack Days
Автор: Артур Гарипов
Доклад посвящен общим аспектам применения SDR (software-defined radio) в анализе радиоэфира. Ведущий покажет, как происходят поиск и определение беспроводных устройств, анализ протоколов и их спуфинг, перехват управления беспроводным оборудованием, атака Mousejack.
Практические советы по выбору и настройке Cisco VPNSkillFactory
Сергей Кучеренко – инструктор онлайн-школы SkillFactory, CCIE Security и международный эксперт по информационной безопасности – о Cisco VPN: очень многообразной и сложной технологии, разобраться в которой бывает непросто даже опытным специалистам.
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...Ontico
HighLoad++ 2017
Зал «Дели + Калькутта», 8 ноября, 11:00
Тезисы:
http://www.highload.ru/2017/abstracts/3071.html
Пишем свой протокол стриминга с гарантированной задержкой поверх UDP. Архитектура отказоустойчивого стриминг-сервиса, способного выдержать потерю дата-центра и миллион онлайнов. Проблемы мобильного стриминга и TCP-протокола, QUIC как замена TCP, UDP и fast retransmit, forward error correction (FEC), задержка или потеря пакетов, приоритезация потоков, шифрование и многое другое.
Сервис Видео в Одноклассниках – вторая площадка в Рунете по просмотрам видео, ежедневно мы фиксируем свыше 400 миллионов просмотров видео.
...
Технические аспекты блокировки интернета в России. Проблемы и перспективыPhilipp Kulin
Технические детали блокировок. Как сейчас организован механизм блокировок. Кто, что, где, когда и как. Почему он так организован. Почему РКН блокирует сетями. В чем проблема текущего механизма блокировок с технической точки зрения. В каком направлении надо двигаться с технической точки зрения в рамках минимальных изменений сегодняшней нормативной правовой базы.
HighLoad++ 2018 http://www.highload.ru/moscow/2018/abstracts/4280
Перехват беспроводных гаджетов — от квадрокоптеров до мышекPositive Hack Days
Автор: Артур Гарипов
Доклад посвящен общим аспектам применения SDR (software-defined radio) в анализе радиоэфира. Ведущий покажет, как происходят поиск и определение беспроводных устройств, анализ протоколов и их спуфинг, перехват управления беспроводным оборудованием, атака Mousejack.
Практические советы по выбору и настройке Cisco VPNSkillFactory
Сергей Кучеренко – инструктор онлайн-школы SkillFactory, CCIE Security и международный эксперт по информационной безопасности – о Cisco VPN: очень многообразной и сложной технологии, разобраться в которой бывает непросто даже опытным специалистам.
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...Ontico
HighLoad++ 2017
Зал «Дели + Калькутта», 8 ноября, 11:00
Тезисы:
http://www.highload.ru/2017/abstracts/3071.html
Пишем свой протокол стриминга с гарантированной задержкой поверх UDP. Архитектура отказоустойчивого стриминг-сервиса, способного выдержать потерю дата-центра и миллион онлайнов. Проблемы мобильного стриминга и TCP-протокола, QUIC как замена TCP, UDP и fast retransmit, forward error correction (FEC), задержка или потеря пакетов, приоритезация потоков, шифрование и многое другое.
Сервис Видео в Одноклассниках – вторая площадка в Рунете по просмотрам видео, ежедневно мы фиксируем свыше 400 миллионов просмотров видео.
...
Технические аспекты блокировки интернета в России. Проблемы и перспективыPhilipp Kulin
Технические детали блокировок. Как сейчас организован механизм блокировок. Кто, что, где, когда и как. Почему он так организован. Почему РКН блокирует сетями. В чем проблема текущего механизма блокировок с технической точки зрения. В каком направлении надо двигаться с технической точки зрения в рамках минимальных изменений сегодняшней нормативной правовой базы.
HighLoad++ 2018 http://www.highload.ru/moscow/2018/abstracts/4280
Александр Тоболь, Кадры решают все, или стриминг видео в ОдноклассникахTanya Denisyuk
Александр расскажет, как им удалось ускорить более чем в 10 раз старт просмотра кино и сериалов с использованием технологий адаптивного стриминга MPEG-DASH и HLS. Вы узнаете, какие технологии попали в поле зрения команды, как инфраструктурные особенности и размер аудитории, а также специфика потребления на разных пользовательских устройствах повлияли на принятие решение о выборе технологии. И, конечно, будет дан подробный отчет о результатах внедрения и полученном эффекте.
Борьба с DDoS в хостинге - по обе стороны баррикад / Константин Новаковский (...Ontico
Доклад будет полезен тем, кто планирует организовывать защиту от DDoS-атак собственными силами. Отдельный акцент будет сделан на использовании open-source продуктов для обнаружения и блокирования внешних сетевых атак. Кроме этого, я поделюсь опытом организации автоматического обнаружения и предотвращения атак изнутри инфраструктуры (взломанные клиентские серверы, недобросовестные клиенты).
Networking technology in modern Virtual Private Clouds (RUS, RootConf++ 2018)Vadim Ponomarev
The network is the lifeblood of any modern private cloud, and it is also one of the hardest parts to understand, configure, and administer in the cloud. The rapid development of cloud technologies has spurred the emergence of special network equipment, new protocols, new technologies, and cloud IT professionals need to understand how it all works, interacts, and is managed. The main purpose of the report is to tell in detail how the network works in modern private clouds, what technologies are used, how they develop, identify problems, and give recommendations for solving them.
Abstract: https://rootconf.ru/moscow-rit/2018/abstracts/3402
Video: https://www.youtube.com/watch?v=jrPdkdS5Vcc
Типовые сервисы региональной сети передачи данныхARCCN
Доклад Вячеслава Васина (ЦПИКС) на семинаре Консорциума университетов по изучению и развитию передовых технологий в сфере компьютерных сетей. 20 октября 2016 года
На этом вебинаре вы научитесь:
- работать в графическом редакторе iRidium Studio;
- создавать драйверы для одностороннего управления оборудованием по ИК, RS232, IP;
- настраивать управление аудио/видео оборудованием, используя преобразователи Global Caché;
- выбирать лицензию.
Подробнее об iRidium 3.0 здесь http://www.iridiummobile.ru/?utm_source=AV%20webinar%20presentation%20in%20SlideShare&utm_medium=AV%20webinar%20presentation%20in%20SlideShare&utm_campaign=AV%20webinar%20presentation%20in%20SlideShare
Ведущий: Терренс Гаро
В докладе рассказывается о том, как создать ханипот (ловушку) и организовать сервис с обновляемыми данными о попавшихся DDoS-ботах с помощью Kibana, Elasticsearch, Logstash и AMQP. Докладчик откроет исходный код системы мониторинга и сбора внешней статистики DDoS-атак, над которой он работал со своей командой последние два года.
Ведущий: Артем Шишкин
Доклад описывает разработку средства отладки при помощи виртуализации: как применить существующие средства виртуализации для отладки, как обеспечить целостность отлаживаемой среды, как сделать отладку интерактивной и как обуздать низкоуровневую специфику аппаратной виртуализации. Докладчик расскажет об интеграции железа с операционной системой и о том, как встроить отладчик прямо в прошивку. Будут рассмотрены несколько жизненных примеров динамического анализа.
Ведущие: Роман Казанцев, Максим Вафин и Андрей Сомсиков
Разработка чит-кодов к различным сетевым играм со временем превратилась в прибыльный бизнес. С помощью внедренных чит-кодов можно анализировать данные памяти и собирать статистику об игроках. На примерах из игры Unreal Tournament 4 докладчики расскажут о методах борьбы с подобным читерством, основанных на запутывании кода.
Александр Тоболь, Кадры решают все, или стриминг видео в ОдноклассникахTanya Denisyuk
Александр расскажет, как им удалось ускорить более чем в 10 раз старт просмотра кино и сериалов с использованием технологий адаптивного стриминга MPEG-DASH и HLS. Вы узнаете, какие технологии попали в поле зрения команды, как инфраструктурные особенности и размер аудитории, а также специфика потребления на разных пользовательских устройствах повлияли на принятие решение о выборе технологии. И, конечно, будет дан подробный отчет о результатах внедрения и полученном эффекте.
Борьба с DDoS в хостинге - по обе стороны баррикад / Константин Новаковский (...Ontico
Доклад будет полезен тем, кто планирует организовывать защиту от DDoS-атак собственными силами. Отдельный акцент будет сделан на использовании open-source продуктов для обнаружения и блокирования внешних сетевых атак. Кроме этого, я поделюсь опытом организации автоматического обнаружения и предотвращения атак изнутри инфраструктуры (взломанные клиентские серверы, недобросовестные клиенты).
Networking technology in modern Virtual Private Clouds (RUS, RootConf++ 2018)Vadim Ponomarev
The network is the lifeblood of any modern private cloud, and it is also one of the hardest parts to understand, configure, and administer in the cloud. The rapid development of cloud technologies has spurred the emergence of special network equipment, new protocols, new technologies, and cloud IT professionals need to understand how it all works, interacts, and is managed. The main purpose of the report is to tell in detail how the network works in modern private clouds, what technologies are used, how they develop, identify problems, and give recommendations for solving them.
Abstract: https://rootconf.ru/moscow-rit/2018/abstracts/3402
Video: https://www.youtube.com/watch?v=jrPdkdS5Vcc
Типовые сервисы региональной сети передачи данныхARCCN
Доклад Вячеслава Васина (ЦПИКС) на семинаре Консорциума университетов по изучению и развитию передовых технологий в сфере компьютерных сетей. 20 октября 2016 года
На этом вебинаре вы научитесь:
- работать в графическом редакторе iRidium Studio;
- создавать драйверы для одностороннего управления оборудованием по ИК, RS232, IP;
- настраивать управление аудио/видео оборудованием, используя преобразователи Global Caché;
- выбирать лицензию.
Подробнее об iRidium 3.0 здесь http://www.iridiummobile.ru/?utm_source=AV%20webinar%20presentation%20in%20SlideShare&utm_medium=AV%20webinar%20presentation%20in%20SlideShare&utm_campaign=AV%20webinar%20presentation%20in%20SlideShare
Ведущий: Терренс Гаро
В докладе рассказывается о том, как создать ханипот (ловушку) и организовать сервис с обновляемыми данными о попавшихся DDoS-ботах с помощью Kibana, Elasticsearch, Logstash и AMQP. Докладчик откроет исходный код системы мониторинга и сбора внешней статистики DDoS-атак, над которой он работал со своей командой последние два года.
Ведущий: Артем Шишкин
Доклад описывает разработку средства отладки при помощи виртуализации: как применить существующие средства виртуализации для отладки, как обеспечить целостность отлаживаемой среды, как сделать отладку интерактивной и как обуздать низкоуровневую специфику аппаратной виртуализации. Докладчик расскажет об интеграции железа с операционной системой и о том, как встроить отладчик прямо в прошивку. Будут рассмотрены несколько жизненных примеров динамического анализа.
Ведущие: Роман Казанцев, Максим Вафин и Андрей Сомсиков
Разработка чит-кодов к различным сетевым играм со временем превратилась в прибыльный бизнес. С помощью внедренных чит-кодов можно анализировать данные памяти и собирать статистику об игроках. На примерах из игры Unreal Tournament 4 докладчики расскажут о методах борьбы с подобным читерством, основанных на запутывании кода.
Ведущий: Пол Викси
Система доменных имен (DNS) предлагает отличный вид на локальную и глобальную сети, что дает возможность исследовать действия киберпреступников и методы атак. В докладе будет показано, как обезопасить DNS и использовать ее для защиты других подключенных объектов. Докладчик подробно расскажет о подмене кэша DNS, расширениях защиты для протокола DNS (DNSSEC), DDoS-атаках, ограничении скорости передачи, межсетевом экране DNS и пассивном DNS-мониторинге.
Если нашлась одна ошибка — есть и другие. Один способ выявить «наследуемые» у...Positive Hack Days
Ведущий: Асука Накадзима (Asuka Nakajima)
Практика повторного использования исходного кода позволяет сократить расходы на разработку программного обеспечения. Тем не менее, если в оригинальном исходном коде кроется уязвимость, она будет перенесена и в новое приложение. Докладчик расскажет о необычном способе обнаружения «наследуемых» уязвимостей в бинарных файлах без необходимости обращаться к исходному коду или символьным файлам.
Waf.js: как защищать веб-приложения с использованием JavaScriptPositive Hack Days
Ведущие: Денис Колегов и Арсений Реутов
Авторы доклада продемонстрируют, как внедрение клиентских сценариев JavaScript может быть использовано для обнаружения и предотвращения различных атак, поиска уязвимых клиентских компонент, определения утечек данных об инфраструктуре веб-приложений, выявления веб-ботов и инструментальных средств нападения. Поделятся собственными методами обнаружения инъекций при помощи синтаксических анализаторов без сигнатур и фильтрующих регулярных выражений, а также рассмотрят реализацию концепции JavaScript-ловушек на стороне клиента для атак SSRF, IDOR, Command Injection и CSRF.
Ведущий: Владимир Иванов и Сергей Гордейчик
Эксперт ИТ и исследователь кибербезопасности поделятся своим взглядом на проблему современных целевых атак, спонсируемых государствами и криминальными группировками. Докладчики расскажут об эффективности существующих подходов к защите, о способах обхода песочницы, и о том, пора ли IDS и AV отправляться на свалку.
Ведущий: Дан Корецкий
Миллионы устройств на Android содержат уязвимости, которые дают права суперпользователя. Докладчик расскажет о технических причинах проблем безопасности (коллизии хеш-функций, злоупотребление межпроцессорным взаимодействием, ошибки работы с сертификатами приложений). Продемонстрирует атаку на «живое» устройство и предоставит рекомендации для снижения риска. Слушатели узнают, почему нельзя полностью устранить уязвимости. Докладчик также поведает историю о том, как были обнаружены атаки в Google Play.
Ведущий: Сергей Кавун
Докладчик расскажет о способе выявления инсайдеров на любом предприятии. Разработанная методика представляет собой математический аппарат, который программируется и закладывается в различные системы безопасности.
Восток — дело тонкое, или Уязвимости медицинского и индустриального ПОPositive Hack Days
Ведущие: Эмиль Олейников и Юрий Гуркин
Как медицинские, так и SCADA-системы обладают возможностью удаленного управления, настройки и наблюдения. Зачастую их подключают к интернету. В докладе рассказывается об уязвимостях в специализированном ПО, используемом в медицине и промышленности, которые были исследованы с помощью отечественного пентест-фреймворка EAST (exploits and security tools). Аналогично Metasploit, он позволяет автоматизировать и облегчить поиск уязвимостей и иллюстрацию уровня риска.
Janitor to CISO in 360 Seconds: Exploiting Mechanical Privilege EscalationPositive Hack Days
Author: Babak Javadi
For over 100 years, the modern pin tumbler lock has been used as the gold standard of physical security. Unique designs have come and gone over the years, but only the pin tumbler lock has remained constant. Almost just as constant is a neat hack-turned-standard feature that is commonly referred to as Master Keying. Master Keying allows the use of "unique" permissions-based mechanical keys in large systems and remains in use in large business and government installations in every country in the world. Unfortunately, the oldest authentication system in the world still in wide use today is vulnerable to what many consider to be the original privilege escalation attack, predating digital computer systems completely. Known by a handful of locksmiths for decades and first publicly disclosed in 2003, this un-patched vulnerability remains one of the most dangerous and under-protected physical security weaknesses still present today. This talk will discuss a highly optimized attack method against common master keyed systems as it applies to modern locks, and will cover a couple of options for mitigating and defending against the attack.
Ведущие: Дмитрий Частухин и Дмитрий Юдин
Бла-бла-бла SAP. Бла-бла-бла крупные компании. Бла-бла-бла взлом на миллионы долларов. Вот так обычно начинается любой доклад о SAP. Но в этот раз все будет по-другому. Давненько не было рассказов о жестокой эксплуатации и необычных уязвимостях. Пришло время пуститься во все тяжкие! Докладчики расскажут (и покажут), как получить полный контроль над системой, используя ряд незначительных уязвимостей в службах SAP.
Magic Box, или Как пришлось сломать банкоматы, чтобы их спастиPositive Hack Days
Ведущие: Ольга Кочетова и Алексей Осипов
Доклад посвящен наиболее популярным атакам на банкоматы, а также методам их предотвращения. Докладчик продолжит тему своих прошлых презентаций, однако с более глубоким проникновением в технические детали. Основное внимание будет уделено проблемам безопасности в архитектуре банкоматов и недостаткам защищенности взаимодействия банкоматов с процессинговым центром.
NFC: Naked Fried Chicken / Пентест NFC — вот что я люблюPositive Hack Days
Ведущий: Маттео Беккаро (Matteo Beccaro)
Доклад посвящен общим вопросам транспортной безопасности, мошенничества и технологических сбоев и будет интересен как профессиональным пентестерам, так и любителям. Докладчик рассмотрит несколько серьезных уязвимостей в реальных транспортных системах, в которых используется технология NFC, и продемонстрирует открытое приложение для тестирования таких систем со смартфона.
Ведущий: Альфонсо де Грегорио
Докладчик расскажет о рынке эксплойтов, его участниках, о деятельности брокера уязвимостей нулевого дня, а также осветит связанные с этим аспекты деловой этики.
Ведущий: Ольга Зиненко
Уральский центр систем безопасности проводит независимое тестирование мобильных антивирусов, разработанных для платформы Android (в том числе Dr.Web, Kaspersky, Norton, ESET). Доклад посвящен результатам исследования. Показатели, которые оцениваются в первую очередь: выполнение заявленных функций, уровень защиты, возможности обхода, наличие уязвимостей, полезность и значимость дополнительных функций.
Ведущий: Александр Попов
В настоящем докладе будет рассмотрен успешный опыт использования отладочного механизма KASan (Kernel address sanitizer) для автономного гипервизора. Докладчик расскажет, как удалось усилить KASan по сравнению с его реализацией в ядре Linux.
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types LaterPositive Hack Days
Ведущий: Алексей Черепанов
Скорость взлома хешей растет. Растет и количество алгоритмов хеширования. Объем задач для поддержки универсального инструмента для взлома тоже увеличивается. В ответ на это был разработан john-devkit — улучшенный генератор кода к известному приложению для взлома паролей John the Ripper. john-devkit содержит более 100 типов хешей. Ведущий рассмотрит ключевые аспекты его использования: разделение алгоритмов, оптимизация и вывод данных для различных устройств, простое промежуточное представление алгоритмов хеширования, трудности оптимизации для человека и машины, bitslicing, сравнение скорости обработки.
Ведущий: Лев Денисов
Система общественного транспорта Москвы — одна из крупнейших в мире. Выпущено больше 5 млн карт «Тройка», с помощью которых пассажиры оплачивают проезд в метро и наземном транспорте. Развиваются сервисы, позволяющие пополнить баланс карты с помощью мобильного телефона с NFC. Ведущий расскажет об уязвимостях, эксплуатируя которые можно получить доступ к секретным данным карты и с минимальными затратами клонировать ее, чтобы бесплатно пользоваться общественным транспортом.
Александр Устюжанин, представитель компании ETegro, представил стойку Therascale и решение, совместно разработанное Etegro и Mirantis. Тестовая стойка ETegro Therascale высотой 44U, вмещает до 40 вычислительных узлов, до трех коммутаторов и модуль управления стойкой для централизованного контроля состояния оборудования в стойке. Вычислительный узел ETegro Therascale – это двухпроцессорный сервер на процессорах Intel Xeon E5- 2600 v2 полной ширины c поддержкой до 16 модулей памяти DDR3 ECC Reg. и до 6 дисков размером 3,5”. Порты сетевые (2 x 1GbE), USB и управления выведены на переднюю панель, на которой также находится световая индикация состояния узла и сетевых портов. В случае отказа, вычислительный модуль легко заменяется, работы проводятся из «холодного коридора».
Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...DEPO Computers
Андрей Состин, руководитель направления по серверной продукции компании DEPO Computers, представил обзор линейки серверов DEPO Storm и более подробно рассказал о специальных моделях серверов компании DEPO Computers, разработанных для применения в первой российской конвергентной вычислительной платформе СКАЛА-Р.
Современные серверы DEPO Storm и системы хранения DEPO StorageDEPO Computers
Сергей Сенько, руководитель направления по серверной продукции компании DEPO Computers, обозначил тенденции в изменениях требований к инфраструктуре и серверному оборудованию ЦОД и презентовал новые модели серверов DEPO Storm с примерами решений для внедрения виртуализации и частного облака от десятков до тысяч пользователей.
Анонс новых моделей серверов ДЕПО Шторм российского производстваDEPO Computers
Андрей Состин, руководитель направления серверной продукции DEPO Computers, рассказал о возможностях и преимуществах отечественных серверных систем DEPO и анонсировал новые модели двухпроцессорных серверов DEPO Storm российского производства на базе ОС Windows Server 2016.
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...HLL
Артём Гавриченков (ximaera), ведущий разработчик сети фильтрации трафика Qrator, описывает типичные ошибки программирования при написании серверных приложений на основе TCP-сокетов в рамках конференции «Российские интернет-технологии» (2-3 апреля 2012, Москва).
Разбирается (вероятно, неисчерпывающий) ряд заблуждений и узких мест, приводящих к проблемам с производительностью и уязвимостям безопасности TCP-приложений; приводится ряд примеров, когда ошибки, неочевидные на этапе программирования, при эксплуатации приводили к финансовым и репутационным потерям у авторов и пользователей приложения. Даются рекомендации по отладке и оптимизации приложений, основанных на TCP, а также операционных систем, в которых эксплуатируются такие продукты.
Среди прочего, разбираются такие аспекты работы обработчика TCP-запросов, как:
• предотвращение атак, аналогичных slow POST в Nginx и Lighttpd;
• предотвращение ошибок, аналогичных проблеме со скачиванием файлов в браузере Internet Explorer;
• возможные изменения в дизайне самописных TCP-based протоколов с целью их ускорения;
• использование опции TCP (таких, как TCP_NODELAY) для ускорения работы специфических приложений.
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days
1. Основные понятия и определения: продукт, пакет, связи между ними.
2. Как узнать, какие изменения произошли в продукте?
3. Проблемы changelog и release note.
4. Решение: инструмент ChangelogBuilder для автоматической подготовки Release Notes
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
1. Обзор Windows Docker (кратко)
2. Как мы построили систему билда приложений в Docker (Visual Studio\Mongo\Posgresql\etc)
3. Примеры Dockerfile (выложенные на github)
4. Отличия процессов DockerWindows от DockerLinux (Долгий билд, баги, remote-регистр.)
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
1. Проблемы в построении CI процессов в компании
2. Структура типовой сборки
3. Пример реализации типовой сборки
4. Плюсы и минусы от использования типовой сборки
1. Что такое BI. Зачем он нужен.
2. Что такое Qlik View / Sense
3. Способ интеграции. Как это работает.
4. Метрики, KPI, планирование ресурсов команд, ретроспектива релиза продукта, тренды.
5. Подключение внешних источников данных (Excel, БД СКУД, переговорные комнаты).
Approof — статический анализатор кода для проверки веб-приложений на наличие уязвимых компонентов. В своей работе анализатор основывается на правилах, хранящих сигнатуры искомых компонентов. В докладе рассматривается базовая структура правила для Approof и процесс автоматизации его создания.
Задумывались ли вы когда-нибудь о том, как устроены современные механизмы защиты приложений? Какая теория стоит за реализацией WAF и SAST? Каковы пределы их возможностей? Насколько их можно подвинуть за счет более широкого взгляда на проблематику безопасности приложений?
На мастер-классе будут рассмотрены основные методы и алгоритмы двух основополагающих технологий защиты приложений — межсетевого экранирования уровня приложения и статического анализа кода. На примерах конкретных инструментов с открытым исходным кодом, разработанных специально для этого мастер-класса, будут рассмотрены проблемы, возникающие на пути у разработчиков средств защиты приложений, и возможные пути их решения, а также даны ответы на все упомянутые вопросы.
От экспериментального программирования к промышленному: путь длиной в 10 летPositive Hack Days
Разработка наукоемкого программного обеспечения отличается тем, что нет ни четкой постановки задачи, ни понимания, что получится в результате. Однако даже этом надо программировать то, что надо, и как надо. Докладчик расскажет о том, как ее команда успешно разработала и вывела в промышленную эксплуатацию несколько наукоемких продуктов, пройдя непростой путь от эксперимента, результатом которого был прототип, до промышленных версий, которые успешно продаются как на российском, так и на зарубежном рынках. Этот путь был насыщен сложностями и качественными управленческими решениями, которыми поделится докладчик
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Hack Days
Немногие разработчики закладывают безопасность в архитектуру приложения на этапе проектирования. Часто для этого нет ни денег, ни времени. Еще меньше — понимания моделей нарушителя и моделей угроз. Защита приложения выходит на передний план, когда уязвимости начинают стоить денег. К этому времени приложение уже работает и внесение существенных изменений в код становится нелегкой задачей.
К счастью, разработчики тоже люди, и в коде разных приложений можно встретить однотипные недостатки. В докладе речь пойдет об опасных ошибках, которые чаще всего допускают разработчики Android-приложений. Затрагиваются особенности ОС Android, приводятся примеры реальных приложений и уязвимостей в них, описываются способы устранения.
Разработка любого софта так или иначе базируется на требованиях. Полный перечень составляют бизнес-цели приложения, различные ограничения и ожидания по качеству (их еще называют NFR). Требования к безопасности ПО относятся к последнему пункту. В ходе доклада будут рассматриваться появление этих требований, управление ими и выбор наиболее важных.
Отдельно будут освещены принципы построения архитектуры приложения, при наличии таких требований и без, и продемонстрировано, как современные (и хорошо известные) подходы к проектированию приложения помогают лучше строить архитектуру приложения для минимизации ландшафта угроз.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
3. Кто мы такие и чем занимаемся
● Контроллеры для
– аквариумов, террариумов, гидропоники
– контроля производства вина, пива, сыра
– вообще любых замкнутных экосфер
4. Чем управляет контроллер?
● Датчики
– уровня воды
– протечки
– температуры
– качества воды: pH,
растворенный кислород,
проводимость, ORP, соленость...
– потока
– влажности
– освещенности
– камеры
– уровня аккумуляторов
● Актуаторы
– помпы
– дозаторы
– источники света, диммеры
– охлаждение / нагрев
– автоматические кормушки
– скиммеры
– реакторы
– реле (произвольная нагрузка)
– управление электропитанием
5. Проблема №1: vendor lock-in
Контроллер Neptune
Устройство GHL
Устройство Neptune
6. Наше решение
● Производим собственный контроллер
● Не производим собственные датчики и
актуаторы
● Reverse engineering протоколов
взаимодействия существующих устройств
сторонних производителей
● Реализация протокола в нашем контроллере
8. Объект исследования
● Коммуникационные протоколы
● Embedded firmware
● Контейнерные форматы файлов
● Исполняемые файлы (executables, objects,
байт-код, ...)
● Файлы контента (базы данных, таблицы,
тексты, графика, текстуры, ...)
9. Два основных подхода
● Исследовать код,
работающий с
данными
● Обычно не «clean
room»
● Дизассемблеры,
декомпиляторы,
отладчики, ...
● Исследовать сами
данные
● Гарантированный
«clean room»
● Иногда единственно
возможный вариант
● ... ?
10. Что на входе?
● просто файлы
● файловые системы / диски / массивы
целиком
● содержимое ROM / Flash
● перехваченный трафик
11. Что на выходе?
Описание формата
● никто на самом деле не знает, что это такое
● формального стандарта нет — ни де юре, ни
де факто
● пытаются использовать
– C-подобные struct
– (E)BNF
– таблицы / диаграммы
– ASCII art
12. Описание формата в RFC 2083
RFC 2083 PNG: Portable Network Graphics March 1997
3. File Structure
A PNG file consists of a PNG signature followed by a series of
chunks. This chapter defines the signature and the basic properties
of chunks. Individual chunk types are discussed in the next chapter.
3.1. PNG file signature
The first eight bytes of a PNG file always contain the following
(decimal) values:
137 80 78 71 13 10 26 10
This signature indicates that the remainder of the file contains a
single PNG image, consisting of a series of chunks beginning with
an IHDR chunk and ending with an IEND chunk.
See Rationale: PNG file signature (Section 12.11).
3.2. Chunk layout
Each chunk consists of four parts:
Length
A 4-byte unsigned integer giving the number of bytes in the
chunk's data field. The length counts only the data field, not
itself, the chunk type code, or the CRC. Zero is a valid
length. Although encoders and decoders should treat the length
as unsigned, its value must not exceed (2^31)-1 bytes.
Chunk Type
A 4-byte chunk type code. For convenience in description and
in examining PNG files, type codes are restricted to consist of
uppercase and lowercase ASCII letters (A-Z and a-z, or 65-90
and 97-122 decimal). However, encoders and decoders must treat
the codes as fixed binary values, not character strings. For
example, it would not be correct to represent the type code
IDAT by the EBCDIC equivalents of those letters. Additional
13. RFC 768 J. Postel
ISI
28 August 1980
User Datagram Protocol
----------------------
Introduction
------------
This User Datagram Protocol (UDP) is defined to make available a
datagram mode of packet-switched computer communication in the
environment of an interconnected set of computer networks. This
protocol assumes that the Internet Protocol (IP) [1] is used as the
underlying protocol.
This protocol provides a procedure for application programs to send
messages to other programs with a minimum of protocol mechanism. The
protocol is transaction oriented, and delivery and duplicate protection
are not guaranteed. Applications requiring ordered reliable delivery of
streams of data should use the Transmission Control Protocol (TCP) [2].
Format
------
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| Source | Destination |
| Port | Port |
+--------+--------+--------+--------+
| | |
| Length | Checksum |
+--------+--------+--------+--------+
|
| data octets ...
+---------------- ...
User Datagram Header Format
Описание формата в RFC 768
14. Описание формата ELF
ELF Header
Some object f le control structures can grow, because the ELF header contains their actual sizes. If the
object f le format changes, a program may encounter control structures that are larger or smaller than
expected. Programs might therefore ignore ‘‘extra’’ information. The treatment of ‘‘missing’’ informa
tion depends on context and will be specif ed when and if extensions are def ned.
Figure 13: ELF Header
#define EI_NIDENT 16
typedef struct {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;
e_ident The initial bytes mark the f le as an object f le and provide machineindependent data
with which to decode and interpret the f le’s contents. Complete descriptions appear
below, in ‘‘ELF Identif cation.’’
e_type This member identif es the object f le type.
Name Value Meaning
ET_NONE 0 No f le type
16. Что на выходе?
Парсер / декодер
● Программный код,
который разбирает
формат
● файл → память
https://github.com/omf2097/libShadowDive/
src/bkanim.c:58
17. Что на выходе?
Генератор / энкодер
● Программный код,
который собирает
формат
● память → файл
https://github.com/omf2097/libShadowDive/
src/bkanim.c:99
18. Традиционный подход
к clean room RE
1.Долго медитировать над дампом
2.Высказать гипотезу
3.Написать код парсера, выводящий расшифрованное
на stdout
● обнаружить, что любимый язык имеет неидеальные средства
чтения из потока и написать собственную библиотеку
4.Скомпилировать, запустить
5.Проверить, подтвердилась ли гипотеза
6.GOTO 1 или 2, если не подтвердилась
20. Пример: Doom WAD
● Один из самых простых
форматов-контейнеров
● Применялся в играх на id Tech 1
engine
– Doom, Doom 2, Heretic, Hexen,
Strife, ...
● Активная разработка
оригинальными
разработчиками в 1992-1995
● Масса заимствованного кода из
более ранних работ id software
– Commander Keen, Wolfenstein 3D
21. Схема Doom WAD
Смещение Содержимое
0 magic
Поле
всегда «IWAD» или «PWAD»
4 index_qty число элементов индекса
8 index_ofs смещение начала индекса
char[4]
Тип
int32
int32
index_ofs
+ 0 file_ofs смещение начала файлаint32
+ 4 file_len длина файлаint32
+ 8 file_name имя файла, 0-paddedchar[8]
...
повторяется
index_qty раз
...
file_ofs содержимое файлаchar[file_len]
Все числа в little-endian — основная платформа — DOS/Intel.
28. Hex editors с шаблонами
Что хорошего?
● Показывают дерево объектов и их значения
– В некоторых есть визуальный редактор дерева
● Показывают, какие места в бинарном потоке
занимают те или иные объекты
29. Hex editors с шаблонами
Что плохого?
● Императивность
– 010 Editor: в основе — 100% императивный язык
– Synalyze It, Hexinator, Okteta: декларативный язык, но как только его не хватает,
расширяется императивными скриптами на Python / JavaScript
● Упор на отображение: в файле разметки задаются цвета, комментарии и т.п.
● Плохо автоматизируется
– например, сложно прогнать один и тот же шаблон на многих однотипных файлах и
построить статистику, что и как часто встречается в поле
● Зачитывают файл и размечают целиком в памяти
– попытка разобрать файловую систему 5 GB DVD съедает 16 GB RAM и уходит в
swap
● Закрытое, проприетарное ПО* → невозможно влиять на спецификацию
языка и участвовать в разработке
* кроме Okteta
31. Wireshark dissectors: факты
● Популярнейший пакет для захвата и анализа
сетевого трафика
● ~646 диссекторов в комплекте
● Диссекторы реализуются:
– императивно на C или Lua
– декларативно для протоколов, базирующихся на
ASN.1 или X11
32. Wireshark dissectors
Что плохого?
● Императивность
● Значительная сложность реализации
– стало чуть лучше с поддержкой Lua, но все
равно hello world ~300-400 строк
● Решают только одну узкую задачу:
раскладывают пакет в памяти в специально
подготовленное дерево; сложно
пользоваться результатом программно
33. BMS: факты
● AKA MexScript, AKA Binary Mex Script, AKA MultiEx Script
● семейство специальных скриптовых языков,
предназначенный для извлечения данных из бинарных
файлов
● популярен в сообществе, занимающихся reverse
engineering игр
● реализации в виде
– MultiEx Commander — http://multiex.xentax.com/
– QuickBMS — http://aluigi.altervista.org/quickbms.htm
– ...
35. BMS: что хорошего?
● свободный / бесплатный
● приличная база накопленных описаний форматов
(разной степени проработки)
● большое множество встроенных алгоритмов
– декомпрессия (~150 алгоритмов)
– расшифровка (~80 алгоритмов)
– хэширование и контрольные суммы
– генерация псевдослучайных чисел (~20 методов)
● как ни странно, часто умеет и читать, и писать файлы-
контейнеры
36. BMS: что плохого?
● императивный → описывает алгоритм
парсинга, а не саму структуру данных
– туча дополнительных хаков (см. ImpType и IDString),
которые делают формат чуть более декларативным
● решает ровно одну задачу, описанную в скрипте
(как правило — извлечение файла из файла-
контейнера)
● интерпретатор
● проблемы с поддержкой 64 бит
37. BinPAC → BinPAC++ → HILTI
● система декларативного описания родом из
Bro Network Security Monitor
● компилируется в C++
● собственный C-подобный язык описания
● расширяется вставками C++
38. Более академические проекты
● DataScript: http://datascript.sourceforge.net/
– последний коммит в 2003, C only
● Tupni
– публикация MS Research в 2008
● PADS: http://padsproj.org/
– публикация AT&T Research в 2005, C only
● Discoverer
– публикация MS Research / Berkeley в 2007
39. DFDL (Data Format Description
Language)
● длинная история
– начат в Open Grid Forum, 2003
– спецификация 1.0 опубликована в 2011
● раздельное описание схемы данных и схемы сериализации
● решает куда более общие задачи: парсинг текстовых
данных, парсинг в контексте и т.д.
● инструментарий:
– визуализатор/редактор от IBM на основе Eclipse
– Daffodil — генератор парсеров (на самом деле интерпретатор)
для Java/Scala
41. Honorable mentions
● Preon — https://github.com/preon/preon
– декларативное описание бинарных структур в виде аннотаций к Java-классам
● Hachoir: https://bitbucket.org/haypo/hachoir
– императивное описание, только Python
● DADL: http://ops4j.github.io/dadl/0.1.0/
– попытка переосмыслить/упростить DFDL, Java-only
● jBinary: https://github.com/jDataView/jBinary
– декларативный JSON-формат со вставками JS-кода, JavaScript-only
● Packet: https://github.com/bigeasy/packet
– декларативный язык, интерпретатор, node.js-only, весьма ограниченные возможности
● NetZob: https://www.netzob.org/
– статистический полуавтоматический анализатор протоколов с моделью состояния
– совершенно альтернативный подход и решаемая задача (фуззинг)
● + еще пара десятков проектов
43. Kaitai Struct: основные тезисы
● Декларативный язык описания структур бинарных
данных
● Описание (в формате .ksy) компилируется в
исходный код на целевом языке
– C++, Java, JavaScript, Python, Ruby
● Визуализатор для быстрого прототипирования
форматов и проверок гипотез при reverse engineering
● .ksy = YAML → легко писать альтернативные
компиляторы/инструменты
44. Quick start: Doom WAD
в формате Kaitai Struct
Смещение Содержимое
0 magic
Поле
всегда «IWAD» или «PWAD»
4 index_qty число элементов индекса
8 index_ofs смещение начала индекса
char[4]
Тип
int32
int32
index_ofs
+ 0 file_ofs смещение начала файлаint32
+ 4 file_len длина файлаint32
+ 8 file_name имя файла, 0-paddedchar[8]
...
повторяется
index_qty раз
...
file_ofs содержимое файлаchar[file_len]
45. Kaitai Struct: метаинфорация
● Класс верхнего уровня будет
называться DoomWad (или
doom_wad, если в языке
принят lower_underscore_case)
● Мы разбираем формат,
пришедший с платформы Intel
→ по умолчанию читаем числа
в little-endian, чтобы не
повторять это везде
● application — комментарий,
указывающий, какое ПО
использует этот формат
46. Kaitai Struct: последовательность
● последовательность
описаний атрибутов,
идущих подряд
● все атрибуты будут
прочитаны при создании
объекта* в указанной
последовательности
● начало каждого
следующего атрибута =
конец предыдущего**
* если не включен --debug
** если нет указаний alignment
48. Kaitai Struct: описание атрибута
● id — идентификатор, будет записан в коде по
правилам целевого языка, т.е. foo_bar станет
– fooBar в Java
– FooBar в C#
– foo_bar в Ruby
● type — указание на тип; может
– быть примитивным (=встроенным)
– быть пользовательским
– отсутствовать (=просто массив байт)
50. Kaitai Struct: целочисленные типы
u4le
● u = unsigned
● s = signed
4 байта
(можно 1, 2, 4, 8)
● le = little-endian
● be = big-endian
51. Kaitai Struct: строки
● наперед известной длины (в байтах или символах*)
– очень часто — прямо перед строкой идет ее длина в
байтах
● до терминатора
– очень часто — до «0» = C strings
– редко — до «$» = DOS strings
– совсем редко — все остальное
● до конца потока (файла, текущей подструктуры, ...)
* за полтора года на практике ни разу не встретилось — поэтому пока так и не
реализовали
52. Kaitai Struct: строки
● наперед известной длины
– type: str
– size: 42
● до терминатора
– type: strz
– terminator: 0xa
● до конца потока
– type: str
– size-eos: true
53. Kaitai Struct: instances
● те же описания атрибутов,
но не идущие подряд в
общем потоке
● id вынесен в ключ map
● полезно, для того, чтобы
– указать откуда читать
– не зачитывать элемент
безусловно в общем потоке, а
прочитать при необходимости
– объявить не существующий
явно (вычислимый) атрибут
54. Kaitai Struct: повторы и условия у
атрибутов
● repeat: expr
repeat-expr: выражение
– сформировать массив из элементов заданного типа
– зачитать столько элементов, сколько указано в «выражении»
● repeat: eos
– сформировать массив из элементов заданного типа
– зачитать столько элементов, сколько возможно, пока не встретится конец
потока
– может быть зачитано от 0 до ∞ атрибутов
● if: выражение
– атрибут зачитывается только если «выражение» истинно
– всего может быть зачитан либо 0, либо 1 атрибут
55. Kaitai Struct: выражения
● Универсальный «язык», автоматически
транслируется в целевой язык с соблюдением
типов
● Синтаксис похож на среднестатический C-
подобный язык с современными объектными
расширениями
● Inspired by Ruby, Scala, JavaScript, Python, C#
● Чем-то похоже на haXe, но гораздо проще
56. Kaitai Struct: где могут
использоваться выражения
● size — длина атрибута в байтах
● repeat-expr — число повторений атрибута в
массиве
● if — условие чтения атрибута
● pos — смещение атрибута от начала потока
● io — поток, из которого читать
● value — вычислить значение атрибута по
выражению
57. Kaitai Struct: выражения:
примеры (1)
● repeat-expr: 5
– повторить атрибут 5 раз
– во все целевые языки транслируется «5»
● repeat-expr: foo_bar
– повторить атрибут столько раз, сколько указано в целочисленном
атрибуте foo_bar внутри текущего типа (класса)
– C++/STL: foo_bar()
– Java: fooBar()
– JavaScript: this.fooBar
– Python: self.foo_bar
– Ruby: foo_bar
58. Kaitai Struct: выражения:
примеры (2)
● if: foo.bar == "T4"
– взять атрибут foo (в текущем типе), обратиться к
атрибуту bar в нем, сравнить полученное значение со
строкой «T4»; прочитать текущий атрибут, если они
равны
– C++/STL: foo()->bar() == "T4"
– Java: foo().bar().equals("T4")
– JavaScript: this.foo.bar == "T4"
– Python: self.foo.bar == "T4"
– Ruby: foo.bar == "T4"
59. Kaitai Struct: выражения:
примеры (3)
● size: '(foo.last == -1) ? 3 : 1'
– атрибут foo (в текущем типе) — целочисленный массив;
сравнить последний его элемент с -1; если равно, то
зачитать атрибут размером 3 байта, если не равно, то 1
байт.
– C++/STL: (foo().back() == -1) ? 3 : 1
– Java: (foo().get(foo.size() - 1) == -1) ? 3 : 1
– JavaScript: (this.foo[this.foo.length - 1] == -1) ? 3 : 1
– Python: 3 if foo[-1] == -1 else 1
– Ruby: (foo.last == -1) ? 3 : 1
60. Kaitai Struct:
пользовательские типы
● Точно такое же объявление, как
в корне дерева: те же seq,
instances, types...
● Реализуется именованными
подклассами (как правило, это
будет что-то вроде
DoomWad::IndexEntry)
● Указание io: _root._io
используется для того, чтобы
задать положение contents от
начала WAD-файла (т.е.
используя поток корневого
элемента)
65. Итого: простые возможности
● Парсить структуры:
– фиксированного формата (как C struct)
– с длинами полей, зависящими от других атрибутов
– с условными полями
– с повторениями полей
● Где угодно:
– от начала потока
– с произвольно заданным смещением
– в своем потоке
– в чужом потоке
67. Сгенерированный код
● Типы KS → классы / структуры
– вложенные типы → вложенные классы
● Атрибуты KS
– из seq →
● выражения парсинга в конструкторе класса
● тривиальные геттеры
● объявления членов класса
– из instances →
● выражения парсинга в отдельных методах/функциях, кэширующие результаты парсинга
● они же геттеры
● объявления членов класса
● Умеренное количество syntactic sugar
– SomeClass.fromFile(...)
– properties, если нужно
70. Instances без парсинга:
вычислимые instances
● Полезно, если нужно результат одного и того
же (особенно сложного) значения
использовать много раз в нескольких местах
71. Enums
● Поставить в соответствие
целочисленным константам
некие строки
● Реализуется, насколько
возможно в целевом языке:
– C++: enum
– Java: Enum + Map
– JavaScript: frozen object справочник
констант
– Python: Enum
– Ruby: symbols + Hash
● Можно обращаться из
выражений самого KS
72. Process
●
Что делать, если файл /
секция зашифрована /
обфусцирована / сжата?
●
Для преобразований над
произвольным байтовым
буфером используется
операция process
● Может быть использована
– без типа
– с пользовательским типом
●
Требуется явное указание
размера
73. Process
● Сейчас реализованы:
– xor
– ror, rol
– zlib
– lzma
● Не густо :(
● Надо брать пример с BMS
● Многие преобразования можно сделать с помощью языка
выражений
– например, преобразовать байты 31 32 42 43, составляющие строку
«12BC» в число 0x12bc.
74. Работа на этапе неполной
информации о структуре
● Непонятно (пока) назначение структуры, но
известна длина — пропустить, не назначая
тип
75. Работа на этапе неполной
информации о структуре
● По мере накопления информации о
структуре можно начать ее
детализировать, как отдельный тип
●
Внутри baz будет создан отдельный
IO поток: не обязательно суммарный
размер полей в seq должен
соответствовать объявленному size
– если полей будет меньше — это
нормально; остаток будет пропущен
– если полей будет больше, чем на 0x83
байта, это приведет к ошибке end-of-
stream (EOF), а не к съехавшей
структуре
●
Вложенность сразу будет правильно
видна в визуализаторе
76. Типичный разбор опкодов
виртуальной машины
● Массив ops верхнего уровня
зачитывает все побайтово
● Справочник опкодов и их
мнемоник — в enum
● Тип op считывает опкод и
дополнительные аргументы
через типы op_*
● Позволяет делать гипотезы
дизассемблирования при
небольшом количестве
известных опкодов
77. Спасибо за внимание!
Web: http://kaitai.io/
Twitter: @kaitai_io
GitHub: http://github.com/kaitai_io/
78. Планы на обозримое будущее
● Сделать поддержку атрибутов на уровне битов
● Доделать поддержку популярных языков
– C++ с различными библиотеками (STL, Qt, ...?)
– C
– C#
– Swift
– PHP
● Доделать на сайте онлайн-компилятор
(средствами JavaScript)
79. Планы на далекое будущее
● Накопить библиотеку описаний широко
распространенных бинарных форматов
– файловые системы
– архивы
– базы данных
– файлы с изображениями, звуком и видео
– исполнимые файлы