네트워크 정리4

윤석주·2022년 8월 22일
1

네트워크

목록 보기
10/13

본 포스팅은 널널한 개발자님의 네트워크 강의를 보고 정리한 내용입니다.

(Application) Proxy

우리가 배웠던 client-server 구조를 생각해봅시다. 클라이언트 PC#1(3.3.3.3)과 서버(5.5.5.5)가 데이터 통신을 하는 상황입니다. 이런 경우 일반적으로 PC#1은 서버와 TCP/IP연결을 수행한 뒤 HTTP/HTTPS를 이용해 통신하겠죠?

그런데 이 구조에서 PC#2(9.9.9.9)를 추가해봅시다. 그리고 이를 Proxy라고 가정하겠습니다.

proxy server is a server application that acts as an intermediary between a client requesting a resource and the server providing that resource. - wikipedia

이런 경우 PC#1(3.3.3.3)은 PC#2(9.9.9.9)에 요청을 보냅니다. 이후 PC#2가 server(5.5.5.5)로 요청을 보내게 되죠. 응답도 마찬가지로 전달됩니다.

이렇게 클라이언트와 서버가 직접 통신하지 않고 중간에서 중계를 해주는 서버를 Proxy 서버라고 부릅니다. (개발을 해보셨다면 AOP 프록시와 같은 개념이 떠오를 수 있습니다. 개발적 방법론이지만 구조는 비슷하게 해석이 가능합니다. 스케일이 많이 다를뿐..)

만약 프록시 server에 프록시 역할이 가능한 process가 있다고 가정해보겠습니다.

해당 프로세스는 PC#2의 user 모드 위에서 동작하고 있을 것입니다. 이후 클라이언트에서 정보가 오면 Socket을 통해 내용을 전달받습니다. 이후 해당 내용을 다른 소켓을 이용해 서버에 전송해주는 역할을 하는 것이죠.

Proxy가 User mode에서 동작하고 있으니 Socket을 사용할 것이고, Socket을 사용한다는 얘기는 Stream 데이터를 다룬다는 얘기입니다. 이 내용을 잘 기억하셔야 합니다.

만약 TCP/IP 수준에서 뭔가를 다룬다면 Packet을 다루게 되겠죠. 계층에 따른 데이터의 종류를 잘 기억하는것이 좋습니다.

Proxy 활용1 - 우회


Proxy를 이용해 접속하는 경우를 생각해보겠습니다. PC#1이 서버에 직접 접근한다면 서버와 TCP/IP 연결을 수행하겠죠. 하지만 Proxy를 등록한다면 PC#1은 Proxy와 TCP/IP 연결을 진행할 것입니다. 이후 Proxy가 서버와 TCP/IP 연결을 진행하겠죠.

이렇게 된다면 서버의 입장에서 PC#1의 존재를 알 수 없습니다. 서버는 Proxy서버에서 요청이 온 것으로 인지하게 되죠. 이것을 여러 가지 방식으로 응용할 수 있습니다. 그 중 첫번째는 우회입니다.

중국이나 러시아에서 인터넷을 금지시켰다는 얘기를 들어보셨을 것입니다. 또 해외 IP를 막아놓은 서비스들도 많죠. Proxy를 이용하면 이러한 서비스들을 우회하여 사용할 수 있게 됩니다. PC#1이 한국이고 Proxy가 중국이라고 가정해봅시다. 실제 요청은 한국에서 했지만 서버는 중국에서 요청이 왔다고 보게 됩니다. 이러한 방식을 이용해 우회 프로그램을 생성할 수 있는 것이죠.

Tor Project도 유명합니다. 인터넷에 자유를 이라는 목표하에 다크웹 등에 접근 가능한 토르 브라우저를 제공하는 프로젝트인데 이런 서비스도 프록시를 이용해 구현이 가능하죠.

이렇게 프록시를 이용한 우회시 주의사항이 있습니다. 모든 통신이 Proxy에서 진행되기에 Proxy에서 소켓 통신 내용을 감청할 수 있다는 것이죠. Proxy서버에서 소켓 로그를 모두 확인한다면 클라이언트와 서버간의 모든 통신 내용을 감청 가능합니다.

Proxy 활용2 - 분석

packet 분석툴로 흔히 wireshark를 사용합니다. packet을 센서로 수집하여 process 수준으로 끌어올려주죠. 이러한 분석은 유용하지만, 가끔 어려운 경우가 생깁니다. 만약 사용자가 HTTPS를 이용해 통신한다면 packet 수준에서 이미 데이터가 암호화 되어있어 해석이 어렵죠. 물론 자기 자신의 address에서 분석한다면 불가능하진 않겠지만 암호화된 내용을 해석해야 할 겁니다.

