Кастер | Платформа управления Интернетом вещей в SkyLine

Добро пожаловать во вторую статью, которая является частью публикации SkyPenguin-Labs. На данный момент эти статьи также будут размещены на главной странице автора, поскольку реальной публикации нет. Итак, в сегодняшней статье автор (Totally_Not_A_Haxxer) здесь, чтобы поговорить о платформе манипуляции Интернетом вещей, известной как Caster! Этот фреймворк находился в разработке уже довольно давно, но вскоре после появления языка программирования SkyLine он был приостановлен. Итак, я (Totally_Not_A_Haxxer) собираюсь рассказать вам о структуре и почему мы вообще продолжаем проект - в SkyLine? Я знаю, что сбивает с толку. Но, чтобы статья не была такой запутанной, я разбил, как эта статья будет работать, или выделил отдельно!

  • Кастер — доказательство SkyLine | Часто задаваемые вопросы о SkyLine →Раздел, который отвечает на наиболее часто задаваемые вопросы о SkyLine, хотя он даже не опубликован.
  • Кастер — доказательство SkyLine | Почему это «Доказательство SkyLine»? → Раздел, объясняющий подзаголовок этой статьи и объясняющий, почему платформа Caster является таким мощным тест-драйвером для языка. Здесь также будет описан дизайн и идея Casters, а также показано, почему у SkyLine есть подходящие библиотеки.
  • Кастер — доказательство SkyLine | Дальнейшие исследования и эксперименты →Раздел, в котором рассказывается о том, куда собирается пойти заклинатель, куда он планирует пойти, что можно использовать, чтобы показать в будущем и т. д.
  • Идея 1 → Анализ сети: Очевидно, в этом разделе будут настроены прослушиватели на определенных интерфейсах в сети, установлены определенные фильтры и прослушиваются данные по нескольким протоколам. Эти протоколы включали HTTP, SSDP, DAAP, RTSP, ARP и другие различные протоколы, которые, как я знал, были распространены среди других устройств. Затем консоль предложит пользователю проанализировать все пакеты, данные и хосты. Например, если хост 10.0.0.20 отправил HTTP-запрос к 10.0.0.10, а затем ответом было перенаправление или даже простое тело с определенным контентом (JSON, XML, PLIST, YAML, HTML) и другими различными типами контента, тогда Модуль Caster будет отправлять запросы к обеим конечным точкам, а затем сохранять содержимое в отдельных папках. Консоль с конкретными командами позволит пользователю view просматривать содержимое на основе хоста. Консоль позволит пользователю создать цепочку, которая будет выглядеть так в консольной команде 10.0.0.20<JSON>10.0.0.10. Затем эта цепочка сообщала Caster вывести содержимое в определенную организованную таблицу и даже сообщала пользователю, где был сохранен файл, и другую информацию.
  • Идея 2 → Поддержка формата Apple:Проблема с устройствами Apple заключается в том, что при отправке запросов к серверам или службам, хранящимся на устройствах, в 90 % случаев ответ был либо в PLIST, либо в BPLIST (список свойств/ Список двоичных свойств) форматы файлов. Проблема заключалась в том, что когда вы открывали файлы BPLIST, данные мгновенно закрывались другими символами, и вы могли только предполагать, что прочитали некоторые данные, на основе первой половины. Таким образом, вторая идея будет заключаться в использовании шестнадцатеричных дамперов для шестнадцатеричного дампа файла и поиска таких ключевых слов, как «mac», «настройка», «имя», «ключ», «сессия», «конец» и других ключевых слов, которые могут указать использование специальных параметров, используемых службами на устройстве для уникальных запросов. Затем я бы также добавил анализатор и генератор BPLIST/PLIST, который мог бы поддерживать генерацию и преобразование из JSON и XML в PLIST, который можно было бы отправлять на серверы для перехвата определенных операций на устройстве или даже выполнения определенных команд, если бы существовала конечная точка, которая могут быть использованы для управления устройством. Также были добавлены дополнительные модули для поддержки определенных протоколов, которые использует Apple, таких как протоколы ZeroConf или DAAP.

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

Кастер — доказательство SkyLine | Что это?

Caster также позволяет вам просматривать данные и собранные хосты в организованной форме, которая показана ниже в виде веб-сервера.

Эта структура довольно глубокая, она делает больше, чем просто отправляет HTTP-запросы, и даже обходит определенные механизмы безопасности или механики на таких устройствах, как FireSticks. Подробнее об этом я расскажу позже, но при разработке Caster и тестировании на таких устройствах, как FireStick, я столкнулся с проблемой при работе с конечными точками. UUID устройства был необходим еще до того, как вы могли получить доступ, и требовался уникальный набор параметров, прежде чем вы могли перечислить устройство. Итак, я сделал это более дешевым способом, который работает и по сей день. После дальнейшего исследования моей сети, когда я только работал над устройствами Roku (поскольку я все еще думал о способе работы со всем, что есть на FireSticks), я понял, что был обнаружен фрагмент пакетов SSDP (Simple Service Discovery Protocol), которые все отправлялись в и от FireStick. После проверки пакетов SSDP я понял, что в запросах есть закономерность. При отправке запросов к определенным конечным точкам UUID оставался в виде обычного текста, который можно было проанализировать как раздел http. Поэтому я создал в Caster простое расширение, которое будет появляться в фоновом режиме. Это был модуль SSDP, который прослушивал пакеты из определенных портов, и если при анализе данных с использованием REGEX или других различных алгоритмов был обнаружен URL-адрес или даже UUID, тогда UUID записывался в журнал, и затем появлялись параметры для перечисления FireSticks. быть «разблокирован» программой. Это позволило пользователям получать конкретную информацию от FireStick и даже получать конкретные системные данные, которые они хотели получить. У Amazon также было ТОННА других API, но вам действительно нужно было обратить внимание, чтобы полностью понять его и иметь возможность реализовать.

Для этой платформы было много других идей, таких как проверка версий и сканирование на наличие уязвимостей, таких как LFI, в смарт-телевизорах Samsung определенной версии. Интересная особенность этой платформы не в том, что она может управлять несколькими телевизорами одновременно, а в том, что она фактически показывает людям, насколько безумно открытыми были устройства. Google Cast до 2022 года или фактически в течение 2022 года имел очень специфическую конечную точку API, которая без авторизации позволяла вам получать результаты сканирования Bluetooth, злоупотреблять системами сканирования Bluetooth, сканировать сети Wi-Fi, выполнять сброс настроек устройства до заводских настроек и даже выключать его. В системе авторизации Google была даже логическая уязвимость, которая позволяла любому просто сделать простой HTTP-запрос к конечной точке, и устройство автоматически отключалось без проблем при использовании одного единственного символа в качестве входного параметра. Этот фреймворк также является отличным примером того, насколько все небезопасно или может быть. Но давайте объясним это немного подробнее: почему устройства делают это? Почему так легко просто получить данные с устройства? Есть много оправданных причин, но одна из них — обнаружение сервисов. Итак, я собираюсь немного рассказать вам о SSDP.

