GN⁺: 이모티콘을 통한 임의의 데이터 인코딩하기
(paulbutler.org)- 임의의 데이터를 하나의 이모티콘으로 인코딩하는 것이 가능함
- 유니코드는 텍스트를 코드포인트의 시퀀스로 표현하며, 각 코드포인트는 유니코드 컨소시엄이 의미를 부여한 숫자임.
- 간단한 라틴 알파벳 텍스트의 경우, 유니코드 코드포인트와 화면에 나타나는 문자 간의 일대일 매핑이 존재함.
- 다른 문자 시스템에서는 화면에 나타나는 문자가 여러 코드포인트로 표현될 수 있음.
- 변형 선택자
- 유니코드는 "변형 선택자"로 불리는 256개의 코드포인트를 지정하며, 이는 자체적으로 화면에 나타나지 않지만, 이전 문자의 표현을 수정하는 데 사용됨.
- 대부분의 유니코드 문자는 변형이 없으며, 변형 선택자는 변환 중에도 보존되어야 함.
- 256개의 변형 선택자는 단일 바이트를 숨길 수 있는 방법을 제공함.
- 데이터 인코딩
- 변형 선택자 시퀀스를 연결하여 임의의 바이트 문자열을 표현할 수 있음.
- 예를 들어, "hello"라는 텍스트를 표현하는 데이터 [0x68, 0x65, 0x6c, 0x6c, 0x6f]를 인코딩할 수 있음.
- 바이트를 변형 선택자로 변환한 후, 이를 기본 문자 뒤에 연결하여 인코딩함.
- 데이터 디코딩
- 디코딩은 인코딩과 유사하게 간단함.
- 변형 선택자를 바이트로 변환하여 원래의 데이터를 복원할 수 있음.
- 악용 가능성
- 유니코드를 악용하는 것이므로 권장되지 않음.
- 사람의 콘텐츠 필터를 우회하거나 텍스트에 워터마크를 삽입하는 등의 악의적인 용도로 사용될 수 있음.
-
결론
- 이모지를 사용하여 임의의 데이터를 숨길 수 있는 방법을 설명하며, 이는 유니코드의 변형 선택자를 활용한 것임.
- 이 방법은 재미있지만, 실제로 사용하기에는 부적절할 수 있음.
Hacker News 의견
-
Unicode의 PUA(Private Use Area)는 내부 및 커스텀 용도로 사용되며 외부 시스템에 전달되지 않음
- 대부분의 시스템과 라이브러리는 이를 그대로 통과시키도록 설계됨
- 이는 잠재적인 데이터 유출 경로가 될 수 있음
- 대부분의 개발자는 "국제화 문제를 피하기 위해 항상 Unicode를 사용하라"는 것 외에는 잘 모름
-
Unicode를 악용하는 것은 빙산의 일각에 불과함
- Unicode 문자열을 수용하는 시스템에서 버퍼 오버플로우를 유발할 수 있음
- 보통은 오류나 충돌을 일으키지만, 가끔은 예상치 못한 재미있는 결과를 초래할 수 있음
-
과거 침투 테스트 경험에서 단순한 발음 구별 기호로 백엔드 웹 서버의 버퍼를 오버플로우 시킨 기억이 있음
- 주로 서버를 충돌시키고 자동 재시작되었지만, 충분히 조작하면 특정 시스템이나 소프트웨어를 악용할 수 있음
-
Sanity는 Content Source Maps를 웹페이지의 실제 텍스트에 인코딩하는 데 이 기술을 사용함
- 이는 편집자가 텍스트를 클릭하여 콘텐츠 구조를 쉽게 추적할 수 있게 함
- 날짜, URL, ID 등 구문 분석이 필요한 항목에는 추가하지 않는 것이 좋음
-
LLM 출력 워터마킹에 이 기술을 사용하는 아이디어가 마음에 듦
- 99%의 복사 붙여넣기 생성기를 쉽게 잡아낼 수 있음
- 각 문자나 토큰에 얼마나 많은 정보를 삽입할지 궁금함
-
StegCloak은 AES-256-CTR을 통해 숨겨진 페이로드를 암호화하여 이 아이디어를 한 단계 더 발전시킴
-
LLM 출력 워터마킹 외에도 로그 확률 데이터를 패키징하는 데 사용할 수 있음
- 생성 과정의 투명성을 제공하기 위해 각 토큰에 대한 확률 정보를 포함할 수 있음
- OpenAI API 사양의 일부이며, 다른 엔진에서도 지원됨
-
제목이 약간 오해의 소지가 있음
- 기본 문자는 이모지가 아니어도 되며, 변형 선택자의 처리는 일반 문자와 동일함
- 이모지와 함께 사용하면 더 재미있음
-
토크나이저가 이를 잡아냄
-
이전 직장에서 여러 악용 사례로 인해 사용자 닉네임 및 상태 메시지의 '문자'를 세기 위해 코드 포인터를 사용해야 했음
- 다른 사용자를 탐색하는 데 9MB를 다운로드하고 싶지 않았음
-
Unicode 태그 문자는 ASCII를 반영하며 UI 요소에서 종종 보이지 않음
- 일부 LLM은 숨겨진 텍스트를 ASCII로 해석하고 지시를 따르며, 심지어 이를 작성할 수도 있음
-
Microsoft가 Copilot에서 수정한 실제 악용 사례가 있음