QR 코드에 숨은 악성 패키지 발견···“개발자도 주요 타깃”

뉴스
2025.09.254분
개발 도구깃허브멀웨어

새롭게 발견된 악성 패키지가 다층 난독화 기법을 통해 단순 유틸리티 라이브러리로 위장한 것으로 나타났다. 악성코드는 QR 코드 속에 숨겨진 채 배포되고 있다.

Credit: Shutterstock

QR 코드는 마케팅 콘텐츠를 전달하거나 사용자를 웹사이트와 앱으로 안내하는 간편한 수단으로 널리 활용된다. 그러나 이제는 악성 코드를 숨기는 데에도 쓰이고 있다.

사이버보안 기업 소켓(Socket)의 위협 연구팀은 기업용 앱이나 웹사이트에 통합되어 방문자의 쿠키 속 비밀번호를 탈취할 수 있는 ‘정교한 백도어 메커니즘’을 발견했다고 밝혔다. 이 공격은 QR 코드에 숨겨진 코드를 통해 실행된다.

페즈박스(Fezbox)라고 불리는 해당 악성 패키지는 다층 난독화 기법을 적용해 유틸리티 라이브러리로 위장했다. 이 가운데 특히 눈에 띄는 것은 QR 코드를 단순한 링크 전달 수단이 아니라 스테가노그래피(데이터 은닉 기법) 목적으로 사용한 점이다. 스테가노그래피는 보통 사진이나 소리 같은 평범한 매체 안에 비밀 데이터를 숨겨 겉으로는 아무것도 없는 것처럼 보이게 하는 기법이다.

소켓 연구원 올리비아 브라운은 블로그 게시물을 통해 “스테가노그래피는 비밀 파일을 있는 그대로 감추는 수법으로, QR 코드가 여기에 매우 적합하다. 추가 난독화 수단으로 QR 코드를 사용한 것은 위협 행위자의 창의적 변형”이라고 설명했다.

무의미해 보이는 코드에 은닉

페즈박스 패키지는 자바스크립트(JavaScript)의 인기 패키지 매니저인 npm을 악용하며, 역순 문자열, QR 코드, 은닉 페이로드 등 3겹의 난독화를 적용했다. 정교한 악성코드 전달 메커니즘은 특히 데이터 밀도가 높고 읽기 어려운 QR 이미지에 코드를 숨기고 브라우저 쿠키에서 사용자 이름과 비밀번호를 수집한다.

페즈박스는 자신을 ‘공통 헬퍼 함수’로 구성된 자바스크립트/타입스크립트 유틸리티 라이브러리라고 소개하며, 기능별 모듈로 나눠 사용자가 원하는 것만 선택할 수 있다고 주장했다. 중국어로 작성된 텍스트 파일에는 ‘타입스크립트 타입’, ‘고성능’, ‘테스트’ 같은 문구가 포함됐으며, QR 코드 모듈에 대해서는 코드를 생성 및 분석하고 필요한 프로그램 구성 요소를 자동으로 불러올 수 있다고 설명했다.

하지만 라이브러리를 단순히 임포트하는 행동만으로 백엔드 프로세스가 원격에 있는 QR 이미지 속 숨겨진 코드를 자동으로 실행한다는 사실은 명시하지 않았다.

해당 코드는 압축 처리돼 있으며, 겉보기에 무해한 무동작(no-op) 명령어 블록 속에 숨어있어 보안 점검을 우회할 수 있었다. 또한 코드 내부에는 앱이 개발 환경에서 실행되는지 확인하는 조건이 포함돼 있었다. 브라운은 “개발 환경일 경우 이 코드는 아무 동작도 하지 않는다”라며, 흔히 사용되는 은닉 전술이라고 설명했다.

이어 그는 “위협 행위자는 가상 환경이나 비운영 환경에서 발견될 위험을 피하려 하기 때문에 공격이 언제 어떻게 실행되는지를 제한하는 가드레일을 종종 추가한다”라고 언급했다.

소켓에 따르면 해당 패키지는 120초 지연 후에 QR 이미지에서 코드를 다운로드해 실행한다.

해당 코드는 ‘document.cookie’에서 쿠키를 읽고, 사용자 이름과 비밀번호가 있을 경우 이를 추출한 뒤 문자열을 역순으로 바꾼다. 가령 ‘password’는 ‘drowssap’가 된다. 브라운은 문자열 역순 처리가 ‘전형적인 분석 회피 은닉 기법’이라며, 일반적으로 URL을 탐지하는 분석 도구를 우회할 수 있지만 절대적인 것은 아니라고 설명했다.

만약 쿠키에 사용자 이름과 비밀번호가 모두 들어있다면, 이 패키지는 ‘HTTPS POST’ 명령으로 해당 정보를 외부로 전송한다. 그렇지 않으면 “별다른 동작을 하지 않고 조용히 종료한다”라고 브라운은 설명했다.

주요 유틸리티 함수는 겉보기에는 정상으로 보였지만, 브라운은 내부의 난독화 패턴이 원격 코드 실행(Remote Code Execution, RCE)을 가능하게 하는 치명적 보안 위협이 될 수 있다고 지적했다. 다만 그는 “대부분 앱이 더 이상 쿠키에 비밀번호를 저장하지 않기 때문에 악성코드의 실제 성공률은 판단하기 어렵다”라고 덧붙였다.

“주목할 만한 위협 수준”

해당 패키지는 이미 깃허브에서 삭제돼 악성 코드로 분류됐다. 그러나 이는 위협 행위자들이 QR 코드, 오디오, 비디오 파일 등을 점점 더 교묘하게 악용하고 있음을 보여준다. 특히 공격자는 실행 가능한 코드를 QR 코드 속에 숨김으로써 개발자들이 일반적으로 신뢰하는 QR 파싱 도구의 허점을 악용하고 있다.

보세론 시큐리티(Beauceron Security)의 데이비드 시플리는 “팬데믹을 거치며 QR 코드는 일상적으로 쓰이게 됐고, 이제 그 흐름을 되돌릴 수는 없다. 공격자들은 최근 공격에서 점점 더 영리해지고 있으며, 이런 수법이 가까운 시일 내에 사라질 기미는 보이지 않는다”라고 말했다.

그는 이번 사례를 “주목할 만한 위협 수준”이라고 평가하며, 개발자들도 위협 행위자가 노릴 수 있는 중요한 비밀 자산을 갖고 있다는 사실을 인식해야 한다고 경고했다. 시플리는 “일반 사용자를 대상으로 한 피싱은 오래전부터 쉬운 일이었지만, 범죄자가 개발자까지 속일 수 있다면 자격 증명을 구하기 위해 더 이상 힘을 들이지 않을 것”이라고 지적했다.

그는 이어 “보안팀과 개발팀은 개발자가 항상 주의를 기울이도록 교육시키고, 코드 검토 과정에서 반드시 사람이 개입하도록 하는 보안 문화를 정착시켜야 한다”라고 조언했다.
dl-ciokorea@foundryco.com