전체 글: 407개의 글

디자인패턴

Posted by ironmask84
2017. 4. 1. 15:06 나는 프로그래머다!/기초 다지기


  • 생성 디자인 패턴
    • 싱글톤패턴
      • 어떤 클래스의 인스턴스 개수가 최대 한 개를 넘지 않도록 하는 패턴
      • 이 하나의 인스턴스는 공유자원에 대한 문지기 또는 중앙에 있는 소통의 중심 역할을 한다.
      • 애플리케이션에서 새 인스턴스를 만들 수 없으며, 모든 메소드는 싱글톤을 통해서만 액세스할 수 있다.
      • 애플리케이션에서는 클래스에 있는 정적 메소드를 호출하여 싱글톤을 가져온다.
      • 상속과 인터페이스(싱글톤은 객체다. 따라서 베이스 클래스로부터 상속을 받고 인터페이스를 구현할 수 있다.)
      • 다수 객체로 전환 가능(나중에 마음이 바뀌어 여러 객체를 만들고자 하는 경우에 코드를 많이 바꾸지 않고도 원하는 바를 이룰 수 있다.)
      • 동적 바인딩(싱글통을 생성하기 위해 실제로 사용하는 클래스를 컴파일시가 아닌 실행시에 결정할 수 있다.)
      • 싱글턴 패턴을 구현 할 때는 private 생성자와 정적 메소드, 정적 변수를 사용한다. 

 

 public class Singleton {

1
2
3
4
5
6
7
8
9
 private static Singleton uniqueInstance;
 
 private Singleton(){} //다른 클래스에서 new키워드를 사용할 수 없게 된다.
 public static Singleton getInstance(){  //그래서 getInstance()를 사용할 수 밖에 없다.
  if(uniqueInstance == null){
   uniqueInstance = new Singleton();
  }
  return uniqueInstance;
 }


 

  • 빌더패턴
    • 객체가 어떤 식으로 구축되는지에 대해 모르는 상황에서 단계별로 객체를 생성하는 패턴이다.
    • 객체를 직접 구축하는 대신 빌더의 인스턴스를 만들고 빌더에서 객체를 직접 구축하는 대신 빌더의 인스턴스를 만들고 빌더에서 객체를 대신 만들도록 하는 방식이다.
    • 객체를 초기화하는 데 여러 생성자 매개변수가 필요한 경우, 그 중에서도 특히 동일 또는 유사한 유형의 매개변수가 여럿 필요한 경우에 특히 이 빌더 패턴이 유용하다.
    • 빌더패턴 예시

 

 적용 전

 적용 후

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Window{
 
     public Window(bloolean visible,boolean modal,boolean diaog){
 
         this.visible=visible;
 
         this.modal=modal;
 
         this.dialog=dialog;
 
     }
 
 
 
    private boolean visible;
 
    private boolean modal;
 
    private boolean dialog;
 
}


  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class WindowBuilder{
 
 
 
   public WindowBuilder(){}
 
   
 
   public WindowBuilder setDialog(boolean flag){
 
  
 
        dialog=flag;
 
        return this;
 
    }
 
   public WindowBuilder setModal(boolean flag){
 
  
 
        modal=flag;
 
        return this;
 
    }
 
   public WindowBuilder setVisible(boolean flag){
 
  
 
        visible=flag;
 
        return this;
 
    }
 
   public Window build(){
 
         return new Window(visible,modal,dialog);
 
    }
 
    private boolean visible;
 
    private boolean modal;
 
    private boolean dialog;



 

Secure 코딩과 기본해킹 3가지 기법

Posted by ironmask84
2017. 3. 27. 11:53 컴퓨터공학/Security




1. Secure Cording
SW개발과정에서 개발자 실수, 논리적 오류 등으로 발생하는 취약점을 최소화하는 보안활동
좁게는 소스코드 구현단계에서의 활동이고,
넓게는 SW 개발생명주기 SDLC 의 각 단계별 요구되는 보안활동이 모두 포함됨

1) 입력데이터의 검증

가) SQL Injection
DB와 연동된 웹 어플리케이션에서 입력되는 데이터에 대해 유효성 검증을 하지 않을 경우,
공격자가 입력폼에 SQL문을 삽입하여 DB로부터 정보를 조회하거나 조작하는 취약점

