HTTP 자체는 보안 상의 문제가 일어날 정도로 복잡한 프로토콜은 아니기 때문에 프로토콜이 직접 공격 대상이 되는 경우는 거의 없습니다.
공격 대상은 HTTP를 사용하는 서버와 클라이언트, 서버 상에서 동작하는 웹 애플리케이션입니다.
웹 애플리케이션에 대한 공격 패턴은 2가지가 있습니다.
공격자가 직접 웹 애플리케이션에 접근해서 공격 코드를 보내는 타입의 공격입니다. 이 공격은 서버 상의 리소스에 대해 직접 실행되기 때문에 공격자가 리소스에 액세스할 필요가 있습니다.
대표적으로 SQL 인젝션이 있습니다.
웹 애플리케이션을 이용하고 있는 데이터베이스에 SQL을 부정하게 실행하는 공격입니다. 개인 정보나 기밀 정보 누설로 직결되기도 합니다.
함정을 이용해서 유저에게 공격 코드를 실행시키는 공격입니다. 직접 웹 애플리케이션에 접근해서 공격하지 않습니다.
일반적으로 다음과 같은 순서로 진행됩니다.
대표적으로 XSS, CSRF가 있습니다.
XSS(Cross-Site Scripting)는 취약성이 있는 웹사이트를 방문한 사용자의 브라우저에서 부정한 HTML 태그나 JavaScript 등을 동작시키는 공격입니다. 동적으로 HTML을 생성하는 부분에서 취약성이 발생할 수 있습니다.
공격자가 작성한 스크립트가 함정이 되고 사용자의 브라우저 상에서 움직이는 수동적 공격입니다.
공격자는 함정 URL을 작성해 사용자에 교묘한 속임수 이메일이나 게시글같은 함정을 준비해 사용자가 URL을 클릭하도록 유도합니다. URL을 열어도 감쪽같은 웹 페이지일 수 있습니다. 만약 로그인 폼이 있어서 사용자가 ID, PW를 입력한다면 사용자의 정보가 탈취된 사실을 인지하지 못하고 탈취될 것입니다.
XSS의 취약성이 있는 웹 애플리케이션에서 JavaScript가 실행되면 해당 웹 애플리케이션의 도메인의 쿠기 정보에 접근합니다. 이 정보가 도난당할 수 있습니다.
CSRF(Cross-Site Request Forgeries)는 인증된 사용자가 의도하지 않은 개인 정보나 설정 정보 등을 공격자사 설치한 함정에 의해 어떤 상태를 갱신하는 처리를 강제로 실행시키는 공격입니다.
다음과 같은 피해가 발생합니다.
한 사용자가 웹 사이트에 인증된 상태라고 가정합니다. 사용자 브라우저의 쿠키에는 인증된 상태에 세션 ID를 가지고 있습니다. 공격자는 함정을 준비합니다. 사용자가 이 함정을 실행하면 사용자의 권한으로 위의 행위를 할 수 있습니다.
XSS와 CSRF는 사용자의 브라우저를 대상으로 한다는 공통점이 있습니다. 하지만 CSRF는 사용자의 인증된 세션을 악용하는 공격 방식인 반면, XSS는 인증된 세션 없이도 공격을 진행할 수 있다는 차이점이 있습니다.
XSS는 사용자가 특정 사이트를 신뢰한다는 사실을 이용한 공격 방식이지만, CSRF는 웹 애플리케이션이 인증된 사용자의 요청을 신뢰한다는 사실을 이용한 공격 방식입니다. 또한 XSS는 클라이언트(사용자)에서 스크립트가 실행되지만 CSRF는 서버에서 스크립트가 실행되는 차이점이 있습니다.
마지막으로 두 방식은 목적에도 차이가 있습니다. XSS는 사용자 PC에서 스크립트를 실행해 사용자의 정보를 탈취하는 것을 목적으로 하는 반면, CSRF는 요청을 위조함으로써 사용자 몰래 송금과 제품 구입 등 특정 행위를 수행하는 것을 목적으로 합니다.