웹 취약점 점검 결과 이행 조치 방법
사내 정보보안팀에서 제공한 웹 취약점 점검 결과보고서를 통해 취약점 조치를 진행합니다.
웹 취약점 점검도구
- Burp-Suite : 프록시 툴
- OWASP-ZAP : 웹 애플리케이션 취약점 스캔 및 자동화 공격도구
웹 취약점 점검 항목
크로스 사이트 스크립팅 - XSS
취약점 발생 예시
공지사항 등록 시, 에디터에 아래의 크로스 사이트 스크립트 공격 구문 입력 후 등록이 가능한 경우입니다.
<script>alert(document.cookie)</script>
공지사항 상세 보기 시 alert이 실행되며, 사용자 쿠키를 탈취하여 도용하거나 악성코드 사이트로 Redirect 할 수 있습니다.
사이트의 게시판, 1:1 문의, URL 등에서 사용자 입력 값이 실행되지 않도록 검증 및 치환 조치가 필요합니다.
취약점 조치 방법
사용자가 <, >, &, “,” 등 입력 시 Java에서 DB 등록 전 <, &rgt, & 등으로 치환합니다.
public static String clearXSSCustom(String value) {
if (value == null || value.trim().equals("")) {
return "";
}
String returnValue = value;
returnValue = returnValue.replaceAll("&", "&");
returnValue = returnValue.replaceAll("<", "<");
returnValue = returnValue.replaceAll(">", ">");
return returnValue;
}
위와 같은 공통 유틸 함수를 만들어서 치환할 수 있습니다.
중요정보 노출 - 개인정보 평문전송
취약점 발생 예시
로그인 시 Burp-Suite 스캐닝 툴로 요청 패킷 확인하면 ID, PW가 암호화되지 않고 그대로 노출되는 경우입니다.
중요정보에 대해서는 반드시 SSL 등의 암호화 통신을 사용하여 도청 위험을 제거해야 합니다.
암호화 전송 시 프로토콜 설계의 결함이 있는 SSLv2, SSLv3, TLSv1.0, TLSv1.1은 비활성화 설정해야 합니다.
TLSv1.2 이상 사용을 권장한다고 합니다.
SSL 적용 시, 유서트 (SSL 인증서 제공자) 등에서 SSL 인증서를 구매하여 발급해야 합니다.
멀티 도메인 인증서 (*.도메인.co.kr) 를 구매하면, 하나의 인증서로 여러 하위 도메인에 적용 가능합니다.
현재 스테이징 서버, 운영서버는 디딤365 업체에서 관리하므로 서버 인증서 적용을 요청하였습니다.
사내 인프라기획팀에서 발급한 인증서가 네이버클라우드 서버에 적용되면, 톰캣 인증서 설정을 직접 해야 합니다.
유서트 SSL 인증서 예시
- 발급기관 : GlobalSign GCC R6 AlphaSSL CA 2023
- 유효기간 : 1년
- 제공 인증서 파일 : crt, jks, pem, pfx
서버별 적용 가능 인증서 확장자
- Apache 서버 : crt, pem
- Nginx 서버 : crt, pem
- Webtob 서버 : crt, pem
- IIS 서버 : pfx
- Exchange 서버 : pfx
- Tomcat 서버 : jks
- Resin 서버 : jks
- Jboss 서버 : jks
- 방화벽 : pfx, pem
SSL 인증서 확장자 변환 방법
- openssl 명령어를 통해 crt를 pfx로 변환 가능하며, crt의 개인 key 파일과 신규 비밀번호가 필요합니다.
- keytool 명령어를 통해 pfx를 jks로 변환 가능하며, pfx 비밀번호와 신규 비밀번호가 필요합니다.
톰켓 SSL 인증서 설정 방법 ★
톰캣설치경로/conf 폴더 안에 jks 인증서 파일을 복사해서 넣습니다.
server.xml 파일에서 아래와 같이 SSL 인증서를 적용한 8443 포트 커넥터를 추가합니다.
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/jsk파일명.jks"
certificateKeystorePassword="jks비밀번호"
type="RSA"
sslEnabledProtocols="TLSv1.2,TLSv1.3" />
</SSLHostConfig>
</Connector>
위 예시는 톰캣 8.x 버전 옵션이며, 톰캣 버전에 따라 옵션이 달라지고 톰캣 재시작 시 반영됩니다.
서버 내에서 443 포트가 사용중인 경우, 위와 같이 8443, 9443 등 대체포트를 사용해야 합니다.
신규 포트는 사내에서 나가는 아웃바운드 방화벽을 허용해야 할 수 있으므로, 기존 HTTP 포트를 재사용해도 좋습니다.
HTTP → HTTPS 리다이렉트 허용 방법
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
server.xml에서 HTTP 8080으로 들어오는 요청을 HTTPS 8443 커넥터로 리다이렉트할 수 있도록 허용합니다.
HTTPS 강제 리다이렉트 설정 방법
<security-constraint>
<web-resource-collection>
<web-resource-name>SecureApp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
web.xml 파일 web-app 안에 위 코드를 추가하여 HTTP → HTTPS 강제 리다이렉트 되도록 설정합니다.
이 설정이 되어있지 않으면, redirectPort를 설정했어도 http 8080으로 접근이 가능합니다.
http 허용 메소드에 대한 security-constraint 설정이 있어도 별도 추가 가능합니다.
HTTPS 포트 정상 실행 로그
21-Feb-2025 16:01:23.634 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-jsse-nio-8443"]
톰캣 실행 후 catalina.out 파일 확인 시 위와 같은 로그가 있으면 https 8443 포트가 정상 실행된 것입니다.
브라우저에서 https://서버도메인:8443으로 접속하여 https 적용이 잘 되었는지 확인하면 됩니다.
중요정보 노출 - 에러메세지를 통한 정보노출
취약점 발생 예시
사이트 URL 하위 존재하지 않는 페이지 접속 시도 시 HTTP 405 에러가 발생하는 경우입니다.
해당 페이지에서 서버 종류 및 버전 정보가 노출되어서 개선이 필요합니다.
취약점 발생 재연 방법
포스트맨으로 허용되지 않는 DELETE 같은 메소드 요청 시 405 에러가 발생됩니다.
취약점 조치 방법
400~500번대 에러 코드에 대해 별도로 생성한 에러 페이지로 Redirect 되도록 설정하면 됩니다.
<error-page>
<error-code>404</error-code>
<location>/code404.jsp</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/code405.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/code500.jsp</location>
</error-page>
위와 같이, 프로젝트 WEB-INF 폴더 web.xml 파일에 에러코드에 대한 에러페이지를 설정합니다.
src/main/webapp 폴더가 웹 애플리케이션의 루트 경로 (/) 입니다.
error-page 하나당 한 개의 error-code만 인식합니다.
Leave a comment