1. TouchEnxKey
- 라온시큐어사의 키보드 보안 프로그램 - 키보드 입력을 암호화하여 키로거 방지
- 브라우저 확장 프로그램으로 설치
1.1 TouchEnxKey 동작 방식
- TouchEnxKey를 사용할 경우 웹사이트에서 실행되는 자바스크립트 코드와 일부 서버 측 코드로 구성된 nxKey SDK와 함께 동작
① nxKey SDK를 사용하는 웹 사이트에서 암호 필드를 입력
② nxKey SDK의 JavaScript 코드가 이를 감지하여 로컬 nxKey 응용 프로그램 호출
③ nxKey 응용 프로그램은 윈도우즈 커널에서 장치 드라이버를 활성화
④ 장치 드라이버가 모든 키보드 입력을 가로채 nxKey 응용 프로그램으로 전송
⑤ nxKey 응용 프로그램은 키보드 입력을 암호화하여 nxKey SDK의 JavaScript 코드로 전송
⑥ 자바스크립트 코드는 암호화된 데이터를 숨겨진 형태의 필드에 작성
※ 실제 암호 필드는 더미 텍스트만 수신
⑦ 로그인 자격 증명 입력을 완료하고 "로그인" 클릭
⑧ 암호화된 키보드 입력은 다른 데이터와 함께 서버로 전송
⑨ nxKey SDK의 서버 측 부분은 암호를 해독하고 일반 텍스트 암호를 검색
> 사용자의 입력값을 nxKey가 가로채어 암호화 및 숨겨진 필드에 작성
> 서버측 nxKey SDK에서 복호화 및 로그인 시도 검증
> 키로거는 nxKey에 의해 암호화된 데이터만을 볼 수 있으며, 개인 키가 없으므로 복호화를 수행하지 못함
- 과거 : 브라우저 확장을 통해 웹 사이트와 응용 프로그램 사이에서 동작하며 요청과 응답을 중재
- 현재 : 웹 사이트에서 웹 소켓 API를 사용하여 응용 프로그램과 직접 통신 즉, 브라우저 확장은 더 이상 필요하지 않음
> 일부 은행 사이트들은 브라우저 확장에 의존하는 오래된 코드를 사용
2. 취약점
- 설계상 주요 로깅 기능을 포함하고 있으며, 해당 기능에 대한 액세스를 충분히 제한하지 못함
- 단순 서비스 거부에서부터 원격 코드 실행을 유발하는 다양한 버그가 존재
2.1 TouchEn 확장 기능을 악용하여 은행 웹 사이트 공격
- eval()은 문자로 표현된 JavaScript 코드를 실행하는 함수
- TouchEn browser extension의 코드 중 주석처리된 eval()이 존재 > 코드 품질의 문제가 있을 가능성
result = JSON.parse(result);
var cbfunction = result.callback;
var reply = JSON.stringify(result.reply);
var script_str = cbfunction + "(" + reply + ");";
//eval(script_str);
if(typeof window[cbfunction] == 'function')
{
window[cbfunction](reply);
}
- 콜백 메커니즘에서 악용 가능성이 발견되었으며, 악의적인 웹 페이지를 콜백 하도록 조작이 쉽게 가능하였음
※ 일부 이벤트에대해 웹 사이트에서 setcallback 요청을 전송
- 조작을 위해서는 2가지 조건이 필요
① 대상 웹 페이지에 id="setcallback" 매개변수가 존재해야 함
> 이는, nxKey SDK를 사용하는 웹 사이트만 공격할 수 있다는 것을 의미
※ WebSockets를 통한 통신은 이 요소를 생성하지 않음 즉, 최신 nxKey SDK를 사용하는 웹 사이트는 영향을 받지 않음
② 콜백은 특정 탭으로 전달
> 현재 탭에 로드된 페이지, 예를 들어 프레임에 로드된 페이지만 공격할 수 있다는 것을 의미
- 응용 프로그램이 요청을 처리하기 위해 JSON 파서를 사용하는 동안 응답은 sprintf_s()를 통해 처리되며, 이때 필터링이 수행되지 않음
> id 값은 응용 프로그램의 응답에 복사 - 취약점 발생 지점
> 공격자는 tabid 값을 알아낼 필요 有 - TouchEn 확장이 노출하는 tabid로 추측 또는 빈 값으로 설정(빈 값일 경우 현재 활성 탭으로 설정)
- 위 과정에 따른 공격 시나리오는 다음과 같음
① 은행 웹 사이트를 열어 활성 탭 생성
② 페이지가 로드될 때까지 기다렸다가 id="setcallback" 요소 확인
③ 일부 기능에 대한 콜백을 설정하기 위해 TouchEn 확장을 통해 콜백 메시지를 보내는 동시에 JSON 응답 속성을 "tabid":" 및 "reply":"malicious payload"로 조작하여 요청
④ 악성 페이로드를 매개 변수로 하여 은행 웹사이트에서 콜백 기능이 호출
2.2 웹 사이트의 키로깅 기능 사용
- 공격자 스스로 TouchEnxKey를 사용한 웹 페이지를 구성 - 피싱과 유사한 형태로 판단됨.
- 웹 사이트에서 TouchEnxKey를 사용하기 위해서는 유효한 라이센스가 필요
- TouchEnxKey는 요청 정보의 유효성이 아닌 라이선스 정보를 통해 식별
> TouchEnxKey가 암호화를 위한 공개 키를 수신하지 못하면 암호화하지 않고 평문을 전송
> 해당 방법은 가로챈 입력이 실제 유효한 사이트에 도달하지 못하므로, 의심을 유발할 수 있음
socket.send(JSON.stringify({
"tabid": "whatever",
"init": "get_versions",
"m": "nxkey",
"origin": "https://www.example.com",
"lic": "eyJ2ZXJzaW9uIjoiMS4wIiwiaXNzdWVfZGF0ZSI6IjIwMzAwMTAxMTIwMDAwIiwicHJvdG9jb2xfbmFtZSI6InRvdWNoZW5leCIsInV1aWQiOiIwMTIzNDU2Nzg5YWJjZGVmIiwibGljZW5zZSI6IldlMkVtUDZjajhOUVIvTk81L3VNQXRVd0EwQzB1RXFzRnRsTVQ1Y29FVkJpSTlYdXZCL1VCVVlHWlY2MVBGdnYvVUJlb1N6ZitSY285Q1d6UUZWSFlCcXhOcGxiZDI3Z2d0bFJNOUhETzdzPSJ9"
}));
2.3 응용프로그램 자체 공격
- TouchEnxKey는 sprintf_s() 또는 strcpy_s()와 같은 버퍼 오버플로우에 상대적으로 안전한 함수를 사용
> 충분히 큰 버퍼를 제공하지 못하면 잘못된 매개 변수 처리기가 호출되며, 이로 인해 애플리케이션이 다운이 발생
- 모든 JSON 파서 중에서 nxKey 애플리케이션 개발자들은 C로 작성된 것을 선택(https://github.com/json-parser/json-parser/)
> github의 업데이트 사항이 반영되지 않음 (2014.01~)
> 2014년 6월 수정이 반영되지 않음
- 취약한 OpenSSL 사용
> OpenSSL 1.0.2c를 사용중으로 이는 2015년에 공개된 버전이며, 2020년 1월 지원이 종료된 버전
2.4 도우미 응용 프로그램 남용
- nxKey가 키보드 입력을 가로챌 때마다 CKAgentNXE.exe 도우미 애플리케이션이 시작
- CKAgentNXE.exe가 무결성 수준이 낮은 프로세스에서 액세스할 수 있도록 IPC 개체에 대한 보안 설명자를 설정함
- 또한, 레지스트리 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Low Rights\ElevationPolicy 경로 추가
> TouchEn Key가 Internet Explorer에서 ActiveX로 실행될 때 무결성 수준은 낮음으로 실행됨
2.5 드라이버의 키로깅 기능을 직접 액세스
- TouchEnxKey 응용 프로그램(드라이버로부터 받은 키보드 입력을 암호화하는 응용 프로그램)은 사용자 권한으로 실행
- 드라이버 통신을 하는 라이브러리인 TKPPM.dll은 Temida를 사용하여 난독화
> 런타임에 디버거를 연결하면 이미 해독된 TKAppm.dll 메모리를 저장하고 분석을 위해 결과를 Gidra에 로드가 가능하였다고 함
3. 조치
- 블라디미르 팔란트
> 2022년 10월 4일 KrCERT에 보고
> KrCERT는 약 2주 후에 내 보고서를 RaonSecure에 전달
- 라온시큐어 관계자
> 해당 내용은 이미 작년에 KrCert를 통해 모두 전달받음
> 취약점을 보완하는 패치가 모두 이뤄진 상태
> 보완된 프로그램을 각 은행을 통해 배포하는 절차만 남겨놓은 상황
> 2023.02 업데이트 공개
① TouchEn nxKey 및 CrossEXService에서 발생하는 크로스 사이트 스크립팅(XSS) 취약점
※ CrossEXService: TouchEn nxKey 설치 시 함께 설치되는 프로그램으로 TouchEn nxKey 재설치 시 함께 업데이트 됨
② 위즈베라의 Veraport V3에서 발생하는 정보 노출 취약점
제품명 | 영향받는 버전 | 해결 버전 |
TouchEn nxKey | 1.0.0.78 이하 | 1.0.0.82 |
CrossEXService | 1.0.2.9 이하 | 1.0.2.10 |
Veraport V3 | v3702~v3863 | v3864 |
> 해결 방안
① 서비스 운영자: 라온시큐어, 위즈베라를 통해 최신버전 교체
② 서비스 이용자
- TouchEn nxKey, CrossEXService, Veraport V3가 설치되어 있는 경우 제거 후 최신버전 업데이트
※ [제어판]-[프로그램]-[프로그램 및 기능]
- 이용 중인 금융사이트에 접속하여 해결된 버전의 프로그램 재설치
※ 금융사이트별 취약한 프로그램 패치 일정은 상이하므로 확인 필요
4. 참고
'취약점 > 국내 금융 앱 취약점' 카테고리의 다른 글
은행 보안 프로그램 취약점 : Veraport(보안 프로그램 통합 설치 솔루션) (0) | 2023.03.07 |
---|---|
은행 보안 프로그램 취약점 : 중간 결론 (0) | 2023.02.20 |
은행 보안 프로그램 취약점 : 보안 S/W의 사설인증서 (0) | 2023.02.08 |
은행 보안 프로그램 취약점 : IPinside(단말기 정보 수집 및 실시간 개인정보 유출탐지 및 차단 솔루션) (1) | 2023.01.27 |
독일 개발자 “한국 은행 사이트, 매우 불편하고 위험해” (0) | 2023.01.10 |