Перейти к содержанию
  • Язык
  • записей

    16
  • высказываний

    18
  • просмотров

    12 697

О блоге

Всем привет, буду время от времени выкладывать что-нибудь интересное.  Блог в таком формате веду впервые, так что не судите строго.

Записи в этом блоге

У многих честных подписчиков всеми нелюбимого нами Я-сервиса была ситуация, когда попадался где-то на стороне просто великолепнейший трек, который очень бы хотелось видеть у себя в плейлисте, но, к сожалению, в Яме его не оказывалось.  Как обычно, все и всегда связано с очередной капиталистической вонючей помойкой под названием "авторские права".

Хочу поделиться костылем, как добавить удаленный из Ямы трек, чтобы он был у Вас в плейлисте и на ПК, и на телефоне. 

Свой трек можно загрузить с ПК, открыв любой плейлист, в который хотим добавить наш трек. И, по кнопке "Загрузить" спокойно добавляем его.

В моем случае это будет удаленный шедевр из Атаки Титанов под название XL-TT. Найти его где-либо в принципе крайне сложно. Чтобы получить mp3-версию пришлось качать ее с YouTube. 

image.thumb.png.107523ccdfb7850a5bb625e09b508a7b.png

image.thumb.png.b6cba70884c5c5ec726b9c4333a3a6d5.png

image.png.8cb805623af52e26cc087dc8e4196c16.png

Казалось бы, успех....

image.thumb.png.ee6b6eebdeb04144c8eca0cccd78021f.png

....НО....

При попытке прослушать трек в мобильной версии Ямы может резко возникнуть ошибка, мол "этот трек недоступен, потому что авторские права и бла-бла-бла". А слушать-то, в основном, хочется именно с телефона. 

Как фиксить:

1. Удаляем трек из Ямы, который не прошел по АП.

2. Берем наш mp3-файл на ПК, жмем по нему правой кнопкой мыши, летим в "Свойства" во вкладку "Подробно":

image.png.e69283c94b15e5394dca9f851b558dfb.png

Видим, что, оказывается, в мета-данных файла сохранена вся информация и об исполнителе, и полное название. 

Все это надо удалить и, по возможности, заменить на другое. 

4. Тапаем по "Удаление свойств и личной информации":

5. Выбираем этот пункт, внизу жмем "ОК" :

image.png.006347412e3165a506ed02dca40b42dd.png

6. Теперь ищем созданную копию файла без мета-данных(копия файла помечается очень просто, словом "копия" в конце названия), которая появилась и снова переходим в "Свойства" - "Подробно":

image.png.7445dd90afc099970bb02e858d421723.png

7. Справа, напротив "Название", "Исполнитель" и тд и тп тапаем и вписываем все, что душе угодно:

image.png.383976926b795999d6bacec2cf934446.png

Затем жмем "Применить" и "ОК".

8. Переименовываем файл.

9. Заливаем на Яму

10. Вуа-ля - трек доступен теперь и в плейлисте на телефоне. 

 

Вот, собственно, и все, что я хотела рассказать. Всем спасибо, кто читал, пользуйтесь, кому полезно. ❤️

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

Одним из последствий стремительного прогресса в сфере технологий является рост числа угроз информационной безопасности. Сегодня мир стоит перед новой проблемой, которая возникла из-за активного развития квантовой механики. Создание достаточно мощного квантового компьютера может радикально изменить подходы к решению определенных вычислительных задач. Такие компьютеры представляют угрозу для существующих криптографических алгоритмов, ставя под сомнение безопасность коммуникационных протоколов, аутентификационных процедур, систем цифровых подписей и надежность блокчейн-записей, как это отмечается в многочисленных исследованиях . Еще в 1994 году был предложен алгоритм факторизации чисел на квантовом компьютере, который показал, что если у перехватчика данных будет квантовый компьютер, то он сможет намного быстрее решить задачу разложения чисел на простые сомножители. Это происходит не потому, что квантовый компьютер быстро работает, а потому, что ему нужно меньше операций для того, чтобы решить эту задачу.

Алгоритм RSA (Rivest-Shamir-Adleman) – это ассиметричный алгоритм шифрования, в основе которого как раз лежит математическая задача факторизации больших чисел. Сегодня он очень активно используется для защиты программного обеспечения, при обмене данными, а также в областях, где необходимо верифицировать отправителя. Кроме того, на RSA базируется защищенный протокол HTTPS, использование которого в России достигло 98% по данным Яндекс.Радара.

