Back End/보안

[보안] 웹서버 정보 감추기 - AWS Beanstalk 에서 Server Version Disclosure (Feat. .ebextension & .platform)

DevPing9_ 2022. 9. 17. 16:28

 

 

 

이 포스팅은 Apache 를 Proxy 로 사용하는 Beanstalk 환경에 대해서만 예시가 있습니다.
하지만 읽어보신다면 개념은 같기 때문에 Nginx 를 사용하는 경우도 동일한 접근법으로 접근하시면 됩니다 :D!

 

* Tomcat 자체에서 발생하는 에러로 인한 서버스택 노출을 가리는 것은 추후에 포스팅하겠습니다.

 

Response 의 Server Header

Pen Test 결과, 아래와 같이 Response Header 에 서버 정보가 노출됨을 막아야 한다는 보고가 있었다.
서버정보가 포함되어있으면 해커들이 작업하기가 쉽다고 한다.

 

보통 Tomcat 의 server.xml 을 변경하는 방법이 널리 알려져있는데, 직접 생성한 EC2 에는 먹힐 수 있으나
AWS Elastic BeanstalkTomcat 앞에 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

 

>> 위와 같은 오류가 나와요!!!

 


마치며

.ebextensioncontainer commandscommands 도 실행시점에 따라 사용법이 달라진다.

이러한 이야기를 모두 한 포스팅에 녹여내기엔 너무 포스팅이 무거워지기에 포함시키지 않았다.

 

무튼 요약하자면, .platform 으로 작성된 .conf 파일을 위치시키고, .ebextension 으로 파일이 위치되기전에 실행되어야 할 커맨드를 작성하면 된다.

 

참고로 Beanstalk 은 빌드파일이 배포될 때 마다 모든 설정이 리셋되지는 않는다.  

실행환경은 그대로 유지되면서 소스코드만 변경되어 어플리케이션이 시작되기에 한번 설정한 플랫폼관련 설정들은 리셋되지 않는다.

 

하지만, 예기치 못한 오류로 환경자체를 재실행해야 되서 [환경재구축] 을 한다면 껍데기가 사라지고 다른 EC2 로 다시 구축되어

모든 환경들이 리셋된다. 그 결과, EC2 IP도 달라지게된다.

 

 

 

Reference

  • 나의 삽질...
 

[AWS] Spring Framework 프로젝트에서 .ebextensions 사용하기

Overview 필자가 삽질하며 .ebextensions 를 활용하여 AWS Beanstalk 을 설정하는 법을 정리한 글입니다. 언제 써야 할까? 한 번 세팅하고 계속 유지되어야 하는 설정들은 AMI 로 만들어 Beanstalk 에서 사용하

developer-ping9.tistory.com

 

 

[트러블슈팅] Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64 Error: httpd24 conflicts with httpd-2

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 yum install -y mod_security 를 입력하고 마주한 에러메세지이다. A..

developer-ping9.tistory.com

 

 

 

 

 

 

 

 

728x90