HTTP 자체는 보안 상 문제가 일어날 정도로 복잡한 프로토콜은 아니기 때문에
자신이 공격 대상이 되는 경우는 거의 없다
공격 대상은 HTTP 를 사용하는 서버와 클라이언트, 웹 애플리케이션 등의 리소스이다
대부분은 웹 사이트를 노린 것이다
현재의 웹 사이트 대부분은 인증이나 세션 관리, 암호화 등의 보안 기능이 필요하지만 이들은 HTTP 에 없다
HTTP 는 구조가 단순한 프로토콜이다
보안에 관해서는 나쁜 면도 있다
원격 접속으로 사용하는 SSH 라는 프로토콜에는
프로토콜 레벨에서 인증이나 세션 관리 등의 기능이 준비되어 있지만 HTTP 에는 없다
SSH 서비스 셋업은 누구나 안전한 레벨까지 쉽게 구축할 수 있지만
HTTP 에서는 웹 서버가 설치되었다고 하더라도 대부분은 처음부터 개발하게 된다
때문에 웹 애플리케이션에서 인증이나 세션 관리 기능을 개발자가 설계하고 구현할 필요가 있다
제각각 설계하기 떄문에 각기 다르게 구현된다
보안 등급이 충분치 못하고 취약성이 있는 채로 가동되는 웹 애플리케이션이 있다
요청은 클라이언트에서 변조 가능하다
웹 애플리케이션이 브라우저로부터 수신한 HTTP 요청 내용은 모든 클라이언트에서 변경하고 변조할 수 있다
웹 애플리케이션이 기대하고 있는 값과는 다른 값이 보내질 가능성이 있다
공격은 HTTP 요청 메시지에 공격 코드를 실어서 실행된다
쿼리, 폼, HTTP 헤더, 쿠키 등을 경유해서 보내져 웹 애플리케이션에 취약성이 있을 경우
정보를 도둑맞거나 권한을 뺴앗기는 일이 발생한다
능동적 공격은 공격자가 직접 웹 애플리케이션에 엑세스 해서 공격 코드를 보내는 타입의 공격이다
이 타입의 공격은 서버 상 리소스에 대해 직접 실행되기 떄문에 공격자가 리소스에 엑세스할 필요가 있다
능동적 공격의 대표적 공격에는 SQL 인젝션과 OS 커맨드 인젝션 등이 있다
수동적 공격은 함정을 이용해서 공격 코드를 실행시키는 공격이다
공격자가 직접 웹 애플리케이션에 엑세스해서 공격하지 않는다
수동적 공격을 이용하면 인트라넷 같은 인터넷에서 직접 엑세스할 수 없는 네트워크를 공격할 수 있다
공격자가 설치한 함정에 유저가 엑세스할 수 있는 네트워크라면 인트라넷도 공격할 수 있다
이스케이프(escape)는 컴퓨터 과학에서 특정 문자가 가진 원래의 의미를 잠시 무시하고 다른 목적으로 사용하게 하는 방법을 의미한다
이스케이프는 특수 문자나 제어 문자를 표현할 때 흔히 사용된다
웹 애플리케이션의 보안 대책을 실시하는 장소를 크게 나누면
클라이언트 측의 체크는 대부분 JS 를 사용한다
그러나 변조되었거나 무효화될 가능성이 있기 때문에 근본적인 보안 대책으로 보기 어렵다
클라이언트 측의 체크는 입력 실수를 지적해주는 정도로 사용
웹 애플리케이션 측의 입력 값 체크는 웹 애플리케이션 내에서 처리할 때에
공격 코드로 의미를 갖는 것고 있기 때문에 근본적인 보안 대책으로 보기 어렵다
입력 값 체크는 시스템 요건대로 된 값인지에 대한 체크
데이터베이스나 파일 시스템 HTML 메일 등에 출력할 때 출력하는 곳에 따라
값을 이스케이프 처리하는 출력 값 이스케이프가 보안 대책으로 중요하다
출력 값 이스케이프가 미비할 경우 공격자가 보낸 공격 코드가 출력하는 대상에
피해를 입힐 수 있다
XXS 는 취약성이 있는 웹 사이트를 방문한 사용자의 브라우저에서 부정한
HTML 태그나 JS 코드 등을 동작시키는 공격이다
동적으로 HTML 생성하는 부분에서 취약성이 발생할 수 있다
공격자가 작성한 스크립트가 함정이고
유저의 브라우저 상에서 움직이는 수동적 공격이다
XXS 에 의해 다음과 같은 영향을 받을 수 있다
SQL 인젝션은 웹 애플리케이션을 이용하는 데이터베이스에 부정한 SQL 을 실행하는 공격으로 커다란 위협이다
개인 정보나 기밀 누설로 직결되기도 한다
대부분의 웹 애플리케이션은 데이터베이스를 이용하고
테이블 내의 데이터 검색 및 추가, 삭제와 같은 처리가 발생할 경우 SQL 을 사용해서 데이터베이스에 엑세스 한다
웹 애플리케이션을 경유하여 OS 명령을 부정하게 실행하는 공격
쉘을 호출하는 함수가 있는 곳에서 발생할 가능성이 있다
OS 에서 사용되는 커맨드를 쉘을 경유하여 실행할 수 있다
OS 에서 동작하는 다양한 프로그램을 실행할 수 있다
공격자가 응답 헤더 필드에 개행 문자 등을 삽입함으로 임의의 응답 헤더 필드나
바디를 추가하는 수동적 공격이다
특히 바디를 추가하는 공격을 HTTP 응답 분할 공격이라고 부른다
다음과 같은 영향을 받을 수 있다
웹 애플리케이션의 메일 송신 기능에 공격자가 임의의 To 및 Subject 등의
메일 헤더를 부정하게 추가하는 공격이다
스팸 메일이나 바이러스 메일 등을 임의 주소에 송신할 수 있다
디렉토리 트래버설이란 비공개 디렉토리의 파일에 대해 부정하게 디렉토리 패스를 가로질러 엑세스 하는 공격이다
웹 애플리케이션 파일을 조자가는 처리에서 취약할 경우 디렉토리에 엑세스 할 수 있다
출력 값의 이스케이프의 문제로 볼 수도 있지만 임의의 파일 이름을 지정할 수 없도록 해야 한다
스크립트의 일부를 다른 파일에서 읽어올 때 공격자가 지정한 외부 서버의 URL 을 파일에서 읽게 함으로 스크립트를 동작식키는 공격이다
주로 PHP 에서 발생
웹 서버의 공개 디렉토리에 있는 파일 중 공개 의도가 없는 파일이 열람되게 되는 취약성이다
공격자에게 유익한 정보가 웹 애플리케이션의 에러 메시지에 포함될 경우
지정한 임의의 URL 로 리다이렉트 하는 기능으로
리다이렉트되는 곳의 URL 에 악의가 있는 웹 사이트가 지정된 경우의 취약성이다
세션 관리는 유저의 상태를 관리하기 위한 기능이지만
취약한 경우 유저 인증 상태를 빼앗길 수 있다
공격자가 유저의 세션 ID 를 입수해서 악용하는 것
공격자가 지정한 세션 ID 를 강제적으로 사용하게 하는 수동적 공격
PHP 나 ASP.NET 등에 존재하는 미지의 세션 ID 를 받아들이는 기능이다
공격자가 마음대로 세션 ID 를 작성해 함정을 준비할 수 있다
크로스 사이트 리퀘스트 포저리는 인증된 유저가 의도하지 않은 개인 정보나
설정 정보 등을 공격자가 설치해둔 함정에 의해 갱신 처리를 강제로 실행시키는 공격으로
수동적 공격이다
비밀번호를 논리적으로 이끌어내 인증을 뚫는 공격
무차별/사전은 함호화된 해시 값에 대해 같은 해시 값을 적용해 유추한다
레인보우 테이블은 거대한 사전 집단을 만들어서 시간을 단축한다
열쇠를 입수하면 복호화를 할 수 있다
암호 알고리즘의 취약점을 파고들 수 있다
투명한 버튼이나 링크를 함적으로 클릭하게 함으로 의도하지 않은 콘텐츠에 엑세스 시킨다
UI Redressing 이라고 불리기도 한다
서비스 제공을 정지하게 만드는 공격
제한된 기능을 정규 절차를 밟지 않고 이용하기 위해 설치된 뒷문으로
정해진 제한을 초과한 기능을 이용 가능하다
백도어는 정상적으로 이용하는 것과 구별이 어렵기 때문에 발견이 어렵다