section iv. 웹 취약점 분석도구의 활용 23. 개요 24. 파로스 소스...

85
1

Upload: ula

Post on 22-Jan-2016

71 views

Category:

Documents


11 download

DESCRIPTION

Section IV. 웹 취약점 분석도구의 활용 23. 개요 24. 파로스 소스 커스터마이징을 통한 취약점 분석 - 설치 및 구성 - 탐지항목 ( 룰 종류 ) - 백업 파일 찾기 - 사설 IP 검색 로직 찾기 - 디렉토리 노출 찾기 - IIS 기본 파일 찾기 - 파라미터 변조 - SQL Injection Fingerprinting - 소스 컴파일 - SQL Injection 탐지 패턴 추가 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

1

Page 2: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

Section IV. 웹 취약점 분석도구의 활용23. 개요

24. 파로스 소스 커스터마이징을 통한 취약점 분석

- 설치 및 구성

- 탐지항목 ( 룰 종류 )

- 백업 파일 찾기

- 사설 IP 검색 로직 찾기

- 디렉토리 노출 찾기

- IIS 기본 파일 찾기

- 파라미터 변조

- SQL Injection Fingerprinting

- 소스 컴파일

- SQL Injection 탐지 패턴 추가

- 주민등록번호 검색 기능 추가

2

Page 3: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

학습 포인트

1. 파로스 ( 웹 스캐너 ) 의 구성요소에 대한 이해

2. 파로스의 룰 구현 원리에 대한 이해

3. 파로스 룰 확장 ( 응용 )

3

Page 4: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

23. 개요

4

웹 사이트 개발 시 보안을 고려하지 않고 개발하는 경우 수정에 많은 비용 발생

버그 탐지 시점 ( 개발 이후 운영단계 ) SDLC 개발공정상의 버그 수정비용

Page 5: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

5

요구사항 수렴

요구사항 및 분석 그리고 개발자 교육

디자인 /설계

개별 객체 모듈과 보안 모듈 연동 설계 , 보안 체크 리스트 작성 , 보안 개발 지침 작성

개발

보안체크 리스트와 보안개발 지침참조 , 코드 리뷰

테스트

코드 리뷰 (White Box Test), 체크 리스트 검증

* White Box Test : 소스 검사

운영 및 유지보수

코드 리뷰 (Black Box Test), 보안 솔루션 운영 , 보안 패치

* Black Box Test : 스캐너 검사

23. 개요

Page 6: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

6

24. 파로스 소스 커스터마이징을 통한 취약점 분석

01. 설치 (*src.zip 받고 , 압축해제 )

Page 7: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

7

24. 파로스 소스 커스터마이징을 통한 취약점 분석

02. 구성

(1)Crawl

html 태그 정보를 통해 디렉토리 구조와 파일형태를 수집하는 모듈

(2)Scan

Crawl 에서 수집된 정보를 이용하여 패턴을 조작하여 전송하는 모듈

(3) Report

결과를 출력하는 모듈

(4) Proxy

웹 브라우저와 스캐너를 Proxy 로 연동시키는 모듈

Page 8: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

8

24. 파로스 소스 커스터마이징을 통한 취약점 분석

02. 구성 - Crawl

Page 9: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

9

24. 파로스 소스 커스터마이징을 통한 취약점 분석

02. 구성 - Scan

○ 패턴 삽입 : 확인된 디렉토리에 보유한 패턴 전송

/ /admin.jsp , /manual.php, /menu.asp

○ 패턴 조합 : 수집된 파라미터 값 조작 및 전송

Crawl 단계에서 수집된 URL : /bbs/bbs.asp?id=1000

Scan 단계에서 전송되는 패턴 : /bbs/bbs.asp?

id=1000'INJECTED_PARAM

○ 내부 데이터 검사 : Crawl 단계에서 수집된 정보만을 활용

/bbs.jsp, /bbs1.jsp, /bbs2.jsp

Page 10: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

10

Response Header

Response Data

24. 파로스 소스 커스터마이징을 통한 취약점 분석

02. 구성 – Scan( 내부 데이터 검사 사례 )

원하는 문자열포함 여부 확인( 사설 IP )

Page 11: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

11

점검 항목

테스트 항목

24. 파로스 소스 커스터마이징을 통한 취약점 분석

03. 탐지항목 - UI

Page 12: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

12

분류 항목 설명

Information gathering

Obsolete file 백업 파일 찾기Private IP Disclosure 사설 IP 찾기Session ID in URL rewrite 세션 ID 재사용Obsolete file extended check 확장형 백업 파일 찾기

Client BrowserPassword Autocomplete in browser

패스워드 완성 태그 찾기

Secure page broswer cache 웹 브라우저 데이터 저장 태그 찾기

Server security

