66
공개 소프트웨어를 이용한 웹 취약성 분석 가이드 2008. 03. 과학기술정보보호센터 Science and Technology Security Center

공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

공개 소프트웨어를 이용한

웹 취약성 분석 가이드

2008. 03.

과학기술정보보호센터 Science and Technology Security Center

Page 2: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

1

발 간 사

최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을 더욱

가속화시킴과 동시에 과학, 사회, 경제, 문화 심지어 정치영역까지 큰

영향을 미치고 있습니다. 이와 함께 홈페이지 서버도 개인들도 보유할

정도로 보급이 확산되고 있고, 그 중요도도 나날이 증가하고 있습니다

특히 홈페이지 해킹으로 국가 경쟁력을 좌우하는 첨단과학기술관련국가

중요 시설 및 정보 자원에 대한 정보 침해가 빈번하게 발생하고, 홈페이지가

정보화의 기반요소로 자리 매김 해 가고 있는 현 시점에서 크나큰 걸림돌로

작용할 수 있습니다.

과학기술정보보호센터는 24시간 365일 상시 관제 체제 운영을 통하여

홈페이지를 이용한 다양한 침해 공격으로부터 과학기술 관련 중요국가

기관의 침해를 미연에 방지하고 그 피해를 최소화하기 위해 노력을 기울여

왔습니다.

이와 더불어 과학기술정보보호센터는 홈페이지 보안강화를 위하여 웹

서버나 웹 기반의 응용 프로그램의 취약성을 점검할 수 있는 『공개

소프트웨어를 이용한 웹 취약성 분석 가이드』를 발간하게 되었습니다.

이 가이드는 공개 소프트웨어 사용 방법에 대한 자세한 설명과 취약성

점검 결과 및 조치 방안에 대한 예를 제시함으로써 정보보호 담당자들에게

실질적인 도움이 될 수 있을 것이라 생각되어집니다.

2008년 3월 11일

과학기술정보보호센터

황 일 선

Page 3: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

2

본 가이드는 과학기술 분야에서 다양하게 활용되는 웹 어플리케이션의

보안성 강화를 과학기술정보보호센터의 연구원들이 참여하여 작성하였으며,

정보통신부 및 한국정보보호진흥원이 발간한 [홈페이지 개발보안 가이드]와

[공개용 보안프로그램을 활용한 취약성 점검]을 참고하여 제작 되었습니다.

2008년 3월 11일

주관연구기관명 : 한국과학기술정보연구원

주관연구책임자 : 황일선 (CNI사업단 단장)

참 여 연 구 원 : 이혁로(선임연구원)

이행곤(선임연구원)

최상수(선임연구원)

이호선(연 구 원)

박학수(선임연구원)

정기문(선임연구원)

김주범(선임연구원)

Page 4: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

3

< 목 차 >

1 개요..................................................................................................................8

1) 목적...........................................................................................................8

2) 가이드 활용 방안.........................................................................................8

3) 가이드 활용 범위.........................................................................................8

2 공개용 소프트웨어 소개.......................................................................................9

3 웹 전용 취약성 분석 도구 Nikto .........................................................................10

1) Nikto 소개.................................................................................................10

2) Nikto 설치하기...........................................................................................11

① Nikto 다운로드......................................................................................11

② Nikto 사용하기......................................................................................11

3) Nikto를 이용한 웹 취약성 점검 ....................................................................14

4 취약성 분석 도구 Nessus ..................................................................................16

1) Nessus 소개..............................................................................................16

2) Nessus 설치하기........................................................................................17

① Nessus 다운로드...................................................................................17

② Nessus를 이용한 웹 취약성....................................................................21

5 웹 취약성 점검/분석 결과 내용 분석 ...................................................................28

1) 관리자 페이지 노출....................................................................................28

① 웹 취약성 점검/분석 결과 내용 ...............................................................28

② 취약성 설명..........................................................................................29

③ 조치 방안.............................................................................................29

2) XSS (Cross Site Scripting) 취약성 ................................................................34

① 웹 취약성 점검/분석 결과 내용 ...............................................................34

② 취약성 설명..........................................................................................34

③ 조치 방안.............................................................................................36

3) 구문삽입(SQL Injection) 취약성....................................................................39

① 웹 취약성 점검/분석 결과 내용 ...............................................................39

Page 5: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

4

② 취약성 설명..........................................................................................39

③ 조치 방안.............................................................................................41

4) 파일다운로드(File Download) 취약성 ............................................................44

① 웹 취약성 점검/분석 결과 내용 ...............................................................44

② 취약성 설명..........................................................................................44

③ 조치 방안.............................................................................................45

5) 디렉토리 인덱싱 (Directory Indexing) ...........................................................48

① 웹 취약성 점검/분석 결과 내용 ...............................................................48

② 취약성 설명..........................................................................................48

③ 조치 방안.............................................................................................50

6) WebDAV 취약성.........................................................................................51

① 웹 취약성 점검/분석 결과 내용 ...............................................................51

② 취약성 설명..........................................................................................51

③ 조치 방안.............................................................................................53

7) 불 필요한 HTTP 메소드(Method) .................................................................55

① 웹 취약성 점검/분석 결과 내용 ...............................................................55

② 취약성 설명..........................................................................................55

③ 조치 방안.............................................................................................57

8) 비 참조성 파일 존재 ..................................................................................58

① 웹 취약성 점검/분석 결과 내용 ...............................................................58

② 취약성 설명..........................................................................................58

③ 조치 방안.............................................................................................59

9) 취약한 공개용 보드(제로보드)......................................................................61

① 웹 취약성 점검/분석 결과 내용 ...............................................................61

② 취약성 설명..........................................................................................61

③ 조치 방안 ..........................................................................................................63

6 맺음말.............................................................................................................64

Page 6: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

5

< 표 목 차 >

[ 표 1 ] ‘S&T-SEC’ 웹 취약성 점검/분석 항목 ...............................................8

[ 표 2 ] 취약성 분석 도구 비교....................................................................9

[ 표 3 ] Nikto 옵션 내용............................................................................12

[ 표 4 ] 점검 대상 입력 예제.....................................................................24

[ 표 5 ] 웹 서버 조치 방법........................................................................31

[ 표 6 ] 언어별 관리자 페이지 노출 조치 방법 .............................................33

[ 표 7 ] 유용한 함수를 이용한 조치 방법.....................................................37

[ 표 8 ] 특수 문자 변경 항목.....................................................................37

[ 표 9 ] 언어별 XSS(Cross Site Scripting) 취약성 조치 방법 ..........................38

[ 표 10 ] 언어별 구문삽입(SQL Injection) 조치 방법 .....................................43

[ 표 11 ] 언어별 파일다운로드(FileDownload) 조치 방법 ...............................47

[ 표 12 ] 허용된 HTTP Method 확인...........................................................56

[ 표 13 ] 웹 서버 샘플 파일 ......................................................................60

[ 표 14 ] 최근 제로보드 취약성..................................................................62

Page 7: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

6

< 그 림 목 차 >

[ 그림 1 ] Nikto 홈페이지 ..........................................................................10

[ 그림 2 ] Nikto 다운로드 ..........................................................................11

[ 그림 3 ] Nikto 룰 업데이트......................................................................14

[ 그림 4 ] Nikto를 이용한 웹 취약성 점검....................................................15

[ 그림 5 ] Nikto를 이용한 웹 취약성 HTML 결과...........................................15

[ 그림 6 ] Nessus 홈페이지 .......................................................................16

[ 그림 7 ] Tenable Nessus 다운로드 페이지.................................................17

[ 그림 8 ] Nessus 사용자 등록...................................................................18

[ 그림 9 ] Nessus-3.0.5 for Microsoft Windows 다운로드 페이지 ...................18

[ 그림 10 ] 메일로 수신된 Activation Code..................................................19

[ 그림 11 ] Nessus 설치 ...........................................................................20

[ 그림 12 ] Activation Code 입력 ...............................................................20

[ 그림 13 ] Nessus Plug-in Update ............................................................20

[ 그림 14 ] Tenable Nessus 실행 ...............................................................21

[ 그림 15 ] Manage Policies ......................................................................22

[ 그림 16 ] Manage Policies ......................................................................22

[ 그림 17 ] Web Policy_Modify KISTI.conf ...................................................23

[ 그림 18 ] Start Scan Task .......................................................................23

[ 그림 19 ] 점검 대상 입력........................................................................24

[ 그림 20 ] Plug-In 설정 ...........................................................................25

[ 그림 21 ] 사용할 Plug-In 정책 선택.........................................................25

[ 그림 22 ] Nessus 서버 선택....................................................................26

[ 그림 23 ] Nessus를 이용한 취약성 점검....................................................26

[ 그림 24 ] Nessus를 이용한 웹 취약성 HTML 결과......................................27

[ 그림 25 ] 관리자 페이지 노출 취약성 분석 결과 (Nessus)...........................28

[ 그림 26 ] 관리자 페이지 노출 취약성 분석 결과 (Nikto)..............................28

[ 그림 27 ] 관리자 페이지 인증을 우회한 화면.............................................29

[ 그림 28 ] IIS 웹 서버 IP 주소별 접근제한..................................................31

[ 그림 29 ] Apache 웹 서버 IP 주소별 접근제한...........................................31

[ 그림 30 ] XSS(Cross Site Scripting) 취약성 분석 결과 (Nikto)......................34

[ 그림 31 ] 3자의 Cookie 정보 회득 ...........................................................34

Page 8: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

7

[ 그림 32 ] Script For문을 이용한 공격........................................................35

[ 그림 33 ] Javascript를 이용한 공격 구문 삽입 ...........................................35

[ 그림 34 ] Javascript 실행........................................................................36

[ 그림 35 ] 획득한 인증정보(Cookie) ..........................................................36

[ 그림 36 ] 구문삽입(SQL Injection) 취약성 분석 결과 (Nessus).....................39

[ 그림 37 ] 악의적인 SQL Query문 삽입......................................................40

[ 그림 38 ] having 구문 입력으로 반환되는 에러 메시지................................41

[ 그림 39 ] 파일다운로드(File Download) 취약성 분석 결과 (Nikto).................44

