정보 보안
- 물리적 / 기술적 / 관리적 보안
- 정보 자산을 여러 가지 위협으로부터 보호하여 기밀성, 무결성, 가용성을 유지하는 것
- 기밀성: 허가받은 사용자만이 해당 정보에 해당 정보에 접근할 수 있도록 하는 것
- 무결성: 정보가 무단으로 변조되지 않았음을 의미
- 가용성: 필요할 때 인가를 받은 사용자가 정보나 서비스에 접근할 수 있는 것
- CIA(Confidentiality, Integrity, Availability) 삼각형
보안 기본조치
- 불필요한 서비스 통제하기
- 꼭 필요하지 않은 서비스 포트는 모두 차단
- 서비스를 통제하는 데는 불필요한 서비스 자체를 제거하는 방법과 방화벽에서 패킷을 필터링하는 방법을 함께 사용하는 것이 바람직함
- 소프트웨어 패치 실시하기
- 시스템 관리자는 패치의 발표에 주의를 기울이고 있다가 패치가 나오면 즉시 설치
- 주기적으로 점검하기
- 프로세스의 목록과 사용자의 상태
- 서비스의 동작 상태
- 네트워크 연결 상태
- 디스크의 남은 용량
- 백업하기
- 주요 시스템 설정과 소프트웨어, 사용자 데이터 등을 주기적으로 백업
- 문제가 발생했을 때 빠르게 복구하는 방법도 연습해 둘 필요가 있음
시스템 로그
- 로그: 커널과 리눅스 시스템이 제공하는 여러 서비스와 응용 프로그램이 발생시키는 메시지
- 로그 파일: 대부분 /var/log 디렉터리에 위치, 시스템의 상태 확인 가능
주요 로그 파일
- 대부분 소유자 root, 권한 600, 일반 사용자 계정에서 내용을 함부로 볼 수 없게 하는 것이 바람직함
- /var/log/boot.log: 부팅 시 서비스 데몬의 실행 상태 기록
- /var/log/apache2/*: 아파치 웹 서버와 관련된 로그 기록
- /var/log/apt/*: apt-get 명령으로 패키지 설치 및 삭제한 로그 기록
- /var/log/auth.log: telnet, ssh, su, sudo 등의 사용자 로그인 인증 기록
- /var/log/dmesg: 시스템이 부팅할 때 생성한 로그 기록
- /var/log/lastlog: 각 계정의 가장 최근 로그인 정보를 기록하고 lastlog 명령으로 확인
- /var/log/mail.*: 메일 관련 로그 기록
- /var/log/Xorg#.log: X윈도 관련 로그 기록
- /var/log/btmp: 실패한 로그인 기록, 바이너리 파일이므로 last -f btmp 또는 lastb 명령으로 확인 가능
- /var/log/cups/*: 인터넷 프린팅 프로토콜을 지원하는 cupsd 데몬이 생성하는 로그 기록
- /var/log/wtmp: 로그인 정보 기록, last 명령으로 확인 가능
- /var/log/samba/*: 삼바에 의해 생성된 로그 기록
- /var/log/syslog: syslog가 생성하는 공통 로그 기록
- /var/log/mysql*: MariaDB에서 생성한 로그 기록
- /var/log/ufw.log: 방화벽이 생성하는 로그 기록
- /var/log/vsftpd.log: FTP 서버의 데이터 전송 로그 기록
로그 파일 관리
- 전통적인 로그 관리 방법은 journal 기능으로 대체
- journal은 기존의 syslog 형식에 따라 로그를 저장하고, 저장된 로그에 접근하기 위해 journalctl 명령 사용
- journal에서 messages 파일을 대체하는 것: journalctl 명령
rsyslog 데몬
- 시스템 로그 파일 중 일부는 rsyslog라는 로그 관리 데몬에 의해 통제
- 서비스를 제공하는 데몬: rsyslogd
- 설정 파일: /etc/rsyslog.d 디렉터리의 *.conf 파일
- 기본 규칙을 설정한 파일: 50-default.conf
rsyslog의 규칙 파일
- 텍스트 파일이므로 관리자가 vi로 수정
- 규칙은 한 행에 필터와 동작으로 작성하고 공백문자나 탭으로 구분
선택자
- 기능명(facility)과 우선순위(priority)를 기반
- 기능명.우선순위
- 기능명: 로그 메시지를 생성하는 프로그램 지정
- *: 모든 기능
- auth: 인증 관련 명령
- authpriv: 보다 민감한 보안 메시지
- cron: cron 데몬
- daemon: 일반적 시스템 데몬
- kern: 시스템 커널
- lpr: 인쇄 시스템
- mail: sendmail과 기타 메일 관련 프로그램
- news: 유즈넷 뉴스 시스템
- security: auth와 동일, 사용하지 않음
- syslog: rsyslog 데몬 내부 메시지
- user: 사용자 프로세스
- uucp: uucp 통신, 현재는 사용하지 않음
- local0~7:여덟 가지 로컬 메시지
- mark: 일정 주기로 타임스탬프 메시지 생성(rsyslog 내부용)
- 우선순위: 메시지의 심각도
심각도 | 의미 | 심각도 | 의미 |
emerg | 매우 긴급한 비상 상태 | warning | 경고 메시지 |
alert | 긴급한 상태 | notice | 단순 메시지 |
crit | 중대한 상태 | info | 정보성 메시지 |
err | 오류 상태 | debug | 디버깅용 메시지 |
- rsyslog 선택자 구성 예시
선택자 | 의미 |
kern.* | 우선순위에 상관없이 커널의 모든 로그 메시지 선택 |
mail.crit | 메일에서 crit 이상의 우선순위를 가진 모든 로그 메시지 선택 |
cron.!info.!debug | cron에서 info와 debug를 제외한 모든 로그 메시지 선택 |
mail.=info | 메일에서 심각도가 info인 경우만 로그 메시지 선택 |
rsyslog 필터의 기능명
기능명 | 코드 | 관련 프로그램 |
* | - | 모든 기능 |
mark | - | rsyslog 내부용 |
kern | 0 | 시스템 커널 |
user | 1 | 사용자 프로세스 |
2 | sendmail과 기타 메일 관련 프로그램 | |
daemon | 3 | 일반적인 시스템 데몬 |
auth | 4 | 인증 관련 명령 |
syslog | 5 | rsyslog 데몬 내부 메시지 |
lpr | 6 | 인쇄 시스템 |
news | 7 | 유즈넷 뉴스 시스템 |
uucp | 8 | uucp 통신(현재 사용 X) |
cron | 9 | cron 데몬 |
authpriv | 10 | 보다 민감한 보안 메시지 |
ftp | 11 | ftp 데몬 |
local0~7 | 16~23 | 여덟 가지 로컬 메시지 |
journal
- systemd 데몬의 구성 요소로 로그 파일의 관리를 담당
- 전통적으로 로그를 관리해 온 rsyslog 데몬과 병행하여 사용
- 로깅 데이터는 journald 데몬이 수집/가공하여 journals라고 불리는 바이너리 파일로 저장
- journald 데몬의 실행 파일: systemd-journald
- journal이 저장한 로그를 보려면 journalctl 명령 사용
journalctl
- journalctl [옵션]: journal 로그 관리
- -n 행수: 가장 최근에 기록된 로그 중 행수만큼 출력
- -r: 가장 최근 로그가 먼저 출력
- -o short: syslog 형식으로 출력
- -o verbose: 로그의 상세한 내용 출력
- -f: 최근 로그를 자동으로 출력
- -p 우선순위: 우선순위로 필터링하여 출력
- -b 시간: 현재 부팅 이후의 로그만 출력
- --since=시간 --until=시간: 시간을 필터링하여 출력
- 필드명=값: 필드명으로 필터링하여 출력
방화벽
- 네트워크를 통한 외부의 접속을 차단하려면 방화벽을 사용해야 함
- 우분투의 방화벽 명령 및 동작 확인: ufw
- dpkg -l|grep ufw 로 설치
- 방화벽 시작: sudo ufw enable
- 방화벽 종료: sudo ufw disable
- GUI 도구: gufw
- dpkg -l|grep gufw 로 설치
- 인증을 위해 암호 요구
gufw 사용법
- 프로필(P): 현재 설정하는 내용을 적용할 환경 설정 (홈, 사무실, 공용)
- 상태(S): 방화벽 전체를 켜거나 끌 수 있음
- 내부로 들어옴(I) / 외부로 나감(O): 시스템으로 들어오는 트래픽과 시스템에서 밖으로 나가는 트래픽을 어떻게 할 것인지 기본 값을 설정
- 기본 값: 거부, 허용, 거절
- 거부: 시스템으로 들어오는 트래픽은 모두 거부
- 허용: 시스템 밖으로 나가는 트래픽은 허용
- 거절: 접속을 거부하고 거절된 이유를 알려줌
- 규칙: 방화벽에서 규칙을 선택하면 현재 적용 중인 규칙을 보여줌
ufw
- ufw 서브명령: 방화벽을 설정함
- enable: 방화벽 활성화
- disable: 방화벽 비활성화
- default allow | deny | reject [incoming / outgoing]: 방화벽의 기본 동작 설정
- status [verbose]: 방화벽 상태 출력
- allow 서비스 | 포트/프로토콜: 지정한 서비스나 포트 허용
- deny 서비스 | 포트/프로토콜: 지정한 서비스나 포트 거부
- delete 명령: 명령으로 설정한 규칙 삭제
nmap
- 포트 스캔 도구
- 내 서버나 원격의 서버가 사용 중인 포트, 운영체제 등을 스캔하여 출력
- 네트워크 관리용으로 사용
- 취약한 포트가 사용 중인지 확인이 가능하여 보안용으로도 사용
- 스캔하는 것만으로도 보안 침입을 위한 준비 과정으로 간주하므로 원격 서버를 마구 스캔하면 안 됨
- nmap [옵션] 목적지주소: 네트워크를 탐색하고 보안을 점검
- -sS: TCP SYN 스캔
- -sT: TCP 연결 스캔
- -sP: ping 스캔
- -sU: UDP 스캔
- -sO: IP 프로토콜 스캔
- -O: 운영체제 확인
- -v: 스캔 결과를 상세하게 출력
- -p 포트번호: 지정한 포트만 스캔
- -F: 빠른 모드로 기본 스캔보다 적은 수의 포트만 스캔