본문 바로가기

Information Security/Hacking

웹 서버 보안 대책 (Apache 설정 기준)

반응형

Apache 기준 웹 서버 보안설정 관련

* 웹 서버 보안 대책 (Apache httpd.conf 기준) : 웹 서버 운영 시, 최소한의 권한, 최소한의 정보 노출 등 각종 보안 위협에 대한 대비가 가능한 사전 설정이 요구됨.
(취약한 부분에 대한 Insight를 위한 글로, 대부분 웹서버 설정은 방법의 차이지, 취약한 부분은 유사)

 

 

 

* httpd.conf 내 각종 보안 위협 대비 설정

유형 지시자 설정 방식 설명
리스닝 포트 지정 Listen 포트번호
ex) Listen 80
- 클라이언트가 접속할 웹서버의 Listening 포트 지정
심볼릭 링크 사용 설정 제거 Options FollowSymLinks 제거
ex) Options None 으로 변경
- 심볼릭 링크로 인해, 허용 외에 다른 디렉터리에 액세스 할 수 있는 위험성 존재


- None 설정 후 심볼릭링크 너머의 경로 요청 시, 403(Forbidden) 반환
응답 헤더 필드 노출 제거 ServerTokens 변경
ex) ServerTokens Prod





ServerSignature 변경
ex) ServerSignature Off
- ServerTokens는 HTTP 응답 시 헤더의 Server 필드에 정보 레벨 노출 수준을 지정
(웹서버 종류/웹서버 버전/OS/설치된 모듈 정보)


- ServerTokens는 4가지 설정 레벨이 존재
1) Prod (웹서버 종류 - 권장)
ex) Server : Apache

2) Min (Prod 정보 + 웹서버 버전)
ex) Server : Apache/2.2.15

3) OS (Min 정보 + 운영체제)
ex) Server : Apache/2.2.15 (Fedora)

4) Full (OS 정보 + 설치 모듈(응용프로그램) 정보
ex) Server : Apache/2.2.15 (Fedora) PHP/5.2.13


- ServerSignature는 웹서버에서 직접 생성하는 에러 메세지(HTTP 에러 메세지), 디렉터리 리스팅 메시지 등에 관련 정보 제공 여부를 지정
웹서버 설치 최상위
디렉터리 경로 지정
ServerRoot "경로"
ex) ServerRoot "/etc/httpd"
- 웹 서버가 설치된 최상위 디렉터리 경로 지정


- 설정파일, 로그파일, 모듈 등이 위치
최소 권한 운영 User 계정명
Group 계정명
ex) User Nobody
Group Nobody
- 서비스를 제공하는 서버 프로세스를
실행할 사용자(User)와 그룹(Group) 정보 지정


- 추가로, /etc/passwd에 해당 User와 Group을 시스템 로그인 불가능하도록 설정
ex) 로그인 쉘을 /sbin/nologin 또는 /bin/false로 설정하여 시스템 로그인 불가능 하도록


- root의 경우 리스닝 포트(Priviledged Port)에 대한 오픈을 담당하기 때문에, 웹서버로 사용자 TCP 연결 요청 시, 연결 수락에 필요


- 혹여나, 공격자가 웹 취약점을 이용, 웹 서버를 통해 시스템 접근 권한 탈취 시에도, 시스템 로그인이 불가능하도록 사전 설정하여, 피해 최소화
관리자 메일 주소 설정 ServerAdmin 이메일주소
ex) ServerAdmin admin@admin.com
- 클라이언트에게 전달되는 에러 페이지 상 포함될 관리자 메일 주소 설정
처리 자원 목록 지정 - DirectoryIndex 파일명.확장자 파일명.확장자
ex) DirectoryIndex index.php index.html
- 클라이언트가 디렉터리만 명시하여 요청한 경우 이를 처리할 자원 목록 지정
ex) http://192.168.10.1/home/


- 지시자에 명시한 순서대로 해당 자원 검색, 최종적으로 해당 자원 없을 시, 에러메세지 반환 또는 파일 목록 반환(디렉터리 인덱싱 기능 사용 시)

 

 

 

* httpd.conf 타임아웃 관련 설정

