Kali-KM_Security Study

Virus

감염(Infect)이란 바이러스가 명령들의 연결 사이에 자신을 집어넣어서 정당한 프로그램의 실행뿐만 아니라 바이러스의 실행을 유발하도록 하는 것이다.

바이러스의 구조는 세가지 원형을 고려한다. 즉 주요 구성작용을 세가지로 나누어 볼수 있다. 첫째로 감염작용은 바이러스가 퍼지는 방식이나 경로들로 정의, 둘째로 피해작용은 바이러스가 복제 외에 무엇을 하느냐로 정의된다. 셋쨰로 트리거작용은 피해를 일으킬 시기를 결정하는 절차로 정의된다.

피해로는 트래싱이나 부팅불가, 메모리 점유, 디스크 공간 차지, 클럭 싸이클 소모, 시스템 변경 혹은 이들의 조합으로 나타난다.

스텔스 작용으로 은폐 기법을 사용하는 바이러스들은 종종 스텔스 바이러스라고 기술된다.

다형성(Polymorphism)은 자신의 생김새를 변화시켜서 자신의 존재를 탐지하기 어렵게 만들려고 한다. 다형성은 동일한 바이러스를 유지하지만 특성화된 탐색 문장을 찾는 것으로는 감염된 파일에서 찾아지지 않는 것이다. 코드는 본질적으로 동일하게 유지되지만, 표현이 달라서 같은 프로그램이 서로 다른 순서의 바이트로 나타나게 된다.

은 자기복제 프로그램을 의미한다. 그에 비해 트로이 목마는 자기복제를 하지 않는다.

 

바이러스의 역사 고찰

코어 전쟁, 임프(Imp)는 단순히 메모리 상에서 옮겨 다니며, 다니면서 위치를 덮어쓴다. 이것은 크기가 매우 작기 떄문에 임프를 찾아내고 죽이는 것은 매우 어렵다.

화면 뒤집기, 음향소리 추가등 성가신 것들도 존재한다.

  

피해

데이터 덮어쓰기, 파일 지우기, 시스템 정보 빼내기, 디스크 포멧, 보안 시스템 무력화, 소프트웨어 오염, 프로그램 프로세스제거 등을 통한 손상

바이러스와 트로이 피해로 인한 직접적 충격

유용성에 대한 공격 : 파일과 하위 디렉터리의 삭제, 파일 이름변경, 파일, 디스크, 혹은 시스템 영역의 암호화

완전성에 대한 공격 : 시스템 영역의 이동을 포함해서 임의적인, 혹은 비임의적인 디스크 쓰기에 의한 시스템 파일과 시스템영역(DOS | MBR )에 대한 오염, 데이터몰락으로 스프레드 쉬트 형식의 왜곡과 같은 대상 데이터 파일의 변경, 권한 없는 파일 쓰기에 의한 어플리케이션 파일과 데이터 파일 오염

기밀성에 대한 공격 : 비밀번호 획득과 전달, 개인적인 기밀 파일을 다른 곳으로 전달


Bomb

Logic Bomb특정 조건들이 만족될 때 실행되는 루틴이나 루틴의 집합이며, 바이러스나 트로이의 구성 요소가 될 수 있다.

Time Bomb논리 폭탄의 특수한 경우이며, 시작 조건이 특정 시간이나 날짜가 된다.

ANSI Bomb : 키보드의 키, 혹은 키들을 재정의 하는 ASNI.SYS에 의해서 번역되는 문자들의 연속이다. 그에 따라 이 키들은 일반적으로 할당된 문자 대신에 재정의 된 문자열을 보내게 된다.

   

File Virus

기존의 프로그램 코드를 덮어씌우거나 프로그램의 시작부분이나 마지막 부분에 코드를 추가하거나 정상적인 코드가 실행되는 중에 바이러스 코드가 실행될 수 있도록, 명령들의 연결 사이에 바이러스 코드를 집어 넣는다.

올리디버거를 통하여 바이러스 코드를 뒷부분에 넣은 후 맨앞에서 점프문을 통하여 그 부분으로 진행 되었다가 바이러스 코드의 가장 뒷부분에 다시 점프문을 넣어줌으로써 다른 파일에 섞일수 있다. (Prepending & Appending)

  

위험충격분석

생산성 저하-서비스 거부 비용: 감염된 시스템의 성능 저하, 손상된 어플리케이션의 신뢰 불가, 손상된 시스템의 사용 불가, 손상되거나 접근할 수 없는 데이터의 사용 불가

관찰되지 않은 영향 : 성능저하, 탐지되지 않은 데이터 피해, 어플리케이션 피해, 디스크 I/O손상, 불법 자원사용, 탐지되지 않은 증식과 이차 감염

관찰된 영향 : 심각한 성능 저하, 진단되지 않은 시스템 오류, 디스크나 데이터에 대한 장기적인 피해, 진단되지 않은 오류에 쓰여진 서비스 시간비용, 신뢰할수 없는 어플리케이션, 생산성의 손실로 인한 대체이익의 손실

 

과거의 바이러스

Jerusalem Virus : 파일 감염에 있어서 가장 많은 수의 변종을 가진 바이러스 프로그램으로 감염된 파일이 실행되면, 자신을 메모리에 인스톨 시켜서 원조 감염 프로그램이 삭제되더라도 여전히 남아 활동하게 된다. 파일에 추가된 바이러스 코드는 프로그램이 기생하게 된 이후 실행된 .exe 프로그램들을 감염시킨다. 대부분의 변종은 일종의 날짜 논리 폭탄 하중을 탑재한다.

AIDS Trojan : 하드 디스크를 암호화 후 키에 대한 요금을 청구했다. Ransomware와 비슷한 원리인것 같다.

Stoned Virus  : Stoned is the name of a boot sector computer virus created in 1987.

Michelangelo : 현재는 멸종된 바이러스로 요즘 출시되는 시스템에는 달려있지 않은 플로피디스크로만 전파되는 부트바이러스다.

AutoOpen ( or AutoStart) :

Chernobyl ( CIH.Spacefiller ) : PC에 장착된 하드디스크 안에는 새로운 파일을 저장할 때마다 공간을 지정해주는 주소록 기능을 수행하는 부분이 있는데, 이 바이러스는 바로 이곳을 파괴한다. 때문에 바이러스에 감염되면 PC가 어디에 무엇이 저장되어 있는지 파악할 수 없는 혼란에 빠져 파일을 복구할 수 없게 된다. 만약 기본 입출력 시스템(BIOS)이 감염되면 기판이나 플래시메모리칩을 교체해야 한다. 이 바이러스에 감염된 파일이 실행되면 기억장소에 상주한 뒤 윈도95에서 실행되는 파일을 계속 감염시킨다.

RootKit : 시스템 침입 후 침입 사실을 숨긴 채 차후의 침입을 위한 백도어, 트로이목마 설치, 원격 접근, 내부 사용 흔적 삭제, 관리자 권한 획득 등 주로 불법적인 해킹에 사용되는 기능들을 제공하는 프로그램의 모음.


참고


트래싱(Trashing)

임프, 제록스웜,,부트섹터 바이러스, 브레인바이러스, 예루살렘바이러스, Frodo_Virus, Dark Avenger, AIDS 트로이, 미켈란젤로, 르네상스, 데키랄선라이즈, Hoax, 백오리피스, 스크립트바이러스, 멜리사, 오토런이 지원되는 usb에는 무엇이 있을까?, 확장자명 변경 바이러스, 레지스트리 변경, 원격접근(Remote-Control Software), 루트키트(RootKit), 실행 후 원본 파일을 삭제하는 프로그램, 다른 프로그램을 감염시키는, 메일을 통한 바이러스 전달, 키로거

정상적인 프로그램을 바이러스로 감지되도록 하여 백신이 차단하게끔 하는 방법

 

'Study > Book' 카테고리의 다른 글

Viruses Revealed _ David Harley  (0) 2015.03.04
Operating System Concepts_Chapter.1  (0) 2015.02.05
Operating Sysyem Concepts //컴퓨터 시스템의 구성  (0) 2015.02.03
정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23

Comment +0

Chapter 1. 서론

1.1 운영체제가 할 일

운영체제는 하드웨어를 제어하고 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 조정한다. (사용자 관점, 시스템 관점)

1.2 컴퓨터 시스템의 구성

#Computer System Operation

컴퓨터 시스템은 공유 메모리에 대한 접근을 제공하는 공통 버스를 통해 연결된 여러 개여 장치 제어기와 하나 이상의 CPU로 구성 되어 있다.

-초기프로그램(부트스트랩) in ROM > init실행 & Event 대기

-interupt : ISR, Handler , Table, (예외상황, 하드웨어,시스템콜)

-인터럽트 구조 : 명령의 주소저장, 최근 스택에 복귀주소 저장

#Storage Structure

           CPU는 오직 메모리로부터 명령을 적재, 실행하고자 하는 프로그램은 메모리에 저장필요

           모든형태의 메모리는 워드의 배열을 제공하며 각 워드는 고유의 주소를 가진다.

           -적재명령 : 주메모리로부터 CPU내부의 레지스터로 한 워드를 옮기는 것

           -저장명령 : 레지스터의 내용을 주 메모리로 옮긴다.

#I/O Structure

장치제어기 : 자신이 제어하는 주변장치와 자신의 로컬 버퍼 저장장치 사이의 데이터 전송을 담당. 데이터 전송 완료 후 인터럽트를 통해 디바이스 드라이버에게 통보.

위의 방식은 대량의 데이터 전송시 오버헤드 초래 >> 직접메모리 접근(DMA)장치 CPU의 개입 없이 메모리로부터 자신의 버퍼 장치로 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송

1.3 Computer System Architecture

#단일 처리기 시스템

사용자 프로세스의 명령어를 포함하여 범용 명령어 집합을 실행할 수 있는 하나의 주 CPU를 가진다.

#다중 처리기 시스템

        -증가된 처리량, 규모의 경제, 증가된 신뢰성

        -비대칭적 다중처리 : 종속 관계의 처리기

        -대칭적 다중처리(SMP) : 모든 처리기가 대등

다중처리는 계산 능력을 증대시키기 위하여 CPU를 추가한다. 최근에는 하나의 칩에 여러개의 코어를 포함 시키는 것

           위의 경우에서 각 코어는 자신의 레지스터 집합과 지역 캐시를 가지고 있다.

#클러스터형 시스템

클러스터 시스템은 여러 개의 CPU들이 함께 계산 작업을 실행한다. 하지만 둘 이상의 독자적 시스템 또는 노드들을 결합하여 구성한다는 점에서 다중처리기 시스템과 차이.

-비대칭형 클러스터 : 다른 컴퓨터들이 프로그램 실행시키는 동안 한대는 긴급대기모드

-대칭형 클러스터 : 둘 이상의 호스트가 응용 프로그램을 실행시키고 서로 감시

-병렬화, 병렬 클러스터

1.4 Operating Sysyem Architecture

다중프로그래밍 CPU가 항상 하나의 작업을 실행 할 수 있게 구성함으로 CPU 이용률을 증가시킨다.

: 주 메모리에 모든 작업저장하기엔 작아 처음에는 디스크 상에 존재하는 작업 풀 내에 유지된다. 풀은 주메모리 할당을 기다리며 디스크에 존재하는 모든 프로세스로 구성

-비다중프로그래밍 시스템에선 CPU가 쉬어야함

-다중프로그래밍 시스템 : 운영체제가 단순히 다른작업으로 전환해 그 작업을 실행

-멀티태스킹 : CPU가 다수의 작업들을 서로 교대로 실행하지만 빈번한 교대로 인해 사용자들은 각자 자기의 프로그램과 상호작용가능

-작업 스케쥴링(보조 > ) , CPU 스케쥴링 ( > 실행)

1.5 Operating System Operations

-현대의 운영체제는 인터럽트 구동식이다. 하나의 인터럽트를 처리하기 위해 하나의 인터럽트 서비스 루틴이 제공된다.

-운영체제와 사용자는 자원을 공유하기떄문에 사용자 프로그램의 오류가 현재 실행중인 프로그램내에서만 영향이 있도록 제한해야 한다.

#이중동작 모드

-모드비트 : 사용자모드(1), 커널모드(0)

-시스템 부트시 하드웨어는 커널모드에서 시작 > 운영체제가 적재 > 사용자 모드에서 사용자 프로세스 시작

-트랩이나 인터럽트 발생할떄마다 하드웨어는 커널모드로 전환. 그러므로 운영체제가 컴퓨터의 제어를 얻을 떄마다 항상 커널 모드에 있게 된다.

-하드웨어는 특권 명령이 커널모드에서만 실행하도록 허용

-사용자 모드에서 실행시 불법명령으로 간주 후 트랩을 건다.

-컴퓨터 시스템의 명령 실행 주기

 : 초기(운영체제<커널모드>) => 사용자응용(사용자<유저모드>)

    결국 제어는 인터럽트, 트랩 또는 시스템 호출을 통하여 운영체제로 다시 넘어옴

-시스템 호출 : 운영체제에 의해 실행될 동작을 사용자 프로세스가 요청할수 있게 한다. 일반적으로 인터럽트 벡터의 특정위치로 트랩을 거는 형태, 시스템 호출이 실행될 떄, 시스템 호출은 하드웨어에 의해 하나의 소프트웨어 인터럽트로 취급된다. 제어가 인터럽트 벡터를 통해 운영체제내의 서비스 루틴으로 전돨되고 모드비트가 커널로 설정.

-커널은 인터럽트 발생시킨 명령을 검사하여 인자가 정확하고 합법적인지 검증하고 요청을 실행 후 복귀시킴

#타이머 관리

