ISBN : 000-00-000-0000-0
웹 어플리케이션 취약점 분석
(‘17년 2분기)
웹 어플리케이션 취약점 분석
(‘17년 2분기)
2017. 06
제2장 관련 연구
제1절 웹 어플리케이션 취약점 유형
본 절에서는 웹 어플리케이션에서 발생하는 취약점의 정의와 주요 탐지 유형에 대하여 살펴본다. 과학기술사이버안전센터에서 정의한 17개의 취약점 유형은 아래와 같다. 관리자 페이지 노출 취약점 일반적으로 추측이 가능한 관리자 페이지 경로(/admin, /manager 등)를 사용하거나, 프로 그램 설계상의 오류, 인증 미흡으로 인해 관 리자 메뉴에 직접 접근이 가능하며 권한인증이 가능한 취약점 디렉터리 나열 취약점 서버내의 모든 디렉터리 혹은 중요한 정보가 포함된 디렉터리에 대해 인덱싱이 가능하게 설정되어 중요파일 정보가 노출될 수 있는 취약점 시스템 관리 취약점 응용 프로그램 설치 중에 생성되는 설치․임시 파일이 존재하거나 웹상에서 윈도우 로그인 창이 노출되는 등 시스템 상 설정 미비로 인해 발생하는 취약점 WEBDAV 취약점 IIS 일부 버전의 취약점으로 악의적인 HTTP 요청을 이용하여 FTP나 시스템에 직접 접근하지 않고 원격에서 파일을 수정 및 처리가 가능한 취약점 불필요한 Method 허용 취약점제2절 웹 취약점 유형 별 주요 탐지현황
과학기술사이버안전센터에서는 웹 어플리케이션 분야의 취약점을 탐지하기 위하여 다수의 패턴을 보유하고 있으며, 앞서 분류된 웹 취약점 유형들이 포함하고 있는 주요 탐지패턴 현황은 아래와 같다. 이번 보고서에는 17년도 2/4분기에 주로 탐지된 11개의 취약점 패턴 분석내용을 다루도록 한다. 순번 취약점 유형 주요 탐지패턴 1 소스코드 내 중요정보 노출 취약점 [1-1] 내부 IP 유출 패턴 발견 [1-2] HTML 주석 중요 정보 유출 2 공개용 웹 게시판 취약점 [2-1] 공개용 웹 게시판 취약점 3 크로스사이트스크립트 (XSS) 취약점 [3-1] 크로스사이트 스크립팅 (XSS) [3-2] 프레임을 통한 피싱 [3-3] 링크 인젝션 (크로스 사이트 요청 위조 유도) [3-4] 크로스 사이트 요청 위조[3-5] Microsoft Windows MHTML XSS (Cross-site scripting) [3-6] DOM 기반 크로스 사이트 스크립팅 (XSS)
[1-1] 내부 IP 유출 패턴 발견
◎ 개요
웹 애플리케이션 내 웹 페이지 소스에서, 주석 구문 및 처리구문에 직접적으로 IP정보나 파일경로 등 시스템 내부의 중요 정보가 포함되어 외부로 노출되는 취약점으로, 공격자는 노출된 중요 정보를 통해 추가 공격을 시도할 수 있음 <소스 내에 포함 된 IP 및 계정정보 노출>◎ 조치방안
* 주석구문에 중요 정보 삭제 * IP 및 접속 계정 등 중요 정보는 별도의 파일로 관리하며 난독화 처리를 통해 외부 노출이 불가능하도록 설정 안전한 코드 예제[1-2] HTML 주석 중요정보 노출
◎ 개요
웹 페이지 소스 내의 HTML 주석을 통해 SQL 코드, ID/Password, 내부IP, 디버깅 정보 등과 같은 시스템 구성에 관한 중요 정보가 노출될 경우, 공격자에게 내부 정보를 제공할 위험성이 존재하는 취약점 <주석문 안에 포함된 시스템 주요정보>◎ 조치방안
* 기밀정보가 포함된 html 주석 삭제 * 중요한 로직 및 주석에 대한 처리는 웹서버에서 구현되는 언어(Server Side)와 같이 처리되도록 작성· Client Side 언어 : HTML, JAVA Script, Virtual Basic Script 등
· Server Side 언어 : ASP, JSP, PHP, Perl 등
안전한 코드 예제 ……
//디버깅 등의 용도로 소스 주석에 적어놓은 패스워드 삭제 public Connection DBConnect(String id, String Password) { String url = "DBServer";
Connection conn = null; try {
String CONNECT_STRING = url+":"+id+":"+ Password; InitialContext ctx = new InitialContext();
DataSource datasource = (DataSource) ctx.lookup(CONNECT_STRING); conn = datasource.getConnection();
} catch (SQLException e) {……} return conn;
· UNIX, Linux 검색 예시
제로보드 검색
find/[웹서버디렉터리] -name "license.txt" -exec ls alt {} \; -exec grep "배포버전:" {} \;
테크노트 검색
find/[웹서버디렉터리] -name "config.cgi" -exec ls alt {} \; -exec grep "배포버전:" {}\; find/[웹서버디렉터리] -name "main.cgi" -exec ls alt {} \; -exec grep "배포버전:" {}\;
* Secure Coding
DotNet
· HTML 인코딩 : URL 파라미터로 전달되는 데이터에 대한 html 인코딩 처리 예시 1)
String subject = row[“subject”]; subject = subject.replace(“<“,“<”); subject = subject.replace(“>”,“>”); 예시 2)
String subject = row[“subject”];
subject = Server.HtmlEncode(subject); -- HtmlEncode API 사용
· DotNet Request Validator 처리 : Inside HTML 공격방어 <%@ Page Language="C#" AutoEventWireup="true“
CodeFile="Default.aspx.cs" Inherits="_Default" ValidateRequest=“true" %>
· 입력값 이스케이프 처리
public static String validation(String string) { return string .replaceAll("(?i)<script.*?>.*?</script.*?>", "") // case 1 .replaceAll("(?i)<.*?javascript:.*?>.*?</.*?>", "") // case 2 .replaceAll("(?i)<.*?\\s+on.*?>.*?</.*?>", ""); // case 3 } JAVA/JSP · HTML 인코딩 : URL 파라미터로 전달되는 데이터에 대한 html 인코딩 처리 예시 1)
String subject = rs.getString(“subject”); subject = subject.replaceAll(“<“, “<”); subject = subject.replaceAll(“>”, “>”); 예시 2)
import org.apache.commons.lang.StringEscapeUtils; String subject = rs.getString(“subject”);
subject = StringEscapeUtils.escapeHtml(subject); -- HtmlEncode API 사용
· 입력값 이스케이프 처리
public static String validation(String string) { return string
.replaceAll(“(?i)<script.*?>.*?</script.*?>”, “”) // case 1 .replaceAll(“(?i)<.*?javascript:.*?>.*?</.*?>”, “”) // case 2 .replaceAll(“(?i)<.*?\\s+on.*?>.*?</.*?>”, “”); // case 3 }
[3-5] Microsoft Windows MHTML XSS(Cross-site scripting)
◎ 개요
MHTML은 HTML 웹 페이지가 참고 하는 별도의 그림, 음성파일 등의 동적 콘텐츠를 인코딩하여 HTML 웹페이지에 출력될 수 있도록 제공 되는 기능으로 프로 토콜 핸들러에 대한 설정 결함 시, 공격자는 악성 스크립트 실행을 통한 정보 유출 및 사용자의 세션 정보 탈취 등 부가적인 공격에 악용될 수 있는 취약점 <MHTML XSS 실행화면>◎ 조치방안
* MS에서 배포하는 최신 버전의 FixIt Tool 설치 * 7절 크로스사이트스크립트(XSS) 취약점 ‘사전예방조치 방안’ 내용참고[3-6] DOM 기반 크로스 사이트 스크립팅(XSS)
◎ 개요
◎ 조치방안
* CSRF 및 XSS 공격을 방지하기 위해 인가된 도메인만 접근할 수 있도록 clientaccesspolicy.xml 파일의 allow-from http-request-headers 도메인 속성을 수정
clientaccesspolicy.xml <?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="*"> <domain uri="http://www.example.com"/> <domain uri="https://www.example.com"/> </allow-from> <grant-to>
<resource path="/" include-subpaths="true"/> </grant-to>
</policy>