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 : 유효한 요청에 대해 서버가 응답을 거부(권한이없는 401과는 다름)

---- 403 : Forbidden

---- 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

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

1. 인터넷 응용보안(10문제/20문제)

(1) FTP 보안

1) FTP 개념

- FTP(File Transfer Protocol)

--TCP/IP 네트워크상에서 한 호스트에서 다른 호스트로 데이터 파일을 전송하는데 사용하는 표준 프로토콜(IETF RFC 959)

- Transfer Layer 프로토콜로로 TCP를 사용하며, 서버-클라이언트 모델을 구성하고 있음

- FTP 세션은 암호화되지 않기에, 사샐활 보호 또는 개인정보 보호기능을 제공하지 않음

-- 인증정보 또한 평문으로 전달되어 스니핑 당하면 인증정보가 유출될 수 있음


2) FTP 서비스 운영

- FTP는 제어를하기 위한 연결과 데이터 전송을 위한 연결을 따로 사용해서 효율적이고 신뢰성있는 데이터 전송을 제공

-- PI(Protocol Interpreter) : 제어 명령 송/수신하는 역할

-- DTP(Data Transmission Process) : 데이터를 송/수신하는 역할

- FTP는 제어를 위한 연결을 할 때엔 21번 포트를 사용 / FTP 세션 동안 계속 유지

- FTP는 데이터 전송을 위한 연결을 할 때엔 20번 포트를 사용 / 파일 전송하는 동안 유지

- Active Mode

-- 많이 쓰이는 방식으로, 클라이언트가 서버에게 자신이 어떤 포트로 데이터를 전송할지 알려주는 방식(클라이언트가 원하는 포트 사용)

-- 1) 클라이언트가 서버의 Command Port(21번)로 데이터전송을 위해 사용할 포트를 알려줘

-- 2) 서버가 Command Port(21번)에서 클라이언트로 ACK 신호를 보냄

-- 3) 서버가 Data Port(20번)에서 클라이언트가 알려준 포트로 연결을 시도

-- 4) 클라이언트가 서버의 Data Port(20번)로 ACK 신호를 보냄

-- ※ 클라이언트는 1024 이상의 임의의 포트를 사용

-- ※ 3)에서 서버가 클라이언트로 연결시도한다는 점에서 문제점이 발생(방화벽 등에 막힐 수 있음) → Passive Mode의 사용

http://learnwithrahul.blogspot.kr/

- Passive Mode

-- 방화벽과 같은 보안솔루션 때문에 방화벽을 통해 FTP를 사용해야하는 문제점을 해결

-- Active Mode와 달리, 서버가 클라이언트로 자신이 데이터를 보내고자하는 포트를 정하는 방식

-- 1) 클라이언트가 서버의 Command Port(21번)로 Passive Mode로 접속하겠다고 ㅇ

-- 2) 서버가 Command Port(21번)에서 클라이언트에게 데이터전송을 위해 사용할 포트를 알려줘

-- 3) 클라이언트가 서버가 알려준 포트로 연결을 시도

-- 4) 서버가 클라이언트로 ACK신호를 보냄

-- ※ 클라이언트는 1024 이상의 임의의 포트를 사용

-- ※ 서버가 1024 이상의 포트를 열어둬야 된다는 점에서 보안적인 문제점이 있을 수 있지

http://learnwithrahul.blogspot.kr/

- Anonymous FTP(익명 FTP)

-- 사용자들이 할당 받은 ID 없이도 FTP 서버에 접근하고 서비스를 이용할 수 있게 해줌

-- FTP 서버에 접속 후, 사용자 아이디에는 Anonymous, 패스워드에는 아무내용 넣어도 상관없으나 자신의 이메일적는게 예의

- TFTP(Trivial File Transfer Protocol)

-- FTP보다 간단하고 최소한의 기능만 제공해주는 프로토콜

-- FTP는 TCP를 이용하는반면, TFTP는 UDP를 사용함

-- 디렉토리나 파일의 목록을 보는 명령이 없기에, 파일명을 모르는 사용자는 해당 파일 다운받지 X

--- 물론, Brute Force Attack 등으로 가능하긴 함

-- 인증절차가 없기에, 설정이 잘못되어 있으면 누구나 파일에 접근이 가능

- Unix/Linux에서 사용자 별로 FTP Server에 접근 제어를 하려면 /etc/ftpusers에 등록함(등록되면 접근이 거부됨)

- Windows에서는 FTP Server를 만드려면 IIS가 설치되어야 함


3) FTP 공격 유형

- FTP Bounce Attack

-- FTP 서버가 데이터를 전송할 때, 목적지를 검사하지 않는 설계상의 문제점을 이용한 공격

-- 공격자가 FTP 서버를 거쳐 간접적으로 임의의 호스트에 접근하거나 존재 여부를 파악가능

-- 포트 스캐닝에 쓰일 수 있음

-- 대응 방법

--- FTP의 설계상의 문제이므로, 원래 규약을 어느정도 제한하는 방법

--- 공격에 사용되는 FTP 서버는 주로 Anonymous FTP 서버이기에, 꼭 필요한 경우가 아니면 Anonymous FTP는 사용하지 X

--- FTP 서버에 접속가능한 IP주소를 필터링 / 익명 사용자는 파일 업로드 못하도록 제한


http://www.networkuptime.com/nmap/page3-20.shtml

- Anonymous FTP Attack

-- Anonymous 계정 허용하는게 위험해

-- Anonymous 계정을 위한 디렉토리 따로 만들고 / 소유자는 관리자 / 읽기 권한만 줌

-- 로그 파일 정기적으로 확인

- TFTP Attack

-- 위에서 언급했드시, Brute Force Attack이나 Dictionary Attack등으로 파일명 알아내 다운로드

-- TFTP 데몬을 Secure Mode로 작동하게 설정

-- TFTP 데몬을 필요없으면 제거해


4) FTP 보안대책

- FTP 서버 접속 시, /(Root)로 접속하는 것을 차단

- Anonymous FTP 서버의 경우, 디렉토리 소유자와 퍼미션 관리를 철저히

- 불필요한 TFTP는 제거

- FTP 자체의 취약점은 없는지 주기적으로 업데이트



(2) MAIL 보안

1) MAIL 개념

- 인터넷에 연결되어 있는 서버를 통해 메시지를 보내거나 받은 메시지 교환 방식


2) MAIL 서비스 운영