Безопасность таких алгоритмов, как RSA и ECC - Elliptic Curve Cryptography (криптография на эллиптических кривых) зависит от вычислительной сложности решения задач, которые легли в их основу при создании. С появлением квантовых компьютеров они станут уязвимыми. На Рис.1 представлено влияние квантовых вычислений на современные алгоритмы шифрования. Это значительно увеличило интерес государств к созданию квантового компьютера, многие крупные корпорации сегодня вкладывают огромные суммы в технологии, основанные на принципах квантовой механики. Все это ставит перед учеными задачу разработать защиту от новых сверхмощных технологий, которые могут быть использованы с целью кражи конфиденциальных данных.

Пара слов о квантовой механике в криптографии

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

Впервые концепция использования квантовых элементов для обеспечения безопасности передачи данных была выдвинута Стивеном Визнером в 1970 году. Через десять лет, под влиянием идей Визнера, Чарльз Беннет из IBM и Жиль Брассар из Университета Монреаля предложили схему передачи секретных ключей с использованием квантовых объектов (Рис.2). В 1984 году была выдвинута идея о создании принципиально надежного квантового коммуникационного канала. В результате возникла схема BB84, согласно которой два пользователя, Алиса и Боб, обмениваются фотонами с разной поляризацией через квантовый канал для передачи сообщений.

image.thumb.png.c679a61196e66d830d70e569f9b61b09.png

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

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

В протоколе BB84, который был предложен Беннетом и Брассаром в 1984 году базируется на принципе квантовой неопределенности. Согласно этому принципу, берется четыре квантовых состояния, которые образуют два базиса, любая попытка измерения которых приведет к изменению всей системы, т.е. будет обнаружено постороннее вмешательство. Состояния одного и того же базиса должны быть ортогональны, двух разных – неортогональны.

В BB84 носителям информации являются фотоны. Их поляризуют под углом в 0, 90, 45 или 135 градусов. Измерить возможно только сам базис:

- вертикальная поляризация (0 и 90 градусов)

- диагональной поляризация (45 и 135 градусов)

В условных обозначениях вертикальной поляризации присваивается «+», в диагональной – «x».

Кодируются состояния следующим образом:

image.thumb.png.3a90c75d0a23f070e8028c336922f433.png

Кодирование происходит в несколько этапов:

1.  На первом этапе отправитель (Алиса) случайным образом выбирает последовательность фотонов с разной поляризацией, формирует набор фотонов и передает его легитимному получателю (Бобу):

image.thumb.png.d9a691671ef14ee3e425c7f14793e86c.png

2.  Боб измеряет поляризацию поступающих к нему фотонов, но для каждого фотона базис измерений выбирается также случайно:

image.thumb.png.12430a8b445e23fb8ec090fd7a62cdc6.png

3.  Далее Боб передает Алисе по открытому каналу связи информацию о том, какие базисы он выбрал, обозначая их, согласно Таблице 1, как 0 и 1:

image.thumb.png.2b469660adee3e3f1ed4485f0e23551e.png

4.  Сравниваются исходная последовательность Алисы и полученная последовательность Боба. Совпадения фиксируются.

image.thumb.png.42512e5a850ccea4dd38d3e7f8253e64.png

Видим, что примерно в 50% случаев результаты будут совпадать.

image.thumb.png.0389a72e133fc96ef63b116fbdfeb262.png

5. После этого Алиса и Боб снова связываются по открытому каналу и выясняют, какие базисы у них совпали. Информация о несовпавших базисах отбрасывается. Последовательность совпавших базисов становится открытым ключом:

image.thumb.png.48320cbead204d9952fb2fa72bfee828.png

Открытый ключ получается одинаковым и у Алисы, и у Боба.

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

В практической реализации данного алгоритма все же есть ряд серьезных проблем, о которых я расскажу в записи про "Практическую реализацию". Проспойлерю, что из-за "темнового шума" на сегодняшний день используют не поляризацию. Фотоны фазируют.

Ну что ж, случилось чудо ^_^. Какой-то веселый парень решил поиграть в археолога, откопал нам скрижали древних шумеров в виде трояна семейства Kryptik и занес в чат Telegram.

Краткий поверхностный анализ показывает, что, хотя «криптики» и славились своими способностями скрываться от антивирусов в далеком 2015, сегодня у них это получается крайне плохо (Боже мой, да даже встроенный антивирус Windows справился с детектом).