이런 경우에도 Proxy를 사용할 수 있습니다. chrome 브라우저에 루프백을 프록시로 등록하는 경우 통신 내용이 socket을 통해 user mode의 프록시로 연결됩니다. 이후 프록시가 서버로 데이터를 전송하는 과정에서 암호화가 진행되죠.

즉, 로컬의 process가 로컬의 proxy process로 보내는 데이터는 평문이라는 얘기입니다. 따라서 데이터 분석등에 용이합니다. Fiddler라는 도구도 이런 식으로 사용이 가능하죠. 이렇게 Proxy는 분석에도 이용이 가능합니다.

Proxy 활용3 - 감시와 보호


사내 서버가 다음과 같이 구현되어 있다고 가정해봅시다. 여기에 Router에 Proxy(3.3.3.100)을 연결하는 것이죠.

사내에 있는 PC들이 3.3.3.100을 Proxy로 지정한다면, 사내의 모든 PC들은 인터넷 사용시 요청과 응답이 Proxy에 쌓이게 됩니다. HTTPS 통신이라고 해도 Proxy에선 사내의 모든 요청을 감시할 수 있게 되죠. 흔히 사내 모니터링 시스템이라고 하는 프로그램도 개발이 가능합니다. 인사고과 반영도 가능하겠죠.

그 뿐만 아닙니다. 만약 라우터의 앞에 IPS와 같은 보안 시스템이 있다면, 보안시스템을 이용해 Proxy의 3.3.3.100만 인터넷과 통신이 가능하도록 강제할 수 있습니다. 이렇게 된다면 개인 PC들은 인터넷 사용을 위해 Proxy를 강제로 사용할 수 밖에 없죠.

또한 보안역시 가능합니다. 외부 서버에서 악성코드를 품고 있는 응답이 온다면, 개인 PC로 도달하기 전 Proxy에 도달하게 됩니다. 따라서 개인 PC가 소프트웨어 업데이트등을 하지 않아 취약한 상태가 되더라도, Proxy에서 사전에 악성코드 유입을 차단할 수 있는 것이죠. 이런 경우 Proxy는 Virus wall로 동작하게 됩니다.

이처럼 Proxy는 어떻게 활용하는가에 따라 다양한 역할을 가지게 되는 것이죠.

Proxy 활용4 - Reverse Proxy

지금까지는 Client 딴에서 proxy가 사용되는 예시를 살펴보았습니다. 그러나 서버딴에서도 마찬가지로 Proxy를 사용할 수 있겠죠?

서버딴의 앞에 Proxy를 넣게 된다면, 서버에 접속하려는 클라이언트들이 DNS를 통해 응답받는 IP는 Proxy의 IP가 될 것입니다. 즉 Proxy를 거쳐서만 서버로 접근할 수 있겠죠.

이렇게 되면 당연히 감시와 보호가 유용해집니다. 보호란 당연히 웹 서버의 자원을 보호하는 것입니다. 클라이언트때와 마찬가지로 웹 서버에 직접적으로 접근하는 방법이 없어지기에 보안성이 올라가게 됩니다.

또 한가지는 클라이언트의 감시입니다. 클라이언트들의 요청이 소켓수준에서 Stream으로 남기에 공격인지 파악할 수 있게 됩니다. 그리고 이를 확정하여 IP를 차단하는 것도 가능하겠죠. 이렇게 사용하는 것이 대표적인 Reverse Proxy의 예시입니다.

그리고 Reverse Proxy구조로 클라이언트의 공격을 차단한다면 이를 Web Application Firewall(WAF)라고 부릅니다.

이는 매우 유용합니다. 위에서 살펴보았듯 Application레벨 즉 소켓 레벨에선 Stream 데이터를 볼 수 있기 때문이죠. 악성파일을 업로드하던 https로 통신을 하던 packet수준에서 암호화된 작은 데이터 조각을 다루는 것 보다 훨씬 공격 감지에 용이합니다. 서버에서 패킷 수준에서 감시하는 것에 비하여 효과적으로 악성 접근을 막을 수 있는 것이죠.

지금까지 proxy의 개념과 이를 활용하는 방법들에 대해 살펴보았습니다.
<출처>

profile
웹 개발을 공부하고 있는 윤석주입니다.

0개의 댓글