Download presentation
Presentation is loading. Please wait.
1
Web Vulnerabilities 정보 보호 2008/05/31 Getroot
2
Abstract 지난 10년간 웹 어플리케이션 보안의 중요성이 매우 크게 증가 하지만, 현재 웹 보안은 그 수준이 미약함
웹 기반의 대형 시스템이 많이 출현하였음 금융, 의료 서비스 하지만, 현재 웹 보안은 그 수준이 미약함 웹 시스템이 중요해졌음에도 불구하고 대부분의 시스템 보안 연구는 BoF나 Format string 에 치중됨 상업적으로 Web firewall이 사용되고 있지만 효과가 미비하여 점점 사용이 줄어듦 대부분의 웹 공격은 웹 어플리케이션에서 발생 사용자와 상호 작용 아직 실제로 사용하는 여러 웹 어플리케이션의 취약점에 대해 자세히 알아보고 웹 공격에 대한 대응 방법 연구
3
웹 공격 분류 Injecting Malicious Data Exploiting Unchecked Input
웹 어플리케이션에 조작된 데이터를 입력하는 공격 Parameter Tampering URL Tampering Hidden Field Manipulation HTTP Header Manipulation Cookie Poisoning Executable File Upload Exploiting Unchecked Input 사용자의 입력을 체크하지 않아서 발생하는 공격 SQL Injection Cross-site Scripting HTTP Response Splitting Path Traversal Command Injection
4
Parameter Tampering 웹 어플리케이션에서 사용하는 Parameter를 강제로 입력하는 공격
HTML 페이지를 수정하여 쉽게 Parameter를 강제 입력할 수 있음 특수 문자 입력을 금지하거나 공백을 금지하는 경우 텍스트 박스에 미리 값을 넣은 후(예: 상품의 가격) 이를 Read only로 단순하게 처리하는 경우 웹 페이지를 저장한 후 조작하여 다시 전송하는 방법으로 공격 [In HTML] … <script>var form = document.Login; if(!form.id.value){ return false; }</script> <input type="text" id="id" name="id“> [In Java] String strID = request.getParameter(“id”);
5
URL Tampering URL에 데이터가 있는 경우 이를 조작하여 공격
HTTP Protocol상 Get method를 이용하여 동작하는 방식을 공격 해당 URL에 직접 연결하여 공격 [ 정상 ] [공격]
6
Hidden Field Manipulation
웹 페이지를 저장한 후 조작하여 다시 전송하는 방법으로 공격 [ 정상 ] <input type=“hidden” name=“price” value=“100000”> [공격] <input type=“hidden” name=“price” value=“10”>
7
HTTP Header Manipulation
A와 B 사이트가 있을 경우 A사이트를 통해 B사이트를 연결하는 것을 신뢰하기 위해 HTTP Header의 REFERER 필드를 이용 B사이트에 데이터를 전송하면서 C사이트를 통해 온 것처럼 속임 예) Cyworld에서 인터넷 결제 사이트에 연결 [HTTP Header] GET Sell.php REFERER …
8
Cookie Poisoning 서버의 부하를 줄이면서 사용자의 State를 저장하기 위해 Cookie를 이용
예) ID를 다른 사용자로 조작하여 물건을 구매 [Cookie file] ID=abc SessionID=1111
9
Executable File Upload
웹서버에서 실행될 수 있는 파일을 업로드하여 원하는 코드를 실행 현재 많은 웹 서버에서 php, jsp, asp 파일 업로드를 막고 있지만 여러 가지 방법으로 우회 예) Apache의 기능 중, 접속 국가별로 다른 페이지를 보여주기 위해 .kr, .jp와 같은 확장자를 사용함 hack.php.kr 파일을 업로드 하면 확장자가 kr이지만 php로 인식 [Hack.php] passthru($cmd) [공격] –rf “
10
SQL Injection 사용자 입력이 back-end database에 바로 전달되어 실행되는 취약점
웹 페이지의 Input tag에서 원하는 SQL문을 바로 넣는 것으로 공격 가능 아래 공격은 모든 사용자 이름을 출력하게 함 [JAVA] HttpServletRequest request = ...; String userName = request.getParameter("name"); Connection con = ... String query = "SELECT * FROM Users " + " WHERE name = ’" + userName + "’"; con.execute(query); [공격] <input type=“text” name=“name” value=“’or 1=1;”>
11
Cross-site Scripting 동적으로 생성되는 Page에 조작된 코드를 넣어서 다른 사용자에게 원하는 코드는 실행하게 하는 방법 실행 예) 다른 사용자의 개인 정보를 자신의 메일로 전송하게 함 다른 사용자에게 악성 코드를 설치함 동적으로 생성되는 Page에 특수한 코드를 넣는 것으로 쉽게 가능 [생성된 페이지] <script>… String strCookie = Document.GetCookie() Redirect( …</script> [공격] 사용자는 자신의 Cookie 정보를 모두 공격자에게 전송하게 됨
12
HTTP Response Splitting
웹 어플리케이션이 HTTP response가 분리될 수 있는 보안 취약점을 갖고 있다면 Response를 조작하여 Proxy 서버를 공격 Proxy Server를 조작 Last-Modified 필드를 조작하여 Cache 날짜를 조작 Cache-Control 필드를 조작하여 Cache 데이터를 조작 [JSP] response.sendRedirect("/by_lang.jsp?lang=“+request.getParameter("lang")); [공격] redir_lang.jsp?lang=foobar%0d%0aContent- Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent- Type:%20text/html%0d%0aContent- Length:%2019%0d%0a%0d%0a<html>Getroot</html> HTTP/ Moved Temporarily Date: Wed, 24 Dec :26:41 GMT Location: victim.com /by_lang.jsp?lang=foobar Content-Length: 0 <index.html 에 매칭> HTTP/ OK Content-Type: text/html Content-Length: 19 <html>Shazam</html>
13
Path Traversal URL에서 Path를 직접적으로 사용한다면 조작된 디렉토리 명령으로 공격 [정상]
[공격]
14
Command Injection 웹 어플리케이션에서 사용자의 입력을 직접적인 Shell 명령으로 이용한다면 이를 조작하여 원하는 명령을 실행 [ListFile.php] Passthru(ls $path); [정상] [공격] -rf”
Similar presentations