DB와 연동되는 입력값들에 대해서는
SQL 쿼리문관련 특수문자나 SQL명령어들을 필터링 하도록 코드 구현함으로 해결
(ex) ' or 1=1 #  을 통해 TRUE 값 만들수 있음)

나) XSS (크로스 사이트 스크립트)
웹페이지에서 악의적인 스크립트를 포함시켜 사용자 측에서 실행되도록 유도하여 정보 유출 등의 공격 유발

스크립트 종류
Client Side : JavaScipt는 Client측에 다운로드 되어서 브라우져에서 수행
Server Side : JSP, ASP, C#, PHP 등

- 스크립트의 코드 중에 서버에서 값을 받아오는 부분에 대해서는 해당 값에 대해 문자변환 함수나 메소드를 이용하여
유효성 검증을 함으로 해결
- HTML 태그를 허용하는 게시판에서는 White List 선정후 해당 태그만 허용 (Script 태그 금지 등)

2) 보안기능
인증, 접근제어, 기밀성, 암호화, 권한관리 등을 적절하지 않게 구현시 발생하는 취약점

가) 중요 자원에 대한 잘못된 권한 설정
password와 같은 중요자원에는 관리자에 의해서만 read/write 되도록 설정한다.

나) Cross Site Request Forgery (사이트 간 요청 위조)
사용자 자신의 의지와 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격
사용자의 인증 없이 정보에 접근하거나 위조가 가능해진다.

중요한 정보를 처리하는 웹페이지에서는 사용자 재인증 작업을 거치도록 한다.
(코드상에서 ID/Password를 다시 입력받게해서 기존 session의 ID/Password를 비교하도록 한다.)

3) 시간 및 상태
데드락(dead lock)나 자원에 대한 경쟁조건(race condition)과 같이
프로그램 동작과정에서 프로세스 혹은 쓰레드나 시스템 상태에 대한 정보(자원잠금, 세션정보)에 관련된 취약점을 말한다.


가) 경쟁조건(race condition)
한 자원에 대해 동시에 여러 프로세스 혹은 쓰레드에서 접근을 하려고 하면,
동기화 문제가 발생할 수 있고, 
이를 임계영역에 대한 처리를 해서 해결하지만, 잘못 처리하면 데드락이 발생할 수 있다.


4) 에러처리 
에러를 처리하지 않거나, 불충분하면 에러정보에 중요 시스템 정보가 노출될 수 있는 취약점
ex) java에서 e.printStackTrace()와 같이 디버깅 정보를 보여주는 건 개발 때 사용하는 것으로 상용 땐 위험
    그래서 대신 따로 에러메세지를 출력하도록 하고, 내부적인 예외상황은 로그로 따로 저장하도록 구현해야 함

5) 코드오류
메모리의 부적절한 반환 등 개발자의 코딩오류로 인해 유발되는 취약점
Null이 될 수 있는 레퍼런스는 참조하기 전에 널 값인지 검사하도록 한다.

6) 캡슐화
중요한 데이터를 불충분하게 캡슐화하면, 인가되지 않은 사용자에게 데이터 노출이 가능해지는 취약점
멀티 쓰레드 환경인 java 서블릿 등에서는 정보를 저장하는 멤버변수가 포함되지 않도록 하여
서로 다른 세션에서 데이터를 공유하지 않도록 해야한다.



* 아래는 http://ironmask.net/261 참조

2. Race Condition

3. Buffer Overflow

4. Format String

 