[ 그림 40 ] 상대경로를 이용한 시스템 /etc/passwd다운로드..........................45

[ 그림 41 ] 디렉토리 인덱싱 (Directory Indexing) 취약성 분석 결과 (Nikto) .....48

[ 그림 42 ] 디렉토리 인덱싱 취약성............................................................49

[ 그림 43 ] phpinfo.php ............................................................................49

[ 그림 44 ] WebDAV 취약성 분석 결과 (Nessus)..........................................51

[ 그림 45 ] WebDAV 취약성 분석 결과 (Nikto) .............................................51

[ 그림 46 ] 디렉토리 인덱싱 ......................................................................52

[ 그림 47 ] 업로드된 test.htm....................................................................52

[ 그림 48 ] httpext.dll 보안 설정 ................................................................53

[ 그림 49 ] 웹 홈 디렉토리 보안 설정.........................................................54

[ 그림 50 ] 불 필요한 HTTP 메소드(Method)허용 취약성 분석 결과 (Nikto) .....55

[ 그림 51 ] PUT 메소드를 이용하여 Put.asp 업로드......................................56

[ 그림 52 ] 업로드된 put.asp.....................................................................56

[ 그림 53 ] 레지스트리 추가 ......................................................................57

[ 그림 54 ] 비 참조성 파일 점검 결과 (Nikto) ..............................................58

[ 그림 55 ] 백업파일(.bak) 노출.................................................................59

[ 그림 56 ] DB백업 파일(.sql) 노출.............................................................59

[ 그림 57 ] 제로보드 취약성 분석 결과 (Nessus) .........................................61

[ 그림 58 ] 제로보드 게시판 운영 사이트 ....................................................62

[ 그림 59 ] 제로보드 버전 확인..................................................................62

[ 그림 60 ] 원격 코드(WegShell) 실행.........................................................63

Page 9: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

8

1 개요

1) 목적 과학기술 분야에서 다양하게 활용되는 웹 어플리케이션 취약성을 사전에 점검/분석하여

지능화•다양화되는 웹 공격에 효과적으로 대응하기 위함이다.

2) 가이드 활용 방안 보안 취약성 분석 용도의 공개용 소프트웨어를 이용하여 각급 기관의 웹 어플리케이

션에 대한 기본적인 보안 정보 수집 및 정형화(일반화)된 취약성을 분석을 진행 한다.

웹 취약성 분석은 본 가이드를 참고하여 각급 기관 정보보호 담당자는 웹 어플리케이

션을 대상으로 취약성을 점검 하고 차후 정보보호 연간계획 수립을 통하여 주기적인 웹

취약성 점검/분석을 진행, 웹 어플리케이션의 보안 수준 및 공격의 대응능력을 향상시

킬 수 있다.

3) 가이드 활용 범위 본 가이드를 참고하여 공개 소프트웨어를 이용한 웹 취약성 점검/분석 수행 시 아래

의 주요 취약성 통제 항목 중 7개 카테고리, 9개의 취약성에 대한 점검이 수행되어진다.

구분 취약성 항목 비 고

1 구조 사용자 어플리케이션과 관리자 어플리케이션이 적절하게

분리하여 관리하고 있는가?

2 사용자공격 Cross Site Scripting 취약성이 존재 하는가?

3 DB공격 SQL Injection 취약성이 존재 하는가?

4 시스템 공격 Path Traversal 취약성이 존재 하는가?

Directory Indexing 취약성이 존재 하는가?

WebDev 취약성이 존재 하는가? 5 웹 서버

설정

불필요한 HTTP Method 를 허용했는가?

6 개인정보 &

시스템정보획득

웹 어플리케이션 실행과 연관 없는 비 참조성 파일들이 존

재 한는가?

7 공개용게시판 취약한 공개용 보드(제로보드, 테크노트, 그누보드등)을

사용하고 있는가?

[ 표 1 ] ‘S&T-SEC’ 웹 취약성 점검/분석 항목

Page 10: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

9

2 공개용 소프트웨어 소개

최근 웹 해킹이 점차적으로 늘면서 웹 보안에 대한 인식이 확산되고 있다. 웹 해킹은

웹을 통해 접속하여 모든 해킹 시도를 진행하는 것으로 방화벽이 설치되어 있는 환경에서

도 이용이 가능하고 굳이 별도의 툴이 없이 단지 브라우저를 통해서도 다양한 해킹을 할

수 있다는 점에서 수법이나 기법이 다양해지고 있다.

이러한 웹 해킹에 대응하기 위해 웹 서버나 웹 기반의 응용 프로그램의 취약성을 점검

할 수 있는 대표적인 프로그램인 Nikto와 서버 및 네트워크의 취약성을 점검할 수 있는

Nessus를 활용해 본다.

Nessus는 웹 전용 취약성 점검 도구는 아니지만 많은 룰을 보유하고 있어서 서버, 네

트워크의 취약성만 아니라 웹 어플리케이션에 대한 취약성도 같이 점검 해 준다. Nikto의

경우 웹 서버 및 네트워크 취약성 점검에는 효율적이나 웹 어플리케이션은 경우 미약한

부분이 있어 이 부분을 보완하기 위하여 Nessus를 같이 활용해 보도록 한다.

구분 Nikto Nessus

설치/운영 OS 리눅스/유닉스 리눅스/유닉스 윈도우

다운로드 사이트 http://www.cirt.net http://www.nessus.org

취약성 점검 대상 웹 서버 서버 네트워크장비

특징

웹 서버 및 응용프로그램 취약성 점검에 강함

웹 어플리케이션 취약성 점

검에는 다소 미흡

많은 룰 보유로 다양한 시스

템을 대상으로 한 취약성 분석 가능

웹 어플리케이션 취약성 분

석 가능 국내 공개용보드(제로보드)

취약성 점검이 가능

가이드

활용방안 웹 서버 및 응용프로그램에

대한 취약성 분석 웹 어플리케이션에 대한 취

약성 분석

[ 표 2 ] 취약성 분석 도구 비교

Nessus를 이용한 웹 취약성 분석의 신속성 및 정확성, 편리성을 위하여 본 가이드에서

는 Nessus에서 사용하는 점검룰 중 웹에 관련된 점검룰만 선별하여 웹 취약성 분석을

실시하도록 한다.

만일 각 기관 담당자들의 필요에 따라 선별된 웹 취약성 뿐만 아니라 서버 및 네트워크

장비 전체로 한 취약성 분석을 하고자 할 경우는 본 가이드에서 배포하는 Nessus 웹 점

검룰을 다운로드 할 필요 없이 Nessus 룰 업데이트를 이용하여 점검룰을 정의하고

Nessus를 이용하여 점검을 진행 하면 된다.

Page 11: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

10

3 웹 전용 취약성 분석 도구 Nikto

1) Nikto 소개

Nikto는 기본적으로 리눅스/유닉스 계열시스템에 설치되는 도구이며, 본 가이드에서

는 설치 및 운영에 편리한 래드햇 리눅스에 Nikto 설치 한다. Nikto는 편리하고 단순하

면서도 강력한 기능을 제공하기 때문에 많은 사용자들을 보유하고 있으며, 특히나 웹

해킹이 일반화되면서 그 중요성이 역시 커지고 있다. 웹 서버 설치 시 기본적으로 설치

되는 파일과 웹 서버의 종류와 버전 등을 스캔하며 특히 취약한 CGI 파일의 스캔 기능

이 우수한 것으로 알려져 있다.

공개용 소프트웨어(http://www.cirt.net)

[ 그림 1 ] Nikto 홈페이지

취약한 3100여개의 CGI 파일에 대한 정보 보유

625개 이상의 웹 서버에 대한 버전 정보 보유

취약성 DB는 수시로 업데이트가 가능하며, 원격지에서도 쉽게 업데이트가 가능

점검 결과를 html, txt, csv등으로 저장 가능

Page 12: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

11

2) Nikto 설치하기

① Nikto 다운로드

Nikto를 다운로드 받는 위치는 http://www.cirt.net/nikto/nikto-current.tar.gz이

며 wget 명령어를 이용하여 프로그램을 다운로드 받을 수 있다.

[ 그림 2 ] Nikto 다운로드

위 그림과 같이 Nikto를 다운로드 받은 후 tar 명령을 이용하여 압축을 풀어준다.

그리고 Nikto는 perl로 되어 있기 대문에 별도의 컴파일 과정이 필요 없으므로 바로

사용가능 하다.

② Nikto 사용하기

압출을 푼 디렉토리로 이동한 perl 파일을 실행 시키면 스캔이 진행되며, 기본적인

사용형식은 아래와 같다

# ./nikto.pl [-h 스캐닝 할 대상] [옵션]

Nikto는 많은 옵션사항을 제공하고 있으며, 아래는 옵션들에 대한 설명이다.

Options:

-Cgidirs+ Scan these CGI dirs: 'none', 'all', or a value like '/cgi/'

-cookies print cookies found

-evasion+ ids evasion technique (1-9, see below)

-findonly find http(s) ports only, don't perform a full scan

-Format save file (-o) Format: htm, csv or txt (assumed)

-generic force full (generic) scan

Page 13: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

12

-host+ target host

-id+ host authentication to use, format is userid:password

-mutate+ mutate checks (see below)

-nolookup skip name lookup

-output+ write output to this file

-port+ port to use (default 80)

-root+ prepend root value to all requests, format is /directory

-ssl force ssl mode on port

-timeout timeout (default 10 seconds)

-useproxy use the proxy defined in config.txt

-Version print plugin and database versions

-vhost+ virtual host (for Host header)

-404+ treat pages with this content as 404

+ requires a value

These options cannot be abbreviated:

-config+ use this config file

-debug debug mode

-dbcheck syntax check scan_database.db and user_scan_database.db

-update update databases and plugins from cirt.net

-verbose verbose mode

IDS Evasion Techniques:

1 Random URI encoding (non-UTF8)

2 Directory self-reference (/./)

3 Premature URL ending

4 Prepend long random string

5 Fake parameter

6 TAB as request spacer

7 Random case sensitivity

8 Use Windows directory separator (\)

9 Session splicing

Mutation Techniques:

1 Test all files with all root directories

2 Guess for password file names

