사내 WAF 로그 모니터링 중 웹서버 버전 정보가 담긴 로그가 보여 조치가 필요하다고 생각했다.

 

보고서 작성을 위해 외부에서 테스트를 해보니 웹 서버 버전 정보가 담긴 Server 헤더가 보이지 않았다.

 

이유를 찾던 중에 WAF에서 웹 서버 헤더를 필터링 할 수 있다는 것을 알게되어 실습을 해보았다.

 

● 취약점 정보

- Apache 웹 서버를 사용할 때 설정을 잘못하면 외부에 불필요한 정보가 노출될 수 있다.

 

- 아래 그림에서 보면 서버는 우분투 OS에 Apache 2.4.41 버전을 사용중인 것을 알 수 있다.

 

불필요한 정보 노출된 상황

 

 

● 조치 방법

- 우분투 20.04의 기준 /etc/apache2/conf-enabled/security.conf 파일에서 설정

 

- 설정 파일을 보면 ServerTokens 라는 필드가 존재

취약한 설정

 

- ServerTokens 필드 값에 따라 서버에 노출되는 정보가 결정된다.

1. Prod : 웹서버의 이름만 알려준다. (Apache)
2. Major : 웹서버의 이름과 Major 버전번호만 알려준다. (Apache2)
3. Minor : 웹서버의 이름과 Minor 버전까지 알려준다. (Apache2.4)
4. Min : 웹서버 이름과 Minimum 버전까지 알려준다. (Apache2.4.6)
5. OS : 웹서버의 이름과 버전, OS 정보를 알려준다. (Apache2.4.6 (Unix)) 
6. Full : 최대한의 정보를 모두 알려준다. (Apache2.4.6 (Unix) Resin/4.x.x)

출처 - https://travelc.tistory.com/80

 

- 해당 필드의 값을 Prod로 변경하면 Apache 라는 값만 반환한다. KISA의 "주요정보통신기반시설 기술적 취약점 분석ㆍ평가 방법 상세가이드"에서도 해당 값을 Prod로 설정하도록 권고한다. (추가로 서버 OS 정보에 대한 설정인 ServerSignature도 존재한다.)

ServerTokens 필드 값을 Prod로 변경

 

Apache란 정보만 반환

 

● WAF를 통해 Server 응답값 제거

- 회사 시스템은 Server 필드가 존재하지 않았지만 내 자그마한 WAF(ModSecurity)는 Server 필드는 남기고 Apache라는 값만 제거해보았다.

 

- 설정을 위해 "/etc/modsecurity/modsecurity.conf"파일에 다음 구문을 추가했다.

  * SecRuleEngine 필드 값을 on으로 해도 되지만, 웹 서버 접근이 차단될 수 있으니 참고하자

<IfModule security2_module>
    SecRuleEngine DetectionOnly
    ServerTokens Min
    SecServerSignature " " 
</IfModule>

 

- 설정을 바꾸고 apache를 다시 시작하면 다음과 같이 Server 필드는 "SecServerSignature"에서 작성한 내용만 존재한다.

 

- 외부에서는 Server 필드의 값이 지워졌지만, 내부 WAF 로그에서는 아래처럼 Server 필드가 그대로 나타나서 취약점이 있다고 오해했었다.

 

● 결론

- WAF로 웹서버 응답 헤더를 제어할 수 있다.

 

+ Recent posts