image.thumb.png.99e9ebcd75c804a185ca6713ab78eafc.png

Однако, всегда полезно копнуть в историю и вспомнить, с какими угрозами кибербезопасности сталкивались в 2к15, чтобы лишний раз напомнить себе НЕ ОТКРЫВАТЬ КАКИЕ-ТО ЛЕВЫЕ НЕПОНЯТНЫЕ ФАЙЛЫ ЧЕРТ ЗНАЕТ, ОТ КОГО, И ЧЕРТ ЗНАЕТ, ОТКУДА.

Для начала, проанализируем те предупреждения, которые нам выкатили в Virus Total различные антивирусы. Файл был идентифицирован множеством антивирусных движков как вредоносный, что указывает на высокую вероятность того, что он действительно содержит вредоносное ПО.

image.png.d9904cf749fe44fddeab03ab415ae3c5.png

Итак, что же оно нашло:

- HEUR/AGEN.1364986 (Эвристическое обнаружение). Это означает, что файл вредоносный на основе его поведения или характеристик, а не на основе сигнатуры уже известного вируса.

- Win.Keylogger.Lazy-10031941-0 указывает на то, что файл может содержать кейлоггер(программу, которая записывает нажатия клавиш для кражи конфиденциальной информации).

- Trojan.Win32.Krypt, W32/Kryptik.HXDB!tr, и другие варианты с Kryptik указывает, что файл ассоциируется с троянским вирусом семейства Kryptik

- Trojan-Dropper.Win32.Convagent.gen и Trojan.Win32.Convagent.b!c . Это обозначение указывает на троянскую программу, которая может "выпускать" или устанавливать дополнительные вредоносные программы на зараженный компьютер.

- Trojan.Malware.300983.susgen и Trojan:Win32/Caynamer.A!ml – различные типы троянских угроз

- Static AI - Malicious Archive и Mal/Generic-S - общие вредоносные программы, обнаруженные статическим анализом или искусственным интеллектом.

Самая сладенькая часть тут, конечно, про Kryptik. Тот факт, что в связке с ним летит кейлоггер и конвагент – база.

Итак, что же такое этот Kryptik?

Гений, миллиардер, плейбой, филантроп (на самом деле, нет).

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

Вот несколько ключевых характеристик вируса семейства Kryptik:

1. Вирусы Kryptik часто являются полиморфными, что означает, что они могут изменять свой код при каждой установке, чтобы избегать обнаружения антивирусными программами, которые обычно ищут определенные сигнатуры в коде.

2. Чтобы скрыть свое присутствие, Kryptik может использовать руткиты — вредоносные программы, которые помогают скрыть вредоносное ПО от пользователя и антивирусных программ, изменяя стандартное поведение операционной системы.

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

4. Они могут воровать личные данные, такие как логины и пароли, данные кредитных карт и другую конфиденциальную информацию.

5. Зараженные машины могут быть присоединены к ботнету, сети зараженных компьютеров, которые могут быть управляемы злоумышленниками для проведения DDoS-атак, распространения спама или майнинга криптовалют.

6. Трояны Kryptik могут предоставлять злоумышленникам удаленный доступ к зараженному устройству, что позволяет проводить различные вредоносные операции без ведома пользователя.

7. В некоторых случаях Kryptik может обновлять себя для установки дополнительного вредоносного ПО или для обновления своих компонентов до последних версий, чтобы избежать обнаружения и устранения.

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

 

 

Еще немного про Telegram

Не так давно меня спросили в чатике: "Всмысле? А как можно вообще украсть аккаунт в Telegram?" И я решила реанимировать свою старую писанину, которую давно выкладывала на ныне похороненном ресурсе AprelTeam.

Итак, для начала, стоит дать краткую сводку о мессенджере...

Telegram - это бесплатное приложение для обмена сообщениями, которое было создано Павлом Дуровым в 2013 году. Одной из основных особенностей Telegram, благодаря которой мессенджер и набрал свою скандальную популярность, является упор на безопасность и конфиденциальность. Все сообщения в Telegram шифруются с использованием технологии end-to-end, что означает, что только отправитель и получатель могут просматривать содержимое сообщений.

Но так ли безопасен и конфиденциален Telegram на самом деле?

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

Клиентская часть – это то, что доступно нам, простым смертным, т.е. само приложение на смартфоне, Telegram Desktop для ПК, Telegram Web для браузера, а также множество сторонних официальных и неофициальных клиентов.