3 Enumerate user names via Apache (/~user type requests)

4 Enumerate user names via cgiwrap (/cgi-bin/cgiwrap/~user

type requests)

[ 표 3 ] Nikto 옵션 내용

본 가이드에서는 Nikto의 옵션 중 주로 사용하는 옵션 위주로 설명하고자 하며, 그

내용은 다음과 같다.

Page 14: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

13

Cgidirs

이 옵션을 사용하면 스캔을 진행할 cgi 디렉토리를 지정할 수 있다. All로 지정하면

모든 cgi 디렉토리에 대하여 스캔을 수행하며 예제는 다음과 같다.

# ./nikto.pl –h www.test.com –Cgidirs all

generic

스캔 시 웹 서버나 웹 어플리케이션 정보와는 관계없이 스캔을 진행 하도록 한다.

findonly

웹 서버가 사용하는 웹 포트를 스캔하기 위한 옵션으로 80번이 아닌 다른 포트에

서 웹 서비스를 하는 포트를 찾을 경우 사용한다.

Format

스캔 결과를 파일로 저장하고자 할 때 어떤 형식으로 남길지 지정한다. 기본 옵션

은 txt로 저장되나, HTML, TXT, CSV등을 지정할 수 있으며 이때 –output과 함께 사

용하여 저장될 파일명도 지정하여야 한다. 아래는 스캔 예제로서 html 형식으로 저

장하며 저장 결과는 result.html로 남겨 두도록 하였다.

# ./nikto.pl –h www.test.com –format html –output result.html

Id

점검하고자 하는 웹 서버가 HTTP 인증으로 보호되고 있을 때, 별도의 id/pw로 인

증할 때 사용한다.

Update

점검 룰을 업데이트 할 때 사용하며 웹을 통해 자동으로 다운로드 받아서 업데이트

가 진행 된다.

# ./nikto.pl –update

host

점검을 진행하고자 하는 대상을 선택한다. 만약 점검하고자 하는 대상이 서버 또는

도네임이 여러 개의 경우 점검하고자 하는 리스트를 파일로 제작하여, 점검을 진행

할 수 있다.

점검 대상이 2개가 192.168.0.4, 192.168.0.5일 경우

# cat list.txt

192.168.0.4

Page 15: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

14

192.168.0.5

# ./nikto.pl –host list.txt

3) Nikto를 이용한 웹 취약성 점검

우선 Nikto를 이용하여 웹 취약성 점검에 앞서, Nikto는 계속적으로 점검 룰을 업

데이트가 진행되므로 사용자는 항상 최신 룰 업데이트를 보유하여 최근에 발표된 취

약성까지 점검을 진행 해야 한다.

Update 옵션을 사용하여 Nikto 점검룰 업데이트를 진행 한다.

[ 그림 3 ] Nikto 룰 업데이트

본 가이드에서는 192.168.19.10을 대상으로 모든 디렉토리에 대해서 html 형식

으로 점검 하고자 한다.

# ./nikto.pl -h 192.168.19.10 -generic -Cgidirs all -Format html -output

result.html

위 명령어 실행 결과 아래 그림처럼 웹 취약성 점검이 진행되면 완료 후 결과값이

result.html로 저장되어 [그림5]와 같이 html 형식으로 취약성 결과 내용을 확인 할

수 있다.

Page 16: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

15

[ 그림 4 ] Nikto를 이용한 웹 취약성 점검

[ 그림 5 ] Nikto를 이용한 웹 취약성 HTML 결과

Page 17: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

16

4 취약성 분석 도구 Nessus

1) Nessus 소개

Nessus는 리눅스/유닉스 계열시스템과 윈도우 시스템에 설치되는 도구이다.

리눅스/유닉스 계열 시스템에 설치 및 운영하고자 할 경우 2-Tier(Server-Client)구

조로 설치하는데, 리눅스/유닉스 계열시스템 Nessus Server인 Nessus 2.X, 3.X가 설

치되고, 윈도우시스템에 Nessus Client인 NessusWX가 설치가 된다. 그리고 윈도우

계열 시스템에 설치 할 경우 Stand Alone 구조인 Tenable Nessus를 설치한다.

본 가이드에서는 설치 및 운영에 편리한 윈도우 기반의 Tenable Nessus를 설치 하

고 14,000여개의 Nessus 룰 중 웹 관련 룰만 선별하여 취약성 점검을 진행 하고 설

명 하고자 한다.

공개용 소프트웨어(http://www.nessus.org)

[ 그림 6 ] Nessus 홈페이지

약 14,000여개의 Plug-In(점검룰) 보유

Server-Client, Standard Alone 기반의 취약성 점검 제공

사용자의 편리성을 위하여 GUI 형태로 취약성 점검 설정을 지원

점검 결과를 txt 나 html 또는 pdf 등의 형식으로 자유롭게 저장 가능

리눅스/유닉스, 윈도우 시스템 및 라우터, 스위치등 모든 OS 및 장비에 대한 취약

성 정보를 제공

Page 18: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

17

2) Nessus 설치하기

① Nessus 다운로드

Nessus를 다운로드 받는 사이트는 http://www.nessus.org/download/이며 본

가이드에서는 Tenable Nessus를 설치하고자 함으로 Nessus 3.0.5 for Microsoft

Windows를 다운로드 받는다.

[ 그림 7 ] Tenable Nessus 다운로드 페이지

Tenable Nessus를 다운로드를 시도 하면 Nessus 라이센스 약관이 나타나게 되며,

동의를 거치게 되면 다음 그림과 사용자 등록 페이지가 나온다.

여기서 등록되는 메일주소는 Nessus Activation Code가 전달되는 메일 주소임으로

본인이 사용하는 메일 주소를 등록 시켜야 하며, 이 Activation Code는 Nessus 설

치 이후 등록 하여 사용한다.

Page 19: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

18

[ 그림 8 ] Nessus 사용자 등록

[ 그림 9 ] Nessus-3.0.5 for Microsoft Windows 다운로드 페이지

Page 20: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

19

[ 그림 10 ] 메일로 수신된 Activation Code

위 그림과 같이 Activation Code가 수신되었으며, 다운로드 된 Nessus Installer

를 이용하여 Nessus를 설치 한다.

설치는 다른 윈도우 프로그램 Installer와 동일하기 때문에 쉽게 진행 할 수가 있

다.

Page 21: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

20

[ 그림 11 ] Nessus 설치

그러나 Nessus의 경우 메일로 수신된 Activation Code 입력단계가 존재 함으로

아래 그림과 같이 본인의 메일로 수신된 코드를 입력 하여 진행 하면 된다.

[ 그림 12 ] Activation Code 입력

[ 그림 13 ] Nessus Plug-in Update

Page 22: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

21

코드 입력이 완료되면 위 그림과 같이 Plug-in(점검 룰)Update 진행 단계가 나타

나며, 정확한 취약성 분석을 위하여 최신 Plug-in을 유지 해야 한다.

② Nessus 를 이용한 웹 취약성

Nessus의 설치가 완료되고 Plug-In Update가 완료되면 점검 대상에 대한 취약성

점검을 진행 하도록 하자

[ 그림 14 ] Tenable Nessus 실행

시작 > 프로그램 > Tenable Network Security > Nessus > Tenable Nessus를

실행 시키면 아래 그림과 같은 화면이 나타나며, Nessus를 이용하여 취약성 점검 이

전에 본 가이드에서는 웹 취약성 점검만 진행 하고자 함으로 우선 웹 Plug-In만 적

용시키기 위하여 Manage Policies를 클릭한다.

Page 23: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

22

[ 그림 15 ] Manage Policies

위 그림과 같이 Manage Policies 메뉴가 나타나며, 최초 설치 시에는 정책이 존재

하지 않는다.

[ 그림 16 ] Manage Policies

그래서 웹 점검만 가능하도록 과학기술정보보호센터는 Nessus를 이용한 웹 취약

Page 24: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

23

성 점검 정책을 수정(Web Policy_Modify KISTI.conf)하여, 과학기술정보보호센터

홈페이지 (http://www.sntsec.or.kr)를 통하여 배포하고 있다. 홈페이지에서 아래그

림과 같이 다운로드를 한 후 C:\DocumentsandSettings \PC_Login_User

\Tenable\Nessus\config\폴더에 저장 하면 된다.

[ 그림 17 ] Web Policy_Modify KISTI.conf

웹 정책에 설정이 끝이 났으면 본격적으로 Nessus를 이용하여 웹 취약성 점검을

하도록 하자

초기 메뉴인 Welcome을 다시 클릭하여 아래 그림과 같이 Start Scan Task를 클

릭한다.

[ 그림 18 ] Start Scan Task

다음 그림과 같이 점검 대상을 입력 할 수 있는 메뉴가 나타나게 되며 점검 하고자

Page 25: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

24

하는 대상을 입력 하면 된다.

[ 그림 19 ] 점검 대상 입력

입력 할 때에는 아래 표와 같이 구분자를 “,” 및 “ – ”를 이용하여 설정하고, IP 및

도메인으로 입력 하면 된다.

hostname.kisti.re.kr

192.168.0.2,192.168.0.3,192.168.0.3

192.168.0.2-192.168.0.255

192.168.0.0/255.255.255.0

192.168.0.0/24

host1.kisti.re.kr,192.168.0.3-192.168.0.4,192.168.1.0/24

[ 표 4 ] 점검 대상 입력 예제

취약성 점검 대상을 입력 한 후에는 점검 룰, 즉 Plug-in 설정 단계가 나타난다.

과학기술정보보호센터에서 배포하고 있는 Web Policy_Modify KISTI.conf을 이용하

여 점검 하고자 할 경우에는 [ Choose a predefined policy (You should use

Manage Policies to create one first) ]을 선택 하면 된다.

그러나 웹뿐만 아니라 서버 및 네트워크 장비 전체에 대한 취약성 점검을 진행 하고

자 할 경우에는 [ Enable all but dangerous plugins with default settings

(Recommended) ] 을 선택 하여 서버에 영향을 줄 수 있는 plugin인 Dos Plugin을

제외 한 나머지를 선택 하여 진행 하면 된다.

Page 26: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

25

[ 그림 20 ] Plug-In 설정

본 가이드는 웹 취약성 점검만 사용하고자 하기 때문에 [ Choose a predefined

policy (You should use Manage Policies to create one first) ] 을 선택 했으며, 과

학기술정보보호센터에서 다운로드 한 Web Policy_Modify KISTI를 선택 하였다.

[ 그림 21 ] 사용할 Plug-In 정책 선택

Page 27: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

26

만일 Nessus 서버가 따로 존재 할 경우에는 [ Scan from a remote Nessus

server ]를 선택하고, 본 가이드와 동일하게 별도의 Nessus가 없다면 [Scan from

the localhost ]를 선택한다.

[ 그림 22 ] Nessus 서버 선택

여기까지 모든 단계에 대한 설정이 완료 되었으며, [ Scan now ]를 클릭하여 취약

성 점검을 진행 한다.

[ 그림 23 ] Nessus를 이용한 취약성 점검

Page 28: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

27

[ 그림 24 ] Nessus를 이용한 웹 취약성 HTML 결과

Page 29: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

28

5 웹 취약성 점검/분석 결과 내용 분석

공개용 소프트웨어를 이용한 웹 취약성 점검/분석 후 html형식으로 그 결과를 내용을

확인 하고, 각 취약성 점검/분석 결과 내용에 대한 사례중심으로 예를 들어보고 각 취약

성에 대한 설명 및 해결 방안을 모색한다.( ‘S&T-SEC’ 웹 취약성 점검/분석 항목 기준)

그리고 본 가이드에서는 Nikto와 Nessus 결과 중 정확성 및 신뢰성을 기준으로 하여

항목별 취약성 점검 결과가 우수한 것을 그 예로 제시한다.

1) 관리자 페이지 노출

