106
CONTENTS Ⅰ. 개요 ··············································································1 1. 공개도구 개요 ························································································4 2. 활용 방안 ································································································6 3. 점검시 주의사항 ····················································································6 Ⅱ. Nmap ·······································································11 1. Nmap 소개 ·························································································11 2. Nmap 설치 ·························································································13 3. Nmap 점검 및 결과 ·········································································17 Ⅲ. Nikto2 ·····································································27 1. Nikto2 소개 ······················································································27 2. Nikto2 설치 ······················································································29 3. Nikto2 점검 및 결과 ······································································34 Ⅳ. OWASP-ZAP ························································47 1. OWASP-ZAP 소개 ··········································································47 2. OWASP-ZAP 설치 ··········································································49 3. OWASP-ZAP 점검 ··········································································60 4. OWASP-ZAP 점검 결과 ································································67

CONTENTS 목 차 · 2018. 10. 16. · 백트랙(BackTrack) 리눅스의 후신인 칼리(Kali) 리눅스는 매우 방대 한 취약점 점검 및 해킹 관련 도구를 제공한다

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • CONTENTS Ⅰ. 개요 ·············································································· 1

    1. 공개도구 개요 ························································································ 4 2. 활용 방안 ································································································ 6

    3. 점검시 주의사항 ···················································································· 6

    Ⅱ. Nmap ······································································· 11

    1. Nmap 소개 ························································································· 11

    2. Nmap 설치 ························································································· 13

    3. Nmap 점검 및 결과 ········································································· 17

    Ⅲ. Nikto2 ····································································· 27

    1. Nikto2 소개 ······················································································ 27

    2. Nikto2 설치 ······················································································ 29

    3. Nikto2 점검 및 결과 ······································································ 34

    Ⅳ. OWASP-ZAP ························································ 47

    1. OWASP-ZAP 소개 ·········································································· 47

    2. OWASP-ZAP 설치 ·········································································· 49

    3. OWASP-ZAP 점검 ·········································································· 60

    4. OWASP-ZAP 점검 결과 ································································ 67

    목 차

  • 1

    개 요

  • 1. 개 요

    3

    Ⅰ. 개요

    Acunetix사에 의하면 70% 이상의 웹 서버에서 신용카드정보, 개인정

    보 등과 같은 민감한 정보를 유출시킬 수 있는 웹 취약점이 발견된다고 한

    다. 또한 최근 악성코드 유포 및 경유지 악용 등의 목적으로 홈페이지 운용

    서버를 대상으로 하는 침해사고가 급격하게 증가하고 있다.

    웹은 그 특성상 TCP/80 포트 및 TCP/443 포트를 통하여 방화벽 등을

    거치지 않고 사용자-서버 간 통신을 하기 때문에 악의적인 공격자에 의한

    첫번째 공격대상이 되기 쉽다. 이러한 공격을 방어하기 위하여 각 기관에서

    는 침입탐지시스템(IDS), 침입방지시스템(IPS) 및 웹방화벽(WAF)과 같은

    정보보호시스템을 도입하는 것이 일반적이다. 그러나 정보보호시스템들이

    모든 경우의 취약점에 대한 침해 예방을 보장하는 것이 아니므로 웹 어플리

    케이션의 원천적인 취약점을 제거하는 것이 가장 좋은 대응 방법이다.

    이에 과학기술사이버안전센터(S&T-SEC)에서는 대상기간의 정보보호 담

    당자가 자체적으로 홈페이지 취약점 점검을 수행할 수 있도록 『공개도구를

    이용한 홈페이지 취약점 점검 안내서』를 개발하였다.

    본 안내서에는 과학기술사이버안전센터(S&T-SEC)에서 실제 취약점 점

    검 시 사용하고 있는 공개용 웹 취약점 점검도구인 웹서버의 네트워크 포트

    점검을 위한 Nmap, 웹서버의 서비스 설정의 취약점을 점검할 수 있는

    Nikto2, 종합적인 홈페이지 취약점 점검을 위한 OWASP ZAP에 대한 활용

    방법을 설명하고 있다.

    본 안내서에서 다루고 있는 공개용 취약점 점검도구를 이용하여 홈페이지

    를 대상으로 상시적인 취약점 점검이 가능해짐에 따라 대상기관의 침해사고

    예방에 기여할 것으로 예상된다.

  • 4

    1 공개 도구 개요

    ■ Kali Linux

    백트랙(BackTrack) 리눅스의 후신인 칼리(Kali) 리눅스는 매우 방대

    한 취약점 점검 및 해킹 관련 도구를 제공한다. 2, 3, 4장에서 설명할

    Nmap, Nikto, OWASP-ZAP을 모두 포함하고 있다. 칼리 리눅스에

    대해서는 인터넷상에서 다수의 문서를 접할 수 있으므로 본 안내서에

    서는 생략한다. 윈도우 운영체제의 경우 VMware사의 vmplayer를 이

    용하면 쉽게 설치할 수 있다. VM으로 설치하는 경우 CPU 코어 2개

    이상, 3GB 이상의 메모리를 할당할 것을 권장한다.

    - 홈페이지: https://www.kali.org

    ■ Nmap 네트워크 포트 스캐너

    Nmap(Network Mapper)은 공개용 네트워크 포트 스캐너로 대상 서

    버에서 운영 중인 네트워크 관련 서비스를 점검할 수 있다. 홈페이지

    취약점 점검 시 가장 기본적으로 실행하는 도구이다.

    - 홈페이지: http://nmap.org

    ■ Nikto2 웹 서버 스캐너

    Nikto2는 웹 서버 스캐너로 기본적인 웹 서버 설정의 문제점, 취약한

    파일 존재 여부, 서버 소프트웨어의 설치시 취약점 잔존 여부 등을 점

    검해주는 단순하지만 강력한 도구이다.

    - https://cirt.net/Nikto2

  • 1. 개 요

    5

    ■ OWASP-ZAP 취약점 점검 도구

    OWASP에서 제공하는 Zed Attack Proxy(ZAP)은 통합 모의침투 도

    구이며 자동 웹 취약점 점검 도구를 제공한다. 상용 웹 취약점 스캐너

    에 비해서 정확도는 일부 떨어지지만 빠른 속도와 상당한 수준의 성능

    으로 볼 때 상용스캐너를 보완할 수 있는 좋은 취약점 점검 도구로 활

    용할 수 있다. 또한 ZAP은 취약점 점검도구 뿐만 아니라 프록시 기능

    등을 제공하여 수동점검 시에도 좋은 보조도구로 활용할 수 있다.

    - 홈페이지: https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

  • 6

    2 활용방안

    공개 웹 취약점 점검 도구를 이용하여 각 기관의 정보시스템 담당자 스

    스로 홈페이지 서비스를 운영 중인 웹 서버의 기본적인 웹 어플리케이션

    취약점을 조사할 수 있을 뿐만 아니라 보안 담당자가 홈페이지 침해사고

    점검 업무 수행 시 활용이 가능하다.

    본 가이드의 구성은 다음과 같다. 2장에서는 Nmap 사용 방법을 설명하고

    3장에서는 Nikto2를 이용한 점검 및 분석 방법을 설명한다. 4장에서는

    OWASP-ZAP 취약점 점검 도구에 대해서 설명한다.

    3 점검시 주의사항

    본 안내서에서 제공하는 도구는 자신이 직접 관리하는 서버를 대상으로

    만 실행하여야 한다. Nmap의 경우 다수의 네트워크 트래픽을 유발하며,

    Nikto2와 OWASP-ZAP의 경우 악성 패턴을 대량으로 포함하고 있으므로

    DDoS 장비, IPS/IDS, 웹방화벽(WAF) 등에 의해서 차단될 가능성이 매우

    높다. 과학기술사이버안전센터에 보고하지 않은 상태에서 점검을 수행할 경

    우 해킹시도로 탐지될 가능성이 있으므로 주의하여야 한다.

    웹 어플리케이션에 존재하는 근본적인 취약점을 찾아내기 위해서는 점검

    자의 장비와 웹 서버 사이에 정보보호시스템이 위치하지 않는 것이 좋다.

    즉 점검 수행 시에는 점검자의 IP에 대하여 방화벽, 웹 방화벽, IPS/IDS,

  • 1. 개 요

    7

    DDoS 장비에 대해서 미리 예외처리를 하여 웹 취약점 점검을 수행할 것을

    권장한다.

    본 안내서에서 사용한 "www.test.re.kr"은 편의상 만든 서버명이며 실

    제 서비스 중인 서버명이므로 Nmap, Nikto, OWASP 등의 도구에 대한 시

    험대상으로 실행하지 않아야 한다. 공개 점검 도구를 시험할 경우에는 가상

    머신을 이용하여 별도의 서버를 구축할 것을 권고한다.

  • 2

    Nmap(네트워크 포트 스캐너)

  • 2. Nmap

    11

    Ⅱ. Nmap 스캐너

    1 Nmap 소개

    Nmap은 기본적으로 포트 스캔 도구로 널리 알려져 있으며, 아주 유용한

    시스템보안 도구로써 기본적인 시스템 취약점을 알려준다. 서버를 운영할

    때 관리자 스스로도 해당 서버의 개방된 포트가 어떤 것인지 또 어떤 서버

    비스가 제공 중인지 파악하기 힘든 경우가 발생하기 마련이며 이러한 경우

    Nmap을 이용하면 열려있는 포트와 해당 서비스를 일목요연하게 파악함으

    로써 관리자에게 도움을 줄 수 있다.

    이를 공격자 입장에서 생각하면 대상 서버에서 운영 중인 서비스를 파악

    함으로써 다양한 침투경로를 파악하는 데 도움을 주는 강격한 해킹도구로

    사용할 수 있다는 의미도 된다.

  • 12

    홈페이지 취약점 점검 시 점검자는 기본적으로 Nmap을 실행하여 대상

    서버에서 운영 중인 포트와 서비스를 파악한다. 이는 공격자의 입장에서 점

    검을 수행하는 것으로 대상 서버에 침투할 수 있는 모든 경로를 확보하기

    위한 사전 준비 작업이라고 할 수 있다.

    기관의 전산관리자는 Nmap을 이용하여 주기적으로 서버 군에 대한 포

    트 스캔을 수행함으로써 비정상적으로 개방된 포트 탐지 등을 통해서 침해

    여부를 일부나마 인지하는 데 도움이 되기도 한다.

  • 2. Nmap

    13

    2 Nmap 설치

    Nmap은 Windows, Linux, UNIX, Mac OSX 등 다양한 OS에서 사용할

    수 있도록 소스코드와 실행파일이 배포되고 있다. 여기에서는 가장 많이 사

    용되공 있는 Windows와 Linux용 실행파일 설치 방법을 소개한다.

    Windows용 Nmap은 Windows NT, 2000, XP, Vista, Windows 7,

    Windows Server 2003/2008 등에서 실행된다. Windows용 Nmap은 텍

    스트 기반의 Nmap과 GUI 기반의 Zenmap이 배포되고 있는데 여기에서는

    텍스트 기반의 Nmap의 설치 및 활용에 대해서 소개한다.

  • 14

    Nmap은 다운로드 홈페이지에서 압축파일이 다운로드 가능하며 압축파

    일 이름은“namp-.zip”으로 되어있다. 2014년 12월 현재 최

    신 버전은 다음과 같이 다운로드 된다.

    ‣ http://nmap.org/dist/nmap-6.47-win32.zip

    다운로드 한 Nmap 압축파일을 설치하고자 하는 위치에 압축 해제한다.

    압축을 해제하면 namp- 이름의 디렉토리가 생성된다.

    Windows에서 Nmap을 실행하기 위해서는“WinPcap”패캣 캡쳐 라이

    브러리가 설치되어 있어야 한다. 설치되어 있지 않은 상황에서 Nmap을 실

    행시키면 다음과 같은 오류가 발생한다.

  • 2. Nmap

    15

    C:\nmap-6.47>nmap�-v�-A�127.0.0.1

    Starting�Nmap�6.47�(�http://nmap.org)at2014-12-16�15:39대한민국 표준시

    WARNING:�Could�not�import�all�necessary�WinPcap�functions.��You�may�need�to�upgr

    ade�to�version�3.1�or�higher�from�http://www.winpcap.org.�Resortingtoconnect(

    )�mode�--�Nmap�may�not�function�completely

    NSE:�Loaded�118�scripts�for�scanning.

    NSE:�Script�Pre-scanning.

    Initiating�Ping�Scan�at�15:39

    Only�ethernet�devices�can�be�used�for�raw�scans�on�Windows.�Use�the�--unprivileged�

    option�for�this�scan.

    QUITTING!

    C:\nmap-6.47>

    Winpcap 프로그램은 다운로드한 압축파일에 함께 위치하고 있으며 파

    일 이름은 winpcap-nmap-.exe로 되어있다. 최신 파일을 설치

    하고자 할때는 winpcap 홈페이지(http://www.winpcap.org)에서 다운로드

    받아 설치할 수 있다.

    Windows 환경에서 Nmap을 원활히 사용하기 위해서는 환경변수 Path

    에 Nmap의 설치 위치를 포함시켜는 것이 좋다. 다음 그림과 같이 시스템

    변수 편집에서 Path 변수값에 "C\nmap-6.47"을 포함시킨다.

  • 16

    Linux용 Nmap은 RPM 패키지로 다운로드 홈페이지(http://nmap.org/

    download.html)에서 배포되고 있다. 설치하고자 하는 버전에 따라서 다운

    로드 위치를 지정하여 다음과 같이 rpm으로 설치한다.

    #�rpm�-vhU�http://nmap.org/dist/nmap-6.47-1.i386.rpm

    Retrieving�http://nmap.org/dist/nmap-6.47-1.i386.rpm

    Preparing...����������������###########################################�[100%]

    ���1:nmap�������������������###########################################�[100%]

    각 OS별로 배포되고 있는 Nmap 설치 방법을 자세히 알고 싶으면

    Nmap 설치 매뉴얼“http://nmap.org/book/install.html”을 참고한다.

  • 2. Nmap

    17

    3 Nmap 점검 및 결과

    일반적으로 웹 취약점 점검에서는 단일 서버를 대상으로 하기 때문에

    대상 서버에 대해서 다음과 같이 간단하게 포트스캔을 수행한다.

    #�nmap�-A�-v��-o�-nmap.txt

    ��스캔옵션

    ���-A�:�OS�탐지,�서비스 버전 탐지,�traceroute�등 상세한 스캔 옵션

    ���-v�:�스캔 중 상세한 정보를 화면에 출력하는 옵션

    취약점 점검에서는 nmap의 인자로 -A 옵션만을 주로 사용하며, -o

    옵션을 통하여 그 결과를 파일로 저장할 수 있다. 아래는 그 예이다.

  • 18

    #�Nmap�6.47�scan�initiated�Sun�Dec�21�16:27:04�2014�as:�nmap�-A�-v�-o�

    www.test.re.kr-nmap.txt�www.test.re.kr

    Nmap�scan�report�for�www.test.re.kr�(192.168.58.167)

    Host�is�up�(0.00040s�latency).

    Not�shown:�991�closed�ports

    PORT�����STATE�SERVICE�����VERSION

    22/tcp���open��ssh���������OpenSSH�5.3p1�Debian�3ubuntu4�(Ubuntu�Linux;�protocol�2.0)

    |�ssh-hostkey:�

    |���1024�ea:83:1e:45:5a:a6:8c:43:1c:3c:e3:18:dd:fc:88:a5�(DSA)

    |_��2048�3a:94:d8:3f:e0:a2:7a:b8:c3:94:d7:5e:00:55:0c:a7�(RSA)

    80/tcp���open��http��������Apache�httpd�2.2.14�((Ubuntu)�mod_mono/2.4.3�

    PHP/5.3.2-1ubuntu4.5�with�Suhosin-Patch�proxy_html/3.0.1�mod_python/3.3.1�Python/2.6.5�

    mod_ssl/2.2.14�OpenSSL/...)

    |_http-favicon:�Unknown�favicon�MD5:�1F8C0B08FB6B556A6587517A8D5F290B

    |�http-methods:�GET�HEAD�POST�OPTIONS�TRACE

    |�Potentially�risky�methods:�TRACE

    |_See�http://nmap.org/nsedoc/scripts/http-methods.html

    |_http-title:�owaspbwa�OWASP�Broken�Web�Applications

    139/tcp��open��netbios-ssn�Samba�smbd�3.X�(workgroup:�WORKGROUP)

    143/tcp��open��imap��������Courier�Imapd�(released�2008)

    |_imap-capabilities:�SORT�NAMESPACE�CAPABILITY�THREAD=REFERENCES�THREAD=ORDEREDSUBJECT�

    ACL�CHILDREN�OK�IDLE�completed�ACL2=UNIONA0001�UIDPLUS�IMAP4rev1�QUOTA

    443/tcp��open��ssl/http����Apache�httpd�2.2.14�((Ubuntu)�mod_mono/2.4.3�

    PHP/5.3.2-1ubuntu4.5�with�Suhosin-Patch�proxy_html/3.0.1�mod_python/3.3.1�Python/2.6.5�

    mod_ssl/2.2.14�OpenSSL/...)

    |_http-favicon:�Unknown�favicon�MD5:�1F8C0B08FB6B556A6587517A8D5F290B

    |�http-methods:�GET�HEAD�POST�OPTIONS�TRACE

    |�Potentially�risky�methods:�TRACE

    |_See�http://nmap.org/nsedoc/scripts/http-methods.html

    위와 같이 www.test.re.kr이라는 가상 서버를 대상으로 점검한 결과

    는 아래와 같다(결과파일: www.test.re.kr-nmap.txt). 주의사항: 이 서

    버 명은 실제 운영 서버이므로 시험 대상으로 사용하지 않아야 한다.

  • 2. Nmap

    19

    |_http-title:�owaspbwa�OWASP�Broken�Web�Applications

    |�ssl-cert:�Subject:�commonName=owaspbwa

    |�Issuer:�commonName=owaspbwa

    |�Public�Key�type:�rsa

    |�Public�Key�bits:�1024

    |�Not�valid�before:�2013-01-02T21:12:38+00:00

    |�Not�valid�after:��2022-12-31T21:12:38+00:00

    |�MD5:���0fb9�ca0b�e9b7�b26f�de6c�3555�6186�2399

    |_SHA-1:�e469�e1f2�9877�40c3�3aec�ee7c�f630�ca19�31be�05ae

    |_ssl-date:�2014-12-20T12:22:55+00:00;�-19h04m23s�from�local�time.

    445/tcp��open��netbios-ssn�Samba�smbd�3.X�(workgroup:�WORKGROUP)

    5001/tcp�open��ovm-manager�Oracle�VM�Manager

    8080/tcp�open��http��������Apache�Tomcat/Coyote�JSP�engine�1.1

    |�http-methods:�GET�HEAD�POST�PUT�DELETE�OPTIONS

    |�Potentially�risky�methods:�PUT�DELETE

    |_See�http://nmap.org/nsedoc/scripts/http-methods.html

    |_http-title:�Apache�Tomcat/6.0.24�-�Error�report

    8081/tcp�open��http��������Jetty�6.1.25

    |�http-methods:�GET�HEAD�POST�TRACE�OPTIONS

    |�Potentially�risky�methods:�TRACE

    |_See�http://nmap.org/nsedoc/scripts/http-methods.html

    |_http-title:�Choose�Your�Path

    MAC�Address:�00:0C:29:98:1C:72�(VMware)

    Device�type:�general�purpose

    Running:�Linux�2.6.X

    OS�CPE:�cpe:/o:linux:linux_kernel:2.6

    OS�details:�Linux�2.6.17�-�2.6.36

    Uptime�guess:�0.336�days�(since�Sun�Dec�21�08:24:05�2014)

    Network�Distance:�1�hop

    TCP�Sequence�Prediction:�Difficulty=193�(Good�luck!)

    IP�ID�Sequence�Generation:�All�zeros

    Service�Info:�OS:�Linux;�CPE:�cpe:/o:linux:linux_kernel

    Host�script�results:

    |�nbstat:�NetBIOS�name:�OWASPBWA,�NetBIOS�user:�,�NetBIOS�MAC:��

    (unknown)

  • 20

    |�Names:

    |���OWASPBWA���������Flags:�

    |���OWASPBWA���������Flags:�

    |���OWASPBWA���������Flags:�

    |���\x01\x02__MSBROWSE__\x02��Flags:�

    |���WORKGROUP��������Flags:�

    |���WORKGROUP��������Flags:�

    |_��WORKGROUP��������Flags:�

    |�smb-security-mode:�

    |���Account�that�was�used�for�smb�scripts:�guest

    |���User-level�authentication

    |���SMB�Security:�Challenge/response�passwords�supported

    |_��Message�signing�disabled�(dangerous,�but�default)

    |_smbv2-enabled:�Server�doesn't�support�SMBv2�protocol

    TRACEROUTE

    HOP�RTT�����ADDRESS

    1���0.40�ms�www.test.re.kr�(192.168.58.167)

    Read�data�files�from:�/usr/bin/../share/nmap

    OS�and�Service�detection�performed.�Please�report�any�incorrect�results�at�

    http://nmap.org/submit/�.

    #�Nmap�done�at�Sun�Dec�21�16:27:19�2014�--�1�IP�address�(1�host�up)�scanned�in�15.16�

    seconds�

    www.test.re.kr 서버에서는 22, 80, 139, 143, 443, 445, 5001,

    8080, 8081 포트가 개방되어 있음을 알 수 있다. 이 중에서 80, 443,

    8080, 8081의 네 포트에서 웹 서비스를 제공하고 있다. 내용을 좀 더

    살펴 보면 80, 443 포트에서는 동일한 웹 서버를 통하여 같은 서비스를

    실행하는 것으로 보이며 8080 포트에서는 아파치 톰캣, 8081 포트에서

    는 Jetty가 서비스 중임을 파악할 수 있다. 또한 네 포트 모두에서 보안

    상 위험한 것으로 추정되는 TRACE 메소드를 허용하고 있다 (아래 그

    림 참조).

  • 2. Nmap

    21

    80/tcp���open��http��������Apache�httpd�2.2.14�((Ubuntu)�mod_mono/2.4.3�

    PHP/5.3.2-1ubuntu4.5�with�Suhosin-Patch�proxy_html/3.0.1�mod_python/3.3.1�

    Python/2.6.5�mod_ssl/2.2.14�OpenSSL/...)

    |_http-favicon:�Unknown�favicon�MD5:�1F8C0B08FB6B556A6587517A8D5F290B

    |�http-methods:�GET�HEAD�POST�OPTIONS�TRACE

    |�Potentially�risky�methods:�TRACE

    |_See�http://nmap.org/nsedoc/scripts/http-methods.html

    |_http-title:�owaspbwa�OWASP�Broken�Web�Applications

    80 포트에서는 Apache 서버 2.2.14, PHP 5.3.2 등을 이용한 웹 서비

    스가 실행중이다. 오픈소스 PHP 보안 패치인 수호신(Suhosin)을 적용하

    고 있는 것을 알 수 있다. GET, HEAD, POST, OPTONS, TRACE 등의

    메소드를 허용하고 있으며, 이 중에서 TRACE는 잠재적으로 위험하다는

    경고 메시지를 출력하고 있다.

    443/tcp��open��ssl/http����Apache�httpd�2.2.14�((Ubuntu)�mod_mono/2.4.3�

    PHP/5.3.2-1ubuntu4.5�with�Suhosin-Patch�proxy_html/3.0.1�mod_python/3.3.1�Python/2.6.5�

    mod_ssl/2.2.14�OpenSSL/...)

    |_http-favicon:�Unknown�favicon�MD5:�1F8C0B08FB6B556A6587517A8D5F290B

    |�http-methods:�GET�HEAD�POST�OPTIONS�TRACE

    |�Potentially�risky�methods:�TRACE

    |_See�http://nmap.org/nsedoc/scripts/http-methods.html

    |_http-title:�owaspbwa�OWASP�Broken�Web�Applications

    |�ssl-cert:�Subject:�commonName=owaspbwa

    |�Issuer:�commonName=owaspbwa

    |�Public�Key�type:�rsa

    |�Public�Key�bits:�1024

    |�Not�valid�before:�2013-01-02T21:12:38+00:00

    |�Not�valid�after:��2022-12-31T21:12:38+00:00

    |�MD5:���0fb9�ca0b�e9b7�b26f�de6c�3555�6186�2399

    |_SHA-1:�e469�e1f2�9877�40c3�3aec�ee7c�f630�ca19�31be�05ae

    |_ssl-date:�2014-12-20T12:22:55+00:00;�-19h04m23s�from�local�time.

  • 22

    443 포트에서는 80 포트에서와 동일한 구성을 보여주며 http-title 또

    한 동일하다. 이로부터 443 포트의 서비스는 80 포트의 SSL 버전임을 알

    수 있다. 웹 취약점 점검에서 80 포트와 443 포트에서는 거의 유사한 취

    약점들이 발견될 것임을 예측할 수 있다.

    8080/tcp�open��http��������Apache�Tomcat/Coyote�JSP�engine�1.1

    |�http-methods:�GET�HEAD�POST�PUT�DELETE�OPTIONS

    |�Potentially�risky�methods:�PUT�DELETE

    |_See�http://nmap.org/nsedoc/scripts/http-methods.html

    |_http-title:�Apache�Tomcat/6.0.24�-�Error�report

    8080 포트에서는 Apache Tomcat/Coyote JSP engine 1.1에 의해서

    서비스가 제공되고 있다. HTTP 메소드로는 GET, HEAD, POST, PUT,

    DELETE, OPTIONS 등을 제공하고는 데 PUT, DELETE는 잠재적으로

    위험한 메소드임을 경고한다. 웹 서버의 제목을 나타내는 http-title에서는

    아파치 톰캣의 버전 정보가 출력되어 악의적인 공격자에게 추가적인 도움

    을 줄 가능성이 있다.

    8081/tcp�open��http��������Jetty�6.1.25

    |�http-methods:�GET�HEAD�POST�TRACE�OPTIONS

    |�Potentially�risky�methods:�TRACE

    |_See�http://nmap.org/nsedoc/scripts/http-methods.html

    |_http-title:�Choose�Your�Path

    8081 포트에서는 Jetty 6.1.25 서블릿 서버가 작동하고 있으며 GET,

    HEAD, POST, TRACE, OPTIONS 등과 같은 메소드를 허용하고 있다.

    점검 결과에서는 TRACE 메소드가 잠재적인 위험성이 있음을 경고하고

    있다.

  • 2. Nmap

    23

    점검 대상인 www.test.re.kr 서버에 대한 웹 취약점 점검을 위해서

    는 80 포트의 서비스만을 대상으로 해서는 안되며, 443, 8080, 8081

    포트의 서비스에 대해서도 추가적인 취약점 점검을 수행하여야 보다 안

    전한 진단 결과를 얻을 수 있다.

  • 3

    Nikto2(웹 서버 스캐너)

  • 3. Nikto2

    27

    Ⅲ. Nikto2

    1 Nikto2 소개

    Nikto2는 perl을 기반으로 개발된 웹 서버 스캔 프로그램이다. 2012년

    이후로 개발이 중단된 상태이지만 현재까지 개발되고 운용중인 대다수의

    기본적인 취약점을 점검하는 데 있어서 매우 유용한 도구이다.

    Nikto2는 GPL로 배포되는 공개용 웹 서버 스캐너로 웹 서버를 대상으

    로 6,700개 이상의 취약한 파일/프로그램과 270개의 서버에 대한 취약한

    설정 등을 탐지한다. 더불어 취약한 서버 설정, HTTP 옵션 등에 대한 스

  • 28

    캔도 수행한다. Nikto2는 웹 어플리케이션 취약점 보다는 웹 서버 자체 및

    그 운용 환경에서의 문제점을 도출하는 데 있어서 탁월한 성능을 보여준다.

    이러한 점을 이용하면 Nikto2를 이용하여 웹 서버를 보호하는 보안장비가

    제대로 작동하는 지의 여부도 검증할 수 있다.

  • 3. Nikto2

    29

    #�tar�zxvf�nikto-2.1.4.tar.gz

    #�cd�nikto-2.1.4

    #�perl�nikto.pl

    2 Nikto2 설치

    Nikto2는 아래 그림에서 볼 수 있는 Nikto2 홈페이지에서 배포되고 있

    으며 다음과 같이 두 가지 압축 형태로 직접 다운로드 가능하다.

    ‣ https://cirt.net/nikto/nikto-2.1.5.tar.bz2 ‣ https://cirt.net/nikto/nikto-2.1.5.tar.gz

    Nikto2는 다운로드한 압축파일을 해제하면 바로 사용이 가능하다. 따라

    서 Perl이 기본적으로 설치되어 있는 Linux 환경에서는 다음과 같이 압축

    해제후 perl을 이용하여 실행한다.

  • 30

    Windows 환경에서는 Perl이 설치되어 있지 않기 때문에 Perl을 우선

    설치하여야 한다.

    Windows 환경에서 사용 가능한 Perl은 Activestate에서 배포하는

    Activestate Perl과 오픈소스 프로젝트로 진행되고 있는 Strawberry Perl

    이 대표적이다. 여기에서는 오픈소스로 배포되고 있는 Strawberry Perl에

    대한 설치 방법을 소개한다.

    Strawberry Perl은 http://strawberryperl.com/에서 Perl 인스톨러를

    다운로드해서 설치할 수 있다.

    2014년 12월 현재 최신 버전인 strawberry-perl-5.20.msi 파일을 다

    운로드하여 설치하면 아래 그림과 같이 설치가 시작된다.

  • 3. Nikto2

    31

    Strawberry Per은 기본적으로는 아래 그림과 같이“C:\Strawberry"

    디렉토리에 설치된다.

    설치 시 기본적으로 PATH 환경변수에“C:\strawberry\c\bin;C:\straw

    berry\perl\site\bin;C:\strawberry\perl\bin”값이 추가되어 어느 위치에서

  • 32

    든 실행 가능하도록 설치된다. 설치가 완료된 후 Strawberry Perl이 정상

    적으로 설치되어 있는지 확인한다.

    C:\>perl�-v

    This�is�perl�5,�version�20,�subversion�1�(v5.20.1)�built�for�MSWin32-x64-multi-t

    hread

    Copyright�1987-2014,�Larry�Wall

    Perl�may�be�copied�only�under�the�terms�of�either�the�Artistic�License�or�the

    GNU�General�Public�License,�which�may�be�found�in�the�Perl�5�source�kit.

    Complete�documentation�for�Perl,�including�FAQ�lists,�should�be�found�on

    this�system�using�"man�perl"�or�"perldoc�perl".��If�you�have�access�to�the

    Internet,�point�your�browser�at�http://www.perl.org/,�the�Perl�Home�Page.

    C:\>^Z

    다운로드한 Nikto2 압축파일을 사용할 디렉토리에 위치하여 해제한다.

  • 3. Nikto2

    33

    설치된 Nikto2는 nikto.pl 파일을 Perl을 이용하여 실행시키거나 직접

    실행시킬 수 있다.

    C:\nikto-2.1.5>perl�nikto.pl�-host�localhost�-port�80

    C:\nikto-2.1.5>nikto.pl�-host�localhost�-port�80

  • 34

    3 Nikto2 점검 및 결과

    점검 대상 서버를 대상으로 nikto2를 실행하는 경우에는 서버 이름과

    포트를 지정하여 웹 서버 설정을 스캔한다.

    #�nikto�-host��-port��-o�-nikto-.txt

    ��스캔옵션

    ���-host�:�스캔대상 서비스의 서버이름

    ���-port�:�스캔대상 포트.�80,�443,�8080�등

    ���-o�:�점검결과를 저장할 파일 이름.�확장자를 html로 지정 가능.

    아래는 www.test.re.kr 서버의 80 포트를 대상으로 한 점검 예이다.

  • 3. Nikto2

    35

    -�Nikto�v2.1.6/2.1.5

    +�Target�Host:�www.test.re.kr

    +�Target�Port:�80

    +�GET�Server�leaks�inodes�via�ETags,�header�found�with�file�/,�inode:�286483,�size:�

    26727,�mtime:�Fri�Sep�27�12:41:25�2013

    +�GET�The�anti-clickjacking�X-Frame-Options�header�is�not�present.

    +�OSVDB-3268:�GET�/cgi-bin/:�Directory�indexing�found.

    +�GET�IP�address�found�in�the�'location'�header.�The�IP�is�"127.0.1.1".

    +�OSVDB-630:�GET�IIS�may�reveal�its�internal�or�real�IP�in�the�Location�header�via�a�

    request�to�the�/images�directory.�The�value�is�"http://127.0.1.1/images/".

    +�GET�Uncommon�header�'tcn'�found,�with�contents:�list

    +�GET�Apache�mod_negotiation�is�enabled�with�MultiViews,�which�allows�attackers�to�

    easily�brute�force�file�names.�See�http://www.wisec.it/sectou.php?id=4698ebdc59d15.�

    The�following�alternatives�for�'index'�were�found:�index.css,�index.html

    +�HEAD�Apache/2.2.14�appears�to�be�outdated�(current�is�at�least�Apache/2.4.7).�Apache�

    2.0.65�(final�release)�and�2.2.26�are�also�current.

    +�HEAD�mod_ssl/2.2.14�appears�to�be�outdated�(current�is�at�least�2.8.31)�(may�depend�

    on�server�version)

    +�HEAD�mod_perl/2.0.4�appears�to�be�outdated�(current�is�at�least�2.0.7)

    +�HEAD�mod_mono/2.4.3�appears�to�be�outdated�(current�is�at�least�2.8)

    +�HEAD�OpenSSL/0.9.8k�appears�to�be�outdated�(current�is�at�least�1.0.1e).�OpenSSL�

    0.9.8r�is�also�current.

    +�HEAD�Python/2.6.5�appears�to�be�outdated�(current�is�at�least�2.7.5)

    +�HEAD�PHP/5.3.2-1ubuntu4.5�appears�to�be�outdated�(current�is�at�least�5.4.26)

    +�HEAD�Perl/v5.10.1�appears�to�be�outdated�(current�is�at�least�v5.14.2)

    +�HEAD�proxy_html/3.0.1�appears�to�be�outdated�(current�is�at�least�3.1.2)

    +�GET�mod_ssl/2.2.14�OpenSSL/0.9.8k�Phusion_Passenger/3.0.17�mod_perl/2.0.4�

    www.test.re.kr-nikto-80.txt 파일에 저장된 내용은 다음과 같다.

    (주의사항: 여기서 사용한 서버명인 www.test.re.kr은 편의상 만든 이

    름이며 실제로 운영중인 서버이므로 nikto 스캐너를 이를 대상으로 시험

    하지 않아야 한다.)

  • 36

    Perl/v5.10.1�-�mod_ssl�2.8.7�and�lower�are�vulnerable�to�a�remote�buffer�overflow�

    which�may�allow�a�remote�shell.�CVE-2002-0082,�OSVDB-756.

    +�OPTIONS�Allowed�HTTP�Methods:�GET,�HEAD,�POST,�OPTIONS,�TRACE�

    +�OSVDB-877:�TRACE�HTTP�TRACE�method�is�active,�suggesting�the�host�is�vulnerable�to�

    XST

    +�GET�Retrieved�x-powered-by�header:�PHP/5.3.2-1ubuntu4.5

    +�GET�Cookie�phpbb2owaspbwa_data�created�without�the�httponly�flag

    +�GET�Cookie�phpbb2owaspbwa_sid�created�without�the�httponly�flag

    +�OSVDB-3092:�GET�/phpmyadmin/changelog.php:�phpMyAdmin�is�for�managing�MySQL�

    databases,�and�should�be�protected�or�limited�to�authorized�hosts.

    +�OSVDB-3268:�GET�/test/:�Directory�indexing�found.

    +�OSVDB-3092:�GET�/test/:�This�might�be�interesting...

    +�OSVDB-3092:�GET�/cgi-bin/:�This�might�be�interesting...�possibly�a�system�shell�

    found.

    +�OSVDB-3268:�GET�/icons/:�Directory�indexing�found.

    +�OSVDB-3268:�GET�/images/:�Directory�indexing�found.

    +�OSVDB-3268:�GET�/images/?pattern=/etc/*&sort=name:�Directory�indexing�found.

    +�OSVDB-3233:�GET�/icons/README:�Apache�default�file�found.

    +�GET�/wordpress/:�A�Wordpress�installation�was�found.

    +�GET�/phpmyadmin/:�phpMyAdmin�directory�found�

    위의 결과에서 80 포트에서 제공중인 서비스와 관련된 중요한 취약점

    들을 하나씩 짚어보면 다음과 같다.

    +�OSVDB-3268:�GET�/cgi-bin/:�Directory�indexing�found.

    +�OSVDB-3268:�GET�/test/:�Directory�indexing�found.

    +�OSVDB-3268:�GET�/icons/:�Directory�indexing�found.

    +�OSVDB-3268:�GET�/images/:�Directory�indexing�found.

    +�OSVDB-3268:�GET�/images/?pattern=/etc/*&sort=name:�Directory�indexing�found.

    디렉토리 나열 취약점이 /cgi-bin/, /test/ 등의 디렉토리에서 발견되

    었다. OSVDB-3268 취약점은 Open Source Vulnerability Database

    에서 Directory Indexing 항목으로 지적하는 취약점이다. 이 취약점을

  • 3. Nikto2

    37

    통해서 직접적인 공격가능성은 낮으나 공격자에게 민감한 파일이나 디렉

    토리 정보를 제공함으로써 추가적인 공격에 악용될 소지가 있으므로 웹

    서버 설정에서 디렉토리 나열 옵션을 비활성화하여야 한다. (참고:

    2014년에 발견된 bash 쉘의 심각한 취약점인 shellshock이 일부

    /cgi-bin/에서 제공되는 CGI에 의해 공격당하기도 하였다.)

    +�OPTIONS�Allowed�HTTP�Methods:�GET,�HEAD,�POST,�OPTIONS,�TRACE�

    +�OSVDB-877:�TRACE�HTTP�TRACE�method�is�active,�suggesting�the�host�is�vulnerable�to�

    XST

    대상 웹 서버는 GET, HEAD, POST, OPTIONS, TRACE 메소드를

    허용하고 있다. 특히 OSVDB-877 취약점으로 명시된 TRACE 메소드

    는 XST(Cross Site Tracing) 공격을 통하여 사용자/관리자 세션 탈취

    에 악용될 소지가 있는 메소드이다. 대부분의 웹 서버에서 이 메소드는

    필요하지 않으므로 비활성화시켜야 한다.

    +�GET�Cookie�phpbb2owaspbwa_data�created�without�the�httponly�flag

    +�GET�Cookie�phpbb2owaspbwa_sid�created�without�the�httponly�flag

    웹 서버가 설정하는 두 개의 쿠키인 phpbb2owaspbwa_data 쿠키와

    phpbb2owaspbwa_sid 쿠키에 대해서 HttpOnly 속성이 설정되지 않았

    다는 의미이다. HttpOnly 속성은 특히 세션에 대해서 중요한 데 이 속

    성이 설정되면 자바스크립트에서 쿠키값을 읽어들일 수 없으므로 크로스

    사이트스크립트(Cross-site Script; XSS)와 같은 공격을 통한 관리자

    세션 탈취를 방지할 수 있다.

  • 38

    +�OSVDB-3092:�GET�/phpmyadmin/changelog.php:�phpMyAdmin�is�for�managing�MySQL�

    databases,�and�should�be�protected�or�limited�to�authorized�hosts.

    +�OSVDB-3092:�GET�/test/:�This�might�be�interesting...

    +�OSVDB-3092:�GET�/cgi-bin/:�This�might�be�interesting...�possibly�a�system�shell�

    found.

    OSVDB-3092 취약점은 CGI 디렉토리 등과 같이 잠재적으로 취약점

    을 내포할 수 있는 디렉토리를 발견했음을 의미한다. 특히 PHP MySQL

    관리자 인터페이스 정보는 버전정보를 노출하여 알려진 취약점이 있을

    경우 직접적인 공격대상이 될 수 있으므로 접근제한을 요구하고 있다.

    위에서 언급된 각 페이지에 대해서 접속시 다음과 같은 페이지를 발견할

    수 있다.

  • 3. Nikto2

    39

    +�OSVDB-3233:�GET�/icons/README:�Apache�default�file�found.

    OSVDB-3233 취약점은 웹 서버가 기본적으로 제공하는 파일이 발견

    되는 경우이다. 웹 서버 소프트웨어가 기본적으로 제공하는 파일, 디렉

    토리, CGI 프로그램은 그 자체로는 공격가능성이 낮으나 웹 서버의 민

    감한 정보를 노출할 가능성이 있으므로 제거하는 것이 바람직하다.

  • 40

    +�GET�/wordpress/:�A�Wordpress�installation�was�found.

    WordPress는 세계적으로 널리 사용되는 공개용 저작물 관리시스템

    (CMS)이다. 소스가 개방된 이러한 공개용 시스템들은 다양한 취약점이

    널리 알려져 있으므로 보안상 보다 깊은 관심을 가져야 한다.

    +�GET�/phpmyadmin/:�phpMyAdmin�directory�found�

    PhpMyAdmin은 MySQL을 웹 상에서 관리할 목적으로 PHP를 기반

    으로 개발된 공개용 도구이다. 소스가 개방된 이러한 공개용 시스템들은

    다양한 취약점이 널리 알려져 있으므로 보안상 보다 깊은 관심을 가져야

    한다. 특히 이 서비스는 ID/PW가 노출될 경우 DB 탈취에 악용될 소지

    가 있으므로 주의하여야 한다.

  • 3. Nikto2

    41

    2장에서 다루었던 Nmap 스캔 결과에서 80 외에 443, 8080, 8081

    포트에서도 웹 서비스가 제공됨을 알 수 있었다. 점검 대상 웹 서버의

    취약점을 모두 찾아내기 위해서는 웹 서비스가 실행중인 모든 포트에 대

    해서 취약점 점검 도구를 실행하여야 한다. 예를 들어 본 안내서에 제공

    하는 서버의 8080 포트에 대한 웹 서비스를 대상으로 Nikto2를 다음과

    같이 실행해 보자.

    #�nikto�-host�www.test.re.kr�-port�8080�-o�www.test.re.kr-nikto-8080.txt

    8080 포트에 대한 Nikto2 웹 서버 스캐너의 실행결과를 저장한

    www.test.re.kr-nikto-8080.txt 파일의 내용은 다음과 같다.

    -�Nikto�v2.1.6/2.1.5

    +�Target�Host:�www.test.re.kr

    +�Target�Port:�8080

    +�GET�The�anti-clickjacking�X-Frame-Options�header�is�not�present.

    +�OPTIONS�Allowed�HTTP�Methods:�GET,�HEAD,�POST,�PUT,�DELETE,�OPTIONS�

    +�OSVDB-397:�GET�HTTP�method�('Allow'�Header):�'PUT'�method�could�allow�clients�to�

    save�files�on�the�web�server.

    +�OSVDB-5646:�GET�HTTP�method�('Allow'�Header):�'DELETE'�may�allow�clients�to�remove�

    files�on�the�web�server.

    +�GET�Server�leaks�inodes�via�ETags,�header�found�with�file�

    /examples/servlets/index.html,�fields:�0xW/5222�0x1282231663000�

    +�GET�/examples/servlets/index.html:�Apache�Tomcat�default�JSP�pages�present.

    +�GET�Cookie�JSESSIONID�created�without�the�httponly�flag

    +�OSVDB-3720:�GET�/examples/jsp/snp/snoop.jsp:�Displays�information�about�page�

    retrievals,�including�other�users.

    +�GET�/manager/html:�Default�Tomcat�Manager�interface�found

    +�GET�/docs/:�Tomcat�Documentation�found�

  • 42

    8080 포트에서는 PUT, DELETE 등과 같이 잠재적인 위험성이 있

    는 HTTP 메소드를 제공하고 있다. 또한 JSP, 서블릿 예제 페이지에 접

    근이 가능하며 세션쿠키인 JSESSIONID에 대해서 HttpOnly가 설정되

    지 않은 것으로 탐지되었다. 그리고 Tomcat 기본관리자 인터페이스 및

    설명서가 발견되었다.

    웹 브라우저로 8080 포트를 접속할 경우 아래와 같이 오류 페이지를

    출력하며 별도의 서비스에 대한 링크를 제공하지는 않는다. 하지만 탐지

    된 Tomcat 기본 관리자 인터페이스는 접속 가능함을 다음 그림에서 알

    수 있다.

  • 3. Nikto2

    43

    Apache Tomcat 관리자 인터페이스는 관리자 ID와 암호가 유출될

    경우 WAR 형식의 웹 쉘을 업로드하여 웹 서버를 장악할 수 있는 위험

    성을 내포하고 있다.

    위 그림은 파일다운로드 취약점 등을 악용하여 해당 서버에서 톰캣

  • 사용자 지정파일인 tomcat-users.xml 파일을 다운로드하여 ID/PW로

    관리자 페이지 접속 후 cmd.war 파일을 업로드하여 시스템을 장악한

    경우이다.

    위의 예에서 보는 바와 같이 직접적인 접속 링크가 존재하지 않는 서

    비스의 경우에도 심각한 취약점은 존재할 수 있다. 따라서 웹 서버의 홈

    페이지 취약점을 점검하기 위해서는 해당 서버의 모든 웹 서비스 포트에

    대한 점검이 수행되어야 한다.

  • 4

    OWASP-ZAP(웹 취약점 점검 도구)

  • 4. OWASP-ZAP

    47

    Ⅳ. OWASP-ZAP

    1 OWASP-ZAP 소개

    웹 어플리케이션의 보안 취약점을 점검하기 위한 도구로는 다양한 제품

    들이 공개 또는 상용으로 출시되어 있다. 특히 상용 웹 취약점 스캐너 제

    품들은 점검 성능이 뛰어나고 한글화가 잘 되어있다는 장점이 있다. 그러

    나 수천만원에 이르는 연간 사용비용이 부담스러운 점이 단점이다.

    본 안내서에서는 이러한 상용 제품을 대체할 수 있는 공개용 웹 취약점

    점검도구로서 OWASP-ZAP을 간략하게 소개한다. OWASP(The Open

    Source Web Application Security Project)는 웹에 의한 정보노출, 악성

    파일/스크립트, 보안 취약점 등을 연구하는 국제적인 공개 프로젝트이며

    이 중 하나의 공개 공동 작업으로 OWASP Zed Attack Proxy(ZAP)을

    개발하여 무료로 제공하고 있다.

    ZAP은 웹 어플리케이션의 보안 취약점을 탐지하기 위한 통합 침투 테

    스트 도구로 개발되고 있다. 이름에서 알 수 있듯이 기본적으로 프록시

    (proxy) 기능을 제공한다. 그리고 자동화된 웹 취약점 점검 기능을 제공

  • 48

    하며 더불어 Fuzzer라는 기능을 통하여 추가적인 고급 취약점 점검을 수

    행할 수 있도록 하고 있다.

    다수의 상용 및 공개용 웹 취약점 점검 스캐너에 대한 보고서에 의하면

    (http://sectooladdict.blogspot.kr/2011/08/commercial-web-applicatio

    n-scanner.html), OWASP-ZAP의 경우 상용 스캐너에 비해서는 그 성

    능이 다소 떨어지는 점이 있지만 공개용 취약점 점검 도구 중에서는 상위

    에 위치하는 것으로 보고되고 있다. 본 안내서에서는 OWASP-ZAP의 프

    록시, 퍼저 등의 부가적인 기능을 제외하고 기본적인 자동 웹 취약점 스캐

    너로 활용할 수 있는 방법을 위주로 설명한다.

  • 4. OWASP-ZAP

    49

    2 OWASP-ZAP 설치

    ■ OWASP-ZAP 설치

    OWASP-ZAP은 칼리 리눅스에는 기본적으로 설치되어 있지만 개별적

    으로 설치할 수도 있다. 2014년 12월 현재 아래 그림과 같이 OWASP 홈

    페이지에서 프로그램을 직접 다운로드할 수 있으며 URL은 다음과 같다.

    (https://code.google.com/p/zaproxy/wiki/Downloads?tm=2)

    여기에서는 Windows 환경에서 OWASP-ZAP을 설치하는 방법을 설명

  • 50

    한다. 다운로드 받을 파일은“ZAP_2.3.1_Windows.exe”이다.

    다운로드한 파일을 실행시키면 아래 그림과 같이 설치가 시작된다.

    OWASP-ZAP은 기본적으로는 아래 그림과 같이“C:\Program Files

    (x86)\OWASP\Zed Attack Proxy”디렉토리에 설치된다.

  • 4. OWASP-ZAP

    51

    설치가 완료된 후 OWASP-ZAP을 실행시키면 아래와 같이 실행된 첫

    화면을 확인할 수 있다.

  • 52

    ■ OWASP-ZAP 구성

    OWASP-ZAP을 사용하기 이전에 기본적인 구성을 살펴보자.

    [주메뉴(Top level Menu)]는 아래 그림과 같이 OWASP-ZAP 창의

    제일 상단에 위치하며 툴의 주요 기능을 선택할 수 있다.

    주메뉴의 각 기능은 다음과 같다.

    ‣ File : OWASP-ZAP의 세션 열기, 저장 등의 조정 및 세션값 설정 ‣ Edit : 검색 기능 제공과 관리하고 있는 세션 추적 ‣ View : OWASP-ZAP을 구성하고 있는 tab의 보여주기 조정

  • 4. OWASP-ZAP

    53

    ‣ Analysis menu : 스캔 정책을 조정 ‣ Report : 파일 형태별 결과보고서 출력 관련 조정 ‣ Tools menu : OWASP-ZAP 도구와 일반적인 옵션 조절 ‣ Online menu : 인터넷에 있는 관련자료 링크 ‣ Help menu : 도움말

    [툴바(Top level Toolbar)]는 아래 그림과 같이 상단의 두 번째 줄

    에 위치하며 주로 사용되는 기능을 손쉽게 조정할 수 있다.

    툴바의 주요 기능은 다음과 같다.

    ‣ Mode : 스캔 모드 설정‣ New Session : 신규 세션 설정

  • 54

    ‣ Open Session : 저장되어 있는 세션 읽기‣ Persist Session : 점검 중인 세션 저장‣ Snapshot Session : 현재 진행되고 있는 세션 저장‣ Session Properties : 세션 환경 값 설정‣ Options : OWASP-ZAP의 환경 값 설정‣ Show tab names and icons : 각 창에 있는 tab의 이름 및

    아이콘 보이기/숨기기

    ‣ Expand Sites Tab : 트리창(Tree Window)의 크기 확대‣ Expand Information Tabs : 정보창(Information Window)의

    크기 확대

    ‣ Expand Full : 정보창에서 선택된 tab 크기 확장‣ Request and Response tabs side by side : 작업창(Workspace

    Window)에 있는 Request tab과 Respose tab을 나란히 배치

    ‣ Request show above Response : 작업창(Workspace Window)에 있는 Request pannel을 Respose pannel 상하로 배치

    ‣ Request and Response panels side by side : 작업창(Workspace Window)에 있는 Request pannel을 Respose pannel 좌우로 배치

    ‣ / Set/Unset break an all requests : proxy 기능 활용시 요청값(requests)에 대한 trap 설정 및 해제

    ‣ / Set/Unset break on all responses : proxy 기능 활용시 반환값(responses)에 대한 trap 설정 및 해제

    ‣ Step : proxy 기능 활용시 trap이 설정된 requests나 response에 대하여 순차적으로 실행

    ‣ Continue : proxy 기능 활용시 trap이 설정된 requests나 response

  • 4. OWASP-ZAP

    55

    에 대하여 끝까지 모두 실행

    ‣ Drop : proxy 기능 활용시 trap이 설정된 requests나 response에 대하여 실행시키지 않고 종료

    ‣ Add a custom HTTP break point : 특정 URL에 대한 break point 설정하는 대화창 활성화

    ‣ Manage Add-ons : 추가적으로 설치 또는 업데이트를 위한 개체를 추가할 수 있는 대화창 활성화

    ‣ / Force User Mode On / Off : 사용자 모드 켜기 / 끄기

    [바닥글(Footer)]는 아래 그림과 같이 제일 하단에 위치하며 발견된

    취약점 개수 및 현재 수행하고 있는 점검 개수에 대한 정보를 출력한다.

  • 56

    ‣ : 취약점 점검결과 (위험도 상, 중, 하 및 단순정보)에 대한 개수

    ‣ : 현재 실행되고 있는 점검행위(Active Scan, Spider 등)의 개수

    [트리창(Tree Window)]은 아래 그림과 같이 중앙 왼쪽에 위치하며

    점검했던 URL에 대한 정보를 트리형태로 출력하는 Sites tab이 있다.

    Sites tab에서 방문했던 특정 URL을 선택한 후 마우스 오른쪽 버튼

    을 클릭하면 아래 그림과 같이 해당 URL을 대상으로 취약점 점검 및

  • 4. OWASP-ZAP

    57

    URL 관리 등을 수행할 수 있는 창이 열린다.

    [작업창(Workspace Window)]은 아래 그림과 같이 중앙 오른쪽에

    위치하며 점검 결과 및 Proxy 기능에 의해 발생하는 요청값(Requests)

    과 반환값(Responses) 정보 등을 확인할 수 있다.

    ‣ 빠른 시작(Quick Start) Tab : 취약점 점검을 쉽게 수행할 수 있도록 공격대상 URL을 입력하여 점검 시작 및 중지를 할 수 있음

    ‣ Request Tab : 취약점 점검 또는 Proxy 기능에서 사용자 브라우저에서 점검 대상 홈페이지로 송신하는 요청값(Request)를 보임

    ‣ Response Tab : 취약점 점검 또는 Proxy 기능에서 점검 대상 홈

  • 58

    페이지로부터 수신되는 반환값(Responses)를 보임

    ‣ Break Tab : 지정된 break point에 대한 requests와 respons 변경

    [정보창(Information Window)]은 아래 그림과 같이 중앙 아래에 위

    치하며 OWASP-ZAP에서 제공하는 다양한 취약점 점검 기능을 선택할

    수 있는 탭과 수행결과 등을 확인할 수 있다. 주요 기능은 다음과 같다.

    ‣ Spider Tab : 홈페이지 취약점 점검시 취약점 점검을 수행할 대상 URI에 대한 스캐닝 화면 출력 및 조정

    ‣ Active Scan Tab : 홈페이지 취약점 점검을 수행하는 화면 출력 및 조정

    ‣ Alerts Tab : 홈페이지 취약점 점검결과 발견된 취약점을 위험도

  • 4. OWASP-ZAP

    59

    순으로 트리형태로 출력하며, 각 취약점에 대한 상세한 정보 제공

    ‣ History Tab : 취약점 점검 및 Proxy 기능 활용시 홈페이지에 송신한 요청값(Requests)를 순차적으로 출력하고 필터링 기능 제공

    ‣ Search Tab : OWASP-ZAP에서 수행된 URL, Reqeust, Response 등 모든 결과에 대한 검색 기능

    ‣ Break points Tab : 사용자가 설정한 중단점(Break point) 출력‣ Fuzzer Tab : Fuzzing 실행시 결과값 출력‣ Params Tab : 홈페이지 점검시 사용된 매개변수값 출력‣ Output Tab : 다양한 정보 메시지 출력

  • 60

    3 OWASP-ZAP 점검

    홈페이지 취약점 점검 대상 URL이 정해지면 OWASP-ZAP을 실행한

    다. ZAP을 실행하는 방법은 칼리리눅스의 경우 아래 그림과 같이 메뉴를

    통해서 실행할 수 있다.

    (Windows의 경우, 바탕화면 및 빠른 실행메뉴에 위치하고 있는

    OWASP-ZAP 단축아이콘 등을 클릭하여 실행한다.)

  • 4. OWASP-ZAP

    61

    바탕화면 왼쪽 윗 편의 메뉴 창에 위치하는 [Applications] -> [Kali

    Linux] -> [Web Applications] -> [Web Vulnerability Scanners]

    -> [owasp-zap]을 순차적으로 클릭하여 OWASP Zed Attack Proxy

    를 실행할 수 있다.

    터미널 환경이 익숙한 경우에는 명령어로 owasp-zap을 입력하여 직접

    OWASP-ZAP을 실행할 수도 있다(아래 그림).

    위와 같이 터미널에서 owasp-zap을 직접 실행하는 경우에는 터미널에

    서 ZAP의 실행과정을 터미널에 출력해 주기 때문에 점검 과정을 일부나

    마 눈으로 확인할 수 있으므로 편리하다. 다만 이러한 정보가 필요 없이

    실행결과만을 원할 경우에는 GUI를 통하여 실행하여도 된다.

    OWASP-ZAP이 실행되면 환영화면(Welcome to the OWASP Zed

  • 62

    Attack Proxy)이 출력되고 그 아래에 “URL to attatck:”입력창을 확인

    할 수 있다. ZAP의 경우 프록시(Proxy) 기능이 있어서 고급 사용자의 경

    우 프록시를 통하여 점검대상 홈페이지를 탐색하면서 그 결과에 대한 취약

    점 점검을 수행할 수도 있으나, 기본적으로는 “공격 URL (URL to

    attack:)”입력창을 활용하는 것이 편리하다. 아래 그림에서와 같이 취약

    점점검 대상 URL을 입력하고 “공격 (Attack)” 버턴을 클릭한다. 본 안

    내서에서는 "http://www.test.re.kr"을 입력하였다. (주의: www.test.re.kr

    도메인은 가상의 도메인이며 실제 도메인과는 상관이 없다. 따라서 실제

    상황에서 이 도메인을 대상으로 ZAP을 실행하지 않아야 한다.)

    "Attack" 버턴을 클릭하면 OWASP-ZAP은 웹 로봇 기능을 수행하여

  • 4. OWASP-ZAP

    63

    해당 웹 페이지에서 발견되는 모든 URL을 수집한다. 이러한 웹 로봇 기능

    을 ZAP에서는 "Spider"라고 표현하며 그림의 하단에서 나열된 탭 중

    Spider 탭에서 진행과정을 표시한다. Spider의 URL 수집기능은 웹 사이

    트에 따라 수행시간이 달라지며 작은 사이트의 경우에는 수분 내로 끝나기

    도 하나 대형 사이트의 경우 수 시간이 소요되기도 한다.

    Spider의 URL 수집 기능이 완료되면 OWASP-ZAP은 자동으로

    "Active Scan" 기능을 수행한다. 이 단계에서는 수집한 URL에 대하여 경

    로 조작(Path Traversal), 원격 OS 명령 삽입(Remote OS Command

    Injection), 시스템 파일 다운로드, 크로스사이트스크립트(Cross-site

    Script), SQL문 삽입(SQL Injection) 등의 다양한 취약점을 점검한다.

  • 64

    위 화면은 Active Scan이 진행 중인 상황을 나타내고 있다. Spider에

    서 수집한 URL의 양에 따라 Active Scan의 소요시간은 수 시간에서 수

    일이 소요되기도 한다. 이는 URL 인자에 대해서 대량의 변조를 통한 다양

    한 취약점을 점검하기 때문에 발생하는 문제이다. 경험상으로 볼 때, 상용

    웹 취약점 스캐너의 경우에는 OWASP-ZAP에 비해서 취약점 점검의 심

    도가 높기 때문에 수 배 이상의 시간이 소요되기도 한다.

    Active Scan이 종료되면 Alerts 탭에서 OWASP-ZAP이 발견한 취약

    점들이 항목별로 나열된다. www.test.re.kr을 대상으로 점검한 결과는 위

    그림과 같다. 총 취약점은 18개가 발견되었으며, 이 중에서 위험도 상(上;

    high)인 취약점은 8개, 중(中; medium)은 3개, 하(下; low)는 6개, 참조

  • 4. OWASP-ZAP

    65

    용(informational)은 1개가 발견되었음을 왼쪽 아래 상태창에서 보여주고

    있다. 위험도 상은 빨간색 깃발, 중은 주황색, 하는 노란색, 정보용은 파란

    색 깃발로 표시한다.

    위의 OWASP-ZAP 자동점검 결과에서 위험도 상으로는 크로스사이트

    스크립트(Cross-site Scripting), 외부경로 재지정(External Redirect),

    경로 조작(Path Traversal), 원격 파일 삽입(Remote File Inclusion), 원

    격 운영체제 명령어 삽입(Remote OS Command Injection Plugin), SQL

    문 삽입(SQL Injection) 등의 8개 취약점이 발견된 것을 확인할 수 있다.

    위험도 상(上)은 점검대상 서버에 대한 직접적인 공격이 가능한 심각한 취

    약점들이다.

    위험도 중(中)으로는 오류 메시지 노출(Application error disclosure),

    디렉토리 나열(Directory browsing), 세션 ID를 이용한 URL 재작성

    (Session ID in URL rewrite) 등의 3개 취약점이 발견되었다. 위험도 중

    (中)은 직접적인 공격은 힘들지만 위험도 상의 취약점 공격에 도움을 줄

    수 있는 민감한 정보가 노출될 수 있는 경우이다.

    위험도 하(下)의 취약점으로는 6개가 발견되었다. 위험도 하는 위험도

    중에 비해서 덜 민감한 정보를 제공하는 취약점들이다. 대부분의 경우에는

    무시할 수 있는 취약점이지만 일부 취약점의 경우에는 추가 공격에 악용될

    소지가 있는 취약점이므로 세밀히 살필 필요가 있다. 특히 세션쿠키에 대

    한 HttpOnly 미설정(Cookie Set without HttpOnly flag) 취약점은 크로

    스사이트스크립트 취약점과 연계 시 사용자/관리자 세션 탈취에 악용될 소

    지가 있다. 또한 사설IP 노출(Private IP disclosure) 취약점은 내부망으

    로 침투할 수 있는 단서를 제공할 소지가 있으므로 주의하여야 한다.

    OWASP-ZAP의 점검결과에서 정보용(informational)으로 분류하는 항

  • 66

    목들은 대부분의 경우 무시해도 상관없다. 다만 위험도 하(下)와 정보용으

    로 분류된 취약점의 경우, 홈페이지 개발자에게는 간단하면서도 유용한 프

    로그래밍 보안 팁을 제공하므로 참조 시 도움이 될 수 있다.

  • 4. OWASP-ZAP

    67

    4 OWASP-ZAP 점검 결과

    이제부터는 ZAP이 탐지한 점검 항목들에 대하여 하나씩 예를 들면서

    취약점의 세부사항을 설명하고자 한다. 취약점으로 탐지된 각 항목을 클릭

    하면 오른쪽에 탐지된 세부 내용을 보여준다. 또한 상단의 Request 탭과

    Response 탭을 눌러 그 내용을 확인하면 취약점 점검 방법을 보다 자세

    하게 알 수 있다.

    ■ 크로스사이트스크립트(XSS) 취약점

  • 68

    위험도 상의 첫 번째 결과는 “지속형 XSS(Cross-site Scripting

    (persistent))”이다. 이 취약점은 페이지 내에 이미 XSS 공격용 스크립

    트가 저장되어 있는 것으로 달리 “저장형 XSS(Stored XSS)”라고도 한

    다. 오탐이 아닐 경우 게시판 글쓰기나 댓글 기능 등을 통하여 해커가 악

    성 스크립트를 공격한 흔적일 가능성이 높다.

    ZAP에 의해 크로스사이트스크립트 기능이 제대로 동작하는 취약점인지

    의 여부를 확인하기 위해서는 브라우저에서 실행해보는 것이 좋다. 위 그

    림에서와 같이 Alerts 창의 해당 항목을 오른쪽 마우스 버턴을 누르면 메

    뉴 중에서 "Open URL in Browser"를 선택하면 칼리 리눅스의 경우 파이

    어폭스의 일종인 iceweasel 브라우저가 실행된다. 그 실행결과는 다음 그

    림에서 볼 수 있다.

    대부분의 경우 OWASP-ZAP 스캐너는 XSS 탐지에 있어서 스크립트

    실행 가능성을 진단한다. 위와 같이 alert() 창이 뜨는 것은 브라우저에서

    자바스크립트가 실행될 수 있음을 의미한다1). 이 페이지는 일반 사용자가

  • 4. OWASP-ZAP

    69

    글쓰기가 가능한 페이지로 ZAP 스캐너는 "alert(1);"를

    포함하는 문자열을 주입하여 해당 페이지에 XSS 취약점이 존재한다는 것

    을 탐지한 것이다.

    위와 같이 글쓰기를 통해서 스크립트 삽입이 가능한 경우를 "지속형

    XSS" 또는 "저장형 XSS"라고 하는 데 다음에서 설명할 "반사형 XSS"에

    비해 위험성이 매우 높다.

    1) 대부분의 웹 취약점은 취약점 자체가 웹 서버에서 실행되어 브라우저로 전

    달된다. 이와 달리 크로스사이트스크립트(XSS) 취약점은 대개의 경우 웹 브

    라우저에서 실행된다. 이 때문에 웹 브라우저에 따라서 XSS 취약점을 처리

    하는 방식이 다를 수 있다. 예를 들어 크롬 브라우저의 경우에는 URL에 강

    제로 삽입된 XSS 공격을 아예 차단한다. 파이어폭스는 대부분의 XSS를 실행

    한다. 인터넷 익스플로러의 경우에는 버전에 따라 XSS 공격을 처리하는 방

    식에 큰 차이가 있다. OSWASP-ZAP이 XSS에 취약한 것으로 판단한 URL에

    대해서는 파이어폭스 브라우저에서 수동점검을 수행하는 것이 편리하다.

  • 70

    반사형 XSS 공격이 대부분의 경우 관리자나 사용자 세션탈취, 피싱

    (Phishing) 등에 사용되는 반면, 이러한 저장형 XSS 공격은 홈페이지를

    위·변조, 악성코드 배포를 위한 경유지로의 악용 등 추가적인 공격 범위

    가 훨씬 다양하기 때문이다.

    게시물 등록이나 첨부파일을 통해 홈페이지 내에 공격 스크립트를 삽입

    하는 저장형 XSS 공격에 비해 "반사형 XSS (Cross-site Scripting

    (Reflected)" 공격은 주로 URL 인자 값을 변조하는 방식으로 이루어진다.

    위 그림에서 OWASP-ZAP이 위험도 상으로 탐지한 반사형 XSS 공격은

    /ShellOL/shell.php URL의 inject_string 인자를 변조하여 이루어진 것이

    다. 이 반사형 XSS 공격에서 ZAP은 inject_string 인자를 "

    alert(1);"로 변조하였다.

    그 결과 아래 그림과 같이 웹 브라우저에서 숫자 1을 출력하는 alert()

    창이 실행되어 공격자가 의도하는 악성 스크립트 실행이 가능할 수 있음을

    경고한다.

  • 4. OWASP-ZAP

    71

    반사형 XSS 공격은 주로 사용자 세션 탈취에 악용될 수 있다. URL 인

    자의 변조 문자열 중 "alert(1)"을 "alert(document.cookie)"로 변경하여

    실행하면 자바스크립트에 의한 세션 쿠키 접근이 가능한 지의 여부를 확인

    할 수 있다.

    위 그림은 위와 동일한 반사형 XSS 공격에서 숫자 1 대신 브라우저에

    저장된 대상서버 관련 쿠키값 전체(document.cookie)를 화면에 출력하도

    록 변조한 결과이다. 브라우저 내부에 생성된 alert() 창에 tz_offset,

    acopendivids, acgroupswithpersist, JSESSIONID 쿠키 값이 출력되는

    것을 볼 수 있다. 이 중에서 JSESSIONID는 사용자를 식별하는 세션 쿠키

    로서 이를 탈취할 경우 해당 사용자의 권한으로 웹 서비스에 접속할 수 있

    게 된다. 반사형 XSS 공격은 iframe 삽입을 통한 피싱(Phishing)이나 악

    성코드 배포 사이트로의 유도에도 악용될 수 있다.

  • 72

    ■ 외부경로 재지정(External Redirect) 취약점

    OWASP-ZAP이 탐지한 "외부경로 재지정(External redirect)" 취약점

    은 주어진 URL을 클릭했을 때 제시된 URL과는 다른 사이트로 브라우저

    를 자동으로 이동하는 경우에 탐지된다.

    위의 탐지 예에서 /ESAPI-Java-SwingSet-Interactive/main URL은

    redirect라는 인자의 입력을 받아서 해당 입력값의 URL로 브라우저를 자

    동으로 이동한다. 이러한 경우 사용자는 www.test.re.kr 사이트의 접속으

    로 인지한 상태에서 접속을 시도하는 것이지만 악성 URL을 redirect 인자

    에 넘겨줄 경우 사용자의 의도와는 다른 사이트로 이동하여 악성코드 다운

    로드나 피싱 사이트로의 이동 등에 악용될 소지가 있다.

  • 4. OWASP-ZAP

    73

    위 화면은 이러한 외부경로 재지정에 의해 test.re.kr 사이트에서 원하

    지 않는 owasp.org 사이트로 자동으로 이동된 웹 브라우저의 모습이다.

    사용자가 의도하지 않은 웹 페이지로 자동 이동되므로 악성코드 감염,

    CSRF 공격을 위한 URL 은닉 등에 악용 가능하므로 위험도 상으로 분류

    되는 취약점이다.

  • 74

    ■ 경로 조작(Path Traversal) 취약점

    경로 조작(Path Traversal) 취약점은 웹에서 허용되지 않는 파일이나

    디렉토리에 대한 접근이 가능할 경우에 탐지된다. 즉, 웹 서비스 이외의

    영역에 위치하는 정보에 대한 접근이 가능한 취약점으로 볼 수 있다. 위에

    서 탐지된 /mutillidae/ URL은 page 인자에 시스템 파일인 /etc/passwd

    파일을 읽을 수 있는 취약점이 존재한다. 일반적으로 웹 서버가 허용되지

    않는 임의의 파일을 유출하는 이러한 취약점을 "파일다운로드 취약점

    (arbitrary file download vulnerability)"이라고도 한다.

    OWASP-ZAP의 자동 취약점 기능에서 URL 인자의 변조를 통한 경로

    조작 취약점이 탐지되는 경우에는 원격에서 운영체제 명령어 실행이 가능

  • 4. OWASP-ZAP

    75

    한 원격파일삽입(RFI; remote file inclusion)이나 내부파일삽입(LFI;

    local file incluseion) 취약점도 포함하고 있을 가능성이 있으므로 추가

    점검이 필요하다. 이는 OWASP-ZAP이 경로조작 취약점을 점검하면서

    텍스트 파일을 표본으로하여 점검하기 때문이다(예: /etc/passwd). 그러나

    PHP 등과 같은 웹 스크립트 언어에서는 스크립트 자체를 삽입할 수 있으

    므로 파일삽입(file inclusion)이 가능한 지의 여부는 대부분 수동으로 추

    가점검을 수행하여야 한다.

    위의 웹 브라우저 화면에서는 경로조작 취약점에 의해서 웹이 접근할

    수 없는 경로에 위치하는 /etc/passwd 파일을 열람할 수 있는 취약점을

    증빙하고 있다. 홈페이지 화면에서 시스템 내부 파일을 접근할 수 있으므

    로 다양한 파일을 원격에서 읽을 수 있으므로 공격자에게는 매우 유용한

    정보를 제공할 수 있다. 이 취약점만으로도 공격자는 2차 공격에 유용하게

    활용할 수 있는 민감한 시스템 정보들을 유출할 수 있다.

  • 76

    도구에 의한 취약점 자동 점검에서 경로조작(Path Traversal)과 파일

    삽입(File Inclusion) 취약점을 구분하기란 쉽지 않다. 경로조작은 단순히

    시스템 내부 파일을 읽을 수 있는 약점이다. 반면 파일삽입 취약점은 시스

    템의 내부 파일을 읽어 들여서 그 속에 스크립트 프로그램 코드가 존재할

    경우 이를 실행한 결과를 출력하는 취약점이다. 위험도 면에서 파일삽입

    취약점이 훨씬 크다고 할 수 있다. 따라서 ZAP에 의해 경로조작으로 탐지

    된 URL에 대해서는 추가적으로 수동점검을 통해 내부 파일 삽입(LFI:

    local file inclusion) 공격이나 원격 파일 삽입(RFI: remote file

    inclusion) 공격이 가능한 지의 여부를 확인하여야 한다.

    원격 파일삽입 취약점의 경우에는 별도의 파일업로드 없이 원격에 위치

    하는 스크립트 코드를 실행할 수 있게 되므로 매우 위험하다. 반면 내부

    파일삽입 취약점의 경우에는 공격자가 원하는 스크립트 코드를 포함하는

    파일을 공격하고자 하는 서버에 업로드하여야 공격에 성공할 수 있다. 파

  • 4. OWASP-ZAP

    77

    일 업로드 기능이 제공되지 않는 웹 사이트의 경우에는 스크립트 코드를

    포함하는 URL을 만들어서 오류를 발생시켜서 웹 서버의 오류 로그파일

    (예: 아파치 웹 서버의 경우 /var/log/apache2/error.log)을 LFI에 악용하

    는 등의 편법을 사용할 수도 있다.

    여기서 경로조작으로 탐지된 URL인 /mutillidae/?page=에서는 LFI 공

    격이 가능한 것을 위 그림에서 확인할 수 있다. 시스템 내부 파일인

    /var/www/cmd.gif 파일을 읽어서 시스템 명령인 id 실행결과를 출력해주

    는 화면을 확인할 수 있다. 경로조작으로 탐지된 /mutillidae/에서 LFI 취

    약점을 확인할 수 있는 세부 URL은 다음과 같다.

    /mutillidae/?page=/var/www/cmd.gif&cmd=id

    위의 예에서는 /var/www/cmd.gif 파일을 임의로 생성하여 내부 파일삽

    입 공격이 가능한 지를 점검하였다. 시험에 사용한 cmd.gif 파일은 확장자

    만 GIF이며 실제로는 아래와 같이 원격명령실행이 가능한 PHP 코드를 담

    고 있는 텍스트 파일이다.

    ��

    이 예에서처럼 LFI 공격이 위험한 것은 확장자의 구분이 필요하지 않다

    는 것이다. 예를 들어 첨부파일을 올릴 수 있는 기능이 존재한다면 - 대

    부분의 웹 사이트는 파일 올리기 기능을 제공하고 있다 - txt, jpg, gif,

    png, hwp 등과 같이 첨부파일로 허용이 되는 확장자를 사용하여 PHP 코

    드를 담은 파일을 올릴 수 있다. LFI 취약점이 확인된 URL에 해커가 업

  • 78

    로드한 파일의 위치를 입력하는 것만으로 내부 운영체제 명령을 실행할 수

    있게 된다. 파일을 업로드하여야 하므로 자동 취약점 점검 도구가 LFI 취

    약점을 탐지하는 경우는 드물지만 경로조작 취약점의 일부가 LFI 취약점

    을 내포할 수 있다는 점을 주의할 필요가 있다.

    경로조작(Path Traversal) 취약점으로 탐지된 또 다른 예를 살펴보자.

    위 그림에서 보여지는 URL은 /ghost/iframe.php이다. 이 URL은 page라

    는 인자에 입력되는 파일을 으로 뿌려주는 기능을 가지고 있으며

    OSWASP-ZAP에 의해 "/ghost/iframe.php?page=/etc/passwd"라는 점

    검 URL에서 시스템 파일인 /etc/passwd 파일의 내용을 화면에 출력하였

    다(점검 그림 생략).

    위 그림에서는 LFI 취약점 존재 여부를 판단하기 위하여 /mutillidae/의

    LFI 진단에 사용한 cmd.gif 파일의 상대적인 웹 경로인 ../cmd.gif를 page

  • 4. OWASP-ZAP

    79

    인자의 값으로 입력하였다. 또한 추가적으로 cmd 인자에 id 명령어를 전

    달함으로써 원격에서 시스템 명령어를 실행할 수 있게 된다는 것을 확인할

    수 있었다. 따라서 /ghost/iframe.php의 경우에도 OWASP-ZAP 스캐너

    는 경로조작(Path Traversal) 취약점으로 탐지하였지만 실제로는 이보다

    훨씬 심각한 내부 파일삽입(Local File Inclusion) 취약점을 내포하는 것

    으로 진단할 수 있다.

  • 80

    ■ 원격 파일삽입(Remote File Inclusion) 취약점

    위 그림은 OWASP-ZAP 스캐너가 원격 파일삽입(RFI: Remote File

    Inclusion)으로 탐지한 항목들을 보여주고 있다. 앞서 언급한 바와 같이

    RFI 취약점은 타 서버에 위치하는 파일을 읽어서 이를 스크립트 코드로

    처리하는 매우 위험한 취약점이다. 이러한 취약점이 실제로 존재할 경우에

    는 공격자가 원격에 위치하는 자신의 서버에서 작성한 코드를 공격대상 서

    버에서 실행할 수 있게 된다. RFI 취약점을 통해 서버를 공격하게 되면 원

    격에 위치하는 파일의 위치만이 접속 로그에 기록되기 때문에 해커의 입장

    에서는 자신의 공격행위를 은닉하기 매우 쉬워지는 장점이 있다.

  • 4. OWASP-ZAP

    81

    위 그림은 OWASP-ZAP 스캐너가 원격 파일삽입(RFI: Remote File

    Inclusion)으로 탐지한 URL을 웹 브라우저로 접속한 화면이다. URL은 점

    검 대상 서버인 www.test.re.kr이지만 브라우저에 출력된 내용은 구글의

    검색결과임을 볼 수 있다. 다른 사이트의 내용을 출력하는 이 예에서 알

    수 있듯이 RFI 취약점은 다른 방식의 공격에 악용할 수도 있다. 예를 들어

    정교하게 복제 및 변조한 로그인 페이지를 제작하여 피싱(Phishing)을 통

    해 기관내부자의 ID/PW를 탈취할 수 있다. 또 다른 가능성은 다른 홈페이

    지를 공격하는 데 있어서 IP 세탁 용도로 사용할 수 있다. 위의 예와 같은

    RFI 공격이 가능하게 되면 RFI의 원격 서버에 접속하는 IP는 모두 점검

    서버의 IP로 로그에 남기 때문에 IP 세탁이 가능하게 된다.

    경험적으로 볼 때 OWASP-ZAP이 탐지하는 RFI 취약점이 모두 정탐

    인 것은 아니다. 이는 기본적으로 스크립트코드를 포함하는 원격 페이지의

    코드 실행 여부를 프로그램이 판단하기는 쉽지 않기 때문에 다수의 오탐이

    발생하게 된다. OWASP-ZAP은 대상서버 이외의 페이지 내용을 출력하

  • 82

    면 RFI 취약점으로 판정하는 것으로 보인다. 따라서 RFI 취약점을 보다

    정확하게 진단하려면 추가적인 수동점검이 필요하다.

    위 그림은 원격 파일삽입(RFI) 취약점이 있다고 판정된 URL에 대해서

    실제 원격에 위치하는 스크립트 코드가 실행되는 지의 여부를 확인한 결과

    이다. 점검자는 자신이 소유하는 별도의 서버에 PHP 코드를 담은 파일을

    생성한다(http://192.168.58.168/passwd.txt). 이 취약점에서는 page 인

    자에 입력하는 문자열에 ".php"를 자동으로 붙이기 때문에 실제로는

    passwd.txt가 아니라 passwd.txt.php라는 파일을 만들어야 했다. 이 파일

    의 내용은 /etc/passwd 파일의 내용을 출력하는 PHP 코드를 담고 있으

    며 실제 내용은 다음과 같다.

  • 4. OWASP-ZAP

    83

    점검자는 취약점이 있는 page 인자에 이 URL을 제공함으로써 코드 실

    행 여부를 확인할 수 있다. 위 그림에서 볼 수 있듯이 원격에 위치하는 점

    검자의 PHP 코드가 점검서버에서 실행되어 RFI 취약점이 실제 존재하는

    것을 확인할 수 있었다.

    해커의 입장에서 이러한 RFI 취약점은 매우 큰 장점을 가진다. 그 하나

    는 공격대상 서버에 대해서 파일 업로드 등과 같은 직접적인 사전조작이

    필요 없다는 것이다. 자신이 소유한 장비에서 작성한 코드를 원격에서 실

    행하는 것이므로 다른 취약점에 비해서 편리한 장점이 있다. 또 다른 장점

    으로는 공격대상 서버에 공격행위가 남지 않기 때문에 공격과정을 은닉할

    수 있다는 장점이 있다. 대상 서버의 로그에는 RFI에 사용한 원격파일의

    URL만 남게 되며, 공격 후에 이 원격파일을 지우게 되면 공격행위에 대한

    흔적을 거의 완전하게 지울 수 있게 된다.

  • 84

    ■ 원격 운영체제 명령실행(Remote OS Command Injection Plugin) 취약점

    위 그림은 OWASP-ZAP이 원격 운영체제 명령 실행(Remote OS

    Command Injection Plugin) 취약점으로 탐지된 항목들을 보여주고 있다.

    원격 운영체제 명령 실행 취약점은 URL의 인자를 변조하여 OS가 제공하

    는 명령어를 웹 브라우저에 실행할 수 있는 취약점이다. 이 취약점은

    system(), passthru() 등과 같은 시스템 함수를 포함하는 웹 어플리케이

    션에서 URL 인자에 대한 검증이 제대로 이루어지 않을 경우에 발생한다.

    시스템 명령어를 웹 브라우저를 통해 원격에서 실행할 수 있으므로 "웹 쉘

    없는 웹 쉘" 취약점이라고 할 수 있다.

    탐지된 URL은 /ShelLOL/shell.php이며 inejct_string 인자에 "&cat

  • 4. OWASP-ZAP

    85

    /etc/passwd&" 문자열을 입력했을 경우에 취약점이 탐지된 것이다.

    위 그림은 원격 운영체제 명령 삽입(Remote OS Command Injection

    Plugin) 취약점으로 탐지된 URL을 웹 브라우저에서 실행한 화면이다. 취

    약한 URL인 /ShelLOL/shell.php의 inject_string 인자에 운영체제 명령어

    인 cat을 이용하여 /etc/passwd 파일의 내용을 출력하도록 한 결과이다

    (cat /etc/passwd).

  • 86

    ■ SQL Injection 취약점

    위 그림은 OWASP-ZAP이 MySQL 데이터베이스를 특정하여 SQL문

    삽입(SQL Injection) 취약점을 탐지한 항목들을 보여주고 있다. SQL문

    삽입 취약점은 데이터베이스 탈취 등에 악용될 소지가 크기 때문에 경우에

    따라서는 관리자 계정을 비롯한 사용자 정보 탈취나 민감한 내부 정보 유

    출에 악용될 위험성이 큰 취약점이다.

    위의 예에서 탐지된 URL은 /mutillidae/index.php이며 취약점이 발견

    된 URL 인자는 author이다. OWASP-ZAP이 공격 시에는 원래 author

    인자 값에 SQL문 "' UNION ALL select NULL --"을 덧붙여서 보냈으

    며, 그 결과 "The used SELECT statements have a different number

  • 4. OWASP-ZAP

    87

    of columns"라는 문장으로 판단했을 때 SQL문 인젝션 취약점이 발생한

    것으로 진단한 것이다.

    경험상 위의 예는 SELECT 문에 대한 언급으로 보아 SQL문 삽입 취

    약점으로 확정할 수 있다. 그러나 웹 취약점 스캐너가 탐지하는 SQL 인젝

    션 항목들은 이러한 문자열 기반의 진단결과가 많기 때문에 실제 취약점

    여부를 확정하기 위해서는 점검 경험이 다수 요구된다. 때에 따라서는 별

    도의 점검도구를 활용하기도 한다. 칼리 리눅스에는 sqlmap, sqlninja 등

    의 SQL문 삽입을 전문적으로 점검하는 별도의 도구들이 제공된다.

    위 그림은 SQL Injection - MySQL로 탐지된 URL에 대해서 별도의

    SQL문 삽입 탐지도구인 sqlmap을 실행하는 것을 보여준다. 이 도구는 칼

  • 88

    리 리눅스에 기본적으로 포함되어 있다.

    위 그림은 취약한 URL에 대하여 sqlmap을 실행한 결과를 보여준다.

    SQL문 삽입 취약점에 의해 데이터베이스 스키마가 노출되는 것을 볼 수

    있다. /mutillidae/index.php가 접속하는 데이터베이스 명은 nowasp이며

    page_hints, balloon_tips 등의 모든 테이블에 대한 컬럼 정보가 악의적인

    공격자에게 유출될 수 있음을 알 수 있다.

  • 4. OWASP-ZAP

    89

    위 그림은 OWASP-ZAP이 - DBMS를 특정할 수는 없으나 - SQL문

    삽입(SQL Injection) 취약점이 있을 것으로 추정되는 항목들을 보여주고

    있다. SQL 인젝션은 MySQL, Oracle, MSSQL 등과 같은 DBMS에 입력

    되는 SQL문을 조작하여 해커가 원하는 정보를 데이터베이스로부터 유출

    시키려는 것이 목적이다.

    크로스사이트스크립트(Cross-site Script) 취약점은 사용자의 입력이

    웹 브라우저 출력에 반영되는 것으로 판단할 수 있으나 DBMS의 처리과정

    단계를 하나 더 거치는 SQL 인젝션 취약점의 판단은 모호한 경우가 많다.

    SQL 인젝션의 판단 근거로는 점검자가 입력하는 SQL문이 DBMS에 의해

    서 처리되는 지의 여부를 기준으로 삼는 경우가 많다. 가장 일반적인 경우

    은 SQL에 입력될 URL 인자 값에 주석(', --, /*, # 등)을 강제로 삽입

  • 90

    하여 오류가 발생하는 지의 여부로부터 판단 근거를 삼을 수 있다. DBMS

    의 오류가 점검자에게 노출된다면 SQL 인젝션이 존재한다고 진단할 수

    있다. 정상적인 SQL 연산이 이루어지는 지를 확인할 수도 있다. 예를 들

    어 인자 값이 숫자 "1004"인 경우 이 값을 "1005-1"로 입력했을 때 동

    일한 결과를 반환한다면 SQL문 삽입 공격이 가능하다고 진단한다.

    OWASP-ZAP이 스캔 중에 탐지하는 SQL 인젝션의 경우에는 오탐이

    상당히 많은 편이다 - 이러한 현상은 ZAP뿐만 아니라 상용 스캐너에서도

    매우 높은 비율로 나타난다. SQL 인젝션으로 탐지된 3개의 URL을 선택

    하여 함께 살펴보고자 한다.

  • 4. OWASP-ZAP

    91

    위의 세 "SQL 인젝션으로 탐지된 페이지" 1, 2, 3은 OWASP-ZAP이

    SQL 인젝션 취약점이 있다고 탐지한 URL들을 웹 브라우저로 접속한 그

  • 92

    림이다. 세 URL 중에서 페이지 1과 2는 오탐으로 확인되었으며, SQL 인

    젝션 취약점이 발견되지 않았다. 반면 페이지 3은 SQL 인젝션이 존재하여

    데이터베이스 유출 가능성이 존재하였다.

    웹 브라우저로 확인하였을 경우에는 세 페이지 모두 SQL 인젝션이 존

    재하는 지를 판단하기란 매우 모호하다. 보다 정확한 판단을 위해서는

    SQL 인젝션을 전문으로 진단하는 보조도구를 활용하는 것이 편리하다.

  • 4. OWASP-ZAP

    93

    ■ 오류노출(Application error disclosure) 취약점

    위 그림은 OWASP-ZAP이 탐지한 어플리케이션 오류노출(Application

    error disclosure) 취약점 항목을 보여준다. 이 항목의 위험도는 중(中)으

    로 판단한다. 대부분의 웹 취약점 스캐너에서 직접적인 공격이 가능한 경

    우에는 위험도 상으로 분류한다. 반면 직접적인 공격은 어려우나 위험도

    상의 취약점 공격에 도움을 줄 수 있는 취약점들을 위험도 중(中), 하(下)

    로 분류한다.

    웹 어플리케이션 오류노출 취약점은 400 (Bad Request), 401

    (Authorization Required), 403 (Forbidden), 404 (Not Found), 500

    (Internal Server Error) 등과 같이 웹 서버에서 오류가 발생할 경우 이

  • 94

    에 대한 상세한 정보가 노출되는 경우에 탐지된다.

    위 그림은 오류노출(Application error disclosure) 취약점으로 탐지된

    URL을 웹 브라우저로 접속한 화면이다. 웹 서버 소프트웨어인 Apache

    Tomcat/6.0.24의 노출(제목, 및 하단), stacktrace(페이지 하단 - 현재

    그림에서는 보이지 않음)를 통해 서비스의 내부 구조를 일부나마 파악할

    수 있다.

    공격자의 입장에서는 PHP 기반의 현재 페이지에서 아파치 톰캣이 운영

    되는 것을 파악했으므로 별도의 포트(대부분의 경우 8080)에서 톰캣 접속

    가능성이 있다는 것을 인지하게 된다. 이에 따라 단순한 오류 노출에 의해

    서 해커는 새로운 공격 경로를 추가할 수 있으므로 공격 성공 확률이 상승

    할 것이다.

  • 4. OWASP-ZAP

    95

    ■ 디렉토리 나열(Directory Browsing) 취약점

    위 그림은 OWASP-ZAP에 의해 디렉토리 나열(Directory Browsing

    또는 Directory Indexing) 취약점으로 탐지된 항목들이다. 디렉토리 나열

    취약점은 직접적인 공격 방법은 없으나 디렉토리 내의 파일 목록을 노출시

    킴으로써 서비스 운영자가 노출을 원하지 않았던 파일들이 노출되고 서비

    스 구조 파악에 도움을 줌으로써 추가 공격에 도움을 줄 수 있는 유용한

    정보를 제공한다.

  • 96

    위 그림은 디렉토리 나열 취약점으로 탐지된 URL을 웹 브라우저로 접

    속한 화면이다. 내부 파일 목록 및 디렉토리와 최종 수정일, 크기 정보를

    제공한다. 일부 웹 서비스에서 디렉토리 나열 취약점을 통해 웹 서버 소프

    트웨어의 버전 정보를 노출시키는 경우도 있다.

  • 4. OWASP-ZAP

    97

    ■ HttpOnly 미설정 취약점

    위 그림은 세션 쿠키에 대해서 HttpOnly 속성이 설정되지 않았다는 취

    약점 항목이다. HttpOnly 미설정 세션(Cookie set without HttpOnly

    flag) 취약점이 존재하면 쿠키에 저장된 세션 ID 값을 자바스크립트 등이

    읽을 수 있다. HttpOnly가 설정된 쿠키 값은 클라이언트(브라우저)와 서

    버 간의 통신 시에만 사용하고 그 이외에의 프로그램이 접근할 수 없다.

    세션을 탈취하기 위한 XSS 공격은 자바스크립트를 이용하여 쿠키값에 접

    근하는 데 HttpOnly가 설정되면 XSS에 의한 세션탈취 가능성을 원천적으

    로 차단할 수 있다.

  • 98

    ■ 사설IP 노출(Private IP Disclosure) 취약점

    위 그림은 점검한 웹 페이지 내에서 사설 IP가 탐지된 항목들을 보여준

    다. 사설IP 노출(Private IP disclosure) 취약점은 그 자체로는 직접적인

    공격 대상은 아니다. 그러나 내부망에 대한 정보를 제공할 수 있으므로 추

    가적인 공격에 악용될 소지가 있다. 실제 내부망에서 사용하는 IP가 웹 서

    비스와 같은 외부망 서비스에서 노출되는 것은 지양해야 한다.

  • 집 필 진

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

    2. 후 원 : 미래창조과학부

    본 가이드는 공개용 도구를 이용하여 기본적인 홈페이지 취약점 점검을

    수행할 수 있도록 하기 위하여 한국과학기술정보연구원의 연구원들이 참여

    하여 제작되었습니다.

    2015년 1월

    주관연구책임자 : 박학수 (책임연구원)

    참 여 연 구 원 : 김진숙 (선임연구원)

    정기문 (선임연구원)

  • 공개도구를 이