select /* 오늘날짜 시분초 포함*/ 

              to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') 

    from dual


 

select /* 오늘날짜 00시 00분 00초 */ 

              to_char(trunc(sysdate),'yyyy/mm/dd hh24:mi:ss') 

    from dual

 

select /* 오늘날짜 00시 00분 00초 위와 동일*/ 

              to_char(trunc(sysdate,'dd'),'yyyy/mm/dd hh24:mi:ss') 

    from dual


select /* 이번달 1일 00시 00분 00초 */ 

              to_char(trunc(sysdate,'mon'),'yyyy/mm/dd hh24:mi:ss') 

    from dual


select /* 올해 1월 1일 00시 00분 00초 */ 

              to_char(trunc(sysdate,'year'),'yyyy/mm/dd hh24:mi:ss') 

    from dual

 

select /* 올해 1월 1일 00시 00분 00초 */ 

              to_char(to_date('2002','yyyy'),'yyyy/mm/dd hh24:mi:ss') 

    from dual

 

select /* 2월 1일 00시 00분 00초 */ 

              to_char(to_date('200202','yyyymm'),'yyyy/mm/dd hh24:mi:ss') 

    from dual


select /* 2월 2일 00시 00분 00초 */ 

              to_char(to_date('20020202','yyyymmdd'),'yyyy/mm/dd hh24:mi:ss') 

    from dual

 

select /* 2월 2일 00시 00분 01초 */ 

              to_char(to_date('20020202','yyyymmdd')+1/68400,'yyyy/mm/dd hh24:mi:ss') 

    from dual

 

select /* 2월 2일 00시 00분 00초 -> 한달뒤*/ 

              to_char(add_months(to_date('20020202','yyyymmdd'),1),'yyyy/mm/dd hh24:mi:ss')


 from dual

 

from en-core

laalaal~ 

 

 

날짜 빼기

 

밑에 날짜 빼기가 있던데 요건 약간 다르게..

(1) 현재 날자에서 하루를 빼고 싶다고 하면 

            select sysdate() - 1 from dual

(2) 1시간을 빼고 싶으면 

            select sysdate() - 1/24 from dual

(3) 1분을 빼고 싶으면 

            select sysdate() - 1/24/60

(q) 1초를 빼고 싶은면 어떻게 할까요? ^^

 

======================================================================================

- 날짜형 함수

    SYSDATE : 현재 시스템의 날짜 및 시간을 구함

    LAST_DAY : 지정한 날짜의 해당 월의 마지막 날짜를 구함

    MONTHS_BETWEEN : 두 날짜 사이의 개월 수를 구함

    ADD_MONTHS : 지정한 날짜로부터 몇 개월 후의 날짜를 구함

    ROUND : 날짜에 대한 반올림

    TRUNC : 날짜에 대한 버림

 

    SYSDATE : SYSDATE → 10-MAY-99

    LAST_DAY(날짜값) : LAST_DAY('17-FEB-98') → 28-FEB-98

   MONTHS_BETWEEN(날짜값1, 날짜값2) : MONTHS_BETWEEN('26-APR-97','22-JUL-95') → 21.1290323

   ADD_MONTHS(날짜값, 숫자값) : ADD_MONTHS('22-JUL-95',21) → 22-APR-97

      ROUND(날짜값, 자리수) : 현재 날짜가 1999년 5월 10일이라고 가정하자.

                              ROUND(SYSDATE,'MONTH') → 01-MAY-99

      TRUNC(날짜값, 자리수) : 현재 날짜가 1999년 5월 10일이라고 가정하자.

                              TRUNC(SYSDATE,'YEAR') → 01-JAN-99

 

  - 날짜에 대한 산술연산

    날짜 + 숫자 : 날짜 특정한 날로부터 몇일 후의 날짜 계산

    날짜 - 숫자 : 날짜 특정한 날로부터 몇일 전의 날짜 계산

    날짜 - 날짜 : 숫자 두 날짜 사이의 차이를 숫자로 계산

 


- 변환형 함수


    TO_CHAR : 숫자나 날짜를 문자열로 변환

    TO_NUMBER : 문자를 숫자로 변환

    TO_DATE : 문자를 날짜로 변환

 

      - TO_CHAR에서 숫자를 문자로 변환시에 형식에 사용되는 요소

          9 : 일반적인 숫자를 나타냄

          0 : 앞의 빈자리를 0으로 채움

          $ : dollar를 표시함

          L : 지역 통화 단위(ex \)

          . : 소숫점을 표시함

          , : 천단위를 표시함

      - TO_CHAR에서 날짜를 문자로 변환시에 형식에 사용되는 요소

          SCC : 세기를 표시 S는 기원전(BC) 

          YEAR : 연도를 알파벳으로 spelling

          YYYY : 4자리 연도로 표시

          YY : 끝의 2자리 연도로 표시

          MONTH : 월을 알파벳으로 spelling

          MON : 월의 알파벳 약어

          MM : 월을 2자리 숫자로 표시

          DAY : 일에 해당하는 요일

          DY :  일에 해당하는 요일의 약어

          DDD,DD,D : 연도,월,일 중의 날짜를 숫자로 표시

          HH , HH24 : (1-12) , (0-23)중의 시간을 표시

          MI : 분을 표시

          SS : 초를 표시

          AM(A.M.),PM(P.M.) : 오전인지 오후인지를 표시

 

      TO_CHAR(문자값,‘형식’)

        숫자를 문자로 변환 : TO_CHAR(350000,'$999,999')→ $350,000

        숫자를 날짜로 변환 : TO_CHAR(SYSDATE,'YY/MM/DD')→ 95/05/25

      TO_DATE(문자값, ‘형식’) : TO_DATE('10 SEPTEMBER 1992','DD MONTH YYYY')→10-SEP-92

      TO_NUMBER(문자값) : TO_NUMBER('1234')→ 1234

Posted by 사라링



Posted by 사라링



Posted by 사라링


4. 취약성 점검항목 및 가이드.pdf


서버관리자및 보안관리자 개발 관리자는 자신이 관리 또는 생산(개발한) 것에 대하여  

내부및 외부에서 언제든 침입을 당할수 있다는 경계심을 가져야 할것 이다. 


약점이란 : 선천적으로 약한 부분 .

사람으로 따지면 키가 150인 남자는 키가 약점이 될것이다. 


취약점 : 후천적으로 약한 부분

사람으로 따지면 몸무게 정도 될것 이다 (편차 있음) 즉 개선이 가능한 부분을 말한다. 

Posted by 사라링

c 언어 코딩을 하면서 포인터 및 보안 관련 ( 악성코드 분석 등...) 하여 연산자 우선 순위는

말할수 없을 정도로 중요 하다. c 언어 기초 및 모든 개발언어 에 반드시 필요 함으로 

외워야 하며. 어설프게 알바에는 몰라서 찾아서 확인 해야 하는 부분 이니 반드시 외워 두자. !!!!!!!

  연산자 연산자 명 형 연산 방향**
1()   []   ->   .   ::

Grouping, scope, array/member access/

 primary  =======>
2 !   ~   -   +   *   &   sizeof   type cast ++x   --x  (most) unary operations, sizeof and type casts

 단항

 <=======
3*   /   %Multiplication, division, modulo 승법  =======>
4+   -Addition and subtraction 가법  =======>
5<<   >>Bitwise shift left and right 비트시프트  =======>
6<   <=   >   >=Comparisons: less-than, ...

 관계연산자

  =======>
7==   !=Comparisons: equal and not equal 등가  =======>
8&Bitwise AND 비트앤드  =======>
9^Bitwise exclusive OR 비트xor  =======>
10|Bitwise inclusive (normal) OR   =======>
11&&Logical AND

 논리곱

  =======>
12||Logical OR 논리합  =======>
13 ?:Conditional expression (ternary operator) 조건식  =======>
14=   +=   -=   *=   /=   %=   &=   |=   ^=   <<=   >>=Assignment operators

 대입

  <=======

15,Comma operator 쉼표연산자 



Posted by 사라링

오라클에서 외부 접속을 허용하도록 하는 구성요소를 LISTENER라고 부릅니다. 오라클을 최초로 설치하였을 때, 기본적으로 이 LISTENER는 외부 접속을 허용하지 않도록 설정되어 있기 때문에 외부에서 Toad나 SQL Developer등과 같은 프로그램을 사용하여 접속하기 위해서는 LISTENER의 설정을 변경해 주어야 합니다.


이 포스팅에서는 Windows 2008 Server에 설치된 Oracle 11g를 기준으로 하여 설명합니다.



LISTENER 서비스 중지하기

우선 현재 동작중인 LISTENER를 중지시켜야 합니다. 이를 위해서 명령프롬프트에 다음과 같은 명령어를 수행합니다.


lsnrctl stop





listener.ora 파일의 수정

이제 설정 정보를 담고 있는 listener.ora 파일을 수정해야 합니다. 우선 오라클이 설치된 소프트웨어 위치 안의 NETWORK폴더 안으로 이동해야 합니다. 이 폴더 안에는 다시 ADMIN이라는 폴더가 있고, 이 폴더 안에 우리가 수정해야 하는 listener.ora 파일이 존재합니다.


윈도우용 오라클을 기본 경로에 설치한 경우 경로는 다음과 같이 설정됩니다.


C:\app\오라클을 설치한 사용자 계정명\product\11.2.0\dbhome_1\NETWORK\ADMIN


제 경우에는 다음의 경로 였습니다.


C:\app\leekh\product\11.2.0\dbhome_1\NETWORK\ADMIN


이 경로 안의 listener.ora 파일을 메모장이나 그 외의 다른 텍스트 편집기로 열어 줍니다.




파일을 연 후에 아래 화면 갈무리에서 강조한 부분을 수정해 주어야 합니다. 우선 데이터베이스의 SID값을 확인하여 수정하여 주고, 오라클이 설치된 windows 2008 server에서 사용하고 있는 컴퓨터의 이름을 HOST 속성에 지정하여 줍니다. 이전 버전까지는 HOST 속성에 IP주소를 지정하여 주어도 되었지만, 11g 부터는 제가 테스트해 본 결과 IP주소의 지정은 실패했습니다.반드시 컴퓨터의 이름을 지정하여 주세요.




SID 값은 오라클을 설치할 때 지정한 "전역 데이터베이스 이름"입니다. 아래의 화면 갈무리에서 입력하는 항목들 중, 끝에서 세 번째 항목에 지정하여 준 값 입니다.




만약 SID 값을 기억하지 못한다면 다음의 과정으로 확인할 수 있습니다.


  1. 오라클이 설치된 서버에서 SQL Plus를 실행합니다. SQL Plus는 "시작 > 모든 프로그램 > Oracle - OraDb11g_home1 > 응용 프로그램 개발 > SQL Plus"의 경로에서 실행할 수 있습니다.
  2. 오라클에 관리자 계정으로 로그인 합니다. 관리자 계정으로 로그인하기 위해서는 사용자 아이디에 "sys as sysdba"라고 입력합니다. 비밀번호는 오라클 설치시에 지정하여 준 관리 비밀번호 입니다. 위의 설치 화면 갈무리에서 마지막에 입력한 "관리 비밀번호"항목에 입력한 값 입니다.
  3. 로그인이 완료되면 다음의 명령어를 입력합니다.
    select name from v$database;





LISTENER 서비스 재시작

중지했던 Listener 서비스를 재 시작해야 합니다. 서비스를 재 시작하기 위해서는 다음의 명령어를 명령 프롬프트에 입력합니다.


lsnrctl start





프로세스가 정상적으로 실행된 것을 볼 수 있습니다.

Posted by 사라링

방화벽 정책 관련 용어 


긍정 오류(false positive)

부정한 사용자를 적합한 사용자로 오인식(오탐지) 하는 것을 말함. 

사용자의 편의성을 위하여 탐색 범위를 좁히게 된다면 사용상의 가용성은 늘어 나겠지만 그만큼 탐지는 어려워 진다는 말. 


부정오류(false negative)

정당한 사용자를 부적합한 사용자로 오인식(오탐지) 하는 것을 말함. 

불법적인 침입자의 탐지를 위하여 탐색 범위를 넓히게 된다면 사용자의 가용성은 떨어 지겠지만 그만큼 기밀성및 무결성은 향상 되는효과를 가질수 있다. 


위 두가지 부분에서 적당한(매우 어려움.,.,) 수준을 유지 하는것이 보안 담당자가 해야 할 이라고 생각 함...


//

추가 

이는 방화벽 정책과 관련 되어 있다. 

방화벽 정채는 모든 범주를 포함 하여 2가지로 구분 할수 있다 

1. 

   모든 ip 및 포트를 오픈된 상태 에서 필요한 것을 막는 것  (실무 담당자가 선호)


2. 

   모든 ip및 포트를 막은 상태 에서 필요한 것만 여는것 ( 보안담당자가 선호) 






Posted by 사라링

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




※ 정보보안기사에 나오는 법 종류


- 정보통신망 이용촉진 및 정보보호 등에 관한법률(줄여서 정보통신망법 또는 망법 / 개인 정보보호, 기타 정보보호에 관한 조항만)

-- 개인정보 기술적/관리적 보호조치 기준(2012/08/23) : 걍 참고만

- 정보통신기반 보호법

- 정보통신산업 진흥법

- 전자서명법

- 개인정보보호법

-- 개인정보의 안전성 확보 조치 기준(2014-229호)

- 우리나라 법률 정보는 국가법령정보센터(http://www.law.go.kr/main.html)에서 쉽게 열람가능!! PDF로도 추출가능



2. 정보보호 관련법규(6문제/20문제)

(1) 정보통신망 이용촉진 및 정보보호 등에 관한 법률(※ 개인정보보호, 기타 정보보호 관련조항에 한정)

1) 용어의 정의

- 정보통신망

- 정보통신서비스

- 정보통신서비스 제공자

- 이용자

- 전자문서

- 개인정보 : 생존하는 개인에 관한 정보로써(성명/주민번호 등), 특정한 개인을 알아볼수 있는 부호/문자/음성 등의 정보

-- 각각 정보 하나하나로 개인을 구분못해도, 다른 정보와 결합해 구분이 가능하면 그것도 개인정보

- 침해사고 : 해킹/바이러스 등으로 정보통신망 또는 관련된 정보시스템을 공격하는 행위

- 정보보호산업

- 전자적 전송매체


2) 정보통신망이용촉진 및 정보보호 등 시책

- 미창부장관 또는 방통위는 정보통신망 이용촉진 및 안정적 관리 운영과 이용자의 개인정보보호 등을 통해  정보사회의 기반을 조성하기 위한 시책을 마련해야 함

-- 정보통신망에 관련된 기술의 개발/보급

-- 정보통신망 표준화

-- 정보내용물 및 11조에 따른 정보통신망 응용서비스의 개발 등 정보통신망의 이용 활성화

-- 정보통신망을 통하여 수집/처리/보관/이용되는 개인정보 보호 및 그와 관련된 기술의 개발 보급

-- 정보통신망에서의 청소년 보호

-- 정보통신망의 안전성 및 신뢰성 제고

-- 그 밖의 정보통신망 이용촉진 및 정보보호 등을 위하여 필요한 사항

- 미창부장관과 방통위가 위에 제시한 시책을 만들 때, 국가정보화기본법 제6조에 따른 정보화 기본 계획과 연계되도록해야함


3) 개인정보보호 / 4) 정보통신망의 안정성 확보 / 5) 정보통신망 침해행위

- 개인정보보호법과 유사하지만 차별적인 요소가 있음

- 개인정보수집/이용 및 제공(22조)

-- 정보통신 서비스 제공자가 개인정보 이용을 위해 수집할 때, 알리고 동의받아야 하는 것

--- 개인정보의 수집 이용 목적

--- 수집하려는 개인정보의 항목

--- 개인정보의 보유이용기간

--- ※ 개인정보보호법에서는, 거부할 권한이 있다는것과 이에 따른 불이익도 알리고 동의받아야해

-- 다음은 동의없이도 수집이용가능

--- 정보통신서비스 제공에 관한 계약을 이행하기 위해 필요한 개인정보로서 경제적, 기술적은 사유로 통상적인 동의받는게 뚜렷하게 곤란할 때

--- 정보통신서비스 제공에 따른 요금정산을 위하여 필요한 경우

--- 이 법(망법) 또는 다른 법률에 특별한 규정이 있는 경우

- 개인정보수집 제한 등(23조)

-- 개인정보수집금지 : 사상/신념/가족 및 친인척관계/학력/병력 등 권리 이익이나 사생활을 뚜렷하게 침해할 우려가 있는 경우

-- 수집 허용 : 이용자의 동의나 다른 법률에 허용된 경우

-- 서비스 거부 : 이용자가 최소한의 개인정보 밖에 안알려줬다고 서비스 거부 안됨

- 주민등록번호 사용제한(23조의 2)

-- 다음의 경우를 제외하고 이용자의 주민등록번호를 수집/이용 불가

--- 본인확인기관

--- 법령에서 이용자의 주민등록번호의 수집/이용을 허용하는 경우

--- 주민등록번호의 수집/이용이 불가피한 정보통신서비스 제공자로서 방통위에서 고시한 경우

-- 주민등록번호를 수집/이용 가능하여도, 대체수단(주민번호말고 따른 인증수단)을 제공해야 함

--- 아이핀 / 공인인증서 / 원타임패스워드(OTP)

- 개인정보 이용제한(24조)

-- 수집한 개인정보를, 동의받지 않은 목적(이용목적)으로 이용해서는 안됨

-- 이용목적이 변경되었을 땐 다시 동의받아야 해

- 개인정보의 제공동의(24조의 2)

-- 개인정보를 제 3자에게 제공할 때, 다음의 내용을 이용자에 알리고 동의받아야 함

--- 개인정보를 제공받는 자

--- 개인정보를 제공받는 자의 개인정보의 이용목적

--- 제공하는 개인정보의 항목

--- 개인정보를 제공받는 자의 개인정보 보유 및 이용기간

- 개인정보취급위탁(25조)

-- 위탁은 걍 하청업체에다가 정보주고 너네 이부분 알아서해시키는거

-- 취급위탁의 경우에도 다음의 내용을 이용자에게 알리고 동의를 받아야 함

--- 개인정보 취급위탁을 받는자(수탁자)

--- 개인정보 취급위탁을 하는 업무의 내용

-- ※ 망법에서는 취급 위탁시 동의를 받아야 하지만 개인정보보호법에서는 고지만 함

- 개인정보의 양도 양수(26조)

-- 정보통신서비스 제공자 등이 영업의 전부나 일부가 양도/합병으로 개인정보를 타인에게 이전하는 경우 다음의 내용을 알려야함

