정보보안기사

서버 보안 관리 - 1

ragdo11 2023. 3. 26. 13:16

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

 

로깅 - 로깅은 이미 발생한 나쁜 일을 알려주기만 하는 반적용적 제어이다. 하지만 효과적인 로깅은 시스템의 파괴 혹은 고장 시에 무슨 일이 발생했는지를 빠르고 정확하게 찾을 수 있게 도와주고 효율적으로 교정과 복구 노력에 집중할 수 있게 해준다.

 

윈도우의 로그 분석과 설정

윈도우는 이벤트라는 중앙 집중화된 로그를 수집하여 저장한다. 로그가 중앙 집중화되어 관리하기 편하지만 공격자가 한 로그만 삭제하면 되므로 위험하고, 로그에 대한 보안 수준 역시 낮은 편이다.

 

- 윈도우 시스템 이벤트 로그 종류

 윈도우 시스템은 응용 프로그램 로그, 보안 로그, 시스템 로그와 같은 세 가지 로그를 이벤트에 기록하며 OS 구성에 따라 디렉터리 서비스 로그, 파일 복제 서비스 로그, DNS 서버 로그가 추가될 수 있다.

· 응용 프로그램 로그 : 응용 프로그램이 기록한 다양한 이벤트가 저장되며, 기록되는 이벤트는 소프트웨어 개발자에 의해 결정된다.

· 보안 로그 : 유효하거나 유효하지 않은 로그인 시도 및 파일 생성, 열람, 삭제 등의 리소스 사용에 관련된 이벤트를 기록한다. 감사로그 설정을 통해 다양한 보안 이벤트 저장이 가능하다.

· 시스템 로그 : Windows 시스템 구성요소가 기록하는 이벤트로 시스템 부팅 시 구성요소의 오류를 이벤트에 기록한다.

 

- 로그 정책 설정

윈도우 로그 정책은 로컬 보안 정책 메뉴의 로컬 정책 - 감사 정책에서 확인할 수 있다. 윈도우의 경우 유닉스에 비해 로깅하는데 시스템 자원이 많이 소모되므로 모든 정보를 로깅하도록 설정하는 것은 바람직하지 않다.

 

- 이벤트 로그 파일

이벤트 로그 파일은 %Windows%\system32\config 폴더 아래의 .evt 확장자를 가진 파일이다.

· 응용 프로그램 로그 : AppEvent.evt

· 보안 로그 : SecEvent.evt

· 시스템 로그 : SysEvent.evt

이벤트 로그 파일은 바이너리 형식이기 때문에 별도의 뷰어 프로그램으로 열어야 한다.

 

유닉스/리눅스의 로그 분석과 설정

유닉스에는 로그를 중앙 집중적으로 관리하는 syslogd 데몬이 있지만, 각 데몬이 로그를 별도로 남기는 경우도 많다. 유닉스에서는 로그가 다양한 경로로 남기 때문에 모두 파악하고 관리하기 어렵지만, 다양한 로그를 바탕으로 해커를 추적하는 것이 가능하다.

 

· utmp(x) 로그

utmp(x) 파일에 로그를 남기는 프로그램은 utmp 데몬이다. utmp 데몬은 유닉스의 가장 기본적인 로깅을 제공하는 데몬으로 현재 시스템에 로그인한 사용자의 상태를 출력한다. utmp.h에서 정의된 구조체로 로그인 데이터를 저장하는데 이때 바이너리 형태로 저장하기 때문에 vi 에디터로는 확인할 수 없다.

utmp 데몬에 저장된 로그를 출력하는 명령어는 w, who, users, whodo, finger 등이 있다. (시스템마다 다름)

 

· wtmp(x) 로그

wtmp(x) 파일에 로그를 남기는 wtmp 데몬은 /usr/include/utmp.h 파일의 구조체를 그대로 사용하며 utmp 데몬과 비슷한 역할을 한다. 사용자의 로그인, 로그아웃 정보 및 시스템의 shutdown, 부팅 정보를 가진다. 역시 바이너리 형태를 지니며 로그의 내용은 last 명령어로 확인할 수 있다.

 

· sulog(Unix/SunOS)

su는 권한 변경에 대한 로그다. 즉, 로그인한 계정의 권한을 변경할 때 썼던 su 명령에 대한 로그다.

