1. 보안요소 기술(10문제+-/20문제)

(1) 인증기술

1) 사용자 인증기술

- 사용자 인증 : 통신하고 있는 상대가 내가 원하는 상대인지 확인할 수 있도록 해주는 기술

-- A와 B가 통신할 때, A가 B에게 자신이 A임을 증명할 수 있는 것

-- 개별식별 : 사용자 인증에서 더 발전해서, A와 C가 통신할 때 B가 C에게 A인척 못하게 하는 것

- 사용자 인증 유형별 방법

-- What you know(지식기반 인증방식) : ID/PW, I-PIN, 사전에 등록된 질문과 답

--- 사람의 지식에 따른 내용으로 인증 / 관리가 편하고 용이 / 습관에 따라 패스워드 설정하기에 유추쉽고 보안성 낮음

-- What you have(소유기반 인증방식): OTP, HSM, 보안카드, 스마트카드, 공인인증서

--- 소지한 별도 매체의 고유정보를 직접 제시 / 매체에 대한 분실 우려

-- What you are(생체기반 인식기술) : 지문, 홍채, 음성, DNA, 서명, 망막

--- 인증자의 신체적인 특성이나 행동학적 특성을 이용해 인증

- Chalenge-Response방식(이걸 어따 넣어야될지 모르겠네 / OTP에서도 쓰임)

-- 사용자가 서버에 암호화 키 자체를 직접적으로 전송하지 않으면서 해당 비밀키나 개인키를 소유하고 있는 정당한 사용자임을 증명

-- 매번 새로운 세션의 차별성을 위해 타임스탬프 / 세션 랜던 값 / 순서번호 를 이용할 수 있음

-- 대칭키를 이용한 방법

--- 사전에 사용자와 서버간의 대칭키를 공유하는 방식

--- 사용자가 서버로 접속해 서버로 부터 난수 값을 받아서 그걸 대칭키로 암호화해서 보내는 것

-- 공개키를 이용한 방법

--- 사용자가 서버로 접속해 서버로 부타 난수 값을 받아서 그걸 개인키르 암호화해서 보내는 것

- 사용자 인증의 보안 요구사항 : 식별 / 인증 / 인가 / 책임추적성


2) 메시지출처 인증기술

- 메시지 또는 자료의 출처가 알려진 출처가 맞는지 확인하는 기술

- 메시지출처를 인증하는 기술은 크게 "메시지를 암호화 하는 방법 / 메시지 인증코드 / 해시함수" 로 나뉨

- 메시지를 암호화 하는 방법

-- Case 1) 대칭키를 이용해 암호화 → 기밀성 + 부분적인 인증(송신부인방지)

-- Case 2) 비대칭키를 이용한 암호화

--- i) 수신자의 공개키로 암호화 → 기밀성

--- ii) 송신자의 사설키로 암호화 → 인증과 서명

--- iii) 송신자의 사설키로 암호화하고 수신자의 공개키로 암호화 → 기밀성 + 인증과 서명

- 메시지 인증코드(MAC ; Message Authentication Code)

-- 메시지와 대칭키를 입력으로해 인증값으로 쓰기 위해 만들어진 코드

-- 사전에 송신자와 수신자 간의 대칭키의 공유가 필요함

-- 수신자는 수신한 메시지와 대칭키를 가지고 직접 MAC을 만들어, 수신한 MAC과 비교해 인증을 수행

- 해시함수

-- 데이터를 정해진 크기의 Message Digest로 만드는 일방향함수(One-Way Function)

-- MAC과 달리 대칭키를 사용하지 않기에 키교환이 필요 없음

-- 해시함수의 결과값 자체는 기밀성이 없어서 암호화와 섞어서 사용함


3) 디바이스 인증기술

- 유비쿼터스 시대 네트워크에 들어서면서 디바이스와 디바이스 끼리의인증을 해야되는 일이 많아짐

- 디바이스와 사람간의 인증체계, 이기종 디바이스 간의 인증체계, 인증체계와 콘텐츠 보호와의 연동의 필요성이 생김

- ID/PW기반 디바이스 인증

-- 일반적으로 사용되는 이증방식

-- SSID방식 / WEP 인증방식 / RFID와 리더기 간의 인증방식 등

- MAC주소기반 디바이스 인증

-- 접속 하는 단말기의 MAC주소값을 인증서버 또는 AP에 등록해서 인증받는 방식

-- AP에서 사용됨

- 암호 프로토콜을 이용한 디바이스 인증

-- AP를 통한 정보자산의 불법적인 접근 또는 키나 세션을 훔쳐 정보를 유출하는 시도를 차단

-- 802.1x 인증 : 유무선 네트워크에서 인증된 네트워크를 접속하는 IEEE 표준

--- 사용자 ID 인증, 동적 키 관리 및 계정 지원

--- PAP / CHAP / RADIUS / PEAP / WEP 프로토콜

-- 802.11i 인증 : RC4 기반의 WEP 기술에 대한 취약점 해결하기 위해 제정

-- WPA(Wi-Fi Protected Access) : WEP에 비해 정교한 데이터 암호화와 완전한 사용자 인증기능 제공

--- TKIP과 802.1x 인증 방식을 사용

-- EAP(Extensible Authentication Protocol) : 인증을 위해 최적화된 전송 프로토콜

--- EAP-MD5 / EAP-TLS / EAP-TTLS / EAP-PEAP / EAP-Fast / LEAP

- Challenge-Response 인증

-- OTP에서의 Challenge-Response와 유사하게, 일회성 해시값을 생성해 사용자를 인증하는 방법

-- 인증서버가 난수를 만들어 클라이언트로 전송하면, 클라이언트는 패스워드 해쉬 알고리즘을 적용해 반환 함


4) Kerberos 프로토콜

- MIT에서 개발한, 분산 환경하에서 개체 인증서비스를 제공하는 네트워크 인증시스템 / 현재 네트워크상에서 가장 많이 사용 됨

- 사용자가 서버의 인증을 받기 위해 티켓이라는 인증값을 사용

- 비대칭키 암호방식을 전혀 사용하지 않고, 대칭키 암호방식만 사용하여 신뢰된 티켓 발급서버를 이용해서 인증

- 구성요소 : 클라이언트(다수) / 인증서버(AS) / 티켓발급서버(TGS) / 서버(다수)

-- 클라이언트가 패스워드로 인증서버에게 인증을 받음

-- 인증서버는 티켓발급서버가 인증된 클라이언트로 티켓을 발급하는 것을 허락함

-- 티켓발급서버가 클라이언트로 티켓을 발급함

-- 티켓을 받은 클라이언트는, 티켓을 이용해 서버에 인증을 받고 서비스를 받음

- Realm(영역) : 하나의 Kerberos 시스템에 속해 있는 클라이언트와 서버의 범위

-- 영역 안의 클라이언트들은 영역 안의 각 서버에대한 권한이 다름 / 권한에 따라 접속할 수 있는 기간도 다름

- 신임장(Credential) : 티켓발급서버가 클라이언트에게 발급하는 것으로 티켓(Ticket)과 인증자(Authenticator)로 구성

-- 인증자 : 티켓이 유효하다는 것을 증명하기 위해 사용되는 값으로 부가정보를 포함

-- 티켓의 포함 내용 : 클라이언트 ID와 네트워크주소 / 티켓의 유효기간 / 접속하기원하는 서버의 ID / 서비스기간동안 공유하는 세션키

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

- 장점 : 통신내용을 암호화키와 암호프로세스를 이용하여 보호하기에 데이터의 기밀성과 무결성이 보장됨

- 단점

-- 모든 클라이언트와 암호화 키에 대한 정보가 KDC에 있기에, KDC 단일 오류 지점이 될수 있음

-- 비밀키와 세션키가 사용자 시스템에 저장되기에 유출과 침입에 취약

-- 패스워드 추측 공격에 취약하며, 사용자가 패스워드를 바꾸면 대칭키 또한 변경해야되는 번거로움

-- 티켓의 유효기간 때문에, 모든 클라이언트와 서버간의 시간의 동기화가 필요함

-- 가장 큰 문제점으로, 재전송 공격에 약함

- Kerberos 4

-- 암호화 시스템에 대해 의존함, DES 알고리즘 사용

-- 인증의 발송과 영역간의 인증은 불가능

- Kerberos 5

-- CBC 모드 사용(암호화 하는 방법임), 알고리즘 선택이 가능

-- 티켓의 유효시간에 시작기간과 끝 시간을 표시함

-- 인증의 발송과과 영역간의 인증이 가능



(2) 접근통제정책

1) 접근통제정책 구성요소

- 접근통제는 인증 성공 이후에, 각 시스템 자원에 대한 사용자의 요청을 허용할것인가? 말것인가?하는 문제

- 접근통제 시스템은 기능적으로 접근통제 정책 / 접근통제 매카니즘 / 접근통제 관련 보안 모델로 나뉨

-- 접근통제 정책

--- 신분 기반 정책 : 주체의 신분에 근거한 접근통제 정책

---- 임의적 접근통제(DAC)에 적용

--- 규칙 기반 정책 : 주체에 허용된 접근 수준과 객체에 부여된 허용등급 에 따른 접근통제 정책

---- 강제적 접근통제(MAC)와 동일한 개념

---- 라우터나 방화벽 등의 접근통제에 쓰임

--- 역할 기반 정책 : 객체에 대한 접근이 주체의 역할에 의해 결정되는 접근통제 정책

---- 역할기반 접근통제(RBAC)와 동일한 개념

-- 접근통제 메카니즘 : 접근요청을 접근통제 정책에 대응시켜 불법적인 접근을 방어함

--- ACL(Access Control List) : 신분 기반 정책을 지원

--- CL(Capability List) : 신분 기반 정책을 지원 / 주체에게 티켓을 부여(접근 객체와 범위가 지정됨)

--- SL(Security Lable) : 규칙 기반 정책을 지원

--- 더 많긴한데 모르겠다.. 필요하면 추가함

-- 접근통제 관련 보안 모델(다양한데 잘나오는 3가지만)

--- Bell-LaPadula(BLP)

---- 데이터의 기밀성유지를 주목적(미국방부에서만듬) / 정보의 불법적 유출을 방어하기 위한 최초의 수학적 모델

---- 단순보안속성(Simpe Security Property) : 주체는 자신의 보안등급보다 높은 등급의 객체에 접근불가 ; No Read Up

---- 성형속성(The ★-Property) : 주체는 자신의 보안등급보다 낮은 등급의 데이터를 수정할수 없음 ; No Wirte Down

--- Biba

---- 데이터의 무결성유지를 주목적으로 함(비 군사적 조직) / Bell-LaPadula 모델의 단점인 무결성을 보장할 수 있도록 보완

---- 단순무결성원리(Simple Integrity Axiom) : 주체집단에게 주어진 무결성등급보다 낮은 객체는 못 읽음 ; No Read Down

---- 성형무결성원리(The ★-Integrity Axiom) : 주체에게 주어진 무결성등급보다 높은 등급의 객체는 수정 못함 ; No Write Up

--- Clark-Wilson

---- Biba 이후에 나왔으며, Biba의 무결성 보호를 조금 다른 관점에서 접근함

---- 주체가 객체에 직접접근은 할 수 X / 오직 프로그램을 통해 간접적으로 접근


2) 임의적 접근통제(DAC ; Discretionary Access Control)

- 신분 기반 정책을 적용했다고 보면될려나??

- 어떤 사용자든 임의적으로 객체에 대한 다른 사용자들의 접근을 허용할 수 있는 기법

-- 데이터 소유자가, 사용자나 사용자 그룹에 따라 접근을 제어

-- 예를 들자면, Windows에서 Everyone같이 그룹단위로 접근제어 하는거 생각해봐

--- DAC는 대부분 운영체제에서 지원됨

- 모든 주체와 객체에 대해 일정하며, 하나의 주체와 하나의 객체 단위로 접근 제어는 불가능

- 구현을 위해 일반적으로 ACL(Access Control List)을 활용 / 중앙집중적으로 통제되는 환경에서 부적합

- 결론적으로, 사용자가 누구고 어떤 그룹에 속해있는지에 따라 접근통제가 이루어져


3) 강제적 접근통제(MAC ; Mandatory Access Control)

- 규칙 기반 정책을 적용 했다고보자...(이게 맞는 건지는 모르겠으나 다들 그렇게 연결 짓던데?)

- 관리자가 주체들에겐 허가등급을, 각각의 객체에는 비밀등급을 부여해서 주체의 허가등급과 객체의 비밀등급을 따져 접근을 제어함

-- 주체들과 객체들의 등급을 따로 보안레이블에 저장해둠

-- 운영체제(관리자) / 주체(프로세스 들) / 객체(시스템 리소스) 이렇게도 쓰여

- 최상의 허가등급을 가진 사용자라도 모든 객체를 열람 할 수는 X

- 통제가 용이하고 보안관리자 주도하에 중앙 집중적 관리가 가능하다는 장점

- 기밀성이 매우 높은 조직에서 사용됨


4) 역할기반 접근통제(RBAC ; Role Based Access Control)

- 역할 기반 정책의 적용 / 임의적 접근통제와 강제적 접근통제의 단점을 보완한 기법(비 임의적 접근통제라고도함)

- 역할들을 생성해서 역할마다 권한을 준다음, 사용자들에게 각 역할을 부여함. 즉, 사용자의 역할에 따라 접근을 제어 함

- 규모가 큰 회사에 알맞은 시스템(인사이동 등이 잦아도 그냥 사용자의 역할만 변경하면 됨)


5) 접근통제행렬과 AC

- 접근통제행렬 : 주체를 열에, 객체를 행에 표시해서 각각에 권한을 부여하는 방법

- AC(Access Control ; 접근통제) : 몇몇 접근통제 모델은, 해당 모델이 가지고 있는 접근통제 메카니즘을 보안모델로 발전시킴

-- 접근통제 메카니즘과 보안모델은 1)에서 설명



(3) 키 분배 프로토콜

1) KDC 기반 키 분배

- KDC(Key Distribution Center)

-- 암호통신을 원하는 두 가입자 사이에, 공통의 암호키를 소유할 수 있고 키 분배 과정을 수행하는 신뢰된 기관

-- 간단히 말해, 비밀키를 만들어서 대칭키 암호화 통신을 원하는 사람들에게 키를 나누어 주는 역할

-- 키를 나누어 준 뒤, KDC에서 키를 삭제하는것도 좋지만 분실에 대비하는것도 좋음(이런 의미에서 키 복구센터라고도함)

-- 인원이 많아지면, 관리하는 키의 수가 기하급수적으로 증가해 현실적으로 관리가 불가능

- 키 분배 방식