무한루프, 또는 시스템 서비스를 호출하지 않아서 제어가 운영체제로 복귀하지 않는 경우를 방지한다.

타이머는 지정된 시간 후 컴퓨터를 인터럽트 하도록 설정할수 있다.

사용자에게 제어를 양도하기 전에 운영체제는 타이머가 인터럽트 할수 있도록 설정되었는지를 확인한다. 타이머가 인터럽트를 발생시키면 제어는 자동적으로 운영체제로 넘어가며, 운영체제는 인터럽트를 치명적인 오류로 취급하거나 또는 프로그램에게 더 많은 시간을 줄수 있다. 이에 따라 타이머의 동작 변경 명령은 특권 명령이다.

1,6 프로세스 관리

           -프로그램은 그 명령이 CPU에 의해 실행되지 않으면 아무 일도 할수 없다.

-프로세스는 자신의 일을 하기위해 여러 자원을 필요로 하는데 이러한 자원은 프로세스가 생성될떄 제공될수있고, 실행되는 동안 할당 될수 있다. 프로그램 종료시 자원 회수

-프로그램은 디스크에 저장된 파일의 내용과 같이 수동적 개체

-프로세스는 다음 실행 명령을 지정하는 프로그램카운터를 가진 능동적 개체이다.

-운영체제 프로세스 시스템 코드를 실행하는 프로세스와 사용자 프로세스 사용자 코드를 실행하는 프로세스들로 프로세스가 구성된다. 이들 모든 프로세스는 하나의 CPU 상에서 멀티 플렉싱함으로써 잠재적으로 병행 실행 될수 있다.

-운영체제는 프로세스 관리와 연관해 다음을 책임진다.

           :CPU에게 프로세스와 스레드 스케쥴링

           -사용자 프로세스와 시스템 프로세스의 생성과 제거

           -프로세스의 일시 중지와 재실행

           -프로세스 동기화를 위한 기법 제공

           -프로세스 통신을 위한 기법 제공

1.7 메모리 관리

주 메모리는 컴퓨터 시스템의 작동에 중추적인 역할을 한다. 메모리는 다양한 범위를 가지는 워드나 바이트의 대용량 배열이다.. 각 워드나 바이트는 자신의 주소를 가진다.

           -RAM CPU와의 입출력 장치에 의하여 공유되는 빠른 접근이 가능한 데이터의 저장소.

           -프로그램이 실행되기 위해서는 반드시 절대주소로 맵핑되고 메모리에 존재해야한다.

           운영체제는 메모리 관리와 관련하여 다음을 담당

                      -메모리의 현재 어느부분이 사용되고, 누구에 의해 사용되고 있는 지를 추적

                      -어떤 프로세스들을 메모리에 적재하고 제거할 것인가를 결정해야함

                      -필요에 따라 메모리 공간을 할당하고 회수 해야 한다.

 

1.8 저장장치 관리

운영체제는 저장장치의 물리적 특성을 추상화하여 논리적인 저장단위인 파일을 정의한다.

           #파일 시스템 관리

파일은 파일 생성자에 의해 정의된 관련 정보의 집합체이다. 일반적으로 파일은 프로그램과 데이터를 나타낸다.

           운영체제는 대량 저장매체와 그것을 제어하는 장치를 관리통해 파일의 추상개념을 구현

           운영체제가 파일관리 위해 담당

                      -파일, 디렉터리의 생성 및 제거

                      -파일과 디렉터리를 조작하기 위한 프리미티브의 제공

                      -파일을 보조저장장치로 맵핑

                      -안정적인 저장매체에 파일을 백업

           #대용량 저장 장치 관리

           컴퓨터 시스템은 반드시 RAM의 내용을 저장하기 위해 보조 저장장치를 제공해야함

           운영체제는 다음과 같은 기능 담당

                      -자유 공간의 관리

                      -저장 장소 할당

                      -디스크 스케쥴링

3차 저장 장치는 시스템 성능에는 중요하지 않지만 운영체제에 의해 관리되어야만 한다. 운영체제가 제공해야할 기능에는 마운트와 언마운트 기능, 프로세스의 배타적 사용을 위한 장치의 할당과 반환, 보조 저장장치로부터 3차 저장장치로의 데이터 이주

#캐싱

정보는 통상 어느 저장장치에 보관된다. 정보가 사용됨에 따라 보다 빠른 장치인 캐시에 일시적으로 복사된다 그러므로 특정 정보가 필요한 경우 먼저 캐시에 그 정보가 있는지를 조사해야한다. 만약 캐시가 없을경우 주 메모리 시스템으로부터 정보를 가져와 사용해야함 이떄 이 정보가 다음에 다시 사용될 확률이 높다는 가정하에 캐시에 넣어진다.

인덱스 레지스터와 같은 CPU 내부의 프로그램 가능한 레지스터들은 주메모리를 위한 고속의 캐시라 볼수 있다.

대부분의 시스템은 다음에 실행될 것으로 예상되는 명령을 넣어두는 명령 캐시를 가지고 있다. 만약 캐시가 없다면, CPU는 주 메모리부터 다음 명령을 인출해 올 동안 몇 사이클을 기다려야한다.

캐시의 크기에 한계가 있기에 캐시 관리가 설계의 중요한 문제가 된다

주 메모리는 보조메모리를 위한 빠른 캐시로 볼수 있는데, 이는 보조 메모리의 데이터를 사용하기 위해서는 주메모리에 복사되어야하고, 안전하게 보관하기 위해 보조 메모리로 이동되기 전에 데이터는 반드시 주메모리에 있어야 하기 때문이다.

-저장장치의 계층구조에서 각 수준간의 정보이동은 하드웨어 셀계나 제어하는 운영체제에 따라 명시적 또는 묵시적으로 이루어진다.

-메모리 계층 구조에서 동일한 데이터가 동시에 서로 다른 수준의 저장장치 시스템에 나타나게 된다.

-다중처리기 환경에서는 한 캐시에 있는 A값이 갱신 될 경우 그 값은 A가 존재하는 모든 캐시에 즉각적으로 반영되어야 한다. 이를 캐시 일관성 문제라 한다.

           #입출력 시스템

           운영체제의 목적중의 하나는 사용자에게 특정 하드웨어 장치의 특성을 숨기는 것이다.

           입출력 시스템은 다음과 같이 구성

                      -버퍼링, 캐싱, 스풀링을 포함한 메모리 관리 구성요소

                      -일반적인 장치 드라이버 인터페이스

                      -특정 하드웨어 장치들을 위한 드라이버

          

1.9 보호와 보안 ( Protection & Security )

시스템이 다수의 사용자를 가지고 있으며, 여러 프로세스의 병렬 실행을 허용한다며, 데이터에 대한 접근은 반드시 규제 되어야 한다.

메모리 주소 지정 하드웨어는 프로세스가 자신의 주소영역에서만 실행 될수 있도록 보장

보호란, 컴퓨터 시스템이 정의한 자원에 대해 프로그램, 프로세스, 또는 사용자들의 접근을 제어하는 기법이다.

보호와 보안을 제공하기 이해서는 시스템의 모든 사용자들을 구분 할수 있어야한다.

UID, SID

 

1.10 분산 시스템 ( Distributed Systems )

           분산시스템은 물리적으로 떨어져 있는 이기종 컴퓨터들의 집합이다. 네트워크로 연결됨

네트워크 프로토콜은 네트워크 어댑터와 같은 인터페이스 장치와 그것을 관리하기 위한 장치 드라이버와 데어티를 처리하기 위한 소프트 웨어를 필요로 한다.

네트워크는 노드간의 거리에 의해 타입이 결정 된다 (LAN, WAN)

네트워크 운영체제는 네트워크를 통한 파일의 공유, 다른 컴퓨터 상에 존재하는 다른 프로세스들끼리의 메시지 교환을 제공하는 운영체제이다. 분산운영체제는 그에 비해 덜 독립적인 환경을 제공한다. 다른 운영 체제들끼리 하나의 운영체제가 네트워크를 제어하는 것처럼 보이기 위하여 서로 밀접하게 통신한다.

1.ETC

           오픈소스 ( 우분투 커널 소스 )

           wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2

           오픈소스 프로젝트

http://freshmeat.net/ & http://di-strowatch.com 과 같은 사이트는 이러한 프로젝트들에 대한 포털을 제공한다.

 



Chapter1. 요약


-운영체제는 하드웨어를 관리할 뿐 아니라 응용 프로그램이 싫행되기 위한 환경을 제공하는 소프트웨어이다.

-프로그램을 실행하려면 프로그램이 주 메모리에 있어야 한다. 주메모리는 바이트나 워드의 배열로 각 워드는 자신의 주소를 가지고 있다.

-주 메모리의 확장으로 보조 저장장치를 제공하며, 다양한 저장장치들은 계층구조로 구성된다.

-단일 처리기 시스템은 하나의 처리기만을 가지며 다중 처리기 시스템은 물리메모리와 주변장치들을 공유하는 둘이상의 처리기를 갖는다.

-CPU를 최대한 활용하기 위해서 다중 프로그래밍 개념을 도입, 이것에선 한번에 여러 작업들이 메모리에 유지된다. 멀티태스킹은 다중 프로그래밍의 확장이며 CPU 스케줄링 알고리즘은 작업들을 빠르게 교환해가며 실행하므로 각 작업이 동시에 실행되는것처럼 느끼게 한다.

-이중동작모드( 커널모드와 사용자 모드)에서 특권 명령은 커널 모드에서만 실행 될수 있고 타이머는 무한 루프를 방지한다.

'Study > Book' 카테고리의 다른 글

Viruses Revealed _ David Harley  (0) 2015.03.04
Operating System Concepts_Chapter.1  (0) 2015.02.05
Operating Sysyem Concepts //컴퓨터 시스템의 구성  (0) 2015.02.03
정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23

Comment +0

Computer System Operation    ( 컴퓨터 시스템 동작 )

현대의 범용 컴퓨터 시스템은 공유 메모리에 대한 접근을 제공하는 공통버스를 통해 여러 개의 장치제어기와 하나 이상의 CPU로 구성되어 있다.

CPU와 장치제어기는 메모리 사이클을 얻기 위해 경쟁하면서 병행 실행될수 있다.

컴퓨터 구동을 위해서는 초기프로그램이 있어야하는데 바로 부트스트랩이라 한다. 부트스트랩은 보통 펌웨어(ROM)이나 EEPROM에 저장 된다. 부트스트랩 프로그램은 운영체제를 적재하는 방법 및 실행을 시작하는 방법을 알아야하기에 운영체제의 커널의 찾아 메모리에 적재해야한다. 그런다음 운영체제는 “INIT”와 같은 첫번째 프로세스를 실행하고, 어떤 Event가 발생하기를 기다린다.

 

#인터럽트         // 종류: 예외상황, 하드웨어, 시스템콜


이벤트가 발생하면 해당 위치로부터 발생한 인터럽트에 의해 신호가 보내진다.  CPU가 인터럽트 되면, CPU는 하던 일을 중단하고, 일반적으로 인터럽트를 위한 서비스 루틴이 위치한 시작주소를 가지고 있는 고정된 위치로 실행을 옮긴다. 그리고 Interupt Service Routine이 실행된다. ISR이 완료되면, CPU는 인터럽트 되었던 연산을 재개한다.

*Process Core로부터 제어권을 넘겨받은 ISR은 기존 작업 내용을 저장하고 인터럽트를 발생시킨 주변장치가 요구하는 일을 처리한후 다시 기존의 작업내용을 복원하고 인터럽트처리를 종료


인터럽트는 컴퓨터 구조의 중요한 부분이다. 인터럽트는 적절한 서비스 루틴으로 제어를 전달한다. 이러한 전달을 처리하는 간단한 방법은 인터럽트 정보를 조사하는 일반적인 루틴을 호출하는 방법이다. 이 루틴은 이어 인터럽트 고유의 핸들러를 호출한다. 그러나 대신 인터럽트 루틴에 대한 포인터들의 테이블을 이용할수 있다. 이들 위치에는 여러장치에 대한 ISR의 주소가 들어 있다.

인터럽트가 요청되면 인터럽트를 유발한 장치를 위한 인터럽트 서비스 루틴의 주소를 제공하기 위해, 이 주소의 배열, 즉 인터럽트 벡터가 인터럽트 요청과 함께 주어진 고유의 유일한 장치번호로 색인된다.

인터럽트 구조는 인터럽트된 명령의 주소를 반드시 저장해야한다. 최근의 구조들은 시스템 스택에 복귀주소를 저장한다. 인터럽트를 서비스한 후 저장되어있던 복귀 주소를 프로그램 카운터에 적재하고, 인터럽트에 의해 중단되었던 연산이 인터럽트가 발생되지 않았던 것처럼 다시 시작된다.



Storage Structure ( 저장장치 구조 )

CPU는 오직 메모리로부터 명령을 적재할수 있고 실행하고자 하는 프로그램은 모두 메모리에 저장되어야 한다. 대부분의 프로그램은 읽기,쓰기 가능한 주메모리(RAM)에서 실행시키며 ROM에서은 갱신될수 없기에 오직 정적인 프로그램만이 저장된다.

모든형태의 메모리는 워드의 배열을 제공하며, 각 워드는 고유의 주소를 가지고 있다. 상호작용은 특정메모리 주소들에 대한 일련의 적재(load)와 저장(store) 명령을 통하여 이루어진다.

적재명령주메모리로부터 CPU  내부의 레지스터로 한 워드를 옮기는 것이다. 반대로 저장명령레지스터의 내용을 주메모리로 옮긴다. 이러한 명시적인 명령외에 CPU는 실행을 위해 자동적으로 주메모리로부터 명령을 적재한다.