Directory browsing 디렉터리 리스팅IIS default file IIS 기본 파일 찾기Cold Fusion default file Cold Fusion 기본 파일 찾기Macromedia JRun default file Macromedia Jrun 기본 파일 찾기Tomcat source file disclosure Tomcat 기본 파일 찾기BEA Weblogic example files BEA Weblogic 기본 파일 찾기IBM WebSphere default files IBM Websphere 기본 파일 찾기Lotus Domino default files Lotus Domino 기본 파일 찾기

Injections

SQL Injection Fingerprinting 500 번 에러 페이지 찾기CRLF Injection CRLF 삽입 찾기Server side include SSI 값 변조Cross site scripting 크로스사이트스크립트 찾기 1Cross site scripting without brackets

크로스사이트스크립트 찾기 2

Parameter tampering 크로스사이트스크립트 찾기 3SQL Injection Blind SQL Injection 찾기MS SQL Injection Enumeration MS SQL Injection 찾기

24. 파로스 소스 커스터마이징을 통한 취약점 분석

03. 탐지항목 – 룰 분류

Page 13: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

13

24. 파로스 소스 커스터마이징을 통한 취약점 분석

03. 탐지항목항목 설명 점검 방식

Obsolete file 백업 파일 찾기 패턴 조합 방식Private IP Disclosure 사설 IP 찾기 내부 데이터 검색 방식Session ID in URL rewrite 세션 ID 재 사용 패턴 조합 방식Obsolete file extended check 확장형 백업 파일 찾기 패턴 조합 방식Password Autocomplete in browser 패스워드 완성 태그 찾기 내부 데이터 검색 방식Secure page broswer cache 웹 브라우저 데이터 저장 태그 찾기 내부 데이터 검색 방식Directory browsing 디렉터리 리스팅 신규 패턴 전송 방식IIS default file IIS 기본 파일 찾기 신규 패턴 전송 방식Cold Fusion default file Cold Fusion 기본 파일 찾기 신규 패턴 전송 방식

Macromedia JRun default file Macromedia Jrun 기본 파일 찾기 신규 패턴 전송 방식

Tomcat source file disclosure Tomcat 기본 파일 찾기 신규 패턴 전송 방식BEA Weblogic example files BEA Weblogic 기본 파일 찾기 신규 패턴 전송 방식

IBM WebSphere default files IBM Websphere 기본 파일 찾기 신규 패턴 전송 방식

Lotus Domino default files Lotus Domino 기본 파일 찾기 신규 패턴 전송 방식SQL Injection Fingerprinting 500 번 에러 페이지 찾기 패턴 조합 방식CRLF Injection CRLF 삽입 찾기 패턴 조합 방식Server side include SSI 값 변조 패턴 조합 방식Cross site scripting 크로스사이트스크립트 1 패턴 조합 방식Cross site scripting without brackets 크로스사이트스크립트 2 패턴 조합 방식Parameter tampering 크로스사이트스크립트 3 패턴 조합 방식SQL Injection Blind SQL Injection 찾기 패턴 조합 방식MS SQL Injection Enumeration MS SQL Injection 찾기 패턴 조합 방식

Page 14: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

14

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석

○ 소스 상단 : 함수 및 패턴 선언

○ 소스 중간 : 리포트 내용 ( 제목 , 해결책 등 ) 및 패턴 전송 부분

선언

○ 소스 하단 : 탐지근거 선언

Page 15: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 소스 상단 부분

Page 16: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 소스 중간 부분

리포트 내용 패턴 전송 로직

Page 17: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

17

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 소스 하단 부분

Page 18: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

18

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기

Page 19: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

C:\paros-3.2.13-src\paros \src\org\parosproxy\paros\core\scanner\plugin\TestObsoleteFile.java

package org.parosproxy.paros.core.scanner.plugin; // 소스의 위치

import java.io.IOException; // 입출력 관련 함수

import java.util.regex.Pattern; // 정규표현식 함수

import org.apache.commons.httpclient.URI; // URI 표현 함수

import org.parosproxy.paros.core.scanner.AbstractAppPlugin; //

백업파일 찾기를 지원하는 클래스 정의

import org.parosproxy.paros.core.scanner.Alert; // 결과물에 대한

위험도 정의

import org.parosproxy.paros.network.HttpMessage; // HTTP Protocol

작성 함수

19

Page 20: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

1 public class TestObsoleteFile extends AbstractAppPlugin