- MUA(Mail User Agent) : 사용자가 메일을 송수신하기 위해 사용하는 프로그램

- MTA(Mail Transfer Agent) : MUA로 부터 전달받은 메일을 다른 MTA로 전송하는 서버프로그램(목적지는 수신자의 MTA)

-- MTA는 STMP(TCP 25)를 이용해 다른 MTA로 메일을 전달함(STMP 서버라고도 함)

- MDA(Mail Delivery Agent) : 최종 MTA에 도착한 후, 수신된 메일을 사용자의 메일함에 저장하는 프로그램(POP과 IMAP방식)

-- 최종 MTA가 MDA의 역할을 한다고 생각하면될 듯

- MRA(Mail Retrieval Agent) : MDA가 저장한 메일을 MUA로 가져오는 프로그램(및에 사진엔 없네) / 아이디와 패스워드로 사용자 인증도함

-- POP3(Post Office Protocol 3 ; TCP 110)

--- 기본적으로 MRA가 가져간 메일은 서버에서 삭제됨

--- 추가적인 옵션을 통해, 삭제를 안시킬 수는 있음

--- 선택적으로 메일을 가져올 수가 X

-- IMAP(Internet Message Access Protocol ; TCP 143)

--- POP3와 유사한 역할을 하지만, 더 많은 기능을 제공

--- 기본적으로 MRA가 메일을 가져가도 서버에 계속 존재

--- 메일의 제목 / 본문의 일부 등의 내용만 볼 수 있음

--- 메일함이 폴더 형태로 구성되어 있어서, 모바일 장치에서도 사용하기 편함

http://en.kioskea.net/contents/116-how-email-works-mta-mda-mua

- MIME(Multipurpose Internet Mail Extensions)

-- 이메일을 위한 인터넷 표준 포맷

-- STMP가 7Bit ASCII 문자만을 지원하기에, 이 외의 형태를 가지는 데이터는 제대로 전송되지 X

-- 8Bit 이상의 코드를 가지는 문자나 파일들은, 이메일 프로그램이나 서버에서 자동으로 MIME형식으로 변환해 전달


3) MAIL 서비스 공격유형

- Active Contents Attack(기출 빈도 높대!)

-- 메일 열람시, CSS(Client Side Script)가 실행되 컴퓨터 정보를 유출하거나 악성프로그램을 실행시키는 공격

-- 대응 : 스크립팅 기능을 제거 / 스크립트 태그를 다른 이름으로 바꾸어 저장

- Malware Attack

-- 이메일 첨부파일을 실행하도록 유도해서 악성 프로그램이 실행되도록 하는 공격

-- 자극적이거나 업무와 관련된 파일인척 문서파일을 열람하게 만듬

-- 대응 : 걍 보지ㅁ마

- 딴거도 많은데 딱히... 특별한 공격은 아니라 생략


4) SPAM 대책 / 5) 악성 MAIL 및 웜 대책

- ※ SPAM의 유형

-- Incoming SPAM : 자신의 메일 서버를 이용해 전송

-- Relay SPAM : 중계 메일 서버를 이용해 전송

- 메일 서버 자체의 보안 및 보호

-- 하나의 서버에 메일 서버, 웹 서버 등을 같이 운영을 많이 하는데, 규모가 커지면 메일 서버를 따로 두는게 바람직함

-- 메일 서버를 따로두고, 리눅스나 윈도우즈의 취약점 제거에 힘쓰는게 좋음

- access DB의 활용

-- 위에 SPAM의 유형에서 Relay SPAM이라는게 있는데, 메일 서버를 Relay 서버(중계 서버)로 사용할 것이냐에 대한 정책임

-- /etc/mail/access 파일에 기술하면됨

-- 특정 호스트나 도메인에 대한 접근제어를 해서, 무조건 적인 허용은 피하는게 좋음

- SPAM Assassin

-- 메일의 헤더와 내용을 실시간으로 분석해 스팸메일여부를 판단

-- 판단 기준은 RBL(차단 리스트)를 참고해 몇 가지 룰에 매칭될 때마다 점수를 줘서, 기준 점수이상이면 스팸메일이됨

- Inflex

-- 메일 서버에, 로컬이나 외부로 나가는 이메일을 검사하여 Inbound, Outbound 정책을 세워 필터링 해주는 도구

-- 2004년 이후 업데이트가 안되고 있음


6) Mail 보안 기술

- 전자메일에서 필요로 하는 보안 기술

-- 기밀성 / 메시지 인증 / 사용자 인증 / 송수신 부인방지 / 메시지 재전송 방지

- PGP(Pretty Good Privacy)

-- MIME 포멧에 암호화와 전자서명을 추가

-- 전자메일에 기밀성 / 메시지 무결성 / 사용자 인증/ 송신 부인방지를제공(수신 부인방지는 X !!!!!!!!!!!!!!!!!!!!)

-- 메시지의 암호화 : IDEA / RSA / 등

--- 메시지를 IDEA(대칭키 암호화)로 암호화

--- IDEA의 키를 수신자의 공개키로 암호화

--- 암호화된 메시지와 암호화한 IDEA키를 함께 보냄

-- 메시지 인증과 사용자 인증(디지털 인증) : RSA / MD5

--- 메시지의 해시값을 송신자의 공개키로 암호화해서 

-- 압축 : 전자서명 후, 메시지를 압축함(옵션적인 요소라 필수는 X)

-- 키관리 : RSA

-- 볼품 없게 정리했지만 알짜배기 : http://math88.com.ne.kr/crypto/text/chap10/10-4.htm

http://en.wikipedia.org/wiki/Pretty_Good_Privacy

- PEM(Privacy Enhanced Mail)

-- IETF에 의해 만들어진 인터넷 표준안으로 PGP보다 보안 능력이 뛰어난 편

-- 전송하기 전 자동으로 암호화하여 전동 도중 스니핑당해도 내용은 확인 불가능한 방식(PGP도 그러한데???)

-- 중앙집중식 키 인증 방식으로 널리 사용되기에 어려움

- S/MIME(Secure/MIME)

-- Application Layer에서 보안을 제공하는 대표적인 프로토콜

-- MIME 객체에 암호화와 전자서명을 기능을 추가함

-- PKI 인증서를 사용(인증기관에서 공개키를 보증하는 인증서 발급받아야한다는 의미)

-- S/MIME v2, S/MIME v3의 비교는 생략

- PGP, PEM, PGP/MIME, S/MIME의 비교도 생략



(3) Web 보안