-- 키의 사전분배(Key Predistribution) 방식 : 한 가입자가 키를 만들어, 상대 가입자 혹은 양측 가입자에게 전달하는 방식

--- Blom 방식 / 중앙집중식 키 분배(Kerberos에서 사용) / 공개키 분배(KDC가 공개키 분배)

-- 키 공유방식(Key Agreement) 방식 : 키를 설정하는데 공동으로 참여

--- Diffie-Hellman 키 교환 방식 등등


2) Needham-Schroeder 프로토콜

- Roger Needham과 Micheal Schroedor이 1978년 대칭키와 trent 개념을 사용해 제안

- 인증서버 S / 통신주체 A / 통신주체 B 가있다고 가정하고 설명(K는 키값 / N은 난수값)

-- 1) A → S : A / B / N_A

--- (A가 S에게 B와 통신하고 싶다고 알림 ; A와 B의 ID와 A가 생성한 난수값보냄

-- 2) S → A : N_A / K_ab / B / [ [ K_ab, A ]K_bs ]K_as

--- (S가 A에게, B와 통신할 때 쓸 키 K_ab를 주고, B에게도 알려주라고 K_ab를 K_bs로 암호화 해서 줌

-- 3) A → B : [ K_ab, A ]K_bs

--- 아까 S가 B주라고 줬던걸, B한테 보내줘

-- 4) B → A : [ N_b ]K_ab

--- A로부터 키 값 K_ab를 받은 B는 응답신호로써 자신이 생성한 난수값 N_b를 암호화 해서 보냄

-- 5) A → B : [ N-b - 1 ]K_ab

--- B로부터 받은 난수값에서 1빼고 암호화 해서 보내

- 재전송 공격의 취약점이 있음(MITM에 취약) 그래서 타임스탬프를 사용함

-- 타임스탬프사용해서 하는건 위의 1)에서 타임스탬프를 주거니 받거니함(걍 생략)


3) Diffie-Hellman 프로토콜

- 1976년 Diffie와 Hellman이 발표한 것으로 이산대수 계산의 어려움을 이용함 / 공개키 암호의 시초

- 네트워크상에서 A와 B가 알고리즘에 사용하는 비밀키를 서로 만나지않고 공유할 수 있는 방법

- Alice와 Bob이 키교환하고자함!

-- 1) Alice와 Bob은 소수 p와 p미만의 임의의 정수 g를 선택해 공유함

-- 2) Alice와 Bob은 서로 비밀키 a와 b를 만듬

-- 3-1) Alice는 A = g^a (mod p)를 계산해 공개키 A를 Bob에게 보냄

-- 3-2) Bob은 B = g^b (mod p)를 계산해 공개키 B를 Alice에게 보냄

-- 4-1) Alice는 B^a (mod p)를 계산하고, Bob은 A^b를 계산해서 A^b = B^a = g^ab (mod p)라는 결과를 만들어냄

-- 5) g^ab (mod p)를 둘 만의 비밀키로 사용

- 세션키 같은거 필요없고 단순하고 효율적으로 키 교환이 가능

- 재전송 공격(MITM)에 취약함


4) RSA 이용 키 분배 방법(RSA 암호 알고리즘을 말하는게 아냐)

- RSA는 소인수 분해의 어려움을 이용하는 암호 알고리즘임

- 일단, 여기선 RSA를 이용한 키 분배 방법이기에 키 생성가은건 집어치우고 시작

-- 1) Alice와 Bob이 각각 공개키 쌍과 사설키 쌍을 만듬

-- 2) Alice가 공개키 쌍과 자신의 ID값을 Bob에게 보냄(ID값은 뭐..그냥 자기라고 인증할만한 값?인듯)

-- 3) Bob이 공유할 대칭키를 생성해서 Alice의 공개키로 암호화해서 Alice에게 보냄

-- 4) Alice는 받은 대칭키로 데이터를 암호화해서 보냄(여기부터 통신시작)


(4) 전자서명과 공개키 기반구조(PKI)

1) 전자인증서 구조

- 사용자 공개키와 사용자 ID정보를 결합해 인증기관이 서명한 문서 / 공개키의 인증성을 제공

- 쉽게말해, 사용자의 공개키 + 사용자의 공개키에 대한 인증기관의 전자서명 = 사용자의 전자인증서

- X.509 인증서 표준 : ITU에서 제안한 인증서에 대한 기본 형식을 정의한 규격

-- 인증서를 이용한 공개키의 효율적인 분배 방법을 정의

-- X.509 v1(1988)

-- X.509 v2(1993)

--- 인증서 취소목록(CRL ; Certificate Revocation List)을 도입

--- 인증기관 고유 ID(Unique Identifier) 도입 : 한 주체가 둘 이상의 인증기관으로 부터 인증서가 발급됬을 경우 구분하기 위해

--- 주체 고유 식별자 : 주체를 식별하는 값(동명이인일 경우 구분하기 위해)

-- X.509 v3(1996)

--- 인증기관 키 식별자

--- 주체키 식별자

--- 키 용도 : 암호용인지 서명용인지 구분

--- v3부터는 확장자의 개념이 도입됨

---- 키 및 정책 확장자

---- 주체와 발급자에 대한 속성 정보

---- 인증서 경로 및 규제 정보

---- CRL을 위한 확장자

- 전자인증서 구조

-- 버전(Version) : X.509의 몇 번째 버전이냐??

-- 일련번호(Serial Number) : 발행하는 CA 내부에서의 유일한 정수값

-- 알고리즘 식별자(Algorithm Identifier) : 인증서를 생성하는데 어떤 알고리즘 썻는지

-- 발행자(Issuer) : 인증서를 발행하고 표시하는 CA

-- 유효기간(Period of Validity) : 인증서가 유효한 시작과 끝기간

-- 주체(Subject) : 인증서가 가르키는 사람

-- 공개키 정보(Public-key Information) : 주체의 공개키와, 이 키가 사용될 알고리즘 식별자

-- 서명(Signature) : CA의 개인 서명키로 서명한 서명문


2) 전자서명 보안 서비스

- 전자서명(DIgital Signature) : 내가 받은 메시지를 어떤 사람이 만들었는지를 확인하는 인증

- 전자서명의 기능 : 사용자인증(송신 부인방지) / 메시지 인증(무결성의 보장의 개념)

- 전자서명의 특징 : 위조불가 / 서명자 인증 / 부인 불가(서명사실에 대해) / 변경불가(변조불가) / 재사용 불가

- 전자서명 방식에 따른 분류

-- 직접 서명(Direct Digital Signature) 방식 : 혼자서 서명알고리즘 수행하고 서명하는 방식

--- 키가 유출되면, 송신 부인방지가 안되며 기타 다른 요구사항이 충족 안됨

-- 중재 서명(Arbitrated Digital Signature) 방식 : 서명자가 서명해서, 중재자에게 보내면 중재자가 한 번더 서명하는 방식

-- ※ 전자서명 알고리즘의 분류

--- 메시지 복구가능 전자서명 알고리즘(DSS ; Digital Signature Scheme) : 서명값으로 부터 메시지 추출해서 검증가능

--- 원메시지 필요 전자서명 알고리즘(DSS with appendix) : 검증을 위해 따로 원메시지가 필요

- 전자서명 방법

-- 메시지에 직접하는 방법

-- 메시지의 해쉬값에 서명하는 방법 : 좀더 효율적


3) PKI 구성방식(계층, 네트워크)

- PKI(Public Key Infrastructure ; 공개키 기반 구조) : 공개키 인증서의 인증성(무결성)을 제공하기 위한 신뢰구조

- PKI 구성요소(컴포넌트 ; Component)

-- 공개키 인증서(Public Key Certificate) : 해당 키가 누구 것인지 알려줌(공개키 정보와 주인의 정보)

--- 구성 : 공개키 인증서/ 인증서 정책 / 인증서 경로 / 인증서 철회 리스트(CRL ; Certificate Revocation List)

-- 인증기관(CA ; Certification Authority)

--- 인증서의 발급 / 상태관리 / 문제 발생 시 CRL의 발급

--- 지금까지 발행한 인증서와 모든 CRL을 저장

-- 등록기관(RA ; Registration Authority) : 인증서 신청시, CA대신 신분, 소속을 확인해주는 기관

-- 저장소, 디렉터리(Repository) : 공개키를 저장하고 있는 기관

--- CA로부터 인증서와 CRL을 받아 저장하고, 이를 요구하는 사용자에게 나눠줌

-- 사용자(User)

- PKI 구성 방식

-- 순수 계층 방식(트리구조)

--- 최상위 인증기관인 Root CA에 대한 신뢰를 바탕으로, 하부 CA간의 상호인증은 원칙으로 배제하는 방식

--- Root CA간의 상호 인증으로 국제적으로 구성이 가능

-- 네트워크 구조 방식

--- 여러 Root CA를 두어 운영함 / 복잡함


4) CRL 구조 및 기능

- CRL(Certificate Revocation List) : 인증서 취소 목록

- 취소 이유

-- 인증서 발행 조직에서 탈퇴 / 비밀키의 손상 / 비밀키 유출 의심

-- 인증서 소유자나 소유자의 대리인의 취소 요구

- 인증서 취소 메카니즘 : X.509에서 정의된 CRL을 이용해 관리

- CRL은 네트워크를 통해 공개되고 Repository에 저장됨

-- 주기적으로 CRL을 생성하는 방법과 실시간으로 생성하는 방법이 있음(하이브리드 하는게 좋음)


5) OCSP 동작절차

- OCPS(Online Certificate Status Protocol) : 실시간으로 인증서가 유효한지 검증하는 프로토콜

-- CRL과 마찬가지로 유효성을 검증할 수 있는 프로토콜(업데이트 주기나, 비요 등에서 차이가 있어)

- OCSP 방식은 CA와 Repository와는 별도로 OCSP 서버를 하나 두고, 사용자의 검증 요구에 대한 결과를 제공하는 방식

-- OCSP Server는 특정 CA기관과 사용계약을 맺어야하고 사용량에 따라 추가 비용 지불

-- OCSP Server가 CA기관과 계약을 맺으면 OCSP Server에 Server 인증서와 개인키가 발급됨

-- OCSP Server 인증서는 1년마다 교체해야됨

- OCSP 동작 절차

-- 1) CA 내부에 OCSP Responder가 존재

-- 2) OCSP Server가 CA내부의 OCSP Responder로 OCSP Request 전송

-- 3) 인증서의 폐기 여부를 검증함

-- 4) CA에서 OCSP Server로 OCSP Response 전송

- OCSP와 CRL의 비교

-- CRL같은경우는 실시간이 아니라 일정한 주기마다(6시간~24시간) 폐기목록을 생성

-- CRL이 갱신되어야 폐기로 판단

-- 따로 비용이 들지는 않음


6) 전자서명 관련법규

- 이건 나중에 법규할 때 다루자




2. 암호학(12문제~13문제/20문제)

(1) 암호 알고리즘

1) 암호 관련용어

- 평문(Plaintext) / 암호문(Ciphertext)

- 암호화(Encryption) / 복호화(Decryption)

- 전자서명(Digital Signature)

- 기밀성 / 무결성 / 가용성 / 부인방지


2) 암호 공격방식

- 수동적 공격(소극적 공격)

-- 도청 / 트래픽 분석

- 능동적 공격(적극적 공격)

-- 변조 / 삽입 / 삭제 / 재생

- 암호 메시지에 대한 공격(해독하려는 시도)

-- 암호문 단독 공격(Ciphertext Only Attack/COA)

-- 알려진 평문 공격(Known Plaintext Attack/KPA)

-- 선택 평문 공격(Chosen Plaintext Attack/CPA)

-- 선택 암호문 공격(Chosen Ciphertext Attack/CCA)



3) 대칭키, 공개키 암호시스템 특징 / 4) 대칭키, 공개키 암호시스템 활용

- 대칭키 암호시스템(비밀키/관용키 암호시스템)

-- 암호화키와 복호화키가 동일함

-- 암호화와 복호화가 빨라서 효율적임

-- 치환가 전치의 조합으로 간단한 구조로 개발 쉬움(Feistel 구조를 기반으로 해서 그런듯)

-- 많은 사람과의 정보교환시 키 관리의 어려움이 있음(N명의 경우 N(N-1)/2의 비밀키가 필요

-- 암호화에 적용되는 평문에 따라 Stream Cipher / Block Cipher

-- Steam Cipher : RC4

-- Block CIpher : DES(3DES) / IDEA / RC5 / RC6 / AES / SEED / Blowfish /ARIA

http://www.slideshare.net/skccsocial/security-framework220

- 공개키 암호시스템(비 대칭키 암호시스템)

-- 암호화키와 복호화키가 다름

-- 다른 유저와 키를 공유안해도 암호화 통신이 가능

-- 수학적인 난제을 기반으로해서 암/복호화가 복잡

--- 이산대수를 이용 : Diffie-Hellman / El Gamal / DSA / KCDSA / Schnorr

--- 소인수분해를 이용 : RSA / Rabin

--- 기타 : ECC(타원곡선) / Knapsack


5) 스트림 암호

- 대칭키 암호시스템 구조 중 하나로, 한번에 한 바이트씩 암호화되는 형식(가장 처음에 초기값(IV ; Initial Vector)가 필요)

- 가장 중요한 건 키 스트림을 생성하는 것(동기적 / 비 동기적)

-- 동기식 스트림 암호 : 키 스트림을 대칭키와 이전상태로부터 뽑아냄(예를 들어, N키스트림과 N+10 키 스트림이 동일)

--- 대표적으로 RC4가 있음

-- 비동기식 스트림 암호 : 키 스트림을 대칭키와 평문으로 부터 뽑아냄

- 키 스트림의 무작위성이 암호의 강도가 됨


6) 블록 암호

- 대칭키 암호시스템 구조 중 하나로, 고정된 크기의 블록을 고정된 크기의 암호화 블록으로 암호화하는 방식

- Feistel 구조와 SPN구조를 다루고 싶지만...

- 블록암호 운영모드 : 평문의 길이가 블록의 크기보다 클 경우에 대한 문제점을 해결하기 위해 제시된 암호화 모드

-- ECB(Electronic Code Book) : 평문을 블록단위로 잘라서, 각 블록마다 암호화

--- C[i] = Ek( M[i] )

--- 블록 크기보다 작으면 적용 불가능

--- 이전 블록 값의 오류가, 이후에 영향을 안줘(소규모 암호화에 적합)

---- 오류 전파가 안된다는 특징

---- 동일한 평문엔 동일한암호문이 나와 → 암호문 단독공격에 약해


-- CBC(Cipher Block Chaining) : 출력되는 암호문이 다음 평문 블록에 영향을 줘

--- C[i] = Ek( C[i-1] × M[i] )

