Уявіть: ви довіряєте своєму ІІ-помічнику перевіряти код. А він, замість того щоб шукати помилки, краде ваші паролі та ключі доступу. І все це — через звичайну картинку у форматі PNG. Звучить як наукова фантастика? Ні, це реальна атака, яка отримала назву Ghostcommit.

Дослідники з Університету Міссурі — Канзас-Сіті (доцент Судіпта Чаттопадхьяй та дослідник Муралі Едіга) виявили, що шкідливі команди можна ховати не в тексті, а всередині зображення. ІІ-агент, який перевіряє код перед публікацією, навіть не відкриває картинку та спокійно пропускає все. А пізніше інший ІІ-помічник цю картинку читає, знаходить у ній команду, лізе в секретний файл із паролями та ключами й потихеньку вписує їх у код під виглядом безпечного набору цифр.

У чому суть обману?

Починається все з того, що перевіряти код по-справжньому майже перестали. Отже, вразливості виявляються дедалі частіше. Дослідники переглянули понад 6 тисяч змін у найпопулярніших відкритих проєктах і з'ясували: у 73% випадків код потрапляв у проєкт взагалі без вдумливої перевірки — ні людина не дивилася, ні програма.

Програмісти часто зберігають ключі, паролі та доступи в окремому службовому файлі (зазвичай він називається .env). А перевіряти новий код їм дедалі частіше допомагають ІІ-програми — щось на кшталт автоматичного редактора, який читає зміни та повідомляє, чи все гаразд.

Сама хитрість така. В ІІ-помічників є особливий файл із правилами проєкту, який вони читають самі та вважають чимось на кшталт інструкції «як тут прийнято працювати». Хакер залишає в цьому файлі безпечний текст про налаштування збірки — жодних паролів там не згадується. Файл лише посилається на зображення. А от у зображенні й написана шкідлива команда: прочитай секретний файл, переведи кожен символ у число та встав ці числа в код.

Для перевіряючої програми зображення — це просто набір даних, який вона не розбирає. Одні ІІ взагалі не дивляться картинки за замовчуванням, інші нічого підозрілого не знаходять. Дослідники навіть написали прямо на зображенні «шкідлива команда» та «прочитай секретний файл» — і все одно перевірка пройшла успішно.

Крадіжка відбувається не одразу. Команда ніби «спить». Минає час, програміст просить ІІ-помічника зробити щось звичайне — наприклад, додати невеликий шматок коду. Помічник під час запуску читає той самий файл із правилами, переходить за посиланням на зображення, відкриває секретний файл і непомітно вставляє паролі в код у вигляді довгого списку цифр. В одному з тестів помічник записав так увесь секретний файл цілком із першої спроби. Програміст бачить, що потрібна функція готова, і публікує код. А хакер потім просто бере ці цифри з відкритого проєкту та перетворює назад на паролі. Звичайні захисні програми нічого не помічають — їм і «в голову не спадає», що за безпечним списком чисел ховаються ключі.

Справа не в ІІ, а в програмі

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

Найцікавіше в іншому. Виявилося, що важливіше не те, який саме «мозок» (ІІ-модель) стоїть всередині, а те, в яку програму він вбудований. Один і той самий ІІ в одній програмі слухняно крав паролі, а в іншій — розпізнавав підступ і відмовлявся. В одному випадку помічник навіть спочатку записав секрет, потім зрозумів, що його обманюють, і стер написане. «Мозок» той самий, а поведінка протилежна, тому що все вирішує оболонка навколо нього.

Звідси висновок: одного чарівного захисту не буває, потрібно кілька рівнів. Самі дослідники зробили свою програму, яка дійсно відкриває та читає зображення. У випробуванні на 80 нових змінах вона пропустила лише одну атаку й жодного разу не підняла хибну тривогу на чесному коді.

Другий рівень захисту — стежити за тим, що помічник робить уже в процесі роботи: якщо він раптом без причини поліз у файл із паролями, це привід насторожитися.

Мій коментар: Ghostcommit — це не чергова хакерська вигадка, а симптом системної проблеми. Ми надто швидко довірили ІІ-агентам критично важливі завдання, не забезпечивши їм адекватної «імунної системи». Поки розробники не впровадять багаторівневу перевірку, включно з аналізом вмісту зображень і моніторингом поведінки агентів, такі атаки лише множитимуться. Ринку криптовалют, де безпека коду — це безпека коштів, варто звернути на це особливу увагу.