11.1 웹 공격 기술

HTTP 자체는 보안 상의 문제가 일어날 정도로 복잡한 프로토콜은 아니기 때문에 프로토콜 자신이 공격 대상이 되는 경우는 거의 없다. 공격 대상은 HTTP 를 사용하는 서버클라이언트, 그리고 서버 상에서 동작하는 웹 어플리케이션 등의 리소스 이다.

현재 인터넷에서 벌어지는 공격 대부분은 웹 사이트를 노린다. 그 중에서도 특히 웹 어플리케이션을 대상으로 많은 공격이 발생하고 있다. 이번장에서는 주로 웹 어플리케이션에 대한 공격에 대해 설명한다.

11.1.1 HTTP 에는 보안 기능이 없다

현재의 웹 사이트는 HTTP 설계 당시와 비교하면 사용 방법이 상당히 변했다. 현재의 웹 사이트 대부분은 인증이나 세션 관리, 암호화 등의 보안 기능이 필요하지만 이것들은 HTTP 에 없다.

HTTP 는 구조가 단순한 프로토콜이다. 장점도 많이 있지만 보안에 관해서는 나쁜 면도 있다. 원격 접속으로 사용하는 SSH 라는 프로토콜에는 프로토콜 레벨에서 인증이나 세션 관리 등의 기능이 준비되어 있지만 HTTP 에는 없다. 또한 SSH 서비스 셋업은 누구나 안전한 레벨까지 쉽게 구축되어 있지만, HTTP 에서는 웹 서버가 설치되었다고 하더라도 웹 어플리케이션의 대부분은 처음부터 개발하게 된다.

그 때문에 웹 어플리케이션에서 인증이나 세션 관리 기능을 개발자가 설계하고 구현해야한다. 개발자가 각자 설계하기 때문에 각기 다르게 구현된다. 그 결과, 보안 등급이 충분치 못하고 공격자가 악용할 수 있는 취약성과 같은 버그가 있는 상태로 가동되고 있는 웹 어플리케이션이 있다.

11.1.2 리퀘스트는 클라이언트에서 변조 가능

웹 어플리케이션이 브라우저로부터 수신한 HTTP 리퀘스트의 내용은 모든 클라이언트에서 자유롭게 변경하고 변조할 수 있다. 그렇기 때문에 웹 어플리케이션이 기대하고 있는 값과는 다른 값이 보내질 가능성이 있다.

웹 어플리케이션에 대한 공격은 HTTP 리퀘스트 메시지에 공격 코드를 실어서 실행된다. 쿼리나 폼, HTTP 헤더, 쿠키 등을 경유해서 보내져 웹 어플리케이션에 취약성이 있을 경우에는 정보를 도둑맞거나 권한을 빼앗기는 일이 발생한다.

11.1.3 웹 어플리케이션에 대한 공격 패턴

유저가 처한 환경을 이용한 인트라넷 등에 대한 공격

수동적 공격을 이용하면 인트라넷 같은 인터넷에 직접 엑세스할 수 없는 네트워크를 공격할 수 있다. 공격자가 설치한 함정에 유저가 엑세스할 수 있는 네트워크라면 인트라넷도 공격할 수 있다.

많은 인트라넷에서는 인터넷 상의 웹 사이트에 엑세스하거나 인터넷에서 전송되어 온 메일을 읽을 수도 있기 때문에 공격자는 함정으로 유도하여 인트라넷을 공격한다.

11.2 출력 값의 이스케이프 미비로 인한 취약성

웹 어플리케이션의 보안 대책을 실시하는 장소를 크게 나누면 다음과 같다.