[환경]
* 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 |