14 주요 웹 보안 취약점
여러분은 웹의 취약점으로 어떤 것이 있는지 잘 아시나요? 여러 가지가 있을 텐데요. OWASP에서는 위험도가 높거나 발생 빈도가 높은 취약점 10가지를 순위를 매겨 발표했습니다.
OWASP는 The Open Web Application Security Project의 약자로, 국제 웹 보안 표준 기구를 말하는데요. 주로 웹에 관한 정보 노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구합니다 .이번 시간에는 OWASP에서 선정한 TOP 10 중 주요 취약점에 대해 자세히 살펴봅시다.
주요 웹 보안 취약점
1. 명령 삽입 취약점
주요 웹 보안 취약점
OWASP Top 10은 국제 웹 보안 표준 기구인 OWASP에서 발표한 웹 주요 취약점 10개를 말합니다. 이 취약점들 중 명령 삽입 취약점, XSS 취약점, 취약한 인증 및 세션 관리, 직접 객체 참조, CSRF 취약점 등에 대해 각각 살펴보겠습니다.
먼저 명령 삽입 취약점입니다. 명령 삽입 취약점은 웹 서버와 연동된 데이터베이스에 입력되는 값에 대한 검증을 수행하지 않아 발생합니다. 일반적으로 SQL Injection이라고도 하는데, 데이터베이스와 연동되어 있는 어플리케이션의 입력 값을 조작하여 DBMS가의도하지 않는 결과를 반환하도록 하는 공격 기법입니다. SQL 인젝션 공격은 해당 애플리케이션에서 사용자로부터 전송되어 오는 입력 값에 대해 그 적정성을 검사하지 않았기 때문에 발생하는 것으로, ‘입력 값 검증 부재’의 일종입니다. 이 공격을 통해 파급될 수 있는 효과는 해당 어플리케이션에서 사용하고 있는 DB정보 조회는 물론, 변조 또는 삭제까지 할 수 있으며, 사용자 및 관리자에 대한 인증 절차를 우회할 수 있습니다.
가장 대표적인 명령어 삽입 취약점의 예는 로그인 폼에서의 인증 우회입니다. 명령 삽입 취약점을 악용한 인증 우회의 원인 중의 하나는 작은따옴표에 의한 것입니다. 작음 따옴표는 데이터베이스에서 특수한 의미를 가지는 문자로, 공격자는 이 문자를 이용하여 프로그래머가 원래 의도했던 SQL 구문에 임의의 SQL 구문을 삽입할 수 있습니다.
인증을 우회하는 방법으로는 따옴표 대신 더블 대시를 이용하는 방법도 있습니다. 더블 대시는 주석문과 같은 의미를 가지고있는 문자열로 더블 대시 뒤에 오는 모든 SQL 구문을 주석으로 처리하므로 공격자는 사용자 계정을 확인하는 Query 뒤의 SQL 구문을 모두 주석 처리하는 공격을 시도할 수 있습니다.
2. XSS 취약점
다음으로, XSS 취약점에 대해 살펴보겠습니다. XSS는 Cross Site Scripting의 약어인데요. 공격자에 의해 작성된 스크립트가 다른 사용자에게 전달되는 것으로, 다른 사용자의 웹브라우저 내에서 적절한 검증 없이 실행되어 발생하는 보안 취약점입니다. 공격자가작성한 스크립트를 통해 정상 사용자의 세션을 탈취하거나, 웹 사이트를 변조, 악의적인 사이트로 사용자를 이동시킬 수 있습니다.
* XSS : 게시판, 웹 메일 등에 삽입된 악의적인 스크립트에 의해 페이지가 깨지거나 다른 사용자의 사용을
방해하거나, 쿠키 및 기타 개인 정보를 특정 사이트로 전송시키는 공격
XSS 취약점에는 Reflected XSS와 Stored XSS가 있습니다. Reflected XSS는 매개변수를 통해 입력 받은 값을 다시 출력해주는 로직이있을 때 발생하는 취약점입니다. 텍스트 입력창에 단순한 텍스트가 아닌 경고문을 출력하는 스크립트를 입력한 경우 스크립트가 실행되면 취약점이 존재하는 것입니다.
Stored XSS는 게시판의 게시물 등 사용자와 상호작용하여 서버 측에 저장되는 애플리케이션에서 발생하는 취약점입니다. 예를 들면 게시판의 게시물에 XSS라는 알람을 띄우는 스크립트를 작성을 저장해두면 다른 사용자가 그 게시물을 클릭할 시 해당 스크립트가 실행되는 것입니다. Stored XSS는 게시물에 악성 스크립트를 삽입함으로써 다른 사용자가 게시물을 열람하였을 때, 해당 브라우저에서 스크립트가 실행되고, 그때 발생한 쿠키 및 세션 정보를 공격자가 얻는 공격입니다.
3. 취약한 인증 및 세션 관리
이번에는 취약한 인증 및 세션 관리에 대해서 알아보겠습니다. 취약한 인증의 가장 기본적인 문제점은 패스워드 설정입니다.
취약한 패스워드 설정이패스워드란, 사용자 인증을 위해 사용되는 패스워드의 보안 강도가 적절하지 않은 경우입니다.
취약한 인증 및 세션 관리는 사용자 측 데이터를 이용한 인증에서도 나타납니다. 최초 인증 과정에서 정상적인 아이디와 패스워드를 입력하는 것으로 시작합니다. 웹 서버는 해당 아이디와 패스워드가 올바른 경우 접속 인증을 허용하고 인증 값을 쿠키와 같은 세션 값을 사용자에게 전달합니다.
사용자가 새로운 페이지에 접근할 때 초기 인증 과정에서 수신한 세션 값을 서버에 전달하고, 서버는 사용자로부터 받은 세션 값을 통해 인증을 수행합니다. 수신한 인증 허용 값을 전달받으면서 해당 세션이 유효한 인증인지 확인합니다. 이때 공격자가 전달해주는
값을 이용해 해당 인증의 소유자를 구분하게 됩니다.
이러한 인증 방법은 사용자가 새로운 페이지에 접근할 때마다 인증 과정을 거치지 않아도 되기 때문에 사용자 입장에서는 편리한 방법입니다. 하지만, 세션에 대한 적절한 관리를 하지 않는 경우 취약점이 발생할 수 있습니다. 공격자는 세션 인증에 사용되는 인증 값을 그대로 사용하지 않고 User Number와 같은 사용자 고유 세션 값을 변경함으로써 다른 계정으로 로그인한 것처럼 웹 서비스를 사용할 수 있습니다.
4. 직접 객체 참조
직접 객체 참조로 인한 웹 취약점에는 디렉터리 탐색과 파일 업로드 제한 부재, 리버스 텔넷이 있습니다. 하나씩 자세히 살펴보죠.
디렉터리 탐색은 웹 브라우저에서 확인 가능한 경로의 상위로 탐색하여 특정 시스템 파일을 다운로드하는 공격 방법으로,
웹 브라우저에서 확인 가능한 경로의 상위로 탐색하여 특정 시스템 파일을 다운로드할 수 있는 취약점 있습니다. 자료실에 올라간 파일을 다운로드할 때 전용 다운로드 프로그램이 파일을 가져오는데, 이때 파일 이름을 필터링하지 않아서 발생합니다.
게시판 등에서 첨부파일을 다운로드할 때 다음과 같이 download.jsp 형태의 URL를 주로 사용하는데요. 게시판에서 글 목록을 보여주는 list.jsp 파일이 상위 폴더에 위치한 경우, 주소창에 다음과 같이 입력하여 다운로드 가능합니다.
디렉터리 탐색을 통한 취약점은 공격자가 웹 서버의 파일 구조를 알고 있는 경우 웹 서비스 접속 URL을 조작하여 웹 서버에 저장된파일에 접근이 가능하게 되는 취약점입니다. 웹 서버에 보드 디렉터리 내에 어드민 디렉터리, 업로드 디렉터리, 이미지 디렉터리가 존재한다고 가정할 경우, 그림은 다운로드가 기본적으로 접근하는 /board/upload 디렉터리의 바로 상위 디렉터리에서 list.jsp를 다운로드하는 과정입니다.
직접 객체 참조 취약점에서 파일 업로드 제한 부재란 클라이언트에서 서버 측으로 임의의 파일을 제한 없이 보낼 수 있는 것입니다.
파일 업로드 제한 부재라는 취약점은 웹 서버가 가질 수 있는 가장 치명적인 취약점입니다. 이런 취약점이 존재하는 가장 일반적인 형태는 웹 서비스 중 게시판에 해당합니다.
흔히 말하는 백도어로 공격자가 서버에 업로드한 악성코드를 외부에서 실행시켜 웹 서버 내부에 접근이 가능하고, 추가적인 공격이 가능하며 이때 첨부 게시판에 첨부파일로 악의적인 파일을 업로드하고 실행시켜 발생합니다. 이때 업로드하는 파일은 대부분 웹 쉘입니다.
직접 객체 참조 취약점에서 리버스 텔넷은 웹 해킹을 통해 시스템의 권한을 획득한 후 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 쉘을 획득하기 위한 방법입니다. 주로 방화벽이 존재하는 시스템을 공격할 때 자주 사용됩니다. 일반적으로 웹 서버는방화벽 내부에 존재하고 웹 서버는 80번 포트를 이용한 웹 서비스만 제공하면 되기 때문에, 방화벽은 외부 인터넷을 사용하는 사용자에 대해 80포트만을 허용하고 있습니다. 공격자는 방화벽을 통과하기 위해 80번 포트로 접속을 시도합니다. 80서버로 웹 서버 내부에 접속을 성공한 뒤, 텔넷 접속 포트인 23번 포트를 사용합니다. 방화벽에서 인바운드 정책은 80번 포트 외에 필요한 포트만 빼고 다 막아 놓고, 아웃바운드 정책은 별다른 필터링을 수행하지 않는 경우 발생합니다. 리버스 텔넷 취약점을 해결하기 위해서는 방화벽의 인바운드 정책과 함께 아웃바운드에 대한 정책을 적절히 설정해야 됩니다.
5. CSRF 취약점
마지막으로 CSRF 취약점에 대해서 알아보겠습니다. CSRF는 Cross Site Request Forgery의 약어로, 특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 하여, 로그인된 사용자가 자신의 의지와는 무관하게 수정, 삭제, 등록, 송금 등 공격자가 의도한 행위를 하게 만드는 공격입니다.
공격자가 CSRF가 포함된 게시물을 등록하고, 사용자가 해당 게시물을 열람하면 CSRF 스크립트가 실행되죠. 이런 식으로 CSRF 공격을 이용하면 공격자는 특정 물품을 구매하여 장바구니에 넣어두고, 해당 물품에 대한 결재를 다른 이를 통해 수행할 수 있습니다. CSRF가 성립하려면 수정·삭제·등록하는 액션에서 사용자를 구분하는 파라미터 값이 존재하지 않도록 해야 합니다. 그러므로 특정한 사용자를 구분하는 인수가 있으면, 하나의 사용자에게만 적용되거나 인증 과정을 통해 CSRF 공격을 예방할 수 있습니다.
'정보 보호' 카테고리의 다른 글
16 디지털 포렌식의 개요 (3) | 2016.02.18 |
---|---|
15 기타 웹 보안 취약점 (0) | 2016.02.18 |
13 웹 해킹의 이해 (1) | 2016.02.15 |
12 네트워크 기반 공격 (1) | 2016.02.13 |
시큐리티 하이테크 정보보안 세미나 -2 (0) | 2016.02.03 |