① 웹 취약성 점검/분석 결과 내용

[ 그림 25 ] 관리자 페이지 노출 취약성 분석 결과 (Nessus)

[ 그림 26 ] 관리자 페이지 노출 취약성 분석 결과 (Nikto)

Page 30: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

29

② 취약성 설명

관리자 페이지는 웹 서비스의 사용자나 데이터, 컨텐츠를 손쉽게 관리하기 위한 목

적으로 다양한 기능과 권한을 갖고 있고 이는 홈페이지의 운영에 매우 중요한 역할을

하고 있으므로 일반사용자는 인증을 통과하지 못하도록 할 뿐 아니라 일반사용자가

관리자 페이지를 볼 수 없도록 해야 한다.

그러나 일반적으로 추측하기 쉬운 URL(ex: /admin, /manager)을 사용하고 있어,

ID/패스워드에 대한 크랙 또는 접근 허가 정책에 대해 요청하는 부분의 정보를 변경

함으로써 접근이 가능한 경우가 많다.

웹 관리자의 권한이 노출될 경우 홈페이지의 변조뿐만 아니라 취약성 정도에 따라

서 웹 서버의 권한까지도 노출될 위험성이 존재한다.

위협사례

대부분의 관리자 페이지는 http://www.test.com/admin 등과 같이 쉽게 추측이

가능하다. 또 인증 과정이 존재하더라도 SQL Injection, JavaScript 변조 등의 취약

성을 이용하여 인증과정을 우회하여 웹 관리자 권한을 획득 할 수 있다.

[ 그림 27 ] 관리자 페이지 인증을 우회한 화면

③ 조치 방안

일반사용자의 접근이 불필요한 관리자 로그인 페이지 주소를 유추하기 어려운 이름

으로 변경한다.

중요한 정보를 가진 웹 서버의 특정 페이지들은 관리자 또는 특정 사용자만 접근할

Page 31: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

30

필요가 있다. 이러한 주요 페이지들은 웹 서버에서 적절한 설정을 통하여 특정 사용

자만 접근이 가능하도록 사용자 접근제한을 할 수 있다

웹 서버 조치 방법

별도의 네트워크 범위로 IP 레벨의 접근 권한을 설정하고 웹 관리자 메뉴의 접근

을 제한하며 웹 관리자의 인터페이스는 특히, SSL기술을 이용하여 HTTP over SSL과

같은 Data Transaction 암호화를 반드시 적용해야 한다. 가능하다면, VPN과 같은

네트워크 차원의 별도 보안시스템의 설치도 고려할 필요가 있다.

또한, 관리자 계정으로는 외부 사이트에서 접근하는 것을 허용하지 않는 것이 바람

직하다.

대부분의 홈페이지에서 관리자 계정에 많은 권한을 부여하고 있는 경우가 많고, 일

반 사용자용 게시판과는 달리 관리자용 게시판의 경우에는 별도 관리가 안되고 있는

경우가 많아 관리자 계정 권한 획득 시 홈페이지 시스템의 권한획득으로 이루어지기

쉽기 때문이다.

따라서 관리자 페이지의 경우, 사내 IP에서만 접근이 가능하도록 설정하고, 만일

외부 관리자의 접근이 반드시 필요한 경우라면, 사이트 관리 권한을 외부로 열어주지

않고도 가능한 VPN 기술을 사용하면 외부 관리자가 회사 내부(혹은 사이트)네트워크

로 접근할 수 있으며, 관리자는 보호된 백엔드 연결을 통해 사이트에 접근할 수 있다.

admin, manager 등과 같이 추측하기 쉬운 디렉토리 명이나 파일명을 사용하

지 않는다

- http://www.abc.com/admin.html

- http://www.abc.com/admin_main.html

- http://www.abc.com/admin/index.html

- http://www.abc.com/admin/login.html

- http://www.abc.com/master.html

- http://www.abc.com/master/index.html

Page 32: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

31

관리자 페이지의 경우, 관리자 호스트 IP만 접근 가능하도록 설정한다

서버 구분 조치 방법

IIS

다음과 같은 방법으로 [관리자 페이지] 접근을 제한한다.

설정→제어판→관리도구→인터넷 서비스 관리자 선택한다.

해당 관리자 페이지 폴더에 오른쪽 클릭을 하고 등록정보→디렉

토리 보안→IP 주소 및 도메인 이름 제한→편집 버튼을 클릭한

다.

액세스 거부를 선택하고 추가 버튼을 클릭하여 관리자 호스트 IP

또는 서브넷을 등록한다.

[ 그림 28 ] IIS 웹 서버 IP 주소별 접근제한

Apache

환경설정 파일인 httpd.conf 의 Directory 섹션의 AllowOverride

지시자에서 AuthConfig 또는 All 추가하여 .htaccess를 통하여 사용

자계정, 사용자 패스워드를 등록한 사용자만 접근이 가능하도록 하고

관리자 디렉토리(admin)에 대해 특정 IP에 대해서만 접근이 가능하

도록 하기 위해서 다음과 같이 설정한다.

[ 그림 29 ] Apache 웹 서버 IP 주소별 접근제한

[ 표 5 ] 웹 서버 조치 방법

Page 33: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

32

웹 어플리케이션 조치 방법

웹 관리자 메뉴의 접근을 특정 네트워크 대역으로 제한하여, IP Address까지도 인

증요소로 체크하도록 웹 관리자 사용자인터페이스를 개발하고, 관리자 인증 후 접속

할 수 있는 페이지의 경우 해당 페이지 주소를 직접 입력하여 들어가지 못하도록 관

리자 페이지 각각에 대하여 관리자 인증을 위한 세션관리를 해야 한다.

접근 통제 정책을 구현하고 있는 코드는 구조화, 모듈화가 되어 있어야 한다.

접근제어가 필요한 모든 페이지에 통제수단(로그인 체크 및 권한 체크)을 구현

해야 한다. 특히, 하나의 프로세스가 여러 개의 페이지 또는 모듈로 이루어져

있을 때 권한 체크가 누락되는 경우를 방지하기 위해서 공통 모듈을 사용하는

것을 권장한다.

인증 과정을 처리하는 부분에 Client Side Script(Javascript, VBScript 등)을

사용하면 사용자가 임의로 수정할 수 있으므로 Server Side Script(PHP, ASP,

JSP 등)를 통하여 인증 및 필터링 과정이 수행되어야 한다.

언어 벌 안전한 프로그래밍 예

ASP

<%

If myfunc_userauth(userid, userpw) <> 1 Then //DB에서 사용자 인증

Response.write "인증 실패"

Else

If Request.ServerVariables("REMOTE_ADDR") <> "10.10.1.1" Then// 관리자 IP

확인

Response.write "관리자 IP가 아닙니다."

Response.write "인증실패“

LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록

Else

Session("logged_in") = 1'인증에 성공했을 경우 logged_in 에 1의 값을 셋팅

Session("userid") = userid

Session("user_ip") = Request.ServerVariables("REMOTE_ADDR")

LogSave($userid, $user_ip)'접속에 사용한 ID 및 IP 기록

... 중략 ...

End If

End If

%>

Page 34: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

33

언어 벌 안전한 프로그래밍 예

PHP

<?PHP

@session_start(); //세션 데이터를 초기화

if(!myfunc_userauth($userid, $userpw) || $_SERVER["REMOTE_ADDR'] !=

"10.10.1.1")

//DB 에서 사용자 인증을 처리, 관리자 IP인지 확인

print "인증 실패";

LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록

exit;//인증 실패 시 종료

//인증에 성공한 경우 처리 해야 되는 부분

if (!session_is_registered("logged_in"))

$logged_in = 1;//인증에 성공했을 경우 logged_in 에 1의 값을 셋팅

$user_ip = $_SERVER["REMOTE_ADDR"];

session_register("logged_in");//인증 결과 저장

session_register("userid");//사용자 ID를 저장

session_register("user_ip");//사용자 IP를 저장

LogSave($userid, $user_ip);// 접속한 사용자 ID 및 IP 기록

... 중략 ...

JSP

<%@ page contentType="text/html;charset=euc-kr" %>

<%@ page import="java.util.* " %>

<%@ page import="java.sql.* " %>

<%

//HttpSession session = request.getSession(true);

String user_ip = request.getRemoteAddr();

// form 에서 사용자 id와 사용자 password를 아래 변수로 전달

if(!myfunc_userauth(userid, userpw) || !user_ip.equals("10.10.1.1"))

//DB 에서 사용자 인증을 처리, 관리자 IP인지 확인

out.println "인증 실패";

LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록

else

//인증에 성공한 경우 처리 해야 되는 부분

session.putValue("logged_in","logok");

session.putValue("userid",userid);

session.putValue("user_ip", user_ip);

LogSave(userid, user_ip);// 접속한 사용자 ID 및 IP기록

...

[ 표 6 ] 언어별 관리자 페이지 노출 조치 방법

Page 35: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

34

2) XSS (Cross Site Scripting) 취약성

