ZAP
ZAP(잽)이란 "Zed Attack Proxy"의 약자로서, 오픈 소스 웹 애플리케이션 보안 스캐너이다.[1] OWASP ZAP이라고도 한다. 간단히 요약하면 개발단계에서 손쉽게 보안 취약점을 발견하고 조치할 수 있도록 하는 오픈소스 제품이다.[2] 이 프로젝트는 OWASP(Open Web Application Security Project) 프로젝트 중 하나이고, 플래그 십 상태를 받았다.[1]
목차
개요
OWASP ZAP는 세계에서 가장 인기있는 무료 보안 도구 중 하나이며 오픈소스로 공개되어 있으며 깃허브에서 해당 파일을 받을 수 있다. 여러 국가에서 프로그래머들이 자발적으로 유지보수를 지원하고 있기 때문에 유연성과 확장성이 뛰어나다는 장점이 있다. ZAP는 브라우저와 웹 애플리케이션 사이에 전송된 메시지를 가로채고 검사할 수 있도록 테스터의 브라우저와 웹 애플리케이션 사이에 있으며 중간자 역할을 수행한다. 필요한 경우 내용을 수정한 다음 그 패킷들을 목적지에 전달할 수 있다. 2010년에 1.0.0 버전이 처음 출시됐으며 2020년 현재는 2.9.0 버전이 출시되었다. 출시된 이래로 ZAP 사용량은 꾸준하게 증가해 왔으며 2020년 3월 기준 ZAP는 85,000회 이상 다운로드 되었고 ZAP Docker 이미지는 220,000회 이상 받아졌으면 100만번 이상 실행되었다. ZAP 데스크탑의 국가별 사용량 순위는 1위가 미국, 2위가 인도, 3위가 일본이며, ZAP 데몬의 국가별 사용량 순위는 1위가 미국, 2위가 호주, 3위가 독일이다.[3]
2011년에는 올해의 툴 스미스 툴로 뽑혔다.ToolsWatch.org 독자가 2013년에는 최고의 보안도구로, 2014년 최고의 보안도구 2위로 뽑았다. 2015년 Bossie Award에서 오픈 소스 네트워킹 및 보안 소프트웨어로 언급 된 OWASP 도구 중 하나이다.[1]
기능
프록시
- 애플리케이션과 브라우저간의 HTTP 통신 내용을 저장한다.
- 보안 진단을 위해 요청을 보내면 응답 데이터를 시각화 한다.[2]
스파이더
- 전체 웹 애플리케이션에 대한 정보를 수집한다.
- 비공개 파일이나 디렉토리의 유무를 확인한다.[2]
정적/동적 검색
- 다양한 취약점을 자동으로 감지한다.[2]
Fuzzer
- 기본적인 정적/동적 스캔으로는 검출이 어려운 취약점을 수동으로 검색한다.[2]
애드온 Script
- 애플리케이션 고유의 기능에 대응하는 진단 도구를 작성한다.[2]
ZAP API
- 검색과 스파이더 등 외부에서 다양한 기능을 조작하여 진단 작업을 완벽하게 자동화 한다.[2]
특징
- 유연성 & 확장성 :
웹 애플리케이션의 취약점
- SQL이나 운영체제 명령을 주입하는 등 서버를 목표로 하는 입력 기반 취약점
- 크로스 사이트 스크립트(XSS)같은 클라이언트 측을 목표로 하는 입력 기반 취약점
- 웹 애플리케이션과 브라우저 중간에서 비밀번호나 쿠키를 암호화하지 않고 전송하는 등 요청과 응답 주기를 조사해서 식별할 수 있는 취약점[4]
스캐너가 발견하지 못하는 취약점
- 취약한 비밀번호
- 의미있는 매개변수 이름
- 저장된 SQL Injection(2차 SQL Injection)
- 여러 단계의 저장된 XSS
- 강제 브라우징(디렉토리와 파일을 무작위로 공격한다.)
- 세션 공격
- 논리 결함[4]
OWASP ZAP 사용법
간단 사용법
- 빠른 시작에 대상 사이트 URL을 넣어서 실행한다.
- Sites 탭에 탐색된 페이지 주소가 나타난다.
- Alert 탭에 사이트의 취약점 종류와 해당 페이지 정보가 나타난다.[5]
기본 사용법
- 브라우저 프록시 설정을 통해 방문하는 사이트의 취약점을 분석한다.
- 로그인 세션이 필요한 페이지를 설정할 수 있다.
- 프록시 설정
- ZAP Tools에서 Options에 들어가고, Local proxy에서 Port를 8082로 설정한다.
- 브라우저와 ZAP의 프록시 설정을 마치면, 브라우저에서 호출되는 모든 URL에 대해 보안 취약점을 분석한다.[5]
- 로그인 설정
- ZAP에서 새로운 세션을 시작한다.
- 브라우저에서 로그인 페이지로 이동한 후 로그인을 한다.
- 세션을 위해서 컨텍스트를 설정한다.
- 대상 사이트를 선택하고 Include in Context에서 1을 선택한다.
- 확인을 한 후 닫는다.
- 로그인 처리 주소 선택을 한다. Flag as Context > 1:Form-based Auth Login request 선택
- Authentication 메뉴에서 Username, Password의 파라미터를 지정한다.
- User 메뉴에 로그인 할 사용자의 정보를 입력한다.
- Authentication 메뉴로 돌아가면 파라미터의 값이 변경된 것을 확인할 수 있다.[5]
- 취약점 스캔
- 브라우저에서 가능한 모든 링크를 클릭한다.
- ZAP에 사이트 주소들이 수집되고, 수집된 URL을 기준으로 취약점을 스캔한다. Attack > Active Scan all in Scope
- Active Scan 탭이 열리면, 대상 사이트를 선택하고, Start Active Scan 아이콘을 누른다.
- Show scan progress details 아이콘을 누르면 현재 진행상황을 볼 수 있다.[5]
- 취약점 리포트
- 취약점이 있는 경우, URL 앞에 4단계의 깃발이 표시된다.
- 깃발이 붉은색일수록 위험한 취약점을 뜻한다.
- Alerts 탭에 종류별로 취약점과 해당 페이지 목록이 나타난다.
- 항목 선택시에 보여지는 매개변수와 공격값, 설명과 해결방법, 참조 사이트 등을 통해서 취약점을 보완한다.[5]
웹 취약점 점검 기준
정보수집
- 백업 파일 공개: 웹 서버에서 파일 백업을 공개한다. 이것의 해결책은 제한된 URL과 스크립트 또는 파일에 대한 액세스에 적절한 제어 권한을 적용하면 된다.[6]
- 쿠키 여유 감지기: 반복 된 GET 요청은 매번 다른 쿠키를 삭제 한 후 모든 쿠키를 사용하여 세션을 안정화하고, 응답을 원래 기준과 비교한다.[7]
- 디렉토리 찾아보기: 디렉토리의 목록을 볼 수 있다. 숨겨진 스크립트가 표시될 수 있고, 백업 소스 파일 등을 포함해 민감한 정보를 읽기 위해 액세스 할 수 있다. 이것의 해결책은 디렉터리 검색을 비활성화 하는 것이다.[8]
- ELMAH 정보 유출: 오류 로깅 모듈 및 처리기(ELMAH[elmah.axd])HTTP 모듈을 사용할 수 있다. 이 모듈은 귀중한 정보를 유출할 수 있다. 이것의 해결책은 ELMAH가 실제로 필요한지 고려하고, 그렇지 않은 경우에는 비활성화한다.[9]
- 하트블리드 오픈 소스 암호화 라이브러리 취약점: 1.0.1g 이전의 OpenSSL 1.0.1에서 구현 된 전송계층보안(TLS)은 패킷을 제대로 처리하지 못해 원격 공격자가 버퍼 오버 읽기를 유발하는 제작된 패킷을 통해 중요한 정보를 가져와 공개할 수 있다. 이것을 해결하기 위해서는 OpenSSL 1.0.1g 이상으로 업데이트 하면 된다. 또는 HTTPS 인증서를 재발급하면 된다. [10][11]
...
그 외 여러가지
- 파일에서 데이터를 로드하는 예제 활성 스캔 규칙: 사용자가 편집할 수 있는 파일에서 문자열을 불러오는 예제 활성 스캔 규칙을 구현한다.[12]
- 외부 리디렉션: URL 리디렉터는 요청을 대체 리소스로 전달하기 위해 웹 사이트에서 사용하는 일반적인 기능을 말한다. 다양한 이유로 수행 될 수 있고, 이전 위치에서 리소스를 요청하는 사용자의 기능이 중단되는 것을 방지하기 위해 수행된다. URL 리디렉터가 직접적인 보안 취약점을 반드시 나타내는 것은 아니지만, 공격자가 실제 대상이 아닌 다른 사이트로 이동하고 있다고 피해자를 믿게하여 악용될 수 있다. 이것의 해결책은 엄격하게 사양을 준수하는 허용 가능한 입력 목록을 사용한다. 사양을 준수하지 않는 입력을 거부하거나, 준수하는 것으로 변환한다.[13]
- 일반 패딩 Oracle: 공격자가 암호화 된 문자열에서 패딩을 조작할 수 있어 '패딩 오라클' 취약성을 나타내는 오류 메세지를 생성할 수 있다. 이러한 취약점은 암호화를 부적절하게 사용하고 있는 모든 프레임 워크 또는 응용 프로그램에 영향을 준다. 이것의 해결책은 영향을 받는 소프트웨어를 업데이트 하거나, 암호해독을 시도하기 전에 데이터의 유효성을 제대로 검사한다.[14]
- POST를 위해 GET: 원래는 POST로 관찰된 요청을 GET으로 수락되었다. 이 문제는 보안 취약점을 그 자체로 나타내지는 않지만, 다른 공격을 단순화 할 수 있다. 해결책은 POST가 예상되는 곳에 POST만 허용되고 있는지를 확인하는 것이다.[15]
- HTTP 전용 사이트: 사이트는 HTTPS가 아닌 HTTP에서만 제공된다. 해결책은 SSL(https)를 사용하도록 애플리케이션 서버 또는 웹을 구성하는 것이다.[16]
...
주입
- 고급 SQL 주입: 첨부된 페이로드를 이용하여 SQL 주입이 가능하다. 해결책에는 클라이언트 측 유효성 검사가 있더라도 입력을 신뢰하지 않고, 서버의 모든 데이터 확인을 입력하고, 저장프로시저의 쿼리에 문자열을 연결하지 않는 것이 있다.[17]
- 버퍼 오버 플로우: 이 오류는 백그라운드 웹 프로세스의 메모리 공간을 덮어서 쓰는 것이 특징이다. IP(Instruction Pointer), BP(Base Pointer) 및 기타 레지스터 값을 덮어쓰면 예외가, 세그먼트 오류 및 기타 프로세스 오류가 발생한다. 이러한 오류가 예기치 않은 방식으로 애플리케이션의 실행을 종료한다. 버퍼 오버 플로우의 해결책은 적절한 리턴 길이 검사를 통해 백그라운드 프로그램을 다시 작성하는 것이다.[18]
- CRLF 주입: 이것을 통해 쿠키를 설정을 할 수 있고, 임의의 HTTP 응답 헤더를 설정할 수 있다. 이것의 해결책으로는 제출 된 매개 변수를 주의 깊게 입력하고, CRLF를 필터링하여 CRLF를 주입하지 않는 것이다.[19]
- Cross Site Scripting(Persistent)
- Cross Site Scripting(Persistent) - Prime
- Cross Site Scripting(Persistent) - Spider
- Cross Site Scripting(Reflected)
...
각주
- ↑ 1.0 1.1 1.2 OWASP ZAP 위키피디아 - https://en.wikipedia.org/wiki/OWASP_ZAP
- ↑ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 〈OWASP ZAP - DevOps를 위한 Self웹취약점 점검 도구 소개〉, 《오픈나루》
- ↑ zaproxy, 〈zaproxy / zaproxy〉, 《깃허브》
- ↑ 4.0 4.1 사이테일, 〈웹 애플리케이션 사전조사 및 스캐닝(2) - ZAP(Zed Attack Proxy)〉, 《티스토리》, 2015-04-14
- ↑ 5.0 5.1 5.2 5.3 5.4 〈Zed Attack Proxy(ZAP)〉, 《OKdevTV》
- ↑ 〈백업 파일 공개〉, 《OWASP ZAP》
- ↑ 〈쿠키 여유 감지기〉, 《OWASP ZAP》
- ↑ 〈디렉토리 찾아보기〉, 《OWASP ZAP》
- ↑ 〈ELMAH 정보 유출〉, 《OWASP ZAP》
- ↑ 〈[1]〉, 《OKdevTV》
- ↑ 〈Heartbleed OpenSSL 취약성〉, 《OWASP ZAP》
- ↑ 〈활성 스캔 규칙-알파〉, 《OWASP ZAP》
- ↑ 〈외부 리디렉션〉, 《OWASP ZAP》
- ↑ 〈일반 패딩 Oracle〉, 《OWASP ZAP》
- ↑ 〈POST를 위해 GET〉, 《OWASP ZAP》
- ↑ 〈HTTP 전용 사이트〉, 《OWASP ZAP》
- ↑ 〈고급 SQL 주입〉, 《OWASP ZAP》
- ↑ 〈버퍼 오버 플로우〉, 《OWASP ZAP》
- ↑ 〈CRLF 주입〉, 《OWASP ZAP》
참고자료
- OWASP ZAP 위키피디아 - https://en.wikipedia.org/wiki/OWASP_ZAP
- zaproxy, 〈zaproxy / zaproxy〉, 《깃허브》
- 〈OWASP ZAP - DevOps를 위한 Self웹취약점 점검 도구 소개〉, 《오픈나루》
- 사이테일, 〈웹 애플리케이션 사전조사 및 스캐닝(2) - ZAP(Zed Attack Proxy)〉, 《티스토리》, 2015-04-14
- 〈Zed Attack Proxy(ZAP)〉, 《OKdevTV》
같이 보기