보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

QR Code 로그인 환경에서 발생할 수 있는 Session Hijacking

2016.09.07

13,827

보안관제사업부 보안분석팀 조혁주

 


1. 개요


QR Code는 흑백 격자무늬 패턴으로 정보를 나타내는 이차원 바코드로서 생활에 필요한 제품 이력을 확인하거나, 로그인 정보를 입력하지 않고 익명으로 인증할 수 있는 SQRL(Secure, Quick, Reliable Login)에 쓰인다. QR Code는 무차별 공격 등의 위협으로부터 인증 정보가 유출되는 것을 방지할 수 있기 때문에 SQRL 프로토콜에 활용된다. SQRL은 안전하고 빠른 인증을 지원하지만, MITM(Man in the middle) 공격을 통한 사용자 QR Code 변조가 가능할 경우, 모바일 어플리케이션의 인증 정보가 Hijacking 될 수 있는 위험이 있다.
이 Hijacking 공격은 QRLJacking(Quick Response Code Login Jacking)이라고 불리고 있으며 근본적인 해결책은 마련되어 있지 않다.

 


[그림 1] QRLJacking (Quick Response Code Login Jacking)

 


2. QRLJacking (Quick Response Code Login Jacking)


1) SQRL

SQRL은 안전하고, 빠르고 신뢰할 수 있는 로그인을 지원하는 프로토콜이다. SQRL은 OAuth 및 OpenID의 인증 결함을 개선하기 위해 등장했다. 제 3자에게 인증정보를 노출하지 않고 인증이 가능하며, 로그인 과정이 단순화 된 것이 특징이다.

 

 

[그림 2] SQRL (Secure, Quick, Reliable Login)

 

SQRL을 구현하는 대표적인 방법으로는 QR Code를 활용하는 방법이다. 모바일 디바이스에서 인증한 인증 정보를 QR Code를 통해 PC에서 빠르고 안전하게 인증할 수 있다.

 

 

[그림 3] SQRL 프로토콜 프로세스


2) 공격 시나리오 : QR Code 기반의 로그인 세션 탈취

“WhatsApp” 모바일 어플리케이션에서 인증을 완료한 후 QR Code를 통해 SQRL 인증하는 과정에서 발생할 수 있는 QRLJacking 공격을 살펴보도록 한다.

 

 

[그림 4] QR Code를 통해 PC의 “WhatsApp”에서 SQRL 인증


■ 공격자
① 사용자의 인증 값을 수신 받기 위한 QR Code를 JavaScript를 통해 발급받는다. 해당 QR Code는 20초 단위로 초기화되기 때문에 JavaScript를 이용하여 Reflesh하는 과정이 필요하다. 발급된 QR Code는 JavaScript에 의하여 이미지 파일로 저장·갱신 된다.(https://web.whatsapp.com)
    - firefox, GreaseMonkey(User Script)

 



[그림 5] “WhatsApp” QR Code 3초마다 갱신·저장


· GreaseMonkey를 통해 삽입한 JavaScript를 web.whatsapp.com에서 실행한다. (firefox-security.csp.enable=false)
   - 3초마다 QR Code를 192.168.80.135(공격자 웹 서버)에 갱신·저장

· qrHandler.php → tmp.jpg(QR Code) → phishing.html(tmp.jpg 5초마다 로드)


 ② 사용자 PC에 출력되는 QR Code를 공격자가 생성한 QR Code로 변조하기 위하여 MITM 공격을 진행한다. (arpspoof / ettercap)


 ③ 사용자가 https://web.whatsapp.com 접근 시 공격자가 생성한 phishing.html (JavaScript를 통해 저장한 QR Code 이미지를 로드 하는) 페이지로 접근할 수 있도록 DNS Spoofing 공격을 진행한다. (dnsspoof)

 



[그림 6] 사용자 PC MITM 공격

 

· sysctl net.ipv4.ip_forward=1 (or fragrouter –B1)

· arpspoof –i eth0 –t 192.168.80.131 192.168.80.2

· dnsspoof –i eth0 –f /tmp/host.txt

· service apache2 restart

 

■ 사용자
① 사용자가 PC에서 https://web.whatsapp.com 웹 사이트에 접속할 때 조작된 DNS 정보에 의하여 공격자의 QR Code 이미지가 로드 되는 phishing.html 웹 페이지에 접속하게 된다.

 

 

[그림 7] 사용자에게 공격자 QR Code 응답

 

② “WhatsApp” 모바일 어플리케이션에서 응답된 QR Code를 스캔 할 경우, 공격자(192.168.80.135) 서버에 인증정보가 전송되어 공격자 브라우저에서 인증할 수 있다. QRLJacking 공격을 통해 사용자 모바일 디바이스의  GPS 정보, IMEI, SIM 정보 등의 민감정보가 유출될 수 있다.

 

 

[그림 8] 사용자가 QR Code 스캔 시 공격자와 세션 공유

 

3) 대응 방안

SQRL 프로토콜을 통한 인증을 사용하지 않는 환경일 경우 QRLJacking 공격에 영향을 받지 않는다. SQRL 프로토콜을 사용하는 환경에서는 QRLJacking 공격에 대응하기 위한 대응이 필요하지만 근본적인 해결책은 제시되지 않고 않지 않지만, QRLJacking 공격에 대한 대응방법으로 QRLJacking의 전제 조건인 MITM 공격에 대한 대응방법과 사용자를 식별하는 인증 사운드를 통해 QRLJacking 공격을 완화시키는 방법이 권고되고 있다.

 

① MITM (ARP Spoofing, DNS Spoofing) 대응 방안
 - ARP Table에서 Gateway의 정보를 정적(Static)으로 설정한다.

 

 c:> arp -s 192.168.80.2 00-50-fb-8b-e1

 


② 인증 사운드를 통한 QRLJacking 공격을 완화하기 위한 권장 사항
 - 인증 사운드라는 인증 토큰을 통해 사용자 식별 값 보호
 - 공개키 알고리즘을 통해 사용자 식별
 - 식별된 사용자에게 QR Code를 통한 PC와 모바일 어플리케이션 세션 연결(공유)

 



[그림 9] 인증 사운드를 통한 사용자 식별

 


3. 참고 자료


[1] SQRL (Secure, Quick, Reliable Login)
https://ko.wikipedia.org/wiki/SQRL

[2] OWASP QRLJacking
https://www.owasp.org/index.php/QRLJacking

[3] QRLJacking – Hackernews
http://thehackernews.com/2016/07/qrljacking-hacking-qr-code.html

[4] Github - A new Social Engineering Attack Vector
https://github.com/OWASP/QRLJacking

[5] QR Code
https://ko.wikipedia.org/wiki/QR_%EC%BD%94%EB%93%9C