/var/log/sulog 파일에 텍스트 형식으로 남으며 권한이 600으로 설정되어 있기 때문에 관리자만 읽고 쓸 수 있다.

su 로그는 공격자가 일반 계정으로 로그인한 후 패스워드 추측 공격 등을 수행했을 때 권한 변경 실패를 의미하는 여러 개의 - 로 구성된다. 관리자는 이를 포착하여 공격 의도를 가진 계정을 추측해낼 수 있다.

 

· acct/pacct 로그

pacct(process account) 로그는 시스템에 로그인한 모든 사용자가 수행한 프로그램에 대한 정보를 저장하는 로그다. 이 로그는 사용자가 로그인했다가 로그오프할 때까지 입력한 명령과 연결에 이용한 터미널의 종류와 시간 등을 저장한다.

pacct 로그는 해커를 추적하기 위한 목적보다는 대형 시스템을 여러 사용자가 비용을 지불하는 형식으로 공유하는 경우 각 사용자에 대한 요금을 부과하기 위해 이용된다. 시스템 자원을 비교적 많이 소모한다.

/usr/adm/pacct 파일에 바이너리 형태로 저장되며 acctcom, lastcomm 명령을 통해 볼 수 있다.

 

· .sh_history 또는 .bash_history

유닉스에서는 실행한 명령에 대한 기록이 [셸의 종류]_history 파일 형식으로 각 계정의 홈 디렉터리에 저장된다. history 명령을 내리면 실행한 명령이 순서대로 출력된다.

history 내용은 텍스트 형태로 저장되고 cat이나 more 명령으로 파일을 실행하여 확인할 수 있다. history 파일은 600 권한으로 파일 소유자만 읽고 쓸 수 있으나 공격자에게 많은 정보를 줄 수 있어 위험하기도 하다.

 

· loginlog(Unix/SunOS), btmp(Linux)

Linux : /var/log/btmp에 바이너리 파일로 되어 있으며 그 내용을 확인하기 위해서 lastb 명령을 사용한다. 로그인에 실패한 모든 로그를 남긴다.

Unix(SunOS) : /var/adm/loginlog에 텍스트 파일로 되어 있으므로 vi 등의 편집기를 통해 로그 내용을 확인할 수 있다. 로그인을 5회 이상 실패 시 실패한 로그를 남긴다.

 

· lastlog

가장 최근에 성공한 로그인 기록을 담고 있는 로그 파일이다. 바이너리 파일로 되어 있으며 lastlog(Linux), finger(Linux, Unix/SunOS) 명령을 사용한다.

 

· FTP 파일 전송 로그(xferlog)

FTP 로그 파일로서 proftpd 또는 vsftpd 데몬들의 서비스 내역을 기록하는 파일이다. 공격자가 FTP 서비스를 이용해 시스템에서 어떤 파일을 복사했는지, 반대로 어떤 파일을 시스템에 복사해두었는지 찾아내야 할 때 유용하다. 파일을 전송한 날짜와 시간, 접근 시스템의 IP, 전송한 파일을 확인할 수 있다.

 

· HTTPD 로그

웹서비스에 의한 로그는 /usr/local/apache/logs 디렉터리에 Access_log, Error_log 등과 같은 로그 파일로 남는다.

 

+ dmesg : 리눅스가 부팅될 때 출력되는 모든 메시지를 기록한다. 부팅 시의 에러나 조치사항을 살펴보려면 이 파일을 참조한다.

+ messages : 시스템의 가장 기본적인 로그파일로서 시스템 운영에 대한 전반적인 메시지를 저장한다. 주로 시스템 데몬들의 실행상황과 내역, 사용자들의 접속정보, TCPWrapper 접근 제어 정보 등을 저장한다.

+ secure : 주로 사용자의 원격접속 정보를 기록하고 있는 로그파일로 서버보안에 아주 민감하고 중요한 파일이다.

 

유닉스/리눅스 시스템 로그 설정

보통 유닉스에서는 syslog라는 API에 의해 로그를 생성하고 관리한다. 데몬 프로세스인 syslogd는 운영체제에 의해 자동으로 시작되는데, 데몬 프로세스의 시작 시에 환경설정 파일 /etc/syslog.conf를 읽어서 어떤 로그를 어디에 남길지 결정하게 된다.

