당신의 웹서비스는 안전하십니까? 웹 방화벽(WAF)의 필요성

HYEONG HWAN, MUN/ 7월 2, 2019/ 미분류/ 0 comments

초고임. 한달 정도 글을 다듬을 예정. 글 흐름에 맞지 않는 문장이나, 거친 표현이 있을 수도 있음.

 


이 글을 통해, 왜 우리의 웹서비스가 취약한지, 취약점의 종류는 어떠한 것이 있는지, 웹서비스 보안을 대폭 향상시켜주는 간편한 솔루션이 웹 어플리케이션 방화벽(Web Application Firewall)에 대해서 알아보도록 하겠다.

웹방화벽 구축, 구성까지 작성하려고 했는데, 너무 글이 길어질까봐 서론과 필요성, 간략한 도입 방법에 대해서만 설명하겠다.

 

CRUD 라는 단어가 있다. 어떤 환경에서 Create, Read, Update, Delete 만 할 줄 알면 프로그램을 만들 수 있다는 것이다.

실제로 CRUD 만 할 줄 알아도, 수십년동안 먹고 살 수 있다.

직업전문학교에서도 CRUD만 가르친다. (CRUD만 알아도 취업이 되니까!)

컴퓨터공학 전공의 경우, CRUD + 효율적으로 프로그래밍 하는 방법을 가르쳐 준다. 자료 구조와 선형대수학, 알고리즘을 사용해서 더 작고 더 빠르게 문제를 해결 할 수 있게 해 준다.

그리고 실제 일을 해보면서 CRUD, 알고리즘 이외에 패러다임, 프레임워크, 메모리 관리, 코딩 규칙, 형상 관리, 배포 관리, 스케일링 관리등 많은 것을 배우게 된다.

그리고 이 모든게 고려된 후쯤 드디어 정보 보안, 시스템 보안의 단계에 이르게 된다.

 

즉, 아무리 경력이 많고 훌륭한 제품을 만들었다고 하더라도, 그 사람의 방식이 안전하다 라고 보장하지는 않는다는 것이다.

< 그림 : 우리의 사고는 훈련되어 있다. >

 

어느 프로그램에서 “숫자만 입력하세요” 라고 한다고 해서, 사용자가 숫자만 입력한다는 보장이 없다.

라엘이 같은 경우 충분한 취약점이 예상되는 경우, 숫자 대신 문자나 특수문자를 입력해서 시험해 본다.

 

보안은, CRUD 나 알고리즘 영역이 아니기 때문에 쉽게 넘어갈 수 있는 부분이다.

또한 많은 프로그램이 좋은 사용자, 의도된 입력을 하는 사용자만을 고려하고, 실제로 그런 사용자가 사용하기 때문에 문제가 없는 것 처럼 보인다.
그러나 나같은 사용자가 한명이라도 있다면 시스템의 큰 문제를 일으킨다. 몇가지 입력으로 관리자 권한이 되고, 회원DB를 전체 백업받고, 악성코드를 삽입하고, 로그를 남기지 않고 사라질 수 있다.

사실 보안이라는 것이, 문제가 생기면 어마어마한 타격이 생기지만, 그 문제가 생기기 전까지는 보안의 중요성을 주장하기가 어렵다. 그래서 보안을 고려하지 않은 코딩을 하고, 보안에는 비용과 노력이 들기 때문에 별로 고려하려고 생각하지도 않는다.

 

현재 라엘이가 다니는 회사 시스템도 지금은 https 로 많이 하였지만, 입사한 후에 https 로 바꾸어야한다고 말을 했는데, 보안인증서에 비용도 들고, 이메일 인증도 해야하는 문제점도 있었다.
무엇보다 힘든건 사람을 설득하기 힘들었다. 네트워크가 취약해 졌을때나 스니핑이나 MITM등 공격을 이해시키기 힘들었고 결국엔 https 를 도입하지 못했다.

당시에, 나만 사용하거나 내가 주도권이 있는 곳(내부 총괄관리자 사이트등)에만 https 를 적용하였고, 많은 사이트 서비스는 http 를 사용했다. (돈이나 인증서 발급 절차문제보다, 사람을 설득 못하겠음. 보안의 중요성 설득하기 정말 어렵다.)

아무튼 1) 보안 코딩을 할 줄 모름, 2) 보안 인식을 하지 않음, 3) 보안의 방법을 모름 등 많은 문제가 있는 것이다.

