검수요청.png검수요청.png

ZAP

위키원
dlensk99 (토론 | 기여)님의 2021년 1월 8일 (금) 15:44 판
이동: 둘러보기, 검색
ZAP
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: Structure Query Language)[4]나 운영체제 명령을 주입하는 등 서버를 목표로 하는 입력 기반 취약점이 있고, 크로스 사이트 스크립트(XSS) 같은 클라이언트 측을 목표로 하는 입력 기반 취약점 있다. 그리고 웹 애플리케이션과 브라우저 중간에서 비밀번호나 쿠키를 암호화하지 않고 전송하는 등 요청과 응답 주기를 조사해서 식별할 수 있는 취약점이 있다.[5]

스캐너

웹 스캐너가 찾는 취약점 유형에는 한계가 있다. 다음 항목들은 자동화된 스캐너가 발견하지 못하는 취약점이다.

  • 취약한 비밀번호
  • 의미 있는 매개변수 이름
  • 저장된 SQL Injection(2차 SQL Injection)
  • 여러 단계의 저장된 사이트 간 스크립팅(XSS)
  • 강제 브라우징(디렉터리와 파일을 무작위로 공격한다.)
  • 세션 공격
  • 논리 결함[5]

사용법

간단 사용법

  • 빠른 시작에 대상 사이트 URL을 넣어서 실행한다.
  • Sites 탭에 탐색 된 페이지 주소가 나타난다.
  • Alert 탭에 사이트의 취약점 종류와 해당 페이지 정보가 나타난다.[6]

기본 사용법

  • 브라우저 프록시 설정을 통해 방문하는 사이트의 취약점을 분석한다.
  • 로그인 세션이 필요한 페이지를 설정할 수 있다.
프록시 설정
ZAP Tools에서 Options에 들어가고, Local proxy에서 Port를 8082로 설정한다.
브라우저와 ZAP의 프록시 설정을 마치면, 브라우저에서 호출되는 모든 URL에 대해 보안 취약점을 분석한다.[6]
로그인 설정
ZAP에서 새로운 세션을 시작한다.
브라우저에서 로그인 페이지로 이동한 후 로그인을 한다.
세션을 위해서 컨텍스트를 설정한다.
대상 사이트를 선택하고 Include in Context에서 1을 선택한다.
확인 후 닫는다.
로그인 처리 주소 선택을 한다. Flag as Context > 1:Form-based Auth Login request 선택
Authentication 메뉴에서 Username, Password의 파라미터를 지정한다.
User 메뉴에 로그인할 사용자의 정보를 입력한다.
Authentication 메뉴로 돌아가면 파라미터의 값이 변경된 것을 확인할 수 있다.[6]
취약점 스캔
브라우저에서 가능한 모든 링크를 클릭한다.
ZAP에 사이트 주소들이 수집되고, 수집된 URL을 기준으로 취약점을 스캔한다. Attack > Active Scan all in Scope
Active Scan 탭이 열리면, 대상 사이트를 선택하고, Start Active Scan 아이콘을 누른다.
Show scan progress details 아이콘을 누르면 현재 진행 상황을 볼 수 있다.[6]
취약점 리포트
취약점이 있는 경우, URL 앞에 4단계의 깃발이 표시된다.
깃발이 붉은색일수록 위험한 취약점을 뜻한다.
Alerts 탭에 종류별로 취약점과 해당 페이지 목록이 나타난다.
항목 선택시에 보여지는 매개변수와 공격값, 설명과 해결방법, 참조 사이트 등을 통해서 취약점을 보완한다.[6]

웹 취약점 점검 기준

