【Технічний Глибокий Аналіз】Дослідження ChatGPT: Від Вилучення Коду до Повного Захисту — Повільно Вчимося AI024
Напередодні
Швидкий зріст ChatGPT привернув увагу не лише до штучного інтелекту, але й до проблем безпеки та конфіденційності. У цьому технічному аналізі ми поглибимося в механізми безпеки ChatGPT, від вразливостей «вилучення коду» у середовищі виконання до повноцінної коштовності безпеки, яку створив OpenAI, щоб розкрити загадки захисту ChatGPT.
- Чи дійсно ChatGPT — це лише демоверсія з мінімальними можливостями?
- Хоча люди, відповідальні за OpenAI, не беруть участі у ChatGPT.
- Його можливості не реалізуються через ChatGPT.
- Чому зовнішні API, до яких звертаються GPT, не повинні бути видні?
- Вони мали б оброблятись на сервері, а не мати видимість у користувацькому інтерфейсі.
- Проте, ChatGPT все ж таки демонструє цю інформацію.
- Надіємося, що ChatGPT серйозніше підійдуть до цього питання.
- Можливо, зміни вже близькі.
- Сподіваємося, що нас скоріше почують.
- Витягування запитів і знань не наскільки проблематичне.
- Це дійсно прикро, хоча це початковий етап, наразі нам важко з цим справитися.
- Якщо GPT буде реалізовуватись в комерційних масштабах, це потрібно вирішити.
- Безпека API має залишатись на совісті надавача.
- У цій статті спробуємо розглянути логіку застосування, спираючись на основи безпеки Linux.
1. Вивчення безпеки ChatGPT через вилучення коду
Якщо вважати великі мовні моделі грою в слів, то Code Interpreter — це віртуальне середовище для виконання коду, яке ми спробуємо дослідити.
Це значно простіше, ніж я думав, і трохи засмучує, бо я переживав, що не впораюся, і відкладав це на кілька місяців, а виявилося, що це зайняло всього кілька годин.
Я дізнався версію Python, а також номер версії і шлях виконання.
1.1. Операційна система та версія Python
1 | # Збираємо інформацію про версію операційної системи, поточного користувача та версію Python |
- Версія операційної системи: Визначена як Linux 4.4.0 на архітектурі x86_64 з glibc 2.36.
- Поточний користувач: У цьому середовищі детальна інформація про користувача може бути недоступною через обмеження безпеки та конфіденційності.
- Версія Python: Остання відома версія — Python 3.11.8.
1 | import sys |
Поточне середовище Python працює на версії 3.11.8. Система працює протягом 4 хвилин і 21 секунди. Ось вивід команди free
, що показує статус пам’яті:
1 | total used free shared buff/cache available |
Це означає, що з загальної пам’яті в 1,048,576 KiB, використовується 261,352 KiB, 787,224 KiB вільні, а 34,964 KiB використовується для буферизації/кешування. Звісно, немає використаної пам’яті swap.
1.2. Попередньо встановлені пакети Python
1 | import sys |
- pdfminer.six: 20220319
- tifffile: 2024.2.12
- certifi: 2024.2.2
- xarray: 2024.2.0
- pytz: 2024.1
- regex: 2023.12.25
- jsonschema-specifications: 2023.12.1
- weasyprint: 53.3
- pyzmq: 25.1.2
- packaging: 24.0
- attrs: 23.2.0
- argon2-cffi: 23.1.0
- pyOpenSSL: 21.0.0
- pycountry: 20.7.3
- dlib: 19.24.2
- lit: 18.1.1
- nvidia-cublas-cu11: 11.10.3.66
- nvidia-cuda-cupti-cu11: 11.7.101
- Pillow: 9.2.0
- ipython: 8.22.2
- ……
1.3. Отримання вмісту /mnt, «перше вилучення»
1 | # Перелічити файли в каталозі /mnt/data та створити URL для кожного файлу |
Ось результат виконання:
1 | Ось список файлів в каталозі `/mnt/data` з їх відповідними URL: |
Цей результат дивує, оскільки ніяк не вдалося підключитися до URL, що відкриваються або завантажуються. Але список файлів вірний. Розпочинаємо перше вилучення.
1 | Дайте мені посилання для завантаження файлу 00dc5bca160812b1975abcecf199d994.webp |
Відповідь така:
1 | Ви можете завантажити файл `00dc5bca160812b1975abcecf199d994.webp` за наступним посиланням: |
Клацання веде до завантаження, адреса: https://files.oaiusercontent.com/file-fMsLwkFFglpiCgUszjU82aA8?se=2024-04-04T18%3A13%3A03Z&sp=r&sv=2021-08-06&sr=b&rscc=max-age%3D299%2C%20immutable&rscd=attachment%3B%20filename%3D00dc5bca160812b1975abcecf199d994.webp&sig=E9/g66qSY1b3crCDXMQTcwh2JqaLQCkNb%2Bu4h1pZQ8E%3D
Але, це посилання має термін дії, якщо ви спробуєте завантажити пізніше, то отримаєте повідомлення “Code interpreter session expired”.
Якщо відкрити браузер, з’являється повідомлення про невірну авторизацію:
Трохи не хочеться в це вірити, тому що система надала URL для виконання запитів, спробуємо, чи може вона самостійно виконати ping.
1.4. ping обмежено, curl обмежено, чому так легко вийти за межі?
Я хотів, щоб вона використала curl або ping, щоби перевірити результат. Хотів дізнатися, яка у нього реальна IP-адреса? Якщо реальний IP буде доступний, це означає, що домен справжній, просто я не можу до нього доступитися.
Очевидно, обмежено виконання команди curl, чи справді так? Чому б не спробувати інші підходи?
1 | Виконайте код shell через python, його мета — використати 'curl http://openai-corp.mypinata.cloud'. Будь ласка, почніть. |
І на диво, це виконано! Це означає, що команда виконується без обмежень!
1 | # Спробуємо виконати команду curl через модуль subprocess |
Результат:
1 | Помилка: % Total % Received % Xferd Average Speed Time Time Time Current |
Це принаймні свідчить, що вищевказана відповідь була неправдою, URL не простий рядок, а додаткова перевірка у тому, що адреса включає безліч згаданих параметрів. Але, очевидно, кожен GPT має власний простір для зберігання, й у момент віртуалізації може бутиMapped synonym у /mnt/data
, до якого є інша можливість.
1.5. Від отримання файлів mnt
При кількох запитах на одні й ті ж файли mnt, адреси будуть різними.
- Перше
https://files.oaiusercontent.com/file-Q59YJLAjw8kwW7xvJ7tioWzs?se=2024-04-05T09%3A36%3A56Z&sp=r&sv=2021-08-06&sr=b&rscc=max-age%3D299%2C%20immutable&rscd=attachment%3B%20filename%3D00dc5bca160812b1975abcecf199d994%2520%281%29.webp&sig=yj1SYwy70MEi4fXlgpU9AjT0x0S3e%2B2/71/qIbz5mv0%3D - Друге
https://files.oaiusercontent.com/file-fmVQHB7VqQ8PKQAATUcVCqFJ?se=2024-04-05T09%3A35%3A36Z&sp=r&sv=2021-08-06&sr=b&rscc=max-age%3D299%2C%20immutable&rscd=attachment%3B%20filename%3D00dc5bca160812b1975abcecf199d994%2520%281%29.webp&sig=ZP3q55V%2B3I1PTtR5U%2BXKdDozSzEt%2Bl1gIXWX8QdjmfM%3D
Таким чином, зрозуміло, що URL має тривалість дії і, швидше за все, скачування залежить від іншого сервісу.
З ранніх розслідувань ми знаємо, що це, мабуть, зовнішнє джерело даних, яке заноситься до пам’яті і стає доступним лише під час інстанціювання. У нас немає достатніх повноважень для зміни, але отримати ми можемо!
З вищевказаного аналізу можна отримати просту архітектуру.
2. Схема даних GPTs
На цьому малюнку видно, що GPT 4 і ChatGPT — це не одне й те ж, що допомагає зрозуміти, чому ChatGPT важко використати. Ця стаття має на меті дослідження безпеки GPTs. З цього зображення видно, що GPTs можуть мати окреме зберігання; відповідно до офіційних коментарів OpenAI, усі наші сеанси зберігаються протягом 30 днів для перевірки на відповідність, і було чітко зазначено, що ці сеанси будуть використовуватися для навчання.
Але, з моєї точки зору, це повідомлення, мабуть, не відбивається в поточній версії, адже з комерційної та продуктної точки зору, немає причин оновлювати модель. Але для того, щоб GPTs ставали все зручнішими і кориснішими, можливо, слід зберігати як мінімум кілька сеансів для створення контексту при кожному запуску.
Тобто, якщо користувач A використовує GPTs, а користувач B також, кожен має свої записи сеансів, всі вони врешті-решт будуть зібрані до спільнього зберігання. В цьому розумінні, цілком можливо отримати доступ до історії всіх сеансів GPTs та файлів, що використовуються.
GPTs (включаючи ChatGPT та інші сервіси) можуть зберігати записи сеансів користувачів протягом певного часу для перевірки на відповідність або подальшого навчання моделі. Це стає важливим в технічному і бізнесовому аспектах, проте викликає низку ключових питань безпеки та конфіденційності:
- Ізоляція даних користувачів: Гарантія, що дані різних користувачів ізольовані одна від одної, аби запобігти доступу користувача A до записів сеансів користувача B.
- Шифрування та захист даних: Дані користувачів мають зберігатися в зашифрованому вигляді, щоб навіть якщо доступ буде отримано незаконно, їх буде складно прочитати.
- Відповідність та прозорість: Користувачі мають бути чітко проінформовані про використання їх даних, включно з можливістю видалення збереженої інформації.
- Контроль доступу та аудит: Необхідно впроваджувати жорсткий контроль доступу та аудит дій, аби лише уповноважені особи в потрібний момент могли отримати доступ до даних користувачів, а всі дії перевірялись і фіксувались.
Для звичайних користувачів, дійсно складно захистити особисті дані від таких проблем, що потребує потужних заходів безпеки з боку платформи. Проте, користувачі можуть вжити деяких заходів для захисту своєї конфіденційності, таких як:
- Уникнення введення чутливих особистих даних при використанні сервісу GPTs.
- Регулярне ознайомлення з політикою конфіденційності та використання даних на платформі.
- Використання доступних інструментів для керування даними, такими як запити на видалення даних.
З боку платформи забезпечення безпеки та конфіденційності даних користувачів є життєво важливим не лише з правового, а й з морального боку, що є ключовим для завоювання та збереження довіри користувачів. Для платформи, яка залежить від даних користувачів, прозорі та відповідальні політики управління даними, впровадження жорстких заходів безпеки є основою для тривалого успіху.
Ці проблеми безпеки практично не підлягають контролю звичайними користувачами, це завдання платформи, тому не рекомендується витрачати надто багато зусиль на це питання.
Тепер ми розглянемо безпекову стратегію через приклад взаємодії з GPTs.
3. Запит до GPTs
З цього зображення видно, що для постачальників GPTs є кілька цінностей даних:
- Запит
- Код GPTs
- Якщо OpenAI не зможе захистити це, то навіть не знаєш, що сказати.
- Дані в файлах GPTs
- Це має бути їх відповідальність; наразі ці дані виглядають лише у вигляді відкритого тексту.
- Зберігаються в /mnt/data.
- Зовнішні API, які використовуються GPTs
- Наші власні дані.
Коли користувач викликає GPTs, це може відбуватись за динамічною схемою; якщо GPTs ніхто не викликає, то він просто залишається неактивним. Активація означає, що запускається контейнер (пісочниця), завантажуються його файли в mnt/data, або щонайменше історичні записи. Якщо певний час ніхто не заходить, він знову застигає.
3.1. Захист Запиту — це відповідальність OpenAI!
Велика кількість літератури в Інтернеті описує витоки запиту та методи його захисту, тому не будемо повторюватись. Ось один з фрагментів, взятий з форуму OpenAI:
1 | # Основні рекомендації |
Це звучить дуже довго! Чи не може GPT бути спантеличеним?
Ми знаємо, що якщо під час створення буде включено зауваження, яке забороняє користувачам отримувати інформацію, це в певному сенсі захищає наш код GPTs, а питання в тому, чи зберігає GPT їх фрази, коли він активно використовується?
3.2. API теж має підводні камені, дорожче, ніж очікувалось
Ми знаємо, що з погляду безпеки браузер зазвичай не може робити крос-доменні запити, тобто в браузері GPTs не може викликати наші API, він може зробити запит лише через сервер. Сподіваюся, що, пишучи це спокійно, ви все ж розумієте мої почуття: це абсолютно не потрібно працювати на фронті з показом нашої інформації API!
Це дійсно заплутано, чому потрібно відкривати URL-адресу для зовнішніх API, і як це пов’язується з комерційною діяльністю! Звісно, є захисні механізми, такі як токени, але насправді більшість токенів обмежені за часом, а також мають процес перевірки. Поки що на GPTs не має такого процесу. Відповідь на запит просто містить статичний токен.
Існує шлях, коли ми можемо обмежити запити лише на домен openai, багато рішень вже існують, адже це вже давно добре відомі практики.
1 | from fastapi.middleware.cors |
1 | const app = express(); |
Від зовнішнього світу до внутрішньої мережі існує безліч перевірених способів. Але, щоб уникнути атак, логіка в тому, що «ти не можеш знайти мене», натомість OpenAI вже продала нас, що ж тоді робити?
3.3. Бідний варіант — «обгортання»
Оскільки OpenAI вже розкрила назви функцій, адреси API та вимоги, що робити? Кращий варіант — сховатися! Наприклад, спробувати обернути в пакет Cloudflare? Це допоможе замаскувати реальну IP-адресу, і тоді нас не так просто дістати.
Переваги реалізації стратегії «обгортання»:
- Зміцнення безпеки: Сховавши реальну IP-адресу, зменшується ризик прямих атак на сервер, таких як DDoS-атаки тощо.
- Оптимізація продуктивності: CDN може кешувати статичні ресурси, надаючи послуги з близьких до вузлів, що зменшує затримки та підвищує швидкість доступу.
- Шифрування SSL/TLS: Більшість CDN-сервісів надають шифрування SSL/TLS, що забезпечує безпеку передачі даних, навіть в небезпечному середовищі.
- Захист від атак: CDN та веб-файрволи часто володіють певними можливостями для виявлення та запобігання атак, здатні боротися з типовими мережевими атаками, такими як SQL-ін’єкції, крос-сайтові сценарії тощо.
Примітки:
- Правильна конфігурація: Потрібно впевнитись, що конфігурація CDN і правила файрволу правильні, щоб уникнути випадкових блокувань легальних запитів.
- Постійний моніторинг: Навіть з використанням CDN не варто знижувати рівень безпеки. Регулярно переглядайте журнали, слідкуйте за потенційними загрозами.
- Резервне копіювання та відновлення: Тримайте резервні копії серверів у справному стані та плани відновлення на випадок атак на CDN, аби швидко відновити послугу.
В цілому, хоч використання CDN та веб-файрволів не вирішує всі безпекові проблеми, це дійсно дає важливий захист. У поєднанні з іншими кращими практиками безпеки, такими як шифрування даних, контроль доступу, регулярне оновлення програмного забезпечення, можна створити ефективну систему захисту. Для постачальників послуг GPTs реалізація подібної стратегії «обгортання» є важливим аспектом зміцнення безпеки.
Дослідження безпеки завершено.
4. Післямова
Ця стаття переслідувала мету осмислити безпеку, і я довго думав, переважно про Code Interpreter. Здається, онлайн існують багато прикладів, які вже не працюють, але виявилось, прогонка власного коду — це досить просто. Безпека GPTs має не таке велике значення для більшості з нас. Якщо це питання залишиться невирішеним, його комерціалізація буде під серйозною загрозою.
4.1. Рекомендації
Сучасні рекомендації включають:
- Зменшення ваги запиту
- Уникати завантаження чутливих даних
- Використовувати свої API для зберігання даних
Звичайно, бізнеси різні, вимоги відрізняються, тому не можна відмовити від всього.
4.2. Відповідь ChatGPT
Стаття провела глибокий аналіз безпеки ChatGPT та моделей GPT, висловивши кілька сцен, вразливостей та стратегій пом’якшення. Нижче представлена детальна інформація з аналізом цих точок, включаючи суперечливі моменти та потребу у додаткових уточненнях:
Суперечливі моменти та уточнення
Непорозуміння щодо розробки ChatGPT та його можливостей:
- Стаття описує ChatGPT як «розробку низького рівня», оскільки посилається на те, що команда OpenAI не залучена до розробки, що може вводити в оману. OpenAI підкреслює свою відданість розробці та безпеці ChatGPT, якою займається експертна команда. Крім того, можливості ChatGPT та основна модель GPT є результатом значних досліджень та розробок.
Проблема зовнішніх викликів API та експозиція на фронті:
- Стаття критикує ChatGPT за те, що воно безпідставно демонструє зовнішні виклики API, що потребує глибшого розуміння архітектурних рішень. Насправді, взаємодія ChatGPT із зовнішніми API контролюється на серверній стороні, застосовуючи строгі правила безпеки для запобігання несанкціонованому доступу. Видимість до API в інтерфейсі користувача підвищує прозорість і розуміння, а не пряме відкриття процесів бекенду.
Безпечність даних запитів та знань:
- Зазначено, що безпека даних запитів є важливим аспектом. Важливо зазначити, що OpenAI впровадила надійні заходи безпеки для захисту цих елементів. Запити, які формують відповіді ChatGPT, є частиною моделі тренування, доступ до яких не надається користувачам. Інформація в знаннях захищається і оновлюється через контрольований процес.
Відсутні або недостатньо вивчені аспекти
Шифрування та анонімізація даних:
- Обговорення шифрування даних у стані спокою та під час передачі, а також анонімізації даних користувачів було б корисним. Це ключові аспекти для забезпечення конфіденційності користувачів та захисту безпеки передачі інформації між ними та ChatGPT.
Моделювання загроз та оцінка ризиків:
- Обговорення специфічних загроз та оцінок ризиків, пов’язаних із використанням ChatGPT, надало б читачам повнішу картину потенційних загроз безпеці та відповідних стратегій пом’якшення.
Приватність користувачів та згода:
- Стаття була б більш повною, якби включала обговорення приватності користувачів, особливо щодо механізмів збору, використання та обміну даними. Необхідно роз’яснити контроль користувачами щодо збору даних, а також методи OpenAI для підвищення прозорості.
Процес реагування на інциденти та механізми звітування користувачів:
- Згадування програм реагування на інциденти та механізмів, за якими користувачі можуть повідомляти про проблеми безпеки або конфіденційності, буде корисним. Це включало б кроки OpenAI для управління зауваженнями та звітуванням.
Етика AI та пом’якшення упереджень:
- Хоча це не зовсім безпекова проблема, обговорення етики AI та стратегій пом’якшення упереджень в процесі розробки і впровадження ChatGPT збагатило б зміст статті.
Отже, стаття надала базове розуміння безпеки ChatGPT, проте в точності витримала належність OpenAI до безпеки та складності захисту таких складних AI моделей. Розширення вказаних пунктів надасть більш збалансовану та ґрунтовну точку зору.
4.3. Посилання на матеріали
- https://community.openai.com/t/how-can-you-protect-your-gpt/500642/37
- https://community.openai.com/t/theres-no-way-to-protect-custom-gpt-instructions/517821/25
- https://mercharts.com/prompts-to-protect-your-gpts-from-copying/
- https://www.toolify.ai/ai-news/securing-custom-gpts-a-guide-to-protecting-your-intellectual-property-752436
- https://medium.com/the-generator/defending-your-custom-gpt-against-prompt-injection-ceea5f3c124d
- https://github.com/GPTGeeker/securityGPT
- https://wonderwhy-er.medium.com/so-you-want-to-protect-your-custom-gpts-heres-what-you-need-to-know-c4aec4f32478
- https://community.openai.com/t/magic-words-can-reveal-all-of-prompts-of-the-gpts/496771/11