SSDP, также известный как Простой протокол обнаружения служб, — это протокол, который часто используется устройствами, имеющими определенные службы, которые могут взаимодействовать с другими устройствами на них для создания сеансов совместной работы, создания удобных сеансов потоковой передачи или даже для индивидуальной настройки. друг друга для совместного использования ресурсов. SSDP имеет несколько форм, и я не буду углубляться в них, а расскажу о данных и типе информации, которой они делятся. Во время моего исследования таких устройств, как Roku и Google Chromecast, они оба использовали SSDP в БОЛЬШОЙ степени. Это произошло потому, что они обменивались данными не только друг с другом, если была установлена ​​определенная служба, но даже взаимодействовали с другими устройствами, которые осуществляли потоковую передачу или подключались к ней. Информация такого рода может быть довольно тяжелой и включать в себя

  • Идея 3 → Консоль управления:Консоль управления в рамках платформы действительно свяжет все воедино, поскольку позволит пользователю ввести cast-console или roku-console, а затем выполнить серию команд, таких как up , down , search=query , changename=name, что будет злоупотреблять конечными точками API указанных устройств в зависимости от марки и версии, позволяя пользователю управлять более чем одним устройством одновременно с помощью одной команды. Например, идея cast-console заключалась в том, чтобы взять все трансляции Google в сети, зарегистрированные модулем ARP Casters, а затем позволить пользователю переименовывать каждое устройство одновременно, скажем, 20 устройств одновременно. Причина, по которой Кастер смог сделать это так хорошо, заключается в том, что он заранее выбрасывал и готовил команды, а затем помещал их в поток, который выполнял каждую из них индивидуально. Если бы существовал URL-адрес, по которому можно было бы даже изменить имя или использовать его для сканирования точек доступа Wi-Fi или даже устройств Bluetooth, он также был бы использован.
  • Идея 4 → Консоли для разработчиков: Во время исследования я серьезно столкнулся с тем, что устройства будут гораздо более уязвимы для атак и злоупотреблений, если вы включите режим разработчика. Я пытался найти способ сделать это с помощью устройств Roku, но это было слишком неприятно без создания алгоритма или какой-то серии нажатий клавиш, которые могли бы перевести курсор в меню настроек и включить его. Эта консоль позволит вам получить доступ к гораздо большему количеству конечных точек API, находящихся в разработке, которые можно использовать для получения преимуществ перед другими системами на устройствах без авторизации или даже кодов разработчика.
  • Версия программного обеспечения. Она будет использоваться другими устройствами для проверки совместимости программного обеспечения для совместной работы или сеансового программного обеспечения на основном устройстве.
  • Имя устройства. Чтобы пользователи могли убедиться, или устройство могло убедиться, что данные передаются на правильное устройство, можно даже убедиться, что все измененные параметры, элементы управления или настройки изменяются. только это устройство. Это лучше, чем полагаться на конкретные адреса устройства по нескольким причинам.

И еще много-много информации. В любом случае, я хочу поделиться с вами тем, что иногда устройствам действительно необходимо передавать важную, а иногда и конфиденциальную информацию. Причина, по которой я считаю это недостатком, заключается в том, что могут быть НАМНОГО более безопасные способы передачи этих данных, а не простой текст, даже не закодированный. Даже в этом случае, если он закодирован, его все равно можно обратить вспять или легко декодировать с помощью специальных инструментов. Я даже видел одну камеру, которая даже отправляла пароли в файлах, закодированных с использованием шифра, но этот шифр, будучи обнаруженным, можно было просто отменить за несколько секунд. Подводя итоги, этот раздел должен был дать вам более полное представление о том, что такое фреймворк. Но мы здесь не совсем для этого, мы здесь, чтобы поговорить о чем-то гораздо более уникальном, о чем-то, что сейчас малоизвестно, но что-то, что раньше работало с этой программой. Это язык программирования, известный как SkyLine. Так…

Кастер — доказательство SkyLine | Что такое SkyLine

  • Серийный номер устройства. Серийный номер устройства можно использовать, чтобы в случае сеансов можно было проверить устройство при повторном присоединении к сеансу. Есть и другие причины, но это одна из немногих, о которых я могу думать.
  • Модель устройства. В некоторых случаях программное обеспечение для совместной работы может использовать определенные конечные точки API или сетевые функции на устройствах, такие как удаленный запуск или удаленное выключение. Без правильных моделей устройств стороннее программное обеспечение будет просто угадывать случайные конечные точки, что может привести к сбоям или неисправности приложения.
  • Тип устройства. Тип устройства — это еще один параметр, который передается и обычно используется так же, как и модель устройства.
  • URL-адреса управления устройствами: данные такого типа обычно передаются, когда другим приложениям может потребоваться удаленный доступ к URL-адресам системных служб и доступ к определенным файлам конфигурации или даже может потребоваться загрузить или изменить определенные настройки.
  • MAC и IP устройства.MAC и IP очень важны для сторонних приложений по нескольким причинам, таким как проверка устройства, назначение пакетов, работа в сети, создание сокетов или удаленных подключений, использование определенных API в стороннем приложении. чтобы получить дополнительную информацию, проверить производителя устройства и т. д. оттуда.
  • Настройки устройства. Это может использоваться приложением, если приложению необходимо проверить, включены ли на устройстве определенные режимы, например режим разработчика в случае Roku.
  • Информация о сети устройства.Такая информация будет использоваться для создания гораздо более стабильных соединений и сеансов и даже для запоминания устройства в будущем.
  • Перевод кода. SkyLine хорошо справляется с переводом кода или данных. Это означает, что он может легко переводить XML в JSON, JSON в XML, форматировать и очищать обе формы данных и даже генерировать код Golang. структуры из них для вас в ваших проектах или плагинах. Это позволяет пользователям легко сказать: «Отправьте HTTP-запрос к конечной точке устройств IoT и получите ответ, который может быть в формате JSON или XML, а затем отформатируйте его в JSON или XML, чтобы другие инструменты и программы могли легко проанализировать его без необходимости использования Интернета». конвертеры или даже загружать и устанавливать пакеты.
  • Криминалистика файлов. Криминалистика файлов – это огромная вещь в языке программирования SkyLine, поскольку она предоставляет пользователям доступ к анализаторам файлов, таким как дамперы ELF и PE, даже к утилитам анализа PNG и JPEG, которые помогают собирать, создавать и внедрять данные. , манипулировать, вырезать, вырезать, переключать, шифровать, повреждать и даже восстанавливать фрагменты в определенных файлах. Сейчас они довольно маленькие, но демонстрируют общую концепцию.

Язык программирования SkyLine с технической точки зрения представляет собой современный интерпретируемый динамически типизированный язык программирования, написанный с использованием языка программирования Go и созданный для хакеров. Это все хороший набор информации, но как насчет более глубокой стороны языка, что это такое? что это влечет за собой? что отличает его? Что ж, здесь есть несколько вопросов, на которые нужно ответить, а также большое количество деталей и оснований для освещения, так что давайте рассмотрим это. Как уже упоминалось, язык программирования SkyLine должен быть современным, он имеет приятный, незаметный и адаптируемый дизайн, который представлен в различных формах и весьма удобен для пользователя. Некоторые говорят, что Go или Python требуют вдохновения, но я здесь, чтобы сказать вам, что это совсем не так! Этот язык на самом деле является возрождением разработанного некоторое время назад языка программирования, известного как Radical Processing Core (RPC), который был гораздо более синтаксически продвинутым языком, даже слишком продвинутым. Идея этого языка программирования состоит в том, чтобы гораздо больше помочь исследователям безопасности и разработчикам инструментов, поскольку они могут предоставить хорошо построенную и всестороннюю внутреннюю структуру для автоматизации задач, связанных с безопасностью. Вот несколько хороших примеров.

На снимке экрана выше показан синтаксис или общая идея, которая используется для создания и изменения внутренних компонентов SkyLine. Одна вещь, которую я также ненавидел, — это необходимость использовать кучу макросов для изменения систем на языке или, в случае Python, работающего с перехватом импорта, чтобы перехватить импорт и внутренние системы и перехватить процесс импорта только для того, чтобы добавить единственный шаг. Этот движок устраняет это, обеспечивая полное и полное взаимодействие с серверной частью SkyLine, от системы ошибок до серверной части и функциональности библиотеки. Эта система также позволяет легко работать с тем, как ошибки и модули импортируются или экспортируются во время разработки. Не говоря уже о том, что скриншот ниже демонстрирует идею использования движка для разработки проекта и управления им после его создания.

