Paros – 웹 프록시

최근 뉴스에서 “900만원을 9천원에 결제”라는 해킹 사고를 다룬 기사를 본적이 있다. 이 글을 보면서, “아 이걸로 했구나” 라는 생각이 바로 들었던 도구가 바로 Paros이다.

이 취약점은 내가 재직하던 회사에서도 점검했던 취약점인 만큼 쉽게 인식할 수 있었고, 이 도구를 이용해 필자 역시 종종 테스트를 진행한다.

Paros는 개인 프록시로서 웹 변조를 가능하게 해주는 강력한 도구이다. Paros의 가장 큰 특징은 이를 이용해 로컬 프록시로 웹에서 주고 받는 필드 값을 수정하여 주거나 받을 수 있다. 자바스크립트 제한이나 입력 값 등의 제한을 우회할 때에도 많이 이용되고, 서버로부터 받는 값을 수정할 때도 종종 이용할 수 있다. 그 외에도 프록시로 모든 주고받은 데이터를 저장하므로 히스토리 분석용으로 아주 좋다. 웹 공격용 도구 중 자주 사용되는 도구라 생각된다(웹 요청 패킷도 손쉽게 제작이 가능하다).

Web Browser에서 보내는 Request, Response를 조작하거나 임의로 패킷을 만들어 보낼 수 있다고 생각하면 쉽다. 이 도구는 아래 URL에서 다운로드 가능하며, 자바 런타임(Java JRE/JDK 1.4.2)을 필요로하므로, 아직 다운로드하지 않은 독자는 다음 사이트를 이용해 설치하기 바란다.

http://java.com

Paros 도구는 다음위치에서 다운받을 수 있다.

http://www.parosproxy.org/

이 도구를 사용하기 위해서는 먼저 웹 브라우저에 프록시 설정을 하여야 한다.

 

↓웹 브라우저 프록시 설정의 포트를 Paros의 Tools à Options과 동일하게 지정하면 된다.

[그림 28-1] 프록시 설정

 

그리고 Paros를 실행한다. 실행 후 Paros의 탭 중 Trap 탭을 열고 Trap requestTrap Respone를 체크하면 지금부터 주고 받는 웹 데이터를 Paros에서 실시간으로 트래킹하게 되며, 주고 받는 모든 데이터 수정이 가능해진다.

 

[그림 28-2] 웹으로 주고 받는 패킷의 수정이 가능해진다

 

각 탭은 아래와 같은 역할을 한다.

Sites Tab: 웹 데이터를 사이트 별로 보관하여 Request Tab과 Response Tab에서 해당 값 확인이 가능하다

Request Tab: 기록된 특정 데이터를 선택하여 서버에 보낸 값을 확인하는 Tab

Response Tab: 기록된 특정 데이터 선택하여 서버에서 받은 값을 확인하는 Tab

Trap Tab: 실시간으로 주고 받는 값으로 수정을 하여 Continue 하거나 해당 값을 Drop 할 수 있다(중요).

 

[그림 28-3] Paros 메인 화면

 

여기서는 앞의 뉴스에서 언급한 해커가 사용한 방법을 통해 Paros에 대해 배워 보도록 하자. 결제 방식 중 몇몇은 결제를 위해 웹 페이지에서 결제 업체의 사이트로 팝업을 띄워서 해당 사이트에서 결제를 완료하고, 이 승인 정보를 해당 웹 페이지에서 받아들여, 이를 통해 결제가 진행되게 된다. 아마 해커는 이 흐름 중 아래 그림과 같이 원본 웹 페이지에서 얼마를 결제하였는지는 확인하지 않고, 승인되었다는 정보만 확인하는 것을 알고 있었던 것일 것이다. 이는 실제 내가 담당하던 사이트에서도 발생했던 문제점으로, 결제 시스템 개발시 검수 과정이 없어서 나타난 문제점이라고 할 수 있다. 아래 그림을 확인해 보자.

 

[그림 28-4] 결제 업체로 넘어가는 정보를 조작하여 결제를 진행하게 된다

 

팝업을 통해 결제 업체에서 결제를 진행해야 하는 방식은 대다수 결제 사이트들이 이용하는 방식으로, 금융정보를 업체들에게서 보호해야 하기 때문에 어쩔 수 없는 조치라 할 수 있다. 따라서 이는, 결과적으로 보면 신용카드사에서는 결제 정보를 넘길 때, 금액 정보도 함께 넘기는데, 문제점이 있는 웹사이트에서 기존 결제 팝업 생성시 결제 금액을 기록하여 비교하지 않는 것이 제일 큰 문제라 할 수 있다.

Paros를 이용해 어떻게 조작하였는지 확인해 보자.

 

↓위 금액은 정상적으로 신용결제를 진행했을 때 화면으로 결제 사이트로 보내는 정보를 Paros를 이용하여 아래와 같이 결제업체에 보내기 전에 요청을 잡아 낼 수 있다.

↓해당 요청의 금액 부분을 55000에서 1000으로 수정하여 결제 업체에 보내게 되면, 결제 업체는 1000원으로 결제를 진행하게 되고, 만약 원본 사이트에 요청 금액을 확인하는 코드가 없다면, 실 결제는 1000원이지만, 원본 사이트에서는 55000원으로 결제된 것으로 나타나게 된다.

[그림 28-5] 결제 금액이 1000원으로 진행된다.

 

결제 금액 정보 중 승인 유무만 확인하게 된다면, 55000원의 금액을 1000원으로 결제할 수 있게 되는 것이다.

이러한 정보를 사전에 알고 있다면, 이 취약점은 어이없는 취약점임을 느낄 것이다. 하지만 보안이라는 것이 무엇인가를 견고하게 만드는 작업이고, 대부분의 공격도 개발자가 놓치기 쉬운 이런 사소한 허점을 노리는 경우가 많기 때문에 더욱 경각심을 가져야 할 것이다.

이 외에도 Paros를 이용해 임의의 요청을 만들어 낼 수 있는 기능도 유용하게 쓰인다. 필자의 경우 이를 이용해 상위 디렉토리 취약점을 확인했던 적이 있다. Tool
à
Manual Request Editor에서 진행할 수 있다.

 

[그림 28-6] 요청을 직접 조작하여 만들 수 있다

 

최근에는 웹 해킹테스트 도구를 개발하여 함께 공유하고 있으니 ParosPro도 관심 있으신 분들은 설치해 사용해 보기 바란다(30일 시험 버전을 통해 테스트를 할 수 있다).

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.