--- 암호화 과정에서, 평문 블록 M[i]에서 1bit가 오류 → 암호문 블록 C[i]부터 끝까지 영향

---- ECB가 암호문 단독공격에 취약한걸 해결

---- 이런 특징 때문에, 메시지 인증코드에 사용되기도 해(무결성이 유지되기에)

--- 복호화 과정에서, 암호문 블록 C[i]에서 1bit가 오류 → 평문 블록 M[i], M[i+1]에만 영향


-- CFB(Cipher Feed Back) : 암호문이 암호기의 입력으로 사용되

--- C[i] = Ek( C[i-1] ) × M[i]

--- 암호화 과정에서, 평문 블록 M[i]에서 1bit가 오류 → 암호문 블록 C[i]부터 끝까지 영향

---- ECB가 암호문 단독공격에 취약한걸 해결

--- 복호화 과정에서, 암호문 블록 C[i]에서 1bit가 오류 → 평문 블록 M[i], M[i+1]에만 영향


-- OFB(Output Feed Back) : 암호 알고리즘의 출력이 다시 암호 알고리즘의 입력이 됨

--- C[i] = Ek( Z[i-1] ) × M[i]

--- ECB가 암호문 단독공격에 취약한걸 해결

--- CBC와 CFB의 오류전파를 제거함

--- 블록암호상에서 스트림암호를 운영할 수 있음


-- CTR(CounTeR) : IV값을 Counter로 1씩 계속 증가시킨걸, 암호화해 키 스트림을 만들어 내는 스트림 암호화

--- 블록암호상에서 스트림암호를 운영할 수 있음


7) 블록 암호공격

- 차분 공격(Differential Cryptanalysis) : 평문공격법 / 두 개의 평문블록과 이에 대응되는 암호문 블록들의 비트들의 차이를 이용해 키를 찾음

- 선형공격(Linear Cryptanalysis) : 평문공격법 / 알고리즘 내부의 비선형 구조를 선형화해서 키를 찾음

- 전수공격(Exhaustive Key Search) : 암호화할 때의 모든 경우에 대하여 조사하는 방법 / 일반적으론 불가능(경우의 수가적을 때만 가능)

- 통계적 분석(Statistical Analysis) : 많이 사용되는 단어의 빈도의 통계적 수치를 가지고 해독

- 수학적 분석(Mathematical Analysis) : 통계적 방법을 포함해, 수학적 이론을 이용해 해독


8) 인수분해 기반 공개키 암호방식

- 소인수 분해의 어려움을 이용(엄청나고 엄청난 수를, 엄청나게 큰 두 소수로 분해하는게 어려움)

- RSA(Rivest Adleman Shamir)

-- Key 생성

--- 1. 큰 소수인 p, q를 선택

--- 2. N = p x q를 계산 해, N을 구함

--- 3. φ( N ) = ( p-1 ) x ( q-1 )

--- 4. gcd( Ke, φ( N ) ) = 1이 성립하는 Ke를 구함

--- 5. Ke x Kd ≡ 1 ( mod φ( N ) )이 성립하는 Kd를 구함

--- 공개키 쌍은 ( Ke, N ), 개인키 쌍은( Kd, N )

-- 암호화 과정

--- 1. 수신자의 공개키 쌍을 가져옴( Keb, Nb )

--- 2. C ≡ M^( Keb ) ( mod Nb )로 암호문을 만들어냄

-- 복호화 과정

--- 1. 수신받은 암호문 C에 자신의 개인키로 복호화 함

--- 2. C^( Kdb ) ≡ M^( Keb x Kdb ) ≡ M^(1) ≡ M ( mod Nb )

- Rabin

-- RSA 암호방식보다 훨씬 빠름(암호화 과정이 더 단순)

-- RSA와는 다르게 공개키가 N이고, 개인키가 p, q가 됨

-- Key 생성

--- 1. 큰 소수 p, q를 선택

--- 2. N = p x q를 계산해, N을 구함

--- 공개키는 N, 개인키는 p, q

-- 암호화 과정

--- C ≡ M^( 2 ) ( mod N )

-- 복호화 과정

--- M ≡ C^( 1/2 ) (mod N )


9) 이산로그 기반 공개키 암호방식

- El Gamal

-- RSA와는 다르게, 같은 평문에서도 다른 암호문이 생성 / But, 암호문 길이가 두 배로 증가한다는 단점

-- Y = g^ ( X ) ( mod p )에서 g와 y, p를 알아도 x는 구하는건 겁나 어렵다

--- 여기서 Y와 g, p가 공개키고 X가 개인키

-- 키 생성

--- 1. (공통) 임의의 큰 소수 p와, p의 기약잉여계의 임의의 원시근 g를 선택(위수가 φ(p)인게 원시근)

--- 2. 1부터 p-1까지의 정수 하나를 개인키 X로 정함

--- 3. Y = g^( X ) (mod p )를 계산해, Y를 정함

--- 공개키는 Y, p, g, 개인키는 X

-- 암호화

--- 1. 수신자의 공개키를 가져옴(Yb, g, p)

--- 2. p의 완전잉여계에 속하는 임의의 정수 r을 하나 정함

--- 3. K ≡ Y^( r ) ( mod p )를 계산해 K를 계산

--- 4. 다음과 같은 C1과 C2를 보냄

i) C1 ≡ g^( r ) ( mod p)

ii) C2 ≡ K x M ( mod p)

-- 복호화

--- 1. 수신받은 C1과 C2를 개인키 Xb를 이용해 복호화

--- 2. C1에서 K를 구해냄

C1^( Xb ) ≡ ( g^( r ) )^( Xb ) ≡ ( g^( Xb ) )^( r ) ≡ Yb^( r ) ≡ K ( mod p )

--- 3. C2에서 평문 M을 구해냄

C2 / K ≡ M ( mod p )

- Diffie-Hellman

-- 직접 서로의 비밀키를 전달할 수 있는 대표적 방법 중 하나

--  키 교환 및 인증에 사용됨

- ECC(Elliptic Curve Cryptography ; 타원곡선 암호)

-- 아..이건 모르겠다ㅋㅋㅋ



(2) 해쉬함수와 응용

1) 해쉬 함수 일반

- 임의의 입력 비트열에 대해, 일정한 길이의 출력 비트열을 내는 것

- 해쉬 함수의 요구 사항

-- 압축 : 일정한 크기의 이진 문자열로 변환

-- 계산 용이성 : x가 주어지면 H(x)의 계산이 쉬워야 함

-- 일 방향성(One-wayness) : 해시값 y만 주어 졌을 때, y = H(x)에서 x를 찾는게 어려워야 함

-- 약한 충돌회피성 : x가 주어졌을 때, H(x) = H(x')를 만족하는 x'를 찾는게 어려워야 함(거의 불가능이 되어야 지)

-- 강한 충돌회피성 : H(x) = H(x')를 만족하는 x와 x'를 찾는건 어려워야 함


2) 전용 해쉬함수별 특징

- MD5 / SHA

-- MD5와 SHA-0 / SHA-1 / SHA-2만 알면 될듯(일단 다 긁어왔어)

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


3) 메시지 인증 코드(MAC)

- MAC(Message Authentication Code)

-- 저 위에서 메시지 인증방식으로 언급하긴함

- MAC Algorithm으로 DES나 해쉬함수를 씀

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


4) 전자서명

- 전자서명(Digital Signature) : 메시지 인증 + 사용자 인증

-- 위에서 이미 다룸


5) 은닉서명

- 은닉서명(Blind Signature) : 사용자 A가, 서명자 B에게로 부터 자신의 메시지를 보여주지 않고 서명을 얻는 방법

-- 그니까, 서명을 받긴 받았는데 그게 누구 서명인지 알수는 없다는 거지

-- 어떤 특정 난수값을 메시지에 곱해서 보내기에 못 보는거지

- 메시지의 비밀성을 지키면서, 타인의 인증을 받고자 하는 경우에 주로 사용

-- 주로 전자투표?

- 하는 알고리즘은 생략


6) 이중서명

- 이중서명(Dual Signature) : SET에서 도입된 기술로 이전에 언급했음


아래는 고객이 상점으로 보내는 것

상점에서는 이중서명 / OI / PIMD / 고객의 공개키만 사용


아래는 상점이 고개으로 부터 메시지 받고 처리하는 과정

이중서명 / OI / PIMD / 고객의 공개키를 가지고 인증을하고

나머지는 Payment Gateway로 보냄(어차피 못뜯어봐 ; 금융기관의 공개키로 암호화 했기에)

 

 

1. 네트워크 일반(5문제/20문제)

(1) OSI 7 Layer

1) 각 레이어의 기능 및 역할

- OSI(Oepn System Interconnection)는 통신절차를 기능별로 구별해 놓은 국제 표준

- SDU(Service Data Unit) : 쉽게 말해, 해당 레이어에서 프로토콜을 이용하는 사용자의 데이터

- PDU(Protocol Data Unit) : SDU의 앞뒤에 Header나 Footer를 덧 붙이는 데이터 캡슐화(Encapsulation)과정의 결과물

-- PDU = Header + SDU + (Footer)

- 1 Layer(Physical Layer)

-- PDU : Bit Stream(0과 1의 연속 / 전기적신호)

-- Protocol : None.

-- Equipment : Repeater / Hub

- 2 Layer(Datalink Layer)

-- PDU : Frame

-- Protocol : Ethernet / HDLC / PPP / ...

-- Equipment : Bridge / L2 Switch

- 3 Layer(Network Layer)

-- PDU : Packet

-- Protocol : IP / ARP / ICMP

-- Equipment : Router / L3 Switch

- 4 Layer(Transport Layer)

-- PDU : Segment

-- Protocol : TCP / UDP

-- Equipment : L4 Switch

- 5 Layer(Session Layer)

- 6 Layer(Presentation Layer)

- 7 Layer(Application Layer)

-- PDU : Data or Message

-- Protocol : Telnet / HTTP / FTP / ...

-- Equipment : PC / Server / ...


2) 레이어별 네트워크 장비

- Physical Layer

-- Reapeater : 걍 전기신호 증폭

-- Hub : Reapeater 기능 + Hub에 붙은 모든 장비로 신호 전달(이 때문에 Hub에 붙은 모든 장비는 하나의 Collision Domain)

- Data Link Layer

-- Bridge : Frame의 MAC주소과 MAC Table을 참조해, 어떤 포트로 Frame을 재조립해 내보낼지 결정할 수 있는 장비

--- Frame을 S/W로 처리되는 방식이기에 Switch보단 느림

--- 모든 포트가 동일한 속도

--- Store-And-Forward 방식만 사용

-- Switch : 일단 Bridge를 기반으로 하고 있다고 생각하면될듯.

--- Frame 처리 절차를 칩에 구워서 H/W적으로 구현(ASIC ; Application Specific Integrated Circuit) 비교적 Bridge보다 빠름

--- 포트 별로 속도를 다르게 처리 가능(각각의 포트가 하나의 Collision Domain이라 그런가?)

--- Store-And-Forward / Cut-Through 방식 사용

※ 계속 기술이 발전함에 따라, 경계가 모호해지고 있기 때문에 딱히 뭐는 뭐다하기는 힘든것 같음

-- 참조 : http://tmdgus.tistory.com/87

- Network Layer

-- Router : Packet의 목적지 IP를 보고 목적지와 연결된 인터페이스로 전송해줌(경로결정) / 네트워크보안 / QoS

-- L3 Swtich

- Transport Layer

-- L4 Switch : 부하분산(트래픽 분산)



(2) TCP/IP 일반

※ TCP/IP Layer

- 1 Layer(Network Interface Layer)

- 2 Layer(Internet Layer)

- 3 Layer(Transport Layer)

- 4 Layer(Application Layer)

http://blog.naver.com/ssamba/125695893

1) IPv4, IPv6 Addressing

- IPv4

-- 네트워크 주소와 호스트 주소로 이루어진 32bit 주소 체계

--- 네트워크를 A, B, C, D Class로 나눠서 구분

-- IP주소의 고갈로 기형적인 기술인 NAT와 DHCP, Subnet같은 기술이 생김

--- NAT(Network Address Translation) : 사설IP와 외부IP(공인IP) 간의 변환

--- Subnet : 네트워크를 Class로 나누는 체계가 아닌, 임의대로 Classless하게 네트워크를 나누는 기술

--- DHCP : 동적으로 IP를 할당하고, 필요 없는 IP는 회수하는 기술

-- 사설 IP(다음과 같이 권고되고 있음 / 네트워크 장비도 이렇게 세팅되있더라)

--- Class A : 10.0.0.0 to 10.255.255.255

--- Class B : 172.16.0.0 to 172.31.255.255

--- Class C : 192.168.0.0 to 192.168.255.255

-- Classful : Subnet 개념이 없는 것. 대표적인 라우팅 프로토콜로 RIPv1, IGRP

-- Classless : Subnet 개념이 있는 것. 대표적인 라우팅 프로토콜로 RIPv2, EIGRP, OSPF, BGP 등

-- 데이터 전달 방법 : Unicast / Broadcast / Multicast

- IPv6

-- IPv4의 주소 고갈의 대응책으로써 128bit의 주소 체계

-- Header의 간소화로 라우팅이 빨라짐(IPv4와 IPv6의 Header가 다름)

-- 데이터 전달 방법 : Unicast / Anycast / Multicast

http://www.caribnog.org/articles/2013/3/9/addressing-ipv6-in-the-caribbean


2) 서브네팅 설계 및 활용

- Subnet Mask : IP주소에서 네트워크 주소와 호스트 주소를 구분하는 구별자 역할

-- 비트열이 1이면 네트워크 주소 부분, 0이면 호스트 주소 부분

-- CIDR(Classless Inter-network Domain Routing) : Subnet Mask 값을 십진수로 변환해 '/24' 같이 IP주소뒤에 붙여서 표현

-- VLSM(Variable Length Subnet Mask) : 어떤 네트워크에서 다양한 길이의 Subnet Mask를 사용하는 것

- Supernetting : 여러개의 네트워크를 하나의 네트워크의 주소로 묶는 것

- Subnetting : 하나의 네트워크 주소를 여러 개의 하위 네트워크 영역으로 분할하는 것 / 하위 네트워크를  Subnet이라 함


3) CIDR, LSM

- CIDR(Classless Inter-network Domain Routing) : Subnet Mask 값을 십진수로 변환해 '/24' 같이 IP주소뒤에 붙여서 표현

- LSM이 VLSM에서 V를 뺸건가??

-- VLSM(Variable Length Subnet Mask) : 어떤 네트워크에서 다양한 길이의 Subnet Mask를 사용하는 것


4) 데이터의 캡슐화

- 캡슐화(Encapsulation) :SDU에 Header나 Footer를 붙이는 행위