정보수집

  • 백업 파일 공개: 웹 서버에서 파일 백업을 공개한다. 이것의 해결책은 제한된 URL과 스크립트 또는 파일에 대한 액세스에 적절한 제어 권한을 적용하면 된다.[7]
  • 쿠키 여유 감지기: 반복된 GET 요청은 매번 다른 쿠키를 삭제한 후 모든 쿠키를 사용하여 세션을 안정화하고, 응답을 원래 기준과 비교한다.[8]
  • 디렉터리 찾아보기: 디렉터리의 목록을 볼 수 있다. 숨겨진 스크립트가 표시될 수 있고, 백업 소스 파일 등을 포함해 민감한 정보를 읽기 위해 액세스 할 수 있다. 이것의 해결책은 디렉터리 검색을 비활성화하는 것이다.[9]
  • ELMAH 정보 유출: 오류 로깅 모듈 및 처리기(ELMAH[elmah.axd])HTTP 모듈을 사용할 수 있다. 이 모듈은 귀중한 정보를 유출할 수 있다. 이것의 해결책은 ELMAH가 실제로 필요한지 고려하고, 그렇지 않은 경우에는 비활성화한다.[10]
  • 하트블리드 오픈 소스 암호화 라이브러리 취약점: 1.0.1g 이전의 OpenSSL 1.0.1에서 구현된 전송계층보안(TLS)은 패킷을 제대로 처리하지 못해 원격 공격자가 버퍼 오버 읽기를 유발하는 제작된 패킷을 통해 중요한 정보를 가져와 공개할 수 있다. 이것을 해결하기 위해서는 OpenSSL 1.0.1g 이상으로 업데이트하면 된다. 또는 HTTPS 인증서를 재발급하면 된다. [11][12]

...

그 외 여러 가지

  • 파일에서 데이터를 로드하는 예제 활성 스캔 규칙: 사용자가 편집할 수 있는 파일에서 문자열을 불러오는 예제 활성 스캔 규칙을 구현한다.[13]
  • 외부 리디렉션: URL 리디렉터는 요청을 대체 리소스로 전달하기 위해 웹 사이트에서 사용하는 일반적인 기능을 말한다. 다양한 이유로 수행될 수 있고, 이전 위치에서 리소스를 요청하는 사용자의 기능이 중단되는 것을 방지하기 위해 수행된다. URL 리디렉터가 직접적인 보안 취약점을 반드시 나타내는 것은 아니지만, 공격자가 실제 대상이 아닌 다른 사이트로 이동하고 있다고 피해자를 믿게 하여 악용될 수 있다. 이것의 해결책은 엄격하게 사양을 준수하는 허용 가능한 입력 목록을 사용한다. 사양을 준수하지 않는 입력을 거부하거나, 준수하는 것으로 변환한다.[14]
  • 일반 패딩 Oracle: 공격자가 암호화된 문자열에서 패딩을 조작할 수 있어 '패딩 오라클' 취약성을 나타내는 오류 메시지를 생성할 수 있다. 이러한 취약점은 암호화를 부적절하게 사용하고 있는 모든 프레임 워크 또는 응용 프로그램에 영향을 준다. 이것의 해결책은 영향을 받는 소프트웨어를 업데이트하거나, 암호해독을 시도하기 전에 데이터의 유효성을 제대로 검사한다.[15]
  • POST를 위해 GET: 원래는 POST로 관찰된 요청을 GET으로 수락되었다. 이 문제는 보안 취약점을 그 자체로 나타내지는 않지만, 다른 공격을 단순화 할 수 있다. 해결책은 POST가 예상되는 곳에 POST만 허용되고 있는지를 확인하는 것이다.[16]
  • HTTP 전용 사이트: 사이트는 HTTPS가 아닌 HTTP에서만 제공된다. 해결책은 SSL(https)을 사용하도록 애플리케이션 서버 또는 웹을 구성하는 것이다.[17]

...