--- 개인정보를 이전하려는 사실

--- 개인정보를 이전받는자의 성명(법인명) / 주소 / 전화번호 및 그 밖의 연락처

--- 개인정보의 이전을 원치않은 경우, 그 동의를 철회할 수 있는 방법과 절차

-- 인터넷 홈페이지의 게시 / 전자우편 등 대통령령으로 정하는 방법에 따라 이용자에게 알림(바로 아래 시행령에 정의)

-- 양도자가 개인정보의 이전 사실을 알린경우, 양수자는 할 필요는 X

- 개인정보 동의 받는 방법(동법 시행령 12조) : 바로 위의 개인정보 양도 양수할 때 알리는 방법

-- 인터넷 사이트에 게재하고 동의 여부를 표시하도록

-- 동의 내용이 기재된 서면을 이용자에게 직접 교부/우편/모사 전송 → 이용자가 동의 내용에 대해 서명날인 후 제출하도록

-- 동의 내용이 담긴 전자우편 발송해 이용자로부터 동의의 의사표시가 적힌 전자우편 받는 방법

-- 전화를 통해 동의 내용을 알리고 동의 얻기

- 개인정보 관리책임자 지정(27조)

-- 정보통신서비스 제공자 등은 개인정보를 보호하고 개인정보와 관련한 이용자의 고충을 처리하기 위해 개인정보 관리 책임자를 지정

--- 예외 : 인터넷으로 사업시 5명 미만 / 전년도 말 기준 직전 3개월 일일평균 이용자 1천명 이하

-- 자격 : 임원 / 개인정보와 관련해 이용자의 고충처리를 담당하는 부서의 장 이 될 수 있음

-- 지정안하면 사업주나 대표자가 개인정보 관리책임자

- 개인정보 취급방침의 공개(27조의 2)

-- 개인정보 취급방침은 인터넷 홈페이지 첫 화면 제일 하단에 '개인정보취급방침'이라고 볼드체, 다른 색상으로 표현

--- 인터넷 홈페이지가 없으면 점포나 사무실에 써 붙이거나 비치

-- 개인정보 취급방침의 내용

--- 개인정보의 수집/이용 목적, 수집하는 개인정보의 항목 및 수집방법

--- 제 3자에게 제공시, 제공받는 자의 성명(법인명) / 제공받는자의 이용목적 / 제공하는 개인정보의 항목

--- 개인정보의 보유 및 이용 기간 / 개인정보의 파기절차 및 파기 방법

--- 개인정보 취급위탁을 하는 업무의 내용 및 수탁자

--- 이용자 및 법정대리인의 권리와 행사방법

--- 개인정보를 자동으로 수집하는 장치의 설치/운영 및 거부에 관한 사항

--- 개인정보 관리책임자의 성명 / 개인정보보호 업무를 하는 부서의 명칭과 연락처

- 개인정보 누출 등의 통지 신고(27조 3)

-- 개인정보 털린사실(분실/도난/누출) 알고나면, 지체없이 다음 내용 이용자에게 알리고 방통위나 KISA에 신고

--- 분실/도난/누출이 된 개인정보 항목

--- 분실/도난/누출이 발생한 시점

--- 이용자가 취할 수 있는 조치

--- 정보통신서비스 제공자 등의 대응 조치

--- 이용자가 상담 등을 접수할 수 있는 부서 및 연락처

-- 물론, 확인된 내용만 우선적으로 신고/통지하고 이후에 알게 되자마자 바로 신고/통지

-- 정당한 사유가 있는 경우, 위의 내용을 인터넷 홈페이지에 30일 이상 게시함으로써 대체 가능

-- 천재지변이나 정당한 이유로 홈페이지가 불가능하면, 전국에 보급되는 둘 이상의 일반일간신문에 1회 이상 공고

-- 신고받은 KISA는 방통위에게 즉시 알려야 함

- 개인정보의 보호조치(28조)

-- 다음의 기술적/관리적 보호 조치를 해야 함

--- 내부관리계획수립시행 / 접근통제장치설치운영 / 접속기론위변조방지 / 전송저장 암호화 / 바이러스침해방지 / 기타 안정성 확보

- 개인정보의 파기(29조)

-- 개인정보는 목적을 달성하면 지체없이 복구/재생할 수 없도록 파기

-- 특별한 사유 없을 때, 보유기간은 최소 1년에서 3년

-- 개인정보 파기 통지는 30일전에 개인정보가 파기되는 사실과 언제 파기하는지 알림

--- 우편 / 서면/ 모사전송 / 전화와 같은 유사한 방법으로 알려야 함

- 개인정보 이용내역의 통지(30조 2)

-- 다음의 기준을 만족하는 정보통신서비스 제공자 등은 주기적으로 이용자에게 개인정보 이용내역을 통지해야 함

--- 전년도 말 기준 직전 3개월간 일일평균 100만명 이상

--- 정보통신서비스부분 매출액이 100억원 이상 정보통신서비스 제공자

-- 통지 내역

--- 수집/이용 목적 및 수집한 개인정보 항목

--- 개인정보를 제공받은 자와, 그 제공 목적 및 제공한 개인정보 항목

--- 개인정보 취급위탁을 받은자와 그 취급위탁을 하는 업무 내용

-- 통지 횟수 : 연 1회 이상 (우편 / 서면 / 모사전송 / 전화와 같은 유사한 방법으로)

- 손해배상 및 법정 손해배상청구(32조, 32조의 2)

-- 고의/과실에 따른 개인정보 분실/도난/누출의 경우, 이용자가 정보통신서비스제공자를 상대로 300만원 이하의 손해배상 청구 가능

--- 정보통신서비스 제공자는 고의나 과실 책임이 없음을 입증해야 함

- 정보보호 사전점검(45조 2)

-- 정보통신서비스 제공자가 새로  정보통신망을 구축하고나 제공하고자 할때, 정보보호와 관련된 사항을 고려해야 해

- 정보보호 최고 책임자의 지정(45조 3)

-- 정보통신시스템 등 보안 및 정보의 안전한 관리르 위해 임원급의 정보보호 최고책임자를 지정가능

--- 종업원 수, 이용자 수 등이 기준에 해당하면 필수로 지정하고 미창부장관에게 신고해야 함

-- 정보보호 최고책임자의 업무

--- 정보보호관리체계의 수립 및 관리/운영

--- 정보보호 취약점 분석/평가 및 개선

--- 침해사고의 예방 및 대응

--- 사전 정보보호대책 마련 및 보안조치 설계/구현 등

--- 정보보호 사전 보안성 검토

--- 중요 정보의 암호화 및 보안서버 적합성 검토

--- 그 밖의 정보보호를 위해 필요한 조치의 이행

- 정보보호관리체계(ISMS)(47조)

-- 미창부 장관은 ISMS를 수립/운영하고 있는 자에 대해 기준에 적합한지에 관하여 인증을 가능

-- 다음의 경우 중, 하나만 만족해도 무조건 ISMS 인증 받아야 해

--- 정보통신망서비스 제공하는 자

--- 직접정보통신시설 사업자

--- 전년도 매출액이 100억원 이상 / 전년도 말 기준  직전 3개월간 일일평균 이용자 100만명 이상

-- ISMS 인증의 유효기간은 3년임

-- 미창부장관은 KISA나 미창부장관이 지정한 기관(ISMS 인증기관)에게 인증을 수행하게 할 수 있음

--- ISMS 인증 심사 수행 기관 : KISA / 한국정보통신진흥협회

- 개인정보관리체계인증(PIMS)(47조 3)

-- ISMS와는 다르게 아직 의무사항이 아님(권고사항)

-- 이건 방통위가 인증하고, 따로 수행기관을 지정가능해

- 정보보호관리등급(47조 5)

-- ISMS 인증을 부여받은 기관이나 기업은 일괄적인 인증이 아니라, KISA로부터 정보보호 등급을 부여받을 수 있음

-- 미창부장관이 관리등급 부여하는거고, KISA가 대신 수행가능



(2) 정보통신 기반 보호법

1) 용어의 정의

- 정보통신기반시설

- 전자적침해행위

- 침해사고


2) 주요정보통신기반시설 보호체계

3) 주요정보통신기반시설의 지정과 취약점 분석

4) 주요정보통신기반시설의 보호 및 침해 사고의 대응

- 정보통신기반보호위원회(3조)

-- 정보통신기반시설의 보호에 관한 사항을 심의하기 위해, 국무총리 소속하에 정보통신기반보호위원회를 둠

-- 위원장 1인을 포함한 25인 이내의 의원으로 구성

--- 위원장은 국무조정실장

-- 효율적 운영을 위해, 공공분야와 민간분야를 각각 담당하는 실무 위원회를 둠

- 정보통신기반보호위원회의 기능(4조)

-- 주요 정보통신기반시설 보호정책 조정이나 제도개선에 대한 사항과 주요 정책

-- 위원장이 부의하는 사항을 심의

- 주요 정보통신기반시설보호대책의 수립(5조)

-- 주요 정보통신기반시설을 관리하는 기관은 정보통신기반시설보호대책을 수립/시행해야 함

--- 수립/시행의 결과를 관계주요행정기관의 장에게 제출해야 함

-- 관리기관의 장은 정보보호책임자를 지정해야 함

- 주요 정보통신기반시설보호대책 이행여부의 확인(5조 2)

-- 미창부장관과 국정원장은 관리기관에 대해 정보통신기반시설보호대책의 이행여부 확인가능

- 주요 정보통신기반시설 계획의 수립 등(6조)

-- 관계중앙행정기관의 장은 정보통신기반보호위원회에게 전년도 추진실적과 다음연도 계획을 제출하고 심의받아야 함

--- 취약성 평가분석 / 침해사고 복구대책 / 그 밖의 대책

- 주요 정보통신기반시설의 보호지원(7조)

-- 관리기관의 장은 미창부, 국정원장 등에게 정보통신시설의 대책, 침해사고 예방복구 등에 대한 기술지원 가능

--- 국정원장은 금융/정보통신기반시설에 개인정보가 저장된 모든 정보통신기반시설 기술지원은 X

---- 국정원도 안되는게 있구나



(3) 정보통신산업 진흥법

1) 지식정보보안컨설팅 전문업체

- 지식정보보안컨설팅 전문업체(33조)

-- 주요 정보통신기반시설의 취약점 분석/평가 업무나 보호대책 수립업무를 신뢰성 있게 수행할수있다고 인정받은 업체

-- 미창부장관이 지정하게 되네

-- 업체지정은 법인으로 한정되고, 3년간의 유효기간이 있음(재지정 받을수있지 당연히)

- 지식정보보안컨설팅 전문업체 결격 사유(34조)

-- 뭐...생략

- 지식정보보안컨설팅 전문업체의 양도/합병 등(35조)

-- 양수인이 자격도 있어야 되고, 미창부장관에게 신고해서 수리 받아야 지식정보보안컨설팅 전문업체의 지위를 승계받음

- 지식정보보안컨설팅 전문업체 휴/폐업, 재개(36조)

-- 휴업/폐업, 재개하려는 날의 30일전까지 미창부장관에게 신고

- 자료의 기록 보존(39조)

-- 주요 통신기반시설의 취약점 분석/평가 업무와 관련하여 작성한 기록 및 자료를 안전하게 보존해야함

--지식정보보안컨설팅 전문업체에서 취소되거나 폐업하면, 주요 통신기반시설의 장에게 자료를 반환하거나 폐기

- 지식정보보안산업협회 설립(40조)

-- 미창부장관의 인가를 받아 지식정보보안산업협회를 설립가능

-- 지식정보보안산업협회는 법인으로 함



(4) 전자서명법

1) 용어의 정리

- 전자문서

- 전자서명

- 공인전자서명

- 전자서명생성정보

- 전자서명검증정보

- 인증

- 인증서

- 공인인증서

- 공인인증업무

- 공인인증기관

- 가입자

- 서명자

- 개인정보


2) 전자서명의 효력

- 전자서명의 효력(3조)

-- 공인전자서명이 있는 경우에는, 당해 전자서명이 [서명자의 서명, 서명날인 또는 기명날인이고], 당해 전자문서가 전자서명된 후 그 내용이 변경되지 아니하였다고 추정


3) 공인인증기관

- 공인인증기관의 지정(4조)

-- 미창부 장관이 공인인증기관을 지정할 수 있어

-- 공인인증기관으로 지정받을 수 있는 건 국가기관 / 지방자치단체 / 법인에 한해

-- 현재 : 한국정보인증(주), (주)코스콤, 금융결재원, 한국전자인증(주), 한국무역정보통신

- 공인인증업무 준칙(6조)

-- 공인인증기관은 업무 개시전에, 공인인증업무준칙을 작성해 미창부장관에게 신고해야 함

--- 인증업무종류 / 인증업무의수행방법및절차 / 공인인증역무의 이용조건 / 기타 인증업무 수행에관하여 필요사항


4) 공인인증서

- 공인인증서 발급(15조)

-- 공인인증서를 발급받고자하는 자의 신원을 확인해야 함

-- 공인인증기관이 발급하는 공인인증서에는 다음의 내용이 포함되어야 함

--- 가입자의 이름(법인명)

--- 가입자의 전자서명검증정보

--- 가입자와 공인인증기관이 이용하는 전자서명 방식

--- 공인인증서의 일련번호

--- 공인인증서의 유효기관

--- 공인인증기관의 명칭 등 공인인증기관을 확인할 수 있는 정보

--- 공인인증서의 이용범위 또는 용도를 제한하는 경우 이에 관한 사항

--- 가입자가 제 3ㅈ라를 위한 대리권 등을 갖는 경우 또는 직업상 자격 등의 표시를 요청한 경우 이에 관한 사항

--- 공인인증서임을 나타내는 표시

- 공인인증서 효력소멸(17조???)

-- 공인인증서 유효기관이 경과한 경우

-- 공인인증기관의 지정이 취소된 경우

-- 공인인증서의 효력이 정지된 경우

-- 공인인증서가 폐지 된 경우

- 공인인증서의 효력정지(17조)

-- 가입자 또는 대리인의 신청이 있을 경우, 공인인증서의 효력을 정지하거나 정지된 공인인증서의 효력을 회복해야 함

-- 공인인증서 효력 회복의 신청은, 공인인증서 효력이 정지된 날로부터 6개월 이내여야 함


(5) 개인정보보호법

0) 걍 설명

- 2011년 9월 30일 제정되어 공공과 민간을 아우르는 일반법

- 정보통신망 이용촉진 및 정보보호 등에 관한 법률이 개인정보보호법 보다 우선

-- 정보통신망법에 특별한 규정이 있지 않은 이상, 개인정보보호법에서 정하는 바에 따름(6조)

- 대부분 공공기관과 준용사업자에게 적용되는 법률로, 광범위하게적용되는 개인정보보호관련 일반법

- 전반적으로 망법이랑 내용겹치는게 있어(몇 개 더 추가되고 그런거만 있찌..)


1) 용어의 정리

- 개인정보

- 처리

- 정보주체

-개인정보파일

- 개인정보처리자

- 공공기관

- 영상정보처리기기

- ※ 망법이랑 비교하면서 보기


2) 개인정보 보호위원회

- 개인정보 보호위원회(7조)

-- 개인정보 보호에 관한 사항을 심의/의결하기 위해 대통령소속으로 개인정보보호위원회를 둠

-- 위원장 1명, 상임위원 1명을 포함한 15명 이내의 위원으로 구성

--- 위원장은 공무원이 아닌사람으로 대통령이 위촉 / 임기 3년(1번 연임가능)

--- 상임위원은 정무직 공무원으로 임명

- 개인정보 보호위원회 기능(8조)

-- 허허ㅓ..


3) 개인정보의 수집, 이용, 제공 등 단계별 보호기준

- 개인정보의 수집/이용(15조)

-- 개인정보처리자는 개인정보 이용을 위해 수집할 때, 알리고 동의받아야 하는 것

--- 개인정보의 수집 이용 목적

--- 수집하려는 개인정보의 항목

--- 개인정보의 보유이용기간

--- 개인정보보호법에서는, 거부할 권한이 있다는것과 이에 따른 불이익도 알리고 동의받아야해

---- 이건 망법에 없는내용

- 개인정보 수집 제한(16조)

-- 동의를 받고 개인정보를 수집하더라도 최소한으로 수집해야 함

--- 최소한이라는 걸 입증할 책임도 개인정보처리자에게 있지

- 개인정보제공(17조)

-- 개인정보를 제 3자에게 제공할 때, 다음의 내용을 이용자에 알리고 동의받아야 함

--- 개인정보를 제공받는 자

--- 개인정보를 제공받는 자의 개인정보의 이용목적

--- 제공하는 개인정보의 항목

--- 개인정보를 제공받는 자의 개인정보 보유 및 이용기간

--- 동의를 거부할 권리가 있다는 사실 및 동의거부에 따른 불이익이 있는 경우 그 불이익의 내용

---- 망법에 없는 내용

- 업무위탁에 따른 개인정보의 처리제한(26조) ; 순서는 뒤에있지만 끌어다 왔어

-- 업무위탁시에는 반드시 문서로 해야되고, 위탁계약서에는 개인정보보호에 대한 역할과 책임을 명시해야 함

-- 업무위탁시에는 개인정보처리방침을 공개해야 함

-- 손해배상책임에서는 수탁자를 위탁자의 소속직원으로 보기에 관리감독 철저히!

- 개인정보취급자에 대한 감독(28조)

-- 개인정보처리자는 개인정보취급자에 대하여 적절한 관리/감독을 이행해야함

--- 개인정보취급자는 임직원부터 파견근로자, 알바, 인턴까지 개인정보처리자의 지후 감독하에 개인정보를 처리하는 자 모두

--- 정기적인 교육을 실시

- 개인정보의 이용/제공 제한(18조)

-- 개인정보를 제공하더라도 최소한의 제공하고 이용목적의 범위를 벗어나서는 안됨

-- 제 3자 제공시에는 반드시 개인정보처리방침을 통해 공개

- 정보주체 이외에서 수집한 개인정보 수집 출저 등 고지(20조)

-- 개인정보 처리자가 정보주체 이외에서 수집한 경우

정보주체의 요구가 있으면 수집출저, 개인정보처리목적, 처리정지를 요구할 권라가 있음을 알려야함

- 개인정보의 파기(21조)

-- 개인정보의 처리목적을 달성하면 지체없이 파기

--- 다른 법령에 보존근거가 있으면 그거에 따라야지

-- 개인정보를 파기하지 않고 보존하는 경우는, 다른 개인정보와 분리하여 저장관리


4) 고유 식별정보 처리제한

- 민감정보처리제한(23조)