보안을 위해서는 해킹을 할 줄 알아야하는데, 이것까지 설명하려면 글의 주제와 맞지 않으므로 넘어가겠다.

 

아무튼 우리의 웹서비스는 보안을 고려해야 한다.

그러면 어떠한 보안 위협을 고려해야 하는지 알아보자.

1. 어떤 보안 문제가 있을까?

OWASP 라는 단어를 외워두자. “오픈 웹 어플리케이션 보안 프로젝트”라는 뜻이다.
Open Web Application Security Project.

https://www.owasp.org/

매년 보안 취약점을 분석하고, 통계를 내고, 개략적인 방어 방법에 대해서 알려준다.

중요한 페이지는 OWASP Top 10 Most Critical Web Application Security Risks 이다.

가장 최근의 문서는 다음과 같다. https://www.owasp.org/images/b/bd/OWASP_Top_10-2017-ko.pdf

당신의 소프트웨어는 이 OWASP Top 10 를 방어할 준비가 되어 있어야 할 것이다.

 

2. 어떻게 방어를 할까?

가장 좋은 방법은, 공격 자동화 툴이나, 공격 방법을 아는 사람이, 코드를 보면서 공격해보고 수정하는 것이다.
이것은 많은 노력과 시간이 들어간다. 하지만 input 을 올바르게 처리하는 것은 중요한 것이므로 꼭 필요하긴 하다.

하지만 이미 잘 돌아가고 있고, 뜯어고치기 힘들거나, 보안에 리소스를 투자할 수 없는 경우에는 어떻게 해야할까?

이때에는 바로 웹 방화벽을 사용해야 한다.

 

웹방화벽은 Web Application Firewall 이라고 하며, 줄여서 WAF, 한글로 와-프 라고 부른다.
요즘 많이 쓰는 단어이므로 잘 알아두기 바란다. “혹시 와프 쓰나요?”라는 질문을 받았을때 당황하지 않길 바란다.

WAF 는 웹어플리케이션 방화벽이므로, HTTP 요청을 해석할 수 있어야 한다. 즉 Layer7 단계에서 동작한다.
트래픽을 완전히 해석한 후에 동작하기 때문에 리버스 프록시로 동작한다.
Input 과 Output 을 필터링하여 동작한다.

 

실제 서비스를 건들이지 않고 중간 단계에 개입만 하기 때문에 적용하기가 쉽다. (다만 상세하게 제어하는것은 기술이 필요하다.)

프록시서버가 개입되기 때문에, 원본 프로그램에서 IP나 Protocol 해석에 관한 코드를 추가해야 할 것이다.

 

아마존의 경우 Web Application Loadbalaner 를 사용할 경우 WAF 를 추가할 수 있다.

또는 직접 WAF 를 구축할 수 있다.

 

< 그림 : 적절하게 처리하면 ELB 단계에서 악성 트래픽을 차단할 수 있다. >

 

< 그림 : 웹서비스에 권장하는 WAF 적용 도식도 - Imperva WAF >

 

< 그림 : 스팸 IP나 피싱 IP, TOR IP 의 경우 불량 접속일 확률이 아주 높다. 차단하면 좋다. >

 

< 그림 : 알려진 오픈소스 소프트웨어 취약점을 막도록하자. 의외로 최신버전 업데이트를 하지 않고 오랫동안 사이트를 유지하는 곳이 많다. >

 

< 그림 : output 도 필터링이 가능하다. 악성코드가 삽입되거나 개인정보, 카드정보, 주민등록정보가 포함될 경우 응답을 차단하거나 마스킹 처리할 수 있다. >

 

< 그림 : common sql injection 및 xss 공격을 해보았고, 방어한 기록이다. >

 

< 그림 : 공격 방어 기록 >

< 그림 : 자동화 해킹툴 차단 >

< 그림 : 초보 개발자가 저지르는 실수. 이런 자동화 툴은 초보개발자가 심어둔 의심스러운 파일을 찾기 시도한다. >

1.php 같은 파일은 주로 테스트 용도로 사용하기 때문에, 보안코딩이 되어있지 않을 경우가 매우 높다.
cmd.php 는 시스템의 높은 권한으로 실행될 확률이 아주 높다.

 

< Piolink WebFront 라는 국산솔루션 >

 

 

글 더 다듬어야 할듯.


내일 7월 2일, 제가 한국 아마존 본사를 방문합니다!

관련 후기는 따로 작성할 예정입니다!

 

컵이 생겼습니다.

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*