Серверная же часть выполняет роль хранилища. Все файлы и переписки хранятся не непосредственно на устройстве, как это, например, реализовано в том же не менее популярном WhatsApp, а на серверах Павла Дурова (что уже является для знающих людей небольшим спойлером к ответу на вопрос «А так ли все анонимно?»). Это удобно в формате того, что можно получать доступ к перепискам и медиа с разных устройств, однако стоит понимать, что комфорт и безопасность, как правило, понятия несочетаемые.

Многие также вспомнят про функцию секретных чатов, где сообщения автоматически удаляются после определенного периода времени, выбранного пользователем. Ну, сделаем вид, что так и есть, что пара ключей RSA действительно используется лишь обычными юзерами и к этим ключам нет доступа у сотрудников Telegram, что секретные чаты нигде не хранятся, а уничтожаются. Хотя, ругань Дурова с ФСБ в 2018 году, которая даже повлекла за собой временную блокировку мессенджера на территории РФ, не на пустом месте явно возникла.

Также примечательно исключение Telegram из блокировок Роскомнадзора по прошествии определенного периода. 

А как воруют аккаунты telegram?

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

Эти файлы обычно создаются и используются автоматически приложением Telegram и не предназначены для прямого доступа или редактирования пользователем.

Сделано все это для удобства, дабы при каждом новом входе в приложение, например, в Desktop-версии для ПК, не приходилось заново вводить проверочный код с телефона, пароль (если настроена двухфакторная аутентификация), либо сканировать QR-код.

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

Папка со всеми этими данными называется tdata.

В Windows ее можно найти по пути C:\Users\<UserName>\AppData\Roaming\Telegram Desktop,

в Linux – home/<user>/.local/share/Telegram Desktop

Для доступа не требуется ни специальных прав, ни ввода пароля

Пример получения доступа к tdata в Linux:

image.thumb.png.0d194219ea8047f976f337342705273b.png

Для чайников: доступ к папке с сессией был получен под правами обычного пользователя, а не superuser.

Это значит, что теоретически, имея под рукой лишь нейросеть, которая напишет скрипт, немного азарта и парочку трюков, можно скомуниздить папку tdata своего друга на какой-нибудь файлообменник (ну, например, MEGA), а затем и войти в его аккаунт Telegram, скопировав полученное содержимое папки tdata у себя в эту же папку.

Может быть, кто-то даже уже успешно опробовал этот метод. (¬_¬'')ԅ( ̄ε ̄ԅ) .

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

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

Спойлер

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

Пару слов об анонимности и безопасности в целом.

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

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

Открываем настройки -> Конфиденциальность.

image.thumb.png.aff2835dc6709b200eca34e94ec57ef9.png

Проверяем, чтобы не было никаких незнакомых «Авторизованных сайтов» и «Активных сеансов».

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

Код-пароль тоже можно поставить.

Далее самая важная часть, в которой лучше вырубить все на максималку:

image.thumb.png.dd2879fe1e2e159ec23c73fd3cb6f107.png

Лучше никому ничего не разрешать, а позже доверенных лиц добавлять в исключения. Ваши фото очень красивые, но по ним искать информацию еще легче, чем по id в Telegram.

ЕСТЕСТВЕННО необходимо скрывать номер телефона. Более того, номер телефона позже можно не показывать даже тем, кого добавляете в контакты. Лучше всего, чтобы его знали только избранные по работе, лучшие друзья и семья. Больше он, поверьте, никому не нужен, кроме мошенников.

Ну и, очень приятная и полезная для некоторых функция:

image.thumb.png.ed29c7a72fab762a6040e354a26fbe97.png

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

Общие советы:

- выработайте привычку любую ссылку, любой файл, который вам прислали, перед открытием не полениться и проверить на сайте VirusTotal (гуглится, ссылку оставлять не буду). Естественно, если там все красное, то открывать файл/переходить на сайт, точно не стоит. Сначала очень сильно раздражает, лень проверять, но со временем входит в привычку и помогает избежать огромного количества неприятностей. Стоит понимать, что даже если ссылку скинул кто-то из родни, не факт, что они сами не словили себе вирус и даже не поняли этого;