1) WEB 개념

- HTTP 프로토콜을 이용하는 정보 공유 시스템?

- 걍 생략


2) WEB 서비스 운영

- Linux Apache Web Server

-- 설치 방식

--- DSO(Dynamic Share Object) : 동적 모듈 적재 방식으로 Apache 설치 이후에 필요한 모듈 추가 설치

--- Static : Apache 설치할 때, 모든 모듈 설치

-- 주요 환경 설정 파일 경로 : /etc/httpd/conf/

--- 특히 /etc/httpd.conf에서 Web Server에 대한 설정 다 함

- Windows IIS Web Server


3) WEB 로그 보안

- Web Server의 로그는 대표적으로 access_log와 error_log로 나눠짐

- access_log : Web Service하면서 접속한 로그에 대한 내용

- error_log : Web Server의 요청 처리과정에서 발생하는 각종 에러에 대한 기록

-- 위험도에 따라 8가지로 분류

-- Emerg > Alert > Crit > Error > Warn > Notice > Info > Debug

-- 기본값은 Warn이며, Warn이상의 에러가 로그에 남음


4) WEB 서비스공격 유형

- OWASP TOP 10 2013

-- A1 Injection

-- A2 인증 및 세션 관리 취약점

-- A3 XSS

-- A4 취약한 직접 객체 참조

-- A5 보안 설정 오류

-- A6 민감한 데이터노출

-- A7 기능 수준의 접근통제 누락

-- A8 CSRF(크로스 사이트 요청 변조)

-- A9 알려진 취약점 있는 컴포넌트 사용

-- A10 검증되지 않은 리다이렉트 및 포워드

- Directory Listing

-- 웹 서버 설정만 해주면 대응이되(Apache는 httpd.conf / IIS는 걍 설정)

- SQL Inejction

-- 공격에 사용될수 있는 문자나 패턴을, 웹 방화벽이나 Secure Coding을 통해 필터링

-- 자세한 오류 메시지를 보내주지 않음으로 DB정보를 흘리지 않기

- XSS(Cross Site Scripting)

-- 공격자가 작성한 악성 CSS(Client Side Script)를 일반사용자가 읽음으로써 실행되게 하는 공격

-- 서버를 공격하는게 아니라, 서버를 경유해 클라이언트를 공격하는 것

-- 사용자로부터 입력된 데이터를 철저히 검증함( '<', '>' 이런걸 바꿔) 으로써 검증

- CSRF(Cross Site Request Forgery ; 크로스 사이트 요청 변조)

-- XSS와 공격과정은 동일하지만, 공격 타겟이 서버인게 다름

-- 웹 사이트에서 제공하는 모든 기능을 대상으로, 신뢰된 사용자의 권한으로 요청하도록 하는 공격

-- XSS 취약점을 없도록해야함 / 중요한 기능은 재인증을 요구하는게 좋음


5) WEB 보안 개발

- Secure Coding : 개발 단계에서 보안을 고려하는 것 / [정보시스템 구축/운영 지침]으로 법제화 되어있음


6) WEB 방화벽

- WebKnight : Windows IIS Web Server용 Web 방화벽

- mod_security : Apache 보안 모듈로써, 침입탐지 및 차단 기능을 가짐



(4) DNS 보안

1) DNS 개념

- DNS(Domain Name Service)

- 계층구조를 가지는 분산 데이터베이스

-- 각 영역을 구분해 주는 도메인 이름을 관리하는 DNS Server들이 모여서 하나가 됨

- FQDN(Fully Qualified Domain Name) : DNS에서 사용되는 이름 표기 법

-- FQDN : www.nvaer.com


2) DNS 서비스 운영

- DNS 요청

-- Recursive Query : 로컬 DNS 서버에 이름 분석 결과만 달라고 요청

-- Iterative Quer

--- Query에서 요구하는 IP주소가 있으면, 질의한 호스트에게 결과를 반환

--- 없으면, 해당 도메인을 관리하는 DNS Server에게 같은 Query를 보냄

- DNS Zone

-- Zone은 DNS Server가 관리하는 Domain에 대한 정보가 저장되어 있는 DNS Database

-- 정방향 조회 영역 : FQDN으로 IP주소 알아올 때

-- 역방향 조회 영역 : IP주소로 FQDN알아올 때

- Zone의 종류

-- 주 영역 : 해당 DNS가 직접 관리하며 모든 권한을 가지고 있는 영역

-- 보조 영역 : 다른 DNS Server의 주 영역을 읽기 전용 데이터로 복사 해온것

--- 복사해 오는 행위를 Zone Transfer라고 함

-- 스텁 영역 : 다른 DNS Server의 정보가 있는 영역(해당 영역에 대한 권한은 없음)

- Resource Record Type(RR) : 각 Zone은 Resource Record Type으로 정의된 데이터를 가짐

-- SOA(Start Of Authority) : 주 DNS Server 와 Zone에 대한 정보

-- A(Host Address) : IPv4 주소

-- AAAA : IPv6 주소

-- CNAME : 별칭으로써 IP 하나에 여러 개의 별칭을 부여하기 위해 사용

-- MX(Mail eXchanger) : 메일 시스템에 대한 정보

-- PTR(Pointer) : 역방향 조회 영역에서 사용됨(A 레코드의 반대)

- DNS Server Caching

-- 다른 DNS Server로 부터 알아 온 정보는, 버리지 않고 DNS Server Cache에 임시로 저장

-- SOA Record의 TTL에서 지정한 기간 만큼


3) DNS 보안 취약성

- DNS Spoofing

-- 공격자가 호스트의 Query를 스니핑하고, DNS Server보다 먼저 조작된 IP주소가 담긴 응답을 보냄

-- DNS는 Query에 대한 인증을 수행하지 않기에, 피해자는 조작된 IP주소로 접속하게 됨(UDP를 사용함)

- DNS Cache Poisoning

-- DNS Server에 조작된 응답을 전송하는 것으로, 조작된 정보를 DNS Server가 Cache에 저장하게 됨

-- DNS Query시 부여되는 Transaction ID와 출발지/목적지 포트가 예상하기 쉬운 값을 사용하게 되면 공격이 가능

-- 강력한 난수 생성기 써도, 공격시간을 지연시킬 뿐


4) DNSSEC 기술

- DNSSEC(DNS Security Extentions) : 기존의 DNS를 대체하는게 아니라, DNS에 공개키 암호화 방식의 전자서명을 추가 부여하는 역할