웹보안 관련과 OWASP 2013 그리고 2017

Posted by ironmask84
2017. 3. 27. 11:51 컴퓨터공학/Security




국내 웹 취약점 진단기준 : 국정원 10대 취약점, KISA 제시 취약점, 행안부 제시 43개 시큐어 코딩 진단기준
--> CVE, CWE, OWASP 에서 나온 문서들을 참고한 것이다.

1. CVE(Common Vulnerabilities and Exposures) : http://cve.mitre.org , CVE-연도-순서 순의 포맷으로 목록화

2. CWE(Common Weakness Enumeration) : http://cwe.mitre.org , 다양한 언어의 소스코드 취약점 목록화

3. OWASP(Open Web Application Security Project) : https://www.owasp.org/index.php/Main_page
--> 웹어플리케이션에 대한 취약점 Top 10 목록화

4. KISA 점검기준 : http://www.kisa.or.kr/public/laws/laws3.jsp

5. 행정안전부 시큐어코딩 항목 : http://www.mospa.go.kr/


OWASP 2013에 대표적 3가지

1) SQL Injection
   - 유형별
      ㄱ) Error Base SQL Injection : SQL시스템에서  error 리턴시, 그 정보를 이용하여 취약점 찾음
      ㄴ) Blind SQL Injection : 쿼리의 참과 거짓을 통해 데이터 추출
   - 공격방식별
      ㄱ) Form SQL Injection : 입력폼에 쿼리문 Injection
      ㄴ) Union SQL Injection : union select 쿼리문 이용하여 한 쿼리의 결과를 다른 쿼리의 결과에 접합
      ㄷ) Stored Procedure SQL Injection : 일련의 쿼리를 함수처럼 실행
      ㄹ) Mass SQL Injection : 한 번의 공격으로 대량의 DB값이 변조 (악성스크립트 이용)
   - 대안
     ㄱ) DB와 연동되는 스크립트의 모든 패러미터 유효성 검증, SQL 특수문자 필터링
     ㄴ) 입력 문자열 길이 제한

2) XSS (cross site script)
   - 유형별
      ㄱ) Stored XSS - 웹서버내에 DB에 악성스크립트가 저장 - 게시판, 방명록 등에서..
      ㄴ) Reflected XSS - 악성스크립트가 공격사이트가 아닌 다른 사이트에 있는 경우
   - 대안
      ㄱ) 사용자 입력값은 반드시 서버단에서 검증 (특수문자는 변환함수로 치환)
      ㄴ) 게시판에서 HTML 태그 허용시, White List 선정후, 해당 태그만 허용 (Script 태그는 금지 등)

3) CSRF 공격 (cross site request Forgery)
웹어플에서 정상적 경로 통한 요청과 비정상 결로 통한 요청을 서버가 구분하지 못할 경우에,
공격자가 스크립트 구문 이용하여, 정상 사용자로 하여금 조작된 요청을 전송하도록 하여
설정 및 정보 변경시키는 경우
   - 대안
      ㄱ) Get 보다는 POST 방식 사용 (Get은 url에 sql문이 노출?)
      ㄴ) 중요기능에는 세션검증과 재인증을 유도한다.



새롭게 TOP 10 에 추가된 3개 항목은 다음과 같습니다.

1. XML External Entities (XXE) 

XXE 라고 부르는 'XML 외부 엔터티' 취약점은 XML 문서의 DTD 구조 정의 시 Entity 항목을 설정할 수 있을 때 발생하는 취약점 입니다.

XML 문서는 마치 변수를 선언한 것 처럼 Entity를 선언하여 사용 할 수 있는데, Entity 선언 시 외부 리소스로 선언이 가능합니다.

아래 코드와 같이 외부 파일, 가령 운영체제의 계정 정보가 기록된 passwd 파일을 외부 엔터터로 선언하고 XML 문서 내에서 '&엔터티명'을 호출하면 해당 파일 내용을 핸들링 할 수 있습니다.