Обратите внимание, что даже плагины заранее подготовлены для разработки? Это еще одна хорошая особенность этого языка. Если вы чувствуете, что захотите использовать этот язык только для одной конкретной вещи, возможно, вы не сможете получить все в одном пакете. тогда вы можете просто сгенерировать проект и поместить туда свои проекты C/C++, смешанные даже с чем-то вроде Fortran, и просто подключить его к CGO в сценарии Go, запустить make-файл, и вот оно! Это немного более крупный процесс, но на самом деле он не так уж и плох по сравнению с созданием целых библиотек и систем только для его автоматизации.

  • Автоматизация на основе бренда:Благодаря исследованиям Caster и других замечательных людей компания SkyLine смогла интегрировать полные библиотеки автоматизации на основе бренда, которые предоставляют вам доступ к информации об устройстве, данным конкретного формата файла, утилитам анализа, URL-адресам. конечные точки, которые можно легко вызывать из серверной части, базы данных переменных для параметров, полезных данных и т. д., а также возможность форматировать и автоматизировать определенные запросы. В настоящее время работают над такими брендами, как Apple, Roku, Amazon, Google, Xfinity и другие бренды, такие как Arris. Подобная автоматизация в будущем может привести к созданию гораздо более сложных плагинов и систем.
  • Простота управления и разработки проектов. Одна вещь, с которой у меня, как у разработчика SkyLine, всегда была проблема, заключалась в том, что я мог или был вынужден использовать что-то вроде SWIG для создания слишком сложных оболочек для работы чего-то вроде C или C++. с Go и наоборот, но при этом мне все еще приходится работать над основной идеей моего проекта. Представляем новую идею, известную как SLC или SkyLine Configuration Engine/Language. Это подмножество SkyLine, которое в собственной форме встроено в серверную часть языка программирования SkyLine и с которым можно легко взаимодействовать. Это позволяет разработчикам буквально создавать проекты в два этапа --generate и --project, которые будут генерировать целые проекты на основе шаблонов JSON. Ниже приведен пример работы этого кода и движка в действии.
  • Сторонние библиотеки BGONE! →Это основная причина, по которой я разработал язык программирования, по крайней мере, один из них. Лично я устал писать какой-нибудь крутой фреймворк, используя что-то вроде Python, Crystal, Ruby или даже Perl, и устанавливать КРУГ сторонних библиотек. В случае с Python — просто для того, чтобы сделать простой HTTP-запрос, который работал хорошо, мне нужно было установить запросы, что было такой огромной болью! Это стало еще более неприятно, когда я понял, что такие библиотеки, как pwntools, полагаются на большее количество третьих лиц, которые полагались на другие третьи стороны, что, в свою очередь, сделало pwntools открытым для большого количества уязвимостей. Такая структура меня убила, и я написал слишком раздутые фреймворки. Поэтому я просто сказал, черт возьми, я собираюсь написать свой собственный язык и посвятить его двум конкретным задачам — математике и безопасности. Я так и сделал, и именно поэтому стандартная библиотека SkyLine в основном разрабатывает конкретные задачи, с которыми мне приходилось сталкиваться или выполнять. Например, вырезание определенного набора байтов из файла без необходимости использования dd или других слишком сложных утилит — это то, с чем я часто сталкивался во время двоичного анализа, поэтому я сделал это так просто, как вызов функции, встроенной в мой язык, для вырезания. из определенного набора начальных и конечных байтов, а затем скопируйте его в выходной файл.
  • Режимы:Режимы — это концепция, которую я уже давно вынашивал. По сути, режимы будут действовать как установка или регистрация определенных библиотек в среде. Например, при использовании buffer() в SkyLine вам обычно приходится вызывать или регистрировать io, но когда вы вызываете mode("pwn"), вы регистрируете все, что связано с криминалистикой файлов, бинарным анализом, математикой, корректировщиками полезной нагрузки, анализаторами и другими инструментами, обычно используемыми в «». pwning”. Скриншот ниже демонстрирует это.

В конце концов, мне также всегда хотелось бы отметить, что этот язык используется мной лично, несмотря на то, что его публикуют, над ним работают и о нем говорят. У меня никогда не было конечной цели заставить миллион человек использовать этот язык, потому что он существует только как язык сценариев и альтернатива Python, особенно когда он работает быстрее, чем Python, при выполнении задач, связанных с безопасностью, и может легко взаимодействовать с несколькими языками программирования. PLUS облегчает разработку проектов. гораздо проще для более крупных, прямых и формальных проектов.

Но вот, круто, мы кое-что знаем об этом языке программирования, но почему именно возникла идея использовать его в Caster? Что делает этот язык таким крутым для использования в производстве? Честно говоря, немного, но прежде чем мы углубимся в это, давайте ответим на некоторые часто задаваемые вопросы о SkyLine и всей его базовой идее.

  • Какова конечная цель SkyLine? Предоставить хакерам и разработчикам инструментов безопасности гораздо более уникальный набор инструментов и превосходную серверную часть для разработки первоклассного кода и инфраструктур для их конкретных задач. Цель также состоит в том, чтобы помочь людям понять, что такие языки, как Python, следует использовать для конкретных задач, но при этом у них должна быть точка остановки.
  • В чем весь смысл сторонних библиотек:Это большая проблема, но я сделаю все возможное, чтобы ее сократить. Я неоднократно упоминал, что считаю, что если язык программирования требует, чтобы пользователи разработали целую библиотеку HTTP, или даже их собственные разработчики должны разработать стороннюю библиотеку HTTP только для того, чтобы сделать правильный запрос, то здесь есть проблема с наклоном. Это неприемлемо для нескольких языков программирования. Меня часто смущает то, что такой язык программирования, как Go, может создавать так много, но редко используется или становится популярным до тех пор, пока языки, имеющие только читаемый синтаксис и едва ли какая-либо базовая библиотека, смогут получить такую ​​​​большую популярность. Говоря о сторонних библиотеках, я хочу сказать, что очень раздражает то, что сообществу приходится буквально поддерживать язык программирования, создавая целые модули, которые язык должен был встроить в него, например, дополнительные типы данных, дополнительные манипуляции, модификации для управления потоком. , гораздо более продвинутые и безопасные системы многопоточности и т. д. Я также думаю, что это может привести к БОЛЬШИМ проблемам безопасности в будущем, как это уже произошло. Компании, особенно в автомобильном секторе, слишком сильно полагаются на сторонние системы, а эти системы полагаются на сторонние системы, что создает одну большую цепочку, которая может быть полностью разрушена, поскольку одна библиотека или система уязвима. Я не могу углубляться в это, не впадая в предвзятость, но суть в том; Сторонние библиотеки могут быть хорошими, но они никогда не заслуживают полного доверия, и если языку это нужно для каждой задачи, когда она специфична для конкретной задачи, здесь возникает еще большая проблема.

Кастер — доказательство SkyLine | Часто задаваемые вопросы о SkyLine

Когда появился этот язык, я довольно много говорил о нем, я также говорил о его идее перед МНОГО людей. Кому-то это нравится, кому-то нет, кто-то смущается, кто-то понимает! Я твердо верю, что всегда будет разнообразная группа людей, особенно когда дело касается подобных тем. Но с этими людьми возникают вопросы, а также и хорошие. Здесь я перечислил наиболее обсуждаемые и часто задаваемые вопросы, которые часто сбивают с толку и которые трудно объяснить, но я постарался кратко их объяснить.

Теперь мы можем, наконец, перейти к основной цели этой статьи: поговорить о кастинге и переписывании. Некоторые из вас, возможно, не знают, но изначально caster был написан с использованием языка программирования Go. Сейчас у меня есть планы и я уже начал переписывать его в SkyLine.

