Showing posts with label скрипт. Show all posts
Showing posts with label скрипт. Show all posts

Sunday, 20 March 2022

Пишем диссектор Wireshark на Lua.

Всем привет.

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

К счастью, можно использовать плагин Wireshark Protocol Dissectors, чтобы добавить в Wireshark анализ дополнительного протокола. Раньше для этого требовалось создание диссектора на языке С, чтобы работать с конкретной версией Wireshark, но современные версии Wireshark поддерживают язык сценариев Lua. Сценарии, которые вы пишете на Lua, также будут работать с инструментом командной строки tshark.

Давайте рассмотрим как разработать простой диссектор на Lua для протокола SuperFunkyChat, который поддерживает открытый чат по протоколу 12345.

Перед разработкой диссектора убедитесь, что ваша копия Wireshark поддерживает Lua, проверив диалоговое окно "О программе" Wireshark в разделе Help → About Wireshark. Если вы запускаете Wireshark от имени привилегированного пользователя в Unix-подобной системе, то обычно поддержка Lua отключена по соображениям безопасности, и вам нужно будет настроить Wireshark для запуска от имени непривилегированного пользователя, чтобы перехватывать и запускать сценарии на Lua. Можно разрабатывать диссекторы практически для любого протокола, с которым будет работать Wireshark, включая TCP и UDP. Гораздо проще разработать диссекторы для протоколов UDP, чем для TCP, потому что каждый перехваченный пакет UDP обычно имеет все, что нужно диссектору. 

SuperFunkyChat поддерживает режим UDP, передавая клиенту параметр командной строки --udp при запуске, что довольно удобно. Отправьте этот параметр во время перехвата и увидите пакеты, подобные тем, что показаны на скриншоте. Обратите внимание, что Wireshark по ошибке пытается проанализировать трафик, используя протокол GVSP, как показано в столбце Protocol. Реализация собственного диссектора исправит эту ошибку.


Один из способов загрузить файлы Lua – поместить свои сценарии в каталог %APPDATA%\ireshark\plugins в Windows или каталог ~/.config/wirehark/plugins в Linux и macOS. Также можно загрузить сценарий Lua, указав его в командной строке следующим образом, заменив информацию о пути на расположение сценария:

Wireshark.exe -X lua_script:chat2.lua

Есть и другой способ - это в файле Init.lua проверить значение параметра

disable_lua = false

а в конце того же файла добавить ссылку на сам скрипт:

dofile(DATA_DIR.."chat2.lua")

Tuesday, 16 November 2021

Подписываем PowerShell скрипт с помощью сертификата.


Всем привет.

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

Для подписывания скриптов PowerShell нужно использовать специальный сертификат типа Code Signing. Этот сертификат может быть получен от внешнего коммерческого центра сертификации, внутреннего корпоративного Certificate Authority (CA) или можно даже самоподписанный сертификат.

Шаг 1 - сертификат.

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

Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert

Возьмем первый сертификат и сохраним его в переменную $cert.

$cert = (Get-ChildItem cert:\CurrentUser\my –CodeSigningCert)[0]

Затем можно использовать данный сертификат, чтобы подписать файл PS1 с вашим скриптом PowerShell:

Set-AuthenticodeSignature MyTest.ps1 -Certificate $cert

Или

Set-AuthenticodeSignature -Certificate $cert -FilePath MyTest.ps1

Теперь можно проверить, что скрипт подписан. Можно использовать командлет Get-AuthenticodeSignature  или открыть свойства PS1 файла и перейдти на вкладку Digital Signatures: Get-AuthenticodeSignature MyTest.ps1 | ft -AutoSize

Если при выполнении команды Set-AuthenticodeSignature появится предупреждение  UnknownError, значит наш сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя. Нужно переместить его в корневые сертификаты:

Move-Item -Path $cert.PSPath -Destination "Cert:\LocalMachine\Root"

Хотя наш сертификат теперь из доверенного Центра Сертификации, но он не от доверенного издателя. Поэтому следует его также скопировать в раздел Trusted Publishers с помощью обычной операции Copy-Paste в консоли Certificates.

Версия на печать

Популярное