- не выкладывайте информацию о себе в интернете. Деанонимизация - это не всегда работа ботов. Часто люди и сами говорят о себе слишком много. Город, родственники, универ/школа/работа, материальное положение - обо всем этом стоит либо молчать, либо бессовестно врать. Персонажа в интернете можно заблокировать и забыть, но если он соединится с вашей физической, а не виртуальной реальностью, избавиться от него будет не так просто;

- общайтесь нормально. Чем более агрессивную социальную позицию занимает человек, чем больше людей его ненавидят, тем скорее он станет мишенью для троллей и борцунов за честь, долг, справедливость, Родину, какого-нибудь из Богов и так далее. А когда озлобленные  хомячки объединяются с целью кого-то "наказать", у них это, как правило, получается. Потому, лучше всегда стараться оставаться в рамках адекватного общения и всеми силами стараться никого лишний раз сильно не злить.

Безусловно, эти рекомендации не исчерпывающие, однако это та основа, которая необходима для более-менее безопасного существования в Telegram и интернете в целом.

Анонимность, конечно, миф, однако, он стоит того, чтобы однажды сделать его правдой.

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

Однако, к 1 декабря у меня уже должен быть на руках почти чистовик с курсовой по дисциплине, в которой я не просто нихрена не разбираюсь, так еще и чтобы разобраться в ней, надо быть по-настоящему умным. Или хитрым. Надо написать какую-то штуку на питоне по Machine Learning с уклоном в ИБ. И, о Боже, какое совпадение, что примерно месяц до этого я начала облизываться и погружаться в дебри такой прекрасной штуки как pwnagotchi. Наконец-то удастся совместить приятное с полезным.

Итак, у меня примерно 6 недель на то, чтобы собрать безумный серотемный проект и выдать его не за приблуду для мамкиного хацкера, стилизованную по тамагочи, но за «рабочий инструмент для тестирования безопасности wi-fi сетей на базе искусственного интеллекта».

Глава 1. Краткое описание.

Pwnagotchi — это проект с открытым исходным кодом, который превращает устройства на базе Raspberry Pi (чаще всего Raspberry Pi Zero W) в автономного бота для анализа Wi-Fi сетей и захвата хендшейков (handshakes) для последующего взлома. Используя машинное обучение, Pwnagotchi оптимизирует свои действия для более эффективного сбора хендшейков, необходимых для расшифровки паролей.

Основные особенности Pwnagotchi:

  • Использует алгоритмы машинного обучения с подкреплением для максимизации эффективности, запоминая наиболее эффективные методы захвата;
  • Постоянно анализирует сети Wi-Fi поблизости, переключается между режимами работы, чтобы собрать как можно больше данных;
  • Выводит на экран "эмоции" в зависимости от окружающей обстановки, реагируя на изменения;
  • Устройства Pwnagotchi могут обмениваться данными и "общаться" друг с другом, если находятся рядом.

Как же работает AI?

В Pwnagotchi используется алгоритм Q-Learning  для обучения тому, какие действия лучше всего предпринимать в зависимости от  Wi-Fi среды. Это помогает устройству накапливать как можно больше хендшейков, необходимых для взлома паролей Wi-Fi, оптимизируя процесс.

Как работает Q-Learning в Pwnagotchi

1.     Определение среды и состояния:

В Pwnagotchi среда — это окружение с Wi-Fi сетями, которое меняется со временем, когда устройство перемещается или находит новые сети.

Состояние в контексте Pwnagotchi включает данные о доступных сетях, такие как число Wi-Fi сетей вокруг, уровень сигнала, количество уже собранных хендшейков и пр.

2.     Действия агента:

Pwnagotchi может оставаться на месте и все равно продолжать сбор данных, может менять настройки для улучшения захвата хендшейков, а также сохранять хендшейки или менять стратегию (например, перейти в режим "умного" сканирования).

3.     Награды:

В прошивку  pwnagotchi заложена система наград: успешно захваченный хендшейк - +1 к карме, готчи молодец. А если устройство тратит много времени в одном и том же месте с минимальными результатами, оно получает минус к карме. 

Такая система помогает устройству понимать, какие действия стоит повторять, а какие — нет.

Теперь совсем немного математики

В Q-Learning алгоритме Q-функция (или функция качества действия) служит для оценки, насколько "хорошо" или "выгодно" предпринимать определенное действие в заданном состоянии. Эта функция постепенно "учится" выбирать те действия, которые приносят максимальную награду в долгосрочной перспективе.

Q-функция обозначается как Q(s,α ), где s — текущее состояние, а α — выбранное действие.

