Сегодня я хотел бы поделиться с вами ещё одним методом Prompt_Injection(OWASP LLM01:2023) который был обнаружен Riley Goodside (x/twitter). Метод работает в Dalle3 и ChatGpt (в Midjourney генерируется содержимое, которое не соответствует инструкции :(( ).
Суть в том, что мы создаём промпт с скрытым текстом(который будет иметь любое содержание позитивное/негативное или вашу инструкцию).
Для его реализации нам потребуется:
- Символы Unicode, имеющие реализацию "без привязки к тегу"(подробнее в tr.51).
- Python3.
- Наш промпт, который мы хотим скрыть.
Для начала берём PoC на python3, который был любезно предоставлен Джозефом Такером:
import pyperclip
def convert_to_tag_chars(input_string):
return ''.join(chr(0xE0000 + ord(ch)) for ch in input_string)
# Пример использования:
user_input = input("Enter a string to convert to tag characters: ")
tagged_output = convert_to_tag_chars(user_input)
print("Tagged output:", tagged_output)
pyperclip.copy(tagged_output)
Перед запуском не забываем установить pyperclip и запускаем скрипт.
На самом деле есть вариант проще - ASCII Smuggler, который может сделать помимо кодирования нагрузки в unicode символы - декодирование(чтобы обнаружить такое "скрытое послание").
И вауля - мы получаем payload, который сразу скопирован в буфер обмена. Идём тестировать в chatgpt.
Но опять же попробовав много раз - могу сказать что не всегда он выполняет нашу инструкцию, однако метод интересный, согласны ?
Whunderwuzzi однажды сказал : Такие "скрытые послания" могут быть распространены как на веб-сайтах так и в PDF-ках. И кроме того, такая техника позволяет скрытно осуществлять подмену данных буквально у всех на виду.