웹 방화벽, 그것이 궁금하다.
웹 방화벽(Web Application Firewall)은 통상 앞글자를 따서 와프(WAF)라고 부릅니다. 앞에서 설명한 차세대 방화벽도 Web 트래픽은 식별할 수 있기 때문에 웹 방화벽과 동일한 기능을 지원하지 않을까 생각할 수 있습니다. 그럼 여기서 차세대 방화벽과 웹 방화벽의 차이점을 먼저 알아보도록 하겠습니다.
차세대 방화벽은 모든 트래픽에 대해 L7 레벨을 모니터링하고 제어할 수 있는 장비이며 네트워크의 다양한 트래픽을 관리할 수 있는 장비라면, 웹 방화벽은 http, https트래픽만 집중해서 모니터링하여 웹서버 해킹을 방지하는 목적으로 http method(get, put)와 같은 세부적인 옵션 값에 따라 임계치를 설정하여 차단하는 장비로써 차세대 방화벽으로 차단이 불가능한 웹 기반 공격을 전문적으로 탐지 차단하는 보안장비입니다.
일반적으로 차세대 방화벽이 설치되어 있더라도 업무상 혹은 비즈니스 목적으로 운영되는 웹 기반 서버가 있다면 추가적으로 웹 방화벽을 설치하여 웹 서버의 보안을 강화하는 것이 일반적인 적용 방법입니다.
그럼 웹 방화벽이 등장한 배경을 알아보죠. 앞에서 설명한 1세대 혹은 2세대(차세대) 방화벽의 보급이 늘어나면서, 서비스하지 않는 모든 포트는 방화벽의 보안정책으로 차단되게 되었습니다. 보통 서버들은 사용자가 이용하지 않는 서비스라도 OS가 설치되면서 기본적으로 오픈되는 포트가 여러 개 있습니다.
예를 들면 윈도 OS를 설치하면 파일공유, 원격 접속 등의 위한 포트가 기본으로 오픈되면서 방화벽에서 차단되지 않으면, 인터넷으로 통해서도 접속이 가능한 경우가 종종 있습니다. 이렇게 기본적으로 오픈되는 포트를 통해 많은 공격이 이루어졌지만, 방화벽의 보급이 늘어나면서 서비스하는 포트 이외에는 인터넷으로 통해 접근이 불가능해지면서, 공격자의 공격 대상이 줄어들게 되었습니다.
그런데 대부분의 조직에서 웹 서버는 기본적으로 사용하기 때문에 방화벽에서 HTTP, HTTPS 서비스 포트는 열지 않을 수가 없습니다. 공격자의 입장에서는 HTTP, HTTPS 이외에는 열려 있는 포트가 없다 보니, 웹 서비스만 집중적으로 연구해서 공격 기술을 개발할 수밖에 없는 환경이 된 것입니다.
이렇게 웹 기반 공격이 점점 발전되어 다양화되면서, 홈페이지 등이 변조되거나, 웹 서버를 해킹한 후에 이를 통해 사내의 DB서버에 접근해서 조직의 정보를 탈취하는 일이 빈번하게 발생되었습니다. 이런 웹 기반의 공격에 대응하기 위해 웹 공격 유행을 분석하여 3~4년 단위로 유행하는 공격 방식을 연구하여 가장 많이 사용하는 공격 유형 10가지(Top 10)를 발표하는 조직이 있습니다.
OWASP(Open Web Application Security Project)라는 일종의 커뮤니티로 다양한 개발자, 보안 관리자 등이 자발적으로 참여하여 조직한 비영리단체로 OWASP Top 10 이란 이름으로 주기적으로 보고서를 발표하고 있습니다. 최근 발표된 버전은 2017로서 아래 <그림 1>과 같이 A1부터 A10까지 가장 빈번하게 발생되는 웹 공격 10개를 나열하고 각 공격 별 취약점 확인 방법과 보안 대책을 설명하고 있습니다.
제일 빈번하게 발생되는 공격인 인젝션(Injection:주입)의 경우 말 그대로 클라이언트의 입력값을 조작하여 비 정상적인 명령어를 주입하고 해당 서버의 DB에 있는 다양한 정보를 탈취하거나 관리자 권한을 획득하는 공격 방법입니다. 쉬우면서도 공격 성공률이 높은 유형으로 2017년 3월에 발생한 "여기 어때"라는 숙박 정보 회사의 고객 DB정보를 통해 가입자 절반인 99만 명의 이름, 휴대전화 번호, 숙박 이용정보가 노출되는 사고도 이 공격으로 발생한 사고였습니다.
가장 유명한 공격 중 하나인 SQL Injection 공격 방식을 설명드리면, 아래 <그림 2>에 있는 1번과 같이 정상적인 SQL 명령어가 있다고 가정해 보겠습니다. 여기에 2번과 같이 ' OR 1=1 --'이라는 문구를 중간에 삽입하여 3번과 같이 SQL 명령어를 웹 서버로 전송하게 합니다. 1번 명령어는 ID가 INPUT1이고 패스워드가 INPUT2인 사용자의 모든 정보를 불러오게 하는 명령어인데 여기에 특정 문구를 삽입해서 3번과 같이 변조하여 서버로 전송하게 되면, 삽입한 문구 중 '--' 뒤에 있는 문구는 모두 주석 처리되고, OR 1=1은 언제나 True가 되기 때문에 결과적으로 서버에서는 유저 테이블에 있는 모든 정보를 불러오게 하는 명령어로 인식되기 때문에 서버가 보유한 모든 유저들의 정보가 공격자에게 출력되는 결과가 초래되게 됩니다.
그럼 이런 공격을 웹방화벽에서는 어떻게 차단할 수 있는지 알아보죠. 웹 방화벽은 웹 서버 앞에서 사전에 HTTP 패킷을 분석하여 정상적이라고 판단되는 트래픽만 웹 서버로 전달합니다. 아래 <그림 3>와 같이 트래픽이 들어오면 아래와 같은 여러 가지 단계의 분석을 통해 공격을 차단하게 됩니다.
1. 패킷의 L7 레벨을 확인하여 정상적인 HTTP구문 인지 먼저 확인한다.
2. URI(예:www.abc.com/user)를 식별하여 적용되어 있는 정책을 확인하고 어떤 공격 탐지 rule을 적용하여 검사할 것인지 판단한다.
3. 적용된 공격 탐지 룰에 따라 여러 가지 공격을 탐지한다. 이때 블랙리스트(black list)를 이용하여 사용할 수 없는 구문이나 패턴을 먼저 차단시킨다.
4. 화이트리스트(white list)를 이용하여 허용된 구문 또는 패턴을 통과시킨다.
5. 정상적인 시도라도 임계치 설정을 통해 짧은 시간 동안 여러 번의 시도가 있으면 차단시킨다. 6. 서버에서 응답하는 웹 페이지가 변조되어 있는지, 에러 코드를 반환을 통해 공격자에게 정보를 제공하는지 확인하여, 관리자에게 경보를 알리거나 반환 값을 숨긴다.
웹 방화벽의 경우도 일반 방화벽과 같이 시간이 지나면서 점점 발전을 거듭하였습니다. 초기 웹 방화벽은 사전에 관리자가 설정하는 화이트리스트, 블랙리스트에 의존하기 때문에 오탐(정상적인 트래픽인데 공격으로 판단하는 경우) , 미탐(공격 트래픽인데 탐지하지 못하는 경우)이 발생하는 경우가 매우 빈번하였습니다.
이런 문제는 웹 방화벽이 URI(예: www.daum.net/news), 웹 트래픽 내용을 모니터링하여 학습하면서 정상적인 접속 내용은 화이트리스트를 자동으로 추가하거나, 기존에 학습된 내용과 현저히 다른 내용이 보이면 공격으로 판단하는 등, 사전에 등록된 패턴에 의존하지 않고, 유사도 등을 측정하여 공격을 차단하는 방식이 사용되었습니다.
최근에는 정치적이거나 민족주의적인 이유들, 예를 들면 815 광복절에 일본 해커가 독도 홍보사이트를 공격하여 홈페이지 내용의 위 변조를 시도하는 것 같이 과시형 공격이나, 웹 서버를 통해 고객 자료를 탈취하여 비트코인 등의 금품을 요구하는 행위 등 다양한 공격이 웹 서버를 대상으로 이루어지고 있습니다. 쇼핑몰, 서비스 예약, 웹 포탈, 홍보 사이트와 같이 조직의 비즈니스가 웹에서 대부분 이루어지는 조직에서 이제 웹 방화벽이 필수적인 보안 장비가 되었습니다.