<?xml version="1.0" encoding="ISO-8859-1"?>

 <!DOCTYPE foo [<!ELEMENT foo ANY >

 <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

 <foo>&xxe;</foo>

참고로 일반적으로 마크업 문서에서 <, > 대신 사용하는 &lt, &gt 는 기본적으로 선언된 Entity 입니다.


2. Insecure Deserialization

Javascript 를 비롯하여 여러가지 개발 언어에서 여러가지 이유로 데이터 혹은 객체를 전송할 때 직렬화(Serialization)을 수행하게 됩니다. 가령 특수 문자나 공백등의 구분자가 포함되어 있다던가, 바이너리 데이터를 전송할 필요가 있다던가 URL 호출로 직접 데이터를 전송 할 경우 일반적으로 사용합니다.

이렇게 serialization 된 정보 전송 시 별도의 무결성 검증이나 암호화를 수행하지 않을 경우 프로그램에 영향을 줄 수 있는 악의적인 정보를 전송할 경우 원래 데이터로 복원하는 Deserializtion 시 문제를 발생시킬 수 있습니다.


3. Insufficient Logging & Monitoring

악의적인 공격 징후에 대한 로그를 남기지 않거나 로그를 기록하더라도 모니터링을 수행하지 않으면 지속적인 공격의 대상이 될 수 있습니다.

공격의 징후 (가령 대량의 포트 스캐닝, Brute force 공격 등)에 대한 로그 기록과 지속적인 모니터링을 통해 공격 징후를 파악하고 사전에 공격을 차단할 수 있도록 방비해야 합니다.

[출처] OWASP TOP 10 2017 릴리즈|작성자 강군



2013 버전과 비교하면 몇가지 변경사항들이 좀 눈에 띄입니다. 특히 2013 버전에 있던 CSRF(크로스 사이트 요청변조)가 이번 버전에서 빠졌는데, OWASP 그룹에 따르면 CSRF는 13위에 랭크되어 이번 TOP 10 에서는 제외되었다고 합니다.



아래는 OWASP Top 10 -2017 관련 내용입니다.

처 : https://blog.naver.com/PostView.nhn?blogId=crehacktive3&logNo=221162402841&proxyReferer=https%3A%2F%2Fwww.google.com%2F


드디어 OWASP Top 10 - 2017 최종 버전이 공개되었습니다. 지난번 OWASP Top 2017 RC1 항목에 관해 포스팅을 하였는데 그때와는 다소 항목이 변경된 것을 아래 그림을 통해 알 수 있습니다. 이전 OWASP Top 10 - 2013 버전 보다 훨씬 더 직관적으로 항목이 변경되었으며, 최신 트랜드를 반영한 것을 알 수 있습니다.



OWASP Top 10 - 2013, OWASP Top 10 - 2017 항목 비교


아래는 본문 내용에서 발췌한 내용입니다.


데이터가 제공한 새로운 문제: 

- A4:2017-XML 외부 개체(XXE)는 주로 소스 코드 분석 보안 테스팅 도구(SAST) 데이터 집합에서 지원되는 새로운 범주입니다.


커뮤니티가 제공한 새로운 문제: 

우리는 커뮤니티가 지켜보고 있는 두 가지 취약점에 대한 통찰력을 제공할 것을 요청했습니다. 500개 이상의 개별 제출 및 민감한 

노출, XXE와 같은 이미 제시된 데이터를 제거한 후 다음과 같은 두 가지 새로운 문제가 있었습니다: 

- A8:2017-안전하지 않은 역직렬화는 영향을 받는 플랫폼에서 원격 코드 실행 또는 중요한 개체 조작을 허용합니다. 

- A10:2017-불충분한 로깅과 모니터링은 악의적인 활동 및 침입 탐지, 사고 대응 및 디지털 포렌식을 방해하거나 크게 지연시킬 수 

있는 결함이 있습니다. 


병합했거나 삭제됐지만, 잊지 말아야 하는 사항: 

- A4-안전하지 않은 직접 객체 참조와 A7-기능 수준의 접근 통제 누락은 A5:2017-취약한 접근 통제 항목으로 병합되었습니다. 

- A8-크로스-사이트 요청 변조 (CSRF)은 CSRF 방어를 포함한 많은 프레임워크에 있기 때문에 5%의 애플리케이션에서만 

발견되었습니다. 

- A10-검증되지 않은 리다이렉트 및 포워드는 약 8%의 애플리케이션에서 발견되었지만 XXE에 밀려났습니다

OWASP Top 10 - 2017(한글버전 PDF)

https://www.owasp.org/images/b/bd/OWASP_Top_10-2017-ko.pdf

OWASP Top 10 - 2017(영문버전 PDF)

https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf




 

네트워크 보안 관련

Posted by ironmask84
2017. 3. 23. 13:15 컴퓨터공학/Security


1. ARP Spoofing
: 논리주소(IP) -> 물리주소(MAC) 로 변환해주는 프로토콜인 ARP를 이용하여,
  ARP Request를 계속해서 보냄으로써 공격대상 통신장비에 ARP Cache Table에 저장되어 있는
  임의의 IP, MAC 주소를 자신의 주소로 변경시켜서, 통신데이터를 Sniffing 하는 공격
--> arp -s ip주소 명령어로 정적주소로 타입을 등록함으로 ARP Cache Table 변경을 막는 방법이 있다.

2. ping, traceroute
: ping은 TCP/IP방식의 3계층인 IP프로토콜의 신뢰할 수 없는 전송을 관리해주는 ICMP의 메세지 중
  echo request(type 8), echo reply(type 0)을 이용하여, 네트워크 속도 및 손실률을 검사하는 유틸이다.

: traceroute는 여러 중계 라우터 각 구간에 대한 네트워크 상태를 관리하는 유틸
  ICMP 메세지 중 Time Exceeded(Type 11)와 Destination Unreachable(Type 3)을 이용하고,
  IP헤더에 포함된 TTL(Time To Live) 을 이용한다.

3. ICMP Redirect 공격
:   ICMP Redirect는 라우터만이 보낼수 있는데, 이를 공격자가 자신이 라우터 인것처럼 보이기 위해 IP헤더에
    source ip를 라우터의 주소로 위조하여 보내고, 라우팅 테이블을 변조시킨다.
   보안상의 이유로 일반적으로 OS에서 ICMP Redirect 옵션을 기본적으로 해제한다.
   리눅스에서는 sysctl -w 명령어 이용

4. ifconfig eth1 promisc (2계층 스위치 관련): 자신에게 온 패킷이 아니어도 다 받는다. Sniffing 목적 

5. DNS Spoofing 공격 (DNS는 도메인명 -> IP주소 로 변경해주는 것)
: 희생자가 DNS 쿼리를 수행하면 공격자가 이를 스니핑하고 있다가 희생자 호스트에 위조된 웹사이트로 접속하는
  DNS응답을 보내 위조된 주소로 접속하게 만드는 공격이다. DNS는 UDP를 이용하므로 비연결이라는 특성의 취약점을
  이용하여, 트랜잭션ID만 일치하면 먼저 들어온 응답을 신뢰하는 특성 이용한 것
  --> 중요한 사이트는 hosts 파일에 등록하여, DNS응답보다 우선순위가 높은 hosts파일을 참조하도록 하여 해결 


** 참조 우선순위 : hosts파일 -> 호스트의 dns cache -> resolv.conf파일에 등록된 dns서버정보에 질의

6. DNS Cache Poisoning
: DNS서버의 캐시 메모리에 위조된 데이터를 저장하여 호스트는 이 위조된 정보를 사용하도록 유도는 방식의 파밍 공격
  해당서버에 접근하는 호스트들이 위조된 정보를 응답받으므로 피해가 크다.
  DNS서버가 질의를 받을때, 자신의 Cache에 해당 정보가 없으면 Root DNS서버부터 순환질의를 하는데,
  이틈에 해당 DNS서버에 공격자가 Cache에 정보를 먼저 업데이트 시켜버린다.
  --> DNSSEC 기술을 이용 (기존 DNS에서 공개키 암호화  기능을 추가 부여)
  --> named.conf 파일을 수정하여 재귀적 질의 제한, zone transfer파일 제한

7. DNS Lookup 하는 명령어 (도메인 -> IP주소)
   1) nslookup
   2) dig : nslookup을 대체하기 위함, 리눅스 및 유닉스 계열에는 기본 설치

