1. Veraport

- (주)위즈베라에서 개발한 인터넷 뱅킹 이용시 필요한 보안 프로그램을 통합 설치해주는 솔루션

 

1.1 동작방식

① 은행 웹사이트가 hxxps://127.0.0.1:16106(베라포트의 로컬 웹서버)에 연결해서 JSONP 요청 전송

> getAxInfo와 같은 명령어를 사용해 웹사이트에서 설치 정책을 다운

send_command("getAxInfo", {
  "configure": {
    "domain": "http://banking.example/",
    "axinfourl": "http://banking.example/wizvera/plinfo.html",
    "type": "normal",
    "language": "eng",
    "browser": "Chrome/106.0.0.0",
    "forceinstall": "TouchEnNxKeyNo",
  }
});

 

② 베라포트가 정책파일을 다운로드해서 검증

<pluginInstallInfo>
  <version>2.2</version>
  <createDate>2022/02/18 17:04:35</createDate>
  <allowDomains>www.citibank.co.kr;*.citibank.co.kr;cbolrnd.apac.nsroot.net</allowDomains>
  <allowContexts/>
  <object type="Must">
    <objectName>TouchEnNxKeyNo</objectName>
    <displayName>TouchEnNxKey-multi64</displayName>
    <objectVersion>1.0.0.73</objectVersion>
    <signVerify>confirm</signVerify>
    <hashCheck>ignore</hashCheck>
    <browserType>Mozilla</browserType>
    <objectMIMEType>
      file:%ProgramFiles(x86)%\RaonSecure\TouchEn nxKey\TKMain.dll
    </objectMIMEType>
    <downloadURL>
      /3rdParty/raon/TouchEn/nxKey/nxKey/module/
      TouchEn_nxKey_Installer_32bit_MLWS_nonadmin.exe /silence
    </downloadURL>
    <backupURL>
      /3rdParty/raon/TouchEn/nxKey/nxKey/module/
      TouchEn_nxKey_Installer_32bit_MLWS_nonadmin.exe
    </backupURL>
    <systemType>64</systemType>
    <javascriptURL/>
    <objectHash/>
    <extInfo/>
    <policyInfo/>
    <description/>
  </object>
  <object type="Must">
    …
  </object>
  …
</pluginInstallInfo>

 

③ 베라포트는 objectMIMEType 항목을 통해서 애플리케이션의 설치여부 확인

>  설치가 안되었을 경우 downloadURL, backupURL 항목을 사용해 설치파일 다운

 

④ 베라포트의 사용자 인터페이스를 통해 해당 파일 다운로드

> type 설정 매개변수에 의해 "관리(manage)모드"와 "일반(normal)모드"로 나뉘어짐

[사진 1] Veraport 동작 과정 요약

2. 취약점

- 취약점 요약

① 서명 유효성 검사에 사용되는 루트 인증서 중 하나는 MD5 해싱과 1024비트 RAS키 사용 > 지원 중단이 10년 넘음.
② 다운로드를 위한 연결에 HTTPS를 강제하지 않으며 HTTPS가 사용될 때도 서버 인증서를 검증하지 않음
다운로드한 파일의 무결성을 올바르게 검증하지 않음 > 애플리케이션 서명 유효성 검사를 쉽게 우회할 수 있음
④ 무결성 검증을 쉽게 우회할 수 없더라도 베라포트는 손상된 바이너리를 사용할 지 여부를 사용자 결정에 의존
⑤ 사용자의 선택이나 기타 피드백 없이 애플리케이션을 다운로드하고 설치하는 동작을 시작할 수 있음
웹사이트에서 소프트웨어를 배포하며, 이미 알려진 보안 문제가 있는 오래된 애플리케이션을 제공
⑦ 공개적으로 유출된 서명인증서나 악의적인 정책파일을 철회할 수 있는 장치가 없음
⑧ hxxps://127.0.0.1:16106에서 동작하는 베라포트의 로컬 웹서버에는 영구적 XSS 을 비롯한 여러 보안취약점이 존재

 

2.1 전송 데이터 보호 부족 문제

- HTTPS 연결을 강제하지 않음 > 모든 다운로드는 암호화되지 않은 HTTP 연결을 통해 다운로드

- HTTPS 연결 테스트시 서버의 정당성을 확인하지 않음 > 악성 서버가 hxxps://download.example로 가장한 경우에도 베라포트는 다운로드를 수행

※ 두 번째 이유는 잘 모르겠음

HTTPS Handshaking 과정 중 Server Hello 패킷을 통해 서버의 SSL 인증서를 전송하며, 클라이언트는 이를 검증

공격자가 애초에 SSL 인증서를 사용해 악성 사이트로 가장한 경우에대한 검증인지

혹은 다른 무엇이 있는지에 대한 의문

 