폰노이만 구조시스템에서 실행되는 명령-실행사이클은 먼저 메모리로부터 명령을 인출해 그 명령을 명령 레지스터에 저장한다. 이어서 명령을 해독하고, 명령은 메모리로부터 피연산자를 인출하여 내부 레지스터에 저장하도록 유발할수 있다. 피연산자에 대하 명령을 실행한 후에 결과가 메모리에 다시 저장될수있다.

메모리 장치는 단지 연속적인 메모리 주소만을 인식한다는 사실에 유의 해야한다. 그리고 우리는 단지 실행중인 프로그램에 의해 생성된 일련의 메모리 주소에만 흥미가 있다.

대부분의 컴퓨터는 주메모리의 확장으로 보조저장장치를 제공한다. 이의 요건은 대량의 데이터를 영구히 보존할수 있어야 한다는 점이다. 가장 일반적인 보조저장장치는 프로그램과 데이터 모두를 저장할수 있는 자기디스크이다. 대부분의 프로그램은 메모리에 적재될떄까지 디스크에 저장된다. 그리고 많은 프로그램들이 처리를 원천과 목적지로 디스크를 사용한다.

 

 

I/O Structure     ( 입출력 구조 )

위의 저장장치는 컴퓨터 내의 여러 형태의 입출력장치중 하나이다. 시스템의 신뢰성과 성능에 미치는 중요성 그리고 장치들의 다양한 특징 떄문에 운영체제 코드의 많은 부분들이 입출력을 관리하는데 할애된다.

범용 컴퓨터 시스템은 공통버스에 의해 연결된 여러 개의 장치제어기 CPU들로 구성된다. 각 장치제어기가 특정 타입의 장치를 담당한다. 장치제어기는 자신이 제어하는 주변장치와 자신의 로컬 버퍼 저장장치 사이의 데이터 전송을 담당한다.

통상적으로 운영체제는 각 장치 제어기마다 디바이스 드라이버를 가지는데, 이 디바이스 드라이버는 장치제어기의 동작을 이해하고 운영체제의 다른 부분들에게 장치에 대한 일관된 인터페이스를 제공한다.

입출력 연산을 시작하기 위해, 디바이스 드라이버는 장치 제어기의 적절한 레지스터에 필요한 값을 적재한다. 장치제어기는 이어 취할 동작을 결정하기 위해 이들 레지스터의 내용을 조사하며 제어기는 장치로부터 자신의 로컬 버퍼로 데이터 전송을 시작한다. 데이터의 전송이 완료되면, 장치제어기는 연산완료했음을 인터럽트를 이용하여 디바이스 드라이버에게 통보한다. 그러면 이는 제어를 운영체제에 반환하고 이떄 입력 완료인 경우에는 데이터 또는 데이터에 대한 포인터를 같이 반환할수도 있다. 다른 동작에 대해서는 디바이스 드라이버는 상태정보를 반환한다.

위의 인터럽트 구동방식의 입출력은 대량의 데이터를 전송하는 데에는 높은 오버헤드를 초래한다. 이를 위해 직접 메모리 접근(DMA)장치가 사용되는데 이는 CPU의 개입 없이 메모리로부터 자신의 버퍼장치로 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송한다.

'Study > Book' 카테고리의 다른 글

Viruses Revealed _ David Harley  (0) 2015.03.04
Operating System Concepts_Chapter.1  (0) 2015.02.05
Operating Sysyem Concepts //컴퓨터 시스템의 구성  (0) 2015.02.03
정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23

Comment +0

Security System



인증 시스템


인증 시스템은 인증을 하고자 하는 주체에 대해 식별하고, 이에 대한 인증 서비스를 제공하는 시스템이다. 인증 시스템에서는 사용자에 대한 식별과 인증을 수행하는 수단으로 크게 다음 세 가지 방식을 사용한다.

  • Something You Know
사용자가 알고 있는 정보를 이용해 인증하는 것으로 가장 기본적이고 전통적인 수단으로, 사용자의 아이디와 새으둬르르 이용한 인증이 대표적인 예이다.
이 방식은 사용자의 기억에 의존하기 떄문에 값싸고 편리하게 사용할수 있지만, 패스워드를 안전하게 관리하기는 조금 어렵다. 많은 해킹이 사용자의 패스워드를 알아내는데 집중되어 있기 떄문에 누출될 가능성이 높고 누출될 경우 공격자가 사용자의 계정을 악용하여 쉽게 시스템에 접근할수 있기 떄문이다.
  • Something You Are
생체조직을 통해 인증하는 방식으로 생체조직이 사람마다 고유하다는 특성을 이용한 것이다. 흔히 알고 있는 지문인식외에도 망막, 홍채, 손, 얼굴, 목소리등 수단이 점점 다양해지고 있다.
  • Something You Have

사용자가 소유한 인증 수단으로 인증하는 방식으로 아주 오래전부터 이용하던 방법이다. 이 방식은 다른 사람이 쉽게 도용할수 있기에 단독으로 쓰이지 않고, 일반적으로 앞의 두 방식과 함꼐 쓰인다.

  • Somewhere You Are
사용자의 위치정보를 이용한 것으로, 주로 보조 수단으로 사용된다. (사용자의 IP 등)
  • SSO (Single Sign On)
SSO는 가장 기본적인 인증 시스템으로, '모든 인증을 하나의 시스템에서' 라는 목적하에 개발 된 것이다. 즉 시스템이 몇대가 되어도 하나의 시스템에서 인증에 성공하면 다른 시스템에 대한 접근 권한도 모두 얻는 것이다.


방화벽


네트워크에서 말하는 방화벽은 보안을 높이기 위한 가장 일차적인 방법으로, 신뢰하지 않는 외부 네트워크와 신뢰하는 내부 네트워크 사이를 지나는패킷을 미리 정한 규칙에 따라 차단하거나 보내주는 기능을 하는 하드웨어나 소프트웨어이다. 즉 보안에서 방화벽은 가장 기본적인 솔루션으로, 신뢰하지 않는 외부의 무차별적 공격으로부터 내부를 보호한다는 점에서 불길을 막는 방화벽과 비슷한 의미를 지닌다.


<접근 제어>

Access Control 은 방화벽의 가장 기본적이고 중요한 기능이다. 관리자가 방화벽에 통과시킬 접근과 그렇지 않은 접근을 명시하면, 방화벽은 이를 수행한다. 이러한 접근제어는 구현방법에 따라 패킷 필터링 방식과 프록시 방식으로 나뉜다.

가장 기본적인 기능인 접근제어는 룰셋(Rule Set)을 통해서 수행되는데, 룰셋은 방화벽을 기준으로 보호하고자 하는 네트워크의 외부와 내부에 존재하는 시스템의 IP주소와 포트단위로 이루어진다.

<로깅과 감사 추적>

방화벽은 룰셋 설정과 변경, 관리자의 접근, 네트워크 트래픽의 허용 또는 차단과 관련한 사항을 로그로 남긴다. 방화벽이 이러한 로그를 남기는 이유는 사고가 났을떄 출입자를 확인하고 이에대한 추적을 하기 위해서이다.

<인증>

방화벽의 경우에는 메시지 인증, 사용자 인증, 클라이언트 인증과 같은 방법을 사용한다.

메세지 인증은 VPN(Vitual Private Network)과 같은 신뢰할수 있는 통신선을 통해 전송되는 메세지의 신뢰성을 보장한다. 사용자 인증은 패스워드를 통한 단순한 인증부터 OTP, 토큰기반 인증 등 높은 수준의 인증까지 가능하다. 마지막으로 클라이언트 인증은 모바일 사용자처럼 특수한 경우에 접속을 요구하는 호스트 자체를 정다안 접속 호스트인지 확인하는 방법이다.

<데이터의 암호화>

데이터의 암호화는 한 방화벽에서 다른 방화벽으로 데이터를 암호화해서 보내는 것을 말한다. 보통 VPN의 기능을 이용한다.


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


방화벽은 보안에서 가장 기본저인 시스템이지만, 실제로 방화벽이 차단 할수 있는 해킹 공격은 약 30%밖에 되지 않는다. 침입 탐지 시스템(IDS)은 네트워크에서 백신과 유사한 역할을 하는 것으로, 네트워크를 토한 공격을 탐지하기 위한 장비이다. 즉 방화벽이 차단하지 못한 내부의 해킹이나 악성코드의 활동을 탐지한다.

침입 탐지 시스템은 설치 위치와 목적에 따라 두가지로 나뉘는데, 호스트 기반의 침입탐지 시스템( HIDS) 와 네트워크 기반의 침입 탐지 시스템(NIDS)이다.

  • 침입 탐지 시스템의 주요 기능
-데이터의 수집
-데이터의 필터링과 축약
-침입 탐지
-책임 추적성과 대응
  • 침입 탐지 시스템의 설치 위치
-패킷이 라우터로 들어오기 전
-라우터 뒤
-방화벽 뒤
-내부 네트워크
-DMZ


침입 방지 시스템 ( IPS : Intrusion Prevention System )


방화벽은 앞서 말한바와 같이 차단율이 30%밖에 되지 않는다. 따라서 방화벽의 기능을 단순한 룰셋적용을 통한 차단에서 더 발전시킬 필요가 있었고 침입 방지 시스템(IPS)이 개발 되었다.

  • 침입 방지 시스템의 개발

방화벽은 IP주소 또는 포트에 의한 네트워크로로 이능하다. 즉 침입 탐지 시스템은 실시간 탐지는 가능하지만, 대응책을 제시해주지는 못했다.

이러한 문제들로 인하여 침입 방지 시스템이 제시 되었고 웜의 출현으로 인하여 빠르게 출시되도록 압력을 받았다.

  • 침입 방지 시스템의 동작

침입 방지 시스템은 침입 탐지 시스템과 방화벽의 조합으로 생각할수 있다. 즉 침입 탐지 기능을 수행하는 모듈이 패킷 하나하나를 검사하여 그 패턴을 분석한 뒤 정상적인 패킷이 아니면 방화벽 기능을 가진 모듈로 이를 차단한다.


VPN ( Vitual Private Network ) 


VPN은 방화벽, 침입탐지 시스템과 함현재 사용되는 가장 일반적인 보안 솔루션중 하나이다. VPN을 이해하려면 먼저 인터넬 네트워크를 이해해야한다. Internal Network는 기업 내부간 데이터 통신을 위한 네트워크이다. 기업의 내부네트워크에서 주고받는 데이터는 회사내의 업무 정보일 경우가 많고 외부에는 기밀정보이기 떄문에 일반적으로 회사 내의 데이터 통신은 인터넷과 구분된 별도의 임대회선을 사용한다. 하지만 그 가격이 매우 비싼데 VPN은 저렴한 가격에 그러한 기능을 구현할수 있게 해준다.


기타 보안 솔루션 


  • NAC(Network Access Control)

NAC 시스템은 과거 IP 관리 시스템에서 발전한 솔루션이다. 기본적인 개념은 IP 관리 시스템과 거의 같고 , IP 관리 시스템에 내트워크에 대한 통제를 강화한 것이다.

NAC의 접근 제어 및 인증 기능은 일반적으로 MAC 주소를 기반으로 수행된다. 먼저 네트워크에 접속하려는 사용자는 네트워크 접속에 사용할 시스템의 MAC 주소를 IP관리 시스템의 관리자에게 알려줘야한다. 관리자가 해당 MAC 주소를 NAC에 등록하면 사용자는 비로소 해당 네트워크를 사용할 수있는 권한을 가진다. NAC는 등록된 MAC 주소만 네트워크에 접속 할 수있게 허용 해주므로 라우터로 구분된 서브 네트워크마다 에이전트 시스템이 설치 되있어야한다.

  • 보안 운영체제 ( Secure OS )

보안 운영체제는 운영체제에 내재된 결함으로 인해 발생할 수있는 각종 해킹으로부터 보호하기 위해 보안기능이 통합된 보안 커널을 추가로 이식한 운영체제이다.

  • 백신

백신은 시스템의 바이러스를 잡기 위해 처음 만들어졌는데, 요즘의 백신 프로그램은 시스템에 항상 상주하며 바이러스나 웜이 구동하면 이를 실시간으로 제거하는 형태로 운영된다. 백신은 바이러스나 웜, 그리고 인터넷으로 유포되는 악성코드까지 탐지하고 제가할수 있다.

  • PC 방화벽

PC방화벽은 네트워크 상의 웜이나 공격자로부터 PC를 보호하기 위해서 사용하낟. PC 방화벽은 PC내부로 유입되는 패킷뿐만 아니라 나가는 패킷까지 모두 차단하고, 사용자에게 해당 네트워크 패킷의 적절성 여부를 확인한다. 그리고 윈도우의 파일 공유처럼 취약점에 잘 노추되는 서비스는 기본으로 차단하기도 한다.

  • 스팸 필터 솔루션

스팸 필터 솔루션은 메일서버 앞단에 위치하여, 프록시 메일서버로서 동작하며 SMTP프로토콜을 이용항 dos 공격이나 폭탄메일, 스팸메일을 차단한다. 또한 전송되는 메일의 바이러스 까지 체크할뿐만 아니라 내부에서 밖으로 전송되는 메일에 대한 본문 검색 기능을 통해 내부정보 유출도 방지한다. 

  • DRM ( Digital Right Management )

DRM은 문서 보안에 초점을 맞춘 기술로 문서 열람, 편집, 인쇄까지의 접근권한을 설정하여 통제한다. DRM은 특정한 형태의 문서만 통제하는 것이 아니라, MS워드나 hwp, txt, pdf 파일 등 사무에 사용하는 대부분의 파일을 통제 할수 있다.


'Study > Book' 카테고리의 다른 글