5) 포트주소 의미와 할당 원칙

- 포트 주소는 16bit의 정수 형태(0~65535)

-- Well-known Port(0~1023) : 잘 알려진 서비스에 할당된 포트 주소

--- FTP(TCP 20 / TCP 21)

--- SSH(TCP 22)

--- Telnet(TCP 23)

--- SMTP(TCP 25)

--- DNS(TCP 53 / UDP 53)

--- HTTP(TCP 80)

--- POP3(TCP 110)

--- NetBIOS(TCP 137 / TCP 138 / TCP 139)

--- HTTPS(TCP 443)

-- Registered Port(1024~49151) : 특정 프로그램에서 등록한 포트 주소

-- Dynamic Port(49152~65535) : 임의로 사용하는 포트 주소


6) IP, ARP, IGMP, ICMP, UDP, TCP 등 각 프로토콜의 원리 및 이해

- IP(Internet Protocol)

-- TCP/IP 네트워크에서 출발지, 목적지 IP 주소를 지정되는 프로토콜

-- Packet의 목적지 주소를 보고 최적의 경로를 찾아 패킷을 전송해주는게 주된 역할

-- 신뢰성이 없고 비연결 지향적임(신뢰성보다는 효율성에 중점을 줌)

http://en.wikipedia.org/wiki/IPv4#Flags

-- IHL(HLEN) : (Header의 길이/4)로써 Option이 없으면 20Byte이므로 5라는 값을 가짐

-- Flags(3 Bits) :

--- Reserved(Must be zero)

--- DF(Don't Flagement) : Datagram의 분할을 방지

--- MF(More Flagment) : Datagram이 분할될 때 마지막조각이면 0, 아니면 1

- ARP(Address Resolution Protocol)

-- IP주소를 MAC 주소로 변환하는 표준 프로토콜

--- 해당 IP주소가 동일 네트워크에 있음 : 해당 목적지의 MAC주소

--- 해당 IP주소가 외부 네트워크에 있음 : Router의 MAC주소

-- ARP Request는 Broadcast, ARP Reply는 Unicast

-- ARP는 한 번 찾은 MAC주소를 ARP-Cache에 일정 기간동안 IP주소-MAC주소 형태로 보관함

--- ARP-Cache확인 : arp -a

--- ARP-Cahce생성 : arp -s <IP주소> <MAC주소>

--- ARP-Cache삭제 : arp -d <IP주소>

-- 취약점 : 무조건 응답 수용함(요청하지 않은 응답도 수용해버림)

--- 이런 취약점을 노린 공격을 ARP Cache Posisoning이라 함

- RARP(Reverse ARP)

-- MAC주소를 IP주소로 변환하는 표준 프로토콜

- ICMP(Internet Control Message Protocol)

-- IP의 특징인 비신뢰성과 비연결성의 한계를 보완하기 위해, 노드 간의 에러사항이나 통신 제어를 위한 메시지를 보고 할 목적으로 만들어진 프로토콜

-- 에러를 Report할 뿐, 해결하는 기능은 없음 / 대표적인 프로그램으로 PING이 있음

-- ICMP는 TCP/UDP Header가 필요 없고 IP Header와 IP Data 부분에 ICMP 메시지를 포함해서 보냄

-- ICMP 메시지의 종류(일부만)

--- Type 8 : Echo Request

--- Type 0 : Echo Reply

--- Type 3 : Destination Unreachable(CODE영역에 원인 설명되)

--- Type 4 : Source Quench(Flow Control 할 때, 전송속도 줄이라는 의미)

--- Type 5 : Redirect ; Route를 변경하라는 메시지

--- Type 11 : Time Exceeded

- IGMP(Internet Group Management Protocol)

-- 멀티캐스트 그룹을 관리하기 위한 프로토콜(멀티 캐스트 멤버 가입, 수정, 탈퇴)

-- 멀티캐스트 호스트와 라우터 사이에서 동작하게 됨(같은 네트워크에서만 동작함 / TTL 1)

-TCP(Transmission Control Protocol)

-- Transport Layer의 프로토콜로써, 신뢰성과 연결지향적 특징을 가짐

-- 혼잡 제어와 흐름 제어 기능을 제공(Sliding Window) / 에러 제어도 가능(Checksum)

-- 클라이언트와 서버의 데이터 교환을 위해 TCP 3-Way Handshake를 통해 TCP Session을 확립해야 함

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

-- TCP Header Flag는 잘 나와 시험에

--- URG : Urgent Pointer가 유효함

--- ACK : Ack Number가 유효함

--- PSH : 수신자보고 이거 빨리 응용프로그램으로 전달할 것을 지시

--- RST : 연결을 Reset하도록 지시

--- SYN : 연결 시작

--- FIN : 연결 종료

-UDP

-- Transport Layer의 프로토콜로써, TCP와 달리 비신뢰성과 비연결지향적인 특징을 가짐

-- Sequence Number와 Ack Number가 없어서 순서 제어와 흐름 제어가 불가능

-- 따로 연결하는 과정이 없어서 빠른처리와 실시간성을 요구하는 서비스에 적합


7) Broadcast 및 Multicast 이해

- Broadcast

-- Broadcast Domain(=Subnet) 범위 이내에 모든 시스템에 Frame을 보냄

--- 외부로 나가면 Router 단에서 Drop되

-- Broadcast를 받은 시스템은 CPU가 Packet을 처리하게 끔 함(Broadcast가 많아지면 네트워크트래픽도증가하고, CPU 성능도 낮아짐)

- Multicast

-- 네트워크에 연결되어 있는 시스템 중, 일부분에게만 정보를 전송할 수 있는 것

-- Router가 Multicast를 지원해야만 사용가능함

-- Multicast Group에 가입, 탈퇴시에 IGMP를 사용함

- Unicast

-- 정보 전송을 위해 Frame에 자신의 MAC와 목적지의 MAC를 첨부해 전송하는 방식

-- 가장 많이 사용되는 방식으로, Broadcast와 달리 CPU 성능에 문제를 주지 않음

- Anycast

-- IPv4의 Broadcast가 사라지고 IPv6에선 Anycast로 대체됨



(3) Unix/Windows 네트워크 서비스

1) DNS, DHCP, SNMP, Telnet, FTP, SMTP 등 각종 서비스의 원리 및 이해

- DNS(Domain Name Service)

-- Domain Name과 IP Address를 Mapping시켜주는 거대한 분산시스템

-- Server-Client기반으로 작동함

--- Server : Primary Name Server / Secondary Name Server

--- Client : Resolver

-- DNS Query 종류

--- Recursive Query : 요청받은 DNS Server에서만 Query 처리

--- Iterative Query : 요청받은 DNS Server에 정보가 없으면, 다른 DNS Server에 반복적으로 Query해서 처리

---- 이건 DNS Server들 끼리하는 Query라고 생각

-- DNS 동작 순서

--- Client : DNS Cache 확인 → Hosts 파일 확인 → Server로 Query

--- Server : DNS Cache 확인 → Zone File 확인 → Iteractive Query / 해석 실패

-- 취약점을 이용한 공격

--- DNS Cache Poisoning

--- DNS Spoofing

- DHCP(Dynamic Host Configuration Protocol)

-- 네트워크 상의 IP 주소를 중앙에서 관리하고 할당해도록 해주는 프로토콜

-- DHCP 동작과정(필요하면 나중에 더 정리함)

--- 1) Discover : Client가 DHCP Server을 찾음(Broadcast)

--- 2) Offer : DHCP Server가 Client에게 제공할 수 있는 정보를 줌(Broadcast, 물론 시스템에 따라 Unicast인 경우도 있음)

--- 3) Request : Offer받은 Client가 제공받은 정보를 사용하겠다고 DHCP Server로 알림

--- 4) Ack : DHCP Server가 확인 신호보냄

-- 공격 유형

--- DHCP Starvation : 공격자가 DHCP Server의 모든 IP를 할당 받아서 공격

--- DHCP Spoofing : 공격자가 가짜 DHCP Server를 만들어 잘못된 네트워크 정보를 할당하는 공격

---- DHCP Server를 인증할 수 없기 때문에 가능한 공격

---- 공격에 성공하면, Gateway주소를 속여 Sniffing하거나 Pharming 공격을 할 수 있음

- SNMP(Simple Network Management Protocol)

-- OSI 7 Layer에 속하며, TCP/IP 기반의 네트워크에서 네트워크상의 각 Host에게서 정기적으로 여러 정보를 수집해 네트워크를 관리하기 위한 프로토콜

-- Master와 Agent로 구성됨

--- Master : 관리영역의 네트워크상의 정보가 집중되는 장비(정보의 요청이 시작됨)

--- Agent : 관리영역의 네트워크상에서 관리되는 장비

-- MIB(Management Information Base) : 각 Agent들이 가지고 있으며, Agent의 정보의 집합

-- SMI(Structure of Management Information) : MIB 내의 변수들이 어떤것인지 정의한 것

-- 메시지 전달 방식

--- Poliing(UDP 161) : Manager to Agent

--- Trap(UDP 162) : Agent to Manager

-- 종류

--- SNMPv1

--- SNMPv2 : 현재 많이 사용(SNMPv1에다가 보안기능을 추가(DES/MD5)

--- SNMPv3 : 구현의 복잡성 때문에 잘 사용되지는 X

-- SNMP 통신이 가능하려면 다음과 같은 조건이 만족되어야 함

--- SNMP의 Version이 일치해야 함

--- 서로간의 Community 값이 일치해야 함(기본값 public ; 이걸 바꿔줘야 안전함(외부로 네트워크 정보 새어나갈위험이있음))

--- PDU type이 동일해야 함(값의 범위는 0~4)

- Telnet

-- 원격 접속 프로토콜로써, 데이터가 평문으로 전달되기에 보안성이 떨어짐(TCP 23 Port)

-- 보안성을 위해 SSH(Secure Shell ; TCP 22 Port)을 이용

- FTP(File Transfer Protocol)

-- 원격 파일 전송 프로토콜(TCP 20/21 Port)

-- 연결 방식(나중에 자세히 다루는 Part있는듯)

--- Active 방식 / Passive 방식

- SMTP(Simple Mail Transfer Protocl)

-- 메일 전송 프로토콜(TCP 25 Port)

-- 다른 형식의 데이터를 전달하기 위해 MIME을 이용함(HTTP와 구성이 비슷)


2) Workgroup과 Domain

- Microsoft에서 제공하는 효율적인 디렉토리 관리를 위한 네트워크 모델

- Workgroup

-- 개별적인 관리모델로써, Workgroup 내의 시스템에 접근하려면 해당 시스템에 생성되어 있는 계정으로 인증받아야함(Client-to-Client이라고 보면될듯)

-- 전체적인 관리가 어려우며 비효율적임

- Domain

-- 통합적인 관리모델로써, Workgroup의 크기 가 커지면 각 시스템마다 계정을 생성해야하는 문제점을 고침

-- Domain 내의 한 Server(DC; Domain Controller)로 Domain 내의 모든 시스템의 사용권한 및 보안의 제어가 가능

--- DC에서 계정을 관리하기에, 각 시스템마다 동일한 계정으로 접근이 가능해짐

-- Domain의 각 시스템들은 다른 로컬 네트워크에 있을 수 있음


3) 터미널서비스 등 각종 원격관리 서비스

- SSH(Secure SHell)

-- 안전하지 않은 네트워크를 통해 원격 로그인하거나, 기타 안전한 네트워크를 이용하는데 안전한 쉘 프로토콜

- Windows Terminal Service

-- mstsc(기본값으로 TCP 3389 Port)

--- 보안을 위해 Port를 변경하는게 좋음

--- GUI로 작업이 가능하다는게 특징(화면 동기화는 지원되지는 X)

--- 동시접근가능한 계정의 수가 존재(많이 붙으면 버벅거리긴하던데)


4) 인터넷공유 및 NAT 원리, 활용

- 인터넷 공유(ICS ; Internet Connection Service)

-- 한 시스템에 네트워크 인터페이스가 2개 이상 존재할 때, 인터넷에 연결된 하나의 네트워크 인터페이스를 통해 인터넷에 접속하는 방법

-- ICS를 제공하는 시스템에서, DHCP를 통해 나머지 시스템에게 IP를 할당하고 NAT로 외부와 연결가능하게 끔함

--- 즉, Windows 시스템을 하나의 Router로 이용하는 기술

- NAT(Network Address Translation)

-- 사설 IP를 공인 IP와 Mapping하여 변환하는 프로토콜

--- IP주소의 고갈 / 설계의 효율성 / 보안의 강화 등의 이유로 사용함

-- 종류

--- Static NAT : 사설 IP와 공인 IP를 1:1로 걍 할당

--- Dynamic NAT : 공인 IP의 범위가 정해져있는 Pool에서 자동으로 공인 IP를 선택해서 사설 IP에 Mapping

--- NAT-PAT(NAT-Port Address Translation) : NAT에 Port주소를 Mapping해서 변환시키는 방법(Port Forwarding)




2. 네트워크 활용(6문제/20문제)

(1) IP Routing

1) IP Routing 종류 및 프로토콜

- IP Routing : 주어진 IP Packet을 목적지 주소 까지 전달하는 것으로 전달 경로의 설정이 핵심

- Routing Table : 목적지 네트워크로 데이터를 전달하기 위한 경로 정보 Database

-- Routing Table을 채우는 방법

--- Connected : 직접 Interface에 연결된 장비의 정보를 학습

--- Static Route : 관리자가 수동으로 목적지 네트워크에 대한 경로 정보를 입력해서 학습

--- Dynamic Route : Routing Protocol을 이용해, 장비 간 경로 정보를 주고 받아서 정보를 학습

--- Redistributed : 다른 Router와의 정보 교환(Routing Protocol 간의 정보 교환)

- Static Routing

-- Router(config) # ip route <Destination Network IP> <Subnet Mask> <다음 Router IP>

- Default Routing : Routing Table에 없는 목적지의 경우 보내는 경로

-- Router(config) # ip route 0.0.0.0 0.0.0.0 <Default Router IP>

- Dynamic Routing

-- Routing 경로가 Router와 Routing Protocol에 의해 설정이 되는 형태

-- Unicast Routing Protocol

--- IGP(Interior Gateway Protocol) ; AS 내부

---- Distance Vector 방식(목적지 네트워크까지 갈 수 있는 경로 중, 최적의 경로 선택)

----- RIP

---- Link-State 방식(LSA를 통해 전체 토폴로지 구성 후에, 리크마다 값매겨서 최적의 경로선택)

----- OSPF

--- EGP(Exterior Gateway Protocol) ; AS 간의

---- Advanced Distance Vector 방식

----- BGP

------ iBGP : 외부 AS의 경로를 내부에서 Routing

