Action disabled: revisions

* 사업 등 관련 문의: T) 02-322-4688, F) 02-322-4646, E) info@wikisecurity.net

A그룹사 VPN 모의해킹 진단 컨설팅 사례

[ 개요 ]

VPN은 Remote Access, Site-to-Site 등 여러 가지 구축방법이 있으나, 공격자 관점에서 볼때 중요한 것은 VPN만 뚫으면 내부 네트워크로 진입하는 중요한 통로에 진입할수 있다는 매력적인 해킹 대상이라고 볼수 있다.
실제, site:vpn.*co.kr 로 구굴링을 해보면 vpn으로 시작하는 많은 국내 사이트들을 검색할 수 있는데, 재택근무, 원격진료 등으로 많은 기업이나 기관에서 VPN Service를 많이 하고 있어서 보안상의 위협이 점점 더 높아지고 있는것이 현실인 것 같다.
SSL VPN 웹사이트 구글링
최근 고객사에서 의뢰한 모의해킹 진단 대상 중에 하나인 VPN 모의해킹 진단을 하면서 몇 가지 주목해야하는 사항들을 정리해 보았으니, 다른 프로젝트에서도 VPN진단에 대한 요청이 있을때 많은 참고가 되길 바란다.

VPN의 접속 구성은 아래와 같이 간단하게 요약할 수 있다.

 Client --> VPN G/W --> Internal N/W


위의 VPN접속 구성에 대한 위협과 공격 포인트는 아래와 같이 설정할 수 있다.

 a)client  b)통신프로토콜   c)VPN G/W             d)Internal N/W
 Client -------------------> VPN G/W -------------> Internal N/W
 a) Client - 사용자/관리자 계정 추측공격, VPN Client모듈 취약점 이용공격 등
 b) 통신프로토콜 - SSL, IPSec 등 VPN통신 프로토콜의 알려진 취약점 이용공격 등
 c) VPN G/W - VPN장비의 보안설정(관리자웹페이지, XSS 등)의 약점을 이용한 공격 등
 d) Internal N/W - VPN인증 이후 허용된 Routing 정보를 이용하여 내부 네트워크를 접근하는 공격 등

위에서 서술한 모의해킹 포인트별 주요 진단 내용과 진단결과는 아래와 같다.

a) Client

1) VPN 사용자 인증 계정 추측공격 보안을 강화한 VPN서비스는 계정과 패스워드 이외에 OTP와 같은 별도 채널로 인증 정보를 추가로 요구하기도 하지만 추가 비용이 소요되기 때문에 가장 낮은 수준의 인증방식인 계정명과 패스워드만으로 사용자를 인증하는 곳이 생각보다 많은 것이 현실이다.
이번 프로젝트의 고객사는 내부 이슈가 있어서 사용자 계정을 AD와 연동하여 운영하고 있었으며, AD계정의 비밀번호는 강력한 보안정책을 적용하여 복잡도와 길이 제한정책을 사용하고 있었으므로 Guessing이나 Brute force 공격은 불가능했다.
또한, 고객사에서는 몇 가지 Client의 접속 시도 정보를 가지고 공격여부를 탐지할 수 있는 통제장치를 마련하고 있었으나 Client의 정보를 가지고 공격여부를 탐지하는 단순한 방법이기 때문에 이를 우회할 수 있는 여러가지 방법들이 발견되었다.
IP를 비롯하여 Client에서 보내지는 정보는 얼마든지 조작이 가능하기 때문에 이를 기반으로 어떤 탐지를 하는 것은 한계가 있다는 것을 인지해야겠다.