Operating System Concepts_Chapter.1  (0) 2015.02.05
Operating Sysyem Concepts //컴퓨터 시스템의 구성  (0) 2015.02.03
정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22

Comment +0

암호에 대한 이해


암호문 (Cipher Text) : 비일을 유지하기 위해 당사자 끼리만 알수 있도록 꾸민 약속 기호

암호화 (Encryption) : 평문을 암호문으로 바꾸는 것

복호화 (Decryption) : 암호문을 평문으로 바꾸는 것

암호화 알고리즘 : 암호화를 수행하거나 복호화를 수행할떄 양쪽이 서로 알고있어야 할 수단

암호화 키 : 약속한 규칙



암호의 발전사


  • 전치법

전치법은 단순히 메시지에 있는 문자의 위치를 바꾸는 방법이다.

  • 대체법

대체법은 해당 글자를 다른 글자로 대체하여 암호화 하는 방법이다.

<단일 치환>

알파벳 한글자를 다른 하나의 글자로 대체하는 방식으로 암호화를 수행 (시저 암호, 모노알파베틱 암호)

<다중 치환>

한 글자가 암호화키와의 맵핑에 따라 여러가지 다른문자로 대체되어 암호화(비즈네르, 플레이페어 암호)




대칭 암호화 방식


  • DES 알고리즘

DES는 64비트의 블록 암호화 알고리즘으로 56비트 크기의 암호화키로 암호화 된다. 따라서 생성 가능한 암호화키는 최대 256(약 7200조)가지이다. 암호화는 하나의 블록인 64비트를 L1과 R1으로 나눈뒤, R1을 암호화키로 생성한 S=BOX를 통해 f함수를 만들어 치환한 후 이 값을 L1과 논리합하고, L2와 R2의 위치를 바꾸는 두가지 기본 변환을 통해 이루어진다.

  • 트리플 DES 알고리즘

트리플 DES 알고리즘은 DES의 복호화가 가능해짐에 따라 AES가 나오기 전까지 임시로 사용한 암호화 알고리즘이다.

  • AES 일고리즘

AES 알고리즘은 DES의 암호화 강도가 점점 약해지면서 새롭게 개발된 알고리즘이다. 

  • SEED 알고리즘

SEED 알고리즘은 전자상거래, 금융, 무선통신등에서 전송되는 개인정보와 같은 중요한 정보를 보호하기 위해, 개발된 128비트 블록의 암호 알고리즘이다.

  • ARIA 알고리즘

ARIA 알고리즘은 전자정부 구현등으로 다양한 환경에 적합한 암호화 알고리즘이 필요함에 따라 개발한 국가 암호화 알고리즘이다.

  • IDEA 알고리즘

IDEA 알고리즘은128비트의 키를 사용해 64비트의 평문을  8라운드에 거쳐 64 비트의 암호문으로 만든다. 모든 연산이 16비트 단위로 이루어지도록 하여 16비트 프로세서에서 구현이 용이하며 주로 키 교환에 쓰인다.

  • RC5 알고리즘

비교적 간단한 연산으로 빠른 암호화와 복호화 기능을 제공하며, 모든 하드웨어에 적합하다. 입축력, 키 , 라운드 수가 가변인 블록 알고리즘 RC5의 속도는 DES의 약 10배이다.


비대칭 암호화 방식


AES 알고리즘이 개발되면서 대칭 암호화 방식은 현재까지 복호화가 거의 불가능한 알고리즘이라고 인정받는 수준에 이르렀다. 하지만 대칭 암호화방식에는 한가지 큰 약점이 있는데, 바로 암호화 키를 전달하는 문제이다.

즉 대칭 암호화 방식을 통해 암호화를 하면 복호화 하는 사람도 암호화키를 가지고 있어야 하므로, 암호문을 만든사람이 복호화 할 사람에게 암호화 키를 전달해야 한다. 그런데 이 과정이 리스크가 있을 수 있다는 것이 취약점이다. 그리하여 개발된 것이 비대칭 암호화 방식이다.

RSA 알고리즘

RSA 암호는 기본적인 정수론, 즉 소수를 이용한다. RSA 암호의 아이디어는중요 정보를 두개의 소수로 표현한 후, 두 소수의 곱을 힌트와 함꼐 전송해 암호로 사용하는 것이다. 


비대칭 암호화의 구조

RSA 알고리즘이 나오면서 정립된 비대칭 암호화 알고리즘은 각 개인이 공개키와 개인키를 소유하는 구조를 갖는다. 또한 각자 소유하고 있는 공개키와 개인키에는 또 하나의 특징이 있는데, 대칭키 암호화 알고리즘과 달리 메시지의암호화와 복화화가 같은 키로 이루어지지 않는 다는 것이다. 비대칭 암호화 알고리즘에서는 언제나 한쌍의 개인키와 공개키에 의해 암호화와 복호화가 이루어지기떄문에 자신의 개인키로 암호화된 메시지는 본인의 개인키로 복호화되지않고, 오직 본인의 공개키로 복호화된다.


비대칭 암호화의 기능

기밀성

대칭키 암호화 알고리즘과 마찬가지로 비대칭 암호화 알고리즘의 가장 기본적인 기능은 기밀성이다. 이떄 비대칭 암호화 알고리즘은 대칭키 암호화 알고리즘에 비해 좀더 엄밀한 기밀성을  제공한다.

부인방지

부인방지는 쉽게말해서 '발뺌에 대한 방지'라고 하수 있다. 


해시 ( Hash )


해시는 하나의 문자열을, 이를 상징하는 더 짧은 길이의 값이나 키로 변환하는 것이다. 해시는 암호화 와는 다른 개념인데, 암호가 정보를 숨기기 위한 것이라면 해시는 정보의 위변조를 확인하기 위한 방법이다. 


  • 해시의 특징

해시는 평문의 길이에 상관없이 해시 결과의 길이가 모두 같고, 평문이 아주 조금만 달라도 결과를 추측하기 불가능할 정도로 다르게 나타난다. 대표적인 해시 알고리즘인 MD5가 있다.

  • 해시의 역할

사실 해시는 데이터베이스의 탐색을 효과적으로 구현하기 위해 만든 것이다. 하지만 보안에서의 해시는 데이터 베이스에서 사용되는 해시와 기본알고리즘은같지만 추구하는 목적이 완전히 다르다. 보안에서는 해시를 무결성 확인을 위한 알고리즘으로 사용한다. 여기서 무결성이란 오직 허가된 사람들에게만 정보가 개방되고 또 그들에 의해서만 수정될수 있음을 보장한다는 의미이다. 하지만 해시가 제공하는 무결성의 개념은 데이터가 변하지 않고 똑같음을 확인하는 것으로, 데이터의 해시값은 절대 변하지 않는다.


'Study > Book' 카테고리의 다른 글

Operating Sysyem Concepts //컴퓨터 시스템의 구성  (0) 2015.02.03
정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x04  (0) 2015.01.21

Comment +0

모바일 보안


모바일 운영체제의 역사


모바일 운영체제의 변천사

1. 팜 OS

팜 OS는 PDA에 사용하기 위해 만든것으로 팜 OS 에는 주소, 달력, 메모자으 할일목록,계산기와 개인정보를 숨기기 위한 간단한 보안툴이 포함되어 있었다.

2. 윈도 CE

윈도 CE는 MS가 PDA나 모바일 장치 등에 사용하기 위해 만든 운영체제이다.  초기에는 팜 OS와 마찬가지로 PDA의 운영체제로 주로 사용되었지만 이후에는 AutoPC, 스마트폰 등의 기기에 사용되었다.

3. 블랙베리 OS

블랙베리는 RIM(Research In Motion)에 의해 만들어진 모바일 운영체제로 메시지와 E-Mail 전송과 관련한 기능과 보안에 초점을 두고 있다. 

4. iOS

iOS는 애플의 아이폰과 아이패드에 사용되는 모바일 운영체제이다. 

5. 안드로이드

안드로이드는 구글과 핸드폰 업체들이 연합하여 개발할 개방형 모바일 운영체제이다. 




모바일 운영체제의 보안과 취약점


iOS의 보안과 취약점

iOS의 보안 체계

iOS는 보안에 대한 기본적인 통제권을 애플이 소유하고 있으며 완전한 통제를 위해 4가지 시스템 보안체계

-안전한 부팅절차 확보 (모든 소프트웨어는 애플 암호화 로직의 서명된 방식에 의해 무결성확인후에 동작)

-시스템 소프트웨어 개인화 (아이튠즈를 통한 소프트웨어의 일괄적 배포)

-응용프로그램에 대한 서명 ( 모든 설치된 앱에 대해 코드 무결성 사인을 등록하게끔하고 있다.)

-샌드박스 활용 (응용프로그램이 실행될떄 일종의 가상머신 안에서 실행되는 것처럼 완전히독립실행)

iOS의 취약점

iOS는 보안 통제권을 철저하게 애플이 소유함으로써 비교적 안전한 것으로 알려져 있다. 하지만 꼭 그렇지 만은 않다. iOS의 보안상의 문제점은 대부분 탈옥 (JailBreak)한 기기에서 발생한다. 


안드로이드의 보안과 취약점

안드로이드의 보안체계

-응용프로그램 권한관리( 모든 응용프로그램은 일반 사용자 권한으로 실행) 

-응용프로그램에 대한 서명

-샌드박스 활용

안드로이드의 취약점

안드로이드는 iOS보다 훨씬 자유로운 운영체제로 사용자의 선택에 따라 보안수준을 선택할수 있다.


모바일 기기 보안의 문제점


이동성으로 인한 문제점

모바일 기기 보안의 가장 큰 문제는 모바일 기기의 이동성에 있다. 모바일 기기의 경우 공격받을 떄보다 공격에 사용될떄 문제의 소지가 더 큰데, 바로 모바일 기기의 높은 이동성 떄문이다.

블루투스의 취약점과 위협

블루투스는 여러 가지 장치들이 작은 규격과 적은 전력으로 접근하기 떄문에 높은수준의 암호화와 인증을 구현하기가 어려워 다양한 위험에 노출될수 있다.

<블루 프린팅>

블루프린팅은 블루투스 공격장치의 검색활동을 의미한다. 각 블루투스 장치는 MAC 주소와 유사하게 6바이트의 고유주소가 있다. 블루투스 장치는 장치간 종류를 식별하기 위해 서비스 발견 프로토콜 (SDP)을 보내고 받는다. 그리고 이 서비스 발견 프로토콜을 이용해 공격자는 공격이 가능한 블루투스 장치를 검색하고 모델을 확인할수 있다.

<블루 스나프)

블루투스의 취약점을 이용하여 장비의 임의 파일에 접근하는 공격이다. 공격자는 블루투스 장치끼리 인증없이 정보를 간편하게 교환하기 위해 개발된 OPP 기능을 사용하여 블루투스 장치로부터 주소록 또는 달력등의 내용을 요청해 이를열람하거나 취약한 장치의 파일에 접근 할수있다.

<블루 버그>

블루버그는 블루투스 장비간 취약한 연결 관리를 악용한 공격이다. 공격장치와 공격대상 장치를 여결하여 공격대상 장치에서 임의의 동작을 실행하는 공격이다.

'Study > Book' 카테고리의 다른 글

정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x04  (0) 2015.01.21
정보보안개론 0x03  (0) 2015.01.13

Comment +0

Malicious Code (악성 코드)


악성코드 : "제작자가 의도저으로 사용자에게 피해를 주고자 만든 모든 악의적 목적을 가진 프로그램 및 매크로, 스크립트 등 컴퓨터상에서 작동하는 모든 실행 가능한 형태"


악성코드의 분류



  • 바이러스 

-사용자 컴퓨터 내에서 사용자 몰래 프로그램이나 실행 가능한 부분을 변형해 자신 또는 자신의 변형을 복사하는 프로그램, 가장 큰 특성은 복제와 감염.

- 인터넷 또는 네트워크를 통해서 컴퓨터에서 컴퓨터로 전파되는 악성 프로그램.

- 윈도우의 취약점 또는 응용 프로그램의 취약점을 이용하거나 이메일이나 공유 폴더를 통해 전파

- 바이러스와는 달리 스스로 전파되는 특성이 있다.

  • 트로이 목마

- 바이러스나 웜처럼 컴퓨터에 직접적인 피해는 주지 않지만, 악의적인 공격자가 컴퓨터에 침투하여 사용자의 컴퓨터를 조종할수 있는 프로그램

- 고의적으로 만들어졌다는 점에서 프로그래머의 실수인 버그와는 다르다.

-자기 자신을 다른 파일에 복사하지 않는 다는 점에서 컴퓨터 바이러스와 구별된다.

  • 인터넷 악성코드

- 인가되지 않은 사이트나 크랙사이트 등에 접속할떄 감염된다.

- 최근에는 웜의 형태로 전이 되고 있다.

  • 스파이웨어

- 자신이 설치된 시스템의 정보를 원격지의 특정한 서버에 주기적으로 보내는 프로그램

-사용자가 주로 방문하는 사이트, 검색어 등 취향으 파악하기 위한것도 있지만 패스워드 등과 같은 특정 정보  를 원격지에 보내는 스파이웨어도 존재한다.



바이러스


1세대 : 원시형 바이러스

단순하게 자기복제 기능과 데이터 파괴 기능만을 가지고 있으며 주로 부트 바이러스와 파일 바이러스로 나뉜다

<부트바이러스>

부팅 단계

1단계(POST) : POST 과정은 하드웨어 자체가 시스템에 문제가 없는지 기본사항을 스스로 체크하는 과정

2단계(CMOS) : 기본 부팅 매체로 BIOS는 CMOS에서 이런 기본 설정 사항을 읽어 시스템에 적용

