 Вы видите Санта-Барбра, организатор АЕ-ЦТФ-хэккинг-компетиций. Пожалуйста, дайте нам огромный рандоаплазм к Милу Резиме. Мы будем сегодня говорить насчет Embedded аппаратами. Как мы изучаем, будет, наверное, 20 млрд IOTC аппаратов в следующем году. И в 2019 году было изучение, которое сказала, что 16 млн аппаратов в Америке используется уже сегодня дома. Уже сегодня можно использовать инструменты, как Олегса, чтобы сказать Олегса, что нужно теплее сделать, и они будут менять температуру для тебя. Как-то часто работает, смартфон посылает твой запрос к Рутеру или в клауд, чтобы поменять твой аппарат. И еще есть вариант, можно, чтобы смартфон посылал твой запрос в IOT Hub, чтобы потом посылать к аппарату. Как вы можете понимать, эти IOT аппараты, они собирают разные данные, которые могут быть очень личные, например, данные от наших камер или от наших лампочек. Из-за этого такие IOT устройства могут компромизировать с твоей безопасностью и твоей личной жизнью. Так что мы с тебя спросили вопрос, эти устройства, они безопасны или нет? И что мы заметили, это то, что было много примеров, как они совсем опасны. В 2016 году миллионы аппаратов устройства IOT были использованы, чтобы селать атаку. И в 2018 году мы видели, что 154 vulnerability, которые касались устройства, они были атакированы. Так что мы потом себя спросили, почему это сложно секуризировать такие аппараты. Обычно можно найти такой большой чип, на котором есть прошивка. Также есть дополнительный контроллер, на который можно найти в каких-то ваших устройствах, типа часов. Прошивка исполняется на разных архитектурах, типа ARM, MIPS, X86, PowerPC и так далее, или какие-то другие пропаритарные архитектуры. И обычно есть ограниченные ресурсы, и нужен маленький оптимизированный код для этих слов. И нужно иметь какие-то варианты алгоритмов, вообще известных, оптимизированные под такие размеры. И часто, что внешние устройства используют какой-то какой-то кастомный код, типа камеры, сенсоры и прочее. И с точки зрения программного обеспечивания, может быть, это Bosch with Linux, или какой-то бинарный код. И обычно весь код запакован в один бинарник, который выполняется на устройстве. Допустим, вы отправляете устройство с IT-устройства, вы отправляете запрос на web-сервер, и web-сервер возвращает бинарный ответ. Рик Фест был бы получен и распаршен, и будет обработан бинарным хендлером, и вернет это обратно в web-серверу, и каким-то образом этот web-сервер вернет ответ вашему устройству. Почему сложно обезопасить IT-устройству, потому что они все очень разные? Было предложено некоторые варианты, как анализировать и обезопасить эти устройства, например, как статический анализ. Есть это список презентаций, на которых можно посмотреть, и также динамический анализ, потому что все IT-устройства довольно разные, очень сложно, поэтому их обезопасить и обезопасить, потому что они все очень разные. Есть еще подход одного бинарника, когда один бинарник забирается из устройства и анализируется, и очень много ошибочных результатов при анализе. В данном примере сервер получает запрос от устройства, обрабатывает запрос и вызывает другой бинарник. Как вы видите, код содержит строку для сравнения с определенной строкой в запросе, проверяя длину этого ответа, а другой бинарник, который уже обрабатывает запрос, получает различные параметры, которые были получены из web-сервера. Также есть переменное окружение, которое не может быть контролированным пользуем, то есть не получено из запроса. Также тут вызывается функция копирования строк. В первом случае мы видим, что здесь есть большой баг, что длина ограничена 128 байтами, но мы предполагаем, что длина не может быть больше 128 байтами. Это большая проблема, потому что мы получаем это из запроса. Также мы называем это получателем и обработчиком, но текущие инструменты для анализа они неадекватны, потому что очень много багов встаётся не проанализированные, не обнаруженными. Как разные компоненты коммуницируют между собой. Также есть межпроцессорная коммуникация, это ограниченный набор парадигм для коммуницирования между бинарниками, например, это FIFO и разные файлы. Все IPC, все межпроцессорные коммуникации, они обозначены даток ключами, каждый бинарник, который использует общие данные, должен знать, где лежит эти данные, где их можно найти. То есть эти даты ключи, по которым можно найти, они за хардкожины, они добавлены внутрь бинарника. Давайте поговорим о нашей работе, давайте поговорим о модели угроз. Сначала атаки отправляют любые запросы через сеть, напрямую и на это устройство. И для некоторых устройствов не только через облако, а также через локальное можно до них достучаться. Коронт, коронта, это такое приспособление, это инструмент для анализов, для лидерских анализ на этих бинарников. Находит Boiler Biders, такие ограниченные бинарники, которые обрабатывают пользовательский вход и следит за тем, как эти данные распространяются с другими бинарниками в прошивке. И это строит некоторую вещь, как это название BDG, то есть строит граф в зависимости между этими двумя бинарниками, между вебс и хэнуром. И используя это мы пытаемся обнаружить баги в обработчике. Мы берем прошивку, распаковываем ее, мы находим эти бинарники, мы строим граф в зависимости между этими бинарниками. Получаем CPFs, Communication Paradigm Finder, название этой вещи, применяются различные ограничения. И в конце концов у нас есть система, которая создает различные уведомления о том, какие вещи мы могли обнаружить в данном случае. Мы используем BinWalk, это довольно распространенная вещь для распаковки прошивок. Мы берем эти ограниченные бинарники, которые понимают данные через сеть, и они содержат различные парсеры и пользовательских запросов. Чтобы анализировать парсеры, мы используем, мы анализируем, мы понимаем, можно понять, получает ли этот бинарник данное из посети, и сравнивает ли в чем-то, и ищем определенные слова, типа, как CMP для сравнения, Net и так далее, какие-то захотки, добавленные заранее константы и так далее. И мы берем эти все значения и составляем, так называемые, скор парсинга, очки парсинга, и когда мы составили вот это, получили эти значения для каждого бинарника, и мы находим кластер из бинарников, которые наиболее плотны в этом графе. Мы сравним BDG, это граф зависимы с междубинарниками, который между, в этом примере видно, что бинарники коммуницируются через переменное окружение и через файлы. Мы сравниваем эти все значения и понимаем, через межпроцессорные, как бинарники используют эти бинарии, используют межпроцессорные коммуникации какие, мы смотрим, это тот бинарник, который отправляет значения или их получает, мы получаем значения этих датоключей, по которым находят эти значения бинарниками, мы сканируем прошивку, мы создаем этот CPF для каждого варианта из обмена этой информации и мы смотрим, если другие прошивки, которые используют тот же датоключ или что-то похожее, мы создаем общий CPF, который покрывает различные случаи, которые неизвестны, чтобы все случаи были попали в наше рассмотрение и включаем наше интуицию. Как это работает? Мы берем граничный бинарник, мы берем обработчик этого запроса, есть пара семьи URI, как мы видим, здесь сравнение, здесь включим словом SOAP, и мы сравним это с переменной P, и мы видим, что переменная P возвращается из этой функции, и мы продолжаем, мы видим, что дан дей-то, который мы распарсили, она передается, как устанавливается, как переменная окружение, и конечно это сеттер бинарник, потому что он установил это значение в переменной окружение, и это сделан для того, чтобы другие бинарники нашли это значение, поэтому мы видим это датоключ, переменная окружение, и мы видим, что другой бинарник получает это значение оттуда. Таким образом, мы сделали грань в этом графе в зависимости между двумя бинарниками. Мы также можем найти различные ограничения, когда при передаче данных между сеттером и гетом, нам нужно найти баги, и нам нужно наиболее строгие ограничения, и мы можем найти на примере нашего бинарника, например, переменная, которая передается дата, и она возвращается из двух разных мест в функции порс Юра, и поскольку дей-то она не ограничена, и, например, больше, не должно быть больше, чем 127 байт, и таким образом эти данные попадают дальше в неограниченном виде, не они, они попадают в неограниченном виде в перемену окружения Куэристринг. Небезопасное взаимодействие, таксирование взаимодействия. Мы ищем какие-то небезопасные функции типа ММСПА для копирования данных туда-обратно. Мы смотрим на различные циклы, чтобы понять, если там отказ в обслуживании. Мы видим, что Куэри, которую мы взяли из перемены окружения, она не ограничена, и она передается в эту функцию процесс реквест. Дальше обрабатывается СТРСПАМ, и Кью более-больше, чем 127 байт, а Арк должен у нас размер массива 128 байт, и таким образом у нас появляется большой баг. Она наш, например у нас есть два некоторых кода это, например есть сит-фанкшн, которая создает какой-то сит, и мы берем эти значения для, а в экс мы записываем какие-то постоянные данные типа, которые будут удалены. Здесь мы можем увидеть, что если она не ограничена, это перемена не ограничена. У нас есть некоторые два добавления, это приоритизация стратегии, у нас есть пользовательский вот идет в эту функцию, и она не ограничена. Она передается в другую функцию под названием PARS, и как вы можете видеть, здесь может быть не ограниченная, мы возвращаем нашу переменную в старт, мы находим места функции, которые возвращают не константные значения, например, другой пример у нас есть, у нас не ограниченная переменная n, и мы получаем длину наших данных, сравниваем его больше либо равно, либо равно 512, и если нет, мы возвращаем, но дальше мы сравниваем строки, копируем строки. И у нас могут быть разные теги тейнта, это может быть поскольку здесь нет багов, но у нас может быть false positive, то есть мы не нашли баг, мы нашли баг, которого нет, и мы сделали так, чтобы это можно было исключить из-за false positive, чтобы по нашей оценке мы сделали оценку 53 примеров прошивок от тени производителей, в этом случае можете видеть, что есть определенный номер, сколько всего, всего бинарников 8500, и было сгенерировано 87 уведомлений, 51 из них фальшивая, и найдено было всего 34 уязвимости в разных бинарниках. Также мы проанализировали, сколько займет времени, проанализировать разные прошивки, разными способами, и всего мы, с помощью всех мест мы затратили 28 дней, и очень много уведомлений, в случае подхода с парсером, мы потратили 44 часа, и получили 9000 уведомлений о возможных уязвимостях, и мы также предполагали, что все межпроцессорные коммуникации были, обрабатывали юзерские воду, что не совсем так. На BDG мы потратили 48 часов, и почти 13000 уведомлений мы сгенерировали таким образом, и с помощью коронты мы затратили всего 33 часа, и нашли 74 уведомления всего. Всего мы проанализировали 899 прошивок, и мы нашли, что 38% из них обрабатывали не только в одном бинарнике, использовали мультибайнеры подход, и всего мы обнаружили, что всего мы нашли, сгенерировали около 1000 уведомлений о возможных уязвимостях. На большем уровне. В среднем прошивка 80% прошивок были проанализированы за один день, и также есть большая различия между имплементациями и очень большим набором этих даток ключей, по которым передаются пользовательские значения, и вообще распространение значений между бинарниками, и количество этих переходов не сильно влияет на общее время, и производительность не особо повлияла размер самих прошивок. Давайте посмотрим, как использовать коронты. Очень простая процедура. Сначала вы получаете прошивку, потом вы создаете файл-конфигурации и запускаете коронты. Вот это пример файла-конфигурации. Почти все из них они опциональные. Самое главное, это фирмный патт. Это содержит значение, где находится наша прошивка. Бейс адрес содержит значение адреса, в котором начинается наша прошивка, ну и также другие параметры нашей прошивки, и это можно найти в нашем репозитории на гитхабе. Поскольку мы сделали этот файл-конфигурации, мы можем запустить коронты. Я запущу это, но поскольку это займет несколько часов, сейчас мы не успеем, чтобы оно закончилось. И запускаем его с этим файлом-конфигурацией. И скоро я его остановлю, и в какой-то момент он произведет свой файл. Отчет. Я вам покажу просто основную информацию, которую из этого репорта вы можете получить с кенерированной репорта. Коронты нашли эти ограниченные бинарники. Это, возможно, это false positive. Не факт, что это те самые наши бинарники, но скорее всего это они есть. В данном случае HDPD демон, он false positive, потому что это просто что-то пд. Также он, а не, правильно, что нашел ваши HDPD. Он нашел HDPD бинарники. Также вы можете найти CPF для этого бинарника. Мы видим, что коронг нашел 28 датоключей для HDPD, и они уникальных из них 27. Дальше у нас следует список уведомлений предупреждений. Можно их посмотреть глазами, но я написал определенное предспособление, чтобы этот отчет посмотреть в более удобном виде. Сейчас мы найдем этот файл и посмотрим на эти предупреждения. Как видите, мы получили 8 предупреждений, и недавно я понял, что вот это вот список следования не всё в прочем не важно. Также мы уже видим, что контент types, это наш датоключ, и мы видим наш адрес, в котором находится, и файл, в котором он используется. Откроем иду и посмотрим, что там происходит по этому адресу. Как вы видите, здесь мы видим стринг копии. Мы копируем хейстак. Хейстак берется из переменной окружения и копируется в какой-то дестинейшн, в какой-то переменной окружении. Ограничено 64 байтами, и копируется пользовательский вот. Под этим итоги мы подготовили стратегию для того, чтобы отслеживать, как информация перейдется между несколькими бинарниками. Мы проанализировали 952-е прошивки. Вот это библия аэография, и спасибо за вопрос. Так что, если у вас есть вопросы, пожалуйста, идите к микрофону, и мы сейчас будем брать вопросы. Так что вы используете импорты из Lipsy, или вы делаете анализ симмонтический этих бинароков? Так что, если мы берем... Также мы используем симмонтический CPF в случае. Нету Lipsy, они используют обычно статичные бинарники. Например, они используют свой сет NF, это не значит, что используется из Lipsy. Во втором системах вы обычно. Обычно некоторые вендеры используют DMA, прямой доступ память. Почему? Как различить какие-то кастомные реализации этих IPC от каких-то генерий общих IPC? Мы обнаружили, что эти адресы обычно где-то зухарт добавлен как константы. Пока мы нашли какой-то адрес, который указывает на интересные данные, то с помощью симмонтических CPF можно различить эти фиксирования адреса от каких-то IPC, которые используются. Скажите, я проверил репозиторию на гитхабе, на гитте, и там не нашел лицензии. Какая лицензия на файл? Да, я, к сожалению, пока еще не добавил лицензию, скоро добавлю. Все, спасибо всем.