본문 바로가기
정보보안/시스템보안

서버 보안 개요

by 피갓자 2025. 2. 17.

서버 보안 개요
서버 보안 개요

보안 유지 관리

개요

시스템을 적절하게 구축하여 보호하고 배치하였다면 환경의 변화, 새로운 취약점의 발견, 새 위협에 대한 노출로부터 지속적으로 보안 유지 관리를 해야 함

보안 유지관리 프로세스

  • 로깅 정보 감시, 분석
  • 정기적 백업 수행
  • 정기적 시스템 보안 테스트

로깅

로깅은 이미 발생한 나쁜 일을 알려주기만 하는 반작용적 제어임

효과적인 로깅은 시스템의 파괴 혹은 고장 시에 무슨 일이 발생했는지를 빠르고 정확하게 찾을 수 있도록 도와주고, 효율적으로 교정과 복구 노력에 집중할 수 있게 해줌

서버 관리자의 업무

시스템 관리자 계정으로 작업하기

시스템 관리자로 작업하는 방법에는 두 가지가 있음. 첫 번째는 root 계정으로 로그인하는 것이고, 두 번째는 일반 사용자로 로그인한 후 su(switch user) 명령을 이용해 root로 계정을 바꾸는 것임

 

1. root 계정으로 로그인하기

    • 일반 사용자로 로그인할 때와 같이 시스템에 접속하여 사용자 이름, 비밀번호를 입력함. 차이는 계정이 root라는 것과 로그인 직후 프롬프트 모양이 ‘#’이라는 것임

2. root 계정으로 변경하기 : su

  • root는 전체 시스템을 관리하는 사용자로, 권한이 막강함. 이 계정으로 직접 로그인을 허용하면 시스템에 침입하려는 악의적인 해커들의 타깃이 될 수도 있음
  • 따라서 root로 직접 로그인하는 것은 막아놓고 일반 사용자로 로그인한 후 su 명령을 사용해 관리자 계정으로 변경하는 것이 좋음

사용자 계정, 자원, 네트워크 관리

 

유닉스/리눅스 보안 시스템 관리

시스템 시작과 종료도스나 윈도우 운영체제와 달리 시스템을 종료될 때까지 커널 메모리상에 프로세스들이 작동하고 있으므로 시스템을 종료하기 위해서 파워를 끄는 등의 행위로 인하여 리눅

pgotza.tistory.com

시스템 로그 분석

로그에 대한 이해

윈도우와 유닉스의 로그 체계는 상당히 다름. 윈도우는 이벤트(Event)라는 중앙 집중화된 로그를 수집하여 저장하지만, 유닉스는 로그를 여러 곳에 산발적으로 저장함

윈도우는 로그가 중앙 집중화되어 관리하기 편함. 공격자가 한 로그만 삭제하면 되므로 위험하고, 로그에 대한 보안 수준 역시 낮은 편임

유닉스는 로그가 여러 곳에 저장되어 초보자의 경우 찾는 것조차도 쉽지 않음. 공격자도 로그를 모두 찾아 지우기가 쉽지 않음

 

윈도우 보안 로그 설정과 관리

해커에 대한 즉각적인 확인 시스템에 남은 로그 정보도 중요하지만, 현재 로그인된 사용자를 확인하는 것도 매우 중요함. 윈도우에서 이를 확인할 수 있는 명령은 net session임자신의 시스템에 로

pgotza.tistory.com

 

 

유닉스/리눅스 보안 로그 설정과 관리

로그 디렉터리 윈도우즈 시스템 구성요소가 기록하는 이벤트로 시스템 부팅 시 드라이버가 로드되지 않는 경우와 같이 구성요소의 오류를 이벤트에 기록유닉스에는 로그를 중앙 집중적으로 관

pgotza.tistory.com

IIS 웹 서버 로그

개요

IIS(Internet Information Services) 웹 서버에서 로그는 기본 W3C 형식으로 남도록 설정되어 있는데, W3C 형식 외에 NCSA 공통 로그 파일 형식, Microsoft IIS 로그 파일 형식 등으로 사용할 수 있음

IIS 웹 서버의 기본 설정이면서 가장 널리 이용되는 로그 형식은 ‘W3C 확장 로그파일 형식’임

W3C 로그 필드

날짜(date) : 사용자가 페이지에 접속한 날짜 저장

시간(time) : 사용자가 페이지에 접속한 시간을 ‘시:분:초’ 단위로 표기하거나 GMT(그리니치) 표준시로 표기하기 때문에 +9시간을 해주어야 대한민국 시각

서비스 이름(s-name) : 웹 서버가 제공하는 서비스 이름

서버 이름(s-computername) : 웹 서버 이름

서버 IP(s-ip) : 웹 서버 IP

메서드(cs-method) : HTTP 메소드