3단계(운영체제 위치정보로드) : 윈도우 부트서브 시스템이 실행

부트 바이러스는 바로 3단계에서 동작하며 과거에는 부트바이러스에 감염된 디스크로 운영체제를 구동시키면 바이러스가 MBR과 함께 PC 메모리에 저장되고 부팅후에 사용되는 모든 프로그램에 자신을 감염시켰다.

<파일 바이러스>

부트바이러스와는 달리 하드 디스크가 PC에서 일반화 되면서 그 대안으로 나온것으로 일반적으로 COM, EXE와 같은 실행파일과 오버레이 파일, 디바이스 드라이버 등에 감염된다.


2세대 : 암호형 바이러스

1세대 바이러스는 지체에 특정한 패턴을 가지고 있어서 백신을 만드는 프로그래머는 특정 패턴으로 이를 진단하고 바이러스를 삭제하여 바이러스를 치료했다. 그리하여 이를 우회하기 위해 암호형 바이러스를 만들어 자체적으로 코드를 암호화하는 방법을 사용하기 시작했다.

하지만 바이러스가 동작할떄 메모리에 올라오는 과정에서 암호화가 풀리기 떄문에 백신 제작자들은 이를 이용하여 메모리에 실행되어 올라온 바이러스를 거꾸로 분석하여 감염파일과 바이러스를 분석하고 치료했다.


3세대 : 은폐형 바이러스

은폐형 바이러스는 예전에 플로피 디스크를 주로 쓰던 시절 일정기간동안의 잠복기를 갖는 바이러스를 뜻한다.


4세대 : 다형성 바이러스

바이러스 파일안의 특정한 식별자를 갖고 감염여부를 판단하는데 이떄 특정 식별자를 이용하여 진단하는 기능을 우회하기 위해 사용되는 바이러스가 다형성 바이러스이다.


5세대 : 매크로 바이러스

일반적으로 컴퓨터 바이러스는 실행파일을 이용해 감염되고 전파된다. 하지만 매크로 바이러스는 비주얼베이직스크립트로 많이 제작된다.

매크로 바이러스는 엑셀 또는 워드와 같은 문서파일의 매크로 기능을 이용하므로 이러한 파일을 열떄 감염된다.




웜 ( Worm )


웜은 인터넷 또는 네트워크를 통해서 컴퓨터에서 컴퓨터로 전파되는 프로그램을 의미한다. 웜은 다른 컴퓨터의 취약점을 이용하여 스스로 전파되거나 메일로 전파되지만, 다른 파일을 감염시키는 컴퓨터와는 상당히 다르다. 컴퓨터 바이러스는 부트영역에 침입하거나 메모리에 상주 또는 정상파일에 침입하여 감염시키지만 웜은 스스로를 증식하는 것이 목적이ㅏ. 그랴서 웜은 파일자체에 이런 기능이 있거나 운영체제에 자신을 감염시킨다.

  • MASS Mailer형 웜

MASS Mailer형 웜은 자기자신을 포함하는 대량 메일 발송을 통해 확산되는 웜이다. 

주요 증상은 다음과 같다

- 메일로 전파 된다. 감염된 시스템이 많으면 SMTP 서버(TCP 25번포트)의 네트워크 트래픽이 증가

- 베이글은 웜을 실행할떄 가짜 오류 메세지를 출력한다.

- 넷스카이는 윈도우 시스템 디렉터리 밑에 CSRSS.exe를 만든다.

- 변형된 종류에 따라 시스템에 임의의 파일을 생성한다.

- 확인되지 않은 메일을 열어 볼떄 확산된다.

  • 시스템 공격형 웜

시스템 공격형 웜은 운영체제 고유의 취약점을 이용해 내부 정보를 파괴하거나, 컴퓨터를 사용할수 없는 사태로 만들거나, 혹은 외부의 공격자가 시스템 내부에 접속할수 있도록 백도어를 설치하는 웜이다.

  • 네트워크 공격형 웜

네트워크 공격형 웜은 특정 네트워크나 시스템에 대해 Syn Flooding, Smurf와 같은 서비스 거부(DOS) 공격을 수행한다. 시스템 공격형 웜과 네트워크 공격형 웜은 BOF나 FS 와 같은 시스템의 취약점을 이용하여 확산되거나 공격하는 경우가 많고, 최근에는 시스템 공격과 네트워크 공격을 함꼐 수행하는 경우도 많이 발견되고 있다.


기타 악성코드


  • 백도어와 트로이목마

백도어의 원래 의미는 운영체제나 프로그램을 생성할떄 정상적인 인증과정을 거치지 않고, 운영체제나 프로그램 등에 접근할수 있도록 만든 일종의 통로이다. 다른 말로 Administrative  Hook이나 트랩도어라고도 한다.

트로이 목마는 백도어와 마찬가지로 운영체제의 원래 인증을 우회하여 원격에서 시스템 내부에 접근할수 있게 하지만 그 설치 과정이 관리자에 의한 것이 아닌 바이러스나 웜에 의한 것이고, 접근자가 관리자가 아닌 해커인 경우이다. 트로이 목마는 사용자가 의도하지 않은 코드를 정상적인 프로그램에 삽입한 형태를 취하고 있으며, 최근에는 배고어와 트로이 목마를 구분하지 않고 백도어라고 통칭하기도 한다.

  • 인터넷 악성코드

주로 인가되지 않은 사이트 등에 접속할떄 감염된다. 예전에는 악성코드로 끝나는 경우가 많았으나, 최근에는 웜의 형태로 전이 되기도 한다.

  • 스파이 웨어 ( Spyware)

트로이 목마와 비슷한 종류로써 자신이 설치된 시스템의 정보를 원격지의 특정한 서버에 주기적으로 보내는 프로그램이다.




악성코드 탐지 및 대응책


  • 네트워크 상태 점검하기

상당수의 백도어는 외부와의 통신을 위해 서비스 포트를 생성한다. 

하지만 최근의 악성코드는 번호만으로는 추측하기가 어렵기떄문에, 악성코드가 사용하는 포트를 netstat만으로 확인하기 어려운 경우에는 CPorts와 같은 프로그램을 사용하여 서비스포트별로 사용하는 응용프로그램을 확인할수 있다.

  • 정상적인 프로세스와 비교하기

윈도우와 유닉슷 시스템 등의 정상적인 프로세스를 외워두면 비정상적인 프로세스르 식별하는데 도움이 된다.

  • 백도어의 실질적인 파일확인하기

네트워크 상태와 프로세스 분석을 통해 확인한 백도어의 실질적인 파일을 확인한다. 악성코드 파일을 확인할 떄는 total commander와 같은 툴을 사용한다. 

  • 시작프로그램과 레지스트리 확인하기

윈도우 시스템은 시작프로그램등의 시스템 운영과 관련하여 리부팅되더라도 기본설정값이 변하지 않도록 레지스트리에 여러가지 값을 기록해둔다. 백도어 역시 이러한 레지스터를 이용하는 경우가 많기 떄문에 백도어를  삭제할떄에는 레지스터에서도 이러한 내용을 확인해야 한다.

  • 백도어 제거하기

위의 단계를 통해 배도어를 확인했다면 다음 절차를 따르면 된다

-해당 프로세스를 Kill process Tree로 중지시킨다

-해당 폴더에서 확인한 파일을 삭제한다

-시작 프로그램에서 확인한 사항을 삭제한다.

'Study > Book' 카테고리의 다른 글

정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x04  (0) 2015.01.21
정보보안개론 0x03  (0) 2015.01.13
정보보안개론 0x02  (0) 2015.01.12

Comment +0

Code Security


시스템과 프로그램에 대한 이해


1. 시스템 메모리의 구조

  • 스택 영역과 힙 영역

어떤 프로그램을 동작시키면 메모리에 프로그램이 동작하기 위한 가상의 메모리 공간이 생성된다. 이떄 상위 메모리는 스택(Stack) 이라는 메모리 공간이 형성되고, 하위메모리에는 힙(Heap)이 생성된다.

스택 영역은 프로그램 로직이 동작하기 위한 인자(Argument)와 프로세스 상태를 저장하는데 사용되고, 힙 영역은 프로그램이 동작할떄 필요한 데이터 정보를 임시로 저장하는데 사용된다.

스택 영역은 레지스터의 임시 저장 장소, 서브루틴 사용시  복귀주소 저장, 서브루틴에 인자전달 등에 사용된다. 스택은 메모리의 상위주소에서 하위주소로 방향으로 사용하며 후입선출(LIFO) 원칙에 따른다.

힙 영역은 프로그램이 실행될 떄까지 알수 없는 가변적인 양의 데이터를 저장하기 위해 프로그램의 프로세스가 사용할 수 있도록 미리 예약되어 있는 메인 메모리의 영역으로, 프로그램들에 의해 할당되었다가 회수되는 작용이 되풀이 된다. 힙의 기억 장소는 대개 포인터 변수를 통해 동적으로 할당받고 돌려준다.


  • 레지스터
CPU 연산과 어셈블리어의 동작을 이해하기 위해 CPU의 임시 메모리인 레지스터에 대해 살펴보자 주로 많이 사용되는 인텔의 80x86 CPU는 프로그램의 동작을 위해 다음과 같은 레지스터를 제공한다.


레지스터의 명칭은 ESP의 경우 16비트의 레지스터 SP에 E를 추가한 거시다. 프로세서가 32비트로 커지면서 Extended라는 의미를 표현하기 위해 E를 붙인 것일뿐 SP와 기본적인 역할은 동일하다.


2. 프로그램의 실행구조
---생략---

3. 셸 (Shell)
셸은 운영체제를 둘러싸고 있으면서 입력받는 명령어를 실행시키는 명령어 해석기를 말한다. 셸의 종류는 크게 본셸, 콘셸,C셸로 나누어진다.

셸의 역할은 다음과 같다.
-자체의 내장 명령어 제공
-입력/출력/오류의 리다이렉션 기능 제공
-wildcard 기능 제공
-파이프라인 기능 제공
-조건부/ 무조건부 명령열(Sequences) 작성 기능 제공
-서브셸 생성 기능 제공
-후면처리 (Background Processing) 기능
-셸 스크립트(Shell Script, 프로그램) 자것ㅇ 가능

4. 프로세스 권한과 SetUID

SetUID는 유닉스 시스템을 해킹하는데 매우 중요한 요소로 SetUID 파일은 누가 실행하든지 관계없이 해당 파일이 실행될떄 파일 소유자의 권한을 갖는다는 특징이 있다.


Buffer Over Flow Attack


BOF의 개념은 C 언어의 데이터 무결성 문제로 알려졌으며, 초기에는 프로그램상의 문제로 인식되었으나 현재에는 다양한 BOF 공격 등으로 인하여 문제의 심각성이 인식되기 시작했다.

1. BOF 공격의 개념

BOF의 가장 기본적인 개념은 데이터의 형태와 길이에 대한 불명확한 정의로 인한 문제점 중에서 '길이에 대한 불명확한 정의'를 악용한 덮어쓰기로 인해 발생한다. 즉 정상적인 경우에는 사용되지 않아야 할 주소 공간, 원래는 경계선 관리가 적절하게 수행되어 덮어쓸 수 없는 부분에 해커가 임의의 코드를 덮어 쓰는 것을 의미한다.

불명확한 경계에 대한 문제는 여러가지 상황에서 다양한 형태로 일어나며 코드보안에서도 마찬가지이다. BOF에 취약한 함수와 그렇지 않은 함수가 있는데, 프로그래머가 취약한 특정 함수를 사용해야 공격이 가능하다. 그러므로 취약한 함수를 사용하지 않는 프로그래머만 있으면 BOF 공격이 훨씬 어려워 워 진다.

2. BOF 공격의 원리

bugfile.c

------------------------

int main(int argc,char *argv[])

{

char buffer[10];

strcpy(buffer,argv[1]);

printf("%s\n",&buffer);

}

------------------------

page. 265


3. BOF 공격에 대한 대응책

BOF 공격에 안전한 프로그램을 만드는 방법은 BOF에 취약한 함수를 사용하지 않거나 최신 운영체제를 사용하는 방법 등이 있다.


-BOF에 취약한 함수를 사용하지 않는다.

strcpy(char *dest, const char *src);

strcat(char *dest, const char *src);

getwd(char *buf);

gets(char *s);

fscanf(FILE *stream, const char *format,...);

scanf(const char *format,...);

realpath(char *path, char resolved_path[]);

sprintf(char *str. const char *format);

-최신 운영체제를 사용한다.

운영체제는 발전하면서 Non-Executable Stack, Stack Guard, Stack Shield 와 같이 운영체제 내에서 해커의 공격 코드가 실행되지 않도록 하는 여러 가지 장치가 있다.



Format String Attack


1. FS 공격의 개념

FS 공격은 데이터의 형태와 길이에 대한 불명확한 정의로 인한 문제점 중 '데이터 형태에 대한 불명확한 정의'로 인한 것이다. FS 라는 용어 자체는 낯설지 모르겠지만, C 프로그래밍을 배웠다면 이미 여러번 사용해본 공격이다.


Format String과 이것을 사용하는 printf()함수의 취약점을 이용하여 RET의 위치에 쉘코드의 주소를 write 하여 쉘을 획득 하는 공격.


Bufer Overflow Atack과 비교

ü RET의 위치 주소를 정확히 알아야 함 (BOF는 bufer와 RET사이의 거리만알면 됨)

ü Overflow 없이 RET에 바로 write할 수 있으므로 스택 가드나 canary를 우회 함


2. FS 공격의 원리

취약한 포맷 스트링

FS 공격은 포맷 스트링인 %s의 값을 바꾸는 것이다. 즉 명확하게 정의 되었던 데이터 형태를 불명확하게 바꾸는 것이다.