-- 사상, 신념, 노동조합, 정당의 가입탈퇴, 정치적견해, 건강, 성생활 등에 관한 정보를 처리 못하게 함

-- 망법보다 더 구체적이고 넓어졌지

- 고유식별정보처리제한(24조)

-- 개인정보처리자는 다음의 경우 제외해고 고유식별정보를 처리 불가

--- 정보주체에게 모든 사항알리고 별도로 동의를 받은경우

--- 법령에서 구체적으로 고유식별정보의 처리를 요구하거나 허용한 경우

-- 공유식별정보 : 주민등록번호 / 여권번호 / 운전자면허번호 / 외국인등록 번호 등

- 주민등록번호의 처리제한(24조의 2)

-- 다음의 경우를 제외하고 주민등록번호 처리 불가

--- 법령에서 구체적으로 주민등록번호의 처리를 요구하거나 허용한 경우

--- 정보주체나 제 3자의 급박한 생명,신체, 재산의 이익을 위해 명백히 필요하다고 인정되는 경우

--- 주민등록번호 처리가 불가피한 경우로서 행정자치부령으로 지정하는 경우

-- 개인정보처리자가 불가피하게 주민등록번호를 수집했다면, 분실/도난/유출 등을 막기 위해 암호화 조치를 통해 안전하게 보관해야됨

-- 개인정보처리자가 주민등록번호 처리 가능하더라도, 주민등록번호가 아닌 방법으로 가입할 방법 제공해야 됨

- 주민등록번호 유출시 과징금 5억(32조 2)

-- 행정자치부장관은 개인정보처리자가 처리하는 주민등록번호가 분실/도난/유출 등을 당하면 5억원 이하의 과징금을 부과/징수 가능

--- 물론 필요한 조치를 다했다면 그러지 아니하대


5) 영상정보처리기기의 설치 제한

- 영상정보처리기기의 설치/운영 제한(25조)

-- 법령에서 허용되는 경우를 제외하고는 공개된 장소에 영상정보처리기기를 설치해서는 안됨

-- 공공기관에서 설치/운영하려면 공청회 거쳐야하고, 이해관계자의 의견은 수렴하는 절차까지만 하면됨

-- 설치할때는 가장 잘 보이는 건물 중앙에 설치

-- 녹음은 해서는 안되

-- 다른용도로 사용하면 X


6) 개인정보 영향평가제도

- 개인정보처리방침의 수립 및 공개(30조)

-- 개인정보처리자는 홈페이지 첫 화면 아래에 개인정보처리방침을 공개해야함

-- 볼드체, 색상을 다르게

-- 홈페이지 없으면 사무실에 잘보이게 비치

- 개인정보 보호책임자 지정(31조)

-- 개인정보처리자는 개인정보의 처리에 관한 업무를 총괄해서 책임질 개인정보 보호책임자를 지정해야 함

-- ...하는일들 생략

- 개인정보파일 등록 및 공개(32조)

-- 공공기관의 경우, 개인정보파일에 대한 자세한사항들을 행정자치부장관에게 신고해야함

-- 행정자치부장관은 신고받은 개인정보파일에 대한 자세한 사항들을 누구나 열람가능하도록 공개해야 함

- 개인정보 영향평가(33조)

-- 공공기관은 특정한 요건을 충족할 경우 개인정보영향평가를 의무적으로 받아야 함

--- 5만명 이상의 정보주체에 대한 민감정보나 고육식별정보를 처리함

--- 다른 개인정보파일과의 연계할때, 50만명 이상의 정보주체에 관한 개인정보를 처리

--- 100만명 이상의 정보주체에 대한 개인정보파일의 처리함

-- 민간은 아직까지 권고사항

-- 공공기관은 영향평가의 결과를 행정자치부장관에게 제출해야 함

--- 행정자치부장관이 지정한 평가기관 중에서 의뢰해야 함


7) 개인정보 유출사실의 통지/신고제도

- 개인정보유출통지(34조)

-- 개인정보가 유출되었을 때에는 지체없이 정보주체에게 알려야 함


8) 정보주체의 권리보장

- 개인정보의 열람(35조)

-- 정보주체는 개인정보처리자에게 자신의 개인정보 열람을 요구할 수 있음

-- 이것도 보여줘야 되는기간이 따로 있어(대통령령)

-- 물론, 개인정보의 열람이 타인에게 해를 끼치는 등의 영향이 있을것 같으면 제한하거나 거부가능

- 손해배상 책임(39조 2항)

-- 정보주체는 개인정보처리자가 법을 윟반한 행위로 손해를 입으면 손해배상 청구가능

--- 개인정보처리자는 고의나 과실이 없음을 입증해야 해야 책임 면함

-- 물론, 개인정보처리자가 의무를 준수하고 최선을 다했다면 감경받을 수있긴해


9) 개인정보 분쟁조정위원회

- 개인정보 분쟁조정위원호의 설치 및 구성(40조)

-- 개인정보에 관한 분쟁의 조정을 위해 개인정보 분쟁조정위원회를 둠

-- 위원장 1명을 포함한, 20명 이내의 위원으로 구성(그 中 1명은 상임위원)

-- 개인정보와 관련한 분쟁의 조정을 원하는 자는 분쟁조정위원회에 분쟁조정을 신청가능

--- 분쟁조정위원회는 해당 내용을 상대방에 알려야 함

--- 공공기관이 경우 별다른 사유업승면 분쟁조정에 응해야 함

-- 분쟁조정을 신청받은 날로부터 60이내에 이를 심사해 조정안을 작성해야 함

--- 물론 의결로 처리기간 연장가능(연잔시 신청자에게 이유와 함께 알려야 함)

-- 조정전에 합의를 권고가능

- 집단조정분쟁조정(49조)

-- 정보주체의 피해 또는 권리침해가 다수의 정보주체에게 같은거나 비슷한 유형으로 발생하는 경우에 신청가능


(6) 개인정보의 안정성 확보 조치 기준(안행부고시 제2014-229호)

- 내부관리 계획수립.시행(3조)

-- 망법처럼 개인정보보호법에서도 안정성확보 조치를 위해 내부관리계획을 수립해야 함

--- 실행가능하고 / 구체적이고 / 맞춤형

-- 물론, 소상공인은 안해도되

- 접근권한 관리(4조)

-- 개인정보 수집시에는 최소화하여 수집

-- 개인정보처리시스템에 접근할 때에도 접근권한을 차등부여하고 최소한의 범위로 설정

-- 접근권한의 부여 기록은 3년간 보관

-- 개인정보 취급자의 사용 계정은 공유해서 사용해서는 안됨

- 접근통제(5조)

-- 정보통신망을 통한 불법적인 접근과 침해사고의 방지를 위해 다음과 같은 기능을 시스템에 설치/운영해야 함

--- 접속권한을 IP주소 등으로 제한하여 접근제어

--- 접속한 IP주소 등을 분석하여 불법적인 개인정보 유출시도 탐지

--- IDS / IPS / Firewall를 말하는것 같음

-- 외부망에서 개인정보처리시스템에 접근시 VPN이나 전용선등 안전한 접속수단 적용해야 함

-- 주민등록번호 이용해 본인인증 외에도 추가 인증수단을 마련해야함

-- 개인정보처리자는 연 1회이상 취약점을 점검해야 함

-- 개인정보취급자가 공개된 무선망을 통해 개인정보를 처리하는 경우, 보안프로그램이나 SSL, VPN 등을 적용해야함

-- 개인정보처리에 이용되는 모바일 기기의 분실/도난 등을 예비해 비밀번호나, 잠금 기능의 조치를 해야 함

- 개인정보의 암호화(6조)

-- 암호화 대상 : 고유식별정보, 비밀번호 및 바이오정보

--- 비밀번호및 바이오정보는 암호화하여 저장하되, 비밀번호는 일방향 암호화해서 저장(해쉬값)

-- 정보통신망을 이용해 개인정보를 송수신할 떄에도 암호화를 해야함(SSL 등 사용)

- 접속기록의 보관 및 점검(7조)

-- 개인정보처리시스템의 접근 기록은 6개월 이상 보관해야 함

-- 위/변조를 방지하기 위해 안전하게 보관

-- 반기별로 1회 이상 점검

- 악성프로그램 등 방지(8조)

-- 백신 소프트웨어 설치/운영

--- 자동 업데이트 기능 사용하거나, 일 1회 이상 엔진 업데이트 해야 됨

--- 악성 프로그램관련 경보가 떳을 때에는, 사용하는 백신의 보안 업데이트 공지가 뜨면 업데이틀 통해 최신상태 유지해야 함

- 물리적 접근 방지(9조)

-- 전산실이나 자료보관실에 개인정보를 보관시에는, 출입통제 절차를 수립/운영해야 함

-- 서류와 보조저장매체는 안전한 곳에 보관

- 개인정보의 파기(10조)

-- 완전파괴 / 전용소자장비를 이용한 삭제 / 복원안되게 포맷 또는 덮어쓰기



Posted by 사라링

1. 정보보호 관리

(1) 정보보관리 개념

1) 정보보호의 목적 및 특성

- 정보보호의 정의 : 정보의 수집, 가공, 저장, 검색, 송신, 수신 중 발생할 수 있는 정보의 훼손, 변조, 유출 등을 방지하기 위한 관리적/기술적 수단(정보보호시스템)을 마련하는 것을 말한다.(국가정보화 기본법)

- 정보보호 ≠ 정보보안 : 정보보안이 Site(공간)이라는 개념이 더 들어간, 넓은 개념이라고 생각하자

- 정보보호의 목적 : 기밀성 / 무결성 / 가용성 / 인증 / 부인방지 / 신뢰성 등


2) 정보보호와 비즈니스

- 정보보호와 비즈니스 : IT 인프라에 대한 정보보호는 비즈니스의 보호뿐만이 아니라 비즈니스 가치의 증가로 이어 짐

-- 한 조직의 정보 자산뿐만이 아니라 고객의 정보(개인정보)까지 보호해야 할 법적인 의무도 있고, 고객의 신뢰로 이어지니까

-- 향후 조직의 비즈니스에 큰 도움이 될 것은 자명해


3) 정보보호관리의 개념

- 정보보호관리(Information Security Management)

-- 조직의 정보자산을 외부로 부터의 유(노)출과 오용, 유실으로 부터 방어하고, 정보나 정보 시설을 방어하는데 관련된 모든 일련의 활동

- 정보보호관리를 위한 6단계 활동

-- 정보보호 정책 및 조직 수립 → 정보보호 범위 설정 → 정보자산의 식별 → 위험관리 → 구현 → 사후관리

- 위의 활동들을 지속적으로 하기 위해 체계화해서 만든게 정보보호관리체계(ISMS ; Information Security Management)

-- 그냥 한 번 정보보호 솔루션을 만들고 끝내는게 아니라, 비즈니스의 연속성과 함께 계속 지속되어야 되

-- 최근에는 매출이 크거나 고객이 많은 조직은 법적으로 갖춰야해



(2) 정보보호 정책 및 조직

1) 정보보호 정책의 의미 및 유형

- 정책(Policy) : 최고 경영진의 전략적인 사고를 문서화한 것

-- 정책 中, 가장 핵심적인 걸 "정책서"라고 함

-- 하향식 유형(Top-Down) : 상위 정책으로 부터 하위수준의 정책을 도출하는 방식

-- 상향식 유형(Bottom-Up) : 기존의 정책들을 종합해 새로운 정책을 수립하는 방식

- 정책이 가지는 특징과 가져야할 특징

-- 여러 다른 지침과 하위 수준간의 정책들이 일관성과 연관성이 필요함

-- 최상위 정책은 전사적인 정책을 모두 포함해야 함

-- 간결하고 명확 / 정보보호의 목표와 회사의 비전을 포함해야 함

-- 영향을 받는 임직원들에게 정책에 대한 설명 해야 함 / 간단한 내용과 이해하기 쉬운 표현

- 정보보호 정책서의 구성

- 정보보호 선언문 : 보통 1장에 심플하게 작성 / 정보보호전반에 대한 경영자의 의지 및 실천을 다짐하는 선언문

- 정책서 목적과 구성 / 기본 방침 / 정보보호계획수립 / 보안에대한 역할과 책임 / 정보자산의 보안 / 등


2) 정보보호 정책수립 절차

- 정보보호 정책 수립 : 조직 전반에 걸친, 최상위 수준의 정보보호정책을 수립하고, 조직내 책임을 설정

-- 정보보호 정책서 안에 포함되는 개념인듯

- 정보보호 정책 수립 과정

-- 경영목표를 지원하는 법적/규제적인 요건을 파악

-- 위험관리에 따른 전략적 정보보호 정책 수립

- 정보보호 정책서 작성 방안(정보보호 정책 수립도 여기에 들어가)

-- 목적 : 중요한 정보자산이 무엇인지 식별하여 선언

-- 적용 범위 : 정책이 적용되는 범위(전사이냐, 특정 부서이냐)

-- 정책의 내용 : 간단하고 명료하게

-- 책임 : 정책을 수행하기 전에, 기본적으로 책임사항을 정의해야함(경영진의 책임, 일반직원의 책임 등)

-- 문서승인 : 정보보호 정책의 승인은 최고 경영자(CEO)가 이 정책을 승인하고 지원의지를 알리는 것(반드시 승인받아야 해)

-- 정보보호위원회의 구성 : 정보보호정책 수립의 이행을 위해 만든 위원회(형식적인 위원회 구성이 아닌 실직적 운영을 위한)


3) 조직 체계와 역할/책임

- 정보보호 조직 : 정보보호 정책을 잘 수립하여 수행해 나갈 수 있는, 체계적인 역할과 책임을 가지는 조직

-- 위에서 언급했듯이, 정보보호 정책서에 책임사항을 정의한거랑 연계해서 생각해

- 일반적인 정보보호 조직체계

-- 정보보호 심의위원회 : 정보보호 활동계획 및 예산 심의 / 정보보호 정책 및 규정의 최종승인

--- 위원장 : 대표이사 / 위원 : 정보보호책임자 / 간사 : 정보보호 관리자

-- 정보보호 책임자 : 정보보호 조직의 구성 및 운영 총괄 / 정보보호 방침 및 계획 실무지침 수립 및 승인

-- 정보보호 관리자 : 정보보호 롸동의 계획 및 관리 / 정보보호방침의 유지, 이행

-- 정보보호 담당자

--- 정보보호 운영 담당자

--- 정보보호 대응 담당자



(3) 위험관리

- 정보보호관리체계(ISMS)의 5단계에서 위험관리의 위치

-- [정보보호 정책 수립 → 관리체계 범위설정 → 위험관리 → 구현 → 사후관리] 를 계속 반복함

- 위험관리 : 조직이 정보자산에 대한 위험을 수용할 수 있는 수준으로 유지하기 위해

정보자산에 대한 위험을 분석하고 이에 대한 비용대비 효과적인 보호 대책을 마련하는 일련의 과정

- 위험관리과정(5단계로 구성)

-- 위험관리전략 및 계획수립 → 위험분석 → 위혐평가(처리) → 정보보호 대책수립 → 정보보호 계획수립(다이렇게표현하는데?)

-- 위험관리전략 및 계획수립 → 위험분석 → 위혐평가(처리) → 보호대책 선정 → 이행계획 수립(내가 배울때는 이렇게 배움)

-- 위 그림같이 3단계로도 표하기도 하네

- 위험(Risk) : 원하지 않는 사건이 발생해 손실 또는 부정적인 영향을 미칠 가능성

- 위험의 요소

-- 자산(Assets) : 조직이 보호해야할 대상

-- 위협(Threats) : 원치 않은 사건의 잠재적인 원인이나 행위자

-- 취약성(Vulnerability) : 자산의 잠재적인 속성으로, 위협의 이용 대상

-- 정보보호대책(Safeguard) : 위협에 대응하여, 자산을 지키기 위한 대책


1) 위험관리 전략 및 계획수립

- 위험분석 접근법

-- 베이스라인 접근법(Baseline Approach)

--- 위험분석을 수행하지 않는 대신, 모든 시스템에 대해 표준화된 보호대책을체크리스트형태로 제공

--- 소규모조직이나, 대규모조직의 중요치 않은 일반 자산에 대하여 사용하는 접근법(화장실 청소 체크리스트??)

-- 비정형 접근법(Informal Approach ; 전문가 판단법)

--- 구조적인 방법론에 기반하지 않고, 전문가의 지식과 경험에 따라 위험을 분석

--- 작은 조직에서는 효과적

-- 상세 위험분석(Detailed Risk Analysis)

--- 구조적인 방법론에 기반해서 위험을 분석하는 것

--- 많은 시간(돈)과 노력(돈)이 필요하고 비정형 접근법과 같이 고급인력이 필요함(돈)ㅋ

--- 자산분석 → 위협평가 → 취약성평가 → 정보보호 대책평가 → 잔여 위협평가

-- 복합 접근법(Combined Approach)

--- 상세 위험분석을 수행하고, 그 외 다른 영역은 베이스라인 접근법만을 사용하는 방식

- 위험분석 방법론의 선정

-- 정성적 분석방법(Qualitative) : 위험을 매우높은, 높은, 중간, 낮은 등으로 표현

--- 델파이법 : 전문가 집단에게 설문조사를 실시해 의견을 정리하는 분석방법

---- 짧은 시간에 도출할 수 있지만, 전문가의 추정이라 정확도는 낮지

--- 시나리오법 : 어떤 사실도 기대대로 발생되지 않는다고 치고, 특정 시나리오를 통해 발생 가능한 위협의 결과로 순위를 매겨 도출

---- 전반적인 가능성을 추론가능하지만, 발생 가능성의 이론적 추축에 불과해 정확성이 낮지

--- 순위결정법 : 비교우위 순위 결정표에, 위험 항목의 서술적 순위를 결정하는 방식

---- 이것도 정확도 낮네(다 낮어 ㅅㅂ ㅋㅋㅋ)

-- 정량적 분석방법(Quantitative) : 위험을 손실액과 같은 숫자값으로 표현 / 주로 미국에서 사용하는 방식

--- 연간예상손실액(ALE) = 단일예상손실액(SLE) X 연간발생률(ARO)

---- 단일 예상손실액(SEL) = 자산의가치(AV) X 노출계수(EF)


2) 위험분석

- 위험의 3요소인 자산 / 취약성 / 위협을 분석(식별과 분류)

-- 어떻게 할껀지 방법론과 접근방법은 위에서 제시 함


2-1) 위험평가(기출내용엔 없지만, 걍 내가 만들었어)

- 목표 위험 수준 및 우선순위 설정 : 수용가능한 위험수준를 기반으로 우선순위를 결정

-- 수용가능한 위험수준(DOA)은 사전에 정의해야 일관성이 유지됨(위험관리 전략 및 계획수립 단계)