- DNS 프로토콜 자체가 데이터의 위조 변조에 취약함

- DNSSEC으로 인해, DNS Data 원본을 가지고 있는 DNS Server는, 각 DNS Data에 대한 서명데이터가 추가됨

-- IPv4인 경우, A 레코드에 대한 전자서명으로 RRSIG 레코드가 생성되 함꼐 설정

- DNSSEC으로 인해, DNS Query의 응답으로 A 레코드와 함께 RRSIG 레코드도 함께 응답됨

- ※ 피싱(Phishing), 파밍(Pharming), 스미싱(Smishing)

-- 피싱(Phishing) : 실제 도메인과 비슷한 가짜 도메인 명을 사용해 공격

-- 파밍(Pharming) : DNS Server나 사용자 컴퓨터의 DNS Cache를 변조해서 공격

--- DNSSEC으로 예방가능한건 파밍

-- 스미싱(Smishing) : 문자메시지를 이용하는 공격



(5) DB 보안

※ DB보안은 크게 DB 데이터 보안과 DB 관리자 권한 보안으로 나뉨

※ 세세하게 외울게 아니라 이런게 있다고만 알고있어도 될듯(워낙 DB 보안이란게 DBMS에 따라서도 다르고 넓어서 다루기 힘들듯)

1) DB 데이터보안 / 2) DB 관리자 권한 보안

- DB 보안 유형

-- 물리적 보호 : 말 그대로 물리적인 위험으로부터 DB를 보호하는 것

-- 권한 보호 : 권한을 가진 사용자만이 특정 접근 모드로 DB에 접근할 수 있도록

-- 운영 보호 : DB 무결성에 대한 사용자 실수의 영향 최소화하거나 제거

- DB 보안 요구 사항

-- 부적절한 접근 방지 : 인가된 사용자에게만 접근이 허락 / 모든 접근 요청은 DBMS가 검사

-- 추론 방지 : 기밀이 아닌 데이터로부터 기밀 정보를 얻어내는 가능성을 막는 것

-- 데이터 무결성 : 의도치 않은 데이터 변경이나 삭제, 시스템 오류, 고장으로 부터 DB를 보호하는 것

-- 감사 기능 : DB에 대한 모든 접근에 대해 감사 기록으 생성되어야 함

-- 사용자 인증 : 별도의 엄격한 사용자 인증 방식이 필요

-- 다단계 보호 : 데이터를 등급으로 분류함을 통해 기밀성과 무결성을 보장

- DB 관리자 보안

-- DBA들은 보다 더 안전한 인증 과정을 받는게 안전

--- 운영 시스템에 의한 인증 / 네트워크 인증 서비스(커버로스 등)에 의한 인증


3) DBMS 운영 보안

- DBMS 보안 기능

-- 접근 제어(Access Control) : 로그인 과정을 통제하기 위해 ID/PW를 관리함

-- 보안 및 권한관리 : 특정 사용자와 그룹이 지정된 DB 영역만 접근하게 통제

- DB 보안 통제 : 접근제어, 추론통제, 흐름통제를 통해 인가된 사용자에게 암호화된 DB를 가용하게 하여 제공하는 것

-- 접근제어 : 인가된 사용자에게만 허가된 범위 내에서 접근을 허용하는 것

--- 접근 제어 정책과 규칙 집합 : 접근 제어를 어떻게 할껀지 정의

--- 접근 제어 메카니즘 : 정의된 내용으로, 접근 요청에 대해서 수락할껀지 거부할 껀지 판단

-- 추론통제 : 일반적인 데이터를 이용해 비밀정보나 민감한 정보를 획득하는 걸 제어

--- 예를 들어, 레코드 삽입 시 동일한 키를 가진 레코드가 있으면 에러가 나는걸 통해서 키의 값을 추론가능

--- 데이터의 암호화 등을 통해 해결해야 함(컬럼단위로 암호화)

-- 흐름통제 : 접근 가능한 객체들 간의 정보의 흐름을 조정

--- 예를 들어 보안등급이 높은 객체에서 낮은 객체로의 정보흐름을 제어

- DBMS마다 제공하는 보안기능이 다 다르기에 나머진 생략


4) DB 보안 개발

- Secure Coding이 의무화 되면서 개발 초기부터 보안을 고려한 개발을 해야 함

- DB 어플리케이의 개발(Web을 통한 SQL Injection 공격 방지에 대해서)

-- 원시 ODBC 에러를 띄우지 않음(물론 개발 과정에서는 쓰는게 편하겠지?)

-- DB 어플리케이션에 최소한의 권한만 줌

-- DB 내장 프로시저를 사용

-- 테이블 이름 / 칼럼 이름 / SQL 구조 등이 외부 HTML에 포함되어 나타나서는 X




2. 전자상거래 보안(5~6문제/20문제)

(1) 전자상거래 보안

1) 지불게이트웨이

- Payment Gateway(지불게이트웨이/지불중계기관)

-- 가맹점 및 다양한 금융시스템의 거래 사이에서, 중재자 역할

-- SET에서는 판매자가 요청한 고객의 카드정보로, 금융기관에 승인 및 결재를 요청하는 자로 쓰임


2) SET 프로토콜

- SET(Secure Electronic Transaction) Protocol

-- VISA와 Master Card에서 공동 개발한 신용카드 기반의 전자지불 프로토콜

-- 지불시스템에 대한 기술 표준

- SET Protocol의 구성 요소

-- 고객(Customer/Card Holder)

-- 상점(Merchant)

-- 지불게이트웨이(Payment Gateway)

-- 발급사(Issuer) : 고객의 계좌를 개설하고 카드를 발행하는 금융기관

-- 매입사(Acquirer) : 상점의 계좌가 개설된 금융기관

-- 인증기관(CA) : 전자적인 인증서를 발급하는 기관

- SET의 동작과정

-- 1) 상점과 지불게이트웨이, 금융기관은 인증기관으로부터 인증서를 발급받음

-- 2) 고객이 상점의 웹 사이트에서 물건을 고르고 결재를 위해 전자지갑 S/W를 다운받고 실행함

-- 3) 전자지갑에 자신의 신용카드를 등록하고 인증기관으로부터 인증서를 발급받고 결재를 함

-- 4) 전자지갑을 통해 결재정보가 상점으로 감

-- 5) 상점에서 지불게이트웨이로 결재정보를 넘겨줌(상점은 주문정보만 확인함 ; 이중서명)

