-
[보안] 웹서버 정보 감추기 - AWS Beanstalk 에서 Server Version Disclosure (Feat. .ebextension & .platform)Back End/보안 2022. 9. 17. 16:28
이 포스팅은 Apache 를 Proxy 로 사용하는 Beanstalk 환경에 대해서만 예시가 있습니다.
하지만 읽어보신다면 개념은 같기 때문에 Nginx 를 사용하는 경우도 동일한 접근법으로 접근하시면 됩니다 :D!* Tomcat 자체에서 발생하는 에러로 인한 서버스택 노출을 가리는 것은 추후에 포스팅하겠습니다.
Response 의 Server Header
Pen Test 결과, 아래와 같이 Response Header 에 서버 정보가 노출됨을 막아야 한다는 보고가 있었다.
서버정보가 포함되어있으면 해커들이 작업하기가 쉽다고 한다.보통 Tomcat 의 server.xml 을 변경하는 방법이 널리 알려져있는데, 직접 생성한 EC2 에는 먹힐 수 있으나
AWS Elastic Beanstalk 은 Tomcat 앞에 Apache 나 Nginx 같은 프록시가 붙어
Response 헤더에 서버정보를 추가하기에 해당 방법은 먹히지 않는다.
또한, Java 가 아닌 프로젝트들은 Tomcat 이 있을리가 없기에
해당 방법은 모든 프로젝트에 동일한 접근법을 적용하기 힘든 어려움이 있다.
그리고 일일이 인스턴스에 접속하여 직접 작업을 진행하게 되면Beanstalk 환경이 재배포될때 설정이 되돌아 갈 수 있으며, 소스코드로 관리되지 않기에 레파지토리에 작업기록이 포함되지 않아
작업자의 기억에 의존해야하는 단점이 있다.
.ebextension 과 .platform 을 사용하여 소스코드에 기록을 남길 수 있으며,
Elastic Beanstalk 이 관리하는 Proxy 에도 설정파일을 적용할 수 있다.
.ebextension 과 .platform
필자는 Apache 를 Proxy 로 사용하는 PHP 서버와 Java 서버에만 작업을 진행하였다.
Nginx 와 같은 다른 Proxy 를 사용하더라도 개념은 같으니 검색을 해보자!해야할 일은 간단하다.
아래의 설정파일을 Apache 가 읽을 수 있는 위치에 위치시키면 된다.
LoadModule security2_module modules/mod_security2.so <IfModule security2_module> SecRuleEngine On SecServerSignature "My Server Name :D!" </IfModule>
.platform 폴더에 아래와 같은 경로로 만들게되면 EC2 인스턴스의
/etc/httpd/conf.d
아래에server_disclousre.conf 라는 파일을 생성하게 된다.
Java 프로젝트 같은 경우 Jar 나 War 파일을 압축해제 했을 때 .platform 이나 .ebextension 폴더가 최상위경로에 생성되도록 패키징을 설정하여야 한다.
* 들어가기전에 같은 버전의 Apache Proxy 를 사용하더라도 AMI 가 서로 달라 실행하여야 할 커맨드가 달라질 수 있음을 알린다.
내가 담당하고 있는 프로젝트들의 인스턴스는 mod_security2.so 라는 라이브러리가 설치되어 있지 않았는데
AMI 구성에 따라 설치하고 Apache 를 재구동 시키는 명령어가 달랐다.
복사 붙여넣기로 .platform 이나 .ebextension 를 생성하지 말고
실제로 인스턴스에 접속한 후, 커맨드를 실행하며 원하는 결과를 얻는지 확인하고 해당 커맨드들을 .ebextension 에 위치시키는 것을 권장한다.
아래는 필자가 담당한 프로젝트에 따라 mod_security2.so 를 설치하기 위해 실행한 커맨드들이다.
Project 1.
Project 2.
위와 같이 Apache 를 재구동하는 커맨드도 다르고,
두개의 프로젝트 모두 Apache 2.4.x 이상의 버전이나 설치하는 커맨드도 차이가 난다.* 참고로 install mod_security 를 실행하였을 때 잘 설치된다면 그대로 따라하면 된다.
버전이 다르다는 오류가 나오면 해당 버전을 명시하여 install mod24_security 와 같이 설치하면 된다.Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64
Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64
마치며
.ebextension 의 container commands 와 commands 도 실행시점에 따라 사용법이 달라진다.
이러한 이야기를 모두 한 포스팅에 녹여내기엔 너무 포스팅이 무거워지기에 포함시키지 않았다.
무튼 요약하자면, .platform 으로 작성된 .conf 파일을 위치시키고, .ebextension 으로 파일이 위치되기전에 실행되어야 할 커맨드를 작성하면 된다.
참고로 Beanstalk 은 빌드파일이 배포될 때 마다 모든 설정이 리셋되지는 않는다.
실행환경은 그대로 유지되면서 소스코드만 변경되어 어플리케이션이 시작되기에 한번 설정한 플랫폼관련 설정들은 리셋되지 않는다.
하지만, 예기치 못한 오류로 환경자체를 재실행해야 되서 [환경재구축] 을 한다면 껍데기가 사라지고 다른 EC2 로 다시 구축되어
모든 환경들이 리셋된다. 그 결과, EC2 IP도 달라지게된다.
Reference
- 나의 삽질...
728x90'Back End > 보안' 카테고리의 다른 글
[XSS] HTML Escape Characters 리스트 (1) 2022.12.19 [AWS] AWS WAF 오탐 예외처리 (AWS WAF False Positive Mitigation) (0) 2022.12.17 [컴퓨터 보안] 네트워크 보안 (0) 2020.11.24 [컴퓨터 보안] 인증(Authentication) [메세지 인증(MAC), 사용자 인증, 디지털서명] (0) 2020.11.24 [컴퓨터 보안] 암호화(Encryption) (0) 2020.11.24