8. DHCP : 동적으로 클라이언트의 네트워크 주소 (IP)를 설정하기 위한 프로토콜
   * DHCP Starvation 공격 : 할당가능한 IP를 모두 소진하게 만들어  IP할당이 불가능하게 하는 공격
     --> 서로다른 MAC주소로 대량으로 보냄 -> 이에대한 offer 오면 -> request메세지까지 보내고 실제로는 할당안함

9. DDOS : C&C서버(Command & Control)를 이용하여, Bot/좀비PC 들을 컨트롤하여, 타겟을 공격한다.
   ex1) DNS Query Flooding : UDP프로토콜 기반의 서비스를 제공하는 DNS에 대해 DNS쿼리 데이터를 다량으로 서버에
          전송하여 DNS의 정상적인 서비스를 방해
   ex2) TCP SYN Flooding : 공격자는 다량의 SYN패킷을 서버로 전달하여 서버가 새로운 클라이언트의 연결요청을
          처리하지 못함 (syn+ack 받고, ack를 보내지 않아서 처리되지 않은 정보를 계속 쌓이게 만든다.)
   ex3) HTTP Get Flooding : 공격자는 동일한 URL을 반복 요청하여 웹서버가 URL에 대해 데이터를 클라이언트에게 회신하기 위한 서버자원을 사용하도록 공격