① 웹 취약성 점검/분석 결과 내용

[ 그림 30 ] XSS(Cross Site Scripting) 취약성 분석 결과 (Nikto)

② 취약성 설명

Cross-site scripting(이하 XSS) 취약성은 웹 페이지가 사용자에게 입력 받은 데

이터를 필터링하지 않고 그대로 동적으로 생성된 웹 페이지에 포함하여 사용자에게

재전송할 때 발생한다.

자바스크립트처럼 클라이언트 측에서 실행되는 언어로 작성된 악성 스크립트 코드

를 웹 페이지, 웹 게시판 또는 이 메일에 포함시켜 사용자에게 전달하면, 해당 웹 페

이지나 이 메일을 사용자가 클릭하거나 읽을 경우 악성 스크립트 코드가 웹 브라우저

에서 실행이 된다.

[ 그림 31 ] 3자의 Cookie 정보 회득

이와 같이 공격자는 XSS 취약성이 존재하는 웹 사이트를 이용하여 자신이 만든 악

Page 36: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

35

의적인 스크립트를 일반 사용자의 컴퓨터에 전달하여 실행시킬 수 있는데, 이러한 공

격방법을 통해 사용자 쿠키를 훔쳐서 해당 사용자권한으로 로그인하거나 브라우저를

제어할 수 있다.

위협 사례

Script문을 이용한 공격

간단히 Script문을 이용한 방법으로 Script for문을 이용하여 제 3자가 Script문이

입력된 글을 열람했을 시 반복적으로 Script문을 실행 시켜 제 3자의 정상적인

컴퓨터 사용을 방해하는 공격이다.

[ 그림 32 ] Script For문을 이용한 공격

Javascript문을 이용한 Cookie Sinffing

개인 소개와 같은 많은 양의 글을 작성할 수 있는 부분에 XSS 취약성이 존재하여

JavaScript를 이용하여 자신의 정보를 열람하는 사용자의 인증정보(Cookie 정보

등)를 탈취한다

[ 그림 33 ] Javascript를 이용한 공격 구문 삽입

Page 37: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

36

위 그림과 같이 일반 게시판을 이용하여 제 3자의 인증정보를 가지고 오는

Javascript문을 입력 한다.

이 후 제 3 자는 해당 게시물을 확인 하는 순간 javascript 문이 실행 되면서

아래와 같은 공격자의 웹 페이지가 열림과 동시에 인증정보가 공격자 PC 에 저장이

된다.

[ 그림 34 ] Javascript 실행

아래의 그림은 위 공격으로 인하여 획득된 인증정보(Cookie) 이다.

[ 그림 35 ] 획득한 인증정보(Cookie)

위 그림과 같이 획득된 인증 정보(Cookie)를 이용하여 HTTP Session

Hijacking인 Cookie Spoofing 공격을 통하여 다른 사용자로 접근이 가능하다

③ 조치 방안

유용한 함수들

각 웹 프로그램 언어(ASP, PHP)들은 이렇게 스크립트로 실행되는 문자열을 입력

받았을 때, 정해놓은 특정문자열로 치환시키면서 해당 구문이 실행 할 수 없도록 지

원해주는 함수들이 존재한다.

Page 38: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

37

구분 유용한 함수

ASP

Server.HTMLEncode() 메소드를 이용하여 특수문자를 Entity 형태로 변경 - 용도 : 특정 문자열에 대한 HTML encoding을 수행한다. 사용자가 입력 한 값으로 HTML 페이지를 구성하기 전에 사용하면 Cross-Site Scripting 공격에 효과적이다. - 적용 가능한 IIS : IIS 5.0이상 - 사용법 <%= Server.HTMLEncode("<script>alert(document.cookie);</script>") %> - 결과 &lt;script&gt;alert(document.cookie);&lt;/script&gt;

htmlspecialchars()를 이용하여 특수문자를 Entity 형태로 치환 - 용도 : 이 함수는 특정 문자열에 대한 HTML encoding을 수행한다. 사 용자가 입력한 값으로 HTML 페이지를 구성하기 전에 사용하면 Cross-Site Scripting 공격 대비를 위해서 사용할 수 있다. - 사용법 htmlspecialchars("<a href='test'>Test</a>") - 결과 &lt;a href='test'&gt;Test&lt;/a;&gt;

PHP strip_tags() 함수를 이용하여 문자열로부터 HTML 태그와 PHP 태그를 제거 - 용도 : 사용자가 입력한 값을 HTML 화면에 출력할 경우 사용하여 Cross-Site Scripting 공격에 대비할 수 있다. - 적용 가능한 PHP 버전 : PHP 3.0.8 이상 - 사용법 A. strip_tags('<script>'); : 모든 HTML에서 <script> 태그를 제거한다. ※ htmlspecialchars() 함수를 사용하는 것보다 strip_tags()나 strip_replace() 함수를 사 용하여 처리하는 것이 보다 바람직함

[ 표 7 ] 유용한 함수를 이용한 조치 방법

언어별 상세 조치 방법

사용자 입력으로 사용 가능한 문자들을 정해놓고, 그 문자들을 제외한 나머지 모든

문자들을 필터링 한다. 필터링 해야 하는 대상은 GET 질의 문자열, POST 데이터,

쿠키, URL, 그리고 일반적으로 브라우저와 웹 서버가 주고받는 모든 데이터를 포함

한다. 아래는 특수문자에 대한 Entity 형태를 표시한 것이다.

변경 전 < > ( ) # &

변경 후 &lt; &gt; &#40 &#41 &#35 &#38

[ 표 8 ] 특수 문자 변경 항목

Page 39: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

38

게시판에서 HTML 포맷을 사용할 수 없도록 설정한다.

필요한 경우 모든 HTML을 사용하지 못하게 설정 후 필요한 HTML tag만 쓸

수 있도록 설정한다.

언어 벌 안전한 프로그래밍 예

ASP

If use_html Then' HTML tag를 사용하게 할 경우 부분 허용

memo = Server.HTMLEncode(memo) 'HTML tag를 모두 제거

' 허용할 HTML tag만 변경

memo = replace(memo, "&lt;p&gt;", "<p>")

memo = replace(memo, "&lt;P&gt;", "<P>")

memo = replace(memo, "&lt;br&gt;", "<br>")

memo = replace(memo, "&lt;BR&gt;", "<BR>")

Else' HTML tag를 사용하지 못하게 할 경우

memo = Server.HTMLEncode(memo)' HTML encoding 수행

memo = replace(memo, "<", "&lt;")

memo = replace(memo, ">", "&gt;")

End If

Response.write "게시물 내용-" & memo & "<BR>"

PHP

$use_tag = "img,font,p,br";// 허용할 HTML tag

if($use_html == 1) // HTML tag를 사용하게 할 경우 부분 허용

$memo = str_replace("<", "&lt;", $memo);// HTML TAG를 모두 제거

$tag = explode(",", $use_tag);

for($i=0; $i<count($tag); $i++) // 허용할 TAG만 사용 가능하게 변경

$memo = eregi_replace("&lt;".$tag[$i]." ", "<".$tag[$i]." ", $memo);

$memo = eregi_replace("&lt;".$tag[$i].">", "<".$tag[$i].">", $memo);

$memo = eregi_replace("&lt;/".$tag[$i], "</".$tag[$i], $memo);

else // HTML tag를 사용하지 못하게 할 경우

// $memo = htmlspecialchars($memo);

// htmlspecialchars() 사용시 일부 한글이 깨어지는 현상이 발생 할 수 있음

$memo = str_replace("<", "&lt;", $memo);

$memo = str_replace(">", "&gt;", $memo);

echo "게시물 내용-" . $memo . "<BR>\n";

JSP

if(use_html) // HTML tag를 사용하게 할 경우 부분 허용

memo = memo.replaceAll("<","&lt;");//HTML tag를 모두 제거

memo = memo.replaceAll(">","&gt;");

// 허용할 HTML tag만 변경

memo = memo.replaceAll("&lt;p&gt;", "<p>");

memo = memo.replaceAll("&lt;P&gt;", "<P>");

memo = memo.replaceAll("&lt;br&gt;", "<br>");

memo = memo.replaceAll("&lt;BR&gt;", "<BR>");

else // HTML tag를 사용하지 못하게 할 경우

memo = memo.replaceAll("<","&lt;");

memo = memo.replaceAll(">","&gt;");

out.print("게시물 내용-" + memo + "<BR>");

[ 표 9 ] 언어별 XSS(Cross Site Scripting) 취약성 조치 방법

Page 40: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

39

3) 구문삽입(SQL Injection) 취약성

① 웹 취약성 점검/분석 결과 내용

[ 그림 36 ] 구문삽입(SQL Injection) 취약성 분석 결과 (Nessus)

② 취약성 설명

대부분의 웹 사이트들은 사용자로부터 입력 받은 값을 이용해 데이터 베이스 접근

을 위한 SQL Query를 만들고 있다.

사용자 로그인 과정을 예로 들면, 사용자가 유효한 계정과 패스워드를 입력했는지

확인하기 위해 사용자 계정과 패스워드에 관한 SQL Query문을 만든다. 이때 SQL

Injection 기법을 통해서 정상적인 SQL query를 변조할 수 있도록 조작된 사용자

이름과 패스워드를 보내 정상적인 동작을 방해할 수 있다.

이러한 비정상적인 SQL Query를 이용해 다음과 같은 공격이 가능하다.

사용자 인증을 비정상적으로 통과할 수 있다.

데이터베이스에 저장된 데이터를 임의로 열람할 수 있다.

데이터베이스의 시스템 명령을 이용하여 시스템 조작이 가능하다.

이러한 취약성을 SQL Injection 취약성이라고 하며, 사용자가 데이터 입력이 가능

