※ 본 글은 4개 테스트 케이스 중 [Case 1: Apache만 설치 + Java 없음] 환경을 다룬다. - 즉, Ubuntu 서버에 Apache HTTP Server만 설치하고 Java, Tomcat, Apache-Tomcat 연동 설정이 없는 상태에서 JSP 파일 요청 시 어떤 결과가 발생하는지 확인한다.
- Apache HTTP Server 단독 서버 환경에서는 JSP 를 처리하는 Servlet/JSP 엔진이 없다.
- 따라서, Apache 서버에 Java 가 설치되어 있어도, Tomcat 같은 WAS 또는 JSP 처리 연동 설정이 없으면,
- Apache 단독 환경에서는 사용자 웹 브라우저에서 서버로 test.jsp 자원 호출시 JSP 가 실행되지 않는다.
⇒ 위 내용이 정말로 맞는지 VMware workstation 프로그램내에서 직접 환경을 구축하여 검증하고자 함
● 테스트 케이스
- 아래 표에서 Case 1 은 Apache HTTP Server 만 설치된 단독 WEB 서버 환경. - 본 실습에서는 Java와 Tomcat이 설치되어 있지 않고, Apache에서 WAS로 요청을 전달하는 별도 연동 설정도 없는 상태를 기준으로 한다.
Case No
실습환경
JSP 실행 여부
본 글 해당 여부
1
Apache 만 설치 + Java 없음
JSP 실행안됨
해당
2
Apache 만 설치 + Java 있음
JSP 실행안됨
다음글
3
Apache + Tomcat 연동
JSP 실행가능
다음글
4
Tomcat 단독
JSP 실행가능
다음글
● 실습 환경
- 본 실습 환경은 Ubuntu 24.04.4 LTS 서버에 Apache HTTP Server만 설치한 단독 WEB 서버 구성.
- Apache의 기본 DocumentRoot는 /var/www/html이며, 해당 경로에 test.jsp 파일을 생성하여 JSP 실행 여부 확인.
- Java와 Tomcat은 설치되어 있지 않으며, Apache에서 Tomcat 또는 별도 WAS로 요청을 전달하는 연동 설정도 구성하지 않음.
구분
설정값
가상화 프로그램
VMware Workstation
Guest OS
Ubuntu 24.04.4 LTS
WEB Server
Apache HTTP Server
Architecture
x86-64
Apache Service Name
apache2
Apache Server Version
Apache/2.4.58 (Ubuntu)
Apache DocumentRoot
DocumentRoot /var/www/html
Apache Config Path
/etc/apache2/apache2.conf
VirtualHost Config
/etc/apache2/sites-enabled/000-default.conf
Web Root Files
Java Version
Command 'java' not found
Java 설치 여부
미설치
Tomcat Package
Tomcat package not installed
Tomcat 설치 여부
미설치
JSP 처리 엔진
없음
Apache-Tomcat 연동
미구성
● Ubuntu OS 설치후, 기본 확인 사항
- Ubuntu 로그인 후, 현재 IP 확인 1. # ip a
● Apache 단독 설치
- 패키지 업데이트 1. # apt update 2. # apt -y upgrade
● Apache 설치
# apt install -y apache2 curl vim net-tools
● Apache 서비스 시작 및 자동 실행
# systemctl enable --now apache2 # systemctl status apache2
● Apache 버전 확인
# apache2 -v
● Tomcat 및 Java 미설치 검증
- 본 실습의 핵심 조건은 Apache 서버가 단독으로 설치되어있다는 것입니다.
- 아래 명령으로 Apache 서버내에서 Tomcat, Java, AJP 연동 모듈이 없는지 확인합니다.
1. Java 설치 여부 확인 *확인 명령어 : # which java || echo "java 명령어 없음" : 아래와 같이 "java 명령어 없음" 및 "Command java not found" 결과가 나왔다. : 해당 결과값을 통해 Apache 서버에 java 미설치 및 미설치로 java 명령어 사용 불가임을 알 수 있다.
2. Apache-Tomcat 연동 설정 미존재 확인 *결론 : 아래 명령어 실행 결과 별도 출력값이 확인되지 않았는데, 이는 Apache 설정 파일 내에서 JSP 요청을 WAS로 전달하거나 JSP 확장자를 별도 Handler로 처리하는 설정이 없음을 의미
- Apache가 Tomcat 또는 별도 WAS와 연동되어 있는지 확인하기 위해 Apache 모듈과 설정 파일 점검. *확인 명령어 : grep -RniE 'ProxyPass|ProxyPassReverse|JkMount|SetHandler|AddHandler|AddType.*jsp|\.jsp' /etc/apache2/
- 먼저 Apache에 Tomcat 연동과 관련된 모듈이 로드되어 있는지 확인하였고, 확인 명령어는 아래와 같음. *확인 명령어 : apache2ctl -M | egrep -i 'proxy|proxy_ajp|proxy_http|jk'
- Tomcat 패키지 확인 *확인 명령어 : # dpkg -l | egrep -i 'tomcat|openjdk|default-jre|default-jdk' || echo "Tomcat/Java 패키지 없음"
: 아래와 같이 Tomcat 및 java 패키지가 없다고 출력되기 때문에, Apache 서버내에 Tomcat 패키지는 없는것으로 확인
- Tomcat 관련 포트 확인 *확인 명령어 : # ss -lntp | egrep ':8080|:8009' || echo "Tomcat/AJP 포트 Listen 없음" : Tomcat 은 보통 8080, AJP 는 8009 포트 사용. : 본 실습에서는 상기 2개 포트가 Apache 서버내에서 Listen 되어있으면 안됨.
- Apache WAS 연동 모듈 확인 : Apache 가 Tomcat 과 연동되려면 일반적으로 mod_proxy, mod_proxy_ajp, mod_jk 같은 방식이 사용됨. : Apache 공식문서 기준, mod_proxy_ajp 가 Tomcat 같은 backend application Server 로 AJP reverse Proxy 를 수행한다고 설명하고 있음. : Tomcat Connectors 문서에서도 Apache HTTP Server 가 mod_jk 플러그인을 통해 Tomcat 등 backend 와 연결될 수 있다고 설명하고 있음. ⇒ 본 실습 환경에서는 상기 연동은 구성하지 않음.
- Apache 기본 페이지 접근 확인 (Apache 내부에서 확인) *확인 명령어 : # curl -i http://127.0.0.1
- Apache 기본 페이지 접근 확인 (Host PC 웹 브라우저에서 확인) *확인 방법 : 웹 브라우저 실행후, http://192.168.111.135
- 테스트 파일 생성 (ex : test.jsp) *명령어는 아래 사진 참고 : Apache 의 DocumentRoot 인 /var/www/html 하위 경로에 아래와 같이 test.jsp 파일 생성
- cat /var/www/html/test.jsp 명령어를 통해 test.jsp 파일 내용은 아래와 같음.
- 테스트로 생성한 test.jsp 파일 권한을 644(-rw-r--r--) 설정 *설정 명령어 1 : # chmod 644 /var/www/html/test.jsp : test.jsp 파일 권한은 아래와 같이 644 즉, -rw-r--r-- 로 이미 설정되어있기 때문에 위 명령어 실행 불필요
*설정 명령어 2 : # chown root:root /var/www/html/test.jsp : test.jsp 파일 소유주와 그룹을 root 로 각각 설정하는 명령어인데, 이미 위 사진과 같이 root 로 설정되어있어, 실행 불필요
※ 생성한 test.jsp 파일 권한을 644 로 설정하는 이유는? - test.jsp 파일 권한을 644(-rw-r--r--)로 설정하는 이유는 Apache 프로세스가 해당 파일을 읽을 수 있도록 하기 위함. - 644 권한은 파일 소유자에게 읽기/쓰기 권한을 부여하고, 그룹 및 기타 사용자에게는 읽기 권한만 부여. - Apache는 일반적으로 www-data 사용자 권한으로 동작하므로, 웹 루트 경로에 위치한 파일을 클라이언트에게 반환하려면 Apache 프로세스가 해당 파일을 읽을 수 있어야 함. - 단, 파일 권한이 644라고 해서 JSP 파일이 실행되는 것은 아니다. - 파일 권한은 Apache가 파일을 읽을 수 있는지를 결정하는 요소이고, JSP 실행 여부는 Tomcat 같은 Servlet/JSP 엔진 또는 Apache-Tomcat 연동 설정 존재 여부에 따라 결정된다. - 즉, 본 실습에서 test.jsp 파일은 Apache가 읽을 수 있는 상태였지만, JSP 처리 엔진이 없었기 때문에 실행되지 않고 원본 코드 형태로 반환된다.
● test.jsp 요청 결과 확인
1. Apache의 DocumentRoot인 /var/www/html 경로에 test.jsp 파일 생성후, Ubuntu 서버 내부와 Host PC 웹 브라우저에서 각각 JSP 파일을 요청하였다. 먼저 Ubuntu 서버 내부에서 아래 명령어를 실행하였다. *확인 명령어 # curl -i http://127.0.0.1/test.jsp 이후 Host PC에서 접근 가능한 VM IP를 기준으로 아래 명령어를 실행하였다. *확인 명령어 http://192.168.111.135/test.jsp 확인 결과 HTTP 응답은 200 OK로 반환되었으나, JSP 코드가 서버 측에서 실행되지 않았다. 특히 JSP 스크립틀릿 구문인 <%= new java.util.Date() %> 부분이 실제 날짜 값으로 변환되지 않고 원본 코드 그대로 응답 본문에 포함되어 출력되었다. 즉, Apache HTTP Server는 /var/www/html/test.jsp 파일을 정상적으로 찾았지만, 해당 파일을 JSP로 해석하거나 실행하지 못하고 정적 파일처럼 클라이언트에게 반환하였다. 이는 본 실습 환경에 Tomcat 같은 Servlet/JSP 처리 엔진이 없고, Apache-Tomcat 연동 설정도 존재하지 않기 때문이다. 따라서 Apache 단독 환경에서는 .jsp 파일이 서버 측에서 실행되지 않으며, 경우에 따라 JSP 소스코드가 원본 형태로 노출될 수 있다.
● Apache 웹서버 access.log 요청 이력 확인
Apache access.log에서 Host PC가 `/test.jsp` 파일을 요청한 이력을 확인하였다. *확인 명령어 : # tail -f /var/log/apache2/access.log 위 access.log 로그에서 `GET /test.jsp HTTP/1.1` 요청과 `200` 응답 상태코드가 기록되었고, 이는 Apache가 클라이언트의 `/test.jsp` 요청을 수신했고, 해당 파일을 정상적으로 찾아 응답했다는 의미이다.
다만 본 실습 환경에는 Tomcat 또는 JSP 처리 엔진이 없기 때문에, 해당 요청은 JSP 실행 결과가 아니라 JSP 원본 코드 반환으로 이어졌다.
● 실습 결론
본 실습 결과, Ubuntu 24.04.4 LTS 환경에 Apache HTTP Server만 설치한 단독 WEB 서버에서는 JSP 파일이 서버 측에서 실행되지 않았다.
Apache의 DocumentRoot인 /var/www/html 경로에 test.jsp 파일을 생성한 뒤 브라우저와 curl로 요청한 결과, JSP 스크립틀릿 코드가 실행 결과로 변환되지 않고 원본 코드 형태로 반환되었다.
이는 Apache HTTP Server 자체에는 JSP를 처리하는 Servlet/JSP 엔진이 포함되어 있지 않기 때문이다.
JSP를 정상적으로 실행하려면 Tomcat 단독 구성 또는 Apache-Tomcat 연동 구성이 필요하다.
따라서 운영 환경에서 .jsp 파일이 Apache DocumentRoot에 존재하지만 WAS 연동이 누락되어 있다면, JSP 소스코드가 외부 사용자에게 노출될 수 있으며 Source Code Disclosure 취약점으로 이어질 수 있다.
특히 JSP 파일 내부에 DB 접속 정보, 내부 API 경로, 인증 로직, 중요 비즈니스 로직, 주석 정보 등이 포함되어 있다면 공격자는 해당 정보를 바탕으로 추가 공격을 시도할 수 있다.
따라서 운영 환경에서는 다음과 같은 조치가 필요하다. 1. JSP 파일은 반드시 Tomcat 등 WAS에서 처리되도록 구성한다. 2. Apache DocumentRoot에 실행되지 않는 JSP 소스 파일이 직접 위치하지 않도록 한다. 3. Apache-Tomcat 연동 설정 누락 여부를 점검한다. 4. 불필요한 백업 파일, 소스 파일, 임시 파일이 웹 루트에 존재하지 않도록 관리한다. 5. WAF 또는 웹서버 정책을 통해 비정상적인 소스 파일 접근 시도를 탐지 및 차단한다.