서버 정보 노출 취약점이란 서버/OS의 종류, 버전, 설치된 모듈 등의 정보가 응답 헤더에 노출이 되는 취약점이다. 해당 항목이 취약한 이유는 공격자가 버전을 확인하여 CVE 취약점을 검색해 공격을 시도할 수 있기 때문이다.
점검은 칼리리눅스에서 curl을 이용해 진행하였다.
curl -I 'IP 주소 또는 도메인'
웹 서버 응답 패킷에 서버 정보(nginx/1.14.0)가 노출되므로 취약하다고 판별할 수 있다.
curl -I 'IP 주소 또는 도메인'
웹 서버 응답 패킷에 서버 버전과 PHP 버전(Apache/2.2.8, PHP/5.2.4)이 노출되므로 취약하다고 판별할 수 있다.
X-Powered-By란?
-> 쉽게 말해서 어떤 기술로 개발되었는지를 나타냄
해당 취약점은 서버의 버전 정보를 확인할 수 있어 취약한 것이므로 서버의 정보가 노출되지 않도록 설정 파일을 수정한다.
- 설정 파일 수정을 통해 정보가 노출되지 않도록 조치
- Server, X-Powered-By, X-AspNet-Version 등 서버 정보가 노출될 수 있는 헤더 제거
sudo vi /etc/nginx/nginx.conf
nginx.conf 파일에서 server_tokens을 off로 설정한다.
sudo service nginx restart
위 명령어를 이용해 nginx를 재시작한다.
다시 확인해본 결과, 서버의 버전 정보가 노출되지 않았다.
sudo vi /etc/apache2/apache2.conf
apache2.conf 파일에서 ServerTokens을 Prod로 설정한다.
sudo service apache2 restart 또는
sudo /etc/init.d/apache2 restart
위 명령어를 이용해 apache를 재시작한다.
다시 확인해본 결과, 서버의 버전 정보가 노출되지 않았으나 X-Powered-By를 통해 PHP 버전 정보가 노출되고 있다.
sudo find / -name php.ini
위 명령어를 입력하여 php.ini 위치를 찾는다.
sudo vi /etc/php5/apache2/php.ini
php.ini 파일에서 expose_php를 Off로 설정한다.
다시 확인해본 결과, 서버가 Apache라는 것 외에는 아무 정보도 노출이 되지 않았다.
해당 취약점을 조치해야 하는 이유는 공격자 획득한 버전 정보를 이용해 CVE 취약점을 확인하고 공격을 시도할 수 있기 때문이다.
위 그림은 2020년에 발견된 Apache 취약점 중 일부 항목이다. 공격자는 알려진 취약점 정보를 이용해 어떤 버전에 어떤 포인트를 공격하면 될지 생각할 수 있게 된다.
2020년에 발생한 Apache CVE 정보는 링크를 참고하길 바란다.