3) 정보보호 대책 선정 및 계획서 작성

- 위험관리의 마지막 순서로, 위험을 분석하고 순위를 매겼으니까 그에 대한 위험처리 방법을 선택하고 계획서 짜는 단계

- 위험처리 방법

-- 위험수용(Acceptance) : 해당 위험의 잠재 손실 비용을 감수
-- 위험감소(Mitigation) : 위험을 감소시킬 수 있는 대책을 채택하여 구현하는 것

-- 위험회피(Risk Avoidance) : 위험이 존재하는 프로세스나 사업을 수행하지않고 포기

-- 위험전가(Risk Transfer) : 보험이나 외주 등으로 잠재적 비용을 제3자에게 이전하거나 할당



(4) 대책구현 및 운영

1) 정보보호 대책 구현

- 정보보호 대책 : 위험을 감소시키기 위한 정보보호조치를 의미(장치 / 절차 / 기법 / 행위 등을 포함)


2) 정보보호 교육 및 훈련

- 수업에서 교수님이 진짜 사실이게 핵심이랬는데 ㅋ(아무리 대책잘짜면 뭐하냐고 상놈들이 실천안하는데)

- 그냥 말단직원부터 임원, 최고경영자까지도 전사적으로 싹다 교육시켜야되


3) 컴퓨터/네트워크 보안운영

- PC보안 / 네트워크 보안 / 매체보안(데이터의 보관과 폐기)



(5) 업무연속성 관리(Business Continuity Management)

1) 업무지속성 관리체계

- 업무연속성 관리 : 재난이나 재해, 테러 같은 예기지 못한 위기상황에서도 적시에 복구해 업무를 계속수행할 수 있는 위기 관리 능력

- 업무연속성 관리 단계

-- 1단계 시작단계 : 업무연속성 관리에 대한 정책의 수립 및 범위설정을 하는 단계

-- 2단계 전략수립단계 : 재해가 업무에 미치는 잠재적인 연향과 위험을 평가 / 위험감소를 위한 사항들을 파악 / 효과적인 전략 수립

-- 3단계 구현단계 : 업무가 지속적으로 이루어지기 위한 프로그램을 수립하는 단계(설비 구현 / 계획을 문서화)

-- 4단계 운영관리단계 : 수립된 업무연속성 전략 및 계획, 절차를 계속적으로 테스트 및 검토, 유지 보수 / 이에 대한 교육과 훈련


2) 업무연속성 계획수립(BCP ; Business Continuity Plan)

- 업무연속성 계획 5단계 방법론(4단계 / 5단계 / 6단계로 종류가 있지만 5단계가 출제됬었어...)

-- 1단계 프로젝트 범위설정 및 계획

-- 2단계 사업영향평가(BIA ; Business Impact Assessment)

--- 각 사업단위가 받게될 재정적 손실의 영향도를 파악해서 문서화

--- 주요 취지 : 핵심우선순위결정(프로세스간의 구별) / 중단시간 산정(얼마만에 복구?) / 자원요구사항(어디에 얼마나 자원할당?)

-- 3단계 복구전략개발

--- 사업영향평가에서 수집된 정보를 기반으로 어떻게 복구를 할 것인지 전략을 세움

-- 4단계 복구계획수립

--- 사업을 지속하기 위한 실제 복구계획의 수립단계 / 문서화는 필수

-- 5단계 프로젝트수행 및 테스트

--- 유지보수 활동을 포함한 이후에 있을 테스트 절차 등을 수립

- 업무연속성 관리 단계에 BCP가 포함되는건가??? 자세히는 모르겠네


3) 업무연속성 유지관리

- 지속적으로 유지보수, 테스트

-- 체크리스트 / 구조적점검 / 시뮬레이션 / 병렬테스트 / 전체 중단테스트


4) 재난복구계획(DRP ; Disaster Recovery Plan)(기출내용엔없는데 책과 기출에있네??)

- BCP는 전사적인 복구계획이라면, DRP는 기업의 세부 시스템 별 복구 계획(카더라...?)

- 재난복구계획 프로세스

-- 데이터 지속처리 계획(DPCP ; Data Processing Continuity Planning) : 재해를 예측하고 그에 대처하기 위한 계획수립

--- 가장 많이 사용되는 대체 처리 사이트(Site ; 공간의개념) 방식

---- Hot Site : 모든 컴퓨터설비를 완전히 갖추고 있는 공간 / 실제로 운영되고 있는 환경과 동일한 상태로 관리)

---- Warm Site : Hot Site와 Cold Site의 절충안(전원/컴퓨터 등은 갖춰져있지만 어플리케이션이 설치되거나 구성되지 않음)

---- Cold Site : 비상시 장비를 가져올 준비만 할 뿐, 어떤 컴퓨터 하드웨어도 공간에 존재하지않음

-- 데이터 복구 계획 유지 보수(Data Recovery Plan Maintenance) : 계획이 항상 적적하게 최신버전을 반영하도록 유지하는 프로세스



(6) 관련 표준/지침

1) 국제/국가 표준

- OECD 정보보호 가이드라인

-- 인식 / 책임 / 대응 / 윤리 / 민주성 / 위험평가 / 정보보호의 설계와 이행 / 정보보호 관리 / 재평가

- TCSEC(Trusted Computer System Evaluation Criteria)

-- 미국에서 1985년 최초로 만들어짐 / 오렌지 북으라고도 함

-- 정보제품을 몇가지 요구사항을 만족하는 수준에 따라 보안등급을 매김(A1, B3, B2, B1, C2, C1)

-- 기밀성, 무결성, 가용성 中, 기밀성을 중시함(무결성, 가용성은 다소 취약)

- ITSEC

-- 1991년에 미국의 TCSEC를 참조해서 만든 유럽 공통 평가기준

-- 기밀성 뿐만아니라 무결성, 가용성에 대한 평가기준도 수용함

- 보안성평가(CC ; Common Criteria) : TCSEC, ITSEC같이 나라/지역별로 서로 다른 평가기준을 하나로 표준화한 결과

-- 현재 3.1버전까지 공개

-- CCRA(Common Criteria Recognition Arrangement) : 정보보호 제품의 안정성을 회원국가간에 상호인정하는 국제 협약

--- CAP(인증서발행국) : 국내에서 발행한 정보보호시스템 평가 인증서가 해외에서도 인정받게됨

--- CCP(인증서수용국) : 정보보호 평가 인증서를 발행은 않하고 수용만 하는 국가

-- 우리나라는 CAP에 2006년에 가입함

-- CAP에 가입한 국가는 5년마다 재심사(2012년 11월에 있었음(일본과 프랑스가 심사))

http://www.cybersecurity.my/mycc/mutual.html

- 보안성평가에 있어서 국내기관과 역할

-- 정책기관 : 행정자치부

-- 인증기관 : 미래창조과학부

-- 평가기관 : 한국인터넷진흥원 + 기타 등등

- 보안성평가의 결과

-- 국제적인 표준은 EAL(Evaluation Assurance Level) 1부터 7까지 있음

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

-- 우리나라는 가(EAL 4), 나(EAL 3), 다(EAL 2)로 분류



2) 인증체계

- BS7797

-- 조직의 정보를 체계적으로 관리하고 정보보안사고를 예방하기 위해 영국에서 제정된 규정

- ISMS(Information Security Management System)

-- BS7797을 기반으로 국내 환경에 적합하게 작성

-- 구성요소 : 정보보호관리과정 / 정보보호대책 / 문서화

--- 정보보호관리과정 : 정보보호 관리체계 인증심사시 요구되는 필수 항목 / 지속적으로 유지관리되는 순환 주기의 형태

---- 정보보호정책 수립 및 범위설정 → 경영진책임 및 조직구성 → 위험관리 → 정보보호대책구현 → 사후관리

--- 정보보호대책 : 총 13개분야 92개 통제항목으로 구성

---- 시스템개발보안 / 암호통제 / 접근통제 / 운영보안 / 정보보호정책 / 정보보호조직

---- 외부자보안 / 정보자산분류 / 정보보호교육 / 인적보안 / 물리적보안 / 침해사고관리 / IT재해복구



Posted by 사라링

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


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로 보냄(어차피 못뜯어봐 ; 금융기관의 공개키로 암호화 했기에)


Posted by 사라링

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


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 세부 기술 내용은 다루지 않을래(구성요소정도만 알아도 될듯)

Posted by 사라링


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


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)

- 네트워크 접근제어

- 네트워크에 접근하는 모든 기기의 보안상태를 점검하여, 안전이 확인된 기기만 접근시키는 보안 솔루션

- 안전이 취약한 기기를 발생했다고 해서 능동적으로 제거를 하는 솔루션은 아님

- 백신의 설치 유무 / 업데이트 유무 등 강제적인 의무사항을 이행했는지만 확인함(강제성만 띔)



Posted by 사라링

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


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

(1) 운영체제 개요

1) 운영체제의 주요 기능

- 운영체제

-- 시스템 자원을 효율적으로 사용하게 하는, 사용자와 컴퓨터 간의 인터페이스 역할


2) 운영체제의 구조(일반적으로 기능별로 5단계로 구분)

- 1단계 : 프로세서 관리(프로세서랑 프로세스는 다름)

- 2단계 : 메모리 관리

- 3단계 : 프로세스 관리

- 4단계 : 주변장치 관리

- 5단계 : 파일 관리


3) 운영체제의 기술발전 흐름

- 1세대

-- 일괄처리시스템(Batch Processing System)

- 2세대

-- 다중프로그램 시스템(Multi-Programming System)

--- I/O 장치와 CPU 사이의 속도 차이를 이용하여, 하나의 CPU와 주기억장치로 여러 프로그램을 동시에 처리하는 방식

--- I/O 장치의 조작으로 CPU 유휴시간이 발생하면, 다른 작업을 처리함

-- 시분할 시스템(Time Sharing System)

--- 라운드 로빈(Round Robin ; RR) 방식이라고도 함

-- 다중처리 시스템(Multi-Processing System)

--- 여러 개의 CPU와 하나의 주기억 장치를 이용해, 여러 프로그램을 동시에 처리 하는 방식

-- 실시간 시스템(Real Time Processing System)

- 3세대

-- 다중모드처리(Multi-Mode Processing)

--- 일괄처리 시스템, 시분할 시스템, 다중처리 시스템, 실시간 처리 시스템을 모두 제공하는 시스템

- 4세대

-- 분산처리 시스템(Distributed Processing System)

--- 여러 개의 컴퓨터(프로세서)를 통신회선으로 연결해서 하나의 작업을 처리하는 방식

--- 각 단말장치나 컴퓨터들은 고유의 운영체제와 CPU, 메모리를 가지고 있음



(2) 운영체제의 주요 구성 기술

1) 프로세스 관리

- 프로세스와 스레드의 개념(쉬우니까 생략)

- 프로세스 제어 블럭(PCB ; Process Control Block)

-- 운영체제가 프로세스에 대한 정보를 저장해 놓은 저장소

-- 다른 프로세스로 제어를 넘겨줄 때, 현재 실행중인 프로세스의 정보를 PCB에 저장하고 제어를 넘김

-- 각 프로세스가 생성될 때마다 PCB가 생성되고, 종료되면 제거됨

-- 부모 프로세스와 자식 프로세스는 PCB를 공유하지는 않음

- 프로세스 구성 요소

-- Code 영역 / Data 영역 / Stack 영역 / Heap 영역

- 프로세스 상태와 전이(그림설명 따윈 없다)

-- 프로세스 상태 : 생성 / 준비 / 실행 / 대기 / 종료

-- 프로세스 상태의 전이 : Dispatch(준비→실행) / Timer Runout(실행→준비) / Block(실행→대기) / Wake UP(대기→준비)

- 프로세스 스케쥴링 : 어떤 프로세스한테 CPU 사용권을 주는게 현명한가??

-- 선점형 스케쥴링 정책(Preemptive Scheduling Policy) : 처리 도중 뺏기 가능

--- SJF(Shortest Job First ; 최단작업 우선 처리)

--- SRT(Shortest Remaining Time First ; 최단 잔여 시간)

--- RR(Round Robin ; 순환할당 스케쥴링) : 시분할 시스템에 쓰이는거

--- MLQ(Multi Level Queue ; 다단계 큐)

--- MFQ(Multi level Feedback Queue ; 다단계 피드백 큐)

-- 비선점형 스케쥴링 정책(Non-Preemptive Scheduling Policy) : 일단 사용권 받으면 끝까지 쓰고 넘김

--- SJF(Shortest Job First ; 최단작업 우선 처리) ; 선점형, 비선점형 둘다 사용가능해

--- FIFO(First In First Out ; 선입선출)

--- FCFS(First Come First Service ; 선입 선출)

--- HRN(Highest Response Ratio Next) : CPU할당을 받을 시간과 기다린 시간으로 계산되는 우선순위로 결정

---- Priority = (Estimated_Run_Time + Waiting_Time) / (Estimated_Run_Time)

---- Priority가 큰 수를 먼저 실행

- 프로세스 교착 상태(Deadlock)

-- 발생 조건

--- 상호 배제(Mutual Exclusion) : 한 프로세스가 자원을 다른 프로세스가 사용못 하게 배제할 때

--- 점유와 대기(Wait) : 프로세스가 자신에게 할당된 자원을 해제 안하고, 다른 자원을 기다릴 때

--- 비중단 조건(비선점 조건 ; Non-Preemption) : 프로세스에 할당된 자원을 끝날 때까지 해제 할수 없을 때

--- 환형대기 조건(Circular Wait) : 상호 배제 조건이 환형을 이루고 있다고 생각하자

-- 해결방안

--- 예방 : 교착 상태의 필요조건을 부정함으로써, 교착 상태가 발생하지 않도록 하는 방법

--- 회피 : 교착 상태 가능성을 인정하고, 적절하게 피하는 방법(은행원 알고리즘)

--- 발견(탐지) : 교착 상태가 발생하면, 교착 상태의 프로세스와 자원을 발견하는 방법

--- 회복(복구) : 교착상태를 일으킨 프로세스를 종료하고 할당된 자원을 회수하는 방법


2) 기억장치 관리

- 주기억장치

-- 반입기법(Fetch) : 언제 보조기억장치의 데이터를 주기억장치로 옮기느냐??

--- 요구 반입 정책

--- 예상 반입 정책

-- 배치기법(Placement) : 보조기억장치의 데이터를 주기억장치의 어디로 위치시키느냐??

--- 최초 적합

--- 최적 적합

--- 최악 적합

-- 교체기법(Replacement) : 공간확보를 위해 어떤 데이터를 제거 하고 새로운 데이터를 위치할 것이냐??

--- FIFO(First In First Out)
--- LRU(Least Recently Used) : 가장 오랫동안 사용안한걸 바꿈

--- LFU(Least Frequently Used) : 가장 사용 횟수가 작은걸 바꿈

--- NUR(Not Used Recently) : 최근에 전혀 사용되지 않은걸 바꿈

- 가상기억장치

-- 구현 방식

--- 페이징(Paging) 기법 : 프로그램을 동일한 크기의 Page로 나누어 구현

---- 내부단편화의 원인

---- 스레싱(Thrashing) : 자주 페이지의 교체가 일어나는 현상(프로세스 처리 시간 < 페이지 교체 시간)

---- 워킹 셋(Working Set) : 자주 사용되는 페이지들을 묶어서 주기억장치에 계속 상주시키는방법, 스레싱의 대책

---- 페이지 교체 알고리즘

----- FIFO(First In First Out)

----- LRU(Least Recently Used) : 가장 오랜기간 사용하지 않은 페이지 교체

----- OPT(Optimal ; 최적교체) : 가장 사용되지 않을(?) 페이지를 교체 ;; 실현가능성 희박

----- SCR(Second Chance Replacement) : 참조 비트를 주고, 1이면 0으로 깍고, 0이면 교체

--- 세그먼테이션(Segmentation) 기법 : 프로그램을 가변적 크기의 Segment로 나누어 구현

---- 외부단편화의 원인

※ 단편화(Fragmentation)

- 내부 단편화(Internal Fragmentation) : 할당 받은 페이지를 다 사용 못했을 때 생기는 자투리 공간들(영향이 적긴적지)

-- 압축(Compaction)으로 해결 : 분산되어있는 단편화된 빈 공간들을 결합(Garbage Collection)

- 외부 단편화(External Fragmentation) : 할당과 제거를 반복하면서, 적재하기 얘매해진 공간들

-- 통합(Coalescing)으로 해결 : 인접해 있는 단편화된 공간을 하나의 공간으로 통합

- 보조기억장치

-- 디스크 스케쥴링

--- FIFO(=FCFS)

--- SSTF(Short Seek Time FIrst) : 탐색거리가 가장 짧은 요청을 먼저 처리
--- SCAN : 헤드가 한 방향으로 쭉가면서 처리하는 방법, 실린더 끝까지 가서 방향을 전환한다.

--- C-SCAN : 헤드가 실린더 끝에서 안쪽으로이동하며 처리

--- N-Step SCAN : 헤드의 방향이 전환될 때, 이미 대기 중이던 요청만 처리(도중에 생긴 요청은 무시)


3) 파일 시스템 관리

- 디렉터리의 구조(산업기사에 나온기억이..)

-- 1단계 디렉토리 구조 : 모든 파일이 같은 디렉토리에 존재하며, 파일 이름은 유일한 구조

-- 2단계 디렉토리 구조 : 중앙에 마스터 디렉토리(MDF)가 있고, 각 사용자의디렉토리(UFD)가 하위에 있는 구조

-- 트리 디렉토리 구조 : 하나의 루트 디렉토리와 다수의 하위 디렉토리로 구성되며, 포인터로 탐색(일반적으로 OS에서 사용)

-- 비주기 디렉토리 구조(Acyclic Graph Directory) : 파일과 디렉토리의 공유가 허용될 수 있는 사이클이 없는 구조

-- 일반 그래프 구조 : 사이클이 허용되고, 기본 트리 디렉토리 구조에 링크를 첨가한 구조

-- http://wingsofgod.tistory.com/entry/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC-%EA%B5%AC%EC%A1%B0

- Windows File System

-- FAT(File Allocation Table)

--- DOS 때 부터 사용되고 있는 대표적인 File System. FAT16과 FAT32 등이 있다

--- 하드디스크에 FAT라는 영역을 만들어 파일의 실제 위치 등의 정보를 기록하고 이를 이용함

--- 저용량에 적합 / 보안에 취약 / 호환성이 우수

-- NTFS(NT File System)

--- MFT(Master File Table)를 사용하여 관리하며, Mirror와 파일로그가 유지되어 파일 복구가 가능함