주입

  • 고급 SQL 주입: 첨부된 페이로드를 이용하여 SQL 주입이 가능하다. 해결책에는 클라이언트 측 유효성 검사가 있더라도 입력을 신뢰하지 않고, 서버의 모든 데이터 확인을 입력하고, 저장프로시저의 쿼리에 문자열을 연결하지 않는 것이 있다.[18]
  • 버퍼 오버플로우: 이 오류는 백그라운드 웹 프로세스의 메모리 공간을 덮어서 쓰는 것이 특징이다. IP(Instruction Pointer), BP(Base Pointer) 및 기타 레지스터 값을 덮어쓰면 예외가, 세그먼트 오류 및 기타 프로세스 오류가 발생한다. 이러한 오류가 예기치 않은 방식으로 애플리케이션의 실행을 종료한다. 버퍼 오버 플로우의 해결책은 적절한 리턴 길이 검사를 통해 백그라운드 프로그램을 다시 작성하는 것이다.[19]
  • CRLF 주입: 이것을 통해 쿠키를 설정을 할 수 있고, 임의의 HTTP 응답 헤더를 설정할 수 있다. 이것의 해결책으로는 제출 된 매개 변수를 주의 깊게 입력하고, CRLF를 필터링하여 CRLF를 주입하지 않는 것이다.[20]
  • 교차 사이트 스크립칭(영구): 공격자가 제공한 코드를 사용자의 브라우저 인스턴스에 반향하는 공격 기술이다. 코드는 일반적으로 HTML/자바스크립트로 작성되지만, 기타 브라우저 지원 기술로 확장될 수 있다. 해결책은 아키텍쳐 및 디자인이 취약점이 발생하지 않도록 하거나 쉽게 피할 수 있는 구조를 제공하는 검증된 프레임 워크나 라이트버리를 사용하고, 다른 웹 페이지로 출력 될 데이터, 특히 외부입력에서 수신된 데이터의 경우 모든 문자에 대해 적절한 인코딩을 사용하는 것이다.[21]
  • 형식 문자열 오류: 제출된 입력 문자열의 데이터가 응용 프로그램에서 명령으로 평가되면 형식 문자열 오류가 발생한다. 이것을 해결하기 위해 잘못된 문자열을 삭제하여 백그라운드 프로그램을 다시 작성해야한다.[22]
  • 정수 오버플로 오류: 입력 스트림에서 확인되지 않은 정수가 컴파일된 프로그램 내에서 사용되는 경우 정수 오버플로 오류의 조건이 존재한다. 이것을 해결하려면 오버 플로우를 방지하고, 0 오류로 나오기 위해 입력되는 정수의 크기를 확인하여 백그라운드 프로그램을 다시 작성해야 한다.[23]

...

각주

  1. 1.0 1.1 1.2 OWASP ZAP 위키피디아 - https://en.wikipedia.org/wiki/OWASP_ZAP
  2. 2.0 2.1 2.2 2.3 2.4 2.5 2.6 OWASP ZAP - DevOps를 위한 Self웹취약점 점검 도구 소개〉, 《오픈나루》
  3. zaproxy, 〈zaproxy / zaproxy〉, 《깃허브》
  4. SQL 위키백과 - https://ko.wikipedia.org/wiki/SQL
  5. 5.0 5.1 사이테일, 〈웹 애플리케이션 사전조사 및 스캐닝(2) - ZAP(Zed Attack Proxy)〉, 《티스토리》, 2015-04-14
  6. 6.0 6.1 6.2 6.3 6.4 Zed Attack Proxy(ZAP)〉, 《OKdevTV》
  7. 백업 파일 공개〉, 《OWASP ZAP》
  8. 쿠키 여유 감지기〉, 《OWASP ZAP》
  9. 디렉토리 찾아보기〉, 《OWASP ZAP》
  10. ELMAH 정보 유출〉, 《OWASP ZAP》
  11. [1]〉, 《OKdevTV》
  12. Heartbleed OpenSSL 취약성〉, 《OWASP ZAP》
  13. 활성 스캔 규칙-알파〉, 《OWASP ZAP》
  14. 외부 리디렉션〉, 《OWASP ZAP》
  15. 일반 패딩 Oracle〉, 《OWASP ZAP》
  16. POST를 위해 GET〉, 《OWASP ZAP》
  17. HTTP 전용 사이트〉, 《OWASP ZAP》
  18. 고급 SQL 주입〉, 《OWASP ZAP》
  19. 버퍼 오버 플로우〉, 《OWASP ZAP》
  20. CRLF 주입〉, 《OWASP ZAP》
  21. 교차 사이트 스크립칭(영구)〉, 《OWASP ZAP》
  22. 문자열 오류〉, 《OWASP ZAP》
  23. 정수 오버플로 오류〉, 《OWASP ZAP》

참고자료

같이 보기


  검수요청.png검수요청.png 이 ZAP 문서는 보안에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.