본문 바로가기
(실기) 정보보안기사&산업기사

웹 서버 취약점 3 (httpd.conf 주요설정 암기)

by IT매니절 2024. 4. 1.

기타 웹 서버 보안 대책

1) 웹 서비스 최소 권한 사용자 운영
- 권한 탈취가 발생할 가능성이 존재하므로, 최소한의 권한을 가진 사용자와 그룹으로 웹 서버 프로세스를 실행해야한다.
- 웹 서버 프로세스가 root 권한으로 구동될 경우, root 권한으로 시스템 전체의 제어권을 탈취 당해 피해범위가 확산될 수 있으므로, 피해 범위로 최소화하기 위해 별도의 권한으로 서버 프로세스를 실행할 필요가 있다

대응책
웹 서버 프로세스를 실행할 별도의 사용자 및 그룹을 생성하고 해당 사용자로 시스템에 로그인 할 수 없도록 설정
ex /etc/passwd의 로그인 쉘 부분을 /sbin/nologin 또는 /bin/false로 설정
httpd.conf에 서버 프로세스의 실행 권한을 해당 사용자 및 그룹으로 설정
ex
User apache (ex User nologin)
Group apache (ex Group nologin)

 

( 웹 서버 프로세스
- 리스닝 프로세스 (연결 요청 수락)
- 서비스(작업) 프로세스 (클라이언트와 통신하면서 서비스 제공)

 

포트
사용목적
1. 웰론포트 0~1023
2. 레지스터드 포트 1024~49151
3. 다이나믹 포트 49152~65535

사용권한
1. privileged 포트 1~1023
2. unprivileged 포트 1024~65535

80/tcp 포트는 웰론포트이면서, privileged 포트(권한 필요)이기 때문에 root 권한으로 포트를 열어야 한다 )

 

 

 

심볼릭 링크 사용 설정 제거
개요
- 심볼릭 링크 기능을 사용하여 다른 위치의 파일이나 디렉터리와 연결하여 사용할 수 있는데, 웹에서 허용하는 디렉터리 외에 다른 디렉터리를 참조하는 링크가 존재하는 경우 해당 링크를 액세스 할 수 있는 위험성이 존재
- 루트 디렉터리에 심볼릭 링크를 걸게 되면 웹 서버 구동 사용자 권한으로 모든 파일 시스템 파일에 접근할 수 있게 되어 민감한 파일을 누구나 열람할 수 있는 문제점이 발생한다

 

대응책
- 아파치 웹서버 httpd.conf 모든 디렉터리(/) 섹션에서 FollowSymLinks 설정 삭제
<Directory />
   Options FollowSymLinks
</Dorectory>

 

 

웹 서비스 정보 숨김
- 웹서버의 응답 헤더나 에러 메시지 등에서 웹서버 버전이나 종류, OS 정보 등을 전송한다. 이 정보는 잘 알려진 취약점을 공격하는데 이용되므로, 배너 정보를 숨기는 것이 안전

 

(익스플로잇Exploit : 어플리케이션, 서버 버전/종류 등 시스템이나 어플리케이션의 취약점을 이용한 공격행위나 공격코드)

 

대응책
- 아파치 웹서버 httpd.conf 설정에서 ServerTokens에 Prod 설정
(취약한 설정 : Full, Min, OS)

- 아파치 웹서버 httpd.conf 설정에서 ServerSignature Off 설정 (에러 메시지에 불필요한 정보 차단)

 

 

웹서버 설정파일httpd.conf 주요 지시자


일반 설정
1) ServerRoot "/etc/httpd"
- 웹서버가 설치된 최상위 디렉터리 경로. 설정파일, 로그파일, 모듈 등 위치.

2) Listen 80
- 클라이언트가 접속할 웹서버의 리스닝 포트 지정

3) User nologin
    Group nologin
- 서버 프로세스를 실행할 사용자와 그룹 정보 지정

 

4) ServerTokens Prod

- HTTP 응답 시 헤더의 Server 필드를 통해 제공할 서버 관련 정보의 레벨을 지정

 

5) ServerSignature Off

- 웹서버 에러메시지에 서버 관련 정보를 제공할 것인지 여부 지정

 

6) ServerAdmin admin@naa.com
- 에러메시지에 포함될 관리자 메일 주소 설정

7) DoumentRoot "/var/www/html"
- 웹 어플리케이션 자원들이 위치하는 최상위 디렉터리

 

8) DirectoryIndex index.php index.html
- 디렉터리만 명시하여 요청될 경우 이를 처리할 자원 목록을 지정. 명시한 순서대로 해당 자원을 검색하고, 없으면 파일목록을 반환하거나 에러 메시지를 반환

 

타임아웃 관련 설정

1) Timeout 120
- 서버와 연결된 후 클라이언트와 서버 간에 아무런 메시지가 발생하지 않을 동안의 대기 시간 (초단위)

2) KeepAlive On
- 클라이언트와 서버 프로세스간의 연결을 일정 조건에 따라 지속시켜서, 동일한 연결을 통해 동일 클라이언트의 다수 요청을 처리하는 기능의 사용 여부를 지정
(TCP 연결 설정에 대한 부하를 줄이고 효율적으로 통신할 수 있는 장점)

3) MaxKeepAliveRequests 100
- KeepAlive 기능 사용시, 클라이언트와 서버 프로세스간에 연결을 지속시키는 동안 허용할 최대 요청 건수

4) KeepAliveTimeout 15
- KeepAlive 기능 사용 시, 클라이언트와 서버 프로시스간에 연결을 지속시키는 동안 클라이언트의 마지막 요청 이후 다음 요청을 대기하는 시간

5) RequestReadTimeout header=5 body=10
- 클라이언트로부터 요청 메시지의 헤더부와 바디부를 모두 수신하는 시간에 대한 타임아웃 지정. (지정시간동안 모두 수신하지 못하면 408 에러 응답 메시지 반환. Slow HTTP Header, Slow HTTP POST에 대응)

 

로그 관련 설정
1) ErrorLog logs/error_log
- 에러 로그파일의 경로 지정

2) CustomLog logs/access_log combined
- 접속기록을 저장하기 위한 로그 파일 지정