--- FAT에다가 대용량 / 보안성 / 압축기능 / 원격저장소 등의 기 능을 추가해서 만든 윈도우 전용 File System

--- 대용량 지원 / 강력한 보안 / 자동 압축 및 안정성 / 호환성이 구림 / 저용량에선 FAT보다 느림

- Unix & Linux File System

-- EXT2 : FSCK(File System Check)으로 시스템 손상 복구 가능

-- EXT3 : 저널링(Journaling) 기술로 더욱  빠르고 안정적인 복구가 가능

-- EXT4 : 빨라진 FSCK / 하위 호환성 / 지연된 할당(Allocate-On-Flush ; 데이터가 디스크에 쓰이기전까지 블록 할당 지연)

- Partition

-- 주 파티션 : 기본 파티션을 의미 / 주 파티션의 수 + 확장 파티션의 수 <= 4

-- 확장 파티션 : 저장 공간을 없으며, 논리 파티션을 만들게 해주는 그릇의 역할 / 디스크에 하나만 생성 가능

-- 논리 파티션 : 최대 12개(NTFS에서는 제한이 없다네??)


4) 분산 시스템

- 개념 : 분산되어 있는 컴퓨터에서, 작업이 나누어 처리되고 그 결과가 서로 호환되도록 연결되어 있는 시스템

- 투명성(Transparency)를 보장해야 함

-- 위치 투명성 : 컴퓨터의 실제 위치를 몰라도 접근 가능

-- 이주 투명성 : 자원 이동에 제한이 X

-- 병행 투명성 : 사용자의 위치를 몰라도 다른 사용자와 자원의 공유 가능

-- 복제 투명성 : 사용자에게 통지할 필요 없이 자유롭게 복제 가능



(3) 운영체제 사례별 특징과 주요 기능

1) 유닉스

- 구성

-- 커널(Kernel)

--- OS의 핵심으로 주기억장치에 상주하여 자원을 관리함

--- 크게 입출력 / 메모리 / 프로세스 / 파일관리의 부분으로 나눔

--- 쉘에서 지시한 작업을 수행함

-- 쉘(Shell)

--- 커널과 사용자간의 인터페이스를 제공

--- 사용자가 입력하는 명령의 입/출력을 수행하며 프로그램을 실행시킴

--- 명령어 해석기/번역기라고 함

-- 파일 시스템(File System)

--- 계층적 트리 구조를 가지고 있고 다음과 같이 구성되어 있음

---- 부트 블럭(Boot Blocks) : 파티션의 첫 부분에 예약되어 있는 블럭들 / 부팅시 필요한 코드 저장(커널 적재 코드 등)
---- 슈퍼 블럭(Super Block) : 파일 시스템당 한 개씩 생성 / 전체 파일 시스템에 대한 정보 저장

---- 아이노드(I-Nodes) : 파일 이름을 제외한 모든 파일과 디렉토리에 대한 정보를 저장

---- 데이터 블럭(Data Blocks) : 실제 데이터가 저장


2) 윈도우


3) 리눅스


4) 보안운영체제 특징

- 접근 권한 통제(Authorization) ; Authorization = Authentication + Access Control

-- 사용자 인증(Authentication)

-- 접근 통제(Access Control)

- 침입 탐지 및 방어(Intrusion Detection & Prevention)




2. 클라이언트 보안(7문제/20문제)

(1) 윈도우 보안

1) 설치 및 관리

- 음... 정품 구입해서 쓰고, 사양에 맞춰서 설치하라는 내용

- 라이센스 모드

-- Per Server : 서버에 동접하는 클라이언트 숫자에 따라 라이센스를 구매하는 방식

-- Per Seat : 클라이언트 숫자에 따라 라이센스를 구매하는 방식

- 사용자 계정 관리

-- 암호 설정해주는게 좋지

-- 사용자 계정 컨트롤(UAC) : 관리자 수준의 권한이 필요한 변경 사항이 있을 때, 사용자에게 이를 알려주는 것


2) 공유자료 관리

- 공유 폴더

-- NTFS은 사용자계정이나 그룹에 대해서, 파일과 폴더에 퍼미션(Permission)을 줄 수 있음

-- Everyone 그룹에 대해서는 기본적으로 <읽기> 권한만 주어짐

--- 로컬에서 그냥 폴더 만들면 Everyone 그룹에 대해서 <모든 권한>이 주어짐

- 숨은 공유??(공유 폴더 이름 마지막에 $를 붙이는 폴더)

-- 네트워크 공유 목록에서 공유 폴더를 안보이게 함

-- 접근하기 위해서는 공유 폴더 이름을 통해 직접 접근해야 함

- 관리를 목적으로하는 기본적인 공유 폴더(ADMIN$, IPC$, C$, 등)

-- 이름에서 볼 수 있듯, 모두다 숨은 공유로 만들어져 있음

-- CMD에서 net share 명령어로 확인이 가능함

-- 네트워크 접근 사용만을 제한할 수 있고, 로컬 접속은 제한을 할 수 없음

-- 보안상 사용하지 않을 땐 비활성화 하는 게 좋음

--- 관리적 공유 폴더 제거 하기(C$, D$, 등)

---- 위치 : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

---- AutoShareWks의 값을 REG_DWORD 타입의 0으로 바꿈

---- 걍 HKEY_LOCAL_MACHINE 및에다가 AutoShareWks만들어서 0넣어도 되는듯

--- 널 세션 제거하기(IPC$)

---- IPC$는 제거가 안되기에 널 세션을 제거하는 방법을 이용

---- 위치 : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA

---- restrictanonymous의 값을 REG_DWORD 타입의 1로 바꿈(기본값은 0)


3) 바이러스와 백신

- 바이러스(Virus)

-- 다른 프로그램에 기생해서 실행(독자적으로 실행X)

-- 파일 전송 기능이 없어서, 네트워크 대역폭에는 영향을 끼치지 않음

-- 대표적으로 1994년 4월 26일 CIH 바이러스

- 웜(Wrom)

-- 독자적으로 실행(기억장소에 코드나 실행파일로 존재)

-- 네트워크를 사용해서 자신을 복사하기에, 네트워크 대역폭을 잠식함

-- 대표적으로 2001년 9월에 발생한 님다(Nimda)

- 트로이목마

-- 자기 자신을 복제하지는 않지만, 악의적 기능을 포함하는 프로그램

-- 유틸리티 프로그램에 내장되거나, 그것으로 위장해 배포됨

-- 대표적으로 백오리피스같은 프로그램

- 스파이웨어(Spyware)

-- 사용자몰래 PC에 설치되어 정보를 수집하는 프로그램


4) 레지스트리 활용

- 시스템을 구성하기 필요한 정보를 저장한 중앙계층형 데이터베이스

- HKEY_CURRENT_USER(HKCU) : 현재 로그온 되어 있는 사용자에 관련된 정보 등

- HKEY_USERS(HKU) : 컴퓨터의 모든 사용자 프로필 정보 등

- HKEY_LOCAL_MACHINE(HKLM) : 하드웨어와 프로그램 설정 정보

- HKEY_CLASSES_ROOT(HKCR) : OLE데이터와 확장에 대한 정보 등

- HKEY_CURRENT_CONFIG(HKCC) : 시스템 시작시 컴퓨터에서 사용하는 하드웨어 프로필 등

- 악성코드 구동을 위해 주로 HKEY_CURRENT_USER와 HKEY_LOCAL_MACHINE이 이용됨



(2) 인터넷 활용 보안

1) 웹브라우저 보안

- 검색 기록 / 쿠키 삭제 / 임시파일 삭제

- 익스플로러에서는 보안 수준을 설정하기

-- 보통 이상으로 사용하고, 세부 설정 가능

- 브라우저에서 개인정보를 수집하는 기술

-- 쿠키(Cookie) & 슈퍼쿠키(Super Cookie)

-- 비콘(Beacon ; Web Bug)

-- History Stealing

-- Fingerprint

- HTTP(Hyper-Text Transfer Protocol) 프로토콜(이걸 여기서 다뤄야되는건가??)

--웹 상에서 파일(텍스트, 이미지, 등)을 주고 받기 위한 프로토콜로 TCP/IP와 관련된 프로토콜(80번 포트)

-- 한 번 접속해서, 정보 주고받고 접속을 끊어버리는 특이한 특징(그 때문에 세션과 쿠키라는 걸 이용하게 되지)

-- HTTP 요청 방식

--- GET 방식 : 클라이언트가 서버로 전송하는 정보를 URL에 담는 방법

--- POST 방식 : 요청사항을 HTTP 헤더 안에 넣어서 서버로 전송하는 방법

-- HTTP 1.0

--- 한 번에 한 종류의 데이터만 받을 수 있음(이미지와 텍스트라면 총 두 번의 접속이 필요)

--- 요청 방식

---- GET : GET 방식으로 서버에 리소스(정보)를 달라고 요청

---- HEAD : GET방식과 유사하지만, 요청한 리소스가 아닌 Header만 채워서 응답(해당 정보를 잘 처리하는지 테스트)

---- POST : POST 방식으로 서버에 리소스를 달라고 요청

-- HTTP 1.1

--- 한 번에 이미지와 텍스트까지 받을 수 있음

--- 요청 방식

---- GET

---- HEAD

---- POST

---- OPTION : 서버가 요청한 리소스에서 어떤 요청방식들을 처리해주는지 알려줌

---- PUT : 서버에 요청한 리소스를 저장함

---- TRACE : 루프백 메시지를 위한 요청을 함(이것도이해안가ㅠ)

---- CONNECT : ??이해안감

---- DELETE : 명시된 리소스를 서버가 삭제할 것을 요청

-- HTTP 상태코드(안보여주는게 이득 ; 시험 맨날 나와)

--- 2xx : 성공

---- 200 : OK

---- 201 : 서버가 성공적으로 요청된 새 리소스를 생성(PUT 메소드인듯)

--- 3xx : 재전송

--- 4xx : 클라이언트 측 에러

---- 401 : Forbidden

---- 403 : 유효한 요청에 대해 서버가 응답을 거부(권한이없는 401과는 다름)

---- 404 : Not Found

--- 5xx : 서버 측 에러

---- 500 : 내부 서버 오류

---- 501 : 해당 메소드 인식 못하거나 기능이 없음


2) 메일 클라이언트 보안

- PGP(Pretty Good Privacy)

-- 데이터 암호화와 복호화하는 프로그램인데, 전자 메일의 보안성을 높이기 위해 자주 사용되

-- IETF에서 표준으로 채택한 PEM과 비교되(나중에 또 나와)

-- 수신 부인방지와 메시지 부인 방지 기능이 없어

-- 메시지의 비밀성을 위해 공개키 암호기술을 사용(RSA, IDEA 등)

-- 메시지의 무결성을 위해 메시지 인증을 사용

-- 메시지의 생성, 처리, 전송, 저장, 수신 등을 위해 전자서명을 사용



(3) 공개 해킹도구에 대한 이해와 대응

1) 트로이목마 S/W

- 대표적인 툴 : AOL4FREE.COM / Shark2 / NetBus / Back Orific


2) 크래킹 S/W

- 루트킷(RootKit) : 서버 내에 침투해서 백도어를 만들고 로그를 삭제하는 등의 패키지들

-- 대표적으로 lrk5

-- 루트킷을 찾아내는 프로그램은 안티루트킷(Anti-RootKit) : 대표적으로 Icesword

- 패스워드 크랙(Password Crack)

-- Brute Force Attack / Dictionary Attack / Password Guessing / Rainbow Table 등의 공격 방법으로 크랙

-- 대표적인 툴 : John the Ripper / pwdump / LOphtCrack / ipccrack / chntpw(to reset pw) / ERD Commander

- 포트 스캐닝(Port Scanning) (SAINT와 Nmap 정도만 알고 있어도 될듯)

-- 다중 취약점 스캔 : SAINT / sscan2k / vetescan / mscan 등

-- 특정 취약점 스캔 : cgiscan / winscan / rpcsan

-- 은닉 스캔 : Nmap / stealthscan

-- 네트워크 구조 스캔 : firewalk / Nmap

-- 스캐닝 기법

--- Openning Scanning : TCP Connect Scanning

--- Half-Open Scanning : SYN Scanning

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

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

-- 포트 스캐닝의 구분

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

--- UDP 포트 스캐닝

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

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

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

- Nmap 사용법(잘 나와)

-- 스캔 타입(이름잘보면 딱 보여)

--- -sS : TCP Syn Scan

--- -sF / -sX / -sN : FIN / X-Mas / NULL Scan

--- -sU : UDP Scan

--- -sP : Ping Sweep

--- -b : FTP Bounce Attack

--- 등등

-- 스캔 옵션

--- -P0 : Don't ping before scanning ; ping으로 사전 조사 하는 과정을 뺌(네트워크에 살아있음을 알고있을 때 씀)

--- -PT <PORT_NUMBER>: ICMP Request Packet 보내고, 응답기다리는 대신에 TCP ACK를 보내 응답 기다림. 살아있으면 RST받음

--- -PS

--- -PB

--- -O : 운영체제 확인

--- -p <PORT_NUBMER>

--- -S <IP_ADDRESS> : Spoofing

--- 등등

-- 예

--- #./Nmap -p 1-30,110,65535 203.x.x.x

---- 203.x.x.x의 1~30번, 110번, 65535를 스캔한다.

3) 키로그 S/W

- 대표적인 툴 : Winhawk, Key~~로 시작되는 툴들



(4) 도구활용 보안관리

1) 클라리언트 보안도구 활용

- BlackICE

-- 일종의 방화벽이라고 보면될 듯

-- 외부에서 자신의컴퓨터에 접근하는 것을 탐지 / 제어하는 프로그램

-- 침입 차단 / 어플리케이션 보호 / IDS 기능 제공

- Snort

-- 공개 네트워크 IDS

-- 다양한 OS 지원 / Rule 설정가능


2) 클라이언트 방화벽 운영

- Windows 방화벽(ipsec)

- Linux/Unix 방화벽(iptables)

-- iptables는 뭐 생략 쉬우니까




3. 서버보안(8-10문제/20문제)

(1) 인증과 접근통제

1) 계정과 패스워드 보호

- Linux Server

-- 계정 생성, 수정, 삭제 : useradd / usermod / userdel

-- 계정과 패스워드에 관련된 파일

--- /etc/passwd : 사용자 계정 정보

--- /etc/shadow : 사용자 패스워드

--- /etc/group : 그룹 ID / 목록

--- /etc/gshadow : 그룹 정보

--- /etc/login.defs : 사용자 전체에 자동 할당되는 UID, GID 범위, 패스워드 유효 기간, useradd 설정사항

--- /etc/default/useradd : useradd 명령어로 계정 생성 시, 어떤 환경과 파일을 참조할 것인가에 대한 정보

--- /etc/skel : 계정 생성시 필요한 파일, 디렉토리를 저장하고 있는 디렉토리, 새 계정 생성시 그 대로 해당 계정의 홈디렉토리로 복사

-- /etc/passwd 구성

--- 사용자계정이름 : x(패스워드가 암호화되어 저장됨을 의미) : UID : GID : 계정정보 : 홈디렉토리 : 쉘

--- root : x : 0 : 0 : root : /root : /bin/bash

--- ※ Linux에서 사용자 계정 잠구는 법

---- /etc/passwd에서 쉘 정보에다가 /bin/false 또는 /bin/nologin을 기술함

---- passwd -l <계정명>

-- /etc/shadow 구성

--- root : $1$F9FBAJKWEBKF4A30AJWNFKE : 15551 : 0 : 99999 : 7 :  :  :  :

--- 사용자계정 : 암호화된 패스워드 : 패스워드 바꿔진 日수: 패스워드 변경할수있는 최소 日수 : 패스워드 만료 日수 : 패스워드 만료 경고日수 : 사용자 제한 이후 계정 정지까지 日수 : 계정만기일 : (사용안함)

- Windows Server

-- 컴퓨터 관리나 net user 명령어로 계정 생성, 수정, 삭제

-- 계정 생성 시 옵션

--- 다음 로그온시 반드시 암호 변경

--- 암호 변경 불가

--- 암호 사용기간 제한 없음

--- 계정 사용 안 함(사용할 때까지 로그인 X)

-- 기본 제공 계정인 Administrator는 계정 사용 안함으로 설정하거나 이름을 변경하는게 보안상 이득

-- Guest 계정은 불필요하면 계정 사용 안함으로 설정(기본 값은 사용안함)

-- 암호 정책

--- 암호의 복잡성

--- 최근 암호 기억 : 비슷하게 못 만들게 하기 위해서

--- 최대 암호 사용기간

--- 최소 암호 사용 기간

--- 최소 암호 길이

--- 해독 가능한 암호화를 사용해 암호 저장 : 왜있을까??

-- 계정 잠금 정책

--- 계정 잠금 기간 : 0으로 하면 명시적으로 잠금 해제 할때 까지 유지(0부터 99999까지 ; 분 단위)

--- 계정 잠금 임계값 : 실패한 로그인 시도 최대 횟수를 설정(0부터 999까지 적용가능 ; 0이면 잠금 적용 X)

--- 다음 시간 후, 계정 잠금 임계값을 0으로 설정(1에서 99999까지 ; 분 단위)


2) 파일 시스템 보호

- Windows

-- FAT12 / FAT16 / VFAT / FAT32

-- NTFS

-- 관리 공유 폴더 제거 / 마지막에 로그인한 계정 숨김 / 예약작업 수시로 체크 / 이동식 디스크의 자동실행방지 / 원격 레지스트리 서비스 중지

- Linux

-- minix / ext2 / ext3 /ext4

- 클라우드 파일시스템

-- Ceph

-- GlusterFS(글러스터)

-- Google 파일시스템(GFS)

-- Hadoop 분산파일시스템(하둡)

-- Lustre 파일시스템

-- Panasa 파일시스템

-- PVFS2

-- OASIS : 한국전자통신연구원 저장 시스템 연구팀에서 개발한 객체 기반 클러스터 파일 시스템


3) 시스템 파일 설정과 관리

- 리눅스 디렉토리 구조(트리 구조)
    -- /bin : 필수 바이너리 파일, 시스템 기본 명령어

-- /sbin : 관리자가 사용하는 시스템 운영에 필요한 명령어

-- /boot : 부팅에 필요한 커널과 핵심 파일

-- /dev : 장치 파일

-- /mnt : CD-ROM과 플로피의 마운트 포인트를 제공하는 디렉토리

-- /lib : 시스템 운영 및 프로그램 구동시 필요한 공유 라이브러리

-- /var : 내용이 자주 변경되는 가변 자료를 저장하는 디렉토리