-- 6) 지불게이트웨이는 결재정보를 금융기관에 전달

-- 7) 금융기관이 상점에 대금 결제를 함

-- 8) 상점은 고객에게 상품을 줌

-- 9) 금융기관이 고객에게 나중에 돈을 요구

-- ※ 아래 사진이랑 쫌 다르지만 전반적인 내용은 동일

http://wiki.cas.mcmaster.ca/index.php/File:Wikiimage1.jpeg

- SET에서의 암호화

-- 전자봉투(Digital Envelope) 

--- 전자서명에 대칭키 암호화를 넣어 기밀성 까지 얻는 방식

---- 전자서명 : 문서의 해시값을 송신자의 사설키로 암호화해서 문서, 공개키와 함께 보냄

----- 문서의 해시값을 암호화한걸 전자서명이라고도 하는듯

---- 전자서명을 대칭키로 암호화하고, 대칭키를 수신자의 공개키로 암호화해서 같이 보냄

----- 대칭키를 수신자의 공개키로 암호화한걸 전자봉투라고도 하는듯

--- 대칭키 암호화(DES) + 공개키 암호화(RSA) + 전자서명(RSA) + 해쉬 함수(SHA-1)

-- 이중 서명(Dual Signature)

--- ( (주문정보의 해쉬값) + (지불정보의 해쉬값) )의 해쉬값을 고객의 개인키로 암호화한 것

--- 어디서는 주문정보를 상점의 공개키로, 지불정보는 금융기관의 공개키로 암호화 한다고 하는데, 이중 서명에 대한 설명은 아닌듯??


- 특징

-- 현재 쓰이고 있진 않지만, 신용카드 지불 시스템의 기반이 됨

-- 너무 복잡하고 RSA, 알고리즘이 전체적인 속도를 저하 시킴


-- 고객이 전자지갑 S/W를 설치해야 함

-- 상점 또한 별도의 S/W를 설치해야 함


-- 고객(카드소지자)와 상인(상점)에 대한 인증

-- 지불 정보에 대한 비밀성 / 무결성 / 부인방지 기능


3) SSL 프로토콜

- SSL(Secure Socket Layer ; TCP 443)

-- 인터넷을 통한 메시지 전송을 안전하게 하기 위해, Netscape에서 개발한 암호화 통신 프로토콜

-- SSL 3.0에 대한 수정 보완을 거쳐 TLS(Transparent Layer Security)라는 이름으로 표준화

-- 암호화 통신을 위한 세션키 생성을 위해 인증서 기반의 공개키 알고리즘을 이용

-- OSI 7 Layer 기준으로, TCP 위에 위치(4 ~ 7 Layer)(실제로 지원 가능한 프로토콜은 별로 없음 ; HTTP, IMAP, NNTP 등)

--- 주로 HTTP와 같이 쓰이며, 이 경우에 SSL-enabled HTTP를 표시하기 위해 HTTPS라고 표기함

- SSL의 기능 : 사이트 인증(Site Authentication) / 데이터 기밀성 / 메시지 무결성 (※ 부인방지는 없어)

- SSL Handshake Protocol : 서버와 클라이언트 사이의 인증 / 암호화 알고리즘, 암호키, 무결성 알고리즘 등의 보안 협상

-- SSL Protocol에서 가장 복잡한 부분

http://blogs.msdn.com/b/kaushal/archive/2013/08/03/ssl-handshake-and-https-bindings-on-iis.aspx

- SSL 버전별 비교

-- SSL 2.0

--- MITM 공격에 매우 취약 / 취약한 MAC / 수출용은 40bit Key

--- 연결 초기에만 Handshake 가능

-- SSL 3.0

--- 해시값으로 메시지를 유지하며 MITM 방어 가능 / 수정한 MAC 사용 / 수출용은 128bit Key

--- 연결 이후에도 Handshake 가능

-- TLS 1.0은 SSL 3.1과 같음


4) OTP(One Time Password)

- 무작위로 생성되는 난수의 일회용 패스워드를 이용하는 사용자 인증방식

- 원격 사용자 인증시 패스워드의 재사용 공격을 사전에 방어하기 위한 방법

- 일반 적으로 H/W 장치로 많이 사용

- OTP 생성 원리

-- 1) 연계 정보 생성 : 시간, 이벤트 정보 등의 난수를 이용해 연계 정보를 생성

--- 정보를 수집할 때마다, 다른 정보를 수집할 수 있어야 함

--- 특정한 조건에서 생성되는 연계 정보는 동일해야 함(인증서버와 동일한 값 얻기 위해서)

-- 2) 생성 알고리즘 : 연계 정보를 생성알고리즘을 통해 암호문을 생성함

--- 동일한 연계 정보로 부터 동일한 암호문 생성해야 함

-- 3) 추출 알고리즘 : 암호문에서 일회용 패스워드를 추출함

--- 동일한 암호문으로부터 동일한 일회용 패스워드 추출해야 함

--- 정적 추출 알고리즘 / 동적 추출 알고리즘

- OTP 구현 방식에 따른 분류

-- 동기화 방식

--- OTP 토큰과 인증 서버 간의 미리 공유된 비밀정보와 동기화 정보에 의해 OTP 생성

--- 반드시 OTP 토큰과 인증 서버 간의 동기화가 이루어져 있어야 됨

--- 비동기화 방식에 비해 호환성이 전반적으로 높음(호환성이란 기존의 ID/PW 어플리케이션과의 호환이 잘되느냐에 대한 것)

--- 시간 동기화 방식

---- 시간을 이용해 OTP를 생성 / 특정 시간 간격으로 OTP를 생성함

--- 사건 동기화 방식(계수기 방식)

--- 시간 정보 대신 카운터를 이용해 OTP를 생성 / OTP 토큰과 인증 서버간의 카운터 값이 동기화 되어야 함

--- OTP 값을 생성한 후, 다음번 OTP 생성 요청까지 재생성이 없기에 사용자에게는 편리함

---- 실수로, 여러번 OTP값을 생성시키고나면 다시 동기화를 시켜야한다는 단점

--- 조합 방식

---- 시간 동기화 방식과 사건 동기화 방식을 조합하여 구성항 방식

---- 시간 동기화 중심의 조합 방식

----- 특정 시간간격으로 OTP가 생성되며, 같은 시간 간격내에 재시도시에 카운트 값을 증가시켜 OTP를 변경되도록 하는 방식

