1. 웹 취약점 점검 도구 검토
웹 취약점 점검 도구 검토
도구 이름 | 설명 | 주요 기능 | Github Star 수 | Fork 수 | 최근 Commit | 유지보수 상태 |
OWASP ZAP | OWASP에서 제공하는 웹 애플리케이션 취약점 테스트 도구 | 자동/수동 스캔, 다양한 플러그인 지원, 사용자 친화적 인터페이스 | 11.4K | 2.6K | 2024-06-05 | 매우 활발 |
Nikto | 웹 서버를 스캔하여 잠재적 취약점을 찾는 경량 도구 | 6700개 이상의 위험 항목 탐지, 미설치 소프트웨어 확인 | 6.5K | 1.4K | 2024-04-19 | 중간 |
Wapiti | 웹 애플리케이션을 크롤링하여 취약점을 탐지하는 도구 | SQL 인젝션, XSS, 파일 인클루전 탐지 | 1.2K | 300 | 2024-02-10 | 중간 |
Arachni | 고성능 웹 애플리케이션 보안 스캐너 | 분산 스캔, 다양한 취약점 탐지, 대규모 애플리케이션 점검 | 3.9K | 570 | 2022-01-15 | 낮음 |
Vega | 그래픽 사용자 인터페이스를 제공하는 웹 애플리케이션 보안 스캐너 | XSS, SQL 인젝션 탐지, 사용자 친화적 인터페이스 | 1.2K | 250 | 2020-08-14 | 낮음 |
w3af | 웹 애플리케이션 보안 점검을 위한 프레임워크 | 다양한 플러그인을 통한 취약점 탐지 및 익스플로잇 | 4.4K | 1.1K | 2024-04-01 | 활발 |
•
오픈 소스 웹 취약점 점검 도구 중에 활발한 커뮤니티 환경의 대상을 선정합니다.
◦
OWSAP ZAP, Nikto, w3af(python 종속성 이슈로 설치에 어려움), Wapiti)
테스트 환경
Name | Type | IP | Install Tools |
dvwa-test | VM | 10.10.12.178 | DVWA, Juice Shop, bWAPP |
vulnerability-scanning | VM | 10.10.12.179 | OWASP ZAP, Nikto, w3af, Wapiti |
테스트용 취약점 웹 애플리케이션
Num | Web Application | Description | URL |
1 | Damn Vulnerable Web Application (DVWA) | 다양한 웹 취약점을 학습하고 테스트할 수 있는 매우 취약한 웹 애플리케이션입니다. | |
2 | OWASP Juice Shop | Node.js로 작성된 모던 웹 애플리케이션으로, 다양한 취약점을 포함하고 있습니다. | |
3 | bWAPP (Buggy Web Application) | PHP로 작성된 취약한 웹 애플리케이션으로, 다양한 웹 취약점을 테스트할 수 있습니다. | |
4 | WebGoat | OWASP에서 제공하는 교육용 애플리케이션으로, 사용자가 다양한 웹 보안 문제를 학습할 수 있도록 도와줍니다. | |
5 | Hackazon | 실제 전자상거래 웹사이트처럼 보이도록 설계된 취약 웹 애플리케이션입니다. | |
6 | WackoPicko | 보안 학습을 위해 설계된 취약 웹 애플리케이션입니다. |
2. DVWA 설치
Docker-DVWA 설치
# Docker 설치
sudo snap install docker
sudo systemctl enable docker
sudo systemctl start docker
docker --version
# Docker-DVWA 실행
docker run --rm -it -p 80:80 vulnerables/web-dvwa
Shell
복사
1.
WEB UI : http://10.10.12.178
2.
LOGIN
a.
id : admin
b.
pw : password
3.
Create / Reset database Button
4.
DVWA LOGIN
5.
DVWA Security Level
⇒ DVWA Security Level : Low / Medium / High / Impossible
⇒ Default : Low
번외 : OWASP Juice Shop 설치
docker pull bkimminich/juice-shop
docker run --rm -p 3000:3000 bkimminich/juice-shop
Shell
복사
번외 : bWAPP 설치
docker pull raesene/bwapp
docker run --rm -p 4000:80 raesene/bwapp
Shell
복사
3. OWASP ZAP 설치 및 확인
Open Web Application Security Project Zed Attack Proxy → OWASP ZAP
OWASP ZAP v2.15.0 설치
# java 설치
sudo apt update
sudo apt install -y openjdk-11-jdk
# OWASP ZAP 설치
wget https://github.com/zaproxy/zaproxy/releases/download/v2.15.0/ZAP_2_15_0_unix.sh -O zap_install.sh
chmod +x zap_install.sh
./zap_install.sh
# OWASP ZAP Quick Test
zap.sh -cmd -quickurl http://10.10.12.178 -quickout /tmp/zap-dvwa-quick-report.html
Shell
복사
OWASP ZAP Full Test
scp -i ~/.ssh/xo_idc.pem ubuntu@10.10.12.179:/tmp/zap-dvwa-quick-report.html .
Shell
복사
[Caption] 레포트 파일 다운로드
OWASP ZAP - Risk Level 기준
1.
high
•
설명
◦
이 수준의 취약점은 시스템의 심각한 보안 위험을 초래할 수 있습니다.
◦
공격자가 시스템을 장악하거나 중요한 데이터에 접근할 수 있는 취약점입니다.
•
권장 사항
◦
반드시 수정해야 합니다.
◦
가능한 한 빨리 수정하여 시스템의 보안을 강화해야 합니다.
2.
medium
•
설명
◦
이 수준의 취약점은 잠재적으로 중요한 보안 문제를 초래할 수 있습니다.
◦
시스템의 일부 기능이 손상되거나 제한된 데이터 노출이 발생할 수 있습니다.
•
권장 사항
◦
수정을 권장합니다.
◦
시스템의 보안을 유지하기 위해 가능한 한 빨리 이러한 취약점을 해결하는 것이 좋습니다.
3.
low
•
설명
◦
이 수준의 취약점은 상대적으로 낮은 보안 위험을 초래합니다.
◦
시스템의 보안에 큰 영향을 미치지 않지만, 누적되면 문제가 될 수 있는 작은 취약점입니다.
•
권장 사항
◦
수정하면 좋지만, 우선순위가 낮습니다.
◦
다른 중요한 취약점을 먼저 해결한 후에 수정해도 됩니다.
4.
informational
•
설명
◦
이 수준은 보안 위험을 나타내지는 않지만, 시스템의 보안 상태에 대한 정보를 제공합니다.
◦
예를 들어, 시스템 구성에 대한 정보 또는 보안 관련 설정에 대한 정보일 수 있습니다.
•
권장 사항
◦
단순히 정보 제공용입니다.
◦
반드시 수정할 필요는 없지만, 정보를 바탕으로 시스템 구성을 검토할 수 있습니다.
5.
false positive
•
설명
◦
보안 스캔 도구가 실제로는 문제가 없는 항목을 취약점으로 잘못 감지하는 경우입니다.
◦
이는 다양한 이유로 발생할 수 있으며, 보안 전문가가 결과를 검토하여 실제로 문제가 없는지 확인해야 합니다.
•
예시
◦
보안 스캐너가 특정 패턴을 감지하고 이를 취약점으로 인식했지만, 실제로는 안전한 설정이나 코드일 수 있습니다.
DVWA - ZAP(Quick) Alert Details
medium - Content Security Policy (CSP) Header Not Set
•
설명
◦
Content Security Policy (CSP) 헤더가 설정되지 않았습니다.
◦
CSP는 웹사이트의 콘텐츠를 안전하게 로드하기 위해 출처를 제한하는 보안 정책입니다.
•
해결책
◦
웹 서버, 애플리케이션 서버, 로드 밸런서 등이 Content-Security-Policy 헤더를 설정하도록 구성합니다.
medium - Directory Browsing
•
설명
◦
디렉토리 목록보기가 활성화되어 있습니다.
◦
이는 사용자가 웹 서버의 디렉토리 구조를 볼 수 있게 하며, 민감한 파일에 접근할 위험이 있습니다.
•
해결책
◦
디렉토리 목록보기를 비활성화합니다.
◦
필요시, 나열된 파일이 위험을 유발하지 않는지 확인합니다.
medium - Missing Anti-clickjacking Header
•
설명
◦
클릭재킹을 방지하기 위한 헤더가 설정되지 않았습니다.
◦
이 헤더는 페이지가 iframe 내에서 로드되지 않도록 하여 클릭재킹 공격을 방지합니다.
•
해결책
◦
모든 웹 페이지에 Content-Security-Policy 또는 X-Frame-Options 헤더를 설정합니다.
◦
페이지가 프레임 내에서 로드되는 것을 원하지 않는다면 DENY를 사용하고, 같은 도메인 내에서만 로드되도록 하려면 SAMEORIGIN을 사용합니다.
low - Cookie No HttpOnly Flag
•
설명
◦
쿠키에 HttpOnly 플래그가 설정되지 않았습니다.
◦
HttpOnly 플래그는 클라이언트 측 스크립트가 쿠키에 접근하지 못하도록 하여 XSS 공격을 방지합니다.
•
해결책
◦
모든 쿠키에 HttpOnly 플래그를 설정합니다.
low - Cookie without SameSite Attribute
•
설명
◦
쿠키에 SameSite 속성이 설정되지 않았습니다.
◦
SameSite 속성은 CSRF 공격을 방지하기 위해 쿠키가 전송되는 컨텍스트를 제어합니다.
•
해결책
◦
모든 쿠키에 SameSite 속성을 'lax' 또는 이상적으로 'strict'로 설정합니다.
low - Server Leaks Version Information via "Server" HTTP Response Header Field
•
설명
◦
서버가 "Server" HTTP 응답 헤더를 통해 버전 정보를 노출하고 있습니다.
◦
이는 공격자가 서버의 특정 취약점을 악용하는 데 사용할 수 있습니다.
•
해결책
◦
웹 서버, 애플리케이션 서버, 로드 밸런서 등이 "Server" 헤더를 숨기거나 일반적인 정보만 제공하도록 구성합니다.
low - X-Content-Type-Options Header Missing
•
설명
◦
X-Content-Type-Options 헤더가 설정되지 않았습니다.
◦
이 헤더는 브라우저가 선언된 콘텐츠 유형을 무시하지 못하도록 하여 MIME 타입 스니핑 공격을 방지합니다.
•
해결책
◦
웹 서버가 적절한 Content-Type 헤더를 설정하고, X-Content-Type-Options 헤더를 'nosniff'로 설정합니다.
information - Authentication Request Identified
•
설명
◦
인증 요청이 감지되었습니다.
◦
이는 웹 애플리케이션에서 사용자 인증이 필요함을 나타냅니다.
•
해결책
◦
정보 제공 경고이므로 수정할 필요가 없습니다.
information - Session Management Response Identified
•
설명
◦
세션 관리 응답이 감지되었습니다.
◦
이는 웹 애플리케이션에서 세션 관리를 위한 응답을 포함하고 있음을 나타냅니다.
•
해결책
◦
정보 제공 경고이므로 수정할 필요가 없습니다.
information - User Agent Fuzzer
•
설명
◦
User Agent Fuzzer가 감지되었습니다.
◦
이는 다양한 사용자 에이전트 문자열을 사용하여 서버의 응답을 테스트하는 도구입니다.
번외 : OWASP Juice Shop 점검
⇒ OWASP Juice Shop에 대한 웹 취약점 점검에서 Risk Level 중에 High 발생!!
high - Cloud Metadata Potentially Exposed
•
설명
◦
클라우드 메타데이터 공격은 잘못 구성된 NGINX 서버를 악용하여 AWS, GCP, Azure와 같은 클라우드 서비스 제공자가 유지하는 인스턴스 메타데이터에 접근하려는 시도입니다.
◦
이 메타데이터는 내부 네트워크에서만 접근할 수 있는 '169.254.169.254' IP 주소를 통해 제공됩니다.
◦
잘못 구성된 NGINX 서버는 이 IP 주소를 'Host' 헤더 필드에 사용하여 메타데이터에 접근할 수 있게 할 수 있습니다.
•
해결책
◦
NGINX 설정에서 사용자 데이터를 신뢰하지 않습니다.
◦
특히 '$host' 변수는 'Host' 헤더에서 설정되며, 공격자가 이를 조작할 수 있으므로 사용하지 않습니다. 신뢰할 수 있는 고정 값을 사용합니다.
……
4. Nikto 설치 및 확인
Nikto 설치
# 필수 패키지 설치
sudo apt install -y perl
# Nikto 다운로드 및 설치
sudo git clone https://github.com/sullo/nikto.git /opt/nikto
sudo ln -s /opt/nikto/program/nikto.pl /usr/local/bin/nikto
nikto -h
# Nikto 실행
nikto -h http://10.10.12.178 -o /tmp/nikto-dvwa-low-report.html -Format html
Shell
복사
scp -i ~/.ssh/xo_idc.pem ubuntu@10.10.12.179:/tmp/nikto-dvwa-low-report.html .
Shell
복사
⇒ DVWA Security Level을 조정해도 동일한 결과를 출력합니다.
Alert Details
/ - [GET] Cookie PHPSESSID created without the httponly flag.
•
PHPSESSID 쿠키가 HttpOnly 플래그 없이 생성되었습니다.
•
HttpOnly 플래그가 없으면 클라이언트 측 스크립트가 이 쿠키에 접근할 수 있어 XSS 공격에 취약할 수 있습니다.
/ - [GET] Cookie security created without the httponly flag.
•
security 쿠키가 HttpOnly 플래그 없이 생성되었습니다.
•
위와 동일한 이유로 XSS 공격에 취약할 수 있습니다.
/robots.txt - [GET] The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type.
•
X-Content-Type-Options 헤더가 설정되지 않았습니다.
•
이로 인해 브라우저가 사이트의 콘텐츠를 MIME 타입과 다르게 렌더링할 수 있습니다.
/ - [HEAD] Apache/2.4.25 appears to be outdated (current is at least 2.4.59). Apache 2.2.34 is the EOL for the 2.x branch.
•
Apache 서버 버전이 2.4.25로, 현재 최신 버전인 2.4.59보다 오래되었습니다.
•
2.x 버전의 최신 릴리스는 2.2.34이며, 이는 EOL(End Of Life) 상태입니다. 최신 버전으로 업데이트하는 것이 좋습니다.
/config/ - [GET] Directory indexing found.
•
/config/ 디렉토리의 인덱싱이 활성화되어 있습니다.
•
이를 통해 디렉토리 내의 파일 목록을 볼 수 있습니다. 민감한 정보가 노출될 수 있습니다.
/config/ - [GET] Configuration information may be available remotely.
•
/config/ 디렉토리에서 구성 정보가 원격으로 접근 가능할 수 있습니다.
•
이는 보안 위험을 초래할 수 있습니다.
/docs/ - [GET] Directory indexing found.
•
/docs/ 디렉토리의 인덱싱이 활성화되어 있습니다.
•
이를 통해 디렉토리 내의 파일 목록을 볼 수 있습니다. 민감한 정보가 노출될 수 있습니다.
/icons/README - [GET] Apache default file found.
•
Apache 서버의 기본 README 파일이 발견되었습니다.
•
이는 서버 설정에 대한 정보를 노출할 수 있습니다.
/login.php - [GET] Admin login page/section found.
•
/login.php 페이지가 발견되었습니다.
•
이는 관리자 로그인 페이지로, 공격자가 이를 통해 접근을 시도할 수 있습니다.
/gitignore - [GET] .gitignore file found. It is possible to grasp the directory structure.
•
.gitignore 파일이 발견되었습니다.
•
이 파일을 통해 디렉토리 구조를 파악할 수 있어 공격자가 이를 악용할 수 있습니다.
5. Wapiti 설치 및 확인
Wapiti 설치
# 필수 패키지 설치
sudo apt install -y python3 python3-pip
# Wapiti 설치
sudo pip3 install wapiti3
# Wapiti 실행
wapiti -u https://msu-testnet-explorer.xangle.io/ -f html -o /tmp/wapiti-msu-testnet-report
Shell
복사
mkdir wapiti-mst-report-20240723
scp -i ~/.ssh/xo_idc.pem -r ubuntu@10.10.12.179:/tmp/wapiti-msu-testnet-report/ wapiti-mst-report-20240723
Shell
복사
⇒ DVWA Security Level을 조정해도 동일한 결과를 출력함..
Alert Details
Content Security Policy Configuration
•
설명
◦
CSP는 XSS 및 데이터 삽입 공격을 감지하고 완화하는 추가 보안 계층입니다.
•
해결책
◦
Content-Security-Policy HTTP 헤더를 웹 페이지에 추가하고, 사용자 에이전트가 로드할 리소스를 제어하는 값을 설정합니다.
/ - CSP is not set
HTTP Secure Headers
•
설명
◦
HTTP 보안 헤더는 브라우저가 웹사이트의 콘텐츠를 처리할 때 어떻게 행동해야 하는지 알려줍니다.
•
해결책
◦
HTTP 보안 헤더를 강화하는 권장 사항을 따릅니다.
/ - X-Frame-Options is not set
/ - X-Content-Type-Options is not set
HttpOnly Flag cookie
•
설명
◦
HttpOnly 플래그는 Set-Cookie HTTP 응답 헤더에 포함되는 추가 플래그입니다.
◦
이 플래그를 사용하면 클라이언트 측 스크립트가 보호된 쿠키에 접근하는 위험을 줄일 수 있습니다.
•
해결책
◦
쿠키를 생성할 때 HttpOnly 플래그를 True로 설정합니다.
/ - HttpOnly flag is not set in the cookie : PHPSESSID
/ - HttpOnly flag is not set in the cookie : security
Secure Flag cookie
•
설명
◦
보안 플래그는 HTTP 응답 내에서 서버가 사용자에게 새로운 쿠키를 보낼 때 설정할 수 있는 옵션입니다.
◦
보안 플래그의 목적은 쿠키가 평문으로 전송됨으로 인해 무단으로 관찰되는 것을 방지하는 것입니다.
•
해결책
◦
쿠키를 생성할 때 보안 플래그를 True로 설정합니다.
/ - Secure flag is not set in the cookie : PHPSESSID
/ - Secure flag is not set in the cookie : security
6. 검토 의견 (개인)
•
OWASP ZAP이 웹 취약점 검출 항목이 많고 솔루션 제시에 가장 우월해 보입니다. (Risk Level로 위협 등급 표현)
•
Nikto는 웹 취약점 검출 내용도 빈약해 보이고 솔루션 제시도 부족해 보입니다. (오래된 느낌…)
•
Wapiti는 설치도 간결하고 레포팅도 깔끔하게 보여지지만 OWASP ZAP에 비해 웹 취약점 검출 항목이 적습니다.