Значение Q(s,α )представляет собой ожидаемую совокупную награду, если устройство начнет с состояния s, выберет действие α, а в последствии будет следовать оптимальной стратегии (выбирать лучшие действия).

Цель Q-Learning состоит в том, чтобы найти такую Q-функцию, которая даст агенту оптимальный способ действий в любой ситуации, чтобы максимизировать общую награду.

Чтобы обновить значение Q-функции для определенной пары состояние-действие (s,α), используется следующая формула:

image.thumb.png.0f8182ddb6f27b27a56e77e122d2f22d.png

Как работает обновление Q-функции:

1. Получение текущего значения Q(s,α)

2. Получение награды r за выполнение действия aaa в состоянии s.

3. Оценка будущей выгоды:

Устройство рассчитывает максимальную будущую награду, которую он может получить, находясь в новом состоянии s′ и выбирая оптимальное действие α′.

4. Обновление Q-функции:

Разница между текущим значением Q(s,α) и тем, что агент ожидает получить с учетом новой информации, умножается на α и добавляется к текущему значению Q(s,α).

Почему это работает

Каждое обновление приближает значение Q(s,α) к его истинному значению, соответствующему сумме наград за лучший возможный путь из текущего состояния. С увеличением количества эпизодов Q-значения сходятся к оптимальным, и агент начинает выбирать действия, которые дают наилучший результат в долгосрочной перспективе.

Ну вот, собственно, я и рассказала кратко и поверхностно о том, что собираюсь писать в своей курсовой. Естественно, объем работы ожидается колоссальный, я без понятия, как все это реализую в соло за 6 недель, но все же очень постараюсь, ибо этот проект с pwnagotchi станет просто невъе...отличной отправной точкой на пути к магистерской. 

P.S. Да, кстати, поскольку эта штука в перспективе (если я не заленюсь) может вырасти в весьма опасную игрушку, я нарекаю его "Годжик". Кликуха необходима еще и потому, что даже пока писала эту короткую статью, утомилась печатать "p w n a g o t c h i" каждый раз. 

Ну что, мальчики и девочки, давненько я не щитпостила в свой блог, пора исправить это досадное недоразумение.

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

Во-первых, ChatGPT нагло соврал, когда сообщил, что pwnagotchi работает на Q-Learning. Он может, но не по умолчанию. По умолчанию он юзает алгоритм A2C.

Цитата

A2C (Advantage Actor-Critic) — это один из алгоритмов обучения с подкреплением (Reinforcement Learning), который принадлежит семейству методов Actor-Critic. Он улучшает классический подход с использованием двух основных компонент: Actor (Актор) и Critic (Критик). A2C выделяется простотой и эффективностью благодаря синхронной обработке данных.

Во-вторых, обучать модель все же куда как легче и быстрее на рандомно генерируемых данных, т.к. в реальных условиях получение данных извне может быть связано с множеством ограничений, включая недостаток доступных Wi-Fi сетей, ограниченные возможности оборудования, длительное время сбора, закон 🙄🥱.

Генерировать необходимо состояния агента, включая:

-  число деаутов (deauth, deauthentication) отправленных агентом за эпоху (деаут-пакеты используются для отключения устройств от их точки доступа Wi-Fi, чтобы инициировать повторное подключение, что позволяет агенту перехватывать хендшейки);

- Количество успешных ассоциаций агента с точками доступа Wi-Fi. Если число ассоциаций велико, агент активно работает с точками доступа;

- Число перехваченных хендшейков (handshakes) за эпоху. Хендшейк — это ключевой элемент для атаки на WPA/WPA2 сети, так как он содержит данные для последующего подбора пароля. Большое значение указывает на продуктивность агента;

и т.д.

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

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

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

image.png

Параметры:

image.png

Изменение количества эпох

Для проведения первого «эксперимента» с изменением параметров модели в части количества эпох необходимо скорректировать следующий блок кода в файле train.py.

Изначально в работе рассматривается 10 эпох. Для того, что б посмотреть, как количество эпох влияет на модель, меняем его на 50:

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
    dataset_path = 'random_data.json'
    agent = MockAgent()
    environment = Environment(dataset_path=dataset_path, agent=agent)

    rewards = []
    params_log = []

    state = environment.reset()
    for epoch in range(50):
        action = environment.action_space.sample()
        state, reward, done, _ = environment.step(action)
        rewards.append(reward)
        params_log.append(environment.last['params'])
        if done:
            break