한 수 많은 웹 페이지상에 이러한 취약성이 존재할 수 있다.

Page 41: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

40

위협 사례

사용자 인증 공격

아래의 그림과 같이 인증을 처리하는 모듈이 입력 값에 대해 적절히 검사하지

않았을 때 공격자는 비정상적인 SQL Query 를 삽입 할 수 있고 이를 이용해

사용중인 데이터베이스에 영향을 줄 수 있다.

[ 그림 37 ] 악의적인 SQL Query문 삽입

이 스크립트에 공격자가 test 라는 신청인명을 입력하고 인터넷접수번호 대신 A' or

'A'='A 이란 값을 입력하면 아래와 같은 SQL Query 가 완성된다.

이 경우 구문의 WHERE 절은 “ 참 AND 거짓 OR 참 “의 WHERE 절이 생성되며

무조건 참이 되어 SQL 구문은 올바른 입력 값으로 처리하게 되며 공격자는 웹 인증

페이지를 쉽게 통과할 수 있게 된다.

SQL 에러 메시지를 이용한 응용사례

DB 서버에서 반환되는 에러메시지를 이용하여 테이블 및 열 이름 등 모든 정보를

획득할 수 있다.

먼저 공격자는 테이블명과 열의 이름를 얻기 위해 having 절을 이용할 수 있다.

having 절은 select 의 where 절처럼 조건을 주는 부분으로, where 절과 다른 점은

결과에 반드시 group by 가 와야 한다는 점이다.

만약 select list 에 group by 가 없을 경우 특정 열을 지정하지 않아 에러가

발생하게 되며, 반환되는 에러메시지에는 테이블의 첫 번째 열 이름을 포함하게

된다.

테이블명과 열의 이름을 얻기 위해서 계정에 다음과 같은 구문을 입력할 수 있다.

‘ having 1=1 --

SELECT usesrid, passwd FROM user_info WHERE userid=``or `a`=`a` and passwd=``or `a`=`a`

Page 42: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

41

이러한 구문 입력으로 반환되는 메시지는 다음과 같다.

[ 그림 38 ] having 구문 입력으로 반환되는 에러 메시지

메시지를 살펴보면 select list 에 group by 절이 없어 반환된 에러메시지로

여기에는 ‘users.id’라는 정보를 포함하고 있다.

이는 users 테이블의 id 열을 뜻하는 것으로 users 테이블의 첫 번째 열이 id 라는

이름을 가지고 있는 것을 확인할 수 있다.

MS-SQL 상에서의 시스템 명령어 실행

MS-SQL 데이터베이스를 사용하는 경우를 예를 들어 보자. 만약 데이터베이스

접근 권한이 시스템 권한을 사용하고 있다면 MS-SQL에서 기본적으로 제공하고

있는 xp_cmdshell이라는 Stored Procedure를 이용하여 시스템 명령어를 실행할

수 있다

위와 같이 xp_cmdshell을 이용하여 MS-SQL 서버 시스템에 dir > hack.txt와

같은 명령어를 실행 시킬 수가 있으며, 해당 명령어는 시스템관리자 권한으로 실행

되므로 그 위험성이 매우 높다.

③ 조치 방안

일반적인 조치 방법

데이터베이스와 연동을 하는 스크립트의 모든 파라미터들을 점검하여 사용자의

입력 값이 SQL Injection을 발생시키지 않도록 수정한다.

사용자 입력이 SQL Injection을 발생시키지 않도록 사용자 입력 시 특수 문자

(' " / \ ; : Space -- +등)가 포함되어 있는지 검사하여 허용되지 않은 문자열

이나 문자가 포함된 경우에는 에러로 처리한다.

SQL 서버의 에러 메시지를 사용자에게 보여주지 않도록 설정한다. 공격자는

리턴 되는 에러 메시지에 대한 분석을 통하여 공격에 성공할 수 있는 SQL

SELECT usesrid, passwd FROM user_info WHERE userid=``;exec master..xp_cmdshell ‘dir > hack.txt`--` and passwd=`dddd`

Page 43: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

42

Injection 스트링을 알아낼 수 있다. 따라서 SQL 서버의 에러 메시지를 외부

에 제공하지 않도록 한다.

웹 애플리케이션이 사용하는 데이터베이스 사용자의 권한을 제한한다. 가능하

면 일반 사용자 권한으로는 모든 system stored procedures에 접근하지 못

하도록 하여 웹 애플리케이션의 SQL Injection 취약성을 이용하여 데이터베이

스 전체에 대한 제어권을 얻거나 데이터베이스를 운용 중인 서버에 대한 접근

이 불가능하도록 한다.

php.ini 설정 중 magic_quotes_gpc 값을 On으로 설정한다.

; Magic quotes ; ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On ; Off에서 On으로 변경한다. ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes

xp_cmdshell 확장 프로시저를 사용하지 않을 경우 비활성화 시킨다.

언어별 상세 조치 방법

사용자로부터 입력 받은 변수로 SQL 쿼리 구문을 생성하는 CGI는 입력 받은

변수를 체크하거나 변경하는 로직을 포함하고 있어야 한다.

입력 받은 변수와 데이터베이스 필드의 데이터형을 일치 시켜야 하고, 사용 중

인 SQL 구문을 변경시킬 수 있는 특수문자가 포함되어 있는지 체크해야 한다.

검색 부분과 같이 클라이언트로부터 생성된 SQL 구문을 받는 부분이 있다면

이를 제거해야 한다

PHP의 경우 addslashes()함수를 이용한다.

addslashes() 용도 : DB Query와 같이 인용된 부분앞에 역슬래쉬를 붙여서 반환한다. 해당 문

자에는 작은 따옴표, 큰 따옴표, 역슬래쉬, NULL이 있다. SQL Injection 공격을 위해서 사용한다. - 적용 가능한 PHP : PHP 3 이상

Page 44: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

43

언어 벌 안전한 프로그래밍 예

ASP

prodId = Request.QueryString("productId")

prodId = replace(prodId, "'", "''")' 특수문자 제거

prodId = replace(prodId, ";", "")

set conn = server.createObject("ADODB.Connection")

set rs = server.createObject("ADODB.Recordset")

query = "select prodName from products where id = " & prodId

conn.Open "Provider=SQLOLEDB; Data Source=(local);

Initial Catalog=productDB; User Id=dbid; Password="

rs.activeConnection = conn

rs.open query

If not rs.eof Then

response.write "제품명" & rs.fields("prodName").value

Else

response.write "제품이 없습니다"

End If

PHP

$query = sprintf("SELECT id,password,username FROM user_table WHERE

id='%s';",addslashes($id));

// id변수를 문자형으로 받고, id변수의 특수문자를 일반문자로 변환한다.

// @ 로 php 에러 메시지를 막는다.

$result = @OCIParse($conn, $query);

if (!@OCIExecute($result))

error("SQL 구문 에러");

exit;

@OCIFetchInto($result,&$rows);

... 중략 ...

JSP

String sql = "SELECT * FROM user_table" + " WHERE id = ?" + " AND

password = ?";

ResultSet rs = null;

PreparedStatement pstmt = null;

try

conn = DBManager.getConnection();

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, request.getParameter("id"));

pstmt.setString(2, request.getParameter("password"));

rs = pstmt.executeQuery();

[ 표 10 ] 언어별 구문삽입(SQL Injection) 조치 방법

Page 45: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

44

4) 파일다운로드(File Download) 취약성

① 웹 취약성 점검/분석 결과 내용

[ 그림 39 ] 파일다운로드(File Download) 취약성 분석 결과 (Nikto)

② 취약성 설명

홈페이지 상에서 파일을 다운받거나 업로드 시키는 경우 cgi, jsp, php, php3 등의

프로그램들을 사용한다.

만일 이러한 cgi, jsp, php, php3 등의 프로그램에서 입력되는 경로를 체크하지 않

는 경우, 임의의 문자(../.. 등)나 주요 파일명의 입력을 통해 웹 서버의 홈 디렉토리

를 벗어나서 임의의 위치에 있는 파일을 열람하거나 다운받는 것이 가능할 수 있다.

위협 사례

상대 경로를 이용한 파일 접근

상대경로란 ./, ../와 같이 논리적 단위로 이루어진 디렉토리 경로를 말한다.

파일의 이름이나 경로를 다루는 웹 애플리케이션에서 이러한 논리적인 경로를 적

절히 처리하지 못하여 웹 애플리케이션이 설치된 디렉토리를 상회하여 시스템 파일

이나 지정하지 않은 다른 파일에 접근할 수 있다.

위와 같이 파일을 다운로드 받아야 하는 URL의 경우 공격자는 filename 변수

를 ../../../../../../../etc/passwd와 같이 상대경로를 이용, 치환해서 시스템 내부의

파일을 불법으로 획득할 수 있다.

http://www.target.com/zzbbs/bbs/download.php?filename=../../../../../etc/passwd /etc/passwd 위치 및 파일 이름

http://www.target.com/zzbbs/bbs/download.php?filename=20070412061901.jpg 다운로드 파일 위치 및 파일 이름

Page 46: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

45

[ 그림 40 ] 상대경로를 이용한 시스템 /etc/passwd다운로드

파일을 다루는 웹 애플리케이션은 특히 파일의 이름을 변수로 주거나, 이에 대한

입력 값을 사용자로부터 입력받을 때 혹은 관련 웹 애플리케이션으로부터 파일 이름

변수를 넘겨받을 때 해당 변수에 상대경로가 포함되어 있는지 소스레벨에서 검사를

해야 한다.

이를테면 파일의 이름에 ../../ 혹은 ..\..\ , %2e%2e%2f%2e%2e%2f※등의 상

대경로가 포함되어 있을 때에는 실행을 중단하여 주요 파일로의 불법적인 접근을 차

단해야 한다.

③ 조치 방안

서버 조치 방법

파일 다운로드의 취약성은 주로 파일의 이름을 조작하는 데서 비롯한다. 다운

로드 파일의 이름을 데이터베이스에 저장하고 다운로드 수행 시 요청 파일 이

름과 비교하여 적절한지 확인하여 사용자가 조작할 수 있는 변수를 제거하는