----- 시간 동기화 방식과는 다르게 특정 시간 간격 이내에도 계속 다른 OTP를 생성 가능

---- 사건 동기화 중심의 조합 방식

----- 특정 시간에 발생한 카운터 값을 기준으로 OTP가 생성

----- 사용자가 생성 요청을 할 때마다 매번 OTP가 변경

-- 비동기화 방식

--- 질의 응답 방식을 사용 / 인증 서버가 제시한 질의 값에 대한 응답값을 전달하는 방식

--- 구조가  비교적 간단하고, OTP 토큰과 인증 서버 간의 동기화가 필요 없음

--- 사용자가 질의에 대한 응답값을 직접 입력해야 하므로 번거로움

--- 매번 다른 질의값을 생성하는건 인증 서버에게 부담이 될 수 있음



(2) 전자상거래 프로토콜

1) 전자지불 방식별 특징

- 전자 지불 시스템

-- 전자지갑, 신용카드, 전자화폐, 인터넷 뱅킹 등을 이용해 전자상거래에서 발생하는구매 대금을 안전하고 효과적으로 지불, 결재하는 시스템

- 전자화폐(Electronic Cash) 시스템

-- 독립적인 신용구조를 가지고 현금과 유사한 개념의 전자적 지불 수단(실제 화폐를 대치할 수 있음)

-- IC카드형-Mondex, E-Cash, Milicent, Net Cash, Proton 등

-- 사용자의 프라이버시를 보호 / 기밀정보의 노출 위험성의 제거

-- 몇 가지 이론적인 문제좀도 남아있고, 전자화폐 시스템을 지원할 수 있는 H/W기술이 부족

- 지불브로커(Payment Broker) 시스템

-- 독립적인 신용구조 없이 신용카드나 은행계좌를 이용한 전자적 지불 수단

-- 미리 신용카드나 은행계좌 정보등을 지불브로커에 등록하고, 거래가 성립될 때 지불브로커를 통해 대신 지불을 처리

-- SET, Cyber Cash, First Virtual 등

-- 현실적인 전자지불 시스템이지만, 사용자의 거래 추적 가능성으로 프라버시 침해의 우려와 기밀정보의 노출 위험성이 있음


2) 전자지불/화폐 프로토콜

- 전자 화폐 : 은행의 전자서명을 수행한 화폐가치를 가지는 디지털 데이터

-- 독립적인 신용 구조를 가지며,거래 시 제3기관으로 부터 거래 승인이 없음

- 전자 화폐의 분류

-- 지불 시점

--- 후불형 : 거래가 이루어지고 난 후, 그 시점에 은행 계좌로 부터 인출되는 방식

--- 선불형 : 거래가 이루어지기 전에, 미리 은행 계좌에서 인출해 거래가 일어나면 지불

-- 거래 방식

--- IC카드형 : IC카드에 화폐가치를 저장함 / Mondex, Visa Cash, PC pay

---- 기술개발과 이용이 활발한 유럽에서 활성화

--- 네트워크형 : S/W전자지갑을 다운로드 받아서 사용하는 방법(네트워크를 이용해 화폐를 주고 받음) / ECash, NetCash, PayWord

---- 컴퓨터의 높은 보급률과 통신망이 잘 발달한 미국에서 활성화

-- 유통 형태

--- 폐쇄형 : 이용자가 상점에서 이용 후, 즉시 발행기관으로 돌아가는 형태 / 대부분의 전자화폐

--- 개방형 : 화폐가치가 이용자로 부터 다른 이용자로 유통되는 형태 / 대표적으로 Mondex

- 전자 화폐의 종류

-- Mondex : IC카드형 전자화폐 / Off-Line 시스템 / 현금 지불의 장점과 카드 지불의 편리함을 결합

--- 5개국 화폐를 동시에 저장하며 거래 내역의 기록이 가능

--- 은행을 거치지 않고 카드와 개인 간의 화폐 교환이 가능

-- Visa Cash : Visa에서 개발한 선불카드 개념의 화폐

-- PC pay : 스마트 카트와 카드리더기로 구성된 전자 화폐

-- Millicent : 브로커, 상점, 고객으로 구성

--- 브로커는 상점과 고객의 계정의 관리하며 실제로 돈을 취급함

--- 상점은 고객으로부터 스크립을 받고 정보나 서비스를 제공하고, 거스름 스크립을 발행

--- 고객은 스크립을 구매해서, 스크립으로 상점에서 거래를 함

--- ※ 스크립이 화폐 가치를 말하는 것 같음

-- Bitcoin : 통화를 발행하고 관리하는 중앙 기관이 없는 대신, P2P 기반 분산 데이터베이스에 의해 거래가 이루어짐

--- 공개키 암호 방식을 사용함

--- 익명성과 공개성을 지니며, 화폐가 컴퓨터에 파일 형태로 보관된다는 취약점을 가짐


3) 전자입찰 프로토콜

- 전자입찰 : 말 그대로 입찰을 네트워크를 통해 하겠다라는 개념

-- 전자입찰 시스템 / 입찰공고자 / 입찰자로 구성

- 전자입찰의 문제점 : 네트워크를 이용하기에 정보의 유출과 누락 변조 등으로 인해 생김

-- 네트워크상에 메시지 유출 : 입찰자와 입찰공고자의 정보가 유출될 수 있음 / 암호화하거나 도청에 대응

-- 입찰자와 서버 사이의 공모

-- 입찰자와 입찰공고자간의 공모

-- 입찰자간의 공모

-- 서버의 독단 : 서버가 특정 입찰자를 위해 나머지 입찰자의 정보를 누락하거나 변조할 가능성 / 서버의 모든 정보가 투명해야됨

- 전자입찰 시스템을 구축하는데 있어서 해결해야할 것(위의 문제점을 해결하는 데 초첨 / 하나라도 해결못하면 안전성 보장X)

-- 독립성 : 입찰자와 입찰공고자로 부터 독립해야 함(공모 등을 막기 위해 ; 삼권 분립??ㅋ)

-- 비밀성 : 네트워크 상의 각 구성 요소들의 정보는 누출되면 X

-- 무결성 : 누락 및 변조여부를 막음

-- 공평성 : 입찰이 수행될 때, 모든 정보가 공개되어야 함

-- 안정성 : 각 구성 요소들의 공모와 서버의 독단 등이 일어나서는 X

- 전자입찰 프로토콜 방식(일단 생략 정보가 검색도 안되고ㅋ)

