웹방화벽이란?

WAF 웹방화벽

지난 주에 웹방화벽으로 인해서 장애가 난 서버가 있었다. 웹서버, 와스는 정상으로 보였는데 일부 요청은 성공하고 일부 요청은 실패했다. 특히 80포트로 GET, POST는 정상이고 443포트로 GET은 정상, POST는 비정상이었다. 브라우저에서는 호출하면 서비스가 정상이었는데, ‘앱’에서는 https로만 통신을 해서 장애인 상황이었다. https로 GET 요청은 성공하니 SSL 통신자체의 문제는 아닐것임 까지는 파악했으나, 당최 어디가 문제인지 어느 구간에서 암호화된 요청을 받지 못하고 있는건지 알 수가 없었다.

나중에 SSL통신의 문제가 아니라 웹방화벽에서 content-type: jsondeny하고있었던 것이 문제였음이 밝혀져서 장애는 마무리되었다. 웹방화벽에서 정책설정이 잘못되어 일부 content-type의 경우 요청을 받지 못하는 상황이었다. 외부망 통신이 있는 DMZ 웹서버였는데, 웹방화벽은 의심조차 하지 않고있었다. 그리고 사실 웹방화벽이 웹서버 보호하는 정도로만 이해하고 있었는데 이번기회에 정리해보기로 했다. 구글링을 해도 와닿지 않는 부분이 많아서 일단 사내 담당자에게 문의해서 1차적으로 이해한 후에 더 찾아보았다. 정의와 이해한 내용을 바탕으로 정리하였다.

WAF란?

Web Application Firewall(WAF)는 HTTP 트래픽 필터링, 모니터링을 통해 web application과 internet 사이를 방어한다. HTTP 트래픽을 탐지한다는 점에서 일반 방화벽이랑 차이가 있다. HTTP 필터링을 통해 cross-site forgery, XFF, SQL injection 등 여러 가지 공격을 탐지한다. WAF는 OSI 7계층에서 7 level에 해당하는 레이어이며, 모든 공격을 방어할 수는 없다. -> 정의는 이해를 했는데, 웹방화벽이 L4/DNS 등과 관련해서 어디 쯔음에 위치해있는 것인지 이해가 안가서 담당자에게 문의해보았다.

Q. 웹방화벽이 서비스마다 서버가있는 것인가요? 아니면.. 웹방화벽 서버가 있고 웹방화벽이 필요한 서비스들이 요청하면 list에 추가하는 방식으로 작동하나요 ?

웹방화벽자체가 별도의 서버는 아니고요. 어플라이언스 장비 .. 즉 보안장비입니다. 등록 필요한 서비스가 있을 경우 웹방화벽에 웹서버 IP와 서비스 포트를 등록하여 추가하는 방식으로 진행히 되고 있고요.


Q. 아넵. 보안장비라는것이면.. 네트웤 장비같은 하드웨어의 개념인가요 ?? 그리고 IP/포트를 추가하는방식이면 해당 서비스에 웹방화벽에 지정된 IP/port 이외의 요청이 왔을떄에 웹서버로 서비스요청이 가지 않도록 하는것인가요 ?

네네 맞습니다 네트웍방화벽 같이 하드웨어 개념입니다. 해당서비스에 웹방화벽에 지정된IP/ PORT 이외의 요청이왔을경우에는 웹방화벽이 관여하지 않고요. 웹방화벽 지정된 IP/PORT로 들어온 요청에 대해서만 컨트롤 합니다. 그 외의 PORT의 경우 아예 웹방화벽을 타지 않는다고 생각하시면 됩니다.


Q. 아 그러면 웹방화벽에 등록한 서비스의 경우에는, 등록된 ip/port의 요청만 실제 web서버로 분기시키고, 그 외의 요청은 아예 웹방화벽을 타지 않기 때문에 실제 web서버로 요청도 가지 않도록 작동한다고 이해하는게 맞을까요??

괜찮으시면 통화로 말씀드릴께요



이하는 통화로 친절하게 설명해주셨다!
정리하면, 웹방화벽 앞단에 L4가 구성되어있어 “클라이언트 - DNS - L4 - 웹방화벽 - 웹서버”와 같은 순서로 실제 요청이 들어온다. L4에서 웹방화벽으로 분기시키도록 설정할 수 있고, 여기에서 1차적으로 네트웤 트래픽 제어가 가능하다. 웹방화벽은 외부 인터넷의 공격으로부터 웹서버를 보호하기 위함이기 때문에 외부망용 서버만 추가를 한다고 한다. 또, 서비스마다 탐지모델에 조금씩 차이를 둘 수 있다. 비정상 트태픽으로 분류되는 경우에 바로 차단하지 않고 임계치를 설정하여 차단할 수도 있다.
이 외에 추가적으로 WAF는 세 가지 방식으로 구현될 수 있다고 한다.

1. Network-based

보통 하드웨어이다. 사내에서 사용하고 있는 웹방화벽이 장비라고한 것을 보면, 여기에 속할 것 같다. 로컬(실제 L4, 웹서버가 위치한 장비와 같은 대역을 일컫는 듯)에 설치되어있기 때문에 latency를 최소화할 수 있지만, 물리장비이기 때문에 비싸다는 단점이 있다.

2. Host-based

application software 처럼 서버사이드에 WAF를 심을 수 있다. network-based 보다 저렴하고 커스터마이징 하기 쉽다. 하지만, 로컬 서버의 리소스를 사용해야되고 직접 커스터마이징 해야하기 때문에 유지보수에 비용이 들 수 있다.

3. Cloud-based WAF

구현이 쉽다. DNS에서 Cloud-based WAF로 리다이렉트하도록 설정하면 된다. 유저가 신경쓸 부분이 적고, Cloud 기반이기 때문에 비용 측면에서 자유도가 크다. 단점은, third-party에 핸들링할 권한을 주는 것이기 때문에 내부에서 어떤 일이 일어나는지는 알 수 없다.

여기까지 웹방화벽에 대해서 정리해보았다. 실제로 웹방화벽이라는 장비는 어떻게 생긴건지, 내부에서는 어떻게 프로그래밍 되어있는지 등등에 대해서 까지는 사실 알 수는 없었다. 하지만, 웹방화벽이 ‘개념’은 이제 이해했고 동작방식에 여러가지가 있다는 것 까지만으로도 일단 비슷한 이슈가 있을때에 접근하기 좋을 것 같다.

웹방화벽을 정리하다보니, SSL관련해서도 정리할 필요가 있는 것 같다. 요즘 브라우저에서 2020년부터 TLS 1.1이하는 지원하지 않는다는 것 때문에 SSL이 한창 문제가 되고 있다. 웹방화벽에도 SSL을 씌우는데, 생각해보니 웹방화벽에는 왜 SSL을 씌워야 하는지, L4는 SSL을 씌우지 않아도 되는지 그럼 L7은 ? 등등 SSL관련해서 정리되지 않은 질문들을 정리해보아야 겠다.