------ eBGP : AS와 AS사이에서 경로를 Routing

-- Multicast Routing Protocol

--- DVMRP
--- MOSPF

--- PIM

--- Dense&Spares

- Routing Protocol의 우선순위

-- Connected > ICMP redirect > Static > OSPF > RIP



(2)  네트워크 장비 이해

1) 랜카드, 허브, 스위치 및 브리지 기능

- LAN Card(NIC ; Network Interface Card)

-- Point-to-Point 토폴로지 형태

-- 신호 전달 방식 : Full Duplex / Half Duplex

- Hub

-- 1계층 장비

-- 신호 전달 방식 : Half Duplex

--- CD(Collision Domain)의 확장시키지만, CSMA/CD기법을 사용해서 예방과 해결가능

- Switch

-- 2계층 장비(Frame 뜯어보기 가능)

-- 신호 전달 방식 : Half Duplex / Full Duplex(CD가 분리됨)

--- Port마다 다르게 설정가능

-- Bridge와는 달리 H/W방식으로 Switching을 함(ASIC ; 저 위에서 언급함)

-- Switching하는 방식

--- Stored and Forwarding : 전체 Frame 모두 받고 오류 검출 후 전달

--- Cut-Through : Frame에서 목적지 주소만 보고 바로 전달

--- Fragment-Free : Frame의 64Byte까지만 받고 검사 후, 바로 전달

-- Flooding : 목적지 MAC주소가 자신의 MAC Table에 없거나, MAC Table이 가득 차면 Hub처럼 동작

--- Switch jamming : MAC Table 가득 차게만들어서, Hub처럼 동작하게 만들어 Sniffing하는 방법

-- MAC Table

--- Learning : 출발지 MAC 주소 확인 후, MAC Table에 없으면 저장

--- Aging : MAC 주소 기억하는 시간

- Bridge

-- 2계층 장비

-- Switch와는 달리 S/W적으로 구현됨

-- Switching하는 방식

--- Store and Forward(이거만 지원)


2) VLAN 구성 및 관리 

- VLAN(Virtual Local Area Network) : 물리적인 네트워크와 상관없이 논리적으로 네트워크를 분리하는 기술

- 기본적으로, VLAN 소속이 다르면 서로 통신이 불가능함(가능하게하려면 Router나 Routing Module이 필요)

-- Swtich 내부적으로 Frame에 VLAN정보가 있는 Tag를 붙여서 내보내는데, VLAN소속이 다르면 걍 버림

- Swtich의 모든 Port는 기본적으로 VLAN 1로 할당되어 있음

- VLAN이 설정된 Swtich의 각 Port의 구분

-- 그냥 Port(Access라고도 하는데??) : 지정된 VLAN Tag 정보만 허용되는 Port(Host로의 연결에 사용)

-- Trunk Port : VLAN Tag정보를 확인안하는 Port(다른 Switch와의 연결에 사용)

- Trunking Protocol(Tag를 어떻게 달것인가??)

-- 802.1Q : 표준 Protocol(Native VLAN 지원 O)

-- ISL : Cisco Only Protocol(Native VLAN 지원 X)

- Native VLAN

-- Trunk Port로 Frame이 나갈 때 특정 VLAN에 대한 정보를 Tagging하지 않고 전달

--- 예를들어 Native VLAN이 2라면, VLAN 2인 Frame은 걍 Tagging없이 걍 전달

- VTP(VLAN Trunking Protocol)

-- 이것도 Cisco Only Protocol

-- Trunk로 연결된 Switch들 간의 VLAN 설정 정보를 통합적으로 관리하기 위한 것

-- VLAN 정보가 공유되는 네트워크를 도메인이라고 지칭

-- VTP Mode

--- Server Mode : VLAN정보를 생성,변경,제거가 가능하며, 도메인 내에 퍼트리는 존재

--- Client Mode : VLAN정보를 받는 존재

--- Transparent Mode : 도메인 내에 있지만, 자신만의 VLAN정보를 생성하고 제거하는(말그대로 Server가 뿌리든말든 무시하고 내꺼만)


3) 라우터 설정

- User Mode (Router > )

↓ enable(en)

- Privileged Mode (Router # )

↓ configure terminal(conf t)

- Global Configuration Mode (Router(config)# )

-- 여기서 전체적인 설정 가능해

-- 걍 생략 할래 딱보면 알겠지뭐


4) 네트워크 장비를 이용한 네트워크 구성

- 네트워크의 구성은 안전성에 기반을 두어야 함

-- Hierarchical Model을 이용(안전성이 검증된 네트워크 모델이라네??)

--- Access : 말단에 직접 연결되는 계층으로 보통 L2 Swtich

--- Distribution : 네트워크 간의 연결(Router, L3 Switch 등)

--- Core(Backbone)  : 한 네트워크 내부의 모든 트래픽을 연결하고 관리하는 성능 좋은 Router, Switch

- 전용선 연결

-- VPN(Virtual Private Network)

-- Leased Line : 물리적 Cable을 이용하는...

-- 등등



(3) 무선통신

1) 이동/무선통신 보안

- 무선랜 유형

-- WPAN(Wireless Personal Area Network)

--- 단거리 Ad-Hoc방식 / Peer to Peer방식 (노트북과 마우스 등)

-- WLAN(Wireless Local Area Network)

--- 일반적으로 우리가 말하는 Wi-Fi

--- Half Duplex방식으로 신호가 전달되므로 CSMA/CA로 충돌을 회피함(※ Hub의 CSMA/CD와는 다름)

-- WMAN(Wireless Metropolitan Area Network)

--- 도시규모의 지역에서 무선 광대역 접속기능(WiMAX)

- 무선랜 접속 방식

-- Infrastructure Network

--- 유선 네트워크와 무선 네트워크를 연결하는 AP(Access Point) 장비에 의해 외부통신이 지원되는 WLAN

-- Ad-Hoc Network

--- WLAN 장비 사이에서 직접 통신이 일어날 뿐, 외부와의 연결은 X(노트북과 마우스의 연결)

- WLAN 보안 설정

-- WEP(Wireless Equivalent Privacy)

--- RC4 암호화 알고리즘을 사용(RC4자체가 알고리즘 자체에 취약점이 존재)

--- 정적인 암호화 키를 사용하기에 도청 몇 만개 당하면 걍 끝

--- 요새 안써

-- WPA(Wi-fi Protected Access), WPA2

--- WEP의 문제점을 보완

--- WPA : 인증(802.1X/PSK), 암호화(TKIP)

--- WPA2 : 인증(802.1X/PSK), 암호화(CCMP) ; CCMP가 AES를 사용하는거

--- WPA2도 TKIP을 사용가능한데, 그렇게되면 WPA와 다르게 없어짐



(4) 네트워크기반 프로그램 활용

1) Ping, Traceroute 등 네트워크기반 프로그램의 활용

- Ping(Packet Internet Grouper)

- Traceroute(Windows는 tracert)

-- IP의 TTL값 1씩 늘려가며 Time Exceeded 에러 메시지를 통해 목적지 까지의 경로를 추적

-- Unix/Linux : traceroute(UDP 생성)

-- Windows : tracert(ICMP Echo Request 생성)

-- Firewalking : Linux의 traceroute를 이용해 방화벽에 도착하는 port 번호 조작하여 방화벽을 우회하는 기법


2) Netstat, Tcpdump 등 활용

- Netstat

-- 시스템에서 제공되고 있는 서비스 정보(현재 open되어 있는 port정보) 확인

-- netstat -an

- Tcpdump

-- NIC로 입출력되는 트래픽을 사용자에게 출력해주는 분석 도구

-- tcpdump -i eth0 -w tcpdump.txt

-- tcpdump -i eth0 -c 5 ; 패킷 5개 받기

-- tcpdump -i eth0 icmp

-- tcpdump -i any dst host 192.168.100.1

-- tcpdump -i any src host 192.168.100.1

-- tcpdump -i any host 192.168.100.1


3) 네트워크 패킷분석 및 이해

- Tcpdump / Wireshark 등

- Interface가 Promiscuous로 동작해야 함

-- Swtich 환경인 경우에는 Flooding 하게끔 Switch Jamming 등.. 조치가 필요


4) 네트워크 문제의 원인분석과 장애처리




3. 네트워크 기반 공격 이해(5문제/20문제)

(1) 서비스 거부(DoS) 공격

1) 각종 DoS 공격원리와 대처 방법

- DoS(Denial of Service ; 서비스 방해(거부) 공격

-- 시스템이 정상적으로 서비스를 하지 못하게 해서, 일반적으로 서버를 다운시키는 공격

-- TCP/IP Protocol의 구조적 취약점을 이용한 공격이 많음

-- 시스템에 과부하를 주는 공격 / 네트워크 서비스 방해하는 공격


2) SYN Flooding, Smurfing 등 각종 flooding 공격의 원리, 대처

- SYN Flooding

-- 공격자가 임의로 자신의 IP를 속인뒤, 서버로 다량의 SYN 패킷을 보내서 서버를 대기 상태(SYN+ACK Sent)로 만드는 공격

-- 서버는 계속 ACK 패킷을 기다리는데 모든 자원을 쏟아붇게 되고 정상적인 서비스가 불가능해짐

-- 탐지 방법

--- SYN 패킷을 받으면 카운트를 늘리고 ACK를 보내면 카운트를 줄여서, 특정 기간 내에 카운트가 높으면 SYN Flooding

-- 조치 방법

--- Connect Queue Size를 증가 시킴(일시적인 대처법) ; Backlog Queue라고도 표현하네

--- SYN Cookie Size를 늘림

---- L4에서 SYN패킷을 보내면, 세션 테이블 생성없이 SYN/ACK(syn=cookie)를 보내고

---- 이에 대한 ACK(ack=cookie+1) 패킷을 받으면 서버와 세션을 연결해주는 방법

---- 물론, L4가 아닌 서버단에서도 가능

--- Router단에서 서브넷 외의 주소를 가지는 소스IP를 가지는 패킷을 차단

- UDP Flooding

-- 공격자가 UDP로 서버에 가상의 데이터를 연속적으로 보내서, 서버의 부하 및 네트워크 오버로드를 발생시키는 공격

-- 조치 방법 : 불필요한 UDP 서비스를 차단

- Smurfing(=smurf)

-- Broadcast 주소로 ICMP_REQUEST로 보내서 이에대한 ICMP_ECHO_REPLY를 공격지로 보내는 방법

-- 조치 방법

--- Router에서 Direct Broadcast 패킷은 차단(외부 네트워크에 Broadcast를 Direct Broadcast라고 하는 듯)

--- Host에서 Broadcast로 전달된 ICMP에 대하서는 응답안하게 설정

- Teardrop 공격

-- Header가 조작된 일련의 IP 패킷조각들을 전송해서 공격이 이루어짐

-- Offset값을 일부로 이전 값보다 작게 음수로 만들어서 보내므로, 재조립과정에서 에러가 발생→블루스크린

- Ping of Death

-- IP 패킷 최대 사이즈보다 큰 ICMP Request를 보내는 공격

-- 패킷 재조립 과정에서 Buffer Overflow 및 시스템 충돌이 일어남

-- IP 패킷 사이즈를 검증하는 설정을 추가

- Land Attack

-- 목적지, 출발지 IP와 Port가 모두 동일하게 보내는 공격

-- 시스템 자원을 고갈시켜 서비스 장애를 유발 시킴

-- 방화벽 단에서 필터링하도록 설정(요샌 다 되어 있지)


(2) 분산 서비스 거부 공격

1) DDoS 공격 원리 및 대처 방법

- DDoS(Distributed DoS) : 공격 시스템을 분산배치해서 동시에 대량 트래픽을 발생시키는 공격(Zombie PC)

-- 툴 : TRINOO / TFN(TFN2K) / Stacheldraht(슈탁셀드라트)

- DRDoS(Distributed Reflection DoS)


(3) 네트워크 스캐닝

1) Remote Finger Printing

- 외부에서 물리적인 장치면, 운영체제 유형등을 알아내는 기법


2) IP 스캔, Port 스캔

- IP 스캔

-- Host Discovery를 말하는 것 같음. 운영되고 있는 시스템을 찾아내는 기술

-- ICMP ping과 TCP Ping(SYN 등을 보내서 반응보기) 등으로 알아냄

- Port 스캔

-- 스캐닝 기법

--- Opening Scanning : TCP Connect Scanning

---- 걍 세션 성립시키는 방법(로그 남아서 위험)

---- Open Port : SYN/ACK(이거받고 ACK 보내서 세션 성립시켜)

---- Close Port : RST/ACK

--- Half-Open Scanning : SYN Scanning

---- Open Port: SYN/ACK(이거받고 걍 RST보내서 세션 성립막아)

---- Close Port : RST/ACK

--- Stealth Scanning : FIN / X-MAS / NULL Scanning

---- Open Port : 응답 X

---- Close Port : RST/ACK 응답

--- More Advanced Scanning : Spoofed Scanning(??)

-- 포트 스캐닝의 구분

--- TCP 포트 스캐닝 : 특정 Flag값을 설정한 뒤, 패킷을 보내고 그에 대항 응답으로 확인

--- UDP 포트 스캐닝

---- 포트가 열린 상태 : 아무런 응답 X

---- 포트가 닫힌 상태 : ICMP Unreachable(UDP 패킷이 목적지에 도달하지 못했다는 메시지)

---- ※ 패킷이 유실되도 아무런 응답이 없기에 신뢰성이 떨어짐



(4) IP Spoofing, Session Hijacking

1) IP Spoofing과 Session Hijacking의 원리 및 실제

- IP Spoofing

-- Trust Relation을 악용한 것(IP만 일치하는지 확인만 하고 세션 성립시켜버리는)

-- Step 1) 공격자가 세션을 뺏고자하는 호스트에게 DoS공격

-- Step 2) 공격자가 호스트의 IP로 자신을 속여 서버로 SYN 패킷을 보냄

-- Step 3) 서버가 보낸 SYN/ACK패킷을 호스트는 받지못하고, 공격자가 Brute Forcing으로 Sequence Number 맞춰서 ACK패킷보냄

-- Step 4) Session성립

-- 현재는 Sequence Number가 랜덤하게 변경되기에 공격이 불가

-- 대응책

--- 일단 Trust를 사용하지 않는게 좋아(Trust는 TCP Wrapper가 처리한다네??)

--- 불가피하게 구성할 경우에는 MAC주소를 Static으로 고정해(물론 MAC주소도 수정가능하지만 뭐...)

- ARP Spoofing(ARP cache Poisoning와 미묘한 차이)

-- 자신이 게이트웨이인거처럼 속여 네트워크 내의 모든 패킷이 자신을 거쳐 가도록 하는 공격