Результаты:

image.png

Изменение функции расчета награды

Второй «эксперимент» направлен на изучение влияния изменения функции вычисления наград на итоговые результаты. Для этого код в файле reward.py был изменен.

Данная функция вычисляет награду на основе нескольких параметров, характеризующих поведение агента и его взаимодействие с окружающей средой, используя вероятностные и пропорциональные зависимости. С математической точки зрения функция включает дроби, где числители и знаменатели нормализуют параметры состояния. В основе формулы лежит произведение доли успешных рукопожатий (num_handshakes), активного времени (active_for_epochs), и вероятности избегания нежелательных состояний (blind_for_epochs и missed_interactions), все из которых делятся на общее количество эпох или взаимодействий для нормализации. Дополнительно учитываются эмоциональные параметры (sad_for_epochs и bored_for_epochs), которые уменьшают награду, если их значения велики. Эти параметры тоже нормализуются через общее число эпох, и их влияние нивелируется, если они меньше заданного порога. Использование множителей 1e−20 предотвращает деление на ноль.

Результаты:

image.png

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

Изменение нормализации и денормализации данных

Третий «эксперимент» раскрывает влияние различных методов нормализации данных на итоговые результаты обучения. Для этого в файле parameter.py были произведены следующие изменения:

1. Добавление динамической регулировки диапазона параметра (adjust_bounds)

Метод adjust_bounds изменяет диапазон значений параметра (min_value, max_value) в зависимости от текущей эпохи. Это позволяет адаптировать параметры во время тренировки в зависимости от прогресса.

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

def adjust_bounds(self, epoch):
    """
    Динамически изменяет диапазон параметра в зависимости от текущей эпохи.
    :param epoch: Текущая эпоха.
    """
    self.min_value = max(self.min_value - epoch * 0.1, -100)
    self.max_value = min(self.max_value + epoch * 0.1, 100)
    logging.info(f"Parameter {self.name}: Adjusted bounds to [{self.min_value}, {self.max_value}]")

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

2. Изменение вычисления "размера пространства" (space_size)

Метод space_size теперь учитывает возможный сдвиг (с учетом scale_factor), который определяется в зависимости от минимального значения параметра.

scale_factor корректируется в зависимости от минимального значения параметра:

def space_size(self):
    return self.max_value + self.scale_factor

Это позволяет более гибко масштабировать пространство действий, учитывая сдвиг диапазона значений.

3. Добавление шума при преобразовании действия в значение параметра (to_param_value)

В методе to_param_value добавлен случайный шум в значение параметра:

self.value += random.uniform(-0.05, 0.05)  # Добавление шума

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

4. Нелинейное преобразование в методе denormalize

Метод denormalize теперь включает нелинейное преобразование:

nonlinear_scale = normalized**2  # Нелинейное преобразование

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

5. Учет важности параметров в denormalize

В методе denormalize добавлена учет важности параметров из метаданных (meta):

importance = self.meta.get('importance', 1.0)
value *= importance

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

Результаты:

image.png

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

Очевидно, Pwnagotchi – крайне перспективный проект, который можно превратить в очень и очень мощный инструмент автоматического тестирования безопасности. Горизонты простираются в огромном количестве направлений, причем не только в сторону написания плагинов, добавления всяких программно-аппаратных приблуд или «взломов» Bluetooth и IoT. У него есть возможность интеграции с такими титанами ИБ, как Wireshark и Metasploit. Однако, потребуется немало времени и умственных усилий, чтобы разобраться в этом проекте. Не каждый готов тратить на такое время и силы...

Как здорово, что большую часть времени мне все равно нехер делать, и я, скорее всего, продолжу вас тут радовать своими щитпостами.

Важная сводка

Мы разместили cookie-файлы на твоё устройство, чтобы помочь сделать этот форум лучше. Ты можешь корректировать своё управление cookie-файлами, или же продолжить без каких-либо корректировок.

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

Досье

Навигация

Розыск

Розыск

Настройка push-извещений браузера

Chrome (Android)
  1. Нажми на значок замка рядом с адресной строкой.
  2. Нажми Разрешения → Извещения.
  3. Корректируй свои предпочтения.
Chrome (Desktop)
  1. Нажми на значок замка в адресной строке.
  2. Выбери Управление сайта.
  3. Разыщи Изввещения и корректируй свои предпочтения.