/etc/syslog.conf 파일의 각 행은 아래의 포맷으로 정의되어 있다.

facility.priority; facility.priority						action(logfile-location)

이는 facility(데몬)에 대하여 priority(로그 레벨)의 경우에 해당하는 상황이 발생하면 logfile-location에 기록을 남기라는 의미이다.

 

- facility : 서비스 이름(메시지 종류)

facility 설명
* 모든 서비스를 의미한다.
auth login과 su처럼 사용자 권한을 사용하거나 변경할 때 사용한다.
authpriv 선택된 사용자만 읽을 수 있는 파일에 로그를 남기는 것을 제외하면 auth랑 똑같다.
console 콘솔에 일반적으로 나타나는 메시지다.
cron 시스템 스케줄러에서 보내는 메시지다.
daemon 별도의 핸들러가 없는 모든 시스템 데몬의 로그다.
ftp FTP 데몬의 전송을 로그로 남기도록 설정할 수 있다.
kern 커널 메시지다.
lpr 프린터 시스템에서 오는 메시지다.
mail 메일 시스템에서 오는 메시지다.
mark 로그에 20분마다 단순 통보하는 메시지로 실제 로그가 아니다.
news 인터넷 뉴스 데몬에서 보내는 메시지다.
ntp Network Time Protocol이 보내는 메시지다.
security 각종 보안 시스템이 보내는 메시지다.
syslog 로그 서비스 자체적으로 로그를 남길 수 있다. 로그 시스템에서 보내는 로그는 혼란을 피하기 위해 남기지 않도록 한다.
user 사용자 프로그램에 대한 로깅이다.
uucp Unix-to-Unix copy 프로토콜이 보내는 로그다.
local0~7 local0에서 local7 관리자가 사용할 수 있도록 예약된 것이다.

 

- priority : 메시지 우선순위(또는 로그 level)


높음







레벨







낮음
Priority
(단축형)
설명
none 어떠한 경우에도 로그를 남기지 않는다.
Emergency
(emerg)
시스템이 비정상적인 상태. 모든 터미널에서 메시지가 깜빡임
시스템이 멈췄거나 아주 불안정한 패닉 상태
alert
(alert)
emerg 레벨보다는 안정되나 아주 좋지 않은 상태
시스템을 계속 가동시킬 수 있지만 즉각 조치해야 함
Critical
(crit)
하드웨어나 심각한 소프트웨어 문제같은 치명적인 오류
하드 드라이브에 bad 블록이 생겼을 때 발생
Error
(err)
일반적인 에러/오류가 발생한 상황
고쳐야하지만 시스템을 망가뜨릴 정도는 아니다.
Warning
(warning)
경고 메시지
Notice
(notice)
에러/오류는 아니지만 관리자의 조치가 필요한 상황
Information
(info)
일반적인 시스템 정보
debug
(debug)
보통 프로그래머만 사용한다.
어떤 프로그램이 동작하는 원리에 대해 알고자 하는 관리자가 사용한다.
* 모든 수준의 로그를 남김

 

- action

로그를 어디에 남길 것인지를 결정한다. 로그 파일, 콘솔, 원격 로그 서버, 특정 사용자 등에 로그를 남길 수 있다.

· 로그 파일 : 파일명(경로) 지정 (/var/log/secure 등)

· 콘솔 : /dev/console로 지정 시 콘솔 출력

· 원격 로그 서버 : @호스트 주소를 통해 지정한 호스트로 로그를 보낸다.

· user: 지정된 사용자의 스크린으로 메시지를 보낸다.

· * : 현재 로그인되어 있는 모든 사용자의 스크린으로 메시지를 보낸다.

 

- 예시

*.info;mail.none;news.none;authpriv;none					/var/log/messages

*.info는 모든 서비스에 대한 info 수준 이상의 로그를 /var/log/messages 로그 파일에 기록하되, mail, news, authpriv 서비스에 대해서는 로그 파일에 기록하지 말라는 의미이다.

세미콜론으로 구분되어 있는 것은 여러 개를 지정하기 위함이고, 세미콜론은 OR을 의미한다.

 

로그 순환

시스템 로그파일에 대하여 rotate, 압축 또는 메일을 발송해주는 리눅스시스템 로그파일 관리기이다.