-- Step 1) 스니핑이 선행되어야 하며 랜카드는 Promiscuous 모드로 동작해야 함

-- Step 2) ARP Request Broadcast로 네트워크 상의 모든 IP와 MAC주소를 알아냄

-- Step 3) 공격자가 자신의 MAC주소를 게이트웨이(HUB/Switch)의 MAC주소로 속여서, 네트워크 상의 호스트들의 ARP Cahce를 업데이트시킴

-- Step 4) 모든 패킷이 자신에게 옴

-- 대응책

--- ARP Table을 정적으로 고정(arp -s <IP> <MAC>)

--- Ingress Filtering : 외부에서 오는 패킷이, 내부인척 하는 걸 필터링

--- Egress Filtering : 내부에서 나가는 패킷이, 내부의 주소가 아니면 필터링

--- ARP Storm 확인 : 다량의 ARP Reply가 지속적으로 발생하는걸 확인해서

- Session Hijacking

-- 서버와 클라이언트 사이의 Session을 가로채는 기술

-- 대응책

--- 데이터 전송시 암호화하여 내용 못보게 함

--- 지속적인 인증 시스템 구축

--- Ack Storm의 탐지



(5) 스니핑 및 암호화 프로토콜

1) 스니핑 공격 원리와 대처 방법

- 스니핑(Sniffing) 원리

-- NIC 모드를 Promiscuous로 바꾸고 네트워크 상의 모든 트래픽을 다 받아들임으로 스니핑 가능

-- Passive Sniffing

--- Hub로 연결된 네트워크에서는 Hub가 Flooding하게 데이터를 뿌리므로 걍 NIC만 Promiscuous로 바꾸면 스니핑 가능

-- Active Sniffing

--- Switch의 경우에는 따로 공격을 통해 Flooding하게끔 공격해야 가능

--- 꼭 Flooding하게만 만드는게 아니라, MITM(Man In The Middle) 형태로 만들어야 함

---- Switch Jamming

---- ARP Spoofing(ARP Cache Poisoning)

---- ICMP Redirect : Router에게 올바른 경로를 알려주는 용도인데 악용해서 자신에게 오게끔 경로를 수정

- 스니핑의 대응

-- 일단 Switching 환경으로 네트워크 설계

-- ARP Cache Table을 정적으로 운영

-- 데이터의 암호화 : SSL / PGP, S/MIME / SSH / VPN / IPsec



(6) 원격접속 및 공격

1) 각종 공격의 인지 및 이해

- 원격 공격

-- 원격 네트워크의 공격자가 피해 시스템에 접근하여 명령을 전달할 수단을 획득하는 공격

-- Backdoor, Null Session Hacking 등의 기법으로 대상 시스템을 제어할 수 있는 권한 등을 획득


2) Trojan, Exploit 등 식별, 대처

- Trojan

-- 트로이목마 악성 프로그램 또는 악성코드를 의미

- Backdoor

-- 시스템에 접근할 수 있는 뒷문

-- Back Orifice를 시작으로 제작되었고 현재 다양한 종류가 있음




4. 네트워크 장비 활용 보안기술(2~3문제/20문제)

(1) 침입 탐지시스템(IDS)의 이해

1) 원리, 종류, 작동방식, 특징, 단점

- IDS(Intrusion Detection System ; 침입 탐지 시스템)

-- 시스템에 대한 인가 되지 않은 행위와 비정상적인 행동을 탐지해서 관리자에게 알림

-- 일반적으로 침입 차단시스템(Firewall)과 결합해서 많이 쓰임

- IDS의 유형 : 데이터 소스 기준 IDS 시스템 분류

-- 호스트 기반 IDS(HIDS)

--- 각 호스트 내에서의 운영체제 감사자료와 시스템 로그 등을 통해 침입탐지를 하는 시스템

--- 감시 대상이 되는 서버에 각각 설치해야 함

--- NIDS에서 탐지 불가능한 침입을 탐지 가능 / 추가적인 하드웨어의 구매가 필요없기에 상대적으로 저렴

--- 호스트의 자원을 점유 / 운영체제 자체가 취약하면 보장하기 힘듬

-- 네트워크 기반 IDS(NIDS)

--- Promiscuous로 동작하는 NIC를 통해 네트워크 패킷을 캡쳐 후, 분석을 통한 침입탐지를 하는 시스템

--- 보통 Switch에서 업링크된 포트에 미러링을 구성하는 방식 사용

- IDS의 유형 : 침입탐지 판정 원리에 따른 분류

-- 오용탐지(Misuse Detection) : 정해진 공격 모델과 일치하는 경우를 침입으로 간주 ; 지식기반 침입 탐지라고도 함

-- 비정상행위(Anomaly Based) : 정해진 모델을 벗어나는 경우를 침입으로 간주 ; 행위기반 침입 탐지라고도 함


2) False Positive / Negative 이해

- False Positive(오탐) : 정상을 악의적인 것으로 판단

- False Negative(미탐) : 악의적인 트래픽을 정상으로 판단



(2) 침입 차단시스템(Firewall)의 이해

1) 원리, 종류, 작동방식, 특징, 단점

- 외부의 불법적인 침입으로부터 내부를 보호하고 외부로 부터 유해정보의 유입을 차단하기 위한 정책과 이를 지원하는 하드웨어/소프트웨어

- 주요 기능 : 접근 통제(패킷 필터링) / 감사 및 로깅 / 프로시 기능 / 보안정책 구현 / 사용자인증

- 침입 차단시스템의 종류

-- 패킷 필터링(Packet Filtering) 방식

--- Network Layer와 Transport Layer에서 동작하는 방식

--- 일반적으로 스크린 라우터를 이용한 방화벽 방식

-- 어플리케이션 게이트웨이(Application Gateway) 방식

--- Application Layer에서 동작하는 방식

--- 침입 차단시스템의 Proxy를 이용해 사용 가능

--- 외부 네트워크와 내부 네트워크가 오직 Proxy를 통해서만 연결

--- Application Layer에서 동작하므로 네트워크에 많은 부하를 줄 수 있고 하드웨어에 의존적임

http://iorora.web-bi.net/tech/ETCnetwork/firewall/type.htm

-- 서킷 게이트웨이(Circuit Gateway) 방식

--- 하나의 일반 게이트웨이로 모든 서비스가 처리 가능한 방식

--- Session Layer, Presentation Layer, Application Layer에서 동작

--- 게이트웨이 사용을 위해 수정된 클라이언트 모듈이 필요함 / 지원불가능한 프로토콜이 있을 수 있음

http://iorora.web-bi.net/tech/ETCnetwork/firewall/type.htm

-- 상태 검사(Stateful Inspection) 방식

--- 기본적으로 패킷 필터링 방식을 사용

--- 서버-클라이언트 모델을 유지시키면서 모든 Layer의 전후 상황에 대한 문맥을 제공

--- 패킷 필터링 방식, 응용 게이트웨이 방식, 서킷 게이트웨이 방식의 단점을 보완

--- 현재 방화벽 업계 표준이 되어간다네??

- 침입 차단시스템의 구축 형태

-- 베스천호스트(Bastion Host)

--- 보호된 네트워크에서 유일하게 외부로 노출되면서 내외부 네트워크의 연결점으로 사용되는 호스트

--- 방화벽 S/W가 설치되어 있으며, 보안의 취약점이 완벽히 제거 되어 있는 시스템

--- 일반 사용자 계정이 없어야 되며, 방화벽 S/W 외의 모든 유틸리티는 삭제 되어야 함

--- 베스천호스트가 손상되면 내부 네트워크로 무조건적인 패킷 전송이 가능(즉, 내부 네트워크 보호 불가능)

--- 2계층 공격 등을 통한 방화벽 우회공격에 취약

http://dlrudwo.tistory.com/entry/Firewall

-- 스크린 라우터(Screen Router)

--- 일반적인 Router 기능 + 패킷 헤더를 보고 패킷 통과 여부를 제어할 수 있는 필터링(스크린) 기능

--- Network Layer와 Transport Layer의 IP주소, Port주소에 대해서만 접근 제어

--- 로깅과  감시가 힘듬 / 패킷 필터링 규칙에 대한 검증이 어려움

http://dlrudwo.tistory.com/entry/Firewall

-- 듀얼 홈 게이트웨이(Dual Home Gateway)

--- 두 개의 랜카드를 가진 베스천호스트구조(하나는 내부 네트워크, 나머지 하나는 외부 네트워크와 연결)

--- 베스천호스트가 손상되면 내부 네트워크는 외부 네트워크와 완전히 차단됨

http://dlrudwo.tistory.com/entry/Firewall

-- 스크린 호스트 게이트웨이(Screen Host Gateway)

--- 스크린 라우터 + 베스천호스트의 구조를 가짐

--- 1차적으로 스크린 라우터가 Network Layer와 Transport Layer에 대해 필터링하고, 2차적으로 베스천호스트가 Application Layer에 대해 점검

---- 외부에서 들어오는 패킷은 스크린라우터가 필터링 한 후 베스천호스트로 몰아줌(이 경로가 잘못되면 끝임)

--- 따라서 매우 안전하며, 가장 많이 사용되는 시스템

--- 구축 비용이 많이들며, 위에 설명했드시 스크린 라우터의 라우팅 테이블이 변경되면 끝임

http://dlrudwo.tistory.com/entry/Firewall

-- 스크린 서브넷 게이트웨이(Screen Subnet Gateway)

--- 스크린 호스트 게이트웨이 + 듀얼 홈 게이트웨이의 구조를 가짐

--- 두 개의 스크린 라우터와, 하나의 베스천 호스트로 구성되며 스키린 서브넷이 DMZ에 놓이게 되는 방식

--- 내부쪽의 라우터가 듀얼 홈 게이트웨이 구조라고보면될듯

--- 가장 강력한 보안이며 융통성이 띄어나지만 구축이 어렵고 비용이 많이들며 서비스 속도가 느림

http://dlrudwo.tistory.com/entry/Firewall



(3) 가상사설망(VPN)의 이해

1) 원리, 작동방식, 특징, 구성, 단점

- VPN(Virtual Private Network ; 가상사설망)

-- 공용망을 마치 전용선처럼 이용하기 위해 사용하는 기술

-- 전송되는 데이터에 암호화와 인증 등 보안기능을 제공

- VPN에 필요한 기술

-- 터널링 기술 : Ent-to-End 전용회선 연결과 같은 효과가 있고, 두 종단간 사이에 가상적 터널을 형성하는 기술로써 프로토콜로 구현

-- 키(Key) 관리기술 : VPN의 보안적 요소들에 사용되는 기술들. 대표적으로 ISAKMP, OAKLEY 등

-- VPN 관리기술 : 효과적이고 안정적으로 VPN 서비스를 지원하는 기술이며 QoS를 보장하는 기술

- 장/단점

-- 폐쇄망이기에 외부에 노출 X / 신규 노드 확장이 빠름 / 전송회선 비용 절감 / 네트워크 확장 용이

-- 공중망을 이용하기에 대역폭 보장X / 모든 장비가 호환되지 X

- 터널링 프로토콜

-- 용어 정리

--- 터널링 : 송수신자 사이의 전송로에 외부로부터의 침입을 막기위해 일종의 파이프를 구성하는 기술

---- 파이프는 터널링을 지원하는 프로토콜을 사용해 구현되며 보안기능을 지원

--- 페이로드(Payload) : 터널링 되는 데이터

-- PPTP(Point-to-Point Tunneling Protocol)

-- L2TP(Layer 2 Tunneling Protocol)

-- Sock v5

-- IPsec

--- Network Layer에서 동작하는 보안 매커니즘(프로토콜)(업계 표준)

--- 인증 / 접근제어/ 무결성/ 기밀성 / 재전송방지 등을 지원

--- 사용하는 프로토콜

---- AH(Authentication Header) : 데이터 무결성 보장과 IP 패킷의 인증에 사용되는 프로토콜

----- Transport Mode : 원래의 IP Header를 그대로 사용해서 전송

----- Tunnel Mode : 데이터 그램 전체를 AH로 캡슐화하고, 다시 새로운 IP Header를 캡슐화해서 전송

------ 새롭게 IP Header를 만드므로 송수신자를 새로 지정이 가능(주로 보안 게이트웨이끼리 지정)

http://www.amaranten.com/support/user%20guide/VPN/IPSec_Basics/Overview.htm

---- ESP(Encapsulating Security Payload) : AH와 동일한 인증 뿐만아니라 데이터의 기밀성 보장이 가능한 프로토콜

----- ESP단독으로 사용하거나 ESP + AH 조합된 형식으로 사용함

----- Transport Mode

----- Tunnel Mode

http://www.amaranten.com/support/user%20guide/VPN/IPSec_Basics/Overview.htm

---- IKE(Internet Key Exchange) : 키 관리 프로토콜로써, ISAKMP과 OAKLEY를 결합한 것(ISAKMP/OAKLEY라고 표현하기도함)

---- AH와 ESP의 비교

---- AH : 패킷 인증 기능 / 단독사용가능

---- ESP : 패킷 암호화 기능 + 패킷 인증 기능 / AH와 병행사용

--- SSL VPN : 근래들어 많이 쓰는 방법으로 저 저렴하고 보안을 강력하게 할 수 있다네??

- 너무 어렵다 나중에 따로 정리해야겠다(게다가 PPTP, L2TP 같은건 생략했어, 시험이라 비중높은 IPsec만 다뤄야겠다 여기서는)



(4) 라우터보안 설정

1) 라우터 자세 보안설정

- User Mode에서 enable로 Privilieged Mode 변경시 패스워드

-- Router(config)# enable {secret | password} 패스워드

-- Telnet 접속 시, 반드시 해야하는 작업

- Console로 접속시 패스워드

-- i) 패스워드로 인증

--- Router(config)#line console 0

--- Router(config-if)#login

--- Router(config-if)#password 패스워드

-- ii) Local User로 인증(ID/PW로 인증)

--- Router(config)#username 사용자ID {password | secret} 비밀번호 (계정생성)

--- Router(config)#line console 0

--- Router(config-if)#login local

- VTY(Telnet) 접근 인증

-- 위에서 한 enable 패스워드 걸어줘야함

-- i) 패스워드로 인증

--- Router(config)#line vty 0 4

--- Router(config-line)#loign

--- Router(config-line)#password 패스워드

-- ii) Local User로 인증(ID/PW로 인증)

--- Router(config)#username 사용자ID {password | secret} 비밀번호 (계정생성)

--- Router(config)#line vty 0 4

--- Router(config-line)#loign local



(5) 각 장비의 로그 및 패킷분석을 통한 공격방식의 이해 및 대처

1) 호스트, IDS, 방화벽, 라우터 등 각종 네트워크 장비 로그 및 패킷 분석