printf()는 format string이후에 해당 format string에 해당하는 인자가 없으면 Stack상에서 printf()가 호출된 시점에서 stack top위치의 내용부터 순서대로 인자로 여김


main()

{

char *buffer = "wishfree\n%x\n";

printf(buffer);

}

실헹시 wishfree 문자열 이외에 wishfree 문자열이 저장된 다음의 메모리에 존재하는 값또한 출력한다.


-별도 공부 필요


'Study > Book' 카테고리의 다른 글

정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x04  (0) 2015.01.21
정보보안개론 0x03  (0) 2015.01.13
정보보안개론 0x02  (0) 2015.01.12
정보보안개론 0x01  (2) 2015.01.11

Comment +0

Web Security


'웹' 이라는 것은 하나의 시스템과 다른 하나의 시스템 간의 통신을 위한 프로토콜을 만들어 사용했다. 하지만 회사마다 서로 다른 통신프로토콜로 인하여 다른회사와는 통신을 할수가 없었다. 그리고 이를 해결하기 위해 나의 프로토콜을 해석한 후 다른 프로토콜로 바꾸어 다른 시스템으로 전송해주는 장치인 GateWay를 개발했다.

'웹'의 정식명칭 명칭은 World Wide Web이다. 현재 웹문서로 가장 흔히 쓰이는 HTML(Hyper Text Markup Language)은 Hyper Text를 효과적으로 전달하기 위한 스크립트 언어이다.


HTTP에 대한 이해        //Hyper Text Transfer Protocol


웹에서는 FTP, Telnet, HTTP, SMTP, POP등  여러 프로토콜이 쓰이며, 그 중에서 HTTP이 가장 흔히 쓰인다. HTTP를 이용하면 사용자는 다양한 응용 프로그램에 접근할수가 있다.


<HTTP Protocol>

1.먼저 클라이언트가 웹브라우저를 이용해 서버에 연결을 요청하면, 연결 요청을 받은 서버는 클라이언트에 대해 서비스를 준비한다. 서버가 준비상태가 된다.

2.클라이언트는 읽고자 하는 문서를 서버에 요청한다.

3.서버는 웹 문서중 클라이언트가 요청한 문서를 클라이언트에 전송한다.

4.연결을 끊는다.


하지만 이러한 Connect 과정을 반복해서 거쳐야 했기 떄문에 무척 비효율적이고 오래 사용되지 못했다. 하지만 1.0 버전 부터는 한번의 Connect 후에 Request와 Response를 반복할수 있게 되었다.


<HTTP Request>

HTTP Request는 웹서버에 데이터를 요청하거나 전송할때 보내는 패킷이다.

GET 방식

GET방식은 가장 일반적인 HTTP Request 형태로 웹 브라우저에 다음과 같은 요청 데이터에 대한 인수를 URL 을 통해 전송한다.    www.wishfree.or.kr/list.php?page=1&search=test

GET방식에서는 각 이름과 값을 &로 결합하며 글자 수를 255자로 제한한다. 하지만 GET 방식은 데이터가 주소 입력란에 표시되기때문에, 최소한의 보안도 유지되지 않는, 보안에 매우 취약한 방식이다.


POST 방식

POST 방식은 URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터를 전송하기 떄문에 GET방식과 같은 &과 같은 부분이 존재하지 않는다. 하지만 상댖거으로 처리속도가 느리지만 URL을 통해 인수값을 전달하지 않기에 다른 이가 링크를 통해 해당 페이지를 볼수 없다는 면에서 최소한의 보안성은 갖추고 있다.


<HTTP Response>

HTTP Response는 클라이언트의 HTTP Request에 대한 응답 패킷이다.


웹 서비스에 대한 이해


웹 언어는 HTML, JavaScript, Visual Basic Script 와 같이 정적인 서비스를 제공하는 언어와 ASP, JSP, PHP 등과 같이 동적인 서비스를 제공하는 언어로 나눌 수 있다.


<HTML>

HTML은 가장 단순한 형태의 웹언어이다. 웹 서버에 HTML 문서를 저장하고 있다가 클라이언트가 특정 HTML 페이지를 요청하면 해당 HTML 문서를 클라이언트로 전송한다. 그러면 클라이언트는 이 웹페이지를 해석하여 웹 브라우저에 표현해주는데 이런 웹페이지를 정적인(Static) 웹 페이지라 한다.


<SSS>

기능상 한계가 많은 정적인 웹페이지 대신 좀더 동적인(Dynamic) 웹 페이지를 제공 할수 있는 PHP, ASP, JSP 와 같은 언어가 개발이 되었다.

ASP나 JSP와 같은 동적인 페이지를 제공하는 스크립트를 SSS(Server Side Script)라 한다. ASP의 경우 DLL이나 OCX 같은 파일을 이용하고 JSP의 경우 서블릿을 이용해 요청을 처리한다.


<CSS>

