1. IPinside
- (주)인터리젠에서 제작한 단말기 정보 수집 및 실시간 개인정보 유출탐지 및 차단 솔루션
- 접속자 단말기 정보 수집, 해외 IP 분석 및 차단, 부정 접속 등을 방지하기 위한 프로그램
1.1 IPinside 동작 방식
① IPinside LWS Agent 애플리케이션도 로컬 서버를 통해서 웹사이트와 통신
② 은행 웹사이트가 접속자에 대한 정보를 더 얻기 위해 localhost:21300로 JSONP 요청을 보냄
JSONP (JSON with Padding)
- 자바 스크립트는 서로 다른 도메인에 대한 요청을 보안상 제한 = 동일근원정책(Same-Origin Policy, SOP)
- 이러한 정책으로 인해 생기는 이슈를 cross-domain 문제
- JSONP은 각기 다른 도메인에 상주하는 서버로부터 데이터를 요청하기 위해 사용
③ 해당 요청 실패 시 은행 웹사이트는 접속을 거부 및 IPinside LWS Agent를 먼저 설치할 것을 요구
④ 애플리케이션이 실행되고 있다면 웹사이트는 wdata, ndata, udata 필드를 통해서 다양한 데이터를 받아 볼 수 있음
2. 취약점
- wdata, ndata, udata 필드를 통해서 다양한 데이터를 받아 볼 수 있으나 필요 정보보다 많은 데이터가 전송
2.1 wdata
- 실행중인 프로세스에 대한 정보를 저장
- 난독화시 단지 무작위 바이트 하나만 사용
- [사진 3]을 통해 wdata에는 다음과 같은 데이터 등이 저장됨
① IP 정보
c0 a8 7a 01 (실 IP 주소 192.168.122.1)
c0 a8 7a 8c (192.168.122.140, 첫 네트워크 카드의 IP 주소)
c0 a8 7a 0a (192.168.122.10, 두번째 네트워크 카드의 IP 주소)
② 운영체제 정보
65 (문자 e)는 GetProductInfo() 함수를 호출한 결과
※ GetProductInfo(): 로컬 컴퓨터의 운영 체제에 대한 제품 유형을 검색 및 반환
③ 하드드라이브 정보
하나는 시리얼 번호가 QM00001이고 다른 하나는 abcdef
④ 실행중인 프로세스 정보
firefox.exe
⑤ 실행 플랫폼
가상 머신
⑥ 원격제어 프로그램 동작 정보
2.2 ndata
- 접속자의 IP 주소를 저장
- 난독화는 랜덤성도 없으며 데이터는 항상 동일
- 웹 사이트가 IPinside LWS Agent에 통신(응답)하는 과정에서 RESPONSE_IP의 값이 HDATAIP에 저장되며, 이는 접속자 IP주소
2.3 udata
- “u” 는 “unique”의 약자이며, 몇 가지 다른 아웃풋 타입이 있음
- 15개의 서로 다른 CPUID 명령호출의 결과를 합쳐서 만든 것
※ CPUID 명령어: 소프트웨어가 프로세서의 세부 정보를 검색할 수 있도록 하는 프로세서 보조 명령어
- 난독화는 랜덤성도 없으며 데이터는 항상 동일
- [사진 4]를 확인해보면 네트워크 카드, 하드 드라이브의 목록과 네트워크 카드의 MAC 주소도 목록에 포함
2.4 wdata, ndata, udata 보호
- 사용자를 비익명화하기 위한 여러 데이터가 사용
- 사용자의 H/W, S/W에 대한 데이터를 통해 시스템의 취약점 확인 > 잠재적으로 다른 공격으로 발전 할 가능성
- localhost:21300에서 동작하는 서버는 누가 응답하는지 상관하지 않음 > 어떤 웹사이트든 데이터 요청 가능
① wdata
- 3단계의 보호 장치가 적용_난독화, 압축, 암호화(공개키 암호화)
- 암호화에 사용된 RSA 암호화는 해당 테스트에서 2시간 36분 만에 비공개키를 계산
② ndata, udata
- 유일한 보호장치는 암호화(AES-256 기반의 대칭 암호화)
- 암호화 키는 애플리케이션 내에 하드코딩
- 실행 시마다 동일한 ciphertext를 생성_ CBC 블록 연쇄 모드를 사용하며, 초기회 백터 IV를 전달하지못해 항상 0으로 채움
> 재전송 공격을 통해 미리 저장한 유효한 응답을 웹 사이트에 보낼 수 있음
※ challenge-handshake scheme, 타임 스탬프(timestamp) 등 대응 방안이 확인되지 않음
∴ 데이터를 제대로 보호하고 있지 않으며, 어떤 임의의 웹사이트에서도 수집한 데이터에 접근할 수 있음
2.5 어플리케이션의 전반적인 보안성
- OpenSSL 라이브러리를 사용 > OpenSSL 1.0.1j 버전
※ 2015년 릴리즈, 2017년 OpenSSL 1.0.1에 대한 지원이 중단
- 단일 쓰레드로 동작 > 서비스 거부 공격에 취약
- ssl_read 가 정확히 8192 바이트를 리턴해서 버퍼를 꽉 채울 수도 있음 > 이럴 경우 inputBuffer는 널문자로 종료되지 않음
- 이것을 복사한 request 도 마찬가지로 널문자로 종료되지 않음 > sprintf() 나 handle_request()에서 request를 널문자로 종료되는 문자열로 취급할 경우 버퍼를 초과해서 읽을 것
- 그렇게 되면 sprintf() 는 16384 바이트 이상의 데이터를 읽을 것 > 타깃 버퍼에 다 담기는 너무 큰 데이터
=> 스택오버플로우나 버퍼의 범위를 벗어난 읽기 등 발생가능
> 이 취약점 중 일부는 확실히 애플리케이션을 죽일 수도 있음 > 2개의 개념증명 웹페이지를 만들어서 여러 차례 확인
> 원격 코드 실행 취약점은 확인되지 않음 > StackGuard와 SafeSEH 기능이 효율적으로 동작하기 때문
3. 조치
- 블라디미르 팔란트
> 2022년 10월 21일 3건의 취약점 보고서를 KrCERT에 보고
> 11월 14일 KrCERT는 보고서를 인터리젠에 전달
- 인터리젠 관계자
> 보고서 중 하나만 2023년 1월 6일 전달 받음 주장
> 문제점에 대한 수정 버전은 2월에 배포할 예정 > 새로운 버전을 사용자에게 배포하는 것은 고객(은행 등)의 문제
- IPinside는 자동 업데이트 기능이 없음
> 사용자가 수동으로 업데이트를 다운로드하여 설치
> Wizvera Veraport와 같은 관리 애플리케이션을 통해 업데이트
> 은행에서 사용자에게 업데이트를 강제하지 않는 이상 둘 다 가능성이 작아 보임
4. 참고
- https://palant.info/2023/01/25/ipinside-koreas-mandatory-spyware/
- https://github.com/alanleedev/KoreaSecurityApps/blob/main/02_ipinside_lws_agent.md
'취약점 > 국내 금융 앱 취약점' 카테고리의 다른 글
은행 보안 프로그램 취약점 : Veraport(보안 프로그램 통합 설치 솔루션) (0) | 2023.03.07 |
---|---|
은행 보안 프로그램 취약점 : 중간 결론 (0) | 2023.02.20 |
은행 보안 프로그램 취약점 : 보안 S/W의 사설인증서 (0) | 2023.02.08 |
은행 보안 프로그램 취약점 : TouchEnxKey(키로깅 방지 키로거 솔루션) (1) | 2023.01.10 |
독일 개발자 “한국 은행 사이트, 매우 불편하고 위험해” (0) | 2023.01.10 |