2) VPN Client Module의 취약점을 이용한 공격 VPN G/W접속시에 Client에 다운로드되어 설치되는 프로그램이 있는데, 이번 프로젝트의 대상 장비는 Juniper VPN이었기 때문에 network connect라는 프로그램이 ActiveX controller로 VPN Client에 설치되고 더불어서 각종 exe와 dll 파일들이 설치된다.
이 network conncetion프로그램을 Process Explorer로 간단히 분석해보면 dsNetworkConnection.exe가 실행되면서 Juniper Setupclient.exe가 구동된 이후, dsHostCheckerSetup.exe가 host파일 설정변경 등을 비롯한 PC의 환경설정을 변경한다.
이 과정에서 Juniper Networks 디렉토리에 있는 파일들을 rewrite하는 과정을 거치는데, 공격자가 쉽게 접근할 수 있는 ini 파일들을 몇 개 분석해본 결과, config.ini와 versioninfo.ini 파일은 파일속성을 변경하여 수정을 못하도록 해놨지만, 디렉토리에 대한 쓰기권한이 있기 때문에 파일 overwrite를 하면 파일의 내용을 변조할 수 있는 취약점이 존재하게 된다.
이런 파일들을 overwrite하는 것으로 어떤 권한획득에 직접적인 원인제공을 하지는 않지만, current_user 또는 Current_Domain과 같은 변수의 값을 이용하여 서버측에서 어떤 통제를 적용하고 있다면 그 통제를 아주 쉽게 우회할 수 있는 취약점으로 작용할 수 있게 된다.

3) 기타 VPN Client의 악성코드 감염 등을 이용한 공격 VPN Client가 인증에 성공하면 내부 네트워크상의 위치한 PC와 동일한 접근권한을 부여받기 때문에 VPN Client에 대한 보안은 대부분의 VPN보안 가이드에서 동일하게 강조를 하고 있다.
특히, 재택근무 또는 원격진료와 같이 기업이나 기관의 내부통제를 받는 내부PC가 아닌 외부에 위치한 PC는 바이러스 등 악성코드에 감염확율이 보다더 높기 때문에 VPN Client PC의 안티바이러스, 안티악성코드, 패치 등은 기본적으로 보안조치가 되어 있어야한다.
이번 프로젝트에서 이부분은 너무나 다양한 시나리오가 있기 때문에 진단범위에서 제외하는 것으로 하였으나, 본 프로젝트와는 별개로 악성코드를 제작하여 설치하여 테스트한 결과 다양한 공격이 가능한 것을 확인하였다.

b) 통신프로토콜

VPN통신 프로토콜은 크게 SSL과 IPSec으로 나눠지는데, 이를 구별하는 간단한 방법은 VPN G/W를 스캐닝해서 IKE 프로토콜이 사용하는 500 Port가 탐지되면 IPSec방식이고, 443 Port가 탐지되면 SSL방식인 것으로 확인이 가능하다.(윈도우서버 VPN인 PPTP와 L2TP VPN은 1723, 1701 Port가 탐지될 것이다.)
(OSI 7 Layer관점에서, IPSec은 그림에서와 같이 세번째 Layer인 Network Layer에 속하며, SSL은 6번째 Layer인 Presentation Layer에 속하기 때문에 공격방식은 그 프로토콜에 따라 크게 달라진다)
고객사의 VPN은 SSL방식이었기 때문에 SSL 프로토콜의 알려진 취약점으로 Heartbleed와 Poodle 취약점을 확인하였다.
확인하는 방법은 nmap의 script를 이용하면 확인할 수 있으며, nmap의 스캐닝 결과를 한번더 확인하기 위하여 다른 방법으로도 확인해본 결과 Heartbleed는 취약하지 않았지만 Poodle 공격에는 취약한 것으로 확인되었다.
그러나 poodle 취약점은 코딩을 반복적으로 해가면서 공격을 해야하는 난이도가 높은 공격방법이므로 예의주시해야 하는 취약점으로 리포팅하는 것으로 하였다.
 OSI 7 Layer Model에서 IPSec, SSL

c) VPN G/W

대부분의 네트워크 장비와 동일하게 VPN G/W는 장비자체에 접근하기 위한 다양한 서비스를 제공하는 것이 일반적이다. 관리용 웹서비스를 비롯하여 telnet, ssh 서비스를 기본적으로 제공하는데, 이러한 서비스들이 임의의 다수에게 노출될 경우에는 VPN G/W자체에 대한 권한을 잃을 수 있기때문에 보다더 강도 높은 보안대책이 적용되어야 한다. 본 프로젝트에서는 VPN G/W 접근통제를 중점적으로 점검하였으며 몇 가지 중요한 취약점이 발견되었다.