10. DRDOS (Distributed Reflection DOS)
: 공격자는 출발지 IP를 공격대상의 IP로 위조하여 다수의 반사서버로 요청정보를 전송,
  공격대상은 반사서버로 부터 다수의 응답을 받아 서비스 거부상태가 됨

  * 공격근원지를 파악하기 어렵다. (출발지 IP를 변조하여, 공격트래픽이 수많은 반사서버를 경유하므로)
  * 좀비PC의 공격트래픽 효율이 증가한다. 반사서버는 syn+ack 패킷에 대한 응답이 없는경우 일정횟수 재전송을
    수행하기 때문에 공격자가 전송하는 syn패킷보다 몇배많은 syn+ack 패킷이 타켓에 전송된다.

** 해결방법
: IP주소가 위조된 패킷이 인터넷망에 유입되지 않도록 ISP가 직접 차단
  반서서버에게는 icmp프로토콜이 필요없는 시스템은 해당프로토콜을 차단




 

Linux 명령어와 시스템보안

Posted by ironmask84
2017. 3. 3. 18:23 컴퓨터공학/Security


1. ls (디렉터리, 파일 정보 출력)
-> 1) 파일종류, 접근권한  2) 하드링크수  3) 소유주  4) 소유그룹  5) 크기  6) 최종 변경일  7) 최종 변경시간  8) 이름

2. stat (i-node 속성정보 출력)
-> 1) i-node number  2) 파일타입  3) 접근권한  4) link count  5) 소유자  6) 소유그룹  7) 크기  8) MAC Time  
    9) Block Index
    ln source_file target_file : 하드링크 
    ln -s source_file target_file : 심볼릭링크 (소프트 링크)