- 뭐 어찌해야될지 모르겠네 로그랑 패킷 분석은 여기저기서 다룰꺼라 걍 여기선 제껴




5. 네트워크 보안 동향(1~2문제/20문제)

(1) 최근 네트워크 침해사고 이해

1) 분산반사 서비스 거부 공격(DRDoS)

- DRDoS(Distributed Reflection DoS)

- DDoS와의 차이점

-- 출발지 주소를 속임(IP Spoof)

-- 공격의 근원지 추적하기가 힘듬

-- Bot을 이용할 필요가없음

-- 정상적인 서비스 응답 패킷으로 공격함

- 대응

-- ISP에서 출발지가 변조된 공격 패킷을 차단(Egress Filtering)

-- 짧은 시간 동안에 일어나는 연결 실패를 필터링해서, 해당 출발지 IP를 블랙리스트 처리(어차피 변조된 IP주소일텐데...?)


2) 봇넷을 이용한 공격

- Bot : RoBot의 약자로, 사용자나 다른 프로그램을 흉내내는 프로그램

- Zombie PC : Bot에 감염되어 공격자로 부터 제어되는 시스템

- Botnet : Zombie PC가 이루는 네트워크

-- 중앙집중형 구조 : Bot 관리자가 중앙에 위치해서, Bot에게 명령 제어하는 구성

-- 분산형 구조 : P2P방식으로 C&C 서버 없이 Zombie PC 끼리 상호 연결되어 동작하는 네트워크 구성

-- 서버 클라이언트 구조 : 서버측에 Bot 관리자가 있고, 클라이언트가 Zomebie PC인 구성

- 공격방식

-- 공격을 위해 Bot을 개발하고 다양한 경로로 Zombie PC를 만들어냄

-- 공격을 위한 C&C 서버를 통해 IRC 채널을 활성화해 Zombie PC의 접속을 기다림

-- Zombie PC가 IRC 채널에 접속하면, Zombie PC는 명령을 전달 받기 위해 대기함


(2) 최근 네트워크 보안 솔루션

1) 역추적시스템(Traceback)

- 공격을 시도하는 공격자의 네트워크 상의 실제 위치를 실시간으로 추적하는 기술

- 사람에 의한 역추적

-- 시스템에 남아 있는 Log를 분석해 역추적 / Log를 찾아내고 분석하는데 많은 시간과 인력이 필요

- TCP 연결 역추적

-- 호스트 기반 연결 역추적

--- 호스트에 역추적을 위한 모듈을 설치해, 호스트에서 발생하는 Log등 다양한 정보를 통해 역추적

--- 네트워크 상의 모든 호스트에 역추적 모듈이 설치되어야 함

--- 종류 : CIS(Caller Identification System), AIAA(Autonomous Intrusion Analysis Agent)

-- 네트워크 기반 연결 역추적

--- 네트워크상에서 전달되는 패킷에서 정보를 추출하여 역추적

--- 네트워크에서 발생하는 모든 연결정보를 지속적으로 보유해야 함

--- 종류 : Thumbprints Based Algorithm, Timing Based Algorithm, SWT(Sleepy Watermark Tracing)

- IP 패킷 역추적


2) 침입방지시스템(IPS)

- IPS(Intrusion Prevention System) : 침입 탐지와 차단을 함께 수행하는 실시간 보안 장비

- Firewall은 Network Layer와 Transport Layer를 검사하지만, IDS/IPS은 Network Layer부터 Application Layer까지 검사

- ※ 침입탐지시스템(IDS) / 침입차단시스템(Firewall ; 방화벽) / 침입방지시스템(IPS)


3) ESM(Enterprise Security Management)

- 전사적 보안관리 솔루션으로, IDS/IPS, Switch, Router등 각종 이기종 보안솔루션을 중앙에서 하나의 콘솔로 관리하는 보안솔루션

- 동일 제품의 경우에는 운영 관리 기능이 좋겠지만, 이기종 제품이나 타사 제품에 대해서는 원격관리나 로그분석 기능 정도 제공하는 수준


4) NAC(Network Access Control)

- 네트워크 접근제어

- 네트워크에 접근하는 모든 기기의 보안상태를 점검하여, 안전이 확인된 기기만 접근시키는 보안 솔루션

- 안전이 취약한 기기를 발생했다고 해서 능동적으로 제거를 하는 솔루션은 아님

- 백신의 설치 유무 / 업데이트 유무 등 강제적인 의무사항을 이행했는지만 확인함(강제성만 띔)

 

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

자바 학습 환경 준비

  Java를 이용한 프로그래밍을 시작하기 전에 갖추어야할 조건들이 몇가지 있는데 그 중 하나가 PC 내에 개발환경을 구성하기 위해서 필요로 하는 JAVA JDK 이다. 개발환경이란 자바로 프로그램을 만들 수 있는 컴퓨터 환경을 말한다. 즉 프로그램 소스를 작성하는 툴, 작성한 소스를 컴파일 하는 프로그램 등을 설치해야 하는 것이다.  

1. www.oracle.com 에서 JDK 설치 파일을 다운 받습니다. Java SE 다운로드 페이지에서 Oracle Binary Code License Agreement for Java SE 에 동의한 후 자신의 플랫폼에 맞는 설치 파일을 다운로드 합니다. 여기서는 윈도우즈에 설치할 것이기 때문에 32ibt 또는 64bit 중에서 선택을 합니다. ( jdk-8u111-windows-x64.exe ) 참고로 64bit 컴퓨터에는 32bit JDK도 설치할 수 있습니다. 과거에 개발된 프로그램을 유지보수할 경우 구버전의 JDK 가 필요할 경우가 있습니다. 이런 경우 필요한 버전의 JDK를 여러 종류 설치해 두고 사용할 수 있습니다. 다른 방법으로는 상위버전의 JDK 를 설치하고 컴파일시에 생성되는 class 파일을 특정 VM version 으로 지정하여 컴파일 하는 방법도 사용할 수 있습니다. 

2. 설치할 곳을 결정합니다. 기본 설치 위치는 C:\Program Files\Java  이지만, 여기서는 C:\util\java 에 설치 하겠습니다. 예전에는 설치시 "Program Files" 처럼 폴더명에 스페이스가 있거나, 한글이 있을 경우 응용프로그램이 문제를 일으키는 경우가 있었습니다. 요즘은 문제가 되는 경우가 잘 없는 것 같습니다. 설치 위치는 자신이 마음에드는 곳에 설치하거나 C 드라이브의 용량등으로 결정되는것 같습니다. 설치 프로그램을 더블클릭하여 실행합니다. 환영화면에서 Next>버튼을 누릅니다.

 

 3. 설치위치를 지정하는 곳입니다. Change... 버튼을 눌러 위치를 지정합니다. 설치될 항목을 선택할 수 있습니다. JDK, 소스파일, JRE 가 설치되는데 기본으로 모두 설치합니다. 소스파일이 설치가 되면 이클립스와 같은 개발툴에서 개발 도중 소스를 볼 수가 있습니다. 다음에 Next> 버튼을 누릅니다.

 

 4. Change... 버튼을 눌렀을때 설치위치를 고르는 화면 입니다. 위치를 선택한 후 OK 를 누릅니다.

 

 5. 진행 막대가 보입니다.

 

 6. 설치중 새로운 창이 뜨면서 jre 를 설치하라고 합니다. 여기서 jre의 위치를 변경 버튼을 눌러서 바꿔줍니다. 그리고나서 다음 버튼을 누릅니다.

 

 7. jre 설치 진행중입니다. 인터넷이 연결되어 있지 않을 경우 JRE 설치에 문제가 발생하는 경우가 있었습니다. 설치가 더이상 진행되지 않고 현재 상태로 멈춰 버리는 경우인데, 윈도우 작업관리자에서 강제로 종료하면 jre는 설치가 안되고  JDK 는 설치가 되어 있는 상태가 됩니다. jre가 필요 없다면 이후 JDK는 제대로 동작을 하였습니다.

 

 8. 설치가 모두 완료 되었습니다. Close 버튼을 눌러서 마칩니다.

 

 9. 설치 확인을 해봅니다. Window +R 버튼을 눌러  cmd 를 입력해서 명령창을 띄웁니다. 프롬프트에서 java -version 을 입력해서 출력 내용을 확인합니다. 아래와 같이 나오면 제대로 설치가 된것 입니다.

출력된 내용을 보면 Java(TM) SE Runtime Environment 라고 표시된 것이 보입니다. JRE 의 java 프로그램이 실행된 것입니다. JRE의 실행파일이 있는 폴더가 자동으로 PATH에 등록이 된 것입니다. 필요하다면 JDK 가 설치된 곳 아래의 bin 디렉토리도 PATH 에 등록을 해두면 되겠습니다. JDK 가 설치된 폴더를 JAVA_HOME 환경 변수에 등록해 두어도 됩니다. JAVA_HOME 환경변수를 필요로 하는 응용프로그램들이 종종 있습니다. 물론 필요할 때 등록해도 됩니다.

JDK 를 설치하였는데, 중간에 jre 도 설치가 되었습니다. 두 가지를 간단히 설명을 하겠습니다. JDK 는 Java Development Kit 의 약자이고, jre는 Java Runtime Environment 의 약자 입니다. 말 그대로  JDK 는 개발용입니다. Java 소스코드를 컴파일 하는 기능이 있습니다. jre 실행환경이라고 불리는데, 컴파일된  class 파일을 실행하는 기능을 가집니다. 자바 관련 프로그램들이 JDK 가 필요한 것도 있고,  jre 만 있어도 되는 것도 있습니다. 보통 설치시 뭐가 필요합니다. 하는 메세지가 나오게 됩니다.

개발시에는 에러메세지와 친숙해질 필요가 있습니다. 에러메세지가 나오면 창을 닫는데 급급한 사람들이 많은데, 에러메세지를 잘 읽고 대처법을 찾아보는게 중요합니다. 개발을 하면 당연히 에러를 찾아서 수정하는 디버깅을 하게 됩니다. 디버깅을 도와주는 많은 툴과 기법들이 있지만, 경험만큼 중요한게 없는것 같습니다. 많은 에러메세지를 만나고 디버깅을 하다보면 감이라는게 생기는것 같습니다. 애매한 에러메세지들, 같은 메세지이지만 서로 원인이 다른 경우 등 디버깅이 어려운 경우더라도, 이러한 상황에서 이러한 에러는 이러한 경우에 주로 발생하더라 라는 경험이 더욱 빠른 디버깅을 도와 주게 됩니다.

Programming 의 P

  대부분의 집 현관에 있는 디지털 도어락에도 프로그램이 있다. 문을 열기 위해 비밀번호를 입력한다. 그러면 도어락에 있는 프로그램이 저장되어 있는 비밀번호와 동일한지를 확인해 본다. 만약 저장되어 있는 값과 입력한 비밀번호가 동일하면 문이 열린다.

프로그램을 작성하는 것은 이 디지털 도어락과 전혀 다르지 않다.

1. 미리 만들어 놓은 어떤 프로그램에 비밀번호를 전달하여 결과를 기다릴 수도 있고
2. 비밀번호가 맞는지 확인하는 것을 직접 작성할 수도 있다.

프로그래밍을 한다는 것은 모두 이러한 작업을 반복적으로 수행하면서 어떤 기능들을 만들어 내는 것이다.

  이렇게 어떤 값을 입력하고, 결과를 제공해 주는 프로그램을 만들려면 언어가 필요하다. 사람과 컴퓨터 사이에도 언어가 필요하다. 이러한 언어를 프로그램밍 언어라고 한다. Java라는 것도 프로그래밍 언어의 일종이다.

  인터넷을 통해서 매일 접하는 웹 페이지를 구성하는 것은 HTML이며, 이 페이지가 살아서 움직이도록 하려면 자바스크립트라는 것을 사용한다. (이름은 비슷하지만, 자바와 자바스크립트는 전혀 다르다) 이 웹 페이지에서 어떤 정보를 요청하기 위해서 클릭을 하면 서버에 데이터를 요청한다. 그러면 서버는 필요한 데이터를 가공해서 화면에 보여준다. 여기서 서버의 프로그램에 해당하는 부분에서 데이터를 가공하여 화면에 보여 줄 수 있도록 한다. 이 때 사용하는 것이 바로 자바, C, 파이선, PHP 등등의 프로그래밍 언어들이다.

 

자바 프로그램의 메소드 구성

  위에서 얘기했던 도어락의 비밀번호를 확인하는 것을 자바 프로그램으로 작성해 보도록 하자.

첫번째 입력한 비밀번호가 필요할 것이며, 두번째는 입력한 비밀번호가 저장된 비밀번호와 일치여부를 체크하는 부분이 있을 것이며, 마지막으로 결과값이 있을 것이다.

즉, password라는 비밀번호가 넘어가고, 중간에 계산을 하는 부분이 checkPassword()라는 것이다. 그리고, 그 결과로 boolean이라는 것이 나온다.

  이렇게 어떤 값을 주고 결과를 넘겨주는 것을 자바에서는 메소드라고 한다. 즉, checkPassword()라는 것은 메소드 이름이 된다. 여기서 password 라는 것은 매개 변수라고 부른다. 이 매개변수는 필수는 아니다. 마지막으로 boolean이라는 것을 리턴 타입이라고 부른다. 지금까지의 내용을 자바로 바꾸어보면 다음처럼 될것이다.

public boolean checkPassword(String password){

// 비밀번호 검증

}

public을 접근 제어자라고 한다는 것까지 기억해두고 다음으로 넘어가자

boolean : 리턴타입
checkPassword : 메소드
String password : 매개변수

 

자바의 가장 작은 단위 클래스 

  checkPassword() 라는 메소드는 소속이 필요하다. 자바 프로그램의 메소드는 홀로 존재 할 수는 없고, 반드시 클래스라는 것 안에 포함되어야 한다.

public class DoorLockManager {

}

  여기서 DoorLockManager라고 적혀있는 것이 바로 클래스 이며, 클래스 이름 앞에는 반드시 class 라는 단어가 있어야 한다. 여기에도 메소드 앞에서 보았던 접근제어자 public 이 있는 점만 확인하도록 하자. 클래스를 선언하려면 "접근제어자 class 클래스 이름" 순서라는 것을 기억하자.

  그러면 지금까지 내용을 모아보면 다음과 같을 것이다.

public class DoorLockManager {

public boolean checkPassword(String password){

}

}

이렇게 클래스 안에 메소드를 위치시키면 된다. 하나의 클래스 안에는 여러개의 메소드가 존재할 수 있다. 도어락을 생각해보면 비밀번호를 변경할 수도 있고, 잊어버렸을 경우 초기화 하는 기능도 있다. 바로 이 비밀번호 변경과 초기화 기능이 각각의 메소드 형태로 존재하게 되는 것이다.