URI 스템(cs-uri-stem) : 요청 페이지(예 : www.xxx.com/?id=123 에서 ‘/’가 cs-uri-stem)

URI 쿼리(cs-uri-query) : 요청 파라미터(id=123)

서버 포트(s-port) : 웹 서버 포트

사용자 이름(cs-username) : 웹 페이지에 접속한 사용자 계정

클라이언트 IP(c-ip) : 웹 페이지에 접속한 사용자 정보이지만 보안 측면에서는 공격자 IP

프로토콜 버전(cs-version) : HTTP 프로토콜 버전

사용자 에이전트(cs(User-Agent)) : 클라이언트 브라우저와 운영체제 정보

쿠키(cs(Cookie)) : 사용자의 쿠키 정보를 기록

참조페이지(cs(Referer)) : 사이트 접속 전에 어느 사이트를 거쳤는지에 대한 정보를 제공. 이를 통해 배너 광고 효과 등을 파악할 수 있으며 보안 측면에서는 악성 코드 삽입 여부를 확인할 수 있음. 악성 코드가 삽입된 사이트는 링크를 걸어 놓고 다른 사이트로 접속되는 특징을 가지고 있음

호스트(cs(Host)) : 웹 서버에 요청을 보낸 호스트 이름

프로토콜 상태(sc-status) : 응답 코드(HTTP Status)이며 사용자 요청이 정상인지 아닌지를 제공

프로토콜 하위상태(sc-substatus) : 프로토콜 상태에 대한 추가적인 하위 상태 코드

Win32 상태(sc-win32-status) : Windows 기반 서버에서의 요청 처리 상태 코드

보낸 바이트(sc-bytes) : 서버에서 클라이언트로 전송한 데이터 크기

받은 바이트(cs-bytes) : 클라이언트에서 서버로 전송한 데이터 크기

걸린 시간(time-taken) : 처리 소요 시간(밀리초 단위)

Apache 웹 서버 로그

개요

클라이언트의 요청으로 웹서버가 응답한 내용은 엑세스 로그(access log) 파일에 기록되고, 클라이언트 요청으로 웹서버에 오류가 발생했을 경우 에러 로그(error log)에 기록됨

아파치 웹 서버는 httpd.conf 파일에서 LogFormat을 확인할 수 있음

  • LogFormat “%h %l %u %t “%r” %>s %b” common → common : 가장 일반적인 로그 기록
  • LogFormat “{Rererer}i-> %U” referer → referer : 현재 아파치 서버에 접속하기 전에 머물렀던 URL 기록
  • LogFormat “%{User-agent}i” agent → agent : 접속자의 웹 브라우저(OS 포함) 종류 기록
  • LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”” combined → combined : 위의 3가지 로그 포맷을 모두 조합한 것. 접속자에 대해 많은 정보를 기록하길 원한다면 combined로 설정하면 됨

combined 형식 로그에 사용되는 인수

%a : 클라이언트 IP주소

%b : 헤더 정보를 제외하고서 전송된 데이터의 크기, 전송된 데이터의 크기가 0일 때 ‘-’로 표시

%c : 응답이 완료되었을 때의 연결 상태

%{Header}e : 환경 변수 헤더의 내용

%f : 요청된 파일 이름

%h : 클라이언트의 도메인 또는 IP 주소

%H : 요청 프로토콜의 종류

%l : inetd를 사용하고 있을 때 클라이언트의 로그인명(100% 신뢰할 수 없음)

%m : 요청 방식

%p : 서버가 요청을 받아들이는 포트 번호

%P : 요청을 처리하는 자식 프로세스의 ID

%q : 질의에 사용된 문자

%r : HTTP 접근 방법과 접근 URL

%s : HTTP 실행 결과 코드

%{format}t : 웹 서버에 작업을 요구한 시간

%{Referer}i : 요청된 URL이 참조되거나 링크된 URL

%{User-Agent}i : 접속한 클라이언트의 OS 및 브라우저 버전 등을 나타냄

%T : 웹 서버가 요청을 처리하는 데 소요된 시간(초)

%u : 클라이언트 사용자(100% 신뢰할 수 없음)

%U : 요청된 URL 경로

%v : 요청을 처리하는 서버 이름

%V : 클라이언트 웹 브라우저

로그 형식

  • access_log : [클라이언트 IP / 클라이언트 로그인명 / 클라이언트 사용자명 / 날짜와 시간 / HTTP 접근 방법과 접근 URL / 실행 결과코드 / 서버에서 클라이언트로 전송한 데이터 크기 / 클라이언트의 웹 브라우저]
  • error_log : [오류가 생긴 날짜와 시간 / 오류 심각성 수준 / 클라이언트의 접근 IP 주소 / 접근한 웹 경로 / 성공 또는 실패 여부 / 발생한 오류에 대한 설명]