3. find (파일 검색)
-> find path [expression] [action]
    1) find . -name "*.c" : 현재 디렉터리에서 파일명이 .c로 끝나는 파일 검색
    2) find . -size +56 : 현재 디렉터리에서 파일 크기가 56블록보다 큰 것을 검색
    3) find . -perm -664 : 현재 디렉터리에서 user와 group에 읽기 및 쓰기 권한, other에 읽기 권한이 있는 파일 검색
    4) find . -mtime +3 : 현재 디렉터리에서 파일을 수정한지 3일이 지난 것을 검색

4. touch : 0byte 파일을 생성 또는 파일의 시간을 변경

5. umask : 파일 생성 시 접근권한에 영향을 미침 (/etc/profile 에 적용, 개인은 .profile에 적용)

6. diff : 파일이 동일한지 여부를 검사

7. comm : 파일을 비교할 때 사용 (한쪽에만 있거나 양쪽 모두에 있는 행 출력)

8. grep : 파일 내 특정 패턴이나 문자열을 검색

9. ps : 시스템에 상주중인 프로세스 정보 출력
-> UID, PID, PPID, STIME(프로세스 시작 시간), TTY(프로세스가 연결된 터미널), TIME(CPU 사용시간), CMD(프로세스명)

10. 시그널 : UNIX 시스템에서 지원하는 소프트웨어 인터럽트, 프로세스간 통신수단
-> 1) 외부에 의해서 : 키보드 입력 (ctrl + c)
    2) (커널)에러에 의해서 : divde zero 오류, 메모리 참조 오류
    3) 이벤트에 의해서 : alarm() 함수, 프로세스 종료
    4) 인위적으로 : kill() 함수, kill 명령어 (kill -시그널번호 PID)
  * 주요시그널 : SIGKILL(9), SIGSTOP(23) 이 2가지는 무시나 핸들링이 불가능하므로 관리자가 해커를 막기위한 강력권한
  * 좀비프로세스 : 프로세스 수행을 종료했지만 부모 프로세스가 종료상태정보를 확인하지 않아서 소멸하지 않고
                        남아있는 프로세스
  * 고아프로세스 : 자식프로세스가 살아있는 상태에서 부모 프로세스가 종료하게 되면 자식프로세스는 고아프로세스 됨.

11. mount : 보조기억장치에 설치된 파일시스템을 UNIX시스템이 인식하도록 특정 디렉토리에 논리적으로 연결시킴

12. cron : 정기적 처리할 작업을 crontab명령으로 crontab파일에 저장, cron데몬 프로세스가 관리
              해커가 주기적으로 정보를 빼돌리는 데에 사용도 가능하다. -> crobtab 파일 관리 필요

13. /etc/passwd : account / password(x로표시) / user_ID / group_ID / comment / home_directory / login_shell
    /etc/shadow : account / encrypted_password / last_change / minlife / maxlife / warn / inactive / expires
      ** chage 명령어로 패스워드 Aging관련 설정을 할 수 있다. -> /var/log/secure파일에 로그가 남는다.

14. setuid, setgid (chmod ug+s)
   1) setuid, setgid 설정된 경우 -> RUID == EUID,  RGID == EGID
   2) setuid, setgid 설정되지 않은 경우
   -> RUID, RGID = 실행시킨 사용자의 ID
       EUID, EGID  = 실행파일 소유자의 ID (프로세스가 실행중인 동안에 접근권한을 판단하기 위한 ID)
* root소유의 실행파일에 setuid를 설정하면, ruid는 실행자의 id, euid는 root id로 설정이 된다. 
  따라서, 실행 프로그램 내에 euid 설정에 따라 root권한으로 접근하게 된다.

* sticky bit (chmod o+t)
-> 디렉토리에 설정이 되면, 파일의 생성은 자유롭게 할 수 있지만
    파일 삭제 및 파일명 변경은 파일소유자 또는 root만이 가능하다.