За последние годы ландшафт вредоносного ПО заметно изменился. Всё реже атакующие пишут «классические» трояны с самописными протоколами и агрессивной обфускацией. Всё чаще они используют легитимные инструменты, написанные на современных языках и предназначенные для DevOps-задач, удалённого администрирования и проброса портов.
Один из таких примеров — бинарник open.exe, написанный на Go и формально являющийся клиентом сервиса Openport. В рамках расследования инцидента этот файл был обнаружен в роли постоянного агента удалённого доступа, что делает его типичным представителем класса dual-use malware.
В статье — подробный технический разбор бинарника, его архитектуры, сетевого взаимодействия и причин, по которым подобные инструменты становятся всё более популярными у злоумышленников.
Хеши исследуемого образца
MD5:
212AEBCC151CCE67FCC3D9F2AE6FC2C6SHA-1:
B86913F78023426FE6F2BD441AE288340F360845SHA-256:
AE34DA228224B0B28D8842D20D2674AFD4229789244D9863B4DCA0ED49AB1B4F
Первое впечатление: ничего подозрительного?
На первый взгляд open.exe не выглядит как вредонос:
бинарник не упакован;
отсутствует обфускация строк;
имена функций, пакетов и логов читаемы;
используются популярные Go-библиотеки с GitHub;
присутствует CLI с документацией.
Именно за счёт этого такие инструменты часто проходят мимо сигнатурных средств защиты — они выглядят как обычное инфраструктурное ПО.
Общая архитектура
open.exe — это Go-клиент Openport, предназначенный для:
поднятия прямых и обратных TCP-туннелей;
управления сессиями через WebSocket и HTTP/2;
проброса портов через SSH;
автоматического восстановления соединений;
работы через прокси (включая SOCKS5).
В легитимном сценарии это удобно для разработчиков. В атаке — идеально подходит для роли C2-агента.
Используемые зависимости
В бинарнике явно присутствуют следующие пакеты:
github.com/openportio/openport-gogithub.com/gorilla/websocketgolang.org/x/crypto/sshgolang.org/x/net/proxygithub.com/jinzhu/gormgithub.com/sirupsen/logrusgopkg.in/natefinch/lumberjack.v2github.com/spf13/pflag
Отдельно стоит отметить отсутствие кастомных криптографических реализаций — всё построено на стандартных и проверенных библиотеках.
Инициализация и работа с файловой системой
При запуске open.exe выполняет стандартный bootstrap:
создаёт домашние каталоги (
EnsureHomeFolderExists);генерирует криптографические ключи (
CreateKeys);создаёт конфигурационные файлы через
os.Create;инициализирует локальную базу данных;
настраивает логирование с ротацией (
lumberjack).
В бинарнике встречаются строки вида:
Created directory %s
Важно: никаких эксплойтов, подмен системных файлов или попыток эскалации прав здесь нет. Всё выглядит как обычная инициализация сервиса.
Хранение состояния: SQLite внутри агента
Для хранения состояния используется SQLite. Это ещё один признак «нормального» софта, но именно здесь кроется важная деталь.
В базе данных хранятся:
активные туннели;
параметры сессий;
история подключений;
флаги автоперезапуска.
Реализованы методы:
InitDBSaveDeleteSessionGetSessionGetAllActiveGetSessionsToRestartEnrichSessionWithHistory
База перечитывается при старте, что позволяет восстанавливать удалённый доступ после перезагрузки системы без классических механизмов автозапуска.
Сетевое взаимодействие: как выглядит C2
Протоколы
open.exe использует сразу несколько стандартных протоколов:
WebSocket (WSS) — основной канал управления;
HTTP/2 — подтверждается сигнатурами
PRI * HTTP/2.0;TLS — с поддержкой session tickets;
SSH — для форвардинга и keep-alive.
В бинарнике присутствуют строки, связанные с TLS-рукопожатием:
key expansionclient finishedserver finishedunable to generate random session ticket key
Это обычная TLS-логика, но для средств мониторинга трафика такой канал выглядит как обычный зашифрованный HTTPS.
Туннели и управление каналами
Ключевые функции:
ConnectCreateTunnelForwardPortInitForwardStartReverseTunnelKeepAlive
Поддерживаются:
прямые и обратные туннели;
отмена форвардинга (
cancel-tcpip-forward);автоматический рестарт соединений.
Фактически агент предоставляет оператору полноценный удалённый сетевой доступ к хосту.
Локальные управляющие HTTP-эндпоинты
Интересная деталь — open.exe поднимает локальные служебные эндпоинты:
Они используются для получения информации о состоянии агента и корректного завершения работы. Для защиты это дополнительный поведенческий индикатор.
Регистрация и привязка к инфраструктуре
В бинарнике явно присутствует ссылка:
Регистрация агента осуществляется через токен. После регистрации система привязывается к аккаунту, и оператор получает возможность:
создавать и удалять туннели;
просматривать активные сессии;
перезапускать соединения;
управлять несколькими хостами централизованно.
CLI: удобство, которое работает против защиты
open.exe — это полноценная CLI-утилита с командами:
forwardlistrestart-sessionskillkill-allregister <token>register-key <token>rmversion
Поддерживаются флаги вроде --restart-on-reboot, что превращает агент в персистентный компонент, даже без автозагрузки через реестр или планировщик.
Почему это можно считать вредоносом
Важно подчеркнуть: Openport сам по себе не является вредоносным ПО.
Однако в анализируемом случае он:
был установлен без ведома пользователя;
использовался для постоянного удалённого доступа;
работал как C2-агент;
маскировался под служебный компонент;
не требовал эксплуатации уязвимостей.
Это классический пример dual-use malware и подхода Living-off-the-Land.
Признаки компрометации (IoC)
Процессы
open.exe
Файлы
каталоги Openport (home/config)
SQLite-база с сессиями
логи
lumberjack
Сеть
TLS/WSS-соединения с инфраструктурой
openport.ioлокальные эндпоинты
/info,/exit
Поведение
автоматическое восстановление туннелей
отсутствие файлов-дропперов
длительные зашифрованные соединения
Почему таких инструментов будет больше
Go-утилиты вроде open.exe идеально подходят атакующим:
кроссплатформенность;
статическая сборка;
минимум зависимостей;
нормальный TLS;
легитимный сетевой профиль;
отсутствие «красных флагов» в коде.
Для защитников это означает одно: сигнатурный подход больше не работает. Важнее контекст, поведение и понимание того, зачем процессу нужен тот или иной функционал.
Заключение
open.exe — отличный пример того, как современное вредоносное ПО перестаёт выглядеть как вредоносное. Это не эксплойт, не троян и не вирус в классическом понимании, а аккуратно встроенный инструмент удалённого доступа, использующий доверенные технологии.
Именно такие случаи показывают, что граница между «админским инструментом» и «вредоносом» сегодня проходит не по коду, а по контексту применения.