-- /usr : 각종 서드 파티 응용 프로그램이 설치되는 프로그램

-- /proc : 시스템 상태를 제공하기위한 디렉토리와 파일들이 존재

- Mount 하기

-- 디바이스와 디렉토리의 연결

-- # mount <디스크나 파티션> <마운트될 디렉토리>

-- 재부팅시 마운트가 풀리기에, /etc/fstab에 기술해서 자동 마운트

- Shell 설정 변경

-- /etc/profile에 설정된 값대로 shell에 적용

-- /root/.bashrc : 시스템 전체에 적용되는 함수와 alias

--- 파일 안에 alias rm='rm -i' 처럼 기술하면, rm이란 명령어는 rm-i와 동일하게 처리하라는 의미

-- /root/.bash_profile : 사용자 환경 설정과 시작프로그램

-- /root/.bash_history : 사용자 최초 로그인 후 생성, 사용자가 쉘에 입력한 명령어를 기록함

- 쿼타(Quota)

-- 디스크에 사용량을 체크 감시하고, 한 파티션에 너무 많은 디스크를 사용하게 되면 관리자에게 알리도록 제한함

- 파일 시스템 점검(File System Check & Recovery) : FSCK를 사용함

-- 저널링 파일시스템으로 자동 복구가 되지만, 복구가 불가능한 경우 수동으로 복구해주어야 할때 씀

-- 많은 시간을 필요로하는 경우가 많음

-- 반드시 검사하고자 하는 파일시스템은 unmount하고 검사해야 함

- 퍼미션(Permission)

-- umask : 파일은 666에서 빼고, 디렉토리는 777에서 뺌

-- setuid(s, 4000) / setgid(s, 2000) / sticky bits(t, 1000)

-- setuid, setgid는 해당 파일이 실행될 때에만, 실행한 사용자에게 소유자(그룹)의 권한을 부여함

--- sticky bits는 주로 공유 디렉토리에 지정하는데, 파일을 root와 소유자만이 삭제, 수정이 가능하게 함

-- ※ setuid 파일 찾기 : find / -user root -perm -4000 -print -xdev


4) 시스템 접근통제 기술

- Linux의 iptables

-- 생략 쉬우니까

- Windows의 ipsec

-- 생략 걍 GUI로 세팅하는거

- 통제 방식(뒤에도 나오는것 같은데)

-- 강제적 접근통제(MAC)

--- 주체의 권한을 기준으로 객체에 대한 접근을 제어

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

--- 주체가 속한 그룹의 권한을 기준으로 객체에 대한 접근을 제어

-- 역할기반 접근통제(RBAC) : 역할을 미리 설정하고, 주체를 역할에 할당한 후, 역할에 접근 권한 부여

--- 최근에 많이 사용되는 통제방식으로 관리자에게 편리함



(2) 보안관리

1) 운영체제 설치


2) 시스템 최적화

- CPU

-- top : CPU와 Memory, swap에 대한 전체적인 모니터링 가능

-- ps aux : CPU와 Memory 사용량이 큰 PID를 확인 가능

-- pstree : 시스템에서 프로세스간의 연결구조를 트리 구조로

- Memory

-- free : 사용되는 메모리와 여유가 있는 메모리가 얼마인지 알려주는 간단한 명령어

-- vmstat : 가상 메모리 상태를 확인(Swap-Out과 Swap-In을 봐)

- Disk I/O

-- df : 파일 시스템의 상태를 기초로 용량을 출력(df -k(KB단위) / df -h(다양한 단위))

-- du : 실제 디렉토리와 파일의 크기를 확인해서 용량을 출력

-- iostat : 디스크에 I/O가 얼마나 나타나는 모니터링

- Network

-- netstat : 포트 정보

-- ping

-- traceroute

-- tcpdump


3) 시스템 로그 설정과 관리

- 시스템 로그는 시스템의 정확한 시간이 필수

-- #rdate -s time.bora.net

- Linux의 /var/log 디렉토리

-- messages

--- 로그인 기록에서 디바이스에 관련된 정보와 네트워크 등등 다양한 정보

--- 콘솔에 출력되는 메시지들이 저장된다. 시스템 장애가 생기면 이 파일을 점검해서 취약점 점검

-- pacct

--- 로그인부터 로그아웃까지 입력한 명령과 시간, 작동된 tty 등에 대한 정보 수집 ; binary

--- 명령어 : lastcomm

-- history

--- 사용자별로 실행한 명령을 기록하는 로그

-- lastlo

--- 사용자별로 최근 로그인 시간 ; binary

--- 명령어 : lastlog

-- wtmp

--- 전체 로그인기록 (최근에 사용자 로그인 및 로그아웃한 정보) / utmp의 기록이라고 보면될듯; binary

--- 명령어 : last

-- utmp

--- 현재 로그인 되어 있는 사용자에 대한 정보(/var/run/utmp에 있다) ; binary

--- 명령어 : w / who / users / finger

-- btmp

--- 로그인이 실패한 경우에 ; binary

--- 명령어 lastb

-- sulog

--- Su 명령와와 관련된 로그

-- dmesg

--- 부팅부터 HW적인 에러

-- secure

--- 보안과 관련된 중요한 로그(사용자 인증관련된 로그; FTP나 SSH 같은 것)

-- httpd access_log, error_log

--- 웹서버에 대한 로그

-- xferlog

--- FTP로 어떤 자료가 오갔는지 보여주는 로그


4) 서버 해킹 원리의 이해

- 1) 정보수집단계

-- 포트스캐닝 등

- 2) 시스템 침입단계(root권한 획득이 목적)

-- exploit(root계정 따내는 여러 프로그램)

-- 서버 설정 오류 / 원격 버퍼 오버플로우 취약점 / 계정 도용 / 패스워드 파일 획득 / 기타 취약점을 이용해 침입함

-- 가장 단순하지만 강력한 대책은 업데이트(패치)

- 3) 공격 경유지나 혹은 거점 마련

-- 백도어 등을 설치하거나, 또다른 공격의 공유지로 삼음


5) 서버관리자의 업무

- 시스템의 시작과 종료 및 재시작

- 사용자 계정관리

- 프로세스 및 디스크, 메모리

- 네트워크 연결 및 상태관리




(3) 서버보안용 S/W 설치 및 운영

1) 시스템 취약점 점검도구

- NESSUS : 서버-클라이언트 구조로 작동하는 취약점 점검 도구

- SARA(SATAN기반) : 서버, IDS, 라우터 등의 보안 분석도구

- nikto2 : 웹 서버 스캔해서 취약점 점검(오픈 소스)


2) 시스템 침입 탐지 시스템


3) 무결성 점검도구

- trpwire : 가장 대표적인 무결성 점검도구로써, 시스템의 모든 파일에 대해 DB를 만들어서 추후 변동사항을 점검

- Fcheck : tripwire보다 조금 더 간편한 설치와 설정


4) 접근통제 및 로깅도구

- TCP Wrapper

-- 슈퍼데몬(Xinetd)의 영향을 받는 데몬들은 TCP Wrapper로 접근 제어와 로깅이 가능

-- 도식화 : 클라이언트의요청 → Xinetd → TCP Wrapper → 데몬 실행

-- /etc/host.deny파일과 /etc/host.allow파일을 통해 접근 통제를 할 수 있음

--- Deny 정책 적용 시, host.deny에 ALL:ALL을 적어 놓고, host.allow에 데몬종류:클라이언트 주소를 적음

-- 접근 통제기록은 secure나 messgae 파일 등에 기록됨


5) 스캔 탐지도구

- 방어적인 관점에서, 스캔 탐지가 일어나면 이에 따란 방어 대책을 세워야 할 듯

- portsentry

-- 포트스캔을 실시간으로 탐지하고 TCP_Wrapper와 결합해, host.deny파일에 자동으로 등록해 방어함

- 실시간 네트워크 불법 Scan 자동탐지 도구(RTSD ; Real Time Scan Detector)

-- KISA에서 과거에 개발한건데 오래되서 업데이트 안되고 있지


6) 로깅 및 로그분석도구

- syslog

-- 백그라운드 프로세스로 돌면서, 로그 메시지를 하나 이상의 개별 파일에 기록하는 데몬

-- /etc/syslog.conf에 각종 로그 환경 설정을 추가, 변경, 삭제할 수 있음

--- 형식 : Facility.Priority    Logfile-Location

---- Priority : Emerg > Alert > Crit > Err > Warn > Notice > Info > Debug > None

- webalizer

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

Posted by 사라링


1. HTTP 요청을 줄여라. 
   이미지맵, CSS Sprite, data:를 이용한 인라인 이미지

2. 콘텐츠 전송 네트워크를 이용하라. -> CDN사용

3. 헤더에 만료기한을 추가하라 -> 헤더의 Expires를 통해 캐시가능, HTTP/1.1에서는 Cache-Control, 1.0에서는 max-age
   HTML문서를 제외한 이미지, 스크립트, 스타일시트, 플래시 모두에 적용하라

4. Gzip 컴포넌트
   클라이언트는 Accept-Encoding: gzip, deflate형태로 지원여부를 알려주고 서버는 Content-Encoding: gzip을 통해 알려준다.
   이미지와 PDF는 압축하지 않는다.
   프록시를 사용할 경우는 Vary속성을 이용한다.

5. 스타일시트는 위에 넣어라.
   스타일시트가 아래 있으면 다 받을때까지는 브라우저가 렌더링을 하지 않는다.
   @import를 사용할때는 다른 요소보다 앞서서 선언해야 한다.

6. 스트립트는 아래에 넣어라(body전에)
   스크립트를 다운로드할 때는 렌더링을 하지 않는다. 
   스크립트는 동시다운로드가 불가능하다. (스크립트의 순서를 지키기 위해서)

7. CSS Expression을 피하라 (IE5부터 지원)
   스크롤이나 마우스가 움직일때도 계속 실행되는 문제가 있다. (다른 방법을 통해서 이걸 해결되도록 만들어야 함)

8. 자바스크립트와 CSS를 외부 파일에 넣어라.
   HTTP요청때문에 인라인이 성능이 좋지 때문에 외부파일은 개시된다. 

9. DNS조회를 줄여라.
   DNS를 조회하는데 시간이 소요되고 완료될때까지 다운로드가 불가능하다.
   OS와 브라우저가 DNS정보를 캐시하기 때문에 TTL을 너무 짧게 설정하지 않는다.

10. 자바스크립트를 최소화하라
     JSMIN을 통해 압축하던지 난독화를 한다. 결과성능에 거의 차이가 없기 때문에 특별한 목적 아니면 압축이 낫다.

11. 리다이렉트를 피하라
     가장 많이 쓰는 리다이렉트는 301, 302가 있는데 리다이렉트는 페이지를 느리게 만든다.
   주소뒤에 슬래시(/)를 이용하지 않을때 발생하는 리다이렉트가 가장 많은 실수다. (호스트에서는 발생하지 않는다.) -> Alias등으로 해결

12. 중복되는 스크립트를 제거하라
     여러 명이 개발할 때 생길수 있는 중복스크립트가 생기지 않도록 하라.

13. ETag를 설정하라.
ETag(Entity Tag)는 웹서버와 브라우저가 캐시된 구성요소의 유효성을 확인하기 위해서 사용하는 메커니즘
브라우저가 캐시의 유효성을 파악할 때는 마지막 수정일을 비교하거나 ETag를 이용한다.
ETag는 서버가 고유한 문자열로 만드는데 서버가 분산서버일때는 ETag에 문제가 생기므로 주의한다.

14. 캐시를 지원하는 Ajax 만들기
     사용자의 요청에 의해 발생하는 능동적 Ajax가 최적화의 대상 -> 동적으로 생성되는 것을 고려해서 캐시될 수 있도록 쿼리스트링 파라미터를 이용한다.(시간이나 고유아이디)
     개인정보 보호를 위해서는 SSL을 이용해라

* 조건부 GET 요청 : 캐시의 구성요소가 유효한지 확인하기 위해서 조건부 GET 요청을 보내고 유효하면 캐시를 사용한다.
   (헤더의 Last-Modified를 비교한다. -> 수정되지 않으면 304 를 보냄)

Posted by 사라링
출처 : http://taegon.kim/archives/4810 

Why can’t we find Front End developers?를 번역한 글입니다. 저 스스로가 프론트엔드 개발자이기도 해서 재밌는 주제라 옮겨봤습니다. ^^


어느날 우연히 Quora에서 프론트엔드 엔지니어링과 스타트업에 관련된 “Why is it that startups have trouble finding front end developers? (왜 스타트업에서 프론트엔드 개발자를 구하기가 어려운가?)”라는 글을 보게 되었다. 발제자는 다음과 같은 내용도 덧붙였다.

(…) 엔지니어링 분야에서 프론트엔드 개발이 다른 분야보다 훨씬 쉽다는 것에는 많은 사람들이 동의할 겁니다. 그런데 왜 스타트업에서는 프론트엔드 개발자를 구하기가 어려운 걸까요?

이에 대한 괜찮은 답변을 몇 개 보았는데 대부분은 핵심을 얘기하고 있었다. 프론트엔드 엔지니어 자리를 구직하거나 프론트엔드 엔지니어를 인터뷰하고 프론트엔드 프로젝트에서 일해본 개인적인 경험에 기반한 내 의견도 덧붙인다.

상대적으로 새로운 분야이다

“왜 프론트엔드 개발자를 구하기 어려운가”에 대한 첫 번째 답변이자 가장 간단한 답변은 프론트엔드 개발이 신생 분야이기 때문이다. 이 명제에 동의하지 않는 사람들이 대부분이겠지만 프론트엔드 엔지니어링은 웹 개발과 비슷하며 웹 개발은 20년 이상된 분야이다. 하지만 인터페이스와 사용자 경험을 기술적으로 구현하는 특정한 “직업”군으로서의 프론트엔드 엔지니어링이라는 개념은 상당히 새로운 분야이다. 다만, 프론트엔드의 “엔지니어링” 부분은 그보다 몇 년 앞서 성장해왔다.

구글 트렌드를 통해 살펴본 지난 몇 년간의 프론트엔드 엔지니어 트렌드의 시각화
구글 트렌드를 통해 살펴본 지난 몇 년간의 프론트엔드 엔지니어 트렌드 시각화

오늘날까지도 웹 개발과 프론트엔드 엔지니어링 개념이 혼재되어 있지만 누구의 탓도 아니다. 웹 산업 바깥의 사람들에게는 웹 개발은 웹 페이지를 시각적으로 디자인하는 것과 이를 구현하는 것 사이의 모호한 경계이기 때문이다. 어쨌든 웹 개발은 프론트엔드 엔지니어들이 하는 것이기도 하다. 다만, 프론트엔드 엔지니어들은 사용자가 포함된 부분에만 집중할 뿐이다.

인터페이스와 사용자 경험을 기술적으로 구현하는 분야가 직업군으로서 명성을 얻기 시작한 것은 상당히 최근이다. 15년쯤 전에는 웹 페이지의 시각 디자인 작업과 이를 기술적으로 구현하는 작업에 리소스가 균등하게 분배됐었다. 웹이 단순한 홈페이지나 홍보용 페이지 이상으로 성장하면서 기술자 리소스가 더 필요해졌다. 사람들이 자바스크립트, 백엔드 기술, UX, 데이터베이스, 심지어 시스템 디자인까지 단지 웹을 위해 배우기 시작했다. 오늘날 AirBnB, Facebook, Quora 같은 웹 애플리케이션은 디자인 리소스보다 엔지니어링 리소스에 더 많이 투자한다. 다시 말해 오늘날에는 웹 페이지의 시각적인 디자인이 이를 구현하는 것보다 더 빨라졌다는 뜻이다. 그렇다고 시각 디자인이 덜 중요하다거나 20년전에 비해 시각 디자인 분야에 할당된 리소스가 줄었다는 뜻은 아니다. 오늘날의 웹 페이지가 요구하는 기술자가 훨씬 많아졌을 뿐이다.

오늘날의 웹 애플리케이션은 시각 디자인 리소스보다는 엔지니어링 리소스를 더 많이 필요로 한다.
오늘날의 웹 애플리케이션은 시각 디자인 리소스보다는 엔지니어링 리소스를 더 많이 필요로 한다.

웹 애플리케이션의 기술적 구현은 여러 분야에 걸쳐 있기 때문에 90년대의 웹 “엔지니어”들은 팔방미인이었어야 했다. DBA(데이터베이스 관리자, Database Administrators), 시스템 관리자부터 백엔드 엔지니어, DevOps, 소프트웨어 엔지니어, UX 엔지니어, 프론트엔드 엔지니어까지 담당했다. 마지막의 프론트엔드 엔지니어는 아마도 사람들이 가장 두려워하는 분야일 것이다. 자바스크립트, HTML, CSS를 사용해 시각적인 목업을 웹 브라우저에서 실제로 작동하게 만드는 일을 하는 분야이다. 프론트엔드 엔지니어링을 즐기려면 시각 디자인에 대한 흥미가 어느 정도 필요하다(그리고 일종의 마조키스트도 되야한다).

이 애니메이션은 처음 시작하는 프론트엔드 엔지니어들이 대부분 겪는 어려움을 나타낸다. CSS는 시각 디자인을 제대로 표현하기 위해 웹 페이지 안에서 사용하는 스타일링 언어이다. 상당히 많은 경우 당신의 기대와는 다르게 동작할 것이다.
이 애니메이션은 처음 시작하는 프론트엔드 엔지니어들이 대부분 겪는 어려움을 나타낸다. CSS는 시각 디자인을 제대로 표현하기 위해 웹 페이지 안에서 사용하는 스타일링 언어이다. 상당히 많은 경우 당신의 기대와는 다르게 동작할 것이다.

웹 애플리케이션이 필요로 하는 작업량을 충족시키려면 시간이 어느 정도 필요해졌고 하나의 웹 애플리케이션에서 여러 사람이 함께 작업할 수 있도록 기술적인 작업을 나누어야 할 필요로 생겼다. 나는 시간이 가장 많이 걸리는 작업이 무엇인지 또는 어떤 작업이 가장 어려운지 모르겠지만[1], 한 사람이 모든 기술적인 세부 사항을 감당할 수 없게 됐다는 사실은 여러 웹 에이전시와 기업에 있어 문제가 되었다. 그 결과 내가 앞서 설명한 직업(백엔드 엔지니어, DBA 등)들이 웹 산업에 등장했다. 눈여겨 볼 점은 이런 직업 중 대부분은 오랜 시간 있어왔지만 웹 산업 내부에서 이들에 대한 적절한 수요는 지난 10년 이내에 시작됐다는 것이다.

