QR 코드는 제품 포장부터 항공권 탑승권에 이르기까지 자동으로 스캔해야 하는 거의 모든 분야에서 사용되는 기계 판독형 데이터 형식입니다. QR 코드가 일상 곳곳에 존재하기 때문에, 커스텀 QR 코드에 익스플로잇(취약점 공격 코드)을 담아 일반적인 취약점을 공격하는 것이 가능합니다. 실제로 해커들은 QRGen이라는 도구를 사용해 악성 QR 코드를 생성하고, 이를 통해 취약한 장치를 표적으로 삼습니다.
QR 코드 공격이 강력한 이유는 사람이 스캔하지 않고서는 QR 코드에 담긴 정보를 읽거나 이해할 수 없기 때문입니다. 코드를 해독하려는 시도를 하는 장치라면 그 안에 숨겨진 익스플로잇에 그대로 노출될 수 있습니다. 사람은 실제로 스캔하기 전까지는 해당 QR 코드가 악성인지 식별할 수 없으며, QR 코드가 담을 수 있는 비교적 큰 페이로드 용량은 특히 취약한 장치와 결합될 때 공격자에게 유리하게 작용합니다. QRGen은 페이로드를 입력받아 Python으로 이를 QR 코드 형태로 인코딩해 주는 도구입니다.
QRGen에는 널리 알려진 다양한 익스플로잇이 내장된 라이브러리가 포함되어 있어, 공격 대상과 동일한 장치를 직접 확보해 어떤 익스플로잇이 작동하는지 하나씩 확인할 수 있다면 매우 유용합니다. QR 코드 스캐너를 사용하는 시스템을 감사하려는 침투 테스터라면 동일한 스캐너를 구입해 내장된 익스플로잇들을 순차적으로 실행해 보는 것만으로도 스캐너가 예상치 못한 방식으로 작동하도록 만들 수 있습니다.
QRGen에서 사용할 수 있는 페이로드 카테고리는 스크립트 실행 시 -l 플래그와 번호를 함께 지정하여 확인할 수 있습니다. 번호별 페이로드 유형은 아래와 같습니다.
명령어 삽입 (Command Injection)
포맷 스트링 (Format String)
문자열 퍼징 (String Fuzzing)
SQL 삽입 (SQL Injection)
디렉터리 순회 (Directory Traversal)
LFI (로컬 파일 포함)
XSS (교차 사이트 스크립팅)
QRGen 설치하기
QRGen을 사용하려면 먼저 GitHub에서 저장소를 다운로드해야 합니다. 터미널 창에서 아래 명령어를 차례로 실행하세요.
git clone https://github.com/h0nus/QRGen
cd QRGen
pip3 install -r requirements.txt
페이로드 유형별 악성 QR 코드 생성하기
패키지 설치가 완료되면 아래와 같이 python3 qrgen.py 명령어로 스크립트를 실행할 수 있습니다.

먼저 포맷 스트링(Format String) 페이로드를 담은 QR 코드를 생성해 보겠습니다. 이를 위해 다음 인수와 함께 QRGen을 실행합니다.

명령을 실행하면 일련의 QR 코드들이 생성되며, 가장 마지막에 생성된 코드가 자동으로 열리게 됩니다.