1) VPN G/W XSS 취약점 대상 장비인 Juniper SSL VPN G/W는 높은 시장 점유율을 달성하고 있는 반면에 XSS 취약점이 많이 알려져 있는데, 이러한 취약점들은 CVE, CAN에 등록되어 있으며 아래와 같은 것들이 있다.
아래의 알려진 XSS 취약점 대부분이 존재하고 있는 것으로 확인되었으나, SSL tunneling을 전제로 XSS를 이용해야하므로 직접적인 공격에는 실패를 하였다.
따라서 이 XSS 취약점은 Heartbleed 또는 poodle과 같은 SSL 취약점과 결합되었을때 직접적으로 효과적인 공격으로 이어질수 있으므로 확인된 XSS 취약점 목록을 리포팅하였다.

 https://target.com/dana-na/auth/url_default/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_3/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_15/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_22/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_23/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_24/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_5/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_0/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_4/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/auth/url_12/welcome.cgi?p=logout&c=37&u=</script><script>alert(1)</script>
 https://target.com/dana-na/meeting/meeting_testresult.cgi?redir=/dana-na/meeting/login_meeting.cgi"><script>alert(999)</script>&java=1
 https://target.com/dana/fb/smb/rd.cgi?si=");alert(999);</script>
 https://target.com/dana/fb/smb/wu.cgi?dir=foo"><script>alert(999);</script>

2) VPN G/W Web Interface 노출 취약점 대부분의 네트워크 장비와 마챦가지로 대상 VPN G/W도 장비에 로그인이 가능한 IVE Web Service를 제공하고 있었으며 /dana-na/auth/url_22/welcome.cgi와 /dana-na/auth/url_admin/welcome.cgi를 발견하였다.
두개의 cgi를 테스트해본 결과, 전자의 welcome.cgi는 일반사용자 AD 계정과 연동되어 있고 후자의 welcome.cgi는 장비 관리용 cgi로써 AD계정과 연동되어 있지않은 상태임을 에러 메시지를 통해 알수 있었다.
특히 장비 관리용 welcome.cgi는 ID/PWD이와에 OPT같은 추가 인증 요소가 없었기 때문에 더욱더 위험할수 있는 상황이었다. 이 관리용 welcome.cgi의 진단은 몇 가지 guessing test만 수행하고 위험성을 리포트하였다.
그 이외에도 Junos Pulse Collaboration Suite의 meeting 로그인 등 몇 개의 web interface들이 존재하였으나 간단한 guessing test만 수행하고 그 내용을 리포팅하였다.
이러한 web interface는 VPN G/W장비 자체에 대한 권한을 빼앗길수 있는 위험도가 높은 취약점이므로 세심한 관리가 필요하겠다.

3) Bash shell 취약점 대상 장비인 Juniper SSL VPN은 FreeBSD를 기반으로 장비의 운영체제인 JUNOS를 제작한 네트워크 장비의 일종이기 때문에 최근에 알려진 bash shell bug 취약점이 존재할수도 있다고 판단하였다.
Juniper Network에 공개된 게시글에서는 Junos Space와 JSA Seriese만 취약한 것으로 알려져 있으나 계속 확인중이라고 게시글이 작성되어 있었고 만약에 bash shell 취약점이 존재한다면 VPN G/W의 권한을 획득할 수 있는 중요한 단초가 될수 있으므로 약 7가지의 CVE로 알려진 bash shell취약점을 확인하였다.
일반적인 알려진 bash bug 취약점을 점검하는 방법은 대상 장비에 직접 shell로그인하여 확인하는 방법이 알려져 있지만, 이번 프로젝트는 외부에서 blackbox test방식으로 진단하는 환경이므로 Burf suit proxy를 이용하여 VPN G/W 웹서버의 User-Agent와 같은 헤더값에 magic string값인 () {:;};를 시작으로 shell code를 삽입하여 취약점 여부를 확인하였다.
그러나 이 장비에는 bash shell 취약점이 존재하지 않는 것으로 확인되었다.

4) 기타 취약점 JUNOS의 IVE에서 제공하는 기능이외에 고객사의 필요로 부분적으로 추가 개발된 웹서비스의 HTML 소스상에서 몇 가지 취약점이 발견되었으나 위험도가 높지 않은 취약점이므로 간단한 리포팅으로 대체하였다.
이러한 취약점들은 직접적인 공격의 실마리를 제공하지는 않지만 공격자에게 대상시스템의 상태에 대한 여러 가지 정보를 제공하기 때문에 제거해야 하는 대상이 된다.

d) Internal N/W

