본문 바로가기
  • Trace
Web

Nikto로 웹서버 취약점 점검 및 조치

by seleuchel 2023. 12. 3.

[환경]

* OS: ubuntu 16.04.7 LTS(64)

* WEB: apache/2.4.18(DVWA)

* IP: 192.168.175.129

 

[Nikto 실행]

* Nikto 2.5.0*(https://github.com/sullo/nikto) (pearl 기반)

 

[결과]

 

[분석]

1) 서버정보가 노출되어있다. 

2) httponly 플래그가 설정되어있지 않다.

3) 클릭재킹을 방어하기 위한 X-Frame-Options 헤더가 설정되어있지 않다

4) X-Content-Type-Options 헤더가 설정되어있지 않다.

5) apache 버전이 낮다. (EOL, End of Life, 지원종료)

6) /config/, /tests/, /datbase/, /docs/ 디렉토리 대상으로 디렉토리 인덱싱 취약점이 확인된다.\

7) /icons/README: APACHE default file을 찾았다.

8) /login.php: 관리자페이지로 추정되는 페이지를 확인했다.

 

[조치]

1) 서버정보가 노출되어있다. 

security.conf에서 ServerTokens 값을 수정한다.

 

속성 공개정보 결과
Full 웹서버(이름, 버전) + OS + PHP 버전
OS 웹서버(이름, 버전) + OS
Minimal 웹서버(이름, 버전)
Minor 웹서버(이름, 버전)
Major 웹서버(이름, 버전)
Prod (secure)  웹서버 이름

* 설정 후에는 'systemctl restart apache2' 실행

 

가장 좋은 것은 서버 정보도 안보이게 하는 것이다. (Apache)

그러나 tomcat은 가능한데, apache는 헤더값에서 아예 보이지 않게 할 수 있는 방법이 없다.. (Server: Apache)

 

대신 에러 창에서 서버 정보를 보이지 않게 하는 방법이 있다.

security.conf에서 ServerSignature 값을 Off로 바꾸면 에러 창 등에서 서버 정보가 보이지 않게 된다.

 

조치결과

조치 전 조치 후

 

2) httponly 플래그가 설정되어있지 않다.

 

* 헤더값을 수정하거나 추가하려면 mod_header module이 로드 되어야한다.

* html 내 meta 태그를 활용한 설정은 무용지물이다.(<meta http-equiv="X-Frame-Options" content="deny">

(https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Frame-Options)

 

* httponly : javascript로 쿠키 조회 차단. XSS 공격 차단

* secure : https 통해 암호화된 요청이 있는 경우에만 서버로 쿠키가 전송됨 (http는 쿠키 전송 x)

* max-age: 0  : 쿠키 즉시 만료

* 정규식 ^: 문자열 시작

* 정규식 (.*): 임의 문자 0개 이상

* 정규식 $: 문자열 종료 

* 정규식 $1: 그룹화된 데이터를 가져옴

 

3) 클릭재킹을 방어하기 위한 X-Frame-Options 헤더가 설정되어있지 않다

* X-Frame-Options: 해당 페이지를 <object>, <iframe>, <frame>에서 렌더링할 수 있는지 여부를 나타냄

* 클릭재킹: 웹사용자가 자신이 클릭하고 있다고 인지하는 것과 다른 어떤 것을 클릭하게 속이는 악의적인 기법.

(ex. 불법 스트리밍 사이트 영상의 재생 버튼을 누를 때 재생버튼 위에 보이지 않는 다른 버튼을 눌러 악의적 사이트로 이동하는 등)

 

security.conf에서 Header 값을 설정한다(X-Frame-Options)

* 헤더값을 수정하거나 추가하려면 mod_header module이 로드 되어야한다.

* html 내 meta 태그를 활용한 설정은 무용지물이다.(<meta http-equiv="X-Frame-Options" content="deny">

(https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Frame-Options)

내용 설정 결과
deny 모든 frame object iframe 접근 막음
sameorigin 동일한 사이트의 frame object iframe 접근만 허용
allow-from <uri> 특정 uri 사이트의 frame object iframe 접근만 허용  

 

4) X-Content-Type-Options 헤더가 설정되어있지 않다.

* mime: http 통신에서 데이터형식을 식별하기 위해사용 

* 웹서버가 보내는 MIME 형식 외 다른 형식으로 해석하는 것을 제한한다.

(ex. MIME형식이 text/css여야만 css로 사용가능, text/javascript 및 application/javascript여야만 javascript로 사용가능)

* 첨부파일을 자바스크립트(css, js)로 하용하지 않게 한다.

* 즉, 웹서버가 보낸 지정한 mime 타입으로만 파일을 해석하게 하여 브라우저가 타입을 추측하여 파일을 실행하는 것을 막음으로써 XSS 등의 공격 차단 가능

내용 설정결과
sniff 브라우저는 서버로부터 받은 MIME 타입이 text/css가 아닌 경우 <style>로 로드하지 않음
text/javascript... 등 과 일치하지 않은 경우 script로 로드하지 않음
 

 

5) apache 버전이 낮다. (EOL, End of Life, 지원종료)

apache 버전을 최신 버전으로 올린다. 

 

6) /config/, /tests/, /datbase/, /docs/ 디렉토리 대상으로 디렉토리 인덱싱 취약점이 확인된다.

* 검색: intitle:"Index of /" site:점검사이트

* apache2.conf에서 웹서비스 디렉토리 리스팅을 제거한다. 

* 하위에 'Options Indexes' 내용을 삭제한다.(Options 지시자에 Indexes 내용 삭제)

조치 결과는 아래와 같다.

조치 전 조치 후

 

그러나 Forbidden(403)과 같이 에러 정보를 보여주는 것은 적절하지 않다.

ErrorDocument 설정을 통해 해결한다

 

 

7) /icons/README: APACHE default file을 찾았다.

기본 경로에 있는 파일을 제거한다.

 

8) /login.php: 관리자페이지로 추정되는 페이지를 확인했다.

실제 확인 결과 관리자페이지가 아니다. 관리자페이지인 경우 접근통제를 걸고 vpn 등 안전한 통신을 통해 접근할 수 있도록 하며 최소한의 관리자만 접근할 수 있도록 권한을 제한한다.

 

'Web' 카테고리의 다른 글

chrome cache fail  (0) 2022.05.02
키워드. 학습하기  (0) 2022.03.15