-- LKR 방식 : 안전한 전송로를 구축함으로써 도청과 변조를 방지하고, 입찰자의 전자서명으로 무결성과 부인방지

-- PL 방식 : ??


4) 전자투표 프로토콜

- 선거인이 투표소에 직접안가고 온라인 시스템으로 투표하는 방식

- 요구사항

-- 정확성(Accuracy)

-- 비밀성(Privacy) : 비밀투표

-- 위조 불가능성(Unforgeability)

-- 단일성(Singularity) : 단지 한 번의 투표권만 행사

-- 합법성(Eligibility) : 합법적인 절차를 통해 투표권을 얻은 사람만 투표에 참여 가능

-- 공정성(Fairness) : 투표 진행과정에서, 다른 사람의 투표권 행사에 영향 끼치면 X / 중간 투표결과 같은거 비공개
-- 확인성(Verifiability) : 투표자가 올바르게 투표했는지 확인가능해야함

-- 투표권 매매방지(Untradability) : 투표권을 타인에게 매매할 수 없음

-- 완전성(Completeness) : 투표자들이나 집계자의 부정으로, 투표 시스템의 모든 투표 진행이 정지되거나 불완전한 결과 초래하면 X

- 전자투표 방식의 분류

-- PSEV(Poll SIte E-Voting)

--- 지정된 투표소에서 전자 투표를 하는 방식 / 기기를 선거인단이 관리하기에 안정성이 높고 국민투표 활용 가능성이 큼

-- 키오스크(Kiosk) 방식

--- 군중이 밀집한 지역에 키오스크 투표기기가 설치해서 유권자가 투표를 할 수 있는 무인 투표시스템

--- 편리성과 효율성만 만족시키지, 공공망을 통해 집계되기에 악의적인 공격의 가능성이 큼

-- REV(Remote E-Voting)

--- 인터넷 투표를 하는 방식으로 다양한 기술 수단을 통해 원겨으로 자유롭게 투표하는 방식

--- 가장 이상적이지만, 비밀투표를 충족하기 어렵고, 투표권의 매매 위험이 존재함

- 전자투표의 암호화 기법

-- 공개키/개인키를 이용한 암호화

-- 전자서명

-- 은닉서명 : 투표자와 투표결과 쌍을 이을 수 없도록 함


(3) 무선 플랫폼에서의 전자상거래 보안

1) 무선플랫폼에서의 전자상거래 보안

- WPKI(Wireless Public Key Infrastructure)

-- WAP(Wireless Application Protocol)에서 서버와 클라이언트 간의 인증을 위해 사용되는 무선 환경에서의 공개키 기반 구조

-- 인증기관 / 등록기관 / Client 시스템 / PKI 디렉토리

- 신용카드기반 전자지불 시스템

-- 보안프로토콜 : End-To-End  간의 발생하는 트랜젝션의 안정성

-- S-HTTP/ SSL / TSL

-- 지불프로토콜 : 전자상거래의 모든 구성원들 간의 트랜젝션 정의를 위한 별도의 프로토콜

-- SET / InstaBuy(cyber Cash)

- 전자화폐기반 전자지불 시스템

-- 네트워크형 프로토콜 : 인터넷 같은 네트워크 환경에서 사용자의 PC나 서버의 계좌 등에 전자화폐를 저장하고 사용

--- Milicent(DEC) / NetBill(CMU) / Payword(MIT) 등

-- 가치저장형 프로토콜 : 스카트카드 내에 전자화폐를 저장해서 사용(실생활의 화폐 대용이 목적)

--- Mondex(master Card) / Visa Cash(Visa International) / Proton(Banksys) / K-cash(국내)

- 전자수표 기반 전자지불 시스템

-- 실제 수표와 유사한 형태로, 전자서명 같은 암호화를 통해 배서(어음이나 증권의 양도) 등의 효과를 제공

-- Echeck(FSTC) / NetCheque(USC) / Paynow(CyberCash)


(4) 전자상거래 응용보안

1) e-biz를 위한 ebXML 보안

- ebXML(e-business using XML) : 비즈니스 데이터를 안전하게 교환하는데 XML을 사용한 개방형 표준

- 구성요소

-- 비즈니스 프로세스

--- 다양한 비즈니스 거래절차에 대한 내용을 표준화된 방법으로 모델링해서, 시스템이 자동으로 처리할 수있도록 표현하는 방법을 정의

-- 핵심 컴포넌트

--- 비즈니스에서 교환되는 전자문서를 이루는 항목을 미리 잘 정의해 재사용가능하도록 표준화 작업

-- 등록저장소

--- 거래 상대자들에 의해 제출된 정보를 저장하는 안전한 저장소(제일 중요)

-- 거래 당사자

--- 각종 정보 및 협업을 위한 프로파일을 통일된 규칙을 통해

--- CPP(협업 규약프로파일;거래당사자정보), CPA(협업규악약정서; 거래 당사자간의 협약)를 표현

-- 전송, 교환 및 패키징

--- ebXML 메시지 서비스를 제공하여, 메시지를 상호 운영성과 보안을 유지하면서 어떻게 전송할 것인가에 대한 표준

- ebXML의 개요

http://www.ibm.com/developerworks/library/x-ebxml/

- ebXML 보안 : XML에서 사용되는 보안의 대부분이 ebXML에서 사용됨

-- XML 전자서명 / XML 암호화 / XKMS / SAML / XACML 등




3. 기타 어플리케이션 보안(잘안나올껄?)

(1) 응용프로그램 보안개발방법

1) 취약점 및 버그방지 개발 방법

- 소프트웨어 개발생명주기(SDLC ; Software Development Life Cycle)

-- 소프트웨어를 개발하기 위한 계획부터 구현 및 폐기 까지 전과정을 단계적으로 분류하여 정의한 것

-- 한정된 예산과 자원으로 최선의 개발 환경과 방법을 찾아 높은 품질의 소프트웨어를 만들기 위한 개발 프로세스

- SDLC 모형의 종류

-- 폭포수 모델 : 각 단계 별로 개발 완료 한 후, 다음 단계를 실행 / 개발의 유연성이 떨어짐(개발과정 중의 새로운 요구 반영힘듬)

-- 원형 모델 : 사용자의 요구분석을 위해, 소프트웨어 모델을 사전에 만듬

-- 나선형 모델 : 폭포수 모델의 장점 + 원형 모델의 장점 + 위험 분석

-- 점증적 모델 : 개발되어 운영 중인 시스템과 개발이 진행 중인 시스템이 공존

