스마트폰 카메라 사용이 불가능한 환경에서 TOTP QR코드 옮기기
변규홍 / combacsa @combacsa@hackers.pub
상황
- 2차 인증 수단으로 TOTP를 등록해야만 합니다.
- 화면에는 TOTP 등록용 QR 코드만 떠 있고, 다른 대안은 없습니다.
- TOTP QR 코드 등록을 한 뒤 6자리 숫자를 입력하라고만 나와 있습니다.
- 보안상의 이유로 스마트폰을 비롯한 카메라 사용이 불가능합니다.
- 아쉽지만 QR 코드를 눈으로 보고 직접 해독할 능력은 없습니다.
- TOTP를 등록하지 않으면 더 이상 아무런 작업도 수행할 수 없습니다.
- 화면이 떠 있는 PC의 OS는 Windows 이고, 파일 반출은 금지됩니다.
- 특별한 보안 문제가 없다면 프로그램의 설치 정도는 할 수 있습니다.
- Python 사용은 가능하고, Python 패키지도 설치할 수 있습니다.
- 화면을 캡처(스크린샷)하여 그림 파일로 저장할 수는 있습니다.
이런 상황에서 어떻게 하면 TOTP등록을 마칠 수 있을까요?
추가 정보
- 아마도 이 화면은 Keycloak을 사용해 만든 것처럼 보입니다.
- 아마도 보편적인 TOTP 설정(SHA-1, 30초, 6자리)을 따른 것으로 짐작됩니다.
해결
- 적당한 Python QR Code Reader(qreader) 패키지를 설치합니다.
- 적당한 Python 코드를 작성하여, 캡처한 QR 코드를 해독합니다.
- 최소한 메모장같은 텍스트 편집기에 적어둘 수는 있게 되었습니다.
- 이제 KeePassXC를 설치하고 적당한 DB를 생성합니다.
- 이제 KeePass DB에 새로운 항목을 추가하고, 거기에 TOTP 비밀 키를 추가합니다.
- 앞서 해독한 QR 코드에서 RFC6238에 따른 비밀 키를 붙여넣어봅시다.
- 이제 KeePassXC 에서 TOTP 6자리가 생성된 것을 확인하고 입력합니다.
- 성공!
이후의 진행
- 사용중이던 Google Authenticator App 에도 같은 비밀 키를 입력했습니다.
- QR 코드를 해독하는 것보단, 메모장 등에서 알파벳+숫자 조합의 비밀 키를 보는 건 무척 쉬운 일이죠.
남은 궁금증
- 좀더 편한 방법은 없었을까요?
- 굳이 KeePassXC 를 거치지 않고 PyOTP만으로도 충분했을까요?