{

2 private final static String[ ] staticSuffixList = {

3 ".old",

4 ".bak",

5 ".inc"

6 };

7 private static final String[] staticAppendixList = {

8 "~"

9 };

20

Page 21: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

1 private static final Pattern patternNotFound =

Pattern.compile("(\\bNot\\sfound\\b)|(\\b404\\b)",

PATTERN_PARAM);

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

자체적으로 작성한 에러 페이지 기본 에러 페이지

21

Page 22: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

22

1 public int getId() { return 00002; } 2 public String getName() { // 제목 return "Obsolete file"; } 3 public String getDescription() { // 취약점 설명 return "Miscellenous include files, backup, unused or obsolete files exist as indicated. If these files contain program source, information such as server logic or ODBC/JDBC user ID and passwords may be revealed since these file extension may not be processed by the web server."; }

4 public String getSolution() { // 취약점 해결책 return "Remove backup, unused or obsolete files. For include files, carefully choose the suffix to prevent information disclosure."; }

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

Page 23: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

getName()

getdescription()

getsolution()

getreference()

23

Page 24: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

24

public int getCategory() { return 0; }

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

C:\paros-3.2.13-src\paros\src\org\parosproxy\paros\core\scanner\Category.java

public class Category {2 public static final int INFO_GATHER = 0;3 public static final int BROWSER = 1;4 public static final int SERVER = 2;5 public static final int MISC = 3;6 public static final int INJECTION = 4; 7 private static String[] names = {8 "Information gathering",9 "Client browser",10 "Server security",11 "Miscellenous",12 "Injection"

Page 25: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

25

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

1. public void scan() 함수 호출 public void scan() { for (int i=0; i<staticSuffixList.length; i++) { // for 반복문으로 백업패턴 처음부터 끝까지 카운트

try { testSuffix(staticSuffixList[i], false); testSuffix(staticSuffixList[i], true); // testSuffix() 함수 호출 인자값은 2 개 (staticSuffixList[i], false/true) 가 넘어감

2 public void testSuffix() 함수 호출

private void testSuffix(String suffix, boolean replaceSuffix) -------- --------------- 인자값 1 인자값 2

Page 26: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

26

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

private void testSuffix(String suffix, boolean replaceSuffix) throws IOException { HttpMessage msg = getNewMsg(); // 패턴 전송을 위한 http 생성

URI uri = msg.getRequestHeader().getURI(); // getURI() 를 통해 Crawl 단계에서 수집된 정보를 uri 변수에 저장 // getURI() http://www.xxx.com/bbs/bbs.asp?id=1

String path = uri.getPath(); // getPath() 를 통해 디렉토리와 페이지 정보만 가져옴 ( 파라미터 제외 ) // getPath() /bbs/bbs.asp if (path == null || path.equals("")) { // 정보가 없다면 skip return; }

Page 27: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

27

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

private void testSuffix(String suffix, boolean replaceSuffix) throws IOException {{ … …

if (replaceSuffix) { int pos = path.lastIndexOf("."); if (pos > -1) { path = path.substring(0, pos); // /bbs/bbs.asp 일 경우 // path = /bbs/bbs 까지만 ( 디렉토리 백업 )

} } path = path + suffix;

testSuffix(staticSuffixList[i], false); testSuffix(staticSuffixList[i], true);

true 일 경우

False 일경우// path = bbs/bbs.asp( 파일 백업 )

Page 28: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

28

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

private void testSuffix(String suffix, boolean replaceSuffix) throws IOException {

String path = uri.getPath(); /bbs/bbs.asp

if (replaceSuffix) /bbs/bbs.asp

path = path + suffix; /bbs/bbs.bak path = path + suffix; /bbs/bbs.asp.bak

testSuffix(staticSuffixList[i], false); testSuffix(staticSuffixList[i], true);

replaceSuffix = true replaceSuffix = False

디렉토리 혹은 파일이름에 백업 확장자 삽입 파일 확장자에 백업 확장자 삽입

Page 29: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

29

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 백업 파일 찾기 ( 계속 )

uri.setPath(path); // 백업 확장자 붙인 URI 세팅

msg.getRequestHeader().setURI(uri); // HTTP 프로토콜 생성 (백업확장자 붙인 URI) sendAndReceive(msg); // HTTP 프로토콜 전송 및 수신

if (!isFileExist(msg)) { // 수신 헤더 값을 보아서 파일이 존재하는 경우 return; } bingo(Alert.RISK_LOW, Alert.WARNING, uri.toString(), "", "", msg);// bingo() 함수 호출을 통해 리포트로 출력

Page 30: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

30

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 사설 IP 검색

사설 IP 주소는 왜 필요한가 ? - IPV4 주소의 고갈로 인해 할당해 줄 주소가 없다 .

Page 31: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

31

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 사설 IP 검색

소스 : C:\paros-3.2.13-src\paros \src\org\parosproxy\paros\core\scanner\plugin\TestInfoPrivateAddressDisclosure.java

Page 32: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

32

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 사설 IP 검색 ( 계속 )

public static final Pattern patternPrivateIP =

Pattern.compile(

"(10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3} |

172\\.\\d{2,2}\\.\\d{1,3}\\.\\d{1,3} |

192\\.168\\.\\d{1,3}\\.\\d{1,3})", PATTERN_PARAM);

* 사설 IP 주소범위

10.0.0.0 - 10.255.255.255 (10/8 prefix)

172.16.0.0 - 172.31.255.255 (172.16/12

prefix)

192.168.0.0 - 192.168.255.255 (192.168/16

prefix)

Page 33: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

33

public int getId() { return 00003;}

public String getName() { return "Private IP disclosure";}

public String[] getDependency() { return null;}

public String getDescription() { return "Private IP such as 10.x.x.x, 172.x.x.x, 192.168.x.x is found in the HTTP response body. This can be used in exploits on internal system."; }

public int getCategory() { return Category.INFO_GATHER; }

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 사설 IP 검색 ( 계속 )

public class Category {2 public static final int INFO_GATHER = 0;3 public static final int BROWSER = 1;4 public static final int SERVER = 2;5 public static final int MISC = 3;6 public static final int INJECTION = 4; 7 private static String[] names = {8 "Information gathering",9 "Client browser",10 "Server security",11 "Miscellenous",12 "Injection"

Page 34: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

34

public void scan() {

HttpMessage msg = getBaseMsg(); // 기존 정보이용인 경우

// HttpMessage msg = getNewMsg(); 신규 프로토콜인 경우

String txtBody = msg.getResponseBody().toString();

// 수신정보중 body 만 가져와 txtBody 에 저장

String txtFound = null; // txtFound 변수 초기화

Matcher matcher = patternPrivateIP.matcher(txtBody);

// 사설 IP 정의한 패턴과 비교

while (matcher.find()) { // 패턴 매치결과가 존재한다면

txtFound = matcher.group();

if (txtFound != null) {

bingo(Alert.RISK_LOW, Alert.WARNING, null, null, txtFound,

msg);

}

}

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 사설 IP 검색 ( 계속 )

Page 35: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

35

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 디렉토리 노출

디렉토리 노출 (Directory Browsing) 인 경우 어떻게 분석할 수 있는가 ?

Page 36: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

36

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 디렉토리 노출 ( 계속 )

소스 : C:\paros-3.2.13-src\paros \src\org\parosproxy\paros\core\scanner\plugin\TestDirectoryBrowsing.java

( 패턴비교 )

디렉토리 노출 검색 패턴 전송

Page 37: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

37

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 디렉토리 노출 ( 계속 )

public class TestDirectoryBrowsing extends AbstractAppPlugin {

private final static Pattern patternIIS= Pattern.compile("Parent Directory", PATTERN_PARAM);

private final static Pattern patternApache= Pattern.compile("\\bDirectory Listing\\b.*(Tomcat|Apache)", PATTERN_PARAM);

private final static Pattern patternGeneralDir1= Pattern.compile("\\bDirectory\\b", PATTERN_PARAM);

private final static Pattern patternGeneralDir2= Pattern.compile("[\\s<]+IMG\\s*=", PATTERN_PARAM);

private final static Pattern patternGeneralParent= Pattern.compile("Parent directory", PATTERN_PARAM);

Page 38: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

38

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 디렉토리 노출 ( 계속 )

public int getId() { return 00001; }public String getName() { return "Directory browsing"; }public String getDescription() { return "It is possible to view the direc"; } public int getCategory() { return Category.SERVER; }public String getSolution() { return "Disable directory browsing not induce risks."; }public String getReference() { String ref = "For IIS, turn off directory browsing.\r\n" + "For Apache, use the 'Options -Indexes“;

public class Category {2 public static final int INFO_GATHER = 0;3 public static final int BROWSER = 1;4 public static final int SERVER = 2;5 public static final int MISC = 3;6 public static final int INJECTION = 4; 7 private static String[] names = {8 "Information gathering",9 "Client browser",10 "Server security",11 "Miscellenous",12 "Injection"

Page 39: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

39

private void checkIfDirectory(HttpMessage msg) throws URIException {

URI uri = msg.getRequestHeader().getURI(); // crawl 데이터 가져오기 http://www.xxx.com/bbs/bbs.asp?

id=1

uri.setQuery(null); // 불필요한 파라미터 값 제거 http://www.xxx.com/bbs/bbs.asp

String sUri = uri.toString(); // uri 가져오기

if (!sUri.endsWith("/")) { // 가져온 값 끝이 / 로 끝나지 않는 경우

sUri = sUri + "/"; // / 를 강제로 붙임}msg.getRequestHeader().setURI(new URI(sUri, true));// / 를 붙인 url 헤더 값을 만들어 다시 넣음

}

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 디렉토리 노출 ( 계속 )

Page 40: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

40

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 디렉토리 노출 ( 계속 )

public void scan() {

boolean result = false; // result 변수에 false 로 선언 ( 값 없음으로 시작

HttpMessage msg = getNewMsg(); // 신규 http 프로토콜 생성

int reliability = Alert.WARNING; // 취약점 결과 수준을 warning 으로 초기화

try {

checkIfDirectory(msg); // checkIfDirectory() 함수 호출

writeProgress(msg.getRequestHeader().getURI().toString());

// 만든 header 를 다시 불러오기

sendAndReceive(msg); // 데이터 전송 및 수신

/bbs//bbs/bbs.asp//dir1/

checkIfDirectory()

Page 41: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

41

if (msg.getResponseHeader().getStatusCode() != HttpStatusCode.OK) { return; }

if (matchBodyPattern(msg, patternIIS, null)) { result = true; } else if (matchBodyPattern(msg, patternApache, null)) { result = true; } else if (matchBodyPattern(msg, patternGeneralParent, null)) { result = true; reliability = Alert.SUSPICIOUS;

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 디렉토리 노출 ( 계속 )

수신된 URL 의 응답코드 OK = 200 번

수신된 URL 의 Body 정의된 IIS 디렉토리 노출 패턴동일한 패턴이 있다면

Result() 함수 호출

if (result) { bingo(Alert.RISK_MEDIUM, reliability, msg.getRequestHeader().getURI().toString(), "", "", msg);

}

Page 42: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

42

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – IIS 기본 파일 찾기

소스 : C:\paros-3.2.13-src\paros \src\org\parosproxy\paros\core\scanner\plugin\TestDefaultFileIIS.java

Page 43: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

43

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – IIS 기본 파일 찾기 ( 계속 )

일반 룰

• 패턴 정의

• 리포트 출력 정의

• 패턴 송 , 수신 정의

• 판단 근거 정의

기본 파일 찾기 룰

• 패턴 정의

• 리포트 출력 정의

• 다른 파일에서 송 , 수신 및 판단근거

public class TestDefaultFileIIS extends AbstractDefaultFilePlugin {

Page 44: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

44

일반 룰

IIS 기본패턴 찾기 룰 등

public class TestDefaultFileIIS extends AbstractDefaultFilePlugin {

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – IIS 기본 파일 찾기 ( 계속 )

Page 45: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

45

public int getId() { return 20000; } public String getName() { return "IIS default file"; } public String getDescription() { return "Microsoft IIS 4.0, 5.0 or 6.0 default files are found."; } public int getCategory() { return Category.SERVER; } public String getSolution() { return "Remove default files and virtual directories."; }

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – IIS 기본 파일 찾기 ( 계속 )

public class Category {2 public static final int INFO_GATHER = 0;3 public static final int BROWSER = 1;4 public static final int SERVER = 2;5 public static final int MISC = 3;6 public static final int INJECTION = 4; 7 private static String[] names = {8 "Information gathering",9 "Client browser",10 "Server security",11 "Miscellenous",12 "Injection"

Page 46: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

46

public void init() { super.init(); // 슈퍼 클래스 createURI(); }

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – IIS 기본 파일 찾기 ( 계속 )

C:\paros-3.2.13-src\paros\src\org\parosproxy\paros\core\scanner\AbstractDefaultFilePlugin.java 에서 처리 즉 다른 소스 내용 (AbstractDefaultFilePlugin.java) 을 호출하기 위해서는 super class( 슈퍼 클래스 ) 를 선언

Page 47: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

47

private void createURI() { // 패턴 선언

addTest("/","iisstart.asp,postinfo.html,_vti_inf.html"

);

addTest("msadc","msadcs.dll");

addTest("_vti_bin", "fpcount.exe,shtml.dll");

addTest("_vti_bin/_vti_adm", "admin.dll");

addTest("_vti_bin/_vti_aut", "author.dll");

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – IIS 기본 파일 찾기 ( 계속 )

Page 48: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

48

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직

소스 : C:\paros-3.2.13-src\paros \src\org\parosproxy\paros\core\scanner\plugin\TestParameterTamper.java

Page 49: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

49

private static String[] PARAM_LIST = {"", "", "@", "+", AbstractPlugin.getURLDecode("%00") , "|"};

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직 ( 계속 )

Page 50: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

50

* 에러 문자열 정의 ( 패턴 전송 후 에러 발생 여부를 확인하기 위한 에러 문자열 )

private static Pattern patternErrorJava1 = Pattern.compile("javax\\.servlet\\.\\S+", PATTERN_PARAM);

private static Pattern patternErrorJava2 = Pattern.compile("invoke.+exception|exception.+invoke", PATTERN_PARAM);

private static Pattern patternErrorVBScript = Pattern.compile("Microsoft(\\s+|&nbsp)*VBScript(\\s+|&nbsp)+error", PATTERN_PARAM);

private static Pattern patternErrorODBC1 = Pattern.compile("Microsoft OLE DB Provider for ODBC Drivers.*error", PATTERN_PARAM); private static

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직 ( 계속 )

Page 51: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

51

public int getId() { return 40010; }

public String getName() { return "Parameter tampering"; } public String getDescription() { String msg = "Certain parameter caused error page or Java stacktrace to be displayed. further exploit."; return msg; }

public int getCategory() { return Category.INJECTION; }

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직 ( 계속 )

public class Category {2 public static final int INFO_GATHER = 0;3 public static final int BROWSER = 1;4 public static final int SERVER = 2;5 public static final int MISC = 3;6 public static final int INJECTION = 4; 7 private static String[] names = {8 "Information gathering",9 "Client browser",10 "Server security",11 "Miscellenous",12 "Injection"

Page 52: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

52

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직 ( 계속 )

public void scan(HttpMessage msg, String param, String value) {

String bingoQuery = null; // 초기화

HttpMessage normalMsg = getNewMsg();// 저장된 URL 정보 불러오기

try { sendAndReceive(normalMsg); // 변조없이 저장된 URL 정보 전송 및 수신 } catch (Exception e) { return; }

if (normalMsg.getResponseHeader().getStatusCode() != HttpStatusCode.OK) {

return;}

/bbs/bbs.asp?id=1- Param : id- Value : 1

200 번이 아닌 경우

Page 53: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

53

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직 ( 계속 )

for (int i=0; i<PARAM_LIST.length; i++) {

msg = getNewMsg();// 저장된 URL 정보 불러오기

if (i==0) { // 변조할 패턴이 없다면

bingoQuery = setParameter(msg, null, null); }

else { // 변조할 패턴이 존재한다면bingoQuery = setParameter(msg, param, PARAM_LIST[i]);

}try {

private static String[] PARAM_LIST = {"", "", "@", "+", AbstractPlugin.getURLDecode("%00") , "|"};

/bbs/bbs.asp?id=1- Param : id- Value : @, +

Page 54: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

54

sendAndReceive(msg);

if (checkResult(msg, bingoQuery, normalMsg.getResponseBody().toString())) {

return;

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직 ( 계속 )

sendAndReceive(normalMsg);

setParameter(msg, param, PARAM_LIST[i]);

변조된 파라미터( id=@ )

원래의 url 파라미터( id=1 )같다면 변화가 없다 .

Page 55: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

55

private boolean checkResult(HttpMessage msg, String query, String normalHTTPResponse) {

StringBuffer sb = new StringBuffer(); // 공간 할당 ( 수신된 body 정보 담을 공간 )

if (msg.getResponseHeader().getStatusCode() != HttpStatusCode.OK&& !HttpStatusCode.isServerError(msg.getResponseHeader().getStatusCode())) {// 200 번이 아니거나 , 500 번이 아닌 경우 ( 에러 문자열이 발생하는 조건 )return false;

}

if (msg.getResponseBody().toString().equals(normalHTTPResponse)) {// 변조된 파라미터를 던지거나 , 정상적인 파라미터를 던지거나 동일한 body 가 수신return false;

}

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직 ( 계속 )

Page 56: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

56

if (matchBodyPattern(msg, patternErrorJava1, sb) &&

matchBodyPattern(msg, patternErrorJava2, null)) {

// 패턴이 있다면

bingo(Alert.RISK_MEDIUM, Alert.WARNING, null, (query == null || query.length()

== 0)? "nil" : query, sb.toString(), msg);

// 리포트 출력

return true;

}

else if (matchBodyPattern(msg, patternErrorVBScript, sb)

|| matchBodyPattern(msg, patternErrorODBC1, sb)

// 기타 정의된 패턴이 있다면

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – 파라미터 변조 로직 ( 계속 )

Page 57: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

57

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직

소스 : C:\paros-3.2.13-src\paros \src\org\parosproxy\paros\core\scanner\plugin\TestInjectionSQLFingerprint.java

Page 58: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

58

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

* 삽입할 공격 패턴 정의

private static final String MSSQL_DELAY_1 = "';waitfor delay '0:0:15';--";

private static final String MSSQL_DELAY_2 = ";waitfor delay '0:0:15';--";

private static final String SQL_BLIND_MS_INSERT = ");waitfor delay

'0:0:15';--";

private static final String SQL_BLIND_INSERT = ");--";

private static final String SQL_CHECK_ERR = "'INJECTED_PARAM";

* 탐지할 에러 문자열 정의

private static final Pattern patternErrorODBC1 =

Pattern.compile("Microsoft OLE DB Provider for ODBC Drivers.*error",

PATTERN_PARAM);

private static final Pattern patternErrorODBC2 =

Pattern.compile("ODBC.*Drivers.*error", PATTERN_PARAM);

Page 59: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

59

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

public String getDescription() { String msg = "SQL injection may be possible."; return msg; }

public int getCategory() { return Category.INJECTION; }

public class Category {2 public static final int INFO_GATHER = 0;3 public static final int BROWSER = 1;4 public static final int SERVER = 2;5 public static final int MISC = 3;6 public static final int INJECTION = 4; 7 private static String[] names = {8 "Information gathering",9 "Client browser",10 "Server security",11 "Miscellenous",12 "Injection"

Page 60: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

60

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

public void scan(HttpMessage baseMsg, String param, String value) { try { scanMSSQL(baseMsg, param, value); // scanMSSQL 함수 호출 } catch (Exception e) { e.printStackTrace(); } }

Page 61: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

61

public void scanMSSQL(HttpMessage baseMsg, String param, String value) throws HttpException, IOException {

HttpMessage msg = getNewMsg(); // crawl 된 url 가져오기

newQuery = setParameter(msg, param, value+SQL_CHECK_ERR); // bbs.asp?id=1 을 bbs.asp?id=1'INJECTED_PARAMlastTime = System.currentTimeMillis(); // 현재 시스템 시간 저장sendAndReceive(msg); // 전송 및 수신defaultTimeUsed = System.currentTimeMillis() - lastTime; // 현재 시스템 시간 저장mResBodyError = msg.getResponseBody().toString(); // body 정보 저장

if (checkResult(msg, newQuery)) { // 수신 body 를 통해 SQL Injection 여부를 판단 return;

}

scanMSSQL(baseMsg, param, value); // scanMSSQL 함수 호출

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

Page 62: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

62

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

newQuery = setParameter(msg, param, value + MSSQL_DELAY_1);// bbs.asp?id=';waitfor delay '0:0:15';--

lastTime = System.currentTimeMillis(); // 현재 시스템 시간 저장sendAndReceive(msg); // 전송 및 수신timeUsed = System.currentTimeMillis() - lastTime; // 현재 시스템 시간 저장

if (checkMSTimeResult(msg, newQuery, defaultTimeUsed, timeUsed)) {// 시간 차이를 통해 sql injection 여부 판단return;

}newQuery = setParameter(msg, param, value + MSSQL_DELAY_2);… 중간 생략… 중간 생략if (checkMSTimeResult(msg, newQuery, defaultTimeUsed, timeUsed)) {// 시간 차이를 통해 sql injection 여부 판단

Page 63: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

63

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

testMSBlindINSERT(msg, param, value); // testMSBlindINSERT() 함수 호출

private void testMSBlindINSERT(HttpMessage msg, String param, String value) throws HttpException, IOException {

int TRY_COUNT = 5;sbInsertValue = new StringBuffer();

for (int i=0; i<TRY_COUNT; i++) {if (i>0) {sbInsertValue.append(",'0'"); }

newQuery = setParameter(msg, param, value + "'" + sbInsertValue.toString() + SQL_BLIND_MS_INSERT);

sendAndReceive(msg);

원본 : id=1변조 : id=1);waitfor delay '0:0:15';--변조 : id=1,'0',);waitfor delay '0:0:15';--변조 : id=1,'0','0');waitfor delay '0:0:15';--변조 : id=1,'0','0','0');waitfor delay '0:0:15';--변조 : id=1,'0','0','0','0');waitfor delay '0:0:15';--

Page 64: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

64

sendAndReceive(msg); 전송 및 수신

if (checkMSTimeResult(msg, newQuery, defaultTimeUsed, msg.getTimeElapsedMillis())) // 탐지 근거 검사 {

return;}

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

Page 65: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

65

private boolean checkResult(HttpMessage msg, String query) {

StringBuffer sb = new StringBuffer(); // 수신 body 저장할 버퍼 할당

boolean isSqlError = false; // false 값으로 초기화

if (msg.getResponseHeader().getStatusCode() != HttpStatusCode.OK&& !HttpStatusCode.isServerError(msg.getResponseHeader().getStatusCode())) {// 200 번이 아니며 500 번이 아니면 sql injection 이 아니라고 판단return false;

}

if (matchBodyPattern(msg, patternErrorODBC1, sb)// 수신 body 에 에러 문자열이 있다면

|| matchBodyPattern(msg, patternErrorODBC2, sb)) { isSqlError = true;

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

Page 66: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

66

private boolean checkMSTimeResult(HttpMessage msg, String query, long defaultTimeUsed, long timeUsed) {

if (timeUsed > defaultTimeUsed + TIME_SPREAD - 500) {

getKb().add(msg.getRequestHeader().getURI(), "sql/mssql", new Boolean(true)); return true;

}return false;

}

if (timeUsed(16 초 ) > defaultTimeUsed(0.5 초 ) + TIME_SPREAD(15 초 ) – 0.5)

if ( 16000 > 500 + 15000 – 500 )

결국 가장 이상적인 취약점 상황이 발생될 경우 , 대략 다음과 같은 값을 가져 SQL Injection 취약점으로 판단할 수 있을 것이다 .

패턴삽입후수신된 시스템

시간패턴삽입전시스템 시간

15 초사전 정의

24. 파로스 소스 커스터마이징을 통한 취약점 분석

04. 로직분석 – SQL Injection 탐지 로직 ( 계속 )

Page 67: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

67

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일

ANT( 자바 소스 파일 컴파일러 )

자바 개발 시 JDBC 드라이버 , Servlet, JAR 등의 여러 패키지를 사용하게 되는데 ,

이를 컴파일하기 위해서는 관련 패키지의 위치를 환경변수에 설정하거나 , 윈도우

코멘드 쉘 창에서 클래스 위치를 나열해야 함

이러한 작업을 간소화게 처리할 수 있는 것이 Ant 의 build.xml(C 의 make 와

유사 )

Page 68: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

68

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 )

http://ant.apache.org/bindownload.cgi

http://ftp.kaist.ac.kr/pub/Apache/ant/binaries/apache-ant-1.7.0-bin.zip

Page 69: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

69

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 )

jdk(java develop kit)

apache-ant

Page 70: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

70

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 )

Build.xml doesn’t exist!

Page 71: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

71

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 )

컴파일 위치C:\paros-3.2.13-src\paros\build

Page 72: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

72

ANT 빌드 파일의 루트 엘리먼트는 <project/> 이며 <project/> - 하위에는 빌드 과정에서 사용할 속성을 정의할 수 있는 <property/> 엘리먼트- 엘리먼트와 각 Task 에서 사용할 경로 정보를 포함하는 <path/> 엘리먼트- 작업을 수행하는 <target/>엘리먼트를 사용하게 된다 .

•< project name="projectName" default="first" basedir="."> - name: 프로젝트 이름을 의미한다 .- default: 기본 작업을 수행을 하고자 할 때 사용한다 . - basedir: 프로젝트에 대한 기준 폴더를 지정하며 , 현재 폴더는 특수문자 (.) 사용 •< property name="src.dir" value="${basedir}/src" />•< property name="classes.dir" value="${basedir}/classes" /> - property 는 변수를 의미한다 .- name: 변수명을 의미한다 .- value: 변수값을 의미한다 . ( 변수를 호출할 때 ${ 변수명 } 으로 사용한다 .)

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 )

Page 73: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

73

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 )

- Ant 를 실행할 위치는 어디인가 ?- 최종 결과물 ( 실행파일 ) 은 어디에 생성되는가 ?

Page 74: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

74

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – SQL Injection FingerPrinting 패턴 추가

현재 정의된 에러 문자열을 상당히 부족하다 .

이를 보강할 필요가 있다 .

Page 75: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

75

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – SQL Injection FingerPrinting 패턴 추가

소스 : C:\paros-3.2.13-src\paros \src\org\parosproxy\paros\core\

scanner

\plugin\TestInjectionSQLFingerprint.java

private static final Pattern patternErrorODBC1 = Pattern.compile("Microsoft OLE DB Provider for ODBC Drivers.*error", PATTERN_PARAM);private static final Pattern patternErrorODBC2 = Pattern.compile("ODBC.*Drivers.*error", PATTERN_PARAM);

private static final Pattern patternErrorGeneric = Pattern.compile("JDBC|ODBC|not a valid MySQL|SQL", PATTERN_PARAM);

private static final Pattern patternErrorODBCMSSQL = Pattern.compile("ODBC SQL Server Driver", PATTERN_PARAM);

Page 76: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

76

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – SQL Injection FingerPrinting 패턴 추가

Page 77: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

77

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – SQL Injection FingerPrinting 패턴 추가

• 패턴 추가 시 주의 사항

(1) 고유한 이름으로 패턴을 추가한다 .

(2) 고유한 이름을 작성한 패턴에 대한 탐지근거를 추가한다 .

(3) 컴파일을 통해 에러 여부를 확인한다 .

(4) 신규 패턴 탐지여부를 검사한다 .

Page 78: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

78

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – SQL Injection FingerPrinting 패턴 추가

Page 79: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

79

<html><head>

<LINK rel="stylesheet" type="text/css" href="Style.css"><title>ORA-00921: unexpected end of SQL

command</title></head>

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – SQL Injection FingerPrinting 패턴 추가초기 페이지에 삽입했던 에러 문자열을 추가하여 무조건 탐지되는 조건을만들어 정상여부를 검사한다 .

Page 80: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

80

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – SQL Injection FingerPrinting 패턴 추가

Page 81: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

81

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – 주민등록번호 검사 패턴 추가

Page 82: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

82

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – 주민등록번호 검사 패턴 추가 ( 계속 )

* 원본

public static final Pattern patternPrivateIP =

Pattern.compile("(10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|172\\.\\

d{2,2}\\.\\d{1,3}\\.\\d{1,3}|192\\.168\\.\\d{1,3}\\.\\d{1,3})",

PATTERN_PARAM);

* 변경

public static final Pattern patternPrivateIP =

Pattern.compile("(\\d{6})[\\-|\\s]+([1|2]\\d{6})", PATTERN_PARAM);

Page 83: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

83

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – 주민등록번호 검사 패턴 추가 ( 계속 )

Page 84: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

84

<html><head>

<LINK rel="stylesheet" type="text/css" href="Style.css"><title>111111-1051911</title>

</head>

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – 주민등록번호 검사 패턴 추가 ( 계속 )

Page 85: Section IV.  웹 취약점 분석도구의 활용 23.  개요 24.  파로스 소스 커스터마이징을 통한 취약점 분석     -  설치 및 구성

85

24. 파로스 소스 커스터마이징을 통한 취약점 분석

05. 컴파일 ( 계속 ) – 주민등록번호 검사 패턴 추가 ( 계속 )