일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- snmp drdos
- udp drdos
- slow http read dos
- DHCP
- 헐크 dos
- 해쉬 dos
- slowloris
- drdos와 ddos 차이
- zerowindow
- ntp drdos
- tcp syn flooding
- from sql injection
- 네트워크 대역폭 소진
- slow http
- slow http post dos
- slow dos
- 핑오브데스
- tcp drdos
- OFFSET
- hulk dos
- hash dos
- ruddy
- icmpp drdos
- backlog queue
- 해시 dos
- slow http dos
- 반사 서버
- drdos 대응
- dns drdos
- http get flooding
- Today
- Total
Tech Juny
[01]-03 리눅스 서버 보안 본문
1. 리눅스 (Linux)
: 유닉스를 기반으로 만든 공개용 운영체제
- 다중 사용자 (Multi User) : 여러 사용자가 이용 가능, 사용자별 권한 부여
- 다중 작업 (Multi Tasking) : 여러개의 프로세스 동시 실행, 시불할 스케줄링 지원
- 다중 처리기 (Multi Processor) : 작업을 병렬적으로 처리하여 효율적
- 다중 플랫폼 (Multi Platform) : 여러 종류의 CPU 지원
- 게층형 파일 시스템 (File System) : 루트를 기반으로 하위 디렉토리를 갖는 계층형 파일 시스템
- POSIX 호환 : POSIX는 유닉스 표준 인터페이스를 정의 한것으로 리눅스도 지원
- 우수한 네트워킹 (Networking) : TCP/IP, IPX/SPC, Appletalk, Bluetooth 등 다양한 프로토콜 지원
- 가상 콘솔 (Virtual Console) : 각 창마다 다른 작업 가능(기본적으로 6개의 가장 콘솔 존재)
- 가상 기억 장치 (Virtual Memory)
2. 리눅스 구조
1) 리눅스 운영체제
- 리눅스 운영체제의 기능
구성 요소 | 기능 및 역할 |
작업 관리자 (Task Manager) |
작업의 생성, 실행, 상태 관리, 스케줄링, 프로세스 간 통신 서비스 제공 |
메모리 관리자 (Memory Manager) |
세그먼테이션, 페이징, Swap 서비스를 통한 물리 메모리와 가상 메모리 관리 |
파일 시스템 관리자 (File System Manager) |
파일 생성, 삭제, 접근 제어, 디렉토리 관리, 슈퍼블록 관리 |
네트워크 관리자 (Network Manager) |
소켓, TCP/IP, 프로토콜 관리 |
장치 관리자 (Device Manager) |
디스크, 각종 카드, 외부 인터페이스 등 드라이버 관리 |
- 리눅스 운영체제 핵심 요소
구성 요소 | 내용 |
커널 (Kernel) | - 주기억장치에 상주하며 사용자 프로그램을 관리하는 운영체제 핵심 역할 - 프로세스, 메모리, 입출력, 파일관리 실행 - 셸과 커널은 독립된 프로그램 |
셸 (Shell) | - 명령어 해석/번역하여 사용자 명령 수행 - 리눅스 표준 셸은 bash - boure 셸, C 셸, korn 셸 등등 존재 |
파일 시스템 (File System) | 계층적인 트리 구조 형태 |
# bash 셸 : 리눅스 기본 셸로 /bin 디렉토리에 존재
2) 리눅스 파일 시스템
: 최상위 루트부터 그 하위 디렉토리로 구성되며 파일시스템은 오직 한개만 존재
- 텍스트 파일 (Text File) : vi 같은 에디터 프로그램 생성
- 바이너리 파일 (Binary File) : C언어 컴파일러(gcc)를 사용해 생성한 실행 파일
- 리눅스 파일 종류
종류 | 내용 |
루트 파일 시스템 | - 하드디스크에 적어도 하나의 파일 시스템 존재 - 시스템 프로그램 및 디렉터리 포함 |
일반 파일 | 컴퓨터가 수행 가능한 파일, 원시 프로그램 파일, 텍스트 파일, 바이너리 파일, 데이터파일 |
디레터리 파일 | 다른 파일과 디렉터리 정보를 저장하는 논리적인 파일 |
특수 파일 | - 주변 장치에 연결된 파일 (USB, CDROM, CPU, Memory) - 하나 이상에 특수파일 존재 - /dev 디렉터리에 위치 |
- 리눅스 파일 시스템 구조
구조 | 내용 |
부트 블록 (Boot Block) |
- 리눅스 시스템은 부트블록으로 시작 (컴퓨터 시스템 부팅 관련) - 파일 시스템으로부터 리눅스 커널을 적재 시키기 위한 프로그램 |
슈퍼 블록 (Super Block) |
- 부트블록 다음에 슈퍼블록 실행 - 파일 시스템 크기, 여유공간, 파일 시스템 이름, 디스크 이름, inode 정보 등등 정보 보유 |
아이노드 (inode) |
파일이나 티렉터리에 관한 모든 정보 보유 |
데이터 블록 (Data Block) |
실제 데이터가 저장되어 있는 파일 형태 |
# inode : 리눅스 커널이 현재 사용하는 파일 정보를 유지하는 구조체
- 리눅스(유닉스)만 가지고 있는 파일 관련 정보
- 단일 간접 블록, 이중 간접 블록, 삼중 간접 블록으로 블록 관리
- 심볼릭 링크, 하드 링크로 파일 링크
# 단일 간접 블록 : 실제 데이터 블록을 가리키는 포인터
# 이중 간접 블록 : 첫번째 인덱스 블록은 두번째 인덱스 블록을 가리키는 포인터, 두번재 인덱스 블록은 실제 데이터를 가리키는 포인터
# 삼중 간접 블록 : 이중과 비슷, 첫번째 두번째가 다른 블록, 세번째가 실제 데이터를 가리킴
# 심볼릭 링크 : 윈도우의 바로가기 기능과 비슷 , Ex)파일 명이 긴 파일을 짧은 명으로 만들어서 사용
# 하드 링크 : 원본 파일을 복사해서 동일한 inode를 만듬, 원본 파일 삭제 이동해도 하드 링크는 존재
- inode 보유 정보
- 파일 소유자 ID
- 파일 소유자 그룹 ID
- 파일 크기
- 파일 생성 시간
- 파일 최근 사용 시간
- 파일 최근 변경 시간
- 파일 링크 수
- 접근 모드
- 데이터 블록 주소
3) 리눅스 파일 시스템 생성
- 디스크 파티션
- fdisk [-l] [-v] [-s 파티션] [장치명]
- 파일 시스템 생성
- mkfs [옵션] [장치이름]
- 파일 시스템 무결성 검사
- fsck : 부팅 단계에서 자동적으로 실행되는 무결성 검사 But. 수동 실행도 가능
- 파일 시스템 마운트
- mount : 리눅스에서 특정 디렉터리 연결할 경우 사용
- fstab : 마운트 관련 정보를 가지며, mount를 수행할때 참조하는 파일
- umount : 마운트 해제
- 리눅스 파일 시스템 종류
- EXT2
- 단일 파일 크기 2GB
- 파일명 256Byte
- 최대 지원 파일 시스템 4TB
- 디렉터리 당 저장 가능 파일 수 25,500개 - EXT3
- 단일 파일 크기 4GB
- 파일명 256Byte
- 최대 지원 파일 시스템 16TB
- 디렉터리 당 저장 가능 파일 수 65,565개
- 저널링 파일 시스템 지원 - ETX4
- 1Exa byte 블록 지원
- 단일 파일 크기 16TB
- EXT2, EXT3 호환, 마운트 가능
- fsck 파일 무결성 성능 향상
- Extends 지원 : 큰 용량 파일 삭제 시간 단축
- 하위 디렉터리 개수 확대
- 조각모음 : EXT3 저널링 파일 시스템에서 발생되는 단편화 개선
4) 리눅스 Booting
1) 리눅스 Boot Master
- Loader : 컴퓨터 시스템에 전원 인가 시 가장 먼저 보조기억 장치에 있는 운영체제 커널을 주기억 장치에 전송
- LILO (LInux LOader) : 리눅스 Loader
- /etc/lilo.conf 로 실행 - GRUB : 최근 리눅스 부팅 시 LILO 대신 사용
- 부트 정보 사용자 임의 변경 가능
- 여러 운영체제 사용 가능한 멀티부팅 지원
- 커널 경로 및 파일 명만 알아도 부팅 가능
2) 리눅스 부팅 순서
① ROM BIOS 일고 디스크 MBR에 있는 부트로더 실행
② 부트로더 (LILO, GRUB)는 보조 기억장치에 있는 리눅스 커널을 실행
③ 리눅스 커널은 하드웨어를 확인 하고 root 읽기전용으로 Mount 수행
④ 디스크 검사하고 root 쓰기 전용을 다시 Mount 수행
⑤ 여끼까지 작업 완료 시 init 프로세스 실행 후 PID 1번 할당
⑥ init 프로세스 작업 수행은 리눅스 Run 레벨에 따리 다르게 부팅
- Run Level
실행 단계 | 내용 |
0 | PROM 검사 단계 |
1 | 관리 상태 단계 -> 암호 변경 시 사용 |
2 | 공유된 자원을 갖지 않는 다중 사용자 단계 |
3 | 기본 실행 단계로, 공유된 자원을 가진 다중 사용자 단계 |
4 | 현재 사용 X |
5 | Run Level 3 가동 후 그래픽 모드 X-Window 실행 |
6 | 재부팅 단계 -> Level 3 상태로 재부팅 |
- init 명령어
- init [Run Level]
- Ex) init 6 -> 재부팅
5) 리눅스 디렉터리 구조
- 리눅스 디렉터리 구조
디렉터리 구조 | 설명 |
/ | 루트 디렉토리 |
/bin | 기본 적인 실행 명령 |
/boot | LILO 등 부팅에 관련한 파일 |
/dev | 장치 파일 모음 |
/etc | 시스템 설정 파일 |
/home | 사용자 홈 디렉터리 |
/lib | C 라이브러리 |
/mnt | 임시 마운트용 디렉터리 |
/proc | 시스템 정보를 가진 가상 디렉터리 |
/root | 루트 사용자 홈 디렉터리 |
/sbin | 시스템 관리용 실행 파일 |
/tmp | 임시파일 디렉터리 |
/usr | 애플리케이션 설치 되는 디렉터리 |
/var | 시스템 운영되는 임시파일 및 로그파일 |
3. 리눅스 안증과 권한 관리
1) 패스워드 파일
- /etc/passwd 파일에 패스워드 해시 값 저장하여 비교
- /etc/shadow에 패스워드 저장 가능 (pwunconv 명령어로 이동)
- 일반 사용자가 패스워드 수정 시 직접 /etc/passwd 파일 변경 X (root가 아니기때문)
- usr/bin/passwd 파일 실행하여 변경후 setuid를 통해 /etc/passwd 변경
2) 권한 관리
- 디폴트 권한 umask
Ex) umask 값이 002 면 777 - 002 = 775가 디폴트 권한
- 권한 부여 및 변경
- chmod [User] [Group] [Other] [파일명]
Ex) chmod 755 [파일명]
Ex) chmod u+x, g+w, o-r [파일명]
명령 기호 | 설명 |
u | user |
g | group |
o | other |
a | all |
+ | 권한 추가 |
- | 권한 삭제 |
r | 읽기 |
w | 쓰기 |
x | 실행 |
- chown : 사용자와 그룹 변경 명령어
Ex) chown [option] [UID:GID]
- option 값
- R : 하위 디렉토리 모든 권한 변경
- c : 권한 변경 파일 내용 출력
Ex) chown root: test
: test 파일 소우자 그룹을 root로 변경
3) 특수 권한 관리
- setuid
: 파일이 실행될때 그 파일의 소유자 권한으로 실행
- s : 실행 파일에 setuid를 설정하면 소문자 s -> 실행 가능
- S : 실행 파일이 아닐 경우 setuid 설정하면 대문자 S -> 실행 X
- setgid
: 파일 생성자의 급룹 소유권을 얻음
- sticky bit
: 공용 디렉터리를 만들어 누구나 자유롭게 사용가능 하도록 권한 부여 1000 으로 설정
- 권한 마지막에 t로 표기
- 인가된 사용자만 write 가능 하도록 설정 가능
- 누구나 사용가능 But. 소유자만 삭제 가능
Ex) find / -perm -4000 -print : suid, sgid, sticky -> 검색하면 40000보다 큰 모든 파일 검사
Ex) find / -perm -4755 -print -> 실행 권한을 가지고 있는 setuid 검색
4. 로그파일 및 주요 명령어 사용
1) 리눅스 로그파일
- /var/log 디렉토리에 로그 적제
# WORM (Write Once Read Many) Storage : 한번만 기록 할수 있고 이후에는 읽기만 가능
- 현재 로그인 사용자 확인
- who or w : 현재 로그인한 사용자 정보를 터미널에 출력
- utmp 로그 파일 : 현재 로그인한 사용자 정보를 기록 (/var/run/utmp)
- who로 utmp 로그 파일을 읽음
- 사용자의 로그인 및 로그아웃 정보 확인
- last : wtmp 로그 파일을 읽음
- wtmp 로그 파일 : 사용자의 로그인 및 로그아웃 정보를 기록 (/var/log/wtmp)
- wtmp가 기록하고 있는 정보
- 로그인 및 로그아웃 정보
- 종료 및 부팅 정보
- 재부팅 정보
- telnet 및 ftp 등을 통한 원격 로그인 정보
- 로그인 실패 정보 확인
- lastb : btmp 로그 파일을 읽음
- btmp 로그 파일 : 리눅스 로그인 실패 정보 기록
- Syslog
: 리눅스 운영체제에 대한 로그를 기록하는 데몬 프로세스로 syslogd라는 프로그램에 의해 로그 기록
- /etc/syslogd.conf 파일을 읽어서 로그 기록 수준(위험성, 주체별) 결정
- 주체별 분류
- kern : 커널 요청 로그
- mail : mail subsytem 요청 로그
- lpr : Printing subsystem 요청 로그
- daemon : System server porcesses 요청 로그
- auth : Login authentication system 요청 로그
- 위험성 강도 순서
- emerg > alert > crit > err > warm > notice > info > debug
2) 작업 스케줄 관리
- cron
: 일정한 날짜 시간에 반복적인 작업을 수행하는 프로세스
- cron으로 매일 보안 점검 가능
- 반대로 crontab에 악성 코드를 설정해 놓으면 반복적으로 악성 코드 실행
- /etc/crontab 파일을 읽어서 실행
- 분, 시, 일, 월, 요일(0~6), 사용자, 실행명령 순으로 나타냄 (0 =일요일, * = all)
- Ex. 30 * * * * root /home/user/test -> 30분에 맞춰 test 실행
- Ex. */10 2-5 * * * root /home/user/test -> 2시부터 5시까지 10분 마다 test 실행
- Ex. 20 1 * * * root rm -rf /home/tmp/* -> 매일 1시 20분에 /home/tmp 하위 모든 파일 및 디렉토리 삭제
- Ex. 30 3 * * 2 root /home/show.sh -> 매주 화요일 3시 30분에 show.sh 실행
- Ex. * * 1 1-10/2 * /home/user/test -> 1월부터 10월까지 두달 주기로 매월 1일 test 실행
- crontab 옵션
- l : 현재 로그인 된 게정에 잡혀있는 스케줄 확인
- e : 현재 로그인 중인 계정에 작업 등록
- r : 현재 crontab에 등록된 작업 삭제
- u [User 명] : 작업 실행 시킬 유저명 설정
- at
: cron과 다르게 예약한 명령어를 한번만 실행
3) 리눅스 악성코드 탐지
- 리다이렉션 (Redirection)
: 명령의 결과를 파일에 저장 시키거나 추가 하는 것
- Ex) ls -al > ls.txt -> ls -al 출력을 ls.txt에 저장
- Ex) ls -al >> ls.txt -> ls -al 출력을 ls.txt에 추가
- 파이프 (Pipe)
: 명령어 결과를 다른 명령어의 입력으로 전달하는 것
- find
: 파일을 찾는 명령어
- 악성코드 탐지 가능 (특정 권한 및 실행 권한 검색 또는 최근 변경된 파일 검색)
- 중요 파일 검색 가능
- Ex) find . -name "*.txt" -> 현재 디렉토리에서 .txt 확장자인 파일 찾기
- Ex) find / -name "[A-Z]*" -> 전체 디렉토리에서 파일명의 첫 글자가 영문자 대문자인 것 찾기
- 특수 권한 파일 검색
- setuid는 4000, setgid는 2000, sticky Bit는 1000의 권한을 가짐
- setuid와 setgid 모두 부여된 것을 찾으려면 6000(4000+2000)으로 검색
- perm 으로 권한 검색
- Ex) find / -perm +6000
- 최근에 변경된 파일 검색
구분 | 내용 |
-atime (access time) | 파일을 열거나 접근한 시간 기준 |
-mtime (modify time) | 파일이 변경된 시간 기준 |
-ctime (change time) | 파일 속성이 변경된 시간 기준 |
- Ex) find / -mtime +5 -> 최근 5일 동안 변경되지 않은 파일 찾기
- Ex) find / -mtime -2 -> 최근 2일동안 변경되지 않은 파일 찾기
- 특정 사용자가 소유자인 파일 검색
- user 옵션으로 검색
- nouser, nogroup으로 소유자나 그룹이 없는 파일 검색
- Ex) find / -user root -> root 소유자 파일 검색
- 파일 무결성 검색
: 해시 값을 사용해서 파일의 무결성 검사
- tripwire 옵션으로 검색
- tripwire --init : 해시값을 저장한 데이터페이스 초기화
- tripwire --check : 무결성 검사 실행
5. iptables
: 리눅스 방화벽 정책을 수립하는 도구
- iptables 체인 종류
구분 | 내용 |
INPUT | 입력 패킷 (목적지가 호스트인 패킷) |
FORWARD | 통과 패킷 (목적지가 호스트가 아닌 패킷) |
OUTPUT | 출력 패킷 (출발지가 호스트인 패킷) |
- iptables 명령어
구분 | 설명 |
-A | 규칙 추가 |
-N | 체인 생성 |
-X | 체인 제거 |
-P | 체인 정책 변경 |
-L | 체인 규칙 상태 보기 |
-F | 체인 내 모든 규칙 제거 (방화벽 초기화) |
-Z | 체인 내 모든 규칙의 패킷 바이트 카운트 0으로 초기화 |
-D | 규칙 삭제 |
-R | 새로운 규칙으로 대체 |
-I | 체인 가장 처음에 규칙 추가 |
-E | 체인 이름 변경 |
- Ex) iptables -A OUTPUT -o lo -j DROP -> loopback 인터페이스 출력 패킷 Drop
- Ex) iptables -A INPUT -s 192.168.0.3 -j DROP -> 192.168.0.3에서 오는 패킷 Drop
- Ex) iptables -A FORWARD -p udp -m udp --dport 52 -j DROP -> 목적지 udp 포트 52인 패킷 Drop
'정보보안기사 필기' 카테고리의 다른 글
[02]-06 네트워크 활용(TCP/IP) (0) | 2021.02.17 |
---|---|
[02]-05 네트워크 일반 (0) | 2021.02.16 |
[01]-04 윈도우 Client 및 Server 보안 (0) | 2021.02.15 |
[01]-01 운영체제 이해 및 관리 (0) | 2021.02.02 |