것이 바람직하다. 또한 다운로드 위치는 지정된 데이터 저장소를 고정하여 사

용하는 것이 바람직하다.

프로그램 내에서 파일을 다운받을 수 있는 디렉토리를 특정 디렉토리로 한정하

고 이 외의 다른 디렉토리에서는 파일을 다운받을 수 없도록 프로그램을 수정

※%2e%2e%2f : “../”의 Hex값

Page 47: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

46

한다.

PHP를 사용하는 경우 php.ini 에서 magic_quotes_gpc 를 On으로 설정하

여 ./, .\ 와 같은 역 슬래시 문자에 대해 대응도 가능하다.

언어별 상세 조치 방법

언어 벌 안전한 프로그래밍 예

ASP

<%

file = Request.Form ("file")'파일 이름

Response.ContentType = "application/unknown"'ContentType 선언

Response.AddHeader "Content-Disposition","attachment; filename=" & file

Set objStream = Server.CreateObject("ADODB.Stream")'Stream 이용

strFile = Server.MapPath("./upfiles/") & "\" & file '서버 절대경로

strFname=Mid(Fname,InstrRev(file,"\")+1) '파일 이름 추출, ..\ 등의 하위 경로

탐색은 제거 됨

strFPath = Server.MapPath("./upfiles/") & "\" & strFname '웹 서버의 파일 다운로

드 절대 경로

If strFile = strFPath Then'사용자가 다운 받는 파일과 웹 서버의 파일 다운로드 경로

가 맞는지 비교

objStream.Open

objStream.Type = 1

objStream.LoadFromFile strFile

download = objStream.Read

Response.BinaryWrite download

End If

Set objstream = nothing'객체 초기화

%>

PHP

if (preg_match("/[^a-z0-9_-]/i",$up_dir))

print "디렉토리에 특수문자 체크";

exit;

if (preg_match("/[^\xA1-\xFEa-z0-9._-]|\.\./i",urldecode($dn_file_name)))

print "파일이름에 특수문자 체크";

exit;

$dn_path = "/var/www/data/$up_dir/$dn_file_name";

if (!file_exists($dn_path))

print "파일이 존재여부 체크";

exit;

//파일 전송 루틴

header("Content-Type: doesn/matter");

header("Content-Length: ".filesize("$dn_path"));

header("Content-Disposition: filename=".$dn_file_name]);

header("Content-Transfer-Encoding: binary\r\n");

header("Pragma: no-cache");

header("Expires: 0");

Page 48: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

47

언어 벌 안전한 프로그래밍 예

JSP

String UPLOAD_PATH= "/var/www/upload/";

String filename= response.getParameter("filename");

String filepathname = UPLOAD_PATH + filename;

if(filename.equalsIgnoreCase("..") || filename.equalsIgnoreCase("/"))

// 파일 이름 체크

return 0;

// 파일 전송 루틴

response.setContentType("application/unknown; charset=euc-kr");

response.setHeader("Content-Disposition","attachment;filename=" + filename

+ ";");

response.setHeader("Content-Transfer-Encoding:" , "base64");

try

BufferedInputStream in = new BufferedInputStream(new

FileInputStream(filepathname));

.........

catch(Exception e)

// 에러 체크 [파일 존재 유무등]

[ 표 11 ] 언어별 파일다운로드(FileDownload) 조치 방법

Page 49: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

48

5) 디렉토리 인덱싱 (Directory Indexing)

① 웹 취약성 점검/분석 결과 내용

[ 그림 41 ] 디렉토리 인덱싱 (Directory Indexing) 취약성 분석 결과 (Nikto)

② 취약성 설명

웹 서버에는 현재 브라우징 하는 디렉토리의 모든 파일을 사용자에게 보여 줄 수

있는 디렉토리 인덱스 기능이 대부분 존재한다.

그러나 이런 설정이 활성화되어 있는 경우 공격자가 웹 애플리케이션의 구조를 파

악할 수 있는 기회를 제공해 주며, 민감한 정보가 포함된 설정 파일을 조회할 수 있

게 된다.

위협 사례

웹 브라우저에서 사용자가 URL을 입력했을 경우, 아파치 웹 서버는 3가지 경우로

응답한다.

- 정상적인 웹 페이지

- 디렉토리 내용 리스트

- 에러 메시지

웹 서버에서 index.php와 같이 파징을 시켜주는 정상적인 웹 페이지가 존재 하지

않을 때 디렉토리 리스트 단계로 이어지고 이는 공격자에게 해당 디렉토리의 파일

정보를 제공하여 시스템에 대한 구조 정보들을 노출 시킨다.

Page 50: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

49

[ 그림 42 ] 디렉토리 인덱싱 취약성

위와 같이 웹 서버에 존재하는 파일 정보를 획득 할 수 있으며, 이중

phpinfo.php 파일과 같이 웹 서버의 설정 정보가 있는 파일 정보가 노출된다.

이 파일을 확인 함으로서 아래 그림과 같이 웹 서버의 php 환경 설정 정보가 노출

된다.

[ 그림 43 ] phpinfo.php

Page 51: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

50

③ 조치 방안

서버 조치 방법

운영하는 웹 서버 별로 설정하는 방법들이 각각 존재 하며 대표적으로 Apache 웹

서버일 경우에는 디렉토리 내의 모든 파일들이 리스팅 되는 것을 방지하기 위해서는

아래와 같이 httpd.conf 파일에서 DocumentRoot 항목을 수정해야 한다

임의의 index.html 파일의 생성

아파치 설정 파일 httpd.conf의 DirectoryIndex 지시자 부분에서

DirectoryIndex index.html을 우선 순위로 설정해 놓고, 각 해당 디렉토리에

index.html 페이지를 만들면 디렉토리나 파일들이 리스팅 되지 않고 해당 디렉토

리의 index.html파일을 보여준다.

오류페이지 활성화

초기 파일(index.html)이 존재 하지 않을 경우, 오류 페이지를 띄우기 위해서는

DirectoryIndex 지시자 부분에서 Indexes, FollwSymLinks 옵션을 제거하고

IncludesNoExec 옵션을 설정한다.

존재하지 않는 파일 설정

각 디렉토리마다 자동으로 보여줄 파일이 필요없을 경우, 임의의 존재하지 않는

파일을 초기파일로 설정한다.

Page 52: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

51

6) WebDAV 취약성

① 웹 취약성 점검/분석 결과 내용

[ 그림 44 ] WebDAV 취약성 분석 결과 (Nessus)

[ 그림 45 ] WebDAV 취약성 분석 결과 (Nikto)

② 취약성 설명

윈도우 기반 서버에서 기본으로 설치되는 원격관리 기능(WebDAV)이 활성화 되어

있고, WebDAV 라이버러리 파일 속성 및 홈페이지 디렉토리에 쓰기 권한이 허용되어

Page 53: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

52

있을 경우 공격자로부터 WebDAV 도구(Front Page)를 활용하여 원격지에서 홈 디

렉토리의 임의의 파일을 업로드 할 수 있다.

위협 사례

MS-Office의 FrontPage를 이용하여 WebDAV 취약성이 존재하는 웹 서버에 접속

하여 아래 그림과 같이 test.htm 파일을 업로드 한다.

[ 그림 46 ] 디렉토리 인덱싱

아래 그림과 같이 업로드된 test.htm 파일을 확인 할수 있으며, 만일 이

test.htm파일이 아닌 WebShell을 업로드 하면, 웹 서버의 임의의 명령어를 실행

가능하다.

[ 그림 47 ] 업로드된 test.htm

Page 54: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

53

③ 조치 방안

서버 조치 방법

WebDAV는 권한설정을 제대로 해 놓지 않았을 경우에는 익명으로 접근이 가능하

고 접근하여 웹서버내의 파일을 손상시키거나 악성코드를 업로드한 후 실행할 수도

있기 때문에 권한을 확인하여 설정을 해주어야 한다.

WebDAV 관련 라이브러리 파일의 보안 권한 확인.

WebDAV의 서비스를 지원하는 httpext.dll이라는 파일이 존재하는데, 이 파일의

위치는 “\winnt\system32\inetsrv\httpext.dll” 또는 “\windows\system32

\inetsrv\httpext.dll” 에 존재한다. 이 파일의 등록정보 확인 한 후에 등록정보

의 보안탭에서 Everyone을 제거하여 준다.

[ 그림 48 ] httpext.dll 보안 설정

홈 디렉토리 쓰기 권한 제거

제어판 → 관리도구 → 인터넷 서비스 관리자(혹은 인터넷 정보 서비스)메뉴의

기본 웹 사이트의 등록정보를 확인 하면, 홈 디렉터리 탭의 ‘로컬경로’ 항목의

‘쓰기’ 체크 부분을 해제 해야 한다.

Page 55: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

54

[ 그림 49 ] 웹 홈 디렉토리 보안 설정

Page 56: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

55

7) 불 필요한 HTTP 메소드(Method)※

① 웹 취약성 점검/분석 결과 내용

[ 그림 50 ] 불 필요한 HTTP 메소드(Method)허용 취약성 분석 결과 (Nikto)

② 취약성 설명

불필요한 HTTP 메소드(Method)허용은 이들 Method(PUT, DELETE등)을 이용하

여 대상 웹 서버에 웹 페이지를 업로드 하거나, 삭제하는 용도로 사용된다.

이 취약성을 통해 쉽게 웹 페이지 변조가 가능하며 웹 쉘을 이용하여 임의의 명령

을 실행 시킬 수가 있으며, 소스 유출로 인해 중요 정보가 노출 될 수 있다.

위협 사례

아래와 같이 명령어를 입력하여 웹 서버에 허용되어 있는 HTTP 메소드(Method)를

확인 하였다.

※ 메소드(Method) : 브라우저가 서버로 데이터를 전달하는 방법 (종류: GET, POST, HEAD, PUT, DELETE, LINK, UNLINK의 7가지)

Page 57: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

56

[ 표 12 ] 허용된 HTTP Method 확인

위와 같이 PUT, DELETE등의 메소드가 허용된 것을 확인 하고, 아래 그림과 같이

uploade.exe 공격 툴을 이용하여 PUT 메소드를 이용, put.asp 파일을 업로드를

