출처: http://kit2013.tistory.com/209


1. 운영체제(6문제/20문제)

(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. 클라이언트 보안(7문제/20문제)

(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. 서버보안(8-10문제/20문제)

(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

-- 아파치 웹로그를 분석해주는 멀티 웹로그 분석도구

Posted by 사라링
BLOG main image
.. by 사라링

카테고리

사라링님의 노트 (301)
JSP (31)
J-Query (41)
JAVA (24)
디자인패턴 (1)
스트러츠 (3)
안드로이드 (11)
오라클 (45)
우분투-오라클 (1)
이클립스메뉴얼 (6)
스프링3.0 (23)
자바스크립트 (10)
HTML5.0 (17)
정보처리기사 (1)
기타(컴퓨터 관련) (1)
문제점 해결 (3)
프로젝트 (2)
AJAX (4)
하이버네이트 (3)
트러스트폼 (11)
Jeus (2)
재무관리(회계) (5)
정규식 (5)
아이바티스 (8)
취미 (2)
소프트웨어 보안 관련모음 (0)
정보보안기사 (6)
C언어 베이직 및 프로그램 (3)
보안 관련 용어 정리 (2)
넥사크로 (6)
웹스퀘어_ (0)
Total :
Today : Yesterday :