유형 지시자 설정 방식 설명
Timeout Timeout 초단위
ex) Timeout 120
- 클라이언트와 서버 간 연결 상태에서 아무런 메세지가 발생하지 않을 동안의 대기 시간
KeepAlive KeepAlive On 또는 Off
(On : 사용 / Off : 사용 안함)
- 클라이언트와 서버 프로세스 간 연결을 일정 조건에 따라 지속시켜, 동일 클라이언트의 다수 요청을 처리하는 기능 사용 여부


- 서버가 매번 요청에 대해 설정, 응답 이후에 연결을 종료하는 Connectionless한 통신 방식에 비해 TCP 연결에 대한 부하 감소, 효율적 통신 가능
MaxKeepAliveRequests MaxKeepAliveRequests 요청건수
ex) MaxKeepAliveRequests 100
- KeepAlive On 상태에서, 허용할 최대 요청 건수 지정 (초과 시, 연결 종료)
KeepAliveTimeout KeepAliveTimeout 초단위
ex) KeepAliveTimeout 15
- KeepAlive On 상태에서, 클라이언트의 마지막 요청 이후, 다음 요청을 대기하는 시간을 지정
(해당 시간 내 추가 요청 없을 시, 연결 종료)
RequestReadTimeout RequestReadTimeout header=초 body=초
ex) RequestReadTimeout header=5 body=10
- 클라이언트 request 메세지의 header와 body를 모두 수신하는 시간 제한을 지정


- 지정 시간 내 요청의 header와 body부를 모두 수신하지 못할 시, 408(RequestTimeout) 반환


- Slow 계열 HTTP DDoS 공격에 효과적 대응
(Slow HTTP Header, Slow HTTP POST)

 

 

 

* httpd 웹 로그 관련 설정

유형 경로 설정 방식 설명
ErrorLog (ServerRoot 지시자)웹서버 설치 루트/logs/error_log
ex) ErrorLog logs/error_log
- 웹 서버(혹은 기타) 구동 중 발생한 에러 및 디버깅 메세지 로그파일의 경로
CustomLog (ServerRoot 지시자)웹서버 설치 루트/logs/access_log
ex) CustomLog logs/access_log combined
- 요청한 자원에 대해 응답한 내용(정보)을 기록(access log)

- 접속 기록을 저장하기 위한 로그 파일의 경로

 

 

 

* 웹 로그 구조

1) 웹 로그 종류

종류 설명
NCSA CLF
(Common Log Format)
- Apache 및 Tomcat의 기본 포맷
NCSA ELF
(Extended Log Format)
- CLF에 Referer, User-Agent값이 포함된 포맷
W3C ELF - Referer, User-Agent 및 Cookie 및 사용자 정보를 추가로 남길 수 있는 포맷
- 주로 IIS에서 사용

 

 

 

2) 웹 로그 포맷 (Apache ELF 기준 포맷)

식별자 설명
Host Client의 호스트 or IP 주소
ex) Host : 192.168.10.2
Ident Client의 사용자 이름 (보통 "-"로 대체 기입)
ex) Ident : -
Authuser 인증이 요청된 원격 사용자 이름 (보통 "-"로 대체 기입)
ex) Authuser : -
Date and Time 요청을 보내온 시일 정보 : dd/mm/yyyy:hh:mm:ss 형태
ex) [13/Sep/2021:09:00:00 +0900]
Request Client가 보내온 요청 라인(Request Line) 정보
ex) Request : "GET http://www.example.com/index.jsp?..."
Status Client 요청에 대한 처리 상태를 나타내는 상태 코드(Status Code)
ex) Status : 200
Bytes 서버에서 클라이언트로 전송된 응답 데이터의 크기 (헤더 제외)
ex) Bytes : 234
Referer 요청된 URL이 참조 되거나 링크된 URL
ex) Referer : "http://www.example.com/default.jsp"
User-Agent 클라이언트 OS 및 브라우저 버전 정보
ex) User-Agent : "Mozilla/5.0 (Windows NT6.1...)"

- 위 방식 처럼 ~~ : ~~ 라고 나오면 좋겠지만, 일렬로 해당하는 값만 나열되어 있어, 웹 로그 구성을 모르면 해석이 난해할 수 있음.

반응형