오늘날에도  여전히 웹 애플리케이션에 필요한 모든 기술을 다루어야 한다는 가련한 영혼들이 있는데, 우리는 그들을 풀스택 엔지니어라 부른다. 몇 가지 없는 장점 중 하나는 유니콘을 찾는 것보다는 쉽다는 점이다[2]. 디자이너들에게는 둘 다 쉽지 않다(https://insideintercom.io/how-to-hire-designers/). 디자이너를 고용하는 법 참고
오늘날에도 여전히 한 사람이 웹 애플리케이션에 필요한 모든 기술을 다루어야 한다는 가련한 영혼들이 있는데, 우리는 그들을 풀스택 엔지니어라 부른다. 몇 가지 없는 장점 중 하나는 유니콘을 찾는 것보다는 쉽다는 점이다[2]. 디자이너들에게는 둘 다 쉽지 않다. 디자이너를 고용하는 법(https://insideintercom.io/how-to-hire-designers/) 참고

오늘날 스타트업들은 자신들이 성공하려면 프론트엔드, 백엔드, DBA, 운영 등 웹 애플리케이션의 기술 영역 상당 부분을 자신들이 제대로 다루어야 한다고 주장한다. PaaSPlatform as a Service는 스타트업에서 운영 부분을 없애겠다는 하나의 목적으로 만들어진 반면, Parse.com과 같은 여러 BaaSBackend as a Service 서비스들은 데이터베이스 스키마, 애플리케이션의 엔드포인트(그래도 스키마를 디자인할 사람이 필요하긴 하다) 등 가능한 많은 것을 제공한다. 프론트엔드는 아직 “서비스되는” 단계에 이르지 못했지만 로딩 페이지에 필요한 프론트엔드 모듈이나 컴포넌트를 구매할 수 있는 서비스는 조금 있다. 실제 동작하는 웹 애플리케이션을 작성하고 싶은데 주변에서 좋은 프론트엔드 엔지니어를 구할 수 없을 때, 마찬가지로 브랜드를 만들고 싶은데 디자이너를 구할 수 없을 때 이런 서비스를 사용할 수 있다.

[1] 거짓말이다. 시간이 가장 많이 걸리는 작업은 IE에서 웹 사이트를 동작하게 만드는 것이다. 이 작업을 할 때는 수명도 깎여나간다.

[2] 대부분의 풀 스택 엔지니어들은 완전한 웹 애플리케이션을 만들 수 있을만큼의 기술적인 깊이가 부족하다. 프론트엔드, 백엔드, 운영 중 어느 하나는 부족하기 마련이다. 평균적인 수준의 자금이 확보된 스타트업에서 최소한 세 사람이 풀타임으로 해야할 일을 한 사람이 하기를 바라는 것은 비현실적이다. 그렇지만 GUI부터 좀비 프로세스까지 다룰 수 있는 닌자를 몇 명 알고는 있다. 만약 그런 사람이 여러분의 팀에 있다면 착하게 살 것이며 절대로 그들이 떠나지 않게 하라.

오해

프론트엔드 개발자를 찾기 어려운 다른 중요한 이유는(개인적으로는 가장 중요하다고 생각한다) 이 분야에 대해 오해하고 있기 때문이다. 발제자가 처음 질문에서 말했듯이 대부분의 사람들은 프론트엔드를 “상대적으로 쉬운 분야”로 보고 있다. “대부분의 사람들이…”로 시작하는 구닥다리 방식을 사용해 프론트엔드 엔지니어가 하는 일을 상세하게 설명해본다.

대부분의 사람들이 생각하는 프론트엔드 엔지니어링

  1. 포토샵 파일, 이미지, 와이어프레임 등을 가지고 웹 페이지를 만드는 일
  2. 때로는 앞서 나온 포토샵 파일, 이미지, 와이어프레임을 그리는 일
  3. 웹 페이지에 애니메이션을 만들고 트랜지션 효과를 주기 위해 자바스크립트를 작성하는 것
  4. 콘텐츠를 정의하고 이를 꾸미는 HTML과 CSS를 작성하는 것

프론트엔드 개발자가 실제로 하는 일

  1. 디자이너와 엔지니어 간의 시각적 언어 확립
  2. 시각 디자인으로부터 콘텐츠, 브랜드, 기능 등을 표현할 컴포넌트 세트 정의.
  3. 컨벤션, 프레임워크, 요구 사항, 시각적 언어, 스펙 면에서 웹 애플리케이션의 기준 확립
  4. 웹 애플리케이션의 범위를 기기, 브라우저, 화면, 애니메이션의 측면에서 정의
  5. 브랜드 충성도, 코드 품질, 관계자의 상품 리뷰를 위한 품질 보증 가이드라인 개발
  6. 적절한 간격, 타이포그래피, 헤딩, 글꼴, 아이콘, 여백, 그리드 등을 사용해 웹 애플리케이션 꾸미기
  7. 디자인 가이드라인을 따르며 다양한 해상도에 대응하는 이미지, 디바이스별 목업 등을 사용해 웹 애플리케이션 꾸미기
  8. 시맨틱, 접근성, 검색엔진 최적화, 스키마, 마이크로포맷 등을 고려하여 웹 애플리케이션 마크업하기
  9. API에 접근하여 사용하기 편하고 배터리 소모가 없는 디바이스 및 클라이언트가 인지하는 방식으로 정보를 가져오기
  10. 부드러운 애니메이션, 트랜지션, 게으른 로딩lazy loading, 인터랙션, 애플리케이션 워크플로우를 수행하는 클라이언트 사이드 코드 개발. 대부분 점진적 기능 향상 및 하위 표준 호환성까지 고려.
  11. CORSCross Origin Resource Sharing을 고려하는 한편 XSSCross Site Scripting와 CSRFCross Site Request Forgery 공격을 막아낼 수 있도록 백엔드 접속에 대한 안전성 확보
  12. 엄격한 데드라인, 관계자들의 요구, 기기별 제한에도 불구하고 항상 사용자가 최우선이라는 점을 잊지 않는 것

이러한 목표를 달성하기 위해 프론트엔드 엔지니어들은 시각 디자인 도구(포토샵, Adobe, Macaw, Sketch)부터 프로그래밍 도구(IDE, Command Line, Source Version Control, Bash 스크립트, 빌드 태스크)까지 다양한 도구를 사용한다. 심지어 간혹 마케팅(뉴스레터, 캠페인, 분석, 검색엔진최적화, 소셜미디어), UX(애니메이션, 트랜지션, 피드백, 인터페이스, 시각적 언어)부터 콘텐츠 수정(구획점, 단어가 뚝 떨어지지 않게 하는 일, 가독성, 색상)까지 신경써야 한다.

나쁜 프론트엔드 엔지니어

좋은 프론트엔드 개발자를 구하기 어려운 가장 분명한 이유는 나쁜 프론트엔드 개발자가 많기 때문일 것이다.Quora의 글에 있던 답변 중 하나에서 정확히 말했듯이 프론트엔드 엔지니어링은 진입장벽이 정말 낮다. 자바스크립트, CSS, HTML은 이해하기 어려운 프로그래밍 언어가 아니다. 누구라도 CodeAcademy나 Codeschool에 가서 며칠 안에 기초를 배울 수 있다. Erlang(개인적으로 가장 좋아하는 프로그래밍 언어 중 하나), Go, ANSI C 등을 배우기 위해 컴퓨터의 작동 원리를 알아야 하는 것과는 상반된다. 웹 페이지에 있는 색상과 이미지를 바꾸는 것은 정말 쉽다. 웹의 기저까지 이해하는 것과는 완전히 다르다.

결국 프론트엔드 엔지니어 시장은 다음과 같은 사람들 때문에 몸살을 겪을 것이다.

  1. 자바스크립트 라이브러리를 남용하는 사람. 자바스크립트 내부를 제대로 알지 못하기 때문에 라이브러리를 남용한다(예. 모든 작업에 jQuery 가져다 붙이기).
  2. 자바스크립트 플러그인을 남용하는 사람. 다른 사람의 코드를 읽을 능력도 없이 가져다 쓰는 경우(예. jQuery.doParallaxPls.js).
  3. 전체 CSS/JS 기능의 5% 밖에 안 쓰면서 요구사항이나 디자인도 안보고 성능 비교/평가도 안하고 웹 애플리케이션 CSS 프레임워크를 붙이는 사람.
  4. CSS 프레임워크만 가져다 붙이면 “반응형” 웹 사이트가 된다고 생각하는 사람. 또는 이러한 반응성이 웹 애플리케이션에 언제든 뿌리기만 하면 되는 양념으로 생각하는 사람.
  5. “반응형 웹 디자인”에 대해 말하면서 서버측 기법에 대해서는 알지 못하는 사람.
  6. 컨벤션, 전처리 도구preprocessor, 네이밍 표준, 모범 예시없이 CSS 코딩을 하면서 셀렉터, 아이디, 매직 넘버, !important를 과하게 사용하는 사람.
  7. 성능, 메모리 누수(+메모리 누수가 무엇인지 잘 모르는 점)에 대해 무시하고 자신의 코드를 검사하거나 측정하지 못하는 사람.
  8. 아무런 기준없이 제품을 보여주는 사람 또는 “제 컴퓨터/브라우저/디바이스에서는 잘 됩니다” 따위를 기준으로 삼는 사람.
  9. 30년 된 소프트웨어 엔지니어링을 무시하면서 소프트웨어를 작성하는 사람

대체로 여러분은 컴퓨터 과학을 전공자를 뽑으려다가 프론트엔드 엔지니어와 함께 일하기로 했을 것이다. 컴퓨터 과학에 대한 지식이 좋은 프론트엔드 엔지니어의 필수 조건은 아니지만, 컴퓨터와 소프트웨어의 기본적인 매커니즘은 자바스크립트로 코딩을 할 때에도 항상 고려해야 할 내용이다. 좋은 프론트엔드 엔지니어는 현존하는 플랫폼 및 환경 중 아마도 웹이 가장 강력하며 웹에서 실행되는 코드는 반드시 가상 머신이나 가상 런타임에서 실행되는 언어만큼이나(혹은 그보다 더) 신중하게 개발해야 한다는 사실을 알고 있다.

좋은 프론트엔드 엔지니어는 웹의 메커니즘과 사용하는 언어를 고려하는 것은 물론이거니와 웹과 연동하는 다른 컴포넌트, 시스템, 개념에 대한 경험도 있다. 다음은 숙련된 프론트엔드 엔지니어가 알아야 하거나 일반적인 프론트엔드 작업을 할 때 먼저 해야할 것들이다.

숙련된 프론트엔드 엔지니어가 알아야 하거나 작업시 해야할 일 (힌트: 바로 여러분이 고용하고 싶은 사람이다)

  1. DNS Resolution, CDNContent Delivery Networks 사용, 여러 호스트 이름을 통한 리소스 요청 성능 향상
  2. HTTP 헤더 (Expires, Cache-Control, If-Modified-Since)
  3. 스티브 사우더스의 규칙 전부 (고성능 웹사이트)
  4. PageSpeed, YSlow, 크롬 개발자 도구 Audit, 크롬 개발자 도구 Timeline에서 보여주는 문제를 해결하는 법
  5. 작업을 서버에서 해야할 때와 클라이언트에서 해야할 때 구분
  6. 캐시, 프리 페칭pre-fetching 및 지연 로드 기법
  7. 네이티브 자바스크립트. 직접 바닥부터 코드를 작성해야 할 때 혹은 다른 사람의 코드를 가져다 써야 할 때를 아는 것. 그리고 두 작업의 장점과 단점을 평가할 수 있는 능력
  8. 최신 MVC 자바스크립트 라이브러리(예. AngularJS, EmberJS, ReactJS), 그래픽 라이브러리(예. D3, SnapSVG), DOM 관련 라이브러리(예. jQuery, Zepto), 게으른 로딩 또는 패키지 관리 라이브러리(예. RequireJS, CommonJS), 태스크 관리자(예. Grunt, Gulp), 패키지 관리자(예. Bower, Componentjs), 테스팅(예. Protractor, Selenium)에 대한 지식과 사용.
  9. 이미지 포맷과 장점. 언제 무엇을 어떻게 써야 하는가에 대한 지식. 이미지 최적화 기법과 사용 계획 (스프라이트, 게으른 로딩 기법, 캐시 비움, 인터레이스드 PNG)
  10. CSS 표준, 최신 컨벤션과 기법(예. BEM, SMACSS, OOCSS)에 대한 지식과 사용
  11. 자바스크립트의 컴퓨터 과학(메모리 관리, 싱글 스레드 특성, 가비지 컬렉터 알고리듬, 타임아웃, 스코핑, 호이스팅, 패턴)

결론

현재, 그리고 앞으로도 계속 웹에는 프론트엔드 엔지니어가 필요할 것이다. 다양한 디바이스, 브라우저, 웹 표준의 변화로 인해 웹 애플리케이션에서 사용자 부분을 담당해 줄 사람을 급히 찾게 될지도 모른다. 프론트엔드 엔지니어와 개발자들은 우리가 식당의 메뉴를 보거나 영업 시간 따위를 보는 곳으로 생각했던 웹의 한계를 벗어나는 흥미진진한 제품을 만들 수 있었다. 지금은 3D 갤러리실시간 영상 통화인터넷 라디오, 심지어 완전한 오피스 도구(예. 구글 앱스, 마이크로소프트 오피스 온라인)도 있다. 모든 것은 클라우드 상에 존재하며 우리가 쓰고, 듣고, 메일을 보내고 보는 것들은 어디에나 있게 되었다.
프론트엔드 엔지니어를 찾는 것은 어렵지만 더 많은 사람들이 프론트엔드 부대에 들어오고 있다. 프론트엔드 엔지니어라는 직업이 선사하는 깜짝 놀랄만한 근무 환경과 두둑한 급여뿐만 아니라 웹을 코딩한다는 것이 주는 믿을 수 없는 즐거움 때문일 것이다. 여러분에게는 사용자 수천명의 생활에 영향을 끼칠 수 있는 기회가 있으며 인터넷 접속을 통해 누구에게나 신나는 서비스를 제공할 수 있다. 이 모든 것들이 브라우저 위에서 이루어지고, 때로는 브라우저가 제약이 되기도 하지만 그 위에서 어떤 아이디어라도 분석하고 그리고 보여줄 수 있다. 프론트엔드 엔지니어들이여 건승하시길. 웹이 여러분을 기다리고 있다.


Posted by 사라링

https://github.com/guari/eclipse-ui-theme




installation

  • Eclipse Marketplace:

    ← Drag this button to your Eclipse workbench to install;
  • Update site:

    Or download this plugin by using Help > Install New Software... and add the update site:

    https://raw.github.com/guari/eclipse-ui-theme/master/com.github.eclipseuitheme.themes.updatesite
  • Manual:

    Or download moonrise_0.8.9.jar package and put it into your Eclipse \dropins\plugins\ folder;

  • Restart Eclipse and go to Window > Preferences > General > Appearance;

  • Select MoonRise (standalone) or, for a little better tabs decoration, install Eclipse 4 Chrome Theme from marketplace or from here and select MoonRise;

  • Rest your eyes ;)


Syntax highlighting scheme (optional):

screenshot

You can find the one used in the screenshot below:

WARNING: Take a backup of your preferences before importing so you can safely restore them if you need (File > Export... then select General > Preferences);

  • RainbowDrops.epf (most accurate and recommended, download by right-clicking the link and selecting Save link as... then import it with Eclipse built-in Preferences import: File > Import... then select General > Preferences);

  • or RainbowDrops.xml (download by right-clicking the link and selecting Save link as... then import it with Eclipse Color Theme Plugin);

  • or here;

NOTE: Syntax highlighting settings and UI theme are separated, you can import your own scheme or customize it in Eclipse Preferences if you like.

EditBox support: Use newer Nodeclipse EditBox with RainbowDrops.eb included or downloadRainbowDrops.eb (by right-clicking the link and selecting Save link as...), then import it with Eclipse EditBox Plugin.

Posted by 사라링


  • 가비지 컬렉션 과정 - Generational Garbage Collection

    GC에 대해서 알아보기 전에 알아야 할 용어가 있다. 바로 'stop-the-world'이다. stop-the-world란, GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다.

    Java는 프로그램 코드에서 메모리를 명시적으로 지정하여 해제하지 않는다. 가끔 명시적으로 해제하려고 해당 객체를 null로 지정하거나 System.gc() 메서드를 호출하는 개발자가 있다. null로 지정하는 것은 큰 문제가 안 되지만, System.gc() 메서드를 호출하는 것은 시스템의 성능에 매우 큰 영향을 끼치므로 System.gc() 메서드는 절대로 사용하면 안 된다(다행히도 NHN에서 System.gc() 메서드를 호출하는 개발자를 보진 못했다).

    Java에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않기 때문에 가비지 컬렉터(Garbage Collector)가 더 이상 필요 없는 (쓰레기) 객체를 찾아 지우는 작업을 한다. 이 가비지 컬렉터는 두 가지 가설 하에 만들어졌다(사실 가설이라기보다는 가정 또는 전제 조건이라 표현하는 것이 맞다).

    • 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다.
    • 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.

    이러한 가설을 'weak generational hypothesis'라 한다. 이 가설의 장점을 최대한 살리기 위해서 HotSpot VM에서는 크게 2개로 물리적 공간을 나누었다. 둘로 나눈 공간이 Young 영역과 Old 영역이다.

    • Young 영역(Yong Generation 영역): 새롭게 생성한 객체의 대부분이 여기에 위치한다. 대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 매우 많은 객체가 Young 영역에 생성되었다가 사라진다. 이 영역에서 객체가 사라질때 Minor GC가 발생한다고 말한다.
    • Old 영역(Old Generation 영역): 접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사된다. 대부분 Young 영역보다 크게 할당하며, 크기가 큰 만큼 Young 영역보다 GC는 적게 발생한다. 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC)가 발생한다고 말한다.

    영역별 데이터 흐름을 그림으로 살펴보면 다음과 같다.

    122111_0936_JavaGarbage1.png

    그림 1 GC 영역 및 데이터 흐름도

    위 그림의 Permanent Generation 영역(이하 Perm 영역)은 Method Area라고도 한다. 객체나 억류(intern)된 문자열 정보를 저장하는 곳이며, Old 영역에서 살아남은 객체가 영원히 남아 있는 곳은 절대 아니다. 이 영역에서 GC가 발생할 수도 있는데, 여기서 GC가 발생해도 Major GC의 횟수에 포함된다.

    그렇다면 "Old 영역에 있는 객체가 Young 영역의 객체를 참조하는 경우가 있을 때에는 어떻게 처리될까?"라고 궁금해 하는 분도 더러 있을 것이다. 이러한 경우를 처리하기 위해서 Old 영역에는 512바이트의 덩어리(chunk)로 되어 있는 카드 테이블(card table)이 존재한다.

    카드 테이블에는 Old 영역에 있는 객체가 Young 영역의 객체를 참조할 때마다 정보가 표시된다. Young 영역의 GC를 실행할 때에는 Old 영역에 있는 모든 객체의 참조를 확인하지 않고, 이 카드 테이블만 뒤져서 GC 대상인지 식별한다.

    122111_0936_JavaGarbage2.png

    그림 2 카드 테이블 구조

    카드 테이블은 write barrier를 사용하여 관리한다. write barrier는 Minor GC를 빠르게 할 수 있도록 하는 장치이다. write barrirer때문에 약간의 오버헤드는 발생하지만 전반적인 GC 시간은 줄어들게 된다.

  • Young 영역의 구성

    GC를 이해하기 위해서 객체가 제일 먼저 생성되는 Young 영역부터 알아보자. Young 영역은 3개의 영역으로 나뉜다.

    • Eden 영역
    • Survivor 영역(2개)

    Survivor 영역이 2개이기 때문에 총 3개의 영역으로 나뉘는 것이다. 각 영역의 처리 절차를 순서에 따라서 기술하면 다음과 같다.

  • 새로 생성한 대부분의 객체는 Eden 영역에 위치한다.
  • Eden 영역에서 GC가 한 번 발생한 후 살아남은 객체는 Survivor 영역 중 하나로 이동된다.
  • Eden 영역에서 GC가 발생하면 이미 살아남은 객체가 존재하는 Survivor 영역으로 객체가 계속 쌓인다.
  • 하나의 Survivor 영역이 가득 차게 되면 그 중에서 살아남은 객체를 다른 Survivor 영역으로 이동한다. 그리고 가득 찬 Survivor 영역은 아무 데이터도 없는 상태로 된다.
  • 이 과정을 반복하다가 계속해서 살아남아 있는 객체는 Old 영역으로 이동하게 된다.
  • 이 절차를 확인해 보면 알겠지만 Survivor 영역 중 하나는 반드시 비어 있는 상태로 남아 있어야 한다. 만약 두 Survivor 영역에 모두 데이터가 존재하거나, 두 영역 모두 사용량이 0이라면 여러분의 시스템은 정상적인 상황이 아니라고 생각하면 된다.

    이렇게 Minor GC를 통해서 Old 영역까지 데이터가 쌓인 것을 간단히 나타내면 다음과 같다.

    122111_0936_JavaGarbage3.png

    그림 3 GC 전과 후의 비교

    참고로, HotSpot VM에서는 보다 빠른 메모리 할당을 위해서 두 가지 기술을 사용한다. 하나는 bump-the-pointer라는 기술이며, 다른 하나는 TLABs(Thread-Local Allocation Buffers)라는 기술이다.

    bump-the-pointer는 Eden 영역에 할당된 마지막 객체를 추적한다. 마지막 객체는 Eden 영역의 맨 위(top)에 있다. 그리고 그 다음에 생성되는 객체가 있으면, 해당 객체의 크기가 Eden 영역에 넣기 적당한지만 확인한다. 만약 해당 객체의 크기가 적당하다고 판정되면 Eden 영역에 넣게 되고, 새로 생성된 객체가 맨 위에 있게 된다. 따라서, 새로운 객체를 생성할 때 마지막에 추가된 객체만 점검하면 되므로 매우 빠르게 메모리 할당이 이루어진다.

    그러나 멀티 스레드 환경을 고려하면 이야기가 달라진다. Thread-Safe하기 위해서 만약 여러 스레드에서 사용하는 객체를 Eden 영역에 저장하려면 락(lock)이 발생할 수 밖에 없고, lock-contention 때문에 성능은 매우 떨어지게 될 것이다. HotSpot VM에서 이를 해결한 것이 TLABs이다.

    각각의 스레드가 각각의 몫에 해당하는 Eden 영역의 작은 덩어리를 가질 수 있도록 하는 것이다. 각 쓰레드에는 자기가 갖고 있는 TLAB에만 접근할 수 있기 때문에, bump-the-pointer라는 기술을 사용하더라도 아무런 락이 없이 메모리 할당이 가능하다.

    간단하게 Young 영역에 대한 GC에 대해서 알아보았다. 위에서 이야기한 두 가지 기술(bump-the-pointer, TLABs)을 반드시 기억하고 있을 필요는 없다. 몰라도 쇠고랑 안차고 경찰 출동 안한다. 그러나 Eden 영역에 최초로 객체가 만들어지고, Survivor 영역을 통해서 Old 영역으로 오래 살아남은 객체가 이동한다는 사실은 꼭 기억하기 바란다.

  • Old 영역에 대한 GC

    Old 영역은 기본적으로 데이터가 가득 차면 GC를 실행한다. GC 방식에 따라서 처리 절차가 달라지므로, 어떤 GC 방식이 있는지 살펴보면 이해가 쉬울 것이다. GC 방식은 JDK 7을 기준으로 5가지 방식이 있다.

    • Serial GC
    • Parallel GC
    • Parallel Old GC(Parallel Compacting GC)
    • Concurrent Mark & Sweep GC(이하 CMS)
    • G1(Garbage First) GC

    이 중에서 운영 서버에서 절대 사용하면 안 되는 방식이 Serial GC다. Serial GC는 데스크톱의 CPU 코어가 하나만 있을 때 사용하기 위해서 만든 방식이다. Serial GC를 사용하면 애플리케이션의 성능이 많이 떨어진다.

    그럼 각 GC 방식에 대해서 살펴보자.

  • Serial GC (-XX:+UseSerialGC)

    Young 영역에서의 GC는 앞 절에서 설명한 방식을 사용한다. Old 영역의 GC는 mark-sweep-compact이라는 알고리즘을 사용한다. 이 알고리즘의 첫 단계는 Old 영역에 살아 있는 객체를 식별(Mark)하는 것이다. 그 다음에는 힙(heap)의 앞 부분부터 확인하여 살아 있는 것만 남긴다(Sweep). 마지막 단계에서는 각 객체들이 연속되게 쌓이도록 힙의 가장 앞 부분부터 채워서 객체가 존재하는 부분과 객체가 없는 부분으로 나눈다(Compaction).

    Serial GC는 적은 메모리와 CPU 코어 개수가 적을 때 적합한 방식이다.

  • Parallel GC (-XX:+UseParallelGC)

    Parallel GC는 Serial GC와 기본적인 알고리즘은 같지다. 그러나 Serial GC는 GC를 처리하는 스레드가 하나인 것에 비해, Parallel GC는 GC를 처리하는 쓰레드가 여러 개이다. 그렇기 때문에 Serial GC보다 빠른게 객체를 처리할 수 있다. Parallel GC는 메모리가 충분하고 코어의 개수가 많을 때 유리하다. Parallel GC는 Throughput GC라고도 부른다.

    다음 그림은 Serial GC와 Parallel GC의 스레드를 비교한 그림이다.

    122111_0936_JavaGarbage4.png

    그림 4 Serial GC와 Parallel GC의 차이 (이미지 출처: "Java Performance", p. 86)

  • Parallel Old GC(-XX:+UseParallelOldGC)

    Parallel Old GC는 JDK 5 update 6부터 제공한 GC 방식이다. 앞서 설명한 Parallel GC와 비교하여 Old 영역의 GC 알고리즘만 다르다. 이 방식은 Mark-Summary-Compaction 단계를 거친다. Summary 단계는 앞서 GC를 수행한 영역에 대해서 별도로 살아 있는 객체를 식별한다는 점에서 Mark-Sweep-Compaction 알고리즘의 Sweep 단계와 다르며, 약간 더 복잡한 단계를 거친다.

  • CMS GC (-XX:+UseConcMarkSweepGC)

    다음 그림은 Serial GC와 CMS GC의 절차를 비교한 그림이다. 그림에서 보듯이 CMS GC는 지금까지 설명한 GC 방식보다 더 복잡하다.

    122111_0936_JavaGarbage5.png

    그림 5 Serial GC와 CMS GC(이미지 출처:http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf)

    초기 Initial Mark 단계에서는 클래스 로더에서 가장 가까운 객체 중 살아 있는 객체만 찾는 것으로 끝낸다. 따라서, 멈추는 시간은 매우 짧다. 그리고 Concurrent Mark 단계에서는 방금 살아있다고 확인한 객체에서 참조하고 있는 객체들을 따라가면서 확인한다. 이 단계의 특징은 다른 스레드가 실행 중인 상태에서 동시에 진행된다는 것이다.

    그 다음 Remark 단계에서는 Concurrent Mark 단계에서 새로 추가되거나 참조가 끊긴 객체를 확인한다. 마지막으로 Concurrent Sweep 단계에서는 쓰레기를 정리하는 작업을 실행한다. 이 작업도 다른 스레드가 실행되고 있는 상황에서 진행한다.

    이러한 단계로 진행되는 GC 방식이기 때문에 stop-the-world 시간이 매우 짧다. 모든 애플리케이션의 응답 속도가 매우 중요할 때 CMS GC를 사용하며, Low Latency GC라고도 부른다.

    그런데 CMS GC는 stop-the-world 시간이 짧다는 장점에 반해 다음과 같은 단점이 존재한다.

    • 다른 GC 방식보다 메모리와 CPU를 더 많이 사용한다.
    • Compaction 단계가 기본적으로 제공되지 않는다.

    따라서, CMS GC를 사용할 때에는 신중히 검토한 후에 사용해야 한다. 그리고 조각난 메모리가 많아 Compaction 작업을 실행하면 다른 GC 방식의 stop-the-world 시간보다 stop-the-world 시간이 더 길기 때문에 Compaction 작업이 얼마나 자주, 오랫동안 수행되는지 확인해야 한다.

  • G1 GC

    마지막으로 G1(Garbage First) GC에 대해서 알아보자. G1 GC를 이해하려면 지금까지의 Young 영역과 Old 영역에 대해서는 잊는 것이 좋다.

    다음 그림에서 보다시피, G1 GC는 바둑판의 각 영역에 객체를 할당하고 GC를 실행한다. 그러다가, 해당 영역이 꽉 차면 다른 영역에서 객체를 할당하고 GC를 실행한다. 즉, 지금까지 설명한 Young의 세가지 영역에서 데이터가 Old 영역으로 이동하는 단계가 사라진 GC 방식이라고 이해하면 된다. G1 GC는 장기적으로 말도 많고 탈도 많은 CMS GC를 대체하기 위해서 만들어 졌다.

    122111_0936_JavaGarbage6.png

    그림 6 G1 GC의 레이아웃(이미지 출처: "The Garbage-First Garbage Collector" (TS-5419), JavaOne 2008, p. 19)

    G1 GC의 가장 큰 장점은 성능이다. 지금까지 설명한 어떤 GC 방식보다도 빠르다. 하지만, JDK 6에서는 G1 GC를 early access라고 부르며 그냥 시험삼아 사용할 수만 있도록 한다. 그리고 JDK 7에서 정식으로 G1 GC를 포함하여 제공한다.

    그러나 JDK 7을 실서비스에서 사용하려면 많은 검증 기간(1년은 필요하다는 생각이다)을 거쳐야 할 것으로 보이기 때문에, G1 GC를 당장 사용하고 싶어도 더 기다리는 것이 좋다는 것이 개인적인 생각이다. JDK 6에서 G1 GC를 적용했다가 JVM Crash가 발생했다는 말도 몇 번 들었기에 더더욱 안정화될 때까지 기다리는 것이 좋겠다.

  • 마치며

    이번 글에서는 Java의 GC에 대해서 아주 간단하게(?) 살펴보았다. 다음 글에서는 Java의 GC 상황을 모니터링하는 방법과 GC 튜닝 방법을 알아볼 예정이다.

    마지막으로 한 가지 더 말하고 싶은 것이 있다. 어떤 서비스에서 A라는 GC 옵션을 적용해서 잘 동작한다고 그 GC 옵션이 다른 서비스에서도 훌륭하게 적용되어 최적의 효과를 볼 수 있다고 생각하지 말라는 것이다.

    만약 애플리케이션에서 만들어지는 모든 객체의 크기와 종류가 같다면 회사에서 사용하는 모든 WAS의 GC 옵션을 동일하게 설정할 수 있다. 하지만, 각 서비스의 WAS에서 생성하는 객체의 크기와 생존 주기가 모두 다르고, 장비의 종류도 다양하다. WAS의 스레드 개수와 장비당 WAS 인스턴스 개수, GC 옵션 등은 지속적인 튜닝과 모니터링을 통해서 해당 서비스에 가장 적합한 값을 찾아야 한다. 이 이야기는 필자의 경험에서 나온 이야기가 아니고, 2010년 JavaOne에서 Oracle JVM을 만드는 엔지니어들이 한 말이다.

  • 참고 자료

    이 글의 내용과 그림은 다음의 자료를 참고했다.



  • 출처 

    Java Garbage Collection 


    Posted by 사라링

    자료 구조 - 팩토리얼

     | 취미
    2015. 3. 10. 16:31



    1. recursive algorithm ( 재귀 알고리즘 )
    2. iterative algorithm ( 반복 알고리즘 )

    Recursive 란 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법이다. 
    대개 정의 자체가 순환적으로 되어 있는 경우에 적합한 방법이다.

    가장 기본적인 재귀 알고리즘을 생각하여 보자.

     1. 팩토리얼 

    n!  의 계산식은 n = 1 일 때는 1 
                           n >=2 일 때는 n*(n-1)! 이다.

    이것을 단순한 반복접근 방식으로 해결해보자.

    1) iterative approach 

    n! = 1x2x3x....xn

     int fact ( int n ) {

    int res = 1;
    int i;

    for (i = 1; i <= n , i++)
       res = res * i ;

    return res;
    }

    단순히 for문을 사용하여 n번 반복하고 있다.

    2) recursive approach

    int fact(int n){

    if( n <=1 ) return 1;
    else return n*fact(n-1);
    }

    재귀 접근방식으로는 코드가 아주 간단해졌다. 팩토리얼의 수학적 정의를 그대로 이용한 것이다.

    만약 n=5라면 몇 번이 실행될까.

    iterative 방식이라면 당연히 5번 반복될 것이다.

    recursive 방식이라면 

    fact (5) = 5* fact(4)
                = 5*4*fact(3)
                = 5*4*3*fact(2)
                = 5*4*3*2*fact(1)
                = 5*4*3*2*1 
                =120

    4번? 5번?  정답은 5번이다. 

    fact(4) -> fact (3) -> fact (2) -> fact(1) -> 1

    fact(4)는 fact(5)가 실행한것이며 fact(3)은 fact(4) 라는 함수 안에서 실행한 것이다.
    1은 fact(1)이라는 함수안에서 실행한 결과이다.

    결국 iterative 방식과 recursive 방식 모두 n이라는 결과가 나왔다.

    항상 이렇게 두 방식의 성능이 똑같은 것은 아니다.

    그렇다면 recursive 방식의 성능이 월등히 우월한 경우를 살펴보자.


    그 전에 recursive 방식의 특징을 반드시 알아야 한다.

    Recursive function은 반드시 2부분을 포함해야 한다.

    a) recursive call을 하는 부분
    b) recursive call을 멈추는 부분 

    앞서 살펴본 팩토리얼의 경우도 if문을 통하여 n<=1 라는 조건을 통하여 return 1;로 멈추는 부분이 있었다. 이 부분이 없다면 시스템 오류가 발생할 때까지 무한정 호출되게 된다.



    2. 거듭제곱 

    1) iterative approach

    double iter_power(double x, int n ){

    int i;
    double r= 1.0;
    for(i=0; i<n ;i++)
        r=r*i;

    return r;
    }

    단순히 for을 사용하여 x의 n승을 계산하고 있다.

    2) recursive approach

    double power (double x, int n )

    if( n == 0 ) return 1;
    else if ( (n % 2) == 0 )
               return power( x*x , n/2 );
    else
              return x*power(x*x, n-1/2);
    }

    위의 알고리즘은 상당히 좋은 아이디어를 사용하여 만들어진 알고리즘이다.

    if문을 사용하여 recursive를 멈추는 부분과 조건에 따라 2개의 recursive 호출을 하는 부분으로 나누어 진다.

    위의 코드를 수학식으로 나타낸다면 

    n= 짝수일 때
    power ( x , n ) = power ( x*x, n/2 )

    n= 홀수일 때 
    power ( x , n ) =x* power ( x*x, n-1/2 )

    즉 2의 10승을 계산할 때 2를 10번 곱하는 것보다는 4를 5번 곱하는 것이 더 효율적이라는 것이다.

    2의 10승을 계산할 때는  -> 4의 5승 으로 

    4의 5승을 계산할 때는 -> 4* 16의 2승으로 

    16의 2승을 계산할 때는 -> 256의 1승으로 계산하여 현저하게 곱하는 횟수를 감소시킨다.

    총 수행 횟수는 

    n = 10일 때

    power(2,10)  =  power(4,5) -> power(16,2) -> power(256 ,1) -> power(256*256,0) -> 1

    5번을 호출하게 됩니다.

    iterative 방식이 10번을 다 호출하게 되는 것과는 달리 recursive 방식은 그의 절반인 5번만을 호출하게 됩니다.

    정확히 수학식으로 표현하면 [ logn ]+2 로 표현됩니다. ([] 가우스내림 ) (n=1부터 해보세요 ㅋ )

    빅오 표기법으로 나타내보면 두 방식의 성능은 O(n)과 O(logn) 으로 n이 커질 때 엄청난 성능 차이를 보이게 됩니다.

    이 때문에 많은 알고리즘에서 거듭제곱을 사용할 때 recursive 알고리즘을 사용합니다.


    '취미' 카테고리의 다른 글

    안녕하세요.  (0) 2012.11.28
    Posted by 사라링

    select level as YYYY

      from dual

     where level > TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-5

     connect by level <= to_number(to_char(sysdate, 'YYYY'))

     ORDER BY LEVEL DESC


    결과 

    2015

    2014

    2013

    2012

    2011

    Posted by 사라링




    1. Export 할 DB에 접속한다.

    2. Export Utility Wizard 실행

    사용자 삽입 이미지


    3. Table Export 선택

    사용자 삽입 이미지


    4. 모든 테이블을 선택한다.

    사용자 삽입 이미지


    5.기본 선택 사항

    사용자 삽입 이미지


    6. 다운 폴더.파일명 설정한다.

    사용자 삽입 이미지



    7. 설정 완료.

    사용자 삽입 이미지


    8. Export 진행..

    사용자 삽입 이미지


    Posted by 사라링

    BLOG main image
    .. by 사라링

    카테고리

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