[Ubuntu 26.04] OWASP ZAP 설치

mimic·4일 전

개요

Linux용 tar.gz 압축 파일을 다운로드하고 ./zap.sh로 바로 실행하는 비설치형으로 구축하겠습니다.
현재 최신 정식 버전은 2.17.0이며, GitHub에서 다운로드하여 사용합니다.

Java 설치

설치 전 확인 내역

OWASP ZAP은 Java가 필수 설치 되어야 하며, 압축 파일에는 포함되어 있지 않아 별도로 설치해야 합니다.
ZAP 2.16.0부터는 최소 Java 17 이상이 필요합니다.

지원하는 Java 확인 명령어

# 현재 apt 저장소에서 jdk 몇을 제공하는지 전부 확인
apt-cache search openjdk | grep -E 'openjdk-[0-9]+'

# jdk-17을 몇 버전을 지원하는지 확인
apt-cache policy openjdk-17-jdk
===
openjdk-17-jdk:
  Installed: (none)
  Candidate: 17.0.20.1+1-1~26.04
  Version table:
     17.0.20.1+1-1~26.04 500
        500 http://archive.ubuntu.com/ubuntu resolute-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu resolute-security/universe amd64 Packages
     17.0.18+8-1 500
        500 http://archive.ubuntu.com/ubuntu resolute/universe amd64 Packages
===

apt list openjdk-17-jdk
===
openjdk-17-jdk/resolute-updates,resolute-security 17.0.20.1+1-1~26.04 amd64
Notice: There is 1 additional version. Please use the '-a' switch to see it
===

Java 설치

정확하게 Java 17을 설치하려면 아래와 같이 입력합니다.

apt install -y openjdk-17-jre

# jdk가 필요 시 (zap 실행을 위해서는 jre로만 설치해도 됨)
apt install -y openjdk-17-jdk

하지만 17 이상의 버전이라면 최신 버전을 설치해도 무방하므로 최신 버전이 몇인지 확인하고 설치합니다.

apt-cache depends default-jre
===
default-jre
  Depends: default-jre-headless
  Depends: openjdk-25-jre
===

# GUI 지원 서버
apt install -y default-jre xauth
# GUI 없는 서버에서 데몬으로만 쓸 때
# apt install -y default-jre-headless

# 설치 확인
java -version

OWASP ZAP 설치

다운로드 무결성 확인

cd /tmp
wget https://github.com/zaproxy/zaproxy/releases/download/v2.17.0/ZAP_2.17.0_Linux.tar.gz

# 체크섬 확인
echo "efe799aaa3627db683b43f00c9c210aea0b75c00cc8f0a0f0434d12bb3ddde5a  ZAP_2.17.0_Linux.tar.gz" | sha256sum -c

2.17.0 공식 릴리스 페이지에 공개된 Linux tar.gz의 SHA-256 해시 값과 비교하는 절차를 거쳐 OK가 출력된다면 실제 설치로 넘어갑니다.

설치 폴더 생성 및 파일 이동

mkdir -p /opt/zap
tar -xzf /tmp/ZAP_2.17.0_Linux.tar.gz -C /opt/zap
chown -R $USER:$USER /opt/zap

# 버전 업그레이드 시 경로가 안 바뀌도록 심볼릭 링크 (선택)
ln -sfn /opt/zap/ZAP_2.17.0 /opt/zap/current

API KEY 생성

무작위 키를 생성하여 관리자도 모르게 운영된다면 곤란합니다. 따라서 임의로 키를 생성하여 실행 시 선언합니다.

cd /opt/zap/ZAP_2.17.0

# 충분히 긴 랜덤 키 생성 후 파일로 보관
openssl rand -hex 32 > ~/.zap_api_key
chmod 600 ~/.zap_api_key

실행

# 생성한 API 키로 데몬 실행
cd /opt/zap/current

# 로컬 접속만 허용
./zap.sh -daemon -host 127.0.0.1 -port 8080 \
  -config api.key=$(cat ~/.zap_api_key)
  
# 외부 접근 가능한 바인딩 (접근 가능 IP 지정)
./zap.sh -daemon -host 0.0.0.0 -port 8080 \
  -config api.key=$(cat ~/.zap_api_key) \
  -config api.addrs.addr.name=$AcceptIP -config api.addrs.addr.regex=false

실행 명령어 입력 후에도 모든 작업이 끝나고 listen 중이라는 문구(ZAP is now listening on 0.0.0.0:8080)가 출력되어야 접근이 가능합니다.

만일 부득이 모든 IP에서 접근 허용하게 하려면 아래 옵션을 사용하면 됩니다.
-config api.addrs.addr.name=.* -config api.addrs.addr.regex=true
그러나 보안 상 권장하지 않습니다.

차라리 대역대 자체를 허용하는 방법도 있습니다.

-config api.addrs.addr.name=^(127[.]0[.]0[.]1|192[.]168[.]0[.][0-9]+|10[.]172[.]1[.]122)$$ -config api.addrs.addr.regex=true

WEB UI를 접근하면 아래와 같이 출력됩니다.

허무하게도 ZAP은 WEB UI가 우리가 생각하는 관리자 기능 제어 화면이 아닙니다.

따라서 스크립트를 만들어 편리하게 사용할 수 있도록 합니다.

편리 설정

시스템 데몬 파일 생성

mkdir -p /etc/zap
echo "ZAP_API_KEY=$(cat ~/.zap_api_key)" | sudo tee /etc/zap/zap.env > /dev/null
chmod 600 /etc/zap/zap.env

vi /etc/systemd/system/zap.service
===
[Unit]
Description=ZAP Daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=$USER
WorkingDirectory=/opt/zap/current
EnvironmentFile=/etc/zap/zap.env
ExecStart=/opt/zap/current/zap.sh -daemon -host 127.0.0.1 -port 8080 -config api.key=\${ZAP_API_KEY}
Restart=on-failure
RestartSec=10
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target
===

systemctl daemon-reload
systemctl enable zap --now
profile
Raiju Hantu Goryo Obake

0개의 댓글