일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- wargame
- webhacking
- stack overflow
- 해킹
- System
- 워게임
- 정보보안기사 실기
- OS
- BOF
- hacking
- Spring MVC
- 웹해킹
- pwnable
- Spring
- Operating System
- system hacking
- Spring Framework
- 정보처리기사 실기
- 운영체제
- webhacking.kr
- Payload
- Shell code
- PWN
- Buffer Overflow
- SQL
- LOB
- Pwnable.kr
- 정보보안기사
- Lord of BOF
- 네트워크
- Today
- Total
DongDD's IT
[정보보안기사 실기] 시스템 보안 - UNIX/LINUX 본문
[정보보안기사 실기] 시스템 보안 - UNIX/LINUX
UNIX/Linux 시스템 관리
시스템 시작/종료
1. 부팅
1) Run Level
- 시스템 운영 상태를 표시
- init 프로세스는 /etc/inittab 파일에 정의된 run level에 따라 /etc/rc.d/rc[run.level].d에 나열된 스크립트를 실행해 운영 상태 구성
-> Run Level 0 : PROM mode(Programmable Read-Only Memory)
-> Run Level S,s : 시스템 싱글 유저 모드(로컬 File System 마운트 X)
-> Run Level 1 : 시스템 싱글 유저 모드(로컬 File System 마운트 O)
-> Run Level 2 : 멀티 유저 모드(NFS 클라이언트 모드)
-> Run Level 3: 멀티 유저 모드(NFS 서버 모드, UNIX default)
-> Run Level 4 : 사용 X
-> Run Level 5 : 시스템 power off 모드
-> Run Level 6 : 시스템 리부팅
- Run Level 확인 : who -r, runlevel 명령어 사용
2) INIT 상태(=Run Level)
- Run Level 변경 : init X 명령어 사용
2. 시스템 시작
- BIOS -> Boot Program -> Kernel -> Init
1) BIOS
- 전원이 켜지면 BIOS는 기본적인 하드웨어 이상 유무 점검
- 시스템의 하드웨어 정보 수집
2) Boot Program
- 하드디스크에서 커널을 읽어 메모리에 적재, 시스템 제어권을 커널에 넘김
3) Kernel
- 커널이 메모리에 적재되고 운영체제가 구동됨
- 일부 하드웨어 점검, 내부 자료구조 초기화, 부가적 커널 모듈 메모리에 적재
4) init
- 커널에 의해 생성되는 첫번째 프로세스
- 커널 실행으로 운영체제가 하드웨어의 모든 기능을 제어하게 되면 PID가 1인 init 프로세스가 생성됨
- 모든 프로세스의 부모 프로세스
3. 시스템 종료
- shutdown 명령어 사용
1) 종료 시 주의 사항
- 접속된 사용자에게 종료를 공지해 작업을 마무리하도록 함
- 운영중인 서비스를 안전하게 종료
- 하드디스크를 갱신해 파일 시스템 무결성 유지
2) 하드디스크 동기화
- UNIX 계열에서는 디스크 입출력에 대한 효율을 높이기 위해 버퍼를 사용, 비정상적인 종료 시 버퍼의 내용이 디스크에 반영되지 않아 무결성 문제가 생길 수 있음
- sync 명령어를 이용해 버퍼의 내용을 하드디스크로 옮길 수 있음
사용자 관리
1. 계정 추가
- useradd 명령어 사용(root만 사용가능)
- /etc/passwd에 사용자 정보가 추가됨
- passwd 명령어를 이용해 password 설정
- /etc/group에 그룹 정보 추가
- 홈 디렉토리, 쉘 설정
2. 계정 삭제
- userdel 명령어 사용(root만 사용가능)
- option : -r
-> 계정 + 홈 디렉토리 삭제
3. 그룹 추가
- groupadd 명령어 사용
- option : -g,gid
-> 명시한 gid로 그룹 생성
4. 그룹 삭제
- groupdel 명령어 사용
파일 시스템 관리
1. mount
- 보조기억장치에 설치된 파일시스템을 UNIX 시스템이 인식하도록 특정 디렉토리에 논리적으로 연결하는 것
- mount src dest(src를 dest에 연결)
- option : -a
-> /etc/fstab 파일을 기반으로 mount
- /etc/mtab에 마운트 정보 기록
2. umount
- mount된 File system의 연결을 해제함
- 사용중이거나 사용자가 파일 시스템내에 있는 디렉토리에 있는 경우 메시지 출력과 함께 실패
- /etc/mtab에 있는 마운트 정보 삭제
- umount X(X에 연결된 파일 시스템 연결 해제)
- option : -a, -f
-> -a : 모든 파일 시스템을 umount함
-> -f : 해당 파일시스템을 사용하는 프로세스를 강제 종료하고 파일 시스템을 umount
3. du
- 하드 디스크 사용량을 확인하기 위해 사용하는 명령어
- option : -a, -s, -k
-> -a : 하위 파일에 대한 정보도 보여줌
-> -s : 현재 디렉토리가 차지하는 총 용량만 출력
-> -k : kilobyte 단위로 출력
4. df
- 파일 시스템의 전체 공간, 사용 가능 공간을 확인하기 위해 사용하는 명령어
- df [file | filesystem]
- option : -k, -i
-> -k : 통계 데이터를 1024 bytes 블록 단위로 출력
-> -i : 사용 가능한, 사용중인 i-node 정보를 출력
프로세스 스케쥴 관리
1. 정기적 스케쥴 관리(cron)
- cron 데몬 프로세스는 정기적인 작업을 지정시간에 처리하기 위해 사용
1) 필요한 구성요소
- crontab 파일 : 작업 목록
- crontab 명령 : crontab 파일 제어
- crontab 데몬 프로세스 : crontab 파일을 읽어 처리
2) crontab 파일 형식
- 6개의 필드로 구성(space, tab으로 구분)
- 분 시 일 월 요일 작업
- 요일 : 0(일요일) ~ 6(월요일)
ex1) 0 8-10 * * 1 a.out : 월요일 8,9,10시에 a.out 실행
ex2) */10 * * * * a.out : 매 10분마다 a.out 실행
3) crontab 파일 제어
- 사용자 계정별로 만들어짐
- root는 다른 사용자의 crontab 파일 수정 가능, 일반 사용자는 자기 것만 수정 가능
- crontab -u username [option]
- option
-> -e : 편집(없으면 생성)
-> -l : 출력
-> -r : 제거
4) crontab 파일 접근 제어
- /etc/crontab.allow와 /etc/cron.deny 파일을 통해 접근 제어
- /etc/crontab.allow만 있는 경우 : 이 목록에 있는 사용자만 사용 가능
- /etc/crontab.deny만 있는 경우 : 이 목록에 없는 사용자들은 사용 가능
- 둘다 있는 경우 : allow가 우선
- 둘다 없는 경우 : root만 사용 가능(일부 시스템은 모든 사용자 사용 가능)
2. 일시적 스케쥴 관리(at)
- 정해진 시간에 한번만 실행
- 한번 처리된 작업은 목록에서 삭제
- at
- option
-> -t time : 작업시간 설정(이 명령 실행 후 실행할 파일 설정)
-> -l : 현재 대기중인 작업 목록 출력
-> -r job : 해당 작업 삭제(UNIX)
-> -d job : 해당 작업 삭제(Linux)
UNIX/Linux 서버 보안
시스템 보안
1. 사용자 패스워드 관리
1) /etc/passwd 파일
- 불필요한 계정의 shell은 /sbin/nologin, /bin/false로 설정해 접속할 수 없도록 해야 함
2) /etc/shadow 파일
- passwd 파일에 평문 저장 시 유출이 생길 수 있음
- root만이 read 가능
- 암호화된 패스워드 정보와 패스워드 에이징 정보(시간의 흐름에 따른 관리 정책)가 있음
account:password:last_change:minlife:maxlife:warn:inactive:expires
- password : $id$solt$enc_password
-> $id : 1(MD5), 2(BlowFish), 5(SHA-256), 6(SHA-512)
-> * : 패스워드 잠김(별도의 인증 방식으로는 로그인 가능)
-> !! : 패스워드 잠김(모든 로그인 불가)
-> 빈 값 : 패스워드 설정 X(패스워드 없이 로그인)
- last_change : 1970년 1월 1일을 기준으로 변경한 날(일 수)
- minlife : 변경한 날 이후로 패스워드를 변경할 수 없는 일수
- maxlife : 변경한 날 이후로 패스워드 만료 일수
- warn : 만료 이전 경고 일수
- inactive : 만료된 이후 계정이 비활성화 되기 전까지의 일수
- expires : 계정 만료일 설정(1970년 1월 1일 기준)
- passwd -l account : 패스워드 잠금
- passwd -u account : 패스워드 잠금 해제
2. 프로세스 실행 권한(SUID, SGID)
- 프로세스 실행하는 동안 부여되는 UID, GID
- RUID : 프로세스를 실행한 사용자의 UID
- RGID : 프로세스를 실행한 사용자의 GID
- EUID : 프로세스를 실행하는 동안 부여되는 UID
- EGID : 프로세스를 실행하는 동안 부여되는 GID
- 주기적으로 root 소유주 파일의 suid, sgid가 설정된 파일을 찾아 취약점이 있는지 확인
ex) passwd 명령 : 실제적으로 shadow 파일에 접근할 수는 없지만 passwd 실행 시 set uid가 설정되어 패스워드 변경이 가능함
3. 디렉토리 접근권한(sticky-bit)
- 리눅스에서의 일반 공유 디렉토리인 /tmp는 모든 사용자가 이용할 수 있게 sticky-bit를 설정함
- rwx로 설정할 경우 다른 사람의 파일을 삭제, 변경할 수 있지만 sticky-bit를 설정해 파일 삭제, 변경은 소유자만 가능하도록 함
네트워크 보안
1. 보안 쉘(SSH)
- 암호 통신을 이용해 네트워크상의 다른 컴퓨터에 접속해 원격으로 명령 실행, 파일을 조작할 수 있게 해주는 프로토콜
- 암호화된 원격 터미널 서비스, 암호화된 파일 송수신 서비스 제공
- TCP 22번 port
2. 슈퍼서버(inetd 데몬)
- 클라이언트 요청을 슈퍼 데몬이 모두 받아 처리하고 개별 서비스를 호출해주는 데몬 프로세스
- Stand-Alone 방식 : 서비스 별로 데몬 프로세스가 동작되는 방식(속도가 빠르지만, 리소스 소모가 큼)
- inetd(xinetd) 방식 : 슈퍼 데몬을 이용해 개별 서비스를 실행시키는 방식(속도는 느리지만, 리소스 소모가 작음)
- inetd 데몬 최초 실행 시, /etc/inetd.conf 파일을 참조해 서비스 프로그램들에 대한 정보를 얻음
- Tcp wrapper와 연동해 서비스 별 호스트 접근 제어 기능을 사용할 수 있음
1) inetd.conf 파일
서비스 소켓 프로토콜 플래그 계정 실행경로 실행인자
- 서비스 : /etc/services 에 등록된 포트 번호를 참조해 서비스 별로 포트 부여
- 소켓 : TCP(stream), UDP(datagram)
- 프로토콜 : /etc/protocols에 설정된 프로토콜 중 선택(/etc/services의 프로토콜과 일치해야 함)
- 플래그 : nowait(요청 이후 즉시 처리), wait(요청 완료를 기다린 후 처리)
2) 불필요한 서비스 비활성화
- DoS에 취약한 Simple TCP 서비스
-> echo(TCP 7)
-> discard(TCP 9)
-> daytime(TCP 13)
-> chargen(TCP 19)
- R계열 서비스 : 인증 없이 관리의 원격 접속
-> rlogin, rsh, rexec
- 불필요한 rpc 서비스
-> rpc, cmsd, rusersd
- 기타
-> finger, tftp, talk
3) 접근 통제(TCP Wrapper)
- 외부에서 들어오는 클라이언트에 대한 접근 통제 기능
- /etc/hosts.allow와 /etc/hosts.deny파일 이용
- /etc/hosts.allow를 먼저 확인해 접근을 허용하고 이 목록에 없다면 /etc/hosts.deny를 확인해 이 목록에 있을 경우 접근 차단, 둘다 정보가 없는 경우에는 default로 허용
- inetd.conf의 실행경로에 TCP Wrapper인 /usr/sbin/tcpd를 명시하면 외부 서비스 요청 시 tcpd를 호출해 hosts.allow, hosts.deny 확인해 접근 통제
- shell_command : hosts.deny에 등록되어 있어 차단된 호스트에게 통보나 경고 메시지를 보내는 용도로 사용(twist,spawn)
- 서비스 : ip or domain 형식으로 되어 있음
ex1) ALL : 192.168.1.1 -> 192.168.1.1에서 접속하는 모든 서비스 허용
ex2) ALL EXCEPT in.telnetd : ALL -> 모든 사용자가 telnet을 제외한 모든 서비스 사용 가능
PAM(Pluggable Authentication Modules)
- 리눅스에서 일반적으로 사용하는 플러그 방식의 중앙 통제 인증 모듈
- 인증 형태, 접근 권한, 접근 자원 등을 선택할 수 있게 하는 라이브러리
1. PAM 인증 절차
- 각 프로그램이 인증이 필요한 부분에서 PAM 라이브러리를 호출하도록 함
- 해당 프로그램의 PAM 설정파일을 참조해 등록된 여러 PAM 모듈을 수행하고 그 결과를 반환
- 인증 여부 결정
- /etc/pam.d : PAM 라이브러리를 이용하는 프로그램들의 설정파일들이 들어있는 디렉토리
- /lib/security : PAM 라이브러리가 제공하는 인증 모듈들이 들어있는 디렉토리
- /etc/security : PAM 모듈 싱해에 필요한 추가 설정 파일들이 들어있는 디렉토리
2. PAM 설정 파일
- 형식 : type control module_path argument
1) type
- account : 사용자의 시스템 권한 확인 모듈
- auth : 인증 기능
- password : 패스워드 설정, 확인 모듈
- session : 인증 성공 시, 세션을 만들어주는 모듈
2) control
- requiste : 인증 실패 시, 인증 거부
- required : 인증을 실패해도 다음 모듈 실행, 최종 결과는 인증 실패
- sufficient : 이전 모듈이 실패해도 현재 모듈 성공 시 인증 성공
- optional : 모듈 성공, 실패 응답 상관 X
3) module_path
- 모듈 파일의 실제 경로
4) argument
- 모듈에 전달되는 인자
3. PAM(시스템 취약점 분석 항목)
1) root 계정 원격 접속 제한
- /etc/security : pam_securetty.so 모듈이 사용하는 파일(root 접근 제한 설정 파일)
- /etc/pam.d의 remote(login)파일에 pam_securetty.so 모듈 추가 후 /etc/securetty파일에 pts/~ 터미널을 모두 제거(auth required /lib/securetty.so)
- SunOS는 /etc/default/login 파일의 CONSOLE 라인 주석처리
2) 계정 잠금 임계값 설정
- Brute Force, Dictionary Attack을 막기 위해 계정 잠금 임계값을 설정
- pam_tally2.so or pam_tally.so 모듈 사용
- /etc/pam.d/system-auth 파일에 auth required pamtally2.so deny=5 unlock_time=120과 같은 항목을 추가
-> deny : 실패 횟수(5회 실패 시 제한), unlock_time : 잠그는 시간(120초 동안 로그인 불가)
- pam_tally2 -u username 명령어로 실패 횟수 확인 가능
- option
-> -r : 실패 횟수 초기화
- SunOS에서는 /etc/default/login의 RETIRES 값 설정
시스템 로그
- UNIX : /var/adm, Linux : /var/log에 저장됨
- /etc/syslog.conf 파일에서 로그 파일 위치 지정
1. 주요 로그 파일
1) utmp(x)
- 현재 로그인한 사용자 정보를 담고 있는 로그 파일
- binary로 되어있어 w, who, finger 명령어로 확인
2) wtmp(x)
- 성공한 로그인/로그아웃 정보, boot/shutdown 정보를 담고 있는 로그 파일
- binary로 되어있어 last 명령어로 확인
3) lastlog
- 가장 최근에 성공한 로그인 기록을 담고 있는 로그 파일
- binary로 되어있어 lastlog, finger 명령어로 확인 가능
4) btmp(x) - Linux, loginlog - UNIX
- 실패한 로그인 정보를 담고 있는 로그 파일
- btmp는 binary로 되어있어 lastb 명령어로 확인 가능
5) sulog
- su 명령을 사용한 결과를 담고 있는 로그 파일
- UNIX : /var/adm/sulog
- Linux : /var/log/secure
6) acct/pacct
- 시스템에 로그인한 모든 사용자가 로그아웃할 때까지 입력한 명령어와 터미널 종류 등을 담고 있는 로그 파일
- 기본 로그 파일이 아니기 때문에 accton /var/account/pacct 명령을 이용해 로그 파일을 생성하도록 해야함
- binary로 되어있어 lastcomm 명령어로 확인 가능
7) history
- 각 계정별로 실행한 명령어를 담고 있는 로그 파일
- .shell_history의 이름을 가지고 계정 별 홈 디렉토리에 저장
- text로 되어있어 직접 확인 가능하지만, history 명령어를 사용해도 확인 가능
8) secure - Linux
- 사용자/그룹 생성/삭제, 사용자 인증에 대한 정보를 담고 있는 로그 파일(su 명령어 사용에 대한 정보가 들어가기 때문에 서버 보안에 매우 중요함)
- /var/log/secure
9) messages - Linux
- 기본적인 시스템 로그 파일로 시스템 운영에 대한 메시지를 담고 있음
- 데몬 프로세스들의 내역, 접속 정보, TCP wrapper 정보 등을 담고 있음
- /var/log/messages
10) dmesg - Linux
- 리눅스 부팅 시 출력되는 메시지들을 담고 있는 로그 파일
- /var/log/dmesg(text)로 저장되어 그냥 볼 수 있지만, dmesg 명령어로도 확인 가능
11) boot.log - Linux
- 부팅 시, 파일 시스템 검사, 데몬들의 실행 상태 등을 담고 있는 로그 파일
- /var/log/boot.log
12) xferlog - Linux
- FTP 로그 파일로 proftpd, vsftpd 데몬들의 서비스 내역을 담고 있는 로그 파일
- /var/log/xferlog
- 형식 : 전송날짜/시간 소요시간 원격주소 파일크기 파일명 종류 액션플래그 전송방향 사용자접근형식 로그인 사용자 서비스 인증방법 인증ID 전송상태
- 종류 : a(ascii), b(binary)
- 액션 플래그 : _(no action), C(압축 파일), U(비압축 파일), T(tar 파일)
- 전송 방향 : i(->서버), o(->로컬), d(서버에서 삭제)
- 접근 방식 : r(인증된 사용자), a(익명 사용자)
- 전송 상태 : c(완료), i(실패)
13) cron - Linux
- cron 작업에 대한 정보를 기록한 로그 파일
- /etc에 cron.hourly, cron.daily 등 시간별, 일별, 주별, 월별 작업 스크립트들이 저장되어 있음
- /var/log/cron
14) maillog - Linux
- sendmail, qmail 등 메일 송수신 내역들과 ipop, imap과 같은 수신 내역들에 대한 정보를 담고 있는 로그 파일
- /var/log/maillog
15) mail - Linux
- 사용자들에 대한 메일을 갖고 있는 디렉토리(한번 메일을 사용한 사용자 id와 동일한 파일이 존재)
- /var/spool/mail
2. syslog
- 커널 및 응용 프로그램에 의해 발생하는 로그를 체계적으로 생성, 관리하는 표준 인터페이스
- syslog API를 통해 로그를 생성하면 syslogd가 syslog.conf 설정 파일을 참조해 지정한 로그 파일에 생성
- syslog 대신 최근에는 rsyslog사용
- 처음에는 정보보호 특성을 고려하지 않고 개발(UDP)
-> TCP 사용 권고
-> 기밀성 보장을 위한 BEEP(연결 지향, 비동기성 연결을 위한 응용 프로토콜 프레임워크) 이용 권고
- 형식 : facility.prority ~~ action(logfile_path)
1) facility : 서비스 종류(로그 생성 서비스)
- * : 모든 서비스
- auth/authpriv : 인증 관련 메시지
- cron : cron과 atd에 의해 생성되는 메시지
- daemon : telnet 등 데몬에 의한 메시지
- kern : kernel에 의한 메시지
- lpr : 프린터 데몬 lpr에 의한 메시지
- mail : sendmail, pop 등 메일 시스템에 의한 메시지
- news : USENET 등과 같은 뉴스시스템에 의해 발생되는 메시지
2) priority : 로그 Level
- 높음 Emergency(emerg) > alert(alert) > Critical(crit) > Error(err) > Warning(warning) > Notice(notice) > Information(info) > debug(debug) 낮음
- * : 모든 수준의 로그를 저장, none : 로그를 저장하지 않음
3) action : 로그 저장, 출력 위치 지정
- 로그 파일 : 경로
- 콘솔 : /dev/console
- 원격 : @hostname
- 지정 사용자 화면 : user
- 로그인한 모든 사용자 : *
3. 로그 관리
1) 로그 모니터링
- text로 된 로그 파일에 tail -f 명령어와 옵션을 사용해 추가되는 내용들을 실시간으로 볼 수 있음
2) 로그 파일 순환 관리(rotate)
- 로그 파일을 그대로 두면 사이즈가 방대해져 디스크가 모자라게 됨 -> rotate로 해결
- logrotate : 시스템 로그 파일 관리 도구(rotate, compress 기능)
- /etc/logrotate.d 디렉토리에 데몬/프로세스 별 설정 파일이 있음
-> missingok 로그 파일이 없어도 오류 발생 X
-> notifempty : 로그 파일이 비어있으면 rotate X
-> sharedscripts : 로그 파일이 여러개여도 스크립트를 공유해 한번만 실행
-> postrotate/endscript : rotate 후 스크립트 파일 실행
- /etc/logrotate.conf : logrotate 설정 파일
-> daily, weekly, monthly : 일, 주, 월 단위로 rotate
-> rotate N : N개를 rotate 함
-> create : rotate 시 새롭게 생성되는 로그 파일의 권한, 소유주 등 설정
-> dateext : 로그 파일의 확장자를 날짜로 함
-> compress/uncompress : 압축/비압축
-> size N : N size가 되면 rotate
-> include : 개별 데몬 설정 파일을 include
시스템 해킹
1. Buffer Overflow
ref) http://dongdd.tistory.com/37
- 대응 방안 : 문자열 길이 검사, strncpy 등 원하는 길이만 복사, 입력받게 함
2. Format String Attack
ref) http://dongdd.tistory.com/88
3. Race Condition Attack
- 실행되는 프로세스가 임시파일을 만드는 경우 악의적 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 생성되는 임시파일에 symbolic link를 이용해 권한 상승을 노리는 공격
- 중요한 파일에 프로그램이 생성하는 임시 파일의 이름으로 symbol link를 생성하고 이 파일에 쓰기를 하여 중요한 파일을 변조
1) 대응 방안
- 가능하면 임시파일 생성 X
- 동일한 파일이 있는 경우 생성, 쓰기 금지
- 사용하려는 파일에 link가 걸려있으면 실행 중단
- umask 이용
'자격증 > 정보보안기사' 카테고리의 다른 글
[정보보안 기사] 네트워크 보안 - 보안 (0) | 2018.04.29 |
---|---|
[정보보안기사 실기] 네트워크 보안 - 기초 (0) | 2018.04.25 |
[정보보안기사 실기] 시스템 보안 - 서버 취약점 (0) | 2018.04.24 |
[정보보안기사 실기] 시스템 보안 - 기초 (1) | 2018.04.20 |
2018 11회 정보보안기사 필기 합격 후기 (6) | 2018.04.20 |