- 보안이 강화된 SDLC(Secure SDLC)

-- 반복적인 위험 평가 / 영향분석 및 보안 모델링 / 구성요소의 보안 평가 / Secure Coding

- 취약점 및 버그 방지 개발

-- SUID/EUID 보안 프로그래밍

-- 새로운 프로세스 생성 보안

-- BufferOverflow 방지


(2) 보안기술

1) SSO(Single Sign On)

- 통합인증(SSO) : 사용자가 한 번의 로그인 인증으로, 다양한 서비스에 재 인증 절차없이 접근할 수 있도록 하는 통합 솔루션

-- 로그인 서버가 사용자 정보 저장소와 연동해 로그인 검증을 하고, 유효한 경우 토큰을 발급함

-- 사용자는 토큰을 기반으로한 인증 요청으로 다른 서비스를 사용가능함

--- 토큰을 받은 다른 서버들은 정책서버로 토큰 검증이라는 과정을 거치긴함

- SSO 보안 위협 : 사칭 위협 / 인증정보노출 / 인증정보 재사용 / 키관리 위협 / 세션관리 위협

- 장점 : 운영비용감소(한곳에 사용자정보 관리) / 보안성 강화 / 사용자 편의성 강화 / 중앙집중관리로 인해 효율적 관리

- 단점 : SSO 서버가 단일 실패지점 / SSO 서버가 침입당하면 모든 서버에 보안문제

- 커버로스(Kerberos) : SSO 인증방식

-- 대칭키 암호화 기법에 바탕을둔 티켓기반 인증 프로토콜

-- 유닉스와 윈도우 서버에서 기본으로 사용하는 인증기법

-- 인증과정

--- 1) 클라이언트는 KDC(Key Distribution Center)에 접속해 함

--- 2) KDC의 AS(Authentication Server)로 부터 인증을 받고 TGT(Ticket Granting Ticket)을 받음

--- 3) 클라이언트는 TGT를 이용해 KDC의 TGS(Ticket Granting Server)로 부터 세션키와, 세션키로 암호화된 서비스 티켓 받음

--- 4) 클라이언트는 접속을 원하는 서버에, 서비스 티켓을 이용해 인증 받음

--- 5) 티켓의 타임스탬프는 이용시간을 제한하는 용도로 사용하며 이는 제3자가 티켓을 복사해 사용하는 것을 방지함

http://www.zeroshell.org/kerberos/Kerberos-operation/

-- 장점 : 데이터의 기밀성(대칭키)과 무결성 / 재사용예방 / 이기종 간의 자유로운 서비스 인증

-- 단점 : 세션키가 단말에 임시로 저장되, 공격자에 의해 탈취 당할 수 있음 / 타임스탬프가 시간동기화가 필요 / KDC가 단일 실패지점


2) HSM(Hardware Security Module)

- 보안토큰으로써 암호화와 관련된 일련의 과정들을 빠르게 수행하고 생성 및 안전안 보관이 가능한 하드웨어 장치

-- 내부적으로 암호화, 복호화, 전자서명을 위한 프로세스 및 연산장치가 내장

- HSM의 분류

-- 인터페이스에 따른 분류 : 접촉식 / 비접촉식(유선, 안테나가 필요)

-- 매체에 따른 분류 : 스마트카트(따로 리더기가 필요) / USB방식(스마트카드칩을 내장)

- 특징

-- 인증서 보관을 PC가 아닌 HSM에 저장하기에 유출의 위험이 낮음

-- 전자서명을 PC가 아닌 HSM 내부에서 생성

-- HSM 비밀번호 설정과과 초기화, 비밀번호 오류 입력 횟수를 제한

-- HSM 구동 프로그램의 무결성 및 구현 적합성을 스스로 확인


3) DRM(Digital Right Management)

- 전자매체의 불법적이거나 비인가된 사용을 제한할 수 있는 정보보호기술

- DRM 구성요소

-- 콘텐츠(Content) : 암호화된 상태로 유통되는 데이터

-- 사용자(User) : 권한과 조건에 따라 컨텐츠를 사용하는 주체

-- 권한(Permission) : 콘텐츠별로 부여된 이용권리 범위를 명시하여, 사용자가 콘텐츠를 이용하는데 따르는사용 범위를 제한

-- 조건(Condition) : 권한이 수행되기 위한 요구 조건 및 제한 요소

- 자세한 DRM 세부 기술 내용은 다루지 않을래(구성요소정도만 알아도 될듯)

 

  자바 개발에 필요한 개발도구는 엄청 유명하기도 하지만 많이 사람들이 사용하는 개발 도구입니다. 이클립스를 설치하기전 자바(Java)는 설치가 완료되어 있어야 됩니다.

 

 자바는 오라클 홈페이지에서 간단하게 설치할 수 있으며, 설치가 완료 되어있다 생각하고 포스팅을 진행하도록 하겠습니다.

 

간단한 검색으로 접속에 될 수 있게 구글 검색을 이용하도록 하겠습니다.

 

 

위의 이미지와 같이 이클립스를 검색 후 "Eclipse Downloads" 를 눌러서 접속해 줍니다.

 

 

주황버튼 아래 회색글씨 "Download Packages" 를 누룹니다.

 

Eclipse IDE for Java EE Developers 가 보이시는데요. 사용하시는 운영체제 맞게 눌러줍니다.

- 윈도우7 32비트, 윈도우XP : 32bit
- 윈도우7 64비트, 윈도우8  : 64bit

 

다들 아시겠지만 운영체제와 다르게 설치한다면 정상적으로 설치가 이루어지지 않거나 설치가 되더라도 동작을 하지않을 수 있습니다.

 

 

eclipse-jee-neon-2-win32.zip 를 눌러줍니다.

 

 

저장을 하시거나 다른이름으로 저장합니다.

 

 

파일을 다운받으면 압축이 되어있을텐데요. 압축을 풀면 위의 이미지처럼 파일과 폴더가 보입니다. 표시된 파일 eclipse 를 실행하여 설치하시고 사용하시면 됩니다.

'프로그래 언어 > JAVA' 카테고리의 다른 글

자바] 기본 클래스의 제작  (0) 2017.05.13
자바] 클래스의 기본 배경  (0) 2017.05.11
2장 Hello Basic Java - JDK 설치  (0) 2017.02.08
1장 프로그래밍이란 무엇인가?  (0) 2017.02.07

+ Recent posts