Кастер — доказательство SkyLine | Почему это «доказательство SkyLine»?

  • Планы на будущее для SkyLine: У меня на самом деле нет особых планов на будущее, кроме попыток показать людям язык, привлечь в команду хороших и действительно опытных разработчиков, которые помогут управлять языком и поддерживать его, а также даже сотрудничайте с командами, чтобы улучшить язык. В будущем, поскольку я уже работаю над этим, я хочу сделать язык готовым к решению таких задач, как автомобильная и аэрокосмическая безопасность, имея возможность анализировать файлы журналов CAN с помощью плагинов, написанных с использованием CanUtils, анализировать RAW, DNG, MOV, AVI, KML/KMZ, H.264, H.265, GPX, BIN, SDF, NMEA и другие форматы файлов, которые также используются в аэрокосмических устройствах и автомобилях. И, возможно, использовать его в дальнейших исследованиях безопасности, таких как платформа Caster.
  • Что отличает SkyLine? Ну, во-первых, он зависит от конкретной задачи и не похож на Python, Java, JavaScript и другие языки, которые считаются универсальными. Я бы также сказал, что его современная способность легко переводить код отличает его от других, его стандартная библиотека, его стиль немного уникальны, особенно для SLC, механизм управления проектами также отличает его, а также сборка, структура, назначение и даже происхождение, такое как разработанный примерно за 6 часов, сделал бы его совсем другим.
  • Каковы ваши планы по дальнейшему развитию синтаксиса? Это хороший вариант, в настоящее время я хочу реализовать Perl, подобный синтаксису регулярных выражений, и даже позволить пользователям легко выполнять команды, которые выполняются с помощью двух ` кавычки. Я также хочу сделать синтаксис более понятным и удобным для пользователя, а также предоставить больше возможностей для ключевых слов, чтобы сделать его более приятным для пользователя.
  • Даже если это может оказаться неудачным, зачем вообще пытаться? Я закончу этот аргумент в двух словах. Я попробовал, потому что занимался тем, что мне нравилось, и пытался сделать что-то, что стоило потраченного времени.
  • Шаг 1. Создание проекта —› Как я уже упоминал в этой статье, одним из основных и огромных преимуществ SkyLine является то, что он может легко создавать проекты для вас, и вам не придется выполнять ручной процесс работы. с настройкой кода и проекта и так далее. Но я также лично не работал над SLC довольно долгое время и забыл обновить поддержку библиотеки, постоянные идентификаторы, оценку, ее лексер на основе регулярных выражений и некоторые другие вещи, такие как настройка проекта. Таким образом, я смог полностью добавить поддержку файлов, которые могли бы генерировать проект, который будет передаваться в движок, и иметь возможность генерировать весь проект. Ниже приведен снимок экрана всех файлов, сгенерированных на основе файла, показанного после этого текста.
  • Шаг 2. Создание некоторой формы внешнего интерфейса → Для этого потребуется создать цветные выходные данные, заставить таблицы работать, заставить консоль читать и многое другое. Поскольку в версии для разработчиков SkyLine имеется стандартная библиотека, известная как console, нет необходимости создавать системы рисования блоков, программы рисования таблиц или модули сортировки данных, поскольку они уже встроены в язык. Но это дало мне потрясающую возможность реально протестировать функциональность языка и понять, на что я смотрю. Это также дало мне возможность поработать с внутренней функцией, известной как HtmlToAnsi, которая принимает цветовые коды HTML и затем либо выводит их на экран, либо смешивает с определенным текстом. Это дало мне возможность проверить, есть ли какие-либо ошибки в этих библиотеках, и оказалось, что их не было!

Единственным моментом этой статьи было то, почему о Caster так много говорят, почему я предпочитаю раздувать сценарий, который просто злоупотребляет конечными точками API сценария? В чем смысл? За клики? Ха-ха-ха, нет, на самом деле наоборот. Я предпочитаю много говорить о Caster, потому что это одна из первых платформ, которые я создал за целый месяц исследований безопасности и обратного проектирования, и одна из самых первых вещей, созданием которых я гордился. Но вскоре после того, как был написан сценарий, был создан SkyLine, а Кастер был разгромлен и отодвинут в сторону. Этот проект полностью поглотил меня и был единственным, о чем я мог говорить, думать или даже писать в течение нескольких недель, потому что это было единственное, что действительно вернуло меня в прошлое и заставило меня снова полностью работать со своим внутренним огнем! Но потом что-то щелкнуло. Если бы я хотел по-настоящему проявить себя, я мог бы создать что-то уникальное, мне пришлось бы не только создать язык, но и написать самые специфичные для задач структуры, которые я когда-либо писал раньше. Это произошло с Кастером. Текущая версия Caster, представляющая собой сборку фреймворка для разработки, по-прежнему работает на Go, но при этом она намного сложнее и продвинутее. В эту структуру входит множество вещей, и это больше, чем просто базовые исследования и функциональность безопасности, с ней есть целая система сеансов, управление конфигурацией, система отчетов для сообщения об устройствах в сети и управляемых устройствах с данными и сигналами, система экспорта данных. для экспорта данных в формате XML — JSON и наоборот, модуль SSDP и ARP для отправки и прослушивания ответов/запросов SSDP и ARP, алгоритмы, поддерживаемые языком, для определения учетных данных, утилиты анализа URL-адресов, платформы криминалистической экспертизы файлов и сопоставления кода а также утилиты, которые действительно связывают фреймворк воедино, мне нужна была возможность сделать что-то большое, и это была фреймворк для этого. Очевидно, что даже если бы я захотел в течение месяца работы над языком, я бы не смог создать что-то вроде Gopacket, поэтому я просто создал систему на этом языке, чтобы также добавлять плагины, что означает, что Caster будет взаимодействовать с программами Go/C/C++. Ну, вот почему это тест. У меня не только будет возможность увидеть и обнаружить основные ошибки в языке, но также будет возможность обнаружить ошибки в языке, отсутствующие функции, недостающую функциональность, недостающие элементы и многое другое. Список ниже доказывает это, проведя вас через этапы создания заклинателя и выполнения всего с помощью SkyLine.

Единственными файлами, которые не были сгенерированы, были CasterFCore и все файлы сценариев, поскольку есть еще один файл, который генерирует движок, под названием Module.sl, который предназначен просто для того, чтобы не оставлять каталог сценариев пустым, а также для того, чтобы поговорить с вами об импорте, чтобы более подробно показать вам как это работает из основного файла. Затем мне также пришлось настроить работу файлов данных проекта и требуемых файлов. Вот пример того, как работают требуемые файлы.

Этот файл определяет все соответствующие системы и требования проекта перед загрузкой сценария. Обе версии SLC/SL проверяются еще до проверки всего остального, после чего также проверяется операционная система, чтобы убедиться, поддерживается ли она для проекта. В данном случае Caster работает и был протестирован только в Linux, поэтому мы используем «Linux» в качестве поля операционной системы, которое проверяется на серверной стороне. Если движок обнаружит, что пользователь находится в Windows, на основе проверок во время выполнения до запуска среды, то язык прекратит синтаксический анализ и предварительную обработку. Следующее, что будет самым очевидным, — это проверка синтаксиса и реестра. Если при использовании SLC вы хотите убедиться, что язык действительно работает правильно, вы можете указать движку и системе управления проектами проверить, все ли библиотеки корректны. Я сделал это, просто запустив команду, которая запускала файл .slmod, также известный как сценарий SkyLineModifier, через интерпретатор SkyLine, сообщая ему использовать SLC с — SLC=true --Esource=”file.slmod”, что давало следующий результат.

  • Разработка базовой функции инициализации. Если вы заядлый программист на языке программирования Go, вы должны знать, что Go имеет две возможные точки входа для программы: одна из них — функция main, необходимая компилятору; и функция init, которая не требуется, но может использоваться. Функция init для тех, кто не знает, — это функция, которая выполняется перед main, если она там размещена, она известна и используется как программный инициализатор и функция настройки для объявления или выполнения проверок системы после запуска. В SkyLine мне нужно было убедиться, что указанные аргументы верны, данные и файлы верны, сеть стабильна и механизм конфигурации правильно загружает все в серверную часть. Итак, я понял, что мне не хватало одной способности define init(). Эта функция делает то же самое, что и функция в Go, и выполняется сразу же после ее возврата. Единственное, что функция init, как и функция golang, не может возвращать данные, вызываться, принимать аргументы и никогда не сохраняется, и ее результаты не учитываются. Конечно, вы можете указать аргументы, но вы не можете использовать аргументы, если они не могут быть вызваны пользователем И возвращаемые данные не будут возвращены, они будут просто вырезаны из функции. Эта функция в скрипте выглядит следующим образом.
{
    "ProjectGenData": [
        {
            "Projectname": "Caster",
            "Hybrid-wrap?": true,
            "UsingSLModifiers?": true,
            "UsingJsonData?": true,
            "UsingEngine?": true,
            "UsingMakefile?": true,
            "DesignatedPath": "/home/totallynotahaxxer/Desktop/Caster-IoT-Framework2/"
        }
    ]
}

Это была одна из наиболее сложных задач, поскольку мне нужно было убедиться и дважды проверить, действительно ли библиотеки загружаются, путем проверки подписей на серверной стороне. Но, тем не менее, он работал довольно хорошо и смог работать так, как задумано. Это сообщило мне, что все переменные и библиотеки также были экспортированы, и что при запуске моего сценария все переменные для проекта Version_, Name_, Desc_, OS_, Type_, Env_ были загружены, а также требования проекта были правильно проверены при анализе файла.

{
    "Requirements": {
        "Libraries": [
            "io",
            "math",
            "File",
            "console"
        ],
        "Operating-System": "Linux",
        "SLC-Version": "0.x",
        "SL-Version": "0.x"
    }
}

Как вы можете видеть, это проверяет аргументы, использует несколько условий, а также будет варьироваться по аргументам, если указано правильное количество или имеется более одного аргумента, и аргумент не равен «помощи». Эта функция инициализации была хорошей отправной точкой, поскольку, хотя прямой «точки входа» для языка не существует, существует возможность ее создания. Однако обратите внимание, что этот файл с именем Initation.sl необходимо было импортировать в основной сценарий Main.sl перед его запуском. Но функции инициации по-прежнему могут быть размещены где угодно и будут запускаться всякий раз, когда они оцениваются или выполняются.

это выглядит странно, но дай мне одну секунду. В функции инициализации я вызываю функцию, известную как Banner(), которая очищает экран и печатает баннер фреймворка. Функция показана ниже в формате исходного кода SkyLine.

  • Работа с форматированием.Форматирование — это важная вещь в любом языке программирования. Как ни странно, SkyLine автоматически форматирует все, что считает наиболее подходящим, но также включает в себя метод форматирования для языка. Например, если вы хотите отформатировать строку, вы можете просто сказать «{}», что похоже на Python, но никогда не предполагалось. Эта идея довольно проста и предназначена только для форматирования определенных и небольших объемов данных. Но во многих случаях это помогало. Например, когда я пошел делать баннер для Кастер, я столкнулся с одной проблемой; окраска. Одна вещь, с которой я никогда по-настоящему не удосужился работать в SkyLine, — это escape-последовательности ANSI, и есть только несколько из них, которые вы можете использовать, и даже тогда работать с ними довольно сложно. Я никогда не добавлял поддержку более длинных последовательностей, таких как \033[xx;x;xxxm, потому что мне этого никогда не хотелось, и мне казалось, что идея преобразования цветовых кодов HTML была проще. Итак, на серверной части библиотеки Console, как упоминалось ранее, я построил преобразователь цветового кода HTML, который может преобразовывать цветовые коды HTML в escape-последовательности ANSI и либо возвращать их, либо печатать вместе с текстом, либо изменять текущий текстовый режим. В данном случае мой файл баннера для фреймворка выглядит так
  • Дальнейшее развитие и расширенные возможности:В ходе своих исследований я обнаружил, что в рамках этой платформы можно поддерживать больше устройств. Я также понял, что протестировал это только на трех устройствах и трех разных версиях и типах устройств, а это значит, что я не могу сказать, что это наверняка будет работать на других устройствах этой марки. Тем не менее, я продолжу исследовать конкретные устройства и добавлю их в фреймворк, чтобы продемонстрировать, насколько небезопасными могут быть некоторые устройства, и даже в будущем объяснить, как фреймворк может помочь при разведке или работе с конкретными устройствами. Этот фреймворк в целом представляет собой еще одну идею, но он также используется в качестве основы для множества проектов. Это подводит меня к следующему пункту.
  • Демонстрация возможностей SkyLine: SkyLine — это язык программирования, разработанный для двух основных областей — математики и кибербезопасности. Этот язык будет личным и основным проектом, который будет продолжать развиваться и постоянно использоваться мной в той или иной стадии эксплуатации или демонстрации разработки эксплойтов во время моего собственного обучения. По этой причине мне необходимо убедиться, что сама структура также постоянно обновляется и может соответствовать стандартам SkyLine, и наоборот. Это означает, что для каждого нового обновления Caster будет иметь, например, более продвинутую экспертизу файлов или генерацию данных, поэтому мне нужно будет убедиться, что SkyLine также поддерживает этот тип поля в НАМНОГО большем масштабе и вместо того, чтобы полагаться на плагины, я могу в будущем полагаться на на своем внутреннем развитии. Я также хочу добавить в Caster новые устройства, что приведет к дальнейшему развитию стандарта SkyLine для поддержки гораздо более широкого диапазона типов файлов и собственных протоколов, используемых другими системами. Этот фреймворк сможет продемонстрировать причину SkyLine и всю идею фреймворка, который, возможно, сможет оказаться в гораздо более лучшем месте, чем когда-либо, а также получить гораздо большую поддержку сообщества и развитие проекта.
  • Концовка | Обо мне → В этом разделе будет подробно рассказано обо мне, кто я, почему я этим занимаюсь, текущие проекты и т. д.

Вы можете заметить, что при работе с содержимым файла я просто открываю баннер, а затем распечатываю содержимое, вызывая format? Да, затем я вызвал библиотеку консоли, чтобы преобразовать эти цветовые коды HTML в escape-последовательности ANSI, а затем использовал второй аргумент, равный нулю, что означало, что функция должна печатать последовательность, а не возвращать ее с текстом. Тогда для форматирования текста и цветов будут использоваться разделители {} в файле баннера. Вы также можете заметить кое-что еще: я называю переменную, известную как CasterVersion_. Хорошо, позвольте мне объяснить это. Давайте ненадолго вернемся к SLC. SLC заставляет вас загружать этот файл проекта, наполненный информацией о проекте, такой как имя и описание (показано ниже).

  • Концовка | Спасибо → Раздел, в котором выражается благодарность за прочтение этой статьи и объяснение, почему я ценю сообщество.
{}╭──────────────────────────────────────────────╮
{}│  ____    ____    ____    ___    ____    ____ │
{}│  |       |__|    [__      |     |___    |__/ │ 
{}│  |___    |  |    ___]     |     |___    |  \ │{}
│                  {}                     │
{}╰──────────────────────────────────────────────╯

Помните, как я говорил вам, что движок по сути говорит мне, что он «экспортирует» и «регистрирует» переменные в серверную часть, например, версию? Что ж, после экспорта движок вызовет функцию в SkyLine, чтобы назначить и зарегистрировать их в виртуальной среде при запуске сценариев, и каждая переменная, такая как Version_, печатается рядом с именем проекта. Итак, поскольку имя проекта под Project-Information в файле json — Caster, список зарегистрированных переменных становится CasterDesc_, CasterVersion_, CasterOS_, Caster_Languages и т. д. Итак, когда вы смотрите на баннер, вы замечаете, что версия была отформатирована.

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

{
    "Project-Information": {
        "Name": "Caster",
        "Description": "IoT Manipulation Framework",
        "Supported-OS": "Linux",
        "Languages": "SkyLine, C++, Go, C",
        "Version": "V-0.0.1"
    }
}

Были и другие вещи, но это своего рода проверка языка, не потому, что я просто пишу программу, а потому, что получаю первый опыт работы с моим языком в рабочем состоянии и использую некоторые базовые записи, чтобы показать производительность языка по сравнению с такими языками, как Python, и даже тогда я смогу фактически показать, почему я лично буду использовать его для конкретных задач. Этот язык требует огромной работы, и, во всяком случае, пройдя оценку, среду и построив всего несколько сотен строк кода, я понял, что да, у него есть некоторые проблемы, над которыми нужно работать, но над ним работали только в итого месяц или два фактической постоянной, нон-стоп работы и дизайна. Не говоря уже о том, что оригинальный язык разрабатывался за такое безумное количество времени (6 часов), что просто выстрелил себе в ногу. Таким образом, несмотря на то, что язык находится в стадии разработки и над ним будут постоянно работать, однако я бы предпочел сделать это в качестве теста и больше экспериментировать с ним, чем просто оставить его в покое.

Кастер — доказательство SkyLine | Дальнейшие исследования и эксперименты

Я понимаю это очень часто, когда говорю о том, что такое Caster и почему он был разработан. Большую часть времени я просто говорю себе, что это никуда не денется, но есть какие-то идеи. Есть два лучших района и дороги, которые УВЕРЕННО БУДЕТ идти вниз. Они перечислены ниже.

Caster также снова будет использоваться в качестве базового примера для множества будущих проектов, связанных с исследованием протоколов, исследованием сетей и другими различными областями, примером которых, возможно, могла бы стать данная платформа. Опять же, я хотел использовать этот продукт и эту платформу в качестве примера того, что можно делать с устройствами Интернета вещей, которые остаются незащищенными. Но на данный момент проект находится в стадии разработки и планирует еще немного поработать с языком, создавая новые задачи, которые могут продвинуть общие исследования SkyLine.

Кастер — доказательство SkyLine | Резюме и заключение

  • Концовка | Способы поддержки → Раздел, в котором рассказывается о том, как вы можете поддержать меня валютой!
  • Концовка | Где меня найти → Раздел, в котором рассказывается о том, где меня можно найти и как подписаться на меня.

Эта статья была довольно длинной, сейчас в ней около 10 000+ слов, и она стала слишком длинной для меня, чтобы продолжать. Итак, я хочу пойти дальше и закончить эту статью/модуль на этом. Мир Интернета вещей будет продолжать расти, и с развитием технологий возникает все более безумный спрос на исследователей в области безопасности, таких как я и вы, читатель, чтобы они могли предложить этому миру что-то интересное! Программа манипуляций и злоупотреблений Caster была разработана для того, чтобы продемонстрировать язык программирования SkyLine, а также, в первую очередь, продемонстрировать, насколько взаимосвязаны и насколько безумно легко для кого-то вроде меня найти способы злоупотребить им и использовать эти открытые и небезопасные пути во вред. В этой статье мы много говорили о Caster и даже немного глубже погрузились в язык программирования SkyLine и то, чего я хочу от него! Эта статья также должна была дать вам хорошее представление о фреймворке и о том, что он должен делать! Я хочу поблагодарить вас, если вы зашли так далеко, на момент написания этой статьи я был кем-то, известным как GhostMonth, месяц, который я создал, чтобы стать абсолютно призраком и работать над более чем 30 статьями в течение этого месяца, а также над другими программами и сценариями. ! Содержимое этой статьи было создано за 2 часа и потребовало массу работы и усилий, ха-ха-ха, поэтому я ценю поддержку! Особенно, если вам нравится этот контент! Надеюсь, вам это понравилось, и если да, то, пожалуйста, поставьте лайк и, возможно, поделитесь этим со всеми!

Заключительное примечание: дополнительные материалы, ресурсы, поддержка, спасибо.

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

Ниже перечислены разделы и обсуждаются!

Привет, зануда! Меня зовут Райан, и я широко известен как Totally_Not_A_Haxxer! Мне 16 лет, я исследователь и разработчик в области безопасности, у меня большой опыт, главным образом в разработке (более 50 языков, включая собственную работу), и я очень интересуюсь автомобильной безопасностью! Я пишу статьи, которые пишу, особенно длинные, а также книги, потому что считаю, что знания предназначены для всех и не следует платить так много. Например, я видел, как кто-то написал учебное пособие по Golang, которое занимало около 10 часов контента и заплатило за него более 1 тысячи долларов. Я подумал, что это пустая трата времени, поэтому я запустил свою страницу в блоге, чтобы не только делать то, что они делали, но и делать это. лучше и бесплатно! У меня также есть несколько проектов в области образования, таких как курсы за 1 доллар, которые представляют собой курсы по различным темам в области технологий или даже в общих чертах, которые продаются за один доллар! Это немного обо мне, вы можете узнать больше, о чем мы поговорим через секунду, ха-ха-ха!

  • Концовка | Ресурсы для расширения ваших знаний → Раздел, в котором объясняются некоторые основные ресурсы, которые могут вам помочь.
  • Венмо:
  • CashApp:
  • Адрес Биткойна: bc1q45ctj3cwl8zr2qdw4xceukr58cdnayxuutymt8
  • Адрес Эфириума: 0x466BA936E2bdbEab74c8cd048CC43279fE712E54

Я также хочу поблагодарить вас за то, что вы прочитали статью и зашли так далеко. Я знаю, что эти статьи очень большие и занимают массу времени, но я надеюсь, что они того стоили. Я изо всех сил стараюсь уделять время и силы написанию статей, гарантируя, что я действительно могу помочь обучать людей и углубляться в темы, о которых говорю, бесплатно! Итак, если вы зашли так далеко, я ценю ваши усилия и надеюсь, что это помогло :D!

Заключительное примечание | Способы поддержки (финансовой)

В настоящее время у меня не самая лучшая ситуация с деньгами, и у меня нет надлежащего финансирования, чтобы позволить себе хорошее оборудование для исследований в области безопасности, даже такое, как ноутбук, на котором я мог бы выполнять удаленную работу. При этом я всегда привык говорить: «Я делаю то, что делаю, со страстью и не остановлюсь ни перед чем». Несмотря на то, что у меня нет прямых ресурсов, я всегда стараюсь изо всех сил справиться с тем, что у меня есть, и делать то, что хочу, с теми ресурсами, которые у меня есть. При этом я прошу, если вы можете пожертвовать или у вас есть лишние запасы, это позволит моему развитию, навыкам и многому другому идти намного быстрее, а также сделает меня гораздо более мотивированным продолжать делать то, что я делаю! Ниже я перечислил свои CashApp и Venmo, а также криптокошельки!

Заключительное примечание | Где меня найти

«Венмо | Хакер Totally Not A Haxxer
Venmo — это цифровой кошелек, который позволяет вам совершать платежи и делиться ими с друзьями. Вы можете легко разделить счет и стоимость проезда на такси…account.venmo.com»

Безопасность Интернета вещей: начало работы

«Платите $TotallyNotAHaxxer в приложении Cash
Мгновенно бесплатно обменивайте деньги в приложении Cashcash.app»

  • Адрес USDC: 0x466BA936E2bdbEab74c8cd048CC43279fE712E54


Звучит странно, но вы можете найти меня в нескольких местах; социальные сети — одни из них. Ниже я перечислил несколько ссылок, где меня найти, но скажу вот что. Часто на серверах Discord, в сообществах и даже на других платформах: некоторые люди всегда просят у меня ссылки, и я могу устать постоянно вставлять ссылки на социальные сети в те дни, когда у меня много дел, а социальные сети не на моем телефоне ( в это время работаю над исследованием/месяц-призрак). ТАК, как говорится, Google - хорошее место для буквального поиска Totally_Not_A_Haxxer, и некоторые из моих социальных сетей должны появиться + посмотрите на это таким образом, вы получите больше опыта OSINT.



  • Адрес привязки: 0x466BA936E2bdbEab74c8cd048CC43279fE712E54


  • Адрес XRP: r4s8FeyYCBHJQGJRGuDuPeM2YLMwRCZP4R
  • Инстаграм
  • Средний:
  • Блогер:
  • Статьи Hakin9/Исследование

Файлы списка двоичных свойств

«Totally_Not_A_Haxxer — Medium
Прочитайте текст Totally_Not_A_Haxxer на Medium. Преподаватель по кибербезопасности, разработчик, менеджер по социальным сетям, автор…medium.com»

  • GitHub

Blogger
Инструмент публикации блогов от Google для обмена текстом, фотографиями и видео.www.blogger.com

  • Google: «https://www.google.com/search?q=totally_not_a_haxxer&sxsrf=AB5stBjHLrW6iWuxLvuh7jKHebe6L-BTGQ%3A1690923815850&source=hp&ei=J3PJZJqkL-nakPIP7dqCgAo&iflsig=AD69k cEAAAAAAZMmBN09YHcUlW2STp8BofYjoKR1t0GgH&oq=tota&gs_lp=Egdnd3Mtd2l6IgR0b3RhKgIIADIHECMYigUYJzIEECMYJzIHEAAYigUYQzIHEAAYigUYQzIHEAAYigUYQzIHEAAYigUYQzIHEAAYig UYQzIHEAAYigUYQzIOEC4YgAQYsQMYxwEY0QMyCBAAGIAGMkDSMYGUABY1QJwAHgAkAEAmAGtAaABhQWqAQMwLjS4AQPIAQD4AQHCAg0QABiKBrixAxiDARhDwgIIEAAYigUYkQLCAhMQLhiKBRixAxiDARj HARjRAxhDwgILEC4YigUYsQMYkQLCAg0QLhiDARixAxiKBRhDwgIKEC4YigUYsQMYQw&sclient=gws-wiz»


  • Деревня Интернета вещей: «https://www.iotvillage.org/»


  • Фонд безопасности Интернета вещей: «https://iotsecurityfoundation.org/»

Концовка | Ресурсы для расширения ваших знаний

  • Интернет вещей для всех: «https://www.iotforall.com/»


В этой статье содержалось множество статей: речь шла об исследованиях безопасности Интернета вещей, обратном проектировании, криминалистике файлов, разведке, веб-безопасности и множестве других тем! В этом случае сегодня я хочу предоставить вам несколько хороших ресурсов по языку программирования Go, принципу работы языка программирования, файлам BPLIST, безопасности Интернета вещей, компоновщикам изображений ASCII и многому другому! Ниже я перечислил их все. Обратите внимание, что некоторые ресурсы здесь очень минимальны и использовались в качестве краткого справочника для создания этой серии статей (статьи по безопасности Интернета вещей).



Caster — Тест-драйв SkyLine

Вы когда-нибудь хотели узнать, что представляет собой программа манипуляции Интернетом вещей Caster? Присоединяйтесь, мой странный я (Totally_Not_A_Haxxer) использует SkyLine, чтобы…

Язык программирования Go

ASCII Art Builders и веб-сайты / Интерфейс командной строки и дизайн

Введение в языки программирования

Кастер — доказательство SkyLine | Что это? → Раздел, в котором рассказывается о Caster, его идее, почему он появился, как он работает, а также подробно объясняется, что это такое.

Кастер — доказательство SkyLine | Что такое язык программирования SkyLine → Небольшой раздел, в котором немного рассказывается о языке программирования SkyLine.

  • Статья Математика с развитиемhttps://medium.com/martian-defense/mathematics-trigonometric-functions-with-fortran-95-4e004367b595
  • Хорошо, поскольку мы собираемся сразу же заняться этим и заняться этим, я подумал, что было бы хорошей идеей подробно рассказать, что такое Caster, для тех, кто не использовал или даже не видел этот инструмент в действии. По сути, это был инструмент для меня, позволяющий автоматизировать большую часть моих исследований безопасности на устройствах IoT, таких как RokuTV, AppleTv, Chromecasts, Amazon Alexa и других различных интеллектуальных устройствах. Способ работы этой структуры заключается в первом запуске при запуске отдельного модуля, известного как модуль ARP (протокол разрешения адресов), который будет отправлять пакеты каждому отдельному хосту в сети (работающему или мертвому), а затем будет ждать их ответов и проанализировать результаты. Компания Caster сделала это, потому что считала, что даже если она не будет использовать уязвимость, инфраструктура все равно сможет доказать, насколько чрезвычайно открытыми являются наиболее часто используемые устройства IoT. Таким образом, эта платформа затем сохраняет MAC- и IP-адреса устройств в сети и получает информацию от производителя, а затем разделяет их на списки. Например, если производитель или OUI читают Roku Inc. или Apple Inc., тогда они будут разделены на два списка, один с именем hosts, который будет просто списком всех активных и отвечающих хостов в сети, а другой также будет обозначен как их торговая марка. Это было сделано для того, чтобы пользователь мог выбрать, хочет ли он перечислить или использовать все устройства в сети одновременно. Это сделало процесс намного увлекательнее, а также позволило пользователям легко выполнять всего один щелчок кнопки. Эта структура была протестирована исследователем безопасности в отеле: в отеле по крайней мере для каждого отдельного телевизора будут использоваться коробки Roku. Каждая коробка имела свой уникальный идентификатор, и когда исследователь открыл структуру; Кастер обнаружил более 100 устройств в одной сети и 150 устройств в другой, причем все они были телевизорами Roku одной и той же модели. Как Кастер убедился, что это одна и та же модель? Когда Caster обнаруживает в сети устройства определенной марки, он подбирает список конечных точек API, которые могут удалить информацию об устройстве. Одна из этих конечных точек API выдает серийный номер устройства, его MAC, другие конечные точки API, текущие приложения И удаляет номер версии устройства или программного обеспечения, работающего на устройстве. Когда Caster может убедиться, что выбранное количество хостов работает в сети с одной и той же версией, он может добавить список конечных точек API, которые можно использовать для удаленного управления устройствами. В дальнейшем, когда исследователь безопасности обнаружил более 100 устройств, на которых установлена ​​одна и та же версия программного обеспечения, он затем использовал функцию, реализованную исследовательской группой SkyPenguin, известную как enumerate*, за которой последовала команда poweroff, которая заставляла все устройства работать одновременно асинхронно (с использованием расширенной многопоточности). и расчеты), чтобы выключить питание и начать сходить с ума! Теперь у этих блоков не было той же конечной точки API, что и у другого, чтобы просто отправить HTTP-запрос на конечную точку /poweroff, вместо этого вам пришлось использовать протокол внешнего управления Roku, чтобы удаленно заставить устройства после серии нажатий клавиш и шаблонов зайдите в настройки, а затем перейдите на сторону выключения. Проблема, с которой я столкнулся при тестировании на своих собственных устройствах, заключалась в том, что вы не могли просто каждый раз нажимать одни и те же клавиши, потому что в этом случае несколько человек, таких как те, кто был в моем доме в то время, использовали его. , они могут использовать пульт дистанционного управления или могут находиться на расстоянии определенного количества нажатий клавиш и указаний. Итак, как я это обошёл? Я создал модуль для roku и нескольких других устройств, который злоупотреблял конечной точкой API на устройстве для поиска и последующего открытия существующего приложения на устройстве. После этого Caster будет ждать примерно 10 или 20 секунд, пока все потоки завершатся, и вернется с сообщением о том, что приложение активно (используется другая конечная точка API, чтобы также проверить и подтвердить эти данные). Когда все было готово, Кастер запускал статический скрипт, который затем выполнял серию нажатий клавиш, рассчитанную путем принудительного возврата устройства в исходное положение и перебора определенного набора шаблонов. Теперь, когда исследователь безопасности сделал это, было сообщено, что в отеле было отключено только 90 устройств, поскольку в Caster был встроенный модуль, который также мог отслеживать время ответа устройства, отправляя запросы этим устройствам каждые 20–20 минут. 30 секунд в качестве пинга, если это разрешено пользователем. Конечно, все это сложно принять, но это один из очень маленьких аспектов Caster, благодаря которому он просто работает. Вы можете спросить прямо сейчас, какова конечная цель Кастер? Мы все видим такие инструменты, как Flipper Zero, которые слишком популярны, потому что они на самом деле не используют какие-либо недостатки в системе, а вместо этого просто записывают определенные сигналы и воспроизводят их (из коробки) и выполняют различные другие задачи, которые на самом деле не являются эксплуатацией уязвимость. Caster аналогичен, его цель — не просто использовать определенные уязвимости, а скорее использовать его в качестве инструмента, который можно использовать не только для проверки безопасности устройств IoT (таких как межсетевые экраны), но даже для проверки безопасности конечных точек API, пробуя несколько формы грубого принуждения и даже фаззинга, чтобы гарантировать, что эти конечные точки все еще в такте или могут обрабатывать запросы и так далее. Не говоря уже о том, что Caster — это хороший и интересный инструмент, который помогает людям знакомиться с миром Интернета вещей и старается не стать очередной насмешкой над другой существующей инфраструктурой. Итак, теперь мы подошли к вопросу: как он манипулирует другими устройствами и что фреймворк может делать напрямую? Как упоминалось ранее, Caster поддерживает несколько устройств, что показано в таблице ниже.
  • Теперь мы можем перейти к другому вопросу, который мне постоянно задают многие люди: хотя Кастер маленький и легкий, как и почему он появился? Первоначально мне было скучно просто сидеть в своей комнате, и я работал над своей старой системой и структурой, которую я хотел возродить. Для одной из систем или наборов инструментов в этом пакете/фреймворке, который я пытался воскресить из мертвых, мне нужно было убедиться, что некоторые пакеты в модуле отправляются, а также прослушиваются, которые представляют собой различные формы протоколов, таких как FTP. , АРП и другие. Я открыл Wireshark и прослушивал пакеты от определенного хоста (моего компьютера), а затем установил на нем несколько фильтров. После этого я также провел тестовый запуск второго модуля, известного как HTTPSniper, который обстреливал или обнаруживал HTTP-запросы внутри сетей. Программа выдала этот огромный URL-адрес, исходящий от RokuTV, который был у меня в комнате, и это был единственный URL-адрес, который просто ничего не делал (с моей точки зрения). Изучив URL-адрес еще немного, я понял, что конечная точка была частью настройки системы, которая настраивала определенные сети. После этого мой мозг как бы щелкнул и просто решил бросить кучу фильтров в Wireshark, и следующее, что вы знаете - буквально через час я был на 12 конечных точках в глубине телевизора и смог вызвать различные события в системе, чтобы вызвать запросы к конечные точки. После того, как я добрался до системной части вещей, я использовал логический трюк, о котором говорил некоторое время назад (в моей исследовательской статье по безопасности Hakin9, посвященной реверсированию и анализу AppleTV), который эволюционировал, используя общие имена и перебирая пути вручную. В конце концов, когда я исчерпал запасы, я наткнулся на огромный контрольно-пропускной пункт и ничего не смог найти, поэтому остановился. Перенесемся еще на несколько дней вперед, и AppleTV в доме появляется в сети, и я просто смотрел на него на секунду, думая про себя: Что я могу с этим сделать. Вернувшись в свою комнату, я начал целую исследовательскую неделю, в течение которой я весь день ничего не делал, кроме как попытаться отключить нулевой день на этом AppleTV, я провел целый день, реверсируя его протоколы, просматривая такие серверы, как DAAP, исследуя AirPlay, а затем, как и другие устройства, получил доступ к некоторым конечным точкам API, в результате чего были обнаружены файлы BPLIST, содержащие дополнительную информацию. Это полностью отбросило меня на дорогу, но в конечном итоге стало слишком тяжелым. Ко второй неделе исследований Roku и AppleTV я уже изучил 300 страниц собственных исследований и работы над обоими устройствами и не смог найти ничего, что могло бы правильно их организовать. Именно здесь в игру вступила идея Кастер. Я чувствовал, что мне нужно что-то, что могло бы объединить все мои знания и исследования в структуру, которая могла бы автоматизировать все в случае, если я захочу повторно протестировать или повторно проследить свои шаги на разных устройствах. Итак, вот как я выложил Кастер.
  • Шаг 3: анализ аргументов, консоли и строк → Caster представлял собой платформу, которая использовала флаги командной строки, но в основном работала с использованием консольных команд и создавала эту виртуальную среду, позволяющую создавать переменные на основе сеанса и хранить данные. Однако консоль не была основана на одной команде, в ней был модуль, за которым следовала подкоманда, выполняемая для этого модуля. Например, set x=10 — это команда, которая сообщает модулю set присвоить переменной namex значение 10 типа Integer. На серверной стороне консоль разделит входные данные на пробелы и измерит их длину, затем проверит имена модулей, а затем проверит индексы строки, затем проверит и удостоверится, что модуль является реальным модулем, извлекает модуль из строковый ввод затем разделяется и вычисляется входные данные после имени модуля, которые будут переданы в этот модуль для установки. Консоль в SkyLine запускается с помощью функции io.input(), которая создает бесконечное устройство чтения ввода-вывода и позволяет разработчикам указывать тип данных, который они хотят использовать. Это обеспечит безопасность при работе или использовании программы. У средства чтения ввода-вывода было несколько переполнений стека, возникавших при вызове, но это было довольно легко исправить, а также возникала ошибка при чтении аргументов при вызове функции, особенно с ключами vardaic. Анализ строк стал еще одним огромным испытанием, поскольку он показал мне, что я упустил во время разработки с типом String. Когда Caster работал со строками из консоли на языке программирования Go, он использовал множество функций, которые содержали, сравнивали, включали, разделяли, вырезали и другие функции, чтобы гарантировать, что ввод с консоли будет работать должным образом. С такой проблемой я столкнулся. В итоге мне пришлось добавить функции для строки, которые были String.Pop, String.Index, String.Contains и то же самое с массивами, методами pop и индексации, которые уже существовали, но мне также нужно было проверить разделенный вход, чтобы увидеть, является ли элемент существовало и считаем его. Так что я также смог добавить такую ​​​​информацию. Теперь работать с входными данными стало немного сложнее, но все же намного проще! Вы можете спросить прямо сейчас, почему я решил добавить опцию индексирования для строк, хотя я мог бы просто реализовать функции индексации строк с помощью [..:..] . У меня есть поддержка этого в языке, но я пометил его как небезопасный метод, потому что даже если данные обрабатываются правильно, шаг оценки может вернуть нулевой или нулевой указатель, что приведет к сбою программы. Мне нужен был способ индексировать строки с несколькими типами данных, а не только целые числа, а также хотел найти способ проверки данных перед их возвратом, чтобы предотвратить сбой программы. Это был недостаток дизайна самого языка, который впоследствии вызвал массу проблем. Но я также смог достаточно хорошо с этим поработать.
  • Шаг 4: Packet Framework →Следующее, с чем было, безусловно, сложнее всего работать: создание плагина с использованием библиотеки захвата пакетов Gopacket для Go, который мог бы взаимодействовать с C для управления вводом-выводом. а также работать со SkyLine напрямую. Как я упоминал ранее, цель сценариев плагинов и шаблонов плагинов, генерирующих SLC, заключалась в том, чтобы облегчить вам выбор между написанием плагинов Crystal, C, C++, Fortran, Go и Rust для языка, все которые будут вызываться и связываться. в окончательный сценарий Go, который будет скомпилирован как плагин с использованием функции режима сборки. Но это не значит, что это еще не было утомительно. Хотя движок смог правильно сгенерировать и настроить весь проект, у меня все еще была одна проблема — типы данных. Я упомянул в статье, посвященной внедрению и созданию собственных FFI, и рассказал об одной из самых сложных операций — преобразовании типов данных. Итак, поскольку я использовал Go, а библиотека Gopacket имела свои собственные типы, мне пришлось написать целую функцию и серверную часть, которые могли бы брать тип данных из Gopacket, например информацию о пакете, и маршалировать его в структуру для хранения. данные, затем передать их функции, известной как Conver(), которая преобразует тип данных из типа Golang, скажем, string в объект SkyLine String, а затем должным образом гарантирует, что данные не будут потеряны. Это было утомительно, потому что оно включало в себя постоянное тестирование данных, постоянный запуск сценариев и модулей и обеспечение безопасности потоков при запуске плагина и того, чтобы все работало так, как задумано, путем повторного сканирования сети или создания симуляций для запуска программы. столкнулись с несколькими проблемами, и одна из моих любимых, но наиболее раздражающих проблем заключалась в том, что я мог указать реализации и структуре FFI извлекать все функции на внутренней стороне этого модуля, что в основном позволяло вам указать механизму конфигурации предварительно загружать системы и извлекать функции или имена переменных определенного типа, затем на серверной части реализации FFI перезагрузите плагин, затем просканируйте список и убедитесь, что они все еще там, наконец, беря переменные и функции и перебирая список возможных типов, которые поддерживает мой язык затем возвращаем его для структурирования полноценной реализации, чтобы вам не приходилось постоянно использовать вызовы языка, такие как enviornment() и SkyEnv.Loader(), в качестве аргумента функции. Но в конечном итоге в программе Go я создал всего одну функцию, которая использовала серверную часть языка, известную как Call(), которая экспортировалась инфраструктурой FFI, а затем преобразовывала ее и возвращала типы. Обратите внимание, что структура пакетов не была просто структурой случайных пакетов, мне нужно было, чтобы она работала одновременно с несколькими потоками и задачами без сбоев, и чтобы внутри плагина было несколько систем, чтобы он правильно работал с серверной частью SkyLine. Это была задача, но это было очень весело, и в конце концов у меня не было проблем, связанных с внутренним кодом SkyLine, а просто с разработкой плагина, которые представляли собой простые ошибки потоковой обработки из-за ошибок в реализации нескольких каналов.