반응형
* 웹 서버 보안 대책 (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...)" |
- 위 방식 처럼 ~~ : ~~ 라고 나오면 좋겠지만, 일렬로 해당하는 값만 나열되어 있어, 웹 로그 구성을 모르면 해석이 난해할 수 있음.
반응형
'Information Security > Hacking' 카테고리의 다른 글
레이스 컨디션 공격 (Race Condition Attack) (0) | 2021.03.05 |
---|---|
버퍼 오버 플로우 (BOF - Buffer OverFlow) 공격 (0) | 2021.03.02 |
검색엔진 정보 노출 취약점 (robots.txt) (0) | 2021.02.17 |
웹 서비스 메소드 설정 취약점 (0) | 2021.02.17 |
디렉터리 리스팅 취약점 (Directory Listing Vulnerability) (0) | 2021.02.17 |