한다.

[ 그림 51 ] PUT 메소드를 이용하여 Put.asp 업로드

그 결과 아래 그림과 같이 put.asp 파일이 업로드 된 것을 확인 할 수 있으며,

만일 이 put.asp 파일이 아닌 WebShell을 업로드 하면, 웹 서버의 임의의

명령어를 실행 가능하다.

.

[ 그림 52 ] 업로드된 put.asp

C:\Documents and Settings\admin>telnet 192.168.19.14 80 OPTIONS * HTTP/1.0 HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Tue, 17 Apr 2007 04:38:00 GMT Content-Length: 0 Accept-Ranges: bytes DASL: <DAV:sql> DAV: 1, 2 Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Cache-Control: private

Page 58: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

57

③ 조치 방안

서버 조치 방법

HTTP 메소드중 필요한 메소드(OPTIONS, TRACE, GET, POST, HEAD)외에는 제

거를 해야된다.

Apache에서의 불 필요한 메소드 제거

Web 서버의 DocumentRoot로 사용되는 디렉토리에 일반 사용자에 대한 접근

권한을 제거 한다. Httpd.conf 설정 파일에서 아래와 같은 내용을 추가 한다.

... <Directory "/home/*/public_html"> <Limit POST PUT DELETE> Require valid-user </Limit> </Directory> ...

IIS에서의 불 필요한 메소드 제거

아래 그림과 같이 웹 홈 디렉토리의 쓰기 권한을 제거 하고, PUT, DELETE 등의

불필요한 메소드를 제거 하기 위해서는 원격지에서 웹 서버의 컨텐츠를 추가 하고

관리 하는 WebDAV를 중지 시켜야 한다.

실행 regedit 를 이용하여 아래 경로의 레지스트리 값을 새로 추가한 후 시스

템을 재 부팅한다.

레지스트리 경로 : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControSet

\Services\W3SVC\Parameter 레지스티리 값 : DisableWebDAV=1(DWORD)(대소문자 주의)

[ 그림 53 ] 레지스트리 추가

Page 59: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

58

8) 비 참조성 파일 존재

① 웹 취약성 점검/분석 결과 내용

[ 그림 54 ] 비 참조성 파일 점검 결과 (Nikto)

② 취약성 설명

웹 서버 설치 시 자동적으로 설치되는 파일들이 존재하는데 이러한 파일들은 웹 서

버의 정보나 서버 설정 정보들을 담겨져 있으며, 웹 어플리케이션 소스 파일 및 백업

파일(.bak, .sql)등은 웹 서버의 중요 정보를 담고 있어서, 해당 파일의 존재 시 공격

자에게 많은 정보를 제공한다.

특히 아래 표와 같이 Apache 및 IIS 웹 서버가 설치되면서 기본적인 샘플 페이지

들이 많이 존재하고 상용 웹 서버의 경우 매뉴얼 페이지등의 파일이 존재 함으로 웹

서버의 정보가 노출되고 있다.

위협 사례

웹 어플리케이션의 백업파일(.bak)가 존재 할 경우 웹 소스가 실행되는 것이

아니라 웹 브라우저로 소스를 뿌려줌으로 아래 그림과 같이 소스코드가 그대로

노출이 된다.

이 정보를 이용하여 웹 서버의 구조를 파악할 수 있으며, 2차 침해공격에 있어

많은 정보를 제공해 준다.

Page 60: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

59

[ 그림 55 ] 백업파일(.bak) 노출

또한 DB백업파일(.sql)을 웹 디렉토리에 저장하여 보관하는 경우 아래 그림과

같이 DB내용을 확인 할 수가 있다. 아래는 MySQL 백업 파일이 존재하여

DB내용이 그대로 노출되고 있으며 이 파일에는 관리자 계정 및 패스워드가

저장되어 있다.

[ 그림 56 ] DB백업 파일(.sql) 노출

③ 조치 방안

백업 파일 관리

웹 어플리케이션 소스 백업파일 및 DB백업파일은 웹 서버에 저장해서는 안되며,

필요 시에는 웹 디렉토리가 아닌 별도의 시스템 디렉토리에 저장하여 관리 해야 한다.

Page 61: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

60

웹 서버 샘플 페이지 삭제

웹 서버 설치 시 존재하는 샘플페이지를 제거 한다.

구분 Apache 웹 서버 IIS 웹 서버

/index.html.de /index.html.dk /index.html.ee /index.html.el /index.html.en /index.html.es /index.html.fr /index.html.he.iso8859-8 /index.html.it /index.html.nl /index.html.no /index.html.pt /index.html.pt-br /index.html.ru.cp-1251 /index.html.ru.cp866 /index.html.ru.iso-ru /index.html.ru.koi8-r /index.html.ru.utf8 /index.html.se /index.html.tw /index.html.tw.Big5 /manual/images/

c:\inetpub\iissamples\ 디렉토

리내에 존재 하는 모든 파일 c:\winnt\help\iishelp 디렉토리

내에 존재 하는 모든 파일 c:\program files\common files\system\msadc 디렉토리내

에 존재 하는 모든 파일

[ 표 13 ] 웹 서버 샘플 파일

웹 서버 설정(Apache)

웹 서버 설정 파일인 Httpd.conf 파일에서 아래와 같은 내용을 추가 한다.

... <Files ~"\.bak$"> Order allow,deny Deny from all </Files> ...

Page 62: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

61

9) 취약한 공개용 보드(제로보드)

① 웹 취약성 점검/분석 결과 내용

[ 그림 57 ] 제로보드 취약성 분석 결과 (Nessus)

② 취약성 설명

제로보드는 사용의 편리성과 공개 프로그램으로 인해 가장 많이 사용되고 있는 게

시판 프로그램 중의 하나이다.

국내 웹 호스팅 업체, 해외 동포 사이트, 중국 사용자 등 다수의 사이트에서 설치,

운용 중이다. 중국의 경우 한국 IT 기술을 모방하는 경향이 있어, 중국 제로보드 사

용자 포럼 (http://czeo.com/) 까지 구성될 정도로 폭넓게 사용 중이다.

발표 시기 취약성 세부 내용

2004년

12월 20

파일 노출 취약성

(다운로드 취약성)

시스템 내부 중요 파일들의 내부 정보를 노

Page 63: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

62

발표 시기 취약성 세부 내용

외부 소스 실행 취약성

(원격 파일 삽입 취약성)

include 항목의 변수를 외부에서 설정할 수

있어 원격의 파일을 참조시켜 시스템 정보

를 파악하고 웹 서비스 권한을 획득 할 수

있음

2005년

1월 13일 XSS 취약성

서버 설정에 따라서 $dir, $_zb_path 변수

를 이용, 외부에서 임의의 스크립트를 실행

하는 문제로써 preg_replace에서 정규 표

현식을 이용할때 quotes를 하지 않아 발생

[ 표 14 ] 최근 제로보드 취약성

위협 사례

[ 그림 58 ] 제로보드 게시판 운영 사이트

위 그림과 같이 제로보드를 이용하여 게시판이 운영되고 있으며, 소스코드 보기를

통하여 사용중인 제로보드 버전을 확인할 수 있다.

[ 그림 59 ] 제로보드 버전 확인

Page 64: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

63

버전 확인 결과 제로보드 4.1 pl2를 사용하고 있으며, 이 버전이 가지고 있는

취약성 외부 소스코드 실행 취약성을 이용하여 WebShell 실행 시킬 수 있다.

[ 그림 60 ] 원격 코드(WegShell) 실행

③ 조치 방안

기존 제로보드 프로그램을 일부 수정하여 사용하고 있는 경우

새로운 패치를 모두 설치할 경우, 운영중인 게시판의 동작에 문제가 있을 수 있으

므로 패치를 설치하지 않고, 현재 사용 중인 버전을 확인 후, 각 패치 버전 별 수정

내용을 확인하여 변경이 필요한 개별 파일의 소스를 수정하거나 부분 패치 파일을 설

치한다.

제로보드 프로그램을 수정 없이 그대로 사용 중인 경우

가장 최신버전의 패치를 설치한다

제로보드 패치 다운로드

http://www.nzeo.com/bbs/zboard.php?id=cgi_download2

Page 65: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

64

6 맺음말

최근 빈번하게 발생하는 웹 어플리케이션 취약성 공격에 대해 본 가이드를 활용하여 사

전예방을 수행했다고 해서 기관에서 기 구축 운영 중인 홈페이지 서비스가 안전하다고 보

장할 수는 없습니다.

자동화된 점검/분석 도구(Nikto, Nessus 등)를 활용하여 발견되는 웹 어플리케이션취

약성은 정형화된 공격기술(계정, 패스워드 추출 등)로 한정되어 있으며, 접근제어, 세션관

리 등 응용공격기술에 대해서는 점검/분석이 되지 않는 실정입니다. 또한, 공개된 웹 어

플리케이션 점검/분석 도구는 상용제품과 비교하여 협소적인 범위를 지원하고 최신 공격

기술에 대한 대응이 미흡한 실정입니다. 하지만 자동화된 점검/분석 도구로도 정형화된

웹 취약성 공격(SQL-Injection 등)에 대해서 효과적으로 대응이 가능하여 사전예방을 통

한 피해발생을 최소화 할 수 있습니다.

정보보호를 위한 가장 좋은 방법은 성실하고 꾸준한 예방활동이라 사료됩니다.

바쁜 일상 속에서 항상 고생하시는 각급 기관의 정보보호 실무 담당자들은 본 가이드를

충분히 활용하여 각급 기관의 현 보안 수준을 상세히 파악하고 문제점을 현실적으로 개선하

여 보다 높은 수준의 안정적인 홈페이지 서비스를 지향해야 할 것입니다.

Page 66: 공개 소프트웨어를 이용한 웹 취약성 분석 가이드 · 2018. 10. 22. · 1 발 간 사 최근 인터넷을 비롯한 정보 통신 인프라의 발전은 정보혁명을

65

본 가이드 내용의 무단전재를 금하며, 가공 및 인용할 때에는

반드시 과학기술정보보호센터『공개 소프트웨어를 이용한 웹 취

약성 분석 가이드』라고 밝혀주시기 바랍니다.