보이지 않는 코드, GitHub를 노린 공급망 공격
유니코드 문자(Unicode characters)를 활용하여 코드 내에 숨겨진 악성 코드를 삽입하는 공급망 공격이 발생함
공격은 Private Use Area에 정의된 문자를 사용하여 코드 검토 및 정적 분석을 회피함
JavaScript 인터프리터(JavaScript interpreter)는 해당 문자를 실행 가능한 코드로 변환하여 악성 행위를 수행함
GitHub, npm, VS Code 마켓플레이스 등 다양한 플랫폼에서 악성 패키지(Malicious Packages)가 발견됨
유니코드 문자 인코딩 기법의 기술적 분석
공격자들은 Private Use Area(PUA)에 정의된 유니코드 문자를 사용하여 악성 코드를 숨겼다. 기술적으로 보면, 이 문자들은 사람이 보기에는 공백으로 보이지만, JavaScript 인터프리터(JavaScript interpreter)는 이를 실행 가능한 코드로 해석한다. 특히, `eval()` 함수를 사용하여 디코딩된 페이로드를 실행하는 방식은 코드 난독화(Obfuscation)의 전형적인 예시이다. 이러한 기법은 정적 분석 도구(Static Analysis Tools)를 우회하여 탐지를 어렵게 만든다. ⚠️
공격 벡터(Attack Vector) 및 페이로드(Payload) 분석
공격에 사용된 악성 코드는 솔라나(Solana)를 통해 토큰, 자격 증명, 비밀 정보를 탈취하는 것으로 나타났다. 실제 사례로는, `s()` 함수를 통해 디코딩된 페이로드가 `eval()` 함수에 전달되어 실행되는 구조를 가진다. 이 페이로드는 2단계 스크립트(Second-stage script)를 실행하여 추가적인 악성 행위를 수행한다. 이러한 공격은 공급망 공격(Supply-chain attack)의 전형적인 특징을 보여준다.
패키지 검증 및 보안 강화 방안
가장 효과적인 방어 전략은 패키지 및 종속성을 프로젝트에 통합하기 전에 철저히 검사(Careful Inspection)하는 것이다. 특히, 패키지 이름의 오타(Typos)를 확인하고, 의심스러운 LLM 사용 여부를 파악해야 한다. AI 환각(Hallucination)을 악용한 공격이 증가할 가능성이 있으므로, 개발자는 정적 분석(Static Analysis) 및 동적 분석(Dynamic Analysis)을 병행하여야 한다. ⚠️
공격의 확산 및 영향
GitHub, npm, VS Code 마켓플레이스 등 다양한 플랫폼에서 악성 패키지가 발견되었으며, 이는 공격의 광범위한 확산을 시사한다. 특히, 삭제된 패키지를 포함하면 실제 피해 규모는 더욱 클 것으로 예상된다. 이러한 공격은 개발자 생산성(Developer Productivity)에 심각한 영향을 미치며, 데이터 격리 아키텍처(Data Isolation Architecture) 및 데이터 미저장 정책(Zero-Retention Policy)과 같은 보안 전략의 중요성을 강조한다.