1. 운영체제
(1) 운영체제 개요
1) 운영체제의 주요 기능
- 운영체제
-- 시스템 자원을 효율적으로 사용하게 하는, 사용자와 컴퓨터 간의 인터페이스 역할
2) 운영체제의 구조(일반적으로 기능별로 5단계로 구분)
- 1단계 : 프로세서 관리(프로세서랑 프로세스는 다름)
- 2단계 : 메모리 관리
- 3단계 : 프로세스 관리
- 4단계 : 주변장치 관리
- 5단계 : 파일 관리
3) 운영체제의 기술발전 흐름
- 1세대
-- 일괄처리시스템(Batch Processing System)
- 2세대
-- 다중프로그램 시스템(Multi-Programming System)
--- I/O 장치와 CPU 사이의 속도 차이를 이용하여, 하나의 CPU와 주기억장치로 여러 프로그램을 동시에 처리하는 방식
--- I/O 장치의 조작으로 CPU 유휴시간이 발생하면, 다른 작업을 처리함
-- 시분할 시스템(Time Sharing System)
--- 라운드 로빈(Round Robin ; RR) 방식이라고도 함
-- 다중처리 시스템(Multi-Processing System)
--- 여러 개의 CPU와 하나의 주기억 장치를 이용해, 여러 프로그램을 동시에 처리 하는 방식
-- 실시간 시스템(Real Time Processing System)
- 3세대
-- 다중모드처리(Multi-Mode Processing)
--- 일괄처리 시스템, 시분할 시스템, 다중처리 시스템, 실시간 처리 시스템을 모두 제공하는 시스템
- 4세대
-- 분산처리 시스템(Distributed Processing System)
--- 여러 개의 컴퓨터(프로세서)를 통신회선으로 연결해서 하나의 작업을 처리하는 방식
--- 각 단말장치나 컴퓨터들은 고유의 운영체제와 CPU, 메모리를 가지고 있음
(2) 운영체제의 주요 구성 기술
1) 프로세스 관리
- 프로세스와 스레드의 개념(쉬우니까 생략)
- 프로세스 제어 블럭(PCB ; Process Control Block)
-- 운영체제가 프로세스에 대한 정보를 저장해 놓은 저장소
-- 다른 프로세스로 제어를 넘겨줄 때, 현재 실행중인 프로세스의 정보를 PCB에 저장하고 제어를 넘김
-- 각 프로세스가 생성될 때마다 PCB가 생성되고, 종료되면 제거됨
-- 부모 프로세스와 자식 프로세스는 PCB를 공유하지는 않음
- 프로세스 구성 요소
-- Code 영역 / Data 영역 / Stack 영역 / Heap 영역
- 프로세스 상태와 전이(그림설명 따윈 없다)
-- 프로세스 상태 : 생성 / 준비 / 실행 / 대기 / 종료
-- 프로세스 상태의 전이 : Dispatch(준비→실행) / Timer Runout(실행→준비) / Block(실행→대기) / Wake UP(대기→준비)
- 프로세스 스케쥴링 : 어떤 프로세스한테 CPU 사용권을 주는게 현명한가??
-- 선점형 스케쥴링 정책(Preemptive Scheduling Policy) : 처리 도중 뺏기 가능
--- SJF(Shortest Job First ; 최단작업 우선 처리)
--- SRT(Shortest Remaining Time First ; 최단 잔여 시간)
--- RR(Round Robin ; 순환할당 스케쥴링) : 시분할 시스템에 쓰이는거
--- MLQ(Multi Level Queue ; 다단계 큐)
--- MFQ(Multi level Feedback Queue ; 다단계 피드백 큐)
-- 비선점형 스케쥴링 정책(Non-Preemptive Scheduling Policy) : 일단 사용권 받으면 끝까지 쓰고 넘김
--- SJF(Shortest Job First ; 최단작업 우선 처리) ; 선점형, 비선점형 둘다 사용가능해
--- FIFO(First In First Out ; 선입선출)
--- FCFS(First Come First Service ; 선입 선출)
--- HRN(Highest Response Ratio Next) : CPU할당을 받을 시간과 기다린 시간으로 계산되는 우선순위로 결정
---- Priority = (Estimated_Run_Time + Waiting_Time) / (Estimated_Run_Time)
---- Priority가 큰 수를 먼저 실행
- 프로세스 교착 상태(Deadlock)
-- 발생 조건
--- 상호 배제(Mutual Exclusion) : 한 프로세스가 자원을 다른 프로세스가 사용못 하게 배제할 때
--- 점유와 대기(Wait) : 프로세스가 자신에게 할당된 자원을 해제 안하고, 다른 자원을 기다릴 때
--- 비중단 조건(비선점 조건 ; Non-Preemption) : 프로세스에 할당된 자원을 끝날 때까지 해제 할수 없을 때
--- 환형대기 조건(Circular Wait) : 상호 배제 조건이 환형을 이루고 있다고 생각하자
-- 해결방안
--- 예방 : 교착 상태의 필요조건을 부정함으로써, 교착 상태가 발생하지 않도록 하는 방법
--- 회피 : 교착 상태 가능성을 인정하고, 적절하게 피하는 방법(은행원 알고리즘)
--- 발견(탐지) : 교착 상태가 발생하면, 교착 상태의 프로세스와 자원을 발견하는 방법
--- 회복(복구) : 교착상태를 일으킨 프로세스를 종료하고 할당된 자원을 회수하는 방법
2) 기억장치 관리
- 주기억장치
-- 반입기법(Fetch) : 언제 보조기억장치의 데이터를 주기억장치로 옮기느냐??
--- 요구 반입 정책
--- 예상 반입 정책
-- 배치기법(Placement) : 보조기억장치의 데이터를 주기억장치의 어디로 위치시키느냐??
--- 최초 적합
--- 최적 적합
--- 최악 적합
-- 교체기법(Replacement) : 공간확보를 위해 어떤 데이터를 제거 하고 새로운 데이터를 위치할 것이냐??
--- FIFO(First In First Out)
--- LRU(Least Recently Used) : 가장 오랫동안 사용안한걸 바꿈
--- LFU(Least Frequently Used) : 가장 사용 횟수가 작은걸 바꿈
--- NUR(Not Used Recently) : 최근에 전혀 사용되지 않은걸 바꿈
- 가상기억장치
-- 구현 방식
--- 페이징(Paging) 기법 : 프로그램을 동일한 크기의 Page로 나누어 구현
---- 내부단편화의 원인
---- 스레싱(Thrashing) : 자주 페이지의 교체가 일어나는 현상(프로세스 처리 시간 < 페이지 교체 시간)
---- 워킹 셋(Working Set) : 자주 사용되는 페이지들을 묶어서 주기억장치에 계속 상주시키는방법, 스레싱의 대책
---- 페이지 교체 알고리즘
----- FIFO(First In First Out)
----- LRU(Least Recently Used) : 가장 오랜기간 사용하지 않은 페이지 교체
----- OPT(Optimal ; 최적교체) : 가장 사용되지 않을(?) 페이지를 교체 ;; 실현가능성 희박
----- SCR(Second Chance Replacement) : 참조 비트를 주고, 1이면 0으로 깍고, 0이면 교체
--- 세그먼테이션(Segmentation) 기법 : 프로그램을 가변적 크기의 Segment로 나누어 구현
---- 외부단편화의 원인
※ 단편화(Fragmentation)
- 내부 단편화(Internal Fragmentation) : 할당 받은 페이지를 다 사용 못했을 때 생기는 자투리 공간들(영향이 적긴적지)
-- 압축(Compaction)으로 해결 : 분산되어있는 단편화된 빈 공간들을 결합(Garbage Collection)
- 외부 단편화(External Fragmentation) : 할당과 제거를 반복하면서, 적재하기 얘매해진 공간들
-- 통합(Coalescing)으로 해결 : 인접해 있는 단편화된 공간을 하나의 공간으로 통합
- 보조기억장치
-- 디스크 스케쥴링
--- FIFO(=FCFS)
--- SSTF(Short Seek Time FIrst) : 탐색거리가 가장 짧은 요청을 먼저 처리
--- SCAN : 헤드가 한 방향으로 쭉가면서 처리하는 방법, 실린더 끝까지 가서 방향을 전환한다.
--- C-SCAN : 헤드가 실린더 끝에서 안쪽으로이동하며 처리
--- N-Step SCAN : 헤드의 방향이 전환될 때, 이미 대기 중이던 요청만 처리(도중에 생긴 요청은 무시)
3) 파일 시스템 관리
- 디렉터리의 구조
-- 1단계 디렉토리 구조 : 모든 파일이 같은 디렉토리에 존재하며, 파일 이름은 유일한 구조
-- 2단계 디렉토리 구조 : 중앙에 마스터 디렉토리(MDF)가 있고, 각 사용자의디렉토리(UFD)가 하위에 있는 구조
-- 트리 디렉토리 구조 : 하나의 루트 디렉토리와 다수의 하위 디렉토리로 구성되며, 포인터로 탐색(일반적으로 OS에서 사용)
-- 비주기 디렉토리 구조(Acyclic Graph Directory) : 파일과 디렉토리의 공유가 허용될 수 있는 사이클이 없는 구조
-- 일반 그래프 구조 : 사이클이 허용되고, 기본 트리 디렉토리 구조에 링크를 첨가한 구조
-- http://wingsofgod.tistory.com/entry/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC-%EA%B5%AC%EC%A1%B0
- Windows File System
-- FAT(File Allocation Table)
--- DOS 때 부터 사용되고 있는 대표적인 File System. FAT16과 FAT32 등이 있다
--- 하드디스크에 FAT라는 영역을 만들어 파일의 실제 위치 등의 정보를 기록하고 이를 이용함
--- 저용량에 적합 / 보안에 취약 / 호환성이 우수
-- NTFS(NT File System)
--- MFT(Master File Table)를 사용하여 관리하며, Mirror와 파일로그가 유지되어 파일 복구가 가능함
--- FAT에다가 대용량 / 보안성 / 압축기능 / 원격저장소 등의 기 능을 추가해서 만든 윈도우 전용 File System
--- 대용량 지원 / 강력한 보안 / 자동 압축 및 안정성 / 호환성이 구림 / 저용량에선 FAT보다 느림
- Unix & Linux File System
-- EXT2 : FSCK(File System Check)으로 시스템 손상 복구 가능
-- EXT3 : 저널링(Journaling) 기술로 더욱 빠르고 안정적인 복구가 가능
-- EXT4 : 빨라진 FSCK / 하위 호환성 / 지연된 할당(Allocate-On-Flush ; 데이터가 디스크에 쓰이기전까지 블록 할당 지연)
- Partition
-- 주 파티션 : 기본 파티션을 의미 / 주 파티션의 수 + 확장 파티션의 수 <= 4
-- 확장 파티션 : 저장 공간을 없으며, 논리 파티션을 만들게 해주는 그릇의 역할 / 디스크에 하나만 생성 가능
-- 논리 파티션 : 최대 12개(NTFS에서는 제한이 없다네??)
4) 분산 시스템
- 개념 : 분산되어 있는 컴퓨터에서, 작업이 나누어 처리되고 그 결과가 서로 호환되도록 연결되어 있는 시스템
- 투명성(Transparency)를 보장해야 함
-- 위치 투명성 : 컴퓨터의 실제 위치를 몰라도 접근 가능
-- 이주 투명성 : 자원 이동에 제한이 X
-- 병행 투명성 : 사용자의 위치를 몰라도 다른 사용자와 자원의 공유 가능
-- 복제 투명성 : 사용자에게 통지할 필요 없이 자유롭게 복제 가능
(3) 운영체제 사례별 특징과 주요 기능
1) 유닉스
- 구성
-- 커널(Kernel)
--- OS의 핵심으로 주기억장치에 상주하여 자원을 관리함
--- 크게 입출력 / 메모리 / 프로세스 / 파일관리의 부분으로 나눔
--- 쉘에서 지시한 작업을 수행함
-- 쉘(Shell)
--- 커널과 사용자간의 인터페이스를 제공
--- 사용자가 입력하는 명령의 입/출력을 수행하며 프로그램을 실행시킴
--- 명령어 해석기/번역기라고 함
-- 파일 시스템(File System)
--- 계층적 트리 구조를 가지고 있고 다음과 같이 구성되어 있음
---- 부트 블럭(Boot Blocks) : 파티션의 첫 부분에 예약되어 있는 블럭들 / 부팅시 필요한 코드 저장(커널 적재 코드 등)
---- 슈퍼 블럭(Super Block) : 파일 시스템당 한 개씩 생성 / 전체 파일 시스템에 대한 정보 저장
---- 아이노드(I-Nodes) : 파일 이름을 제외한 모든 파일과 디렉토리에 대한 정보를 저장
---- 데이터 블럭(Data Blocks) : 실제 데이터가 저장
2) 윈도우
3) 리눅스
4) 보안운영체제 특징
- 접근 권한 통제(Authorization) ; Authorization = Authentication + Access Control
-- 사용자 인증(Authentication)
-- 접근 통제(Access Control)
- 침입 탐지 및 방어(Intrusion Detection & Prevention)
2. 클라이언트 보안
(1) 윈도우 보안
1) 설치 및 관리
- 음... 정품 구입해서 쓰고, 사양에 맞춰서 설치하라는 내용
- 라이센스 모드
-- Per Server : 서버에 동접하는 클라이언트 숫자에 따라 라이센스를 구매하는 방식
-- Per Seat : 클라이언트 숫자에 따라 라이센스를 구매하는 방식
- 사용자 계정 관리
-- 암호 설정해주는게 좋지
-- 사용자 계정 컨트롤(UAC) : 관리자 수준의 권한이 필요한 변경 사항이 있을 때, 사용자에게 이를 알려주는 것
2) 공유자료 관리
- 공유 폴더
-- NTFS은 사용자계정이나 그룹에 대해서, 파일과 폴더에 퍼미션(Permission)을 줄 수 있음
-- Everyone 그룹에 대해서는 기본적으로 <읽기> 권한만 주어짐
--- 로컬에서 그냥 폴더 만들면 Everyone 그룹에 대해서 <모든 권한>이 주어짐
- 숨은 공유(공유 폴더 이름 마지막에 $를 붙이는 폴더)
-- 네트워크 공유 목록에서 공유 폴더를 안보이게 함
-- 접근하기 위해서는 공유 폴더 이름을 통해 직접 접근해야 함
- 관리를 목적으로하는 기본적인 공유 폴더(ADMIN$, IPC$, C$, 등)
-- 이름에서 볼 수 있듯, 모두다 숨은 공유로 만들어져 있음
-- CMD에서 net share 명령어로 확인이 가능함
-- 네트워크 접근 사용만을 제한할 수 있고, 로컬 접속은 제한을 할 수 없음
-- 보안상 사용하지 않을 땐 비활성화 하는 게 좋음
--- 관리적 공유 폴더 제거 하기(C$, D$, 등)
---- 위치 : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
---- AutoShareWks의 값을 REG_DWORD 타입의 0으로 바꿈
---- 걍 HKEY_LOCAL_MACHINE 및에다가 AutoShareWks만들어서 0넣어도 되는듯
--- 널 세션 제거하기(IPC$)
---- IPC$는 제거가 안되기에 널 세션을 제거하는 방법을 이용
---- 위치 : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA
---- restrictanonymous의 값을 REG_DWORD 타입의 1로 바꿈(기본값은 0)
3) 바이러스와 백신
- 바이러스(Virus)
-- 다른 프로그램에 기생해서 실행(독자적으로 실행X)
-- 파일 전송 기능이 없어서, 네트워크 대역폭에는 영향을 끼치지 않음
-- 대표적으로 1994년 4월 26일 CIH 바이러스
- 웜(Wrom)
-- 독자적으로 실행(기억장소에 코드나 실행파일로 존재)
-- 네트워크를 사용해서 자신을 복사하기에, 네트워크 대역폭을 잠식함
-- 대표적으로 2001년 9월에 발생한 님다(Nimda)
- 트로이목마
-- 자기 자신을 복제하지는 않지만, 악의적 기능을 포함하는 프로그램
-- 유틸리티 프로그램에 내장되거나, 그것으로 위장해 배포됨
-- 대표적으로 백오리피스같은 프로그램
- 스파이웨어(Spyware)
-- 사용자몰래 PC에 설치되어 정보를 수집하는 프로그램
4) 레지스트리 활용
- 시스템을 구성하기 필요한 정보를 저장한 중앙계층형 데이터베이스
- HKEY_CURRENT_USER(HKCU) : 현재 로그온 되어 있는 사용자에 관련된 정보 등
- HKEY_USERS(HKU) : 컴퓨터의 모든 사용자 프로필 정보 등
- HKEY_LOCAL_MACHINE(HKLM) : 하드웨어와 프로그램 설정 정보
- HKEY_CLASSES_ROOT(HKCR) : OLE데이터와 확장에 대한 정보 등
- HKEY_CURRENT_CONFIG(HKCC) : 시스템 시작시 컴퓨터에서 사용하는 하드웨어 프로필 등
- 악성코드 구동을 위해 주로 HKEY_CURRENT_USER와 HKEY_LOCAL_MACHINE이 이용됨
(2) 인터넷 활용 보안
1) 웹브라우저 보안
- 검색 기록 / 쿠키 삭제 / 임시파일 삭제
- 익스플로러에서는 보안 수준을 설정하기
-- 보통 이상으로 사용하고, 세부 설정 가능
- 브라우저에서 개인정보를 수집하는 기술
-- 쿠키(Cookie) & 슈퍼쿠키(Super Cookie)
-- 비콘(Beacon ; Web Bug)
-- History Stealing
-- Fingerprint
- HTTP(Hyper-Text Transfer Protocol) 프로토콜
--웹 상에서 파일(텍스트, 이미지, 등)을 주고 받기 위한 프로토콜로 TCP/IP와 관련된 프로토콜(80번 포트)
-- 한 번 접속해서, 정보 주고받고 접속을 끊어버리는 특이한 특징
-- HTTP 요청 방식
--- GET 방식 : 클라이언트가 서버로 전송하는 정보를 URL에 담는 방법
--- POST 방식 : 요청사항을 HTTP 헤더 안에 넣어서 서버로 전송하는 방법
-- HTTP 1.0
--- 한 번에 한 종류의 데이터만 받을 수 있음(이미지와 텍스트라면 총 두 번의 접속이 필요)
--- 요청 방식
---- GET : GET 방식으로 서버에 리소스(정보)를 달라고 요청
---- HEAD : GET방식과 유사하지만, 요청한 리소스가 아닌 Header만 채워서 응답(해당 정보를 잘 처리하는지 테스트)
---- POST : POST 방식으로 서버에 리소스를 달라고 요청
-- HTTP 1.1
--- 한 번에 이미지와 텍스트까지 받을 수 있음
--- 요청 방식
---- GET
---- HEAD
---- POST
---- OPTION : 서버가 요청한 리소스에서 어떤 요청방식들을 처리해주는지 알려줌
---- PUT : 서버에 요청한 리소스를 저장함
---- TRACE : 루프백 메시지를 위한 요청을 함(이것도이해안가ㅠ)
---- CONNECT : ??이해안감
---- DELETE : 명시된 리소스를 서버가 삭제할 것을 요청
-- HTTP 상태코드(안보여주는게 이득 ; 시험 맨날 나와)
--- 2xx : 성공
---- 200 : OK
---- 201 : 서버가 성공적으로 요청된 새 리소스를 생성(PUT 메소드인듯)
--- 3xx : 재전송
--- 4xx : 클라이언트 측 에러
---- 401 : Forbidden
---- 403 : 유효한 요청에 대해 서버가 응답을 거부(권한이없는 401과는 다름)
---- 404 : Not Found
--- 5xx : 서버 측 에러
---- 500 : 내부 서버 오류
---- 501 : 해당 메소드 인식 못하거나 기능이 없음
2) 메일 클라이언트 보안
- PGP(Pretty Good Privacy)
-- 데이터 암호화와 복호화하는 프로그램인데, 전자 메일의 보안성을 높이기 위해 자주 사용되
-- IETF에서 표준으로 채택한 PEM과 비교되
-- 수신 부인방지와 메시지 부인 방지 기능이 없어
-- 메시지의 비밀성을 위해 공개키 암호기술을 사용(RSA, IDEA 등)
-- 메시지의 무결성을 위해 메시지 인증을 사용
-- 메시지의 생성, 처리, 전송, 저장, 수신 등을 위해 전자서명을 사용
(3) 공개 해킹도구에 대한 이해와 대응
1) 트로이목마 S/W
- 대표적인 툴 : AOL4FREE.COM / Shark2 / NetBus / Back Orific
2) 크래킹 S/W
- 루트킷(RootKit) : 서버 내에 침투해서 백도어를 만들고 로그를 삭제하는 등의 패키지들
-- 대표적으로 lrk5
-- 루트킷을 찾아내는 프로그램은 안티루트킷(Anti-RootKit) : 대표적으로 Icesword
- 패스워드 크랙(Password Crack)
-- Brute Force Attack / Dictionary Attack / Password Guessing / Rainbow Table 등의 공격 방법으로 크랙
-- 대표적인 툴 : John the Ripper / pwdump / LOphtCrack / ipccrack / chntpw(to reset pw) / ERD Commander
- 포트 스캐닝(Port Scanning) (SAINT와 Nmap 정도만 알고 있어도 될듯)
-- 다중 취약점 스캔 : SAINT / sscan2k / vetescan / mscan 등
-- 특정 취약점 스캔 : cgiscan / winscan / rpcsan
-- 은닉 스캔 : Nmap / stealthscan
-- 네트워크 구조 스캔 : firewalk / Nmap
-- 스캐닝 기법
--- Openning Scanning : TCP Connect Scanning
--- Half-Open Scanning : SYN Scanning
--- Stealth Scanning : FIN / X-MAS / NULL Scanning
--- More Advanced Scanning : Spoofed Scanning(??)
-- 포트 스캐닝의 구분
--- TCP 포트 스캐닝 : 특정 Flag값을 설정한 뒤, 패킷을 보내고 그에 대항 응답으로 확인
--- UDP 포트 스캐닝
---- 포트가 열린 상태 : 아무런 응답 X
---- 포트가 닫힌 상태 : UDP 패킷이 목적지에 도달하지 못했다는 메시지
---- ※ 패킷이 유실되도 아무런 응답이 없기에 신뢰성이 떨어짐
- Nmap 사용법
-- 스캔 타입
--- -sS : TCP Syn Scan
--- -sF / -sX / -sN : FIN / X-Mas / NULL Scan
--- -sU : UDP Scan
--- -sP : Ping Sweep
--- -b : FTP Bounce Attack
--- 등등
-- 스캔 옵션
--- -P0 : Don't ping before scanning ; ping으로 사전 조사 하는 과정을 뺌
--- -PT <PORT_NUMBER>: ICMP Request Packet 보내고, 응답기다리는 대신에 TCP ACK를 보내 응답 기다림. 살아있으면 RST받음
--- -PS
--- -PB
--- -O : 운영체제 확인
--- -p <PORT_NUBMER>
--- -S <IP_ADDRESS> : Spoofing
--- 등등
-- 예
--- #./Nmap -p 1-30,110,65535 203.x.x.x
---- 203.x.x.x의 1~30번, 110번, 65535를 스캔한다.
3) 키로그 S/W
- 대표적인 툴 : Winhawk, Key~~로 시작되는 툴들
(4) 도구활용 보안관리
1) 클라리언트 보안도구 활용
- BlackICE
-- 일종의 방화벽이라고 보면될 듯
-- 외부에서 자신의컴퓨터에 접근하는 것을 탐지 / 제어하는 프로그램
-- 침입 차단 / 어플리케이션 보호 / IDS 기능 제공
- Snort
-- 공개 네트워크 IDS
-- 다양한 OS 지원 / Rule 설정가능
2) 클라이언트 방화벽 운영
- Windows 방화벽(ipsec)
- Linux/Unix 방화벽(iptables)
-- iptables는 뭐 생략 쉬우니까
3. 서버보안
(1) 인증과 접근통제
1) 계정과 패스워드 보호
- Linux Server
-- 계정 생성, 수정, 삭제 : useradd / usermod / userdel
-- 계정과 패스워드에 관련된 파일
--- /etc/passwd : 사용자 계정 정보
--- /etc/shadow : 사용자 패스워드
--- /etc/group : 그룹 ID / 목록
--- /etc/gshadow : 그룹 정보
--- /etc/login.defs : 사용자 전체에 자동 할당되는 UID, GID 범위, 패스워드 유효 기간, useradd 설정사항
--- /etc/default/useradd : useradd 명령어로 계정 생성 시, 어떤 환경과 파일을 참조할 것인가에 대한 정보
--- /etc/skel : 계정 생성시 필요한 파일, 디렉토리를 저장하고 있는 디렉토리, 새 계정 생성시 그 대로 해당 계정의 홈디렉토리로 복사
-- /etc/passwd 구성
--- 사용자계정이름 : x(패스워드가 암호화되어 저장됨을 의미) : UID : GID : 계정정보 : 홈디렉토리 : 쉘
--- root : x : 0 : 0 : root : /root : /bin/bash
--- ※ Linux에서 사용자 계정 잠구는 법
---- /etc/passwd에서 쉘 정보에다가 /bin/false 또는 /bin/nologin을 기술함
---- passwd -l <계정명>
-- /etc/shadow 구성
--- root : $1$F9FBAJKWEBKF4A30AJWNFKE : 15551 : 0 : 99999 : 7 : : : :
--- 사용자계정 : 암호화된 패스워드 : 패스워드 바꿔진 日수: 패스워드 변경할수있는 최소 日수 : 패스워드 만료 日수 : 패스워드 만료 경고日수 : 사용자 제한 이후 계정 정지까지 日수 : 계정만기일 : (사용안함)
- Windows Server
-- 컴퓨터 관리나 net user 명령어로 계정 생성, 수정, 삭제
-- 계정 생성 시 옵션
--- 다음 로그온시 반드시 암호 변경
--- 암호 변경 불가
--- 암호 사용기간 제한 없음
--- 계정 사용 안 함(사용할 때까지 로그인 X)
-- 기본 제공 계정인 Administrator는 계정 사용 안함으로 설정하거나 이름을 변경하는게 보안상 이득
-- Guest 계정은 불필요하면 계정 사용 안함으로 설정(기본 값은 사용안함)
-- 암호 정책
--- 암호의 복잡성
--- 최근 암호 기억 : 비슷하게 못 만들게 하기 위해서
--- 최대 암호 사용기간
--- 최소 암호 사용 기간
--- 최소 암호 길이
--- 해독 가능한 암호화를 사용해 암호 저장 : 왜있을까??
-- 계정 잠금 정책
--- 계정 잠금 기간 : 0으로 하면 명시적으로 잠금 해제 할때 까지 유지(0부터 99999까지 ; 분 단위)
--- 계정 잠금 임계값 : 실패한 로그인 시도 최대 횟수를 설정(0부터 999까지 적용가능 ; 0이면 잠금 적용 X)
--- 다음 시간 후, 계정 잠금 임계값을 0으로 설정(1에서 99999까지 ; 분 단위)
2) 파일 시스템 보호
- Windows
-- FAT12 / FAT16 / VFAT / FAT32
-- NTFS
-- 관리 공유 폴더 제거 / 마지막에 로그인한 계정 숨김 / 예약작업 수시로 체크 / 이동식 디스크의 자동실행방지 / 원격 레지스트리 서비스 중지
- Linux
-- minix / ext2 / ext3 /ext4
- 클라우드 파일시스템
-- Ceph
-- GlusterFS(글러스터)
-- Google 파일시스템(GFS)
-- Hadoop 분산파일시스템(하둡)
-- Lustre 파일시스템
-- Panasa 파일시스템
-- PVFS2
-- OASIS : 한국전자통신연구원 저장 시스템 연구팀에서 개발한 객체 기반 클러스터 파일 시스템
3) 시스템 파일 설정과 관리
- 리눅스 디렉토리 구조(트리 구조)
-- /bin : 필수 바이너리 파일, 시스템 기본 명령어
-- /sbin : 관리자가 사용하는 시스템 운영에 필요한 명령어
-- /boot : 부팅에 필요한 커널과 핵심 파일
-- /dev : 장치 파일
-- /mnt : CD-ROM과 플로피의 마운트 포인트를 제공하는 디렉토리
-- /lib : 시스템 운영 및 프로그램 구동시 필요한 공유 라이브러리
-- /var : 내용이 자주 변경되는 가변 자료를 저장하는 디렉토리
-- /usr : 각종 서드 파티 응용 프로그램이 설치되는 프로그램
-- /proc : 시스템 상태를 제공하기위한 디렉토리와 파일들이 존재
- Mount 하기
-- 디바이스와 디렉토리의 연결
-- # mount <디스크나 파티션> <마운트될 디렉토리>
-- 재부팅시 마운트가 풀리기에, /etc/fstab에 기술해서 자동 마운트
- Shell 설정 변경
-- /etc/profile에 설정된 값대로 shell에 적용
-- /root/.bashrc : 시스템 전체에 적용되는 함수와 alias
--- 파일 안에 alias rm='rm -i' 처럼 기술하면, rm이란 명령어는 rm-i와 동일하게 처리하라는 의미
-- /root/.bash_profile : 사용자 환경 설정과 시작프로그램
-- /root/.bash_history : 사용자 최초 로그인 후 생성, 사용자가 쉘에 입력한 명령어를 기록함
- 쿼타(Quota)
-- 디스크에 사용량을 체크 감시하고, 한 파티션에 너무 많은 디스크를 사용하게 되면 관리자에게 알리도록 제한함
- 파일 시스템 점검(File System Check & Recovery) : FSCK를 사용함
-- 저널링 파일시스템으로 자동 복구가 되지만, 복구가 불가능한 경우 수동으로 복구해주어야 할때 씀
-- 많은 시간을 필요로하는 경우가 많음
-- 반드시 검사하고자 하는 파일시스템은 unmount하고 검사해야 함
- 퍼미션(Permission)
-- umask : 파일은 666에서 빼고, 디렉토리는 777에서 뺌
-- setuid(s, 4000) / setgid(s, 2000) / sticky bits(t, 1000)
-- setuid, setgid는 해당 파일이 실행될 때에만, 실행한 사용자에게 소유자(그룹)의 권한을 부여함
--- sticky bits는 주로 공유 디렉토리에 지정하는데, 파일을 root와 소유자만이 삭제, 수정이 가능하게 함
-- ※ setuid 파일 찾기 : find / -user root -perm -4000 -print -xdev
4) 시스템 접근통제 기술
- Linux의 iptables
- Windows의 ipsec
-- 생략 걍 GUI로 세팅하는거
- 통제 방식(뒤에도 나오는것 같은데)
-- 강제적 접근통제(MAC)
--- 주체의 권한을 기준으로 객체에 대한 접근을 제어
-- 임의적 접근통제(DAC)
--- 주체가 속한 그룹의 권한을 기준으로 객체에 대한 접근을 제어
-- 역할기반 접근통제(RBAC) : 역할을 미리 설정하고, 주체를 역할에 할당한 후, 역할에 접근 권한 부여
--- 최근에 많이 사용되는 통제방식으로 관리자에게 편리함
(2) 보안관리
1) 운영체제 설치
2) 시스템 최적화
- CPU
-- top : CPU와 Memory, swap에 대한 전체적인 모니터링 가능
-- ps aux : CPU와 Memory 사용량이 큰 PID를 확인 가능
-- pstree : 시스템에서 프로세스간의 연결구조를 트리 구조로
- Memory
-- free : 사용되는 메모리와 여유가 있는 메모리가 얼마인지 알려주는 간단한 명령어
-- vmstat : 가상 메모리 상태를 확인(Swap-Out과 Swap-In을 봐)
- Disk I/O
-- df : 파일 시스템의 상태를 기초로 용량을 출력(df -k(KB단위) / df -h(다양한 단위))
-- du : 실제 디렉토리와 파일의 크기를 확인해서 용량을 출력
-- iostat : 디스크에 I/O가 얼마나 나타나는 모니터링
- Network
-- netstat : 포트 정보
-- ping
-- traceroute
-- tcpdump
3) 시스템 로그 설정과 관리
- 시스템 로그는 시스템의 정확한 시간이 필수
-- #rdate -s time.bora.net
- Linux의 /var/log 디렉토리
-- messages
--- 로그인 기록에서 디바이스에 관련된 정보와 네트워크 등등 다양한 정보
--- 콘솔에 출력되는 메시지들이 저장된다. 시스템 장애가 생기면 이 파일을 점검해서 취약점 점검
-- pacct
--- 로그인부터 로그아웃까지 입력한 명령과 시간, 작동된 tty 등에 대한 정보 수집 ; binary
--- 명령어 : lastcomm
-- history
--- 사용자별로 실행한 명령을 기록하는 로그
-- lastlo
--- 사용자별로 최근 로그인 시간 ; binary
--- 명령어 : lastlog
-- wtmp
--- 전체 로그인기록 (최근에 사용자 로그인 및 로그아웃한 정보) / utmp의 기록이라고 보면될듯; binary
--- 명령어 : last
-- utmp
--- 현재 로그인 되어 있는 사용자에 대한 정보(/var/run/utmp에 있다) ; binary
--- 명령어 : w / who / users / finger
-- btmp
--- 로그인이 실패한 경우에 ; binary
--- 명령어 lastb
-- sulog
--- Su 명령와와 관련된 로그
-- dmesg
--- 부팅부터 HW적인 에러
-- secure
--- 보안과 관련된 중요한 로그(사용자 인증관련된 로그; FTP나 SSH 같은 것)
-- httpd access_log, error_log
--- 웹서버에 대한 로그
-- xferlog
--- FTP로 어떤 자료가 오갔는지 보여주는 로그
4) 서버 해킹 원리의 이해
- 1) 정보수집단계
-- 포트스캐닝 등
- 2) 시스템 침입단계(root권한 획득이 목적)
-- exploit(root계정 따내는 여러 프로그램)
-- 서버 설정 오류 / 원격 버퍼 오버플로우 취약점 / 계정 도용 / 패스워드 파일 획득 / 기타 취약점을 이용해 침입함
-- 가장 단순하지만 강력한 대책은 업데이트(패치)
- 3) 공격 경유지나 혹은 거점 마련
-- 백도어 등을 설치하거나, 또다른 공격의 공유지로 삼음
5) 서버관리자의 업무
- 시스템의 시작과 종료 및 재시작
- 사용자 계정관리
- 프로세스 및 디스크, 메모리
- 네트워크 연결 및 상태관리
(3) 서버보안용 S/W 설치 및 운영
1) 시스템 취약점 점검도구
- NESSUS : 서버-클라이언트 구조로 작동하는 취약점 점검 도구
- SARA(SATAN기반) : 서버, IDS, 라우터 등의 보안 분석도구
- nikto2 : 웹 서버 스캔해서 취약점 점검(오픈 소스)
2) 시스템 침입 탐지 시스템
3) 무결성 점검도구
- trpwire : 가장 대표적인 무결성 점검도구로써, 시스템의 모든 파일에 대해 DB를 만들어서 추후 변동사항을 점검
- Fcheck : tripwire보다 조금 더 간편한 설치와 설정
4) 접근통제 및 로깅도구
- TCP Wrapper
-- 슈퍼데몬(Xinetd)의 영향을 받는 데몬들은 TCP Wrapper로 접근 제어와 로깅이 가능
-- 도식화 : 클라이언트의요청 → Xinetd → TCP Wrapper → 데몬 실행
-- /etc/host.deny파일과 /etc/host.allow파일을 통해 접근 통제를 할 수 있음
--- Deny 정책 적용 시, host.deny에 ALL:ALL을 적어 놓고, host.allow에 데몬종류:클라이언트 주소를 적음
-- 접근 통제기록은 secure나 messgae 파일 등에 기록됨
5) 스캔 탐지도구
- 방어적인 관점에서, 스캔 탐지가 일어나면 이에 따란 방어 대책을 세워야 할 듯
- portsentry
-- 포트스캔을 실시간으로 탐지하고 TCP_Wrapper와 결합해, host.deny파일에 자동으로 등록해 방어함
- 실시간 네트워크 불법 Scan 자동탐지 도구(RTSD ; Real Time Scan Detector)
-- KISA에서 과거에 개발한건데 오래되서 업데이트 안되고 있지
6) 로깅 및 로그분석도구
- syslog
-- 백그라운드 프로세스로 돌면서, 로그 메시지를 하나 이상의 개별 파일에 기록하는 데몬
-- /etc/syslog.conf에 각종 로그 환경 설정을 추가, 변경, 삭제할 수 있음
--- 형식 : Facility.Priority Logfile-Location
---- Priority : Emerg > Alert > Crit > Err > Warn > Notice > Info > Debug > None
- webalizer
-- 아파치 웹로그를 분석해주는 멀티 웹로그 분석도구
출처 : http://kit2013.tistory.com/209
해당 블로그에서 보고 공부했는데 정리가 잘되어 있는거 같아 퍼왔습니다.
'IT 자격증 > 정보보안 기사' 카테고리의 다른 글
정보보안기사 실기 포스팅 (0) | 2015.05.04 |
---|---|
정보보안기사 필기_5과목 정보보안 관리 및 법규 요약 정리 (0) | 2015.04.30 |
정보보안기사 필기_4과목 정보보안 일반 요약 정리 (0) | 2015.04.30 |
정보보안기사 필기_3과목 어플리케이션 보안 요약 정리 (0) | 2015.04.30 |
정보보안기사 필기_ 2과목 네트워크보안 요약 정리 (0) | 2015.04.30 |