시스템 분석
시스템 로그 분석 및 관리
시스템 로그의 개요
- 초기에는 syslog라는 패키지를 사용
- syslogd라는 데몬이 /etc/syslog.conf 설정 파일을 기반으로 서비스별 로그 파일을 /var/log 디렉터리에 생성
- 최근에는 rsyslog(rocket-fast system for log processing) 패키지로 대체
- rsyslog는 멀티스레드, TCP, SSL, TLS, RELP(Reliable Event Logging Protocol), 데이터베이스, 보내는 목록 제한, 메시지 일부 필터링, 출력 포맷 제어 등의 다양한 기능 제공
rsyslog
주요파일
- /etc/rc.d/init.d/rsyslog : 데몬
- /etc/rsyslog.conf : 데몬 환경 설정
- /etc/sysconfig/rsyslog : 실행과 관련된 옵션이 설정
- /sbin/rsyslogd : 실제 rsyslogd 데몬 실행 명령
/etc/rsyslog.conf 파일
- facility : 메시지를 발생시키는 프로그램 유형
- priority : 위험의 정도
- action : 메시지를 보낼 목적지나 행동들
priority 종류
- crit : 크게 급하지는 않지만 시스템에 문제가 생김
- alert : 즉각 조정
- emerg, panic : 모든 사용자에게 전달해야 할 위험한 상황
로그 파일 관리 : logrotate
logrotate 개요
- 로그 파일을 여러개로 분할해주는 프로그램
- 설정은 /etc/logrotate.conf
- 응용 프로그램은 /etc/logrotate.d
- 현재 리눅스에서는 /etc/cron.daily 디렉터리에 등록되어서 cron에 의해 스케줄링 됨
[사용법]
$ logrotate [option] config_file
옵션
- -f : 강제로 환경 설정 파일을 읽어들여 실행
관련 파일 : /var/lib/logrotate.status
각 로그 파일별로 로테이션된 날짜가 기록된 파일
로그 관련 파일
로그 관련 주요 파일
/var/log/messages
- 시스템에서 발생하는 표준 메시지가 기록되는 파일
- root만 읽을 수 있음
var/log/secure
- 인증에 기반한 접속과 관련된 로드가 기록되는 파일
- login, tcp_wrappers, xinetd 관련 로그
/var/log/dmesg
시스템이 부팅할 때 출력되었던 로그
/var/log/xferlog
FTP 접속과 관련된 작업이 기록되는 파일
/var/log/cron
cron 관련 정보가 기록되는 파일
/var/log/boot.log
부팅 시 동작하는 데몬 관련 정보
/var/log/wtmp
콘솔, telnet, ftp 등을 이용하여 접속한 사용자 기록, 시스템을 재부팅한 기록 등의 로그가 쌓이는 파일
/var/log/btmp
로그인 접속이 실패한 경우를 기록
관련 명령어
last
사용자의 로그인 정보, 재부팅한 정보가 /var/log/wtmp에 바이너리 파일로 생성되는데 이 파일의 내용을 출력하는 명령어
[사용법]
$ last [option] 사용자명
옵션
- -f 파일명 : 로그 로테이션 설정이 되있을 시, 다른 로그 파일을 볼 경우 사용
- -n 숫자 : 해당 숫자 값 만큼 출력
- -t YYYYMMDDHHMMSS : 지정한 시간 이전에 로그인한 기록 출력
- -R : IP 주소나 호스트명을 출력 x
- -a : 호스트명이나 IP 주소 필드를 맨 마지막에 출력
- -d : IP 주소를 호스트 이름으로 변환하여 출력
- -F : 로그인 및 로그아웃 시간을 출력
- -i : IP 주소로만 출력
- -w : 사용자의 전체 이름, 도메인 이름 전부 출력
lastlog
각각의 사용자가 마지막으로 로그인한 정보를 출력해주는 명령. /var/log/lastlog 내용 출력.
[사용법]
$ lastlog [option]
옵션
- -u 사용자명 : 특정 사용자에 대한 정보만 출력
- -t 날짜 : 오늘부터 지정한 날짜만큼 거슬러 올라가 그 이후에 로그인한 사용자의 정보를 출력
lastb
로그인에 실패 정보를 출력. /var/log/btmp 파일에의 내용을 출력하는 명령.
[사용법]
$lastb [option] 사용자명
옵션 : last랑 같음
dmesg
커널 링 버퍼의 내용을 출력하고 제어하는 명령
[사용법]
$ dmesg [option]
옵션
- -c : 출력 후 지움
시스템 보안 및 관리
시스템 보안 관리
리눅스와 보안 개요
물리적 보안 설정
BIOS(Basic Input Output System) 보안 설정해야함. BIOS는 하드웨어를 점검하여 소프트웨어인 운영체제에 연결시켜 주는 기능을 함. 암호를 설정하는것이 좋음.
시스템 정보 감추기
로컬이나 외부에서 접속 할 떄 /etc/issue 및 /etc/issue.net에 설정된 메시지를 로그인 전에 제공하는데 리눅스 버전과 커널 버전이 명시되어 있기 때문에 바꾸는게 좋음
root 패스워드 변경 제한
grub을 이용하여 단일 사용자 모드로 접근한 뒤에 root의 패스워드를 변경할 수 있음. grub에 패스워드를 설정해야 함. grub이라고 입력 후 md5crypt이라는 명령을 입력해서 설정하려는 패스워드를 입력하면 패스워드 변경 가능.
사용자 관리
- 일반 계정 사용자이면서 UID가 0인 사용자를 찾아야 함
- 손쉬운 암호를 설정한 사용자를 찾아서 변경하도록 해야 함.
- 패스워드 없이 아이디만 입력해서 로그인이 가능한 계정을 찾아야 함.
- su 명령 제한을 위한 PAM 이용. sudo 등의 보안 프로그램 이용.
파일 시스템 관리
Set-UID, Set-GID, Sticky-Bit와 같은 특수권한은 필요 없는 경우 제거
sysctl과 보안
sysctl의 개요
- 커널 변수의 값을 제어하여 시스템을 최적화할 수 있는 명령
- 리눅스 커널 제어를 위한 매개 변수는 /proc/sys 디렉터리에 존재하고 이 변수를 제어하는 명령
- sysctl은 /proc/sys를 최상위 디렉터리로 인식, 하위 디렉터리는 '.'으로 대체하여 명령 수행.
- 재부팅 시에도 반영하게 하려면 /etc/sysctl.conf에 등록
관련 명령어 : sysctl
[사용법]
$ sysctl [option] 변수
$ sysctl [option] 변수=값
옵션
- -a, -A : 커널 매개 변수와 값을 모두 출력
- -p : 환경 변수 파일에 설정된 값을 출력, 파일명 지정 안할 시 /etc/sysctl.conf 출력
- -n : 특정 매개 변수에 대한 값을 출력
- -w 변수=값 : 매개 변수에 값 설정
주요 항목 분석
/proc/sys/net/ipv4 이후 디렉터리~
- /icmp_echo_ignore_all : ICMP 패킷 응답 여부
- /tcp_syncookies : SYN 패킷의 도착빈도가 일정한 횟수보다 많을시 해당 요청 허용 x, SYN Flooding 공격 막을 시
- /tcp_max_syn_backlog : TCP 프로토콜에서 한 소켓이 동시에 SYN 요청을 할 시 처리되지 아니한 대기 상태의 큐의 길이를 늘릴 시에 사용
- /icmp_echo_ignore_broadcasts : 브로드캐스트 주소에 ping을 전달하여 공격하는 형태인 smurf 공격을 막을 때 사용.
- /conf/all/accept_source_route : 해커가 특정 네트워크에 소스 라우팅 패킷을 보낼 수 있다면 돌아오는 반응을 가로채서 상대방의 호스트와 신뢰받은 호스트처럼 속일 수 있는데 이 기능을 사용하지 못하게 할 때
- /conf/all/rp_filter : 패킷이 들어오는 인터페이스와 나가는 인터페이스가 같은지를 검사
- /conf/all/log_martians : 스푸핑 패킷과 redirect된 패킷의 기록을 남길 지 여부를 지정
- /tcp_fin_timeout : TCP 세션 종료 후에 얼마나 세션연결을 유지하고 있을지 설정
- /tcp_keepalive_time : TCP 연결 상태를 계속 유지시키기 위한 시간 설정
- /ip_forward : 하나의 서버에서 IP를 공유하여 포워딩을 가능하게 할 것인지 여부를 지정
- /ip_local_port_range : 클라이언트 포트로 사용할 수 있는 포트범위의 값을 설정
- /tcp_timestamps : 외부에서 서버의 날짜 정보를 확인 가능하게 할 것인지를 지정
- /conf/all/accept_redirects : redirect 관련 패킷을 허가할 것인지를 결정하는 파일
- /conf/all/send_redirects : 서버에서 나가는 ICMP redirect패킷을 허가할 것인지를 결정하는 파일
- /proc/sys/fs/file-max : 커널에서 최대로 사용 가능한 파일 수를 지정
관련 명령어
SSH(Secure Shell)
ssh의 특징
- telnet, rlogin에 비해 안전
- 패스워드 입력 없이 로그인 가능
- rsh처럼 원격 셸 지원
- 원격 복사(scp)를 지원
- 안전한 파일 전송(sftp) 지원
ssh 설치
- openssh : openssh 서버와 openssh 클라이언트에 필요한 핵심적인 파일들이 들어 있는 패키지로 ssh-key 명령이 들어 있음
- openssh-server : 데몬인 sshd, sftp 서버 등이 있음
- openssh-clients : ssh, scp, sftp 등의 명령어가 들어 있음
ssh 서버 설정
- ssh 서버의 환경 설정 파일은 /etc/ssh/sshd_config
- 실행 데몬 스크립트는 /etc/rc.d/init.d/sshd
ssh 클라이언트 명령어 : ssh
[사용법]
$ ssh [option] 호스트명 or IP 주소
옵션
- -l : 다른 계정 접속(login)
- -p : 포트를 바꿈
인증 키를 이용한 SSH 서버 접속 : ssh-keygen
SSH 클라이언트에서 ssh-keygen 명령을 이용해서 비밀키와 공개키를 생성하고, SSH 서버에 공개키를 복사
[사용법]
$ ssh-keygen [option]
옵션
- -t : 사용할 암호화 알고리즘 적용
PAM(Pluggable Authentication Module)
PAM의 개요
- 사용자를 인증하고 그 사용자의 서비스에 대한 접근을 제어하는 모듈화된 방법
- 목적은 소프트웨어 개발과 안전한 권한 부여 및 인증 체계를 분리하는데에 있음
- 특정 서비스에 대한 사용자들의 허가 목록 파일, 사용자들의 거부 목록 파일, 사용자의 패스워드 길이 제한 등에 사용 됨.
PAM의 구성
- 라이브러리는 /lib/security에 위치, 오브젝트 파일(.so) 형태로 되어 있음
- PAM 사용 서비스들은 /etc/pam.d 디렉터리 안에 설정
PAM 설정 파일의 구성
- type : 어떤 타입의 인증이 사용될 것인지를 알려주는 항목
- control : 통제를 담당하는 부분으로 PAM에 무엇을 해야 하는지를 알려줌
- module_name : 사용하는 모듈명을 명기하는 부분으로 /lib/security에 있는 모듈 명
- module-arguments : 지정한 모듈이 사용하는 인수
PAM 주요 모듈
- pam_securetty.so : 접속하는 계정이 root인 경우, /etc/securetty 파일에 기록된 터미널을 통하는 경우에만 허가. 예를 들면 텔넷이 있음.
- pam_lisfile.so : /etc/nologin 파일이 존재하면 root만 로그인할 수 있고, 다른 사용자는 에러 메시지와 함께 거부할 때 사용. login, remote, sshd 등
- pam_deny.so : 접근을 무조건 거부할 때 사용. other, system-auth 등에 사용
- pam_cracklib.so : 패스워드 설정한 정책과 비교 및 검사를 할 때 사용. password-auth, system-auth.
- pam_wheel.so : root 권한을 얻을 수 있는 사용자를 wheel이라는 그룹으로 묶어서 사용하도록 지원하는 모듈. su 명령과 관련된 /etc/pam.d/su에 사용
- pam_rootok.so : root가 암호 입력 없이 해당 서비스에 대한 접근을 허용. su, chsh 등.
sudo(Superuser do)
sudo의 개요
- 특정 사용자 또는 특정 그룹에 root 사용자 권한을 가질 수 있도록 일부 명령 또는 모든 명령을 실행할 수 있도록 해주는 도구
sudo 관련 명령어 및 설정 파일
- visudo : sudo의 환경 설정 파일인 /etc/sudoers를 편집할 때 사용하는 명령
- sudo : 일반 사용자가 root 권한 획득을 위해 사용
- /etc/sudoers : 특정 사용자에게 부여할 root 권한 명령을 지정(설정법 : 사용자 접속한곳=명령어경로)
파일 시스템 보안
lsattr과 chattr
기본적인 파일 권한이외에 13가지 속성을 부여하여 관리할 때 사용.
lsattr
파일에 설정된 속성을 확인
[사용법]
$ lsattr [option] 파일명
옵션
- -R : 하위 디렉터리까지 한번에 속성 확인
- -a : .으로 시작되는 숨김 파일과 디렉터리까지 확인
chattr
파일의 속성을 변경하는 명령.
[사용법]
$chattr [option] mode 파일명
옵션
- -R
mode
+, -, =. =은 해당 속성만 부여하고 나머지 다 해체
ACL(Access Control List)
파일이나 디렉터리에 접근 권한을 제어할 수 있도록 만든 시스템. ACL의 확인 및 설정은 getfacl과 setfacl 명령을 사용.
getfacl(get file access control lists)
파일이나 디렉터리에 설정된 접근 권한 리스트를 확인
[사용법]
$ getfacl [option] 파일명
옵션
- -d : 접근 권한 리스트의 기본값을 출력
setfacl(set file access control lists)
파일이나 디렉터리에 접근 권한 리스트를 설정하는 명령
[사용법]
$ setfacl [option] 파일명
- -m : 권한을 지정하거나 수정할 때 사용
- -x : 권한 삭제
- -R : 하위 디렉터리 까지 변경
- -b : 권한 및 mask 등 지정한 권한을 전부 제거
주요 보안 도구
nmap(network mapper)
Nmap은 네트워크 탐지 도구 및 보안 스캐너로 시스템의 서비스 중인 포트를 스캔하여 관련 정보를 출력. 이 도구를 이용하면 운영 중인 서버에 불필요하게 작동하고 있는 서비스 포트를 확인할 수 있음.
nmap -O -p 1-65535 localhost
로컬 호스트의 운영체제와 포트 번호 1번부터 65535번까지 열린 포트를 점검해서 결과를 출력.
tcpdump
tcpdump는 명령행에서 사용하는 네트워크 트래픽 모니터링 도구로서 특정한 조건식을 설정하여 네트워크 인터페이스를 거치는 패킷들의 헤더 정보를 출력함.
tcpdump port telnet -l -vw -x -X > dumpdata &
tripwire
tripwire는 파일의 변조 여부를 검사하는 도구로서 모든 파일들에 대한 데이터베이스를 만들어 이 정보를 통해 파일들의 변조 여부를 검사하는데, 무결성 검사 도구라고도 함. tripwire는 MD5, SHA, CRFC-32 등 다양한 해시 함수를 제공하고, 시스템에 존재하는 파일들에 대한 데이터베이스를 생성 및 저장한 후에 생성된 데이터베이스와 비교하여 추가, 삭제, 변조된 파일이 있는지를 점검하고 관리자에게 알려주는 프로그램.
nessus
Nessus는 서버의 보안 취약점을 검사해 주는 도구로서 문제가 되는 서비스에 대해 정보를 알려주고, 관련 사이트나 대처 방안 등을 제시해 주는 프로그램.
GnuPG
GnuPG는 공개키와 비밀키를 생성하여 암호화하는 기법인 OpenPGP를 공개 버전으로 구현한 것으로 데이터의 암호화와 디지털 서명 생성 등에 사용.
John The Ripper
John Ther Ripper는 Solar Designer가 개발한 유닉스 계열 패스워드 크랙 도구. 기본적인 원리는 암호화된 패스워드가 들어 있는 /etc/shadow 와 비교해서 사용자의 패스워드를 알아내는 방식.
SELinux(Security Enhanced Linux)
SELinux의 개요
SELinux는 오픈 소스인 리눅스 커널의 보안을 강화하기 위해 미국의 NSA(National Secureity Agency)에 의해 연구된 프로젝트. SELinux의 주목적은 특정 데몬의 버그를 통해 root 권한을 획득하더라도 해당 데몬에만 root 권한을 행사할 뿐 다른 데몬이나 시스템에는 접근이 불가능하도록 하여 시스템의 보안을 강화하는데 있음. 따라서 SELinux는 시스템 해킹에서 보편적으로 쓰이는 취약점이나 exploit을 통해 전체 시스템이 망가지는 것을 방지.
SELinux의 적용
- 확인 및 변경은 /etc/selinux/config, /etc/sysconfig/selinux
- 셸 상에서는 getenforce 및 settenforce 명령으로 확인 및 설정
- X Window에서는 system-config-selinux라는 도구 이용
시스템 백업
정책 수립
백업 전에 고려할 사항
백업 대상 선택
/etc, /usr, /home, /var 등
백업 주기
전체 백업과 증분 백업을 혼합 사용
백업 방법
tar, dd, dump, cpio, rsync 등의 프로그램이 있음
Backup 및 Restore(관련 명령어)
tar(tape archive)
파일이나 디렉터리 들을 하나의 파일로 묶어줌
- 백업 : tar cvfp ~
- 백업 복원 : tar xvf ~
- 증분 백업 : tar -g list -cvfp ~, -g는 증분 백업에 사용하는 옵션 list라는 파일을 토대로 증분 백업. 이후에는 list보고 증가된것만 백업
- 날짜 이용 부분 백업 : tar -c -v -N '날짜' -f ~
- 압축 및 분할 백업 : tar zcvf - /home | split -b 10m - home.tar.gz
- 위에것 복원 : cat home.tar.gza* | tar zxvf -
cpio(copy input to output)
- 많은 양의 데이터에 대해서는 tar보다 빠름
- 특수 파일 백업도 가능
- 손상된 부분이 있더라도 나머지만 복구
[사용법]
$ [셸 명령어] | cpio option > 파일명
$ cpio option < 파일명
옵션
- -o : 표준 출력으로 보내어 사용
- -i : 표준 입력으로 받을 때
- -v : 과정 상세히 출력
- -c : 아카이브 포맷 형식을 newc로 지정. '-H newc'랑 같은 명령.
- -d : 필요할 경우 디렉터리 생성
- -t : 내용만 확인(--list)
- -F : 표준 입출력 전환 기호 대신 파일명을 지정
- -B : 입출력 블록 사이즈를 조절
- -H : 아카이브 포맷 형식을 bin, newc, crc등으로 지정
dump 및 restore
- 파일 시스템 전체 백업할 때 사용하는 유틸리티.
- 파티션 단위 백업 시 사용.
- 백업시 /etc/fstab 파일 참조
- 복원시 restore 사용
dump
[사용법]
$ dump option 파일명 백업대상
옵션
- -0~9 : 레벨 지정
- -f : 백업 매체, 파일명
- -u : dump 후 /etc/dumpdates라는 파일에 관련 정보 기록
restore
[사용법]
$restore option 백업 파일명
옵션
- -i : 대화식으로 복구할 파일을 선택
- -f : 백업 매체, 파일명
- -r : 전체 복원시
dd(data dumper)
- 파티션이나 디스크 단위 백업
- 많은 시간 소요
rsync(remote synchronous)
네트워크로 연결된 원격지의 파일들을 동기화하는 유틸리티
기능
- 링크된 파일, 디바이스 파일 복사 가능
- GNU tar과 유사
- CVS의 exclude 모드처럼 같은 파일들은 제외 가능
- ssh rsh를 이용하여 전송 가능. root 권한 필요 x
- 내부 파이프라인을 통하여 전송 기간을 줄임
[사용법]
rsync [option] source destination
옵션
- -r : 하위 디렉터리까지
- -l : 심볼릭 링크 보존
- -L : 심볼릭 링크 참고 파일을 복사
- -p : 퍼미션 그대로 보존
- -t : 타임스탬프 그대로 보존
- -g : 그룹 소유권 그대로 보존
- -o : 소유권을 그대로 보존
- -D : 디바이스 파일을 그대로 보존
- -H : 하드 링크를 그대로 보존
- -a : -rlptgoD를 한 번에 실행
- -v : 진행 상황 자세히 출력
- -u : 업데이트된 내용만 전송
- -z : 전송할 때 압축
- -b : 백업 시 동일한 파일이 존재하는 경우 ~를 붙여 백업 파일 생성
- -e : 원격지에 접속할 때 사용할 프로토콜 지정. 기본 ssh
- --progress : 명령이 실행되는 동안의 전송 상황 정보