웹서비스에 이용되는 스크립트에는 자바스크립트나 비베스크립트 등이 있다. 이들은 서버가 아닌 클라이언트 측의 웹 브라우저에 의해 해석되고 적용되는데, 이를 CSS(Client Side Script>라 한다.

CSS는 서버가 아닌 웹 브라우저에서 해석되어 화면에 적용되기 떄문에 웹서버의 부담을 줄여주면서도 다양한 기능을 수행할수가 있다.


웹 해킹에 대한 이해


웹 해킹은 웹사이트의 구조와 동작 원리를 이해하는 것에서부터 시작한다. 기본적으로 사용되는 것이 웹스캔, 웹프록시를 이용한 패킷분석 구글해킹 등인데, 이는 웹해킹에 소요되는 대부분의 시간을 차지할 만큼 중요한 과정이다.


<웹 취약저 스캐너를 통한 정보 수집>

웹 취약점 스캐너를 통한 정보수집은 빠른 시간내에 다양한 접속 시도를 수행할수 있다는 장점이 있지만, 웹구조를 파악하고 취약점을 수집하기가 쉽지 않다는 단점이 있다. 각 페이지의 링크정보를 따라가는 것이므로 웹페이지에서 링크로 제공하지 않는 페이지는 구조 분석이 어렵다.


<웹 프록시를 통한 취약점 분석>

웹의 구조를 파악하거나 취약점을 점검할떄, 혹은 웹 해킹을 할떄는 웹 프록시라는 툴을 사용한다. 웹 프록시클라이언트에 설치되며 클라이언트의 통제를 받는다. 즉 클라이언트가 웹 서버와 웹 브라우저 간에 전달되는 모든 HTT[ 패킷을 웹 프록시를 통해서 확인하면서 수정하는 것이 가능하다.


<구글 해킹을 통한 정보 수집>

정보를 수집하기위해서는 검색 엔진을 이용하면 유용하다. 그 중에서도 구글은 다양한 고급 검색기능을 지원하기에 많은 정보를 접할수 있다.

site: 특정 사이트만을 집중적으로 선정해서 검색할떄 유용하다. 아래 검색어는 naver.com 도메인이 있는 페이지에서 admin 문자열을 찾으라는 의미이다.    site:naver.com admin

filetype : 특정 파일 유형에 대해 검색할떄 사용한다.    filetype:txt passwd

intitle : 페이지의 제목에 검색하는 문자가 들어있는 사이트를 찾는 기능으로 디렉터리 리스팅 취약점이 존재하는 사이트를 쉽게 찾을수 있기 떄문에 정보를 수집할떄 아주 유용하다. 아래 검색어를 입력하면 수많은 사이트의 디렉터리 리스팅을 확인할수 있다.    intitleindex.of admin

검색엔진의 검색을 피하는 방법 : 웹서버의 홈 디렉터리에 robots.txt 파일을 만들어 검색 할 수 없게 만드는 것이다.



웹의 주요 취약점 10가지


1.명령 삽입 취약점 

클라이언트의 요청을처리하기 위해 전송받는 인수에는 특정명령을 실행할수 있는 코드가 포함되는 경우가 있다. 명령 삽입공격은 웹서버와 연동되는 데이터 베이스에 임의의 SQL 명령을 실행하여 데이터를 수집한다.

데이터베이스에 SQL 삽입공격을 위해서는 인증이 필요하다 이를 위해서는 어떤 수단을 SQL의 결과값에 NULL이 나오지 않게, 즉 출력값이 사용자 ID가 되도록하면 로그인에 성공할수있다. 이를 위해서 자주 사용되는 방법으로는 SQL문에서 WHERE로 입력되는 조건문을 항상 참으로 만드는 방법이 있다. 바로 조건값에 'or' '='을 입력하는 것이다. 

ID : 'or''='                SELECT user_id FROM member WHERE

Passwd : 'or''='        user_id = ''or''='' AND password = ''or ''=''


SQL 삽입공격에 사용되는 SQL문은 무엇이라도 SQL 삽입 공격에 사용될수 있다.


2. XSS 취약점

XSS(Cross Site Scripting)은 공격자에 의해 작성된 스크립트가 다른 사용자에게 전달되는 것이다.

주로 임의의 XSS 취약점이 존재하는 서버에 XSS코드를 작성하여 저장한다. 일반적으로 공격자는 임의의 사용자 또는 특정인이 이용하는 게시판을 이용한다.


3. 취약한 인증 및 세션 관리

취약한패스워드 설정 :취약한 인증의 가장 기본적인 문제점은 패스워드 설정

사용자 측 데이터를 이용한 인증 : 세션 인증 값을 정상적으로 받은 후 UserNo값만 변경함으로써 다른 계정으로 로그인 한 것처럼 웹서비스를 이용할수 있게 된다.


4. 직접 객체 참조

직접객체 참조는 파일, 디렉터리, 데이터베이스 키와 같이 내부적ㅇ로 구현된 객체에 대한 참조가 노출될떄 발생

  • 디렉터리 검색

디렉터리 탐색은 웰브라우저에서 확인 가능한 경로의 상위로 탐색하여 특정시스템 파일을 다운로드하는 공격방법이다.

예를 들어 게시판등에서 첨부파일을 다운받을때 다음과 같이 down.jsp 형태의 SSS를 주로 사용한다.

www.kali-km.com/board/down.jsp?filename=사업계획.hwp

위와 같이 정상적인 다운로드 페이지를 이용해 다른 파일의 다운로드를 요청하면 어떻게 될까?

www.kali-km.com/board/down.jsp?filename=..//list.jsp

이와 같이 공격자가 상위로 올라가 특정 파일을 열람 할 수 있으므로 ..와 /문자를 필터링해야한다.


  • 파일업로드 제한부재

클라이언트에서 서버측으로 임의의 파일을 보낼수 있는 취약점은 웹서버가 가지는 가장 치명적인 취약점이다. 공격자는 웹서버에 악의적이 파일을 전송하므로 통해 웹해킹의 최종목표인 리버스텔넷과 같은 웹서버의 통제권을 얻기위해 반드시 성공해야하는 작업이다. 이떄 가장 일반적인 형태는 게시판을 이용하며 첨부파일로 업로드 하는 악성코드는 대부분 웹쉘이다.


  • 리버스텔넷(Reverse Telnet)

리버스텔넷 기술은 웹해킹을 통해 시스템의 권한을 획득한 후 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할수 있는 쉘을 획득하기 위한 방법으로 방화벽이 존재하는 시스템을 공격할떄 자주 사용된다.

심화된 공격을 하기위해서는 텔넷과 유사한 접근권한을 획득하는 것이 매우 중요한데, 이떄 리버스 텔넷이 유용하다.

방화벽에서 인바운드정책(외부에서 방화벽 내부로 들어오는 패킷에 대한 정책)은 80번 포트외에 필요한 포트만 빼고 다 막아 놓지만 아웃바운드정책(내부에서 욉로 나갈떄에 대한 정책)은 별다른 필터링을 수행하지 않는 경우가 많다.

웹서버에서 공격자 PC로 텔넷 연결을 허용하고 있는 상황을 공격자가 이용하는 것이 바로 리버스 텔넷이다. 하지만 그전에 웹서버에서 권한을 획득해야하며, 이를 위해 보통 파일업로드 공격을 이용하며 웹 쉘의 업로드를 통해 시스템에 명령을 입력할수 있는 명령창을 얻는 것이다. 리버스 텔넷을 위한 툴을 업로드하는데 보통 nc(netcat)라는 툴을 많이 사용한다.

리버스 텔넷을 막기위해서는 파일업로드를 먼저 막아야한다. 그리고 exe나 com 같은 실행파일의 업로드도 막아야한다. 또한 외부에서 내부로의 접속뿐만 아니라 내부에서 외부로의 불필요한 접속도 방화벽으로 막는 것이 좋다.


5. CSRF 취약점 (Cross Site Request Forgery)

CSRF는 특정 사용자를 대상으로 하지 않고, 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와는 무관하게 공격자가 위도한 행위를 하게 만드는 공격이다. CSRF는 기본적으로는 XSS 공격과 매우 유사하며 이의 발전된 형태라 보기도한다.

XSS는 악성스크립트가 클라이언트에서 실행되는데 반해, CSRF 공격은 사용자가 악성스크립트를 서버에 요청한다는 차이가 있다.


6. 보안 설정 취약점

  • 디렉터리 리스팅

디렉터리 리스팅은 웹브라우저에서 웹서버의 특정 디렉터리를 열면 그 디렉터리에 있는 파일과 목록이 모두 나열되는 것을 의미한다. 취약점으로 인한 경우에는 www.kali-km.com/%3f.jsp 와 같이 간단한 공격 코드로도 디렉터리 리스팅을 수행할수 있으므로 패치를 적용해야 한다.


  • 벡업 및 임시 파일 존재

개발자들이 웹사이트를 개발하고 난 훙 웹서버에 백업 파일이나 임시 파일들을 삭제하지 않은채 방치하는 경우가 종종 있다. 흔히 login.asp 파일이 웹서버의 편집 프로그램이 자동으로 생성하는 login.asp.bak과 같은 형태로 남는 경우를 말한다.


  • 주석 관리 미흡

일반적으로 프로그램의 주석은 개발자만 볼수 있으나, 웹 어플리케이션의 경우에는 웹 프록시를 통해 이용자도 볼수 있다. 


7. 취약한 정보 저장 방식

최근 개인정보 유출사건이 많아지는 가운데 중요한 데이터를 보호하기 위하여 암호화 로직을 사용하고, 데이터 베이스 테이블 단위에서 암호화를 수행 하여야 한다.


8. URL 접근 제한 실패

URL 접근제한 실패는 관리자 페이지가 추측하기 쉬운 URL을 가지거나 인증이 필요한 페이지에 대한 인증 미처리로 인해 인증을 우회하여 접속할수 있는 취약점이다. 

원래는 관리자로 로그인해야 관리자용 웹페이지에 접속할수 있는 것인데, 로그인 하지 않고도 특저 작업이 가능한 경우가 발생한다.

인증 우회를 막기위해서는 웹에 존재하는 중요 페이지에 세션값(쿠키)을 확인하도록 검증 로직을 입력해둬야 한다.


9. 인증 시 비암호화 채널 사용

인터넷 뱅킹과 같이 보안성이 중요한 시스템에서는 웹 트래픽을 암호화한다. 이떄 사용되는 암호화 알고리즘이 약하거나 암호화 하는 구조에 문제가 있다면 웹 트래픽은 복호화 되거나 위변조 될수 있다.


10. 부적절한 오류 처리

웹페이지의 경우 자동으로 다른페이지로 리다이렉트 하거나 포워드하는 경우가 종종 발생한다. 이떄 신뢰되지 않은 데이터를 사용하는 경우가 있는데, 적절한 확인절차가 없으면 공격자는 피해자를 피싱사이트나 악의적인 사이트로 리다이렉트 할 수 있고, 권한 없는 페이지의 접근을 위해 사용할수도 있다.


웹의 취약점 보완


1. 특수문자 필터링

웹의 취약점은 다양하지만 대부분 몇가지 보완을 통해 막을수가 있다. 가장 대표적인 것이 특수문자 필터링이다. 웹 해킹의 가장 기본적인 형태 중 하나가 인수 조작인데 인수 조작은 예외적인 실행을 유발 시키기 위해 일반적으로 특수문자를 포함하게 되어 있다. 


2. 서버 측 통제 작용

파일 업로드 취약점이나 특수문자 필터링을 수행할떄 주의할점은 자바스크립트와 같은 CSS 기반의 언어로 필터링을 하면 안된다는 것이다. CSS 기반의 언어는 웹프록시를 통해 웹브라우저에 전달되기 떄문에 웹프록시를 통해 전달되는 과정에서 변조될 가능성이 있다.

따라서 CSS 기반의 언어로 필터링 할 경우 공격자가 필터링 로직만 파악하면 쉽게 필터링이 무력화 된다. 즉 필터링 로직은 ASP, JSP 등과같은 SSS로 필터링을 수행해야 한다.


3. 지속적인 세션 관리

URL 접근 제한 실패를 막기 위해서는 기본적으로 모든 웹페이지에 세션에 대한 인증을 수행해야 한다. 모든 웹페이지에 대해 일관성 있는 인증 로직을 적요하려면 기업단위에서 또는 웹 사이트 단위에서 세션 인증로직을 표준화 하고, 모든 웹페이지를 개발할떄 해당 표준을 준수하도록 해야한다.

'Study > Book' 카테고리의 다른 글

정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x04  (0) 2015.01.21
정보보안개론 0x03  (0) 2015.01.13
정보보안개론 0x02  (0) 2015.01.12
정보보안개론 0x01  (2) 2015.01.11

Comment +0

Network Security


OSI 7 Layer (Open System Interconnection)


  • 물리계층                    //시스템 간의 연결을 의미

실제 장치들을 연결하기 위한 전기적, 물리적 세부사항을 정의한 계층

물리 계층은 간단하지만 네트워크에서 무척 중요하다. 네트워크가 정상적으로 동작하지 않을때 가장먼저 랜케이블이나 컴퓨터나 마우스가 제대로 꼽혀 있는지 확인하는 것 또한 OSI 계층의 가장 낮은 부분부터 확인해야한다는 것을 우리는 이미 알고있다.


  • 데이터 링크 계층

Point to Point간 신뢰성 있는 전송을 보장하기 위한 계층으로, CRC 기반의 오류 제어 및 흐름제어가 필요하다.

상호 통신을 위해 MAC주소를 할당 받는다. 대표적인 장비로는 스위치가 존재하며, MAC 계층에서 동작하는 대표적인 프로토콜로는 이더넷이 있다. 


스위치(랜 공유기)가 존재할경우 두대의 컴퓨터를 1,2번 포트에 각각 꽂을 경우

1번포트 : 1번 PC의 MAC 주소

2번포트 : 2번 PC의 MAC 주소

이렇게 메모리 정보가 변경이 된다. 아직 2계층에서는 IP의 주소가 나타나지 않는다.


  • 네트워크 계층

3계층인 네트워크 계층은 여러개의 노드를 거칠때마다 경로를 찾아주는 역할을 하는 계층으로, 다양한 길이의 데이터를 네트워크를 통해 전달하며 그 과정에서 라우팅, 흐름제어, 세그멘테이션, 오류제어들을 수행한다.

MAC 주소를 가지고 ARP 프로토콜을 이용하여 해당 IP를 가진 시스템의 MAC 주소를 브로드캐스트를 통하여 알아내기 위한 작업을 한다. 그 후 패킷은 목적지에 도달할때까지 라우터를 만날 때마다 2계층의 정보를 갈아치우는 작업을 한다.


  • 전송 계층
End to end의 사용자 들이 신뢰성 있는 데이터를 주고 받을 수 있도록 함으로써, 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경쓰지 않도록 해준다. 

전송 프로토콜 로는 TCP가 있다. TCP도 주소를 가지고 있으며 이를 Port라 한다. MAC 주소가 네트워크 카드의 고유 식별자 이고 ip가 시스템의 주소라면 포트는 시스템에 도착한 후 패킷이 찾아갈 응용 프로그램과 통하는 통로 번호라 할 수 있다.

TCP는 연결지향형 프로토콜로, 수신측이 데이터를 흘려버리지 않도록 데이터 흐름 제어 및 전송중 에러가 발생할 경우 자동으로 재전송하는 에러 제어 기능을 한다. 그리고 이를 통해 데이터의 확실한 전송을 보장한다.

//TCP 3-Way HandShake


  • 세션 계층
엉 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 세션 계층은 duplex 방식, half-duplex방식, full-duplex 방식의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정들을 수행한다. 또한 TCP/IP 세션을 만들고 없애는 책임을 진다.

  • 표현 계층
표현계층은 코드간의 번역을 담당한다. 즉 사용자 시스템에서 데이터의 구조를 하나의 통일된 형식으로 표현함으로써, 응용 계층의 데이터 형식 차이로 인한 부담을 덜어준다.

  • 응용 프로그램 계층
사용자나 응용 프로그램 사이에 데이터의 교환이 가능하게 하는 계층으로, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.






서비스 거부(DoS)공격

서비스 거부공격(DoS : Denial Of Service)은 다른 해킹에 비해 비교적 간단한데, 쉽게 얘기하면 일종의 훼방이라고 볼수 있다.


  • 취약점 공격형
취약점 공격은 공격 대상이 특정 형태의 오류가 있는 네트워크 패킷의 처리 로직에 문제가 있을 때, 그 문제를 이용하여 공격 대상의 오동작을 유발시키는 형태의 공격이다.

<Boink, Bonk, TearDrop 공격>
이 공격들은 오류 제어 로직을 악용하여 시스템의 자원을 고갈시키는 공격이다. TCP 프로토콜은 데이터 전달의 유효성이나 효율성을 위해 시퀀스 넘버 기반의 오류 제어 방식을 사용하여 특정 연결의 유효성을 제어한다.
TCP는 신뢰성 있는 연결을 위해 다음의 기능을 제공한다.
-패킷의 순서가 올바른지 확인
-중간에 손실된 패킷은 없는지 확인
-손실된 패킷의 재전송 요구
위 공격들은 이를 이용한 공격으로 시스템의 패킷 재전송과 재조합에 과부하가 걸리도록 시퀀스넘버를 속인다.


<Land 공격>
패킷을 전송할떄 출발지 IP와 목적지 IP 주소값을 똑같이 만들어서 공격대상에게 보내는 것이다. 물론 이때 조작된 IP 주소값은 공격대상의 IP 주소여야 한다. 

이러한 패킷으 공격대상에 보내면 시스템은 공격자가 처음보낸 SYN패킷의 출발지 주소값을 참조하여 그 응답 패킷의 목적지 주소를 SYN 패킷의 출발지 주소로 설정하여 보내게 된다. 그런데 출발지 주소는 공격대상의 주소값이므로 패킷은 네트워크 밖으로 나가지않고 자신에게 되돌아온다. 결국 이 공격법은 SYN Flooding 처럼 동시 사용자 수를 점유해 버리고 CPU 부하를 올려서 시스템이 지치도록 만든다.

  • 자원고갈 공격형
<Ping of Death 공격>
Ping of Death 공격은 네트워크 연결상태를 점검하기 위한 ping 명령을 보낼때, 패킷을 최대한 길게 해 공격대상에게 보내면 패킷은 지나가는 네트워크의 특성에 따라 수백개에서 수천개의 패킷으로 나뉘어지게 된다. 따라서 결과적으로 공격 대상 시스템은 대량의 작은 패킷을 수신하게 되고, 네트워크는 마비 된다.

이를 예방하려면 ping이 내부 네트워크에 들어오지 못하도록 방화벽에서 ping 이 사용하는 프로토콜인 ICMP를 차단하는 방법을 사용한다.

<SYN Flooding 공격>
네트워크에서 서비스를 제공하는 시스템에는 동시 사용자 수의 제한이 있다. 이에 SYN Flooding 공격은 존재하지 않는 클라이언트가 서버별로 한정되어 있는 접속 가능한 공간에 접속한 것처럼 속여, 다른 사용자가 서버의 서비스를 제공받지 못하게 하는 것이다.

앞서 TCP에 대한 최초 연결시 클라이언트가 SYN패킷을 보내고 이를 받은 서버는 SYN+ACK 패킷을 보낸다 설명하였다. 마지막으로 클라이언트가 서버에 다시 ACK 패킷을 보내야 연결이 되는데, 보내지 않는다면 어떻게 될까? 
서버는 클라이언트가 ACK 패킷을 보내올떄까지 SYN Received 상태로 일정시간을 기다려야 하고, 그동안 공격자는 가상의 클라이언트로 위조한 SYN 패킷을 수없이 만들어 서버에 보냄으로 서버의 가용 동시 접속자 수를 모두 SYN Received 상태로 만들 수 있다. 이것이 SYN Flooding 공격의 기본 원리이다.
                                           //실제 동시 접속자수가 급증하여 접속자 폭주로도 마비가 되는 경우도 존재

대응책으로는 SYN Received의 대기 시간을 줄이는 방법으로 쉽게 해결 할 수 있다. 침입 방지 시스템(IPS)과 같은 보안 시스템을 통해서도 이러한 공격을 쉽게 차단할수 있다.


<HTTP GET Flooding 공격>

피공격 시스템에 TCP 3-Way HandShake 과정을 통해 정상적인 접속을 한뒤, 특정한 페이지를 HTTP의 GET Method를 통해 무한대로 실행하는 것이다.

공격 패킷을 수신하는 웹서버는 정상적인 TCP 세션과 함께 정상적으로 보이는 HTTP Get 요청을 지속적으로 요청하게 되므로, 시스템에 과부하가 걸린다.


<HTTP CC 공격>

HTTP 1.1 버전의 CC(Cache-Control) 헤더옵션은 자주 변경되는 데이터에 대해 새롭게 HTTP에 요청 및 응답을 요구하기 위하여 캐시 기능을 사용하지 않게 할수 있다. 서비스 거부 공격 기법에 이를 응용하기 위해 'Cache-Contril: no-store,must-revalidate' 옵션을 사용하면웹서버는 캐시를 사용하지 않고 응답해야 하므로 웹서비스의 부하가 증가하게 된다.


<동적 HTTP Request Flooding 공격>

HTTP Get Flooding 공격이나 HTTP CC 공격은 일반적으로 징정된 웹페이지를 지속적으로 요청하는 서비스 거부 공격이다. 그러나 이 둘은 방화벽을 통해 특징적인 HTTP 요청 패턴을 방어 할수 있다. 동적 HTTP Request Flooding 은 이러한 차단 기법을 우회하기 우해 지속적으로 요청 페이지를 변경하여 웹페이지를 요청하는 기법이다.


<Smurf 공격>

스머프 공격은 ICMP 패킷과 네트워크에 존재하는 임의의 시스템들을 이용하여 패킷을 확장시켜서 서비스 거부 공격을 수행하는 방법으로, 네트워크를 공격할 때 많이 사용된다.

이를 더 자세히 이해하려면 다이렉트 브로드캐스트(Direct Broadcast)를 알아야한다. 흔히 브로드캐스트는 목적지 ip 주소를 가지고 네트워크의 임의의 시스템에 패킷을 보내는 것이다. 이는 기본적으로 3계층장비, 즉 라우터를 넘어가지 못한다.

하지만 라우터를 넘어가야 하는 경우가 있는데 이런 경우 해당 네트워크에 있는 클아이언트의 IP주소 부분에 255를 채워서 원격지의 네트워크에 브로드캐스트 할수 있다. 이를 다이렉트 브로드 캐스트라 한다.

스머프 공격은 다이렉트 브로드 캐스트를 악용한 것으로 원격지의 네트워크에 다이렉트 브로드캐스트를 하면 해당 네트워크는 패킷의 위조된 시작 IP주소로 Reply를 보낸다. 결국 공격대상은 수많은 Reply를 받게 되고 Ping of Death 공격처럼 많은 패킷이 시스템을 과부하 상태로 만든다.

대응책으로는 라우터에서 다이렉트 브로드캐스트를 막는것이다.


<Mail Bomb 공격>

흔히 폭탄 메일 이라고 하는데, 스팸 메일과 같은 종류이다. 메일 서버는 각 사용자에게 일정한 양의 디스크 공간을 할당하는데, 메일이 폭주하여 디스크 공간을 가득 채우면 정작 받아야 하는 메일을 받을 수 없기 때문이다. 이런 이유로 스팸 메일은 Dos공격으로 분류된다.




분산서비스 거부 공격 ( DDoS : Distributed Denial Of Service)


DDOS 공격은 공격자가 한 지점에서 서비스 거부 공격을 수행하는 DOS 공격의 형태를 넘어 광범위한 네트워크를 이용하여 다수의 공격 지점에서 동시에 한곳을 공격하도록 하는 형태의 서비스 거부 공격이다.


  • 과거
일종의 자동화된 툴을 이용했으며, 광대한 공격 범위를 위해 최종 공격 대상 이외에도 공격을 증폭시켜주는 중간자의 역할이 필요했다.
-Attacker : 공격을 주도하는 해커의 컴퓨터
-Master : 공격자에게 직접 명령을 받는 시스템으로 여러대의 에이전트를 관리함
-Handler Program : 마스터 시스템의 역할을 수행하는 프로그램
-Agent : 공격대상에 직접 공격을 가하는 시스템
-Daemon Program : 에이전트 시스템의 역할을 수행하는 프로그램

  • 최근
최근의 DDOS 공격은 좀더 발전된 형태를 띄고 있다. 과거 형태의 경우 공격자가 상당한 시간을 두고 여러 시스템을 해킹하여 시스템에 마스터와 에이전트를 설치하고 공격 시에 해당 시스템에 공격명령을 내리는 형태였다. 시간도 오래걸리며 그 과정중에 ip 추적의 위험이 있었다. 

이런 이유로 최근에 발생하는 DDOS 공격은 악성코드와 결합하는 형태로 이뤄진다.
+ PC에서 전파가 가능한 형태의 악성코드를 작성한다.
+DDOS공격을 위해 사전에 공격대상과 스케줄을 정한뒤 이를 작성한 악성코드를 코딩한다.
+악성코드가 인터넷에 전파되면 감염된 PC 를 좀비PC라 부르며, 좀비 PC끼리 형성된 네트워크를 봇넷이라 한다.





스니핑 공격 (Sniffing Attack)

스피닝은 데이터 속에서 정보를 찾는 것이라 할수 있습니다. 스니핑 공격을 흔히 수동적 공격이라고도 하는데, 바로 공격할때 아무것도 하지않고 조용히 있는 것만으로도 충분하기 떄문입니다.


  • 스니핑의 원리
기본적으로 네트워크에 접속하는 모든시스템은 설정된 IP주소값과 고유한 MAC주소값을 가지고 있다. 통신을 할떄 이 두가지 주소값을 인식하고 자신의 버퍼에 저장할지 결정 한다. 다시 말해 네트워크카드에 인식된 2계층과 3계층 정보가 자신의 것과 일치하지 않는 패킷은 무시합니다.

스니핑을 수행하는 공격자는 자신에게 원래는 무시되어야 할 패킷을 무시하지 않는 것임으로 이러한 필터링을 해제하여야 하는데 이런 랜카드의 모드를 프러미스큐어스(Promiscuous)모드라 한다.

  • 스위치 재밍 공격
스위치에는 포트와 MAC 주소를 저장한 테이블이 존재한다. 스위치 재밍은 스위치가 MAC 주소 테이블을 기반으로 패킷을 포트에 스위칭할떄 정상적인 스위칭 기능을 마비시키는 공격을 말한다.

스위치에 랜덤한 형태로 생성한 MAC 주소를 가진 패킷을 무한대로 보내면 MAC테이블은 자연스레 저장 용량을 초과하게 되어, 스위치는 본래의 기능을 잃고 더미허브처럼 작동한다.

  • SPAN포트 태핑공격
SPAN은 스위치의 포트미러링 기능을 이용한 것으로 포트미러링이란 각 포트에 전송되는 데이터를 미러링하고 있는 포트에 똑같이 보내주는 것이다. SPAN포트는 기본적으로 네트워크 장비에서 간단한 설정으로 활성화 되지만, 포트 태핑은 하드웨어적인 장비를 이용한다.

  • 스니퍼의 탐지
스니핑공격은 네트워크에 별다른 이상 현상을 만들지 않기 때문에 사용자가 이를 인지하는 것이 어려워 능동적인 탐지를 통해서만 잡아낼수있다.

<PING 을 이용한 탐지>
대부분의 스니퍼는 일반 TCP/IP에서 동작하기에 Request를 받으면 Response를 전달한다. 이를 이용해 존재하지 않는 MAC주소를 위장하여 Ping을 보냈는데 ICMP Echo Reply를 받으면 해당 호스트가 스니핑을 하고 있는 것이다. 왜냐하면 존재하지 않는 MAC 주소를 사용했으므로 스니핑을 하지않는 호스트는 누구도 Ping Request 를 볼수 없는 것이 정상이기 때문이다.

<ARP를 이용한 탐지>
ping과 유사한 방법으로, 위조된 ARP Request를 보냈을 떄 ARP Response가 오면 프러미스큐어스 모드로 설정되어 있는 것이다.

<DNS를 이용한 탐지>
테스트 대상 네트워크로 Ping Sweep을 보내고 들어오는 Inverse-DNS lookup 을 감시하여 스니퍼를 탐지한다.

<Decoy를 이용한 탐지>
보안관리자는 가짜 ID와 Password를 네트워크에 뿌리고 공격자가 이 ID를 통하여 접속을 시도할때 스니퍼를 탐지한다.

<ARP Watch를 이용한 탐지>
ARP watch는 MAC 주소와 IP주소의 매칭 값을 초기에 저장하고 ARP 트래픽을 모니터링 하여, 이를 변하게 하는 패킷이 탐지되면 관리자에게 메일로 알려주는 툴이다.



스푸핑 공격 ( Spoofing Attack)


스푸핑의 사전적 의미는 '속이다'를 의미하며, 네트워크에서 스푸핑 대상은 MAC주소, IP주소 ,포트 등 네트워크 통신과 관련된 모든것이 될수 있다. 스푸핑 공격은 시스템 권한 얻기, 암호화된 세션 복호화하기, 네트워크 트래픽 흐름 바꾸기등 다양하게 사용 된다.


  • ARP 스푸핑 공격

ARP(Address Resolution Protocol)스푸핑은 MAC 주소를 속이는 것이다. 로컬에서 통신하고 있는 서버와 클라이언트의 IP 주소에 대한 MAC주소를 공격자의 MAC주소로 속임으로 상호간에 전달되는 패킷이 공격자에게 향하게 하여 랜의 통신 흐름을 왜곡 시킨다.

공격자는 서버와 클라이언트에게 본래의 IP에 해당하는 MAC주소 말고 가짜 MAC(공격자의) 주소를 알리므로 공격자에게 패킷이 전달이 된다.

윈도우에서는 arp -a 명령을 이용해 현재 인지하고 있는 IP와 해당 IP를 가지고 있는 시스템의 MAC주소 목록을 확인 할 수가 있으며 이를 ARP 테이블이라 한다.

ARP 스푸핑은 TCP/IP 프로토콜 자체의 문제로 근본적인 대책은 없다.



  • IP 스푸핑 공격

IP스푸핑은 쉽게 말해 IP 주소를 속이는 것으로, 다른이가 쓰는 IP를 강탈해 어떤 권한을 획득하는 것이다. 이는 트러스트 관계가 맺어져있는 서버와 클라이언트를 확인한후 클라이언트에 서비스 거부 공격을 하여 연결을 끊고, 공격자가 클라이언트의 IP주소를 확보하여 실제 클라이언트처럼 패스워드 없이 서버에 접근하는 것이다.


  • ICMP 리다이렉트 공격

ICMP리다이렉트는 3계층에서 스니핑 시스템을 네트워크에 존재하는 또 다른 라우터라고 알림으로써 패킷의 흐름을 바꾸는 공격이다.

가령 호스트A에 라우터A가 기본으로 설정되어 있을경우 호스트B에 보내기 위해서는 우선 라우터 A에 전달을 한후 라우터A보다 라우터 B에 가까울경우 호스트A에게 ICMP리다이렉트 패킷을 보내어 자신에게 돌아오지 않게끔한다. 호스트 A는 라우팅 테이블에 호스트 B에 대한 값을 추가하고 , 호스틑 B로 보내는 패킷은 라우터 B로 전달된다. 하지만 라우터B가 사실은 호스트였다면 지속적으로 패킷을 받을수가 있다.

간단히 말해 공격자를 라우터로 인지하고 데이터를 (공격대상이)보내는 것이다.


  • DNS스푸핑 공격

DNS스푸핑은 실제 DNS 서버보다 빨리 공격대상에게 DNS Respose 패킷을 보내 공격대상이 잘못된 IP주소로 웹접속을 하도록 유도하는 공격이다.

DNS패킷은 UDP패킷이므로 세션이 존재하지않으며 먼저 도착한 패킷을 신뢰하고 그 후에 온 패킷은 버린다. 보통 공격자는 로컬에 조냊하므로 지리적으로 DNS서버보다 가깝다. 따라서 DNS서버가 올바른 DNS Response 패킷을  보내주기 전에 클라이언트에게 위조된 DNS Response 패킷을 보낼수 있다.


세션 하이재킹 공격 ( Session Hijacking)


세션하이재킹은 '세션 가로채기'이다. 세션이 '사용자와 컴퓨터, 또는 두대의 컴퓨터 간의 활성화된 상태'이므로, 세션 하이재킹은 두 시스템 간 연결이 활성화 된 상태, 즉 로그인된 상태를 가로채는 것을 말한다.

TCP세션 하이재킹은 TCP가 가지는 고유한 취약점을 이용해 정상적인 접속을 빼앗는 방법이다. TCP는 서버와 클라이언트간 패킷의 연속성을 보장하기위해 각각 시퀀스 넘버를 사용한다. TCP 세션 하이재킹은 각각 잘못된 시퀀스 넘버를 위조해서 연결된 세션에 잠시 혼란을 준뒤 자신이 끼어들어가는 방식을 사용한다.

1. 클라이언트와 서버사이의 패킷을 통제한다. (ARP스푸핑등을 통해 통제)

2. 서버에 클라이언트 주소로 연결을 재설정하기 위한 RST(Reset)패킷을 보낸다. 서버는 클라이언트의 시퀀스 넘버가 재설정된것으로 판단하고, 다시 3-Way HandShaking을 수행한다.

3. 공격자는 클라이언트 대신 연결되어 있던 TCP 연결을 그대로 물려받는다.


세션 하이재킹을 막으려면 텔넷과 같은 취약한 프로토콜을 이용해서는 안되고 SSH와 같이 세션에 대한 인증수준이 높은 프로토콜을 이용해서 서버에 접속해야한다. 다른 대응책으로는 클라이언트와 서버간의 MAC주소를 고정시켜주는 것이다. MAC주소를 고정시키는 방법은 ARP 스푸핑을 막아주기때문에 결과적으로 세션하이재킹을 막을수 있다.


무선 네트워크 공격과 보안


기본적으로 무선랜은 Ethernet Like와 같은 개념으로, 보통 내부 네트워크의 확장으로 이용된다. 무선랜을 사용하려면 내부의 유선 네트워크에 AP(Access Point) 장비를 설치해야 한다.


AP보안

AP보호를 위한 첫번째 사항은 물리적 보호이다. AP도 스위치의 한 종류이므로 적절한 물리적인 통제가 필요하다. 또한 무선랜을 식별하기 위해 SSID를 사용한다. 해당 AP의 존재를 숨기고 싶을때 SSID 브로드캐스팅을 막고 사용자는 해당 AP에 접속하기 위해 SSID를 입력해야한다.


무선랜 통신 암호화 

<WEP의 암호화>

WEP는 무선랜 통신을 암호화 하는 가장 기본적인 방법이며 64비트와 128비트 암호화 방식을 사용하는데, 기본적으로 RC4 암호화 알고리즘을 사용한다. (보안성이 좋지않다)

<WPA & WPA-PSK의 암호화>

WPA/WPA2는 WEP의 보안 취약점이 드러난 이후 그 대안으로 나오게 되었다. WPA는 TKIP 알고리즘을 사용하며 기본적으로 WEP와 같은 RC4 키 스트림 암호화 알고리즘을 사용하지만 보안 강화를 위해 MIC라는 8바이트의 메세지 무결성 코드를 추가했고, IV 생성에서 새로운 배열 규칙을 적용했다.


'Study > Book' 카테고리의 다른 글

정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x04  (0) 2015.01.21
정보보안개론 0x03  (0) 2015.01.13
정보보안개론 0x02  (0) 2015.01.12
정보보안개론 0x01  (2) 2015.01.11

Comment +0