이번 프로젝트의 취약점 진단의 목적은 기존에 발견된 취약점을 보안 조치한 이후에 재확인 차원에서 진행되었기 때문에 테스트 계정을 부여받아 VPN client로 정상 로그인한 이후에 몇 가지 중요한 취약점이 발견되었다.
1) VPN Session변조로 타사용자 계정 spoofing 이번 테스트를 위하여 부여된 테스트용 계정을 이용하여 VPN에 로그인한 상태에서 동일 네트워크 상의 타사용자의 cookie값을 변조하여 타사용자를 도용할 수 있는 취약점이 발견되었는데, IVE자체의 취약점으로 판단하고, 정확한 확인을 위해 현재 Juniper Networks에 관련 취약점 정보를 제공하고 확인을 의뢰한 상태이다.
이 취약점은 동일한 네트워크에 있는 타사용자를 도용할 수 있는 환경적 조건을 전제로 성공할 수 있는 취약점이지만 도용하고자 하는 타사용자의 한개 cookie값만을 변조하면 성공할 수 있는 취약점이기 때문에 위험도가 높은 취약점으로 평가할 수 있다.
또한, 고객사의 경우 VPN으로 로그인한 이후에 접속하는 EP계정이 상이할 경우에는 EP로그인을 차단하는 통제정책을 적용하고 있는 환경이므로 이 통제를 우회할 수 있는 방법으로 악용될수도 있는 위험성을 내포하게 된다.

2) VPN Client에게 과다한 라우팅 정보 제공 이번 테스트를 위하여 부여된 테스트용 계정으로 VPN로그인하여 client가 내부 IP를 부여받은 상태에서 라우팅 테이블을 확인해본 결과, 300여개가 넘는 과도한 라우팅 테이블을 내려받은 것을 확인할 수 있었다.
이 라우팅 테이블은 윈도우의 일반 명령어인 netstat로 확인할 수 있지만, Juniper VPN client인 network connection 프로그램에서도 확인이 가능하다.
대략적으로 라우팅 테이블을 분석한 결과 C class뿐만 아니라 B class의 라우팅 테이블이 여러개가 통째로 허용된 상태였다.
이러한 네트워크 접근통제 구조에서는 VPN Client의 접근통제를 위하여 각 Server Farm 또는 Server들이 각자의 접근통제를 잘 갖춰져야 하는 구조적으로 보호대책이 필요하게 된다.
정상적으로 로그인한 VPN Client가 신뢰할 수 있는 사용자라고 일반적으로 생각할 수 있으나 기업이나 기관의 로컬 사용자 보다는 신뢰도가 현저히 떨어지는 사용자라는 전제하에 접근통제가 이뤄져야 하겠다.

3) 내부 네트워크 시스템 권한 획득 및 접근통제 우회 위에서 언급한 바와같이 과도하게 부여된 라우팅 테이블을 이용하여 내부 네트워크에서 운영되는 각종 시스템에 어렵지 않게 접속이 가능하였다.
VPN Client에게 제공되는 웹서비스는 당연히 접속이 가능하고 그 웹서비스가 가지고 있는 취약점은 그대로 VPN Client에게 악용될수 있었을뿐만 아니라 일부 DB서버까지 접근이 가능하였다.
DB서버의 취약점을 이용하여 DBMS권한을 획득할 수 있었으며, DBMS의 Utility를 이용하여 OS권한을 획득하기도 하였고, 획득된 OS권한을 이용하여 접근이 통제된 주변의 타 시스템까지 권한을 획득할 수 있었다.

[ 결론 ]

이번 VPN 모의해킹 진단 사례에서 아래와 같은 몇 가지의 교훈을 얻을 수 있다.
1) 공격자 관점에서의 VPN은 기업이나 기관의 내부 네트워크로 진입할 수 있는 아주 매력적인 공격대상이 될수 있다.
2) VPN G/W는 신뢰도가 높은 내부 네트워크와 신뢰도가 현저히 낮은 외부 네트워크를 나누는 중요한 경계선이기 때문에 Defense in Depth전략으로 보안설계와 통제가 이뤄져야 한다.(성능보다는 보안을 우선시해야 하는 대상으로 판단됨)
3) VPN Client는 신뢰할 수 없는 사용자라는 전제하에 네트워크 및 시스템에 대한 인증, 권한, 접근통제, 로깅 및 백업 등의 보안대책이 설계되어야 한다. (추후에 VPN security guide로 추가 공걔 예정임)