2.2 신뢰 도메인 범위 문제

- 'allowedDomains'에 표시된 URL을 신뢰

> 1.1 동작방식 ②에서는 *.citibank.co.kr를 신뢰 도메인으로 지정

> *.citibank.co.kr는 citibank.co.kr의 모든 하위 도메인을 신뢰한다는 의미

> 서브 도메인 탈취, 웹 사이트 해킹 등으로 악성 사이트를 만들 수 있으며, 악성 파일 유포가 가능해짐

※ 이와 관련된 공격 행위는 2020년 이미 발생한 것으로 확인됨

참고: https://threatpost.com/hacked-software-south-korea-supply-chain-attack/161257/

 

2.3 서명키 보관 문제

- 인증서 발급에 이미 사용이 중단된 알고리즘을 사용

> 1024비트 키와 MD5 서명은 오래전에 사용이 중단되었으며며, 브라우저에서는 이러한 인증기관의 단계적인 제거를 10년전에 시작

※ 참고: https://wiki.mozilla.org/CA:MD5and1024

Authority name Validity Key size Signature algorithm
axmserver 2008-11-16 to 2028-11-11 1024 MD5
VERAPORT Root CA 2020-07-21 to 2050-07-14 2048 SHA256

 

- MS에서는 인증 기관에 대한 요구 사항 중 루트 인증서는 배포 신청일로부터 25년 이내에 만료되어야 한다고 말함

※ 참고: https://learn.microsoft.com/en-us/previous-versions//cc751157(v=technet.10)#a-root-requirements

 

2.4 다운로드 파일 무결성 검증 문제

- 정책 파일에는 다운로드에 대한 해시 기반 검증 옵션이 있음 > 모든 웹사이트에서 이 기능은 사용되지 않음

> 2.2 신뢰도메인 문제를 악용해 공격자가 조작하는 웹 사이트에서 파일 다운로드 및 실행이 가능함

<hashCheck>ignore</hashCheck>

 

2.5 정보 유출 문제

- 베라포트 서버에서 지원하는 명령 중 'checkProcess' 명령이 있음

> 애플리케이션 이름을 넘겨주면 현재 실행 중인 경우 프로세스에 대한 정보를 반환

> 아래와 같이 애플리케이션 이름으로 *를 입력하면 사용자가 어떤 애플리케이션을 실행하고 있는지알 수 있음

> getPreDownInfo 명령을 통한 접근도 가능

let processes = send_command("checkProcess", "*");

 

2.6 HTTP 응답 분할 문제

- HTTP 응답을 생성하는 모든 라이브러리들이 헤더 이름이나 값에서 줄바꿈 문자를 금지한 후 거의 사라진 취약성 종류

> Veraport는 그러한 라이브러리를 사용하지 않으며, 이를 통한 XSS 공격이 가능함

 

3. 조치

- 블라디미르 팔란트

> 2023년 02월 22일 KrCERT에 보고 및 같은 날 KrCERT가 위즈베라에 전달

 

- 위즈베라

> 2월 28일 Veraport 3.8.6.5 출시

> 해당 버전의 경우 제보한 취약점이 수정된 것으로 확인됨

① HTTPS 연결에 대해 서버 유효성 검사
② HTTP 다운로드를 HTTPS로 업그레이드 하여 신뢰할 수 없는 네트워크가 더 이상 설치를 조작할 수 없게함
③ 애플리케이션에 대한 설명을 변경할 수 없음
④ XSS 취약점은 베라포트의 로컬 서버에서 제거 및 JSONP 엔드포인트는 콜백 이름을 허용된 문자 집합으로 제한
⑤ OpenSSL은 Veraport 3.8.6.5에서 버전 1.1.1t로 업데이트 등

 

3.1 남은 문제들

① 2023.03.01 기준 일부 은행 사이트에서만 최신 베라포트(버전 3.8.6.4) 지원

② checkProcess는 2021.10.29 패치되었지만, getPreDownInfo 명령을 통한 접근은 최신 버전에서도 사용 가능

③ mongoose 5.5 라이브러리를 로컬 웹 서버에 사용 > 업그레이드되고 있지 않는 라이브러리

mongoose: 몽고DB와 Express.js 웹 애플리케이션 프레임워크 간 연결을 생성하는 자바스크립트 객체 지향 프로그래밍 라이브러리

④ 임의의 애플리케이션을 강제로 설치할 수 있는 권한이 있음
⑤ 오래된 루트 인증서(1024비트, MD5)가 애플리케이션에 여전히 존재함 등

 

4. 참고

[1] https://palant.info/2023/03/06/veraport-inside-koreas-dysfunctional-application-management/
[2] https://github.com/alanleedev/KoreaSecurityApps/blob/main/05_wizvera_veraport.md

+ Recent posts