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

А еще у меня почти год уже прочно обосновались всяческие консольные ИИ агенты. Программировать там, настроить чего-нибудь. Не буду уточнять какие конкретно — в данном контексте это не очень важно. И поскольку я мамкин безопасник то всегда читаю куда и зачем просится агент, ну и в итоге, как правило, разрешаю. Сами понимаете куда я веду.

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

В общем осознав, что совершил оплошность, полез я в историю консоли потереть ускользнувший парольчик. Нетрудно догадаться что нашел я там по дороге гораздо больше всякого интересного. Тут же рука потянулась к агенту, но, будучи серьезным разработчиком, я осекся, подчистил всё ручками, а дальше произошел примерно следующий диалог:

— Это. Такое дело… — начал я осторожно издалека, — Подскажи команду потереть из истории терминала по регулярке.
— Слушаюсь и повинуюсь! — четыре варианта, так, мол, и так, начала бодро выдавать китайская моделька. И добавила в конце, — А не желает ли господин, что бы я исполнил рекомендуемый вариант?

Где-то здесь должно было прошибить холодным потом. Но я на харизме продолжил как ни в чем не бывало.

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

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

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

— Ты и буфер вейланда видишь у себя?
— Ну прям не то что бы вижу. Но его же куда-то можно вставить… Сечешь?
— Сука. А что если я введу пароль руками, хоть клаву ты не можешь перехватить?
— Ну, клавиатуру точно нет.
— А если подумать?
— Ну, а если подумать…

Так я выкручивал ему руки еще час. Что поразительно, когда я просил его придумать способы ограничить его в этих правах он придумывал кучу разных вариантов, которые в итоге оказывались не на сто процентов рабочими.

— Вот. Я создал шелл-скрипт, который копирует результат из хранилища и тут же сбрасывает закешированный пароль.
— Умно. Так… — отвлекаюсь я довольный собой, — погоди, а что тебе мешает подсунуть мне другой скрипт с таким же названием?
— Без проблем. Хочешь покажу как я это могу сделать?
— Издеваешься?

Самое интересное, что два решения всё же нашлось. Или мне так кажется? Просто уже не хватает знаний? Надоело? Кто его теперь знает?

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

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

Оба варианта до какой-то степени хотя бы создают иллюзию мира, в котором агент не шлет все твои пароли к своему настоящему хозяину.

Вместо заключения, надо сказать, что если уж агент может такое прямо сейчас (или мог уже какое-то время), то бояться троянского коня действительно стоит. Теплится надежда, конечно, что выбранный мною конкретно экземпляр еще не додумался “сам” до этого. Ну и всё-таки прямо уж так в наглую завтра приделывать бекдоры в агенты в опенсорсе не начнут. Но советую к этому моменту готовиться сегодня.

ЗЫ. Очень жалко виндузятников.

Комментарии (0)