개념
Syslog란 유닉스 시스템 내에서 사용하는 일종의 '로그 생성/관리' 도구이다.
커널 및 응용프로그램에 의해 발생하는 로그를 가리지 않는다
동작 방식과 여담
커널 및 응용 프로그램이 syslog API를 통하여 로그를 생성하면
syslogd 데몬 프로세스가 syslog.conf 설정 파일을 참조하여 지정한 로그파일, 콘솔(Console) 또는
외부 서버(Remote Server) 등에 로그를 기록한다
/etc/syslog.conf 파일은 시스템 로그 데몬이 실행될 때 참조되는 로그 설정 파일로서
어떤 로그를 어디에 남길지 → 로그 저장 규칙이 정의되어 있다.
syslog.conf 파일의 각 행들은 특정한 포맷으로 정의되어 있다
A 서비스(데몬) 에 의하여 → B로그 레벨이상의 상황이 발생한 경우 C의 형식(뭐 파일이라던지... 콘솔이나 외부서버등)
으로 로그를 남기라는 의미
A서비스가 B상황을 만들경우 C에게 보고해라
A병사가 B라는사고를치면 C에게 보고해라
정도 수순으로 정리가 가능하다.
최근 리눅스에서는 기존 syslog를 개선한 rsyslog를 주로 사용한다는데 뭐...
대충 보니 형식은 크게 다르지 않는걸로 보인다.
더하여
syslog는 정보보호 특성을 고려하지 않고 개발되었기에 UDP를 통해 로그를 전송할 때 공격자가 syslog 메시지를 모니터링 하는게 가능하다.
이 때문에 RFC 3195(Reliable Delivery for syslog) 에서는 다음과 같은 보안기능을 제공하도록 권고하고 있다.
1. 로그의 신뢰성 보장을 위한 연결 지향 프로토콜인 TCP를 이용
2. syslog 메시지 전송 시 기밀성 보장을 위한 syslog 서버 및 log 수집대상 서버의 IP를 제외한 payload를 보호할 수 있는 BEEP를 이용하도록권고
3. BEEP 연결 지향적이고 비동기적인 연결을 위한 응용 프로그램 프로토콜 프레임워크로 내부적 인증, 프라이버시, 재전송을 통한 신뢰성을 보장
근데 내 생각엔 rsyslog가 나온 이유가 이런걸로 커버하는게 한계가 있어서 나온게 아닐까 싶다
사용법
facility 항목에 기재할 수 있는 서비스의 경우엔 여러가지가 있다
* = 모든 서비스
auth = 인증과 같은 보안 관련 메시지
cron = cron,atd 데몬에 의해 발생하는 메시지
kern = 커널에 의해 발생하는 메시지 등....
여러가지가 있다 ( 다 적진 않았다)
priority 로그수준의 경우에는 리눅스에 무지하더라도 한번 보면 직관적으로 이해가 가능하다
Emergency = 좆된상황 (시스템 전면중단)
alert = 즉각적인 조치가 필요
Critical = 하드웨어 등의 심각한 오류발생
Error = 일반적인 에러/ 오류
Warning = 경고 메세지
Notice = 에러나 오류는 아니나, 관리자의 조치가 필요
Infomation = 의미 있는 정보 관련 메시지
debug = 디버깅용 메시지
위로갈수록 위험성이 높아지고
아래로 갈수록 위험성이 낮아진다.
Emergency 같은 상황은 뭐 갑자기 발로 컴퓨터를 차서 램이 탈거가 되거나... 하는 상황이려나? 감은 잘 안 잡히는데
일단 대충은 이해가 간다.
로그가 남겨지는 방식은
facility에 로그수준을 지정하게 되면 해당 수준 이상의 상황이 발생했을때만 로그가 남게 된다.
가령 Linx 구동시 CPU 부하로 인한 Critical 급의 오류가 빈번히 발생한다 하면 alert급으로 설정해 두면 되는것이다.
그에 더해 syslog.conf 에 로그수준을 "*" 으로 지정하면 모든 로그를 남기겠다는 의미이고
"none" 으로 설정하면 로그를 아예 남기지 않겠다는 의미이다.
action 영역에 관해 설명하자면
action은 로그를 어디에 남길 것인가를 결정한다.
로그 파일, 콘솔, 원격 로그서버, 특정 사용자 등에 로그를 남길 수있다.
왠 쌩뚱맞게 아까 [A병사가 B라는사고를치면 C에게 보고해라] 라고 했는데 이게 뭔소리나 하면
로그를 '남긴다' 는 행위가 일종의 '보고서를 남긴다' 라는 행위가 되므로 이상할것이 없다.
Action 원격 로그 서버를 통해 rsyslog 설정을 실제 하는법에 관해 보면
#provides UDP syslog reception
$MedLoad imudp.so
$UDPServerRun 514
로 이루워져 있으며
리눅스의 경우엔 Fedora , Backtrack 에서 이용한다 한다
해석하자면
rsyslogd 데몬 프로세스를 원격 로그 서버로 만들기 위해
rsyslogd.conf에 514/udp(syslog 기본 포트)를 설정한다는 내용이다
이딴게 산기문제에 나왔다니 허를 찔리는 기분이다 .(망할 정보보안기사)
예제
[Fedora-localhost] ps 및 netstat 명령을 통해 rsyslogd 데몬 기동 여부와 514/udp 포트 오픈 여부를 확인하는 내용이다
# hostname
{호스트 네임 출력}
# ps -ef | gref rsyslogd
{출력}
# netstat -anup | grep rsyslogd
{출력값}
으로 확인이 가능하다.
그외 잡다한 정보는 생략하였고
마지막으로 syslog.conf(rsyslog.conf) 설정 예시와 해석을 첨부한다
[1]
# kern.* /dev/console
- 1. kernel에 관련된 로그를 /dev/console(콘솔, 대부분 모니터 화면을 의미) 에 출력하라는 의미
- 2. 해당 설정은 #(주석처리) 처리 되어 있는데 적용하려면 주석을 제거하고 syslogd(rsyslogd) 데몬을 재시작 해 주면 된다.
[2]
*.info;mail.none;authpriv.none;cron.none /var/log/messages
- *.info 는 모든 서비스에 대한 info(mation 말하는듯) 이상 수준의 로그를 var/log/massages 로그 파일에 기록하되, mail, authpriv, cron 서비스에 대해서는 로그를 기록하지 말라는 (none) 의미이다.
- 2. 여기서 알 수 있듯이 세미콜론 (;) 으로 여러 Facility.Priority를 동시에 지정하는것이 가능하다.
[3]
authpriv.* /var/olog/secure
슬슬 감이 잡힐거다
- authpriv 에 속하는 서비스의 모든 로그 수준의 로그를 var/log/secure 로그 파일에 기록하라는 의미이다.
[4]
mail.* /var/log/maillog
- 위와 동일
[5]
cron.* /var/log/cron
- 위와 동일 (단 여기서 주체는 crond데몬과 atd 데몬 등에 의해 발생되는..)
[6]
*.emerg *
- 모든 서비스(*)의 emerg 수준 이상의 로그를 모든 사용자(*)에게 보내라는 의미이다.
[7]
uucp,news.crit /var/log/spooler
- uucp,news 서비스 관련 서버의 crit 수준 이상의 로그를 /var/log/spooler에 기록하라는 의미
[8]
local7.* /var/log/boot.log
- 시스템이 부팅될 때의 모든 수준의 로그를 (*) /var/log/boot.log에 기록하라는 의미이다.
'Operating System > Security' 카테고리의 다른 글
iptables 의 기본문법과 실전예제 (0) | 2023.04.12 |
---|---|
snort (침입 탐지 시스템) (0) | 2021.02.13 |