public class DoorLockManager {

public boolean checkPassword(String password){

}

public void setPassword(String password){

}

public void resetPassword(){

}

}

새롭게 추가된 비밀번호 변경(setPassword)과 초기화(resetPassword) 메소드의 리턴 타입으로 void 라고 정의되어 있는 것을 볼 수 있다. void 라는 리턴 타입은 이 메소드가 수행되어도 아무것도 돌려주는 것이 없다는 뜻이다.

 

클래스는 상태를 갖고 있어야 한다. 

  지금까지 얘기해온 클래스라는 것은 다음의 조건을 만족해야만 한다.

  클래스는 상태(state)와 행동(behavior)이 있어야만 한다.

그리 어려운 내용은 아니고, 지금까지 알아본 메소드가 바로 "행동"이다. 그렇다면 상태는? 상태라는 것은 클래스의 특성을 결정짓는 것을 말한다. 이 상태는 클래스 안에, 메소드 밖에 정의한다.

  앞에서 살펴본 클래스에는 다음과 같이 currentPassword라는 값이 존재할 수 있다.

public class DoorLockManager {

String currentPassword;

public boolean checkPassword(String password){

}

}

  이와 같이 어떤 값을 포함할 currentPassword와 같은 것을 변수라고 한다. 이 변수가 클래스의 특성을 결정짓는 "상태"에 해당한다.

  객체지향을 이야기할 때 앞서 정의한 것처럼,

클래스는 상태(state)와 행동(behavior)이 있어야만 한다.

라고 보통 이야기 하지만, 꼭 "상태"와 "행동"이 있어야 하는 것은 아니다. 클래스를 만들었는데  변수나 메소드가 없다고 클래스가 아니라고 할수는 없기 때문이다.

 

프로그램 기본 =를 이해하자. 

  일반적으로 산수를 할 때,

  1+2=3

  과 같이 계산을 왼쪽에, 결과를 우측에 지정한다. 하지만 프로그램을 할 때는 반대다. 프로그램에서는 아래와 같이 왼쪽에 대입을 할 변수를, 오른쪽에 계산식을 적어 주어야만 한다.

  int a;
  a=1+2;

  이렇게 적어주면 a라는 변수에 3이라는 값이 들어가게 된다. 여기서 int a 라고 적어준것은 a라는 정수형 변수를 선언한 것이다. 변수를 선언할 때는

  타입 변수명;

  과 같이 지정해 주면 된다.

public class Calculator {

public int add(int num1, int num2) {

int sum;

sum = num1 + num2;

return sum;

}

}

  위 코드에서 확인 할 수 있는 것처럼 a=1+2; 처럼 프로그램의 연산에서는 숫자만 더할 수 있는 것이 아니라, 숫자를 나타내는 변수도 더할 수가 있다.

  add() 메소드의 가장 마지막 줄에 있는 return이라는 것은 어떤 값을 돌려줄 때 지정한다.

  지금까지 위에 나온 소스들을 보면 줄 끝에 세미콜론(;)을 확인 할 수 있다. 자바에서 줄의 끝에 뜻하는 표시이다.

 

자바에서 사용하는 기본적인 사칙연산

더하기 +  , 빼기 -  , 곱하기 *  , 나누기 /

 

모든 프로그래밍 언어에는 예약어라는 것이 있다. 

public class Calculator {

public int add(int num1, int num2) {

int sum;

sum = num1 + num2;

return sum;

}

}

여기에 있는 예약어에는 public, class, int, return 이다. 예약어라는 것은 "예약되어 있으니까 다른 용도로 쓰지 못하는 단어"라고 이해하면 된다. 식당에서 예약석에 먼저온 다른 손님을 앉히지 않는 것 처럼 말이다. 일단 여기서는,

  예약어라는 것이 있고,

  예약어는 클래스, 메소드, 변수의 이름으로 사용할 수 없다.

는 정도만 기억하도록 하자.

 

연습문제

1. Calculator 라는 이름을 갖는 클래스를 텍스트 파일에 만들어 보자.

2. 다음과 같은 메소드를 만들어 보자(단, 그 결과를 리턴해 주도록 만들자)

   빼기 : public int subtract(int num1, int num2)
   곱하기 : public int multiply(int num1, int num2)
   나누기 : public int divide(int num1, int num2)

 

정리

1. 클래스란?

2. 메소드란?

3. 메소드의 매개 변수는 어디에 적어주지?

4. 메소드 이름 앞에 꼭 적어 줘야 하는 건?

5. 클래스가 갖고 있어야 하는 두 가지는?

6. 메소드에서 결과를 돌려주기 위해 사용하는 예약어는?

여기서는 오라클에 간단히 데이터를 입력/수정/삭제 테스트를 위한 샘플 소스를 보여준다. 귀찮더라고 입력해보고 실제로 되는지 꼭 확인 하시요!


1. 입력 테스트 소스

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

 

public class InsertTest {

    public static void main(String[] args) {

        //1. 4가지 정보

        String driver ="oracle.jdbc.driver.OracleDriver";    // ojdbc6_g.jar 파일내의 핵심 클래스

        String url = "jdbc:oracle:thin:@localhost:1521:xe"; //DB가 설치된 정보 

        String userid = "user01";

        String passwd = "1234";

          

        //2. 드라이버 로딩(OracleDriver 메모리에 올리는 작업)

        //문자열 형태의 클래스를 메모리에 올리는 방법. (new 사용안함)

        try {

            Class.forName(driver);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

        

        //3. Connection 맺기(DB 연결)

        Connection con = null;

        PreparedStatement pstmt = null;

        try {

            con = DriverManager.getConnection(url,userid,passwd);

            

            //4. SQL문 작성 *주의* Java코드는 ; 안함 

            String sql = "insert into person ( per_no, name,age,address) values( ?, ?, ?, ?) "; //?는 값을 나중에 입력한다는 뜻

            

            //5. sql문 전송하는 객체인 PreparedStatement 생성

            pstmt = con.prepareStatement(sql);

            

            //6. ?에 값설정

            pstmt.setInt(1, 1); //1부터 시작

            pstmt.setString(2, "유재석"); //1부터 시작

            pstmt.setInt(3, 44);

            pstmt.setString(4, "서울");

            

            //7. sql 전송

            /* 전송메소드는 2가지가 있다.

             * 

             *  (1) ResultSet rs = pstmt.executeQuery()

             *  -select 문에서 사용

             *  -ResultSet는 select문의 실행된 결과를 참조하는 객체.

             *  

             *  

             *  (2) int n = pstmt.executeUpdate()

             *  - insert , delete, update 문에서 사용

             *  - n 값은 실행된 레코드 갯수 ex) n개의 행에 적용되었습니다.

             */

            

            int n = pstmt.executeUpdate();

            if(n==1){

                System.out.println("성공");

            }else{

                System.out.println("실패");

            }            

            

        } catch (SQLException e) {

            e.printStackTrace();

        }finally {

            // Connection, PreparedStatment 자원을 반납

            // 실행 역순으로 반납

            

            try {

                if(pstmt != null) pstmt.close();

                if(pstmt != null) con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}


2. 수정 테스트 소스

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

 

public class UpdateTest {

 

    public static void main(String[] args) {

 

 

        //1. 4가지 정보

    

        String driver ="oracle.jdbc.driver.OracleDriver";    // ojdbc6_g.jar 파일내의 핵심 클래스

        String url = "jdbc:oracle:thin:@localhost:1521:xe"; //DB가 설치된 정보 

        String userid = "user01";

        String passwd = "1234";

        

        

        //2. 드라이버 로딩(OracleDriver 메모리에 올리는 작업)

        //문자열 형태의 클래스를 메모리에 올리는 방법. (new 사용안함)

        try {

            Class.forName(driver);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

        

        //3. Connection 맺기(DB 연결)

        Connection con = null;

        PreparedStatement pstmt = null;

        try {

            con = DriverManager.getConnection(url,userid,passwd);

            

            //4. SQL문 작성 *주의* Java코드는 ; 안함 

            String sql = "update person set age = ?, address = ? where name= ?"; //?는 값을 나중에 입력한다는 뜻

            

            //5. sql문 전송하는 객체인 PreparedStatement 생성

            pstmt = con.prepareStatement(sql);

            

            //6. ?에 값설정

            pstmt.setInt(1, 35); //1부터 시작0

            pstmt.setString(2, "경기");

            pstmt.setString(3, "유재석");

            

            //7. sql 전송

            /* 전송메소드는 2가지가 있다.

             * 

             *  (1) ResultSet rs = pstmt.executeQuery()

             *  -select 문에서 사용

             *  -ResultSet는 select문의 실행된 결과를 참조하는 객체.

             *  

             *  

             *  (2) int n = pstmt.executeUpdate()

             *  - insert , delete, update 문에서 사용

             *  - n 값은 실행된 레코드 갯수 ex) n개의 행에 적용되었습니다.

             */

            

            int n = pstmt.executeUpdate();

            if(n==1){

                System.out.println("성공");

            }else{

                System.out.println("실패");

            }            

            

        } catch (SQLException e) {

            e.printStackTrace();

        }finally {

            // Connection, PreparedStatment 자원을 반납

            // 실행 역순으로 반납

            

            try {

                if(pstmt != null) pstmt.close();

                if(pstmt != null) con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

 

        }

 

    }

 

}


3. 삭제 테스트 소스

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

 

public class DeleteTest {

 

    public static void main(String[] args) {

 

 

        //1. 4가지 정보

    

        String driver ="oracle.jdbc.driver.OracleDriver";    // ojdbc6_g.jar 파일내의 핵심 클래스

        String url = "jdbc:oracle:thin:@localhost:1521:xe"; //DB가 설치된 정보 

        String userid = "user01";

        String passwd = "1234";

        

        

        //2. 드라이버 로딩(OracleDriver 메모리에 올리는 작업)

        //문자열 형태의 클래스를 메모리에 올리는 방법. (new 사용안함)

        try {

            Class.forName(driver);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

        

        //3. Connection 맺기(DB 연결)

        Connection con = null;

        PreparedStatement pstmt = null;

        try {

            con = DriverManager.getConnection(url,userid,passwd);

            

            //4. SQL문 작성 *주의* Java코드는 ; 안함 

            String sql = "delete from person where name=?"; //?는 값을 나중에 입력한다는 뜻

            

            //5. sql문 전송하는 객체인 PreparedStatement 생성

            pstmt = con.prepareStatement(sql);

            

            //6. ?에 값설정

            pstmt.setString(1, "유재석"); //1부터 시작

            

            //7. sql 전송

            /* 전송메소드는 2가지가 있다.

             * 

             *  (1) ResultSet rs = pstmt.executeQuery()

             *  -select 문에서 사용

             *  -ResultSet는 select문의 실행된 결과를 참조하는 객체.

             *  

             *  

             *  (2) int n = pstmt.executeUpdate()

             *  - insert , delete, update 문에서 사용

             *  - n 값은 실행된 레코드 갯수 ex) n개의 행에 적용되었습니다.

             */

            

            int n = pstmt.executeUpdate();

            if(n==1){

                System.out.println("성공");

            }else{

                System.out.println("실패");

            }            

            

        } catch (SQLException e) {

            e.printStackTrace();

        }finally {

            // Connection, PreparedStatment 자원을 반납

            // 실행 역순으로 반납

            

            try {

                if(pstmt != null) pstmt.close();

                if(pstmt != null) con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

 

        }

 

    }

 

}

'데이터베이스' 카테고리의 다른 글

eclipse + Oracle 연동 및 테스트  (0) 2017.01.05

Java와 Oracle을 연동하여 Eclipse에서 바로 값을 넣어보자


<오라클 설치>

 

오라클 다운로드를 하기 위해 서는 오라클 회원가입이 되어 있어야 한다.


Accept License Agreement 선택 후 자신의 Window Bit 에 따라 64bit 버전 또는 32bit 버전을 선택 후 다운로드 받는다.

다운로드가 끝나면 zip 파일 형태의 압축 파일을 압축 해제하면 다음 그림과 같은 파일 및 폴더가 생성 되었는지 확인한다.

setup.exe 파일을 실행하여 오라클을 설치 하도록 한다.

설치 과정은 특별히 어려운 내용이 없어서 별도의 화면을 캡쳐하지는 않아도 진행하는데 별다른 무리는 없을 것으로 보여서 패스~

잠시 기다리면 설치가 끝날 것이다. 설치가 끝났으면 잘 설치가 되었는지 확인도 하고

앞으로 Oracle에 접속할 사용자 계정을 만들어 보도록 하겠다.

1. 윈도우 시작 메뉴에서 다음과 같이 찾아 들어가 보도록 하자

    시작->. "Oracle database 11g Express Edition"->"Run SQL Command Line" 실행

2. 정상적으로 "Run SQL Command Line" 을 실행했다면 다음과 같은 화면을 볼 수 있을 것이다.

3. 지금부터는 아래의 내용들을 차례대로 입력하고 처리 결과를 확인해 보도록 하자.

노란색 부분을 입력하여 결과가 위 화면과 같이 나오는지 확인 하도록 하자.
빠져 나갈때는 "exit"

4. eclipse 의 Data Source Explorer 의 Oracle 설정
   Eclipse -> Window -> Show View -> Other... -> Data Management -> Data Source Explorer -> New Connection Porfile 아이콘 클릭하여 아래 화면처럼 진행해 본다.

여기까지 진행을 하였다면 오라클을 설치 하고 Eclipse 에서 테스트를 해 볼 수 있는 준비가 된것이다.

'데이터베이스' 카테고리의 다른 글

입력 수정 삭제 테스트  (0) 2017.01.05

Webtob & Jeus 연동 시 JEUS Container 상의 servlet_engine 상에서 이루어지며, servlet_engine의 <WebToB-listener> 태그로 간단하게 연동을 할 수 있다.

<WebToB-listener>의 registration-ID와 WebToB 상의 SERVER 와 매핑이 되며 이에 대한 확인은 WebToB 상의 wsadmin 정보와 JEUS 의 webadmin 에서 확인이 가능.

WebToB와 JEUS를 연동 할 경우는 WebToB가 서버가 되며, JEUS가 Boot 시 WebToB 엔진에 등록된 태그에 따라서 WebToB의 Server와 registration ID 를 이용하여 JSVPORT로 thread의 개수만큼 연결을 맺게 되며 연결을 맺은 후에는 이미 맺어진 세션이기 때문에 상호 통신이 가능하다.


'미들웨어 > JEUS' 카테고리의 다른 글

[WebtoB] WEBTOB와 JEUS 연동  (0) 2016.05.20

+ Recent posts