브라우저를 이용해 웹 서핑을 하거나 인터넷 상으로 이메일을 주고받을 때, 사용자는 알 수 없지만 수 많은 데이터들이 오고 간다. 이런 과정에서 사용자가 데이터들의 값을 변경해 원하는 정보를 탈취하거나 서비스 동작의 장애를 일으키는 공격을 시도할 수 있다. 이러한 데이터를 받은 웹 서버는 조작된 데이터들을 정상적인 데이터로 착각하고 임의의 조작 값에 해당되는 결과를 공격자에게 전송한다. 이것을 흔히 말하는 '웹 해킹'이라고 한다.
웹 해킹은 현재도 전세계적으로 많이 이루어지고 있는 공격이며, 그 공격 형태는 날이 갈수록 진화하고 있다. 최근에는 브라우저 상에서 개발자 도구를 통해서도 임의로 소스코드를 수정하여 공격을 시도할 수 있으며, 웹 해킹에 관련된 공격 도구들 또한 많이 생겨나고 있다.
이번에 소개할 도구는 웹 프록시 툴 버프스위트이다. 버프스위트는 웹 서버와 사용자간의 데이터를 주고받을 때 그 중간에서 데이터를 가로채어 HTTP Request/Response를 임의 값으로 변경 후 대상에게 재전송을 해주는 일종의 프록시 툴이다. 버프스위트는 다양한 기능들을 통해 보안 취약점을 발견하여 웹 어플리케이션 공격에 대한 분석 환경을 제공한다. 또한 다른 프록시 툴에 비해 프로그램이 가벼워 현재 많은 사람들이 이용 중 도구이다.
이 버프스위트를 이용하기 위해서는 JRE를 먼저 다운받아야 하는데 이 JRE란 Java Run Environment 즉, 자바 실행 환경이라고 볼 수 있다. 이 JRE는 JAVA 언어로 만들어진 소프트웨어를 실행 시킬 경우에 사용되는 라이브러리이며, 이는 오라클 홈페이지(http://www.oracle.com/)를 통해서 다운받을 수 있다. JRE를 다운로드 후 설치하여 버프스위트를 실행하면 정상적으로 실행이 된다. 버프 스위트는 웹 브라우저와 대상 웹사이트 간에서 작동하며 동작 흐름 관계도는 아래와 같다.
버프 스위트를 실행하게 되면 제일 먼저 프록시 설정을 해주어야 한다. 여기서 프록시는 웹 서버와 사용자가 직접적으로 통신하는 사이에서 요청과 응답을 대신 전달하는 대리인(Agent)이라고 볼 수 있다. 이 프록시 설정은 본인의 로컬 호스트 주소(127.0.0.1)와 임의의 포트(8080 등)로 설정하여 사용이 가능하다. 아래는 버프 스위트를 실행하여 프록시 설정을 한 상태의 모습이다.
프록시 설정이 완료되면 사용자의 브라우저에서도 동일하게 로컬 호스트(127.0.0.1)와 포트(8080)를 동일하게 설정해주어야 한다. 이러한 설정을 마치게 되면 브라우저는 80번 포트를 통해 요청을 보내는 것이 아니라 8080번 프록시 포트로 요청을 보내게 되며 이를 8080번 포트로 대기중인 버프 스위트가 받아서 데이터를 웹 서버의 80번 포트로 재전송한다. 이를 설정함으로써 해당 호스트 주소와 포트의 프록시 경로로 모든 데이터를 주고받게 된다. 브라우저의 프록시 설정 방법은 아래에서 확인할 수 있다.
이와 같이 프록시 설정을 마치게 되면, 사용자의 요청(Request)과 웹 서버의 응답(Response)을 버프 스위트에서 가로채어 받아온 데이터를 변경한 후 재전송할 수 있는데 이것이 Intercept라는 기능이다. 이 기능을 사용하기 위해서는 아래와 같은 간단한 설정이 필요하다.
설정이 완료되면 버프스위트의 기본적인 설정은 모두 완료가 된 것이다. 모든 설정이 완료된 후 [Intercept is on] 이라는 문구가 적혀있는 버튼을 아래와 같이 눌러 적용하게 되면, 웹 서버와 사용자가 주고받는 모든 데이터들은 버프스위트 프록시 서버를 통해 지나가게 된다. 이를 통해 버프 스위트 사용자는 데이터를 임의로 변조하여 공격을 시도할 수 있다.
위와 같이 Intercept 기능을 적용하여 전송되는 요청에 포함되는 헤더정보, 쿠키 값, 파라미터 값, URL 정보 등을 임의로 변경하여 전송할 수 있다. 만약 요청정보가 변경되어 전송이 되었고 이를 수신한 웹 서버에서 충분한 검증이 이루어지지 않는다면 치명적인 피해가 발생될 수 있다. 아래는 로그인 폼에서 아이디(test)와 비밀번호(1234)를 입력 후 폼을 전송하여 로그인 요청을 하게 되는데 프록시 서버가 이와 같은 요청 데이터를 중간에서 가로채어 사용자에게 보여주는 모습이다. 이처럼 버프스위트는 전송된 요청메시지를 사용자가 직접 볼 수 있을 뿐만 아니라 중간에서 사용자의 임의대로 입력 값을 변경할 수 있다. 또한, 웹 서버에서 응답해주는 응답 메시지 역시 사용자가 가로채어 직접 수정할 수 있다.
수정된 요청 메시지를 웹 서버에 전달하게 되면 웹 서버는 이를 정상적인 요청이라고 받아들이게 되며 사용자에게 정상적으로 로그인이 되었다는 응답을 사용자에게 보내게 된다. 아래는 ‘test’ / ‘1234’으로 입력 된 값을 임의의 입력 값 ‘test3’ / ‘1234’으로 변경한 후에 응답결과를 받은 모습이다. 이처럼 입력 값을 변경하여 로그인 폼에 입력되었던 ‘test’ 계정이 아닌 다른 계정 ‘test3’에 로그인 된 모습을 알 수 있다.
위와 같은 입력 값 변조공격은 공격이라고 볼 수 없을 만큼 매우 간단하지만 이 버프스위트를 통해 이루어지는 공격은 매우 다양하게 활용되며, 실제로 이 도구를 이용해 웹 서버에 대한 검증 절차를 우회하여 치명적인 피해를 입히는 등의 공격이 이루어지고 있다.
웹 서버를 대상으로 하는 공격은 점차적으로 진화하고 있다. 웹 브라우저에서 입력 값에 대한 필터링이 되어 있다 하더라도 이와 같은 프록시 툴로 우회하여 공격을 시도할 수 있기 때문이다. 그러므로 웹 서버를 관리함에 있어서는 가용성에만 치중되지 않도록 보안에도 신경을 써야 한다. 가장 기본적으로 요청 메시지와 응답 메시지 모두 암호화가 되어야 하며 이를 공격자가 변조할 수 없도록 하여 웹 서버를 대상으로 시도되는 공격에 대응하고 보안사고를 사전에 예방하길 권장한다.
'보안 도구' 카테고리의 다른 글
오픈소스 CMS 취약점 점검 도구 CMSmap이란? CMSmap 사용법 (0) | 2016.09.22 |
---|---|
[정보 수집 도구] FOCA 란?, FOCA 사용법 (0) | 2016.09.19 |
[웹 디버깅 툴] HttpWatch 사용법 (1) | 2016.09.01 |
[모의해킹(Pentesting) 도구] Backdoor-Factory 사용법 (0) | 2016.09.01 |
[맬웨어 제로킷] Malware Zero Kit 악성코드 제거 툴 mzk (0) | 2016.08.31 |