웹 애플리케이션 보안제품은 웹 해킹 및 웜으로부터 핵심적인 웹 애플리케이션을 보호하는 전용 솔루션을 의미한다. 쿠키 변조, 세션 하이재킹, 폼필드 변조, 파라미터 변조와 같은 해킹에 대한 대응력이 뛰어나고 안전한 웹 서비스를 보장하기 위해 나온 웹 방화벽은 기존의 전통적인 방화벽처럼 Positive Security Policy 방식을 채택해 알려지지 않는 웹 공격에도 방어할 수 있도록 설계되어 있다. 여기서는 이미 많이 알려진 웹 공격에 대한 이야기나 웹 공격 방법에 대한 것은 논외로 하고 웹 방화벽에서 어떠한 방법으로 웹 공격 트래픽을 차단하는지에 대해 소개할 것이다.
[그림1] 네트워크 방화벽과 웹 방화벽에서 처리하는 네트워크 프로토콜 구성
웹 애플리케이션 보안 방법론
웹 애플리케이션 보안을 실현하기 위해 '안전하게 웹 애플리케이션을 개발하기 위한 지침서'에 따라 프로그래밍을 한다던지, 이미 개발돼 있는 프로그램의 소스 코드를 들여다 보던지 등 근본적인 해결책이 있지만 실제로는 적용하기가 쉽지 않고 보안 담당 관리자가 채택할 수 있는 방법도 한계가 있다. 이런 문제점의 대안으로 실제 구축되어 실효를 보고 있는 웹 애플리케이션 방화벽의 주요 기술에 대해 알아보도록 하자.
a. 애플리케이션 접근 제어(URL ACL)
웹 방화벽에서 제공하는 대표적인 Positive Security Policy 방식은 애플리케이션 접근 제어 기능이다. 전통적인 Negative Security Policy 모델에서는 취약점이 존재하는 파일의 시그니처 목록을 유지하면서 취약한 파일에 대한 접근을 차단하는 방식을 사용하지만(IDS, IPS), 이 방식은 알려진 취약점에 대해서만 제한적으로 적용할 수 있으며 공격당하기 전에 시그니처에 대한 업데이트가 이루어지지 않으면 무방비 상태가 될 수 있다. 웹 서버에는 서비스 제공자가 서비스를 제공하려는 대상 외에도 웹 서버가 설치될 때 자동으로 설치되는 테스트 애플리케이션이나 관리용 애플리케이션부터 개발 시에 남겨진 임시 파일까지 다양한 자원이 있다. 이러한 모든 자원에 대해 웹서버에 존재하는 모든 소스를 파악하는 것은 불가능하고 서비스에 관계없이 서버에 남겨진 모든 파일에 보안 취약점이 존재한다고 가정하여야 한다. 그래서 웹 방화벽은 직접적으로 서비스를 제공하는 파일만 명시적으로 공개하고 그 외의 모든 접근을 차단하는 Positive 방식을 채택한 것이다.
가장 간단한 접근 제어는 URL ACL로 웹 서버의 모든 자원 중 사용자에게 허용해야할 URL 리스트로 설정된 URL에 대해서만 접근을 허용하는 것이다. 이 허용 URL을 설정하는 것만으로도 의도되지 않은 중요 파일의 노출이나 서비스에 관계없는 취약한 프로그램의 노출을 차단할 수 있다.
[그림2] 허용할 URL과 파일 확장자를 지정하는 설정의 예
기본적인 허용 URL 리스트에 한 세션은 반드시 지정된 URL로부터 브라우징을 해야 한다는 시작 URL(Start URL)의 개념을 추가할 수 있는데, 시작 URL 기능을 설정한 경우 관리자에 의해 지정된 시작 URL(일반적으로 /index.html)에 접근한 적이 없는 사용자는 서버의 다른 어떤 URL에도 접근할 수 없는 기능이다. 이를 통해 웜에 의한 취약점 전파 시도, 취약점 스캐너에 의한 스캐닝 등과 같이 취약한 URL에 직접 접근해오는 강제 브라우징을 차단할 수 있다.
또한 로그인한 사용자와 그렇지 않는 사용자에게 다른 서비스를 제공하는 애플리케이션과 같이 자원이 구분돼 있는 경우는 별도의 보호 URL 리스트(Protected URL list)와 진입 URL(Entry URL List)을 설정해 자원에 대한 접근을 제한할 수 있다.
그런데 이와 같은 애플리케이션 접근 제어 기능을 사용하기 위해서는 애플리케이션의 구조에 대한 지식이 필요하다. 일반적으로 애플리케이션 관리자의 경우 애플리케이션 개발자와 다르기 때문에 애플리케이션의 구조에 대한 지식이 부족한 경우가 많다. 그래서 웹 방화벽은 애플리케이션의 구조를 자동으로 분석해주는 크롤러(Crawler)나 학습(Learning) 기능이 함께 제공되는 경우가 많다.
b. 폼 필드 검사 기능(Prameter ACL)
웹 애플리케이션에 대한 공격의 대부분은 폼 필드를 처리하는 action URL에 해당하는 프로그램에 대한 공격이다. 웹 애플리케이션에 대한 입력은 대부분 폼 필드를 통해 이뤄지므로 웹 애플리케이션 공격이 이 폼 필드에 집중되고 그래서 웹 방화벽의 핵심 기능도 폼 필드 입력에 대한 검사 기능이다. 폼 필드 검사 기능의 폼의 형식이나 입력 값의 조건 등을 입력하는 방식의 Positive 방식과 입력되어서는 안 되는 패턴을 정의하는 Negative 방식을 함께 사용한다.
예를 들어 quote('), comma(,), semi-colon(;), 스페이스 등의 SQL 표현식에 필요한 문자들과 OR, SELECT, UNION과 같은 SQL 키워드의 조합이 폼 필드 입력 값으로 들어오면 필드 형식 제한 및 차단 패턴 검사로 걸러지게 된다.
Xp_cmdshell과 같은 시스템 명령을 실행할 수 있는 공격이 들어오는 경우도 차단 패턴 검사에 의해 걸러진다.
[그림3] 폼필드 공격의 예
검사항목 |
설명 |
필드 길이 제한 |
필드에 대한 버퍼 오버플로우 공격을 차단하기 위해 입력 크기를 검사한다. 미리 정의된 길이에 위배되는 입력이 들어오면 차단 |
필드 형식 제한 |
SQL-injection, 버퍼 오버플로우 공격을 수행하는 것을 차단하기 위해 필드 형식을 검사한다. 일반적으로 정규식으로 표현된 패턴에 위배되는 입력이 들어오면 차단 |
상수 값 변조 검사 |
필드에 대한 입력 값을 변조하는 공격을 차단하기 위해 값이 고정된 필드의 경우 변조 여부를 검사한다. 필드가 항상 고정된 값을 갖거나 서버가 클라이언트에게 전달된 값이 변경없이 다시 돌아와야 하는 경우에, 허용된 상수 리스트 이외의 값이 입력으로 들어오면 차단 |
차단 패턴 검사 |
공격으로 알려진 패턴이 입력되는 것을 차단하는 기능이다. 대표적인 Negative 기능으로 SQL-injection, XSS, 버퍼 오버플로우 공격에 사용됨 |
[표1] 폼필드 검사항목
[그림4] 폼필드 ACL설정의 예
c. Cookie 보호 기능
웹 애플리케이션의 세션 기반 동작을 위한 핵심은 쿠키(cookie)다. 따라서 세션에 대한 공격을 위한 주 공격 대상이 되는 것도 쿠키며, 거의 모든 웹 방화벽에서도 쿠키 보호 기능을 제공한다.
쿠키 보호 기능에는 쿠키 형식 검사, 암호화, 변조를 막는 전자 서명으로 나눌 수 있다.
웹 방화벽은 사용자 설정이나 학습을 통해 쿠키의 크기, 형식과 같은 정보를 갖고 클라이언트에서 서버로 제공되는 쿠키의 형식을 검사하며 형식에 맞지 않는 쿠키 값이 존재할 경우 조작된 쿠키로 간주해 이를 웹 서버로 전달하지 않는다.
쿠키 암호화는 웹 서버에서 클라이언트로 보내는 쿠키를 웹 방화벽에서 암호화해 보냄으로서 악의적인 공격자가 암호화된 쿠키의 내용을 볼 수 없고 임의로 쿠키 값을 변조하더라도 웹 방화벽에서 복호화하여 다시 웹 서버로 전달 됐을 때 아무런 의미 없는 값이 전달되므로 공격을 무위로 돌릴 수 있다.
그런데, 쿠키의 단순한 암호화는 쿠키 값의 의미를 클라이언트가 추측할 수 없도록 해주지만, 쿠키의 조작 여부를 판단할 수는 없다. 조작 여부를 판단할 수 있도록 메시지 인증 코드(Message Authentication Code, MAC)를 삽입하거나 쿠키 전자 서명을 사용해 이를 보완한다.
아무리 암호화를 해도 쿠키의 내용을 변조하지 않고 그대로 가져가 다른 사용자의 세션을 가로채는 세션 하이재킹(session hijackin)공격에는 적절히 대응할 수 없다.
세션 하이재킹을 막기 위해서는 세션 쿠키의 타임아웃을 지정하는 방법을 사용하기도 하지만, 타임아웃 되기 전에 이뤄지는 세션 하이재킹에는 속수무책이다. 그래서 일부 웹 방화벽에서는 세션 쿠키에 대한 IP 주소 제한 기능을 제공하기도 한다. 서버가 쿠키를 전송해준 IP 주소 이외의 곳에서 쿠키가 입력될 경우 세션 하이재킹으로 간주해 요청을 차단하는 것이다.
이 같은 IP 주소 기반 쿠키 보호 기능은 보완성을 높여주기는 하지만, 동적 IP나 프록시 팜을 이용하는 사용자와 같은 특정 상황에서는 제한적으로 사용될 필요가 있다.
[그림5] 사용자로 가는 쿠키에 대한 암호화와 전자 서명을 나타냄
d. 웹 사이트 위장 기능
위장(Cloaking) 기능은 웹 방화벽 뒤에 있는 웹 서버의 정보를 최대한 숨겨 악의적인 공격자가 공격 대상을 지정하거나 공격의 성공에 도움이 되는 정보를 획득할 수 없도록 한다.
일반적으로 공격자들은 성공적인 공격을 위해 스캐닝을 통해서 웹 서버의 종류와 버전을 미리 알아낸 후 그에 해당하는 공격을 수행한다. IIS서버에는 IIS서버의 해당 버전에 맞는 공격 코드를 실행하고, 아파치 서버라면 아파치 서버의 해당 버전에 맞는 공격 코드를 실행하는 것이다. 이런 경우 웹 방화벽에 의해 조작된 서버 정보를 이용해 공격자를 방해하거나 아예 정보를 노출 하지 않을 수 있다. 특히 자동화된 취약점 공격 툴을 사용하는 공격자라면 변조된 서버 정보에 의해 공격을 성공시키는 것이 더욱 어려울 것이다.
[그림6] 사용자로 하여금 대상 서버에 대한 정보를 감춘다.
e. 컨텐츠 보호 기능
컨텐츠 보호 기능은 다양하지만 가장 인기 있는 것은 주민등록번호나 신용카드 정보의 유출 차단 기능이다. 이것은 SQL-injection과 같은 웹 애플리케이션에 대한 공격의 결과로 데이터베이스에 저장돼 있는 고객들의 개인 정보 유출을 차단하는 기능이다. 이 기능은 일반적으로 정규식과 같은 형식의 룰을 사용해 서버의 응답을 검사한다.
예를 들면 Visa 신용 카드의 경우는 다음과 같은 정규식을 사용해 응답을 검사한다.
4[[:digit:]]{12}|4[[:digit:]]{15}
정규식을 이용한 매칭 이외에도 주민등록번호와 같이 규칙이 있는 패턴은 별도의 검사 루틴이 포함돼 오탐지율을 줄이기도 한다.
f. 그 밖의 웹 애플리케이션 보호 기능
전통적인 방화벽에서의 NAT기능을 모방한 WAT(Web address Translation)기능으로 사용자에게는 실제 웹 주소를 감출 수 있다.
a.###.com/login.asp 와 b.###.com/banner.gif 는 모두 www.###.com/login.asp와 www.###.com/image/banner.gif 로 변경되어 사용자에게 노출하는 기능이다.
그 밖에 HTTP 트래픽을 HTTPS 트래픽으로 암호화해 전송하는 기능, 네트워크의 속도 저하 방지 및 효율성 보장을 위한 WEB I/O, SSL 가속, WEB cache 기능, 웹 서버들의 로드 밸런싱 기능 등이 현재 출시된 웹 방화벽들의 주요 기능들이다.
웹 방화벽의 혜택
기업들이 계속해서 웹에 더 많은 정보를 올림에 따라 애플리케이션 차원의 공격은 점점 더 일반화될 것이다. 이미 수많은 해커 웹 사이트에서는 이런 활동을 돕는 자습서와 쉐어웨어 프로그램까지도 제공하고 있다. 그러므로 기업은 애플리케이션 플로우 모델을 보안 전략으로 삼아 애플리케이션 방화벽을 이용한 체계적인 접근이 필요하다.
[참고]
NETWORK TIMES 2005.11, 2006.2,3,4월호
http://www.kisia.or.kr
http://www.netcontinuum.com
[저자] 이승묵 안랩코코넛 보안사업부, mook@coconut.co.kr
[출처] 안랩코코넛 시큐레터(2006. 6월)