Memo.py in GitHub
https://github.com/Kali-KM/Python_Study/blob/master/memo.py
2015.02.26
Morris Worm Source Code
Morris WormThe Morris worm or Internet worm of November 2, 1988 was one of the first computer worms distributed via the Internet. It is considered the first worm and was certainly the first to gain significant mainstream media attention. It also resulted in the first conviction in the US under the 1986 Computer Fraud and Abuse Act.[1] It was written by a graduate student at Cornell University, R..
2015.02.17
Operating System Concepts_Chapter.1
Chapter 1. 서론 1.1 운영체제가 할 일운영체제는 하드웨어를 제어하고 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 조정한다. (사용자 관점, 시스템 관점)1.2 컴퓨터 시스템의 구성#Computer System Operation컴퓨터 시스템은 공유 메모리에 대한 접근을 제공하는 공통 버스를 통해 연결된 여러 개여 장치 제어기와 하나 이상의 CPU로 구성 되어 있다.-초기프로그램(부트스트랩) in ROM > init실행 & Event 대기-interupt : ISR, Handler , Table, (예외상황, 하드웨어,시스템콜)-인터럽트 구조 : 명령의 주소저장, 최근 스택에 복귀주소 저장#Storage Structure CPU는 오직 메모리로부터 명령을 적재, 실행하고자 하는..
2015.02.05
Operating Sysyem Concepts //컴퓨터 시스템의 구성
Computer System Operation ( 컴퓨터 시스템 동작 ) 현대의 범용 컴퓨터 시스템은 공유 메모리에 대한 접근을 제공하는 공통버스를 통해 여러 개의 장치제어기와 하나 이상의 CPU로 구성되어 있다.CPU와 장치제어기는 메모리 사이클을 얻기 위해 경쟁하면서 병행 실행될수 있다.컴퓨터 구동을 위해서는 초기프로그램이 있어야하는데 바로 부트스트랩이라 한다. 부트스트랩은 보통 펌웨어(ROM)이나 EEPROM에 저장 된다. 부트스트랩 프로그램은 운영체제를 적재하는 방법 및 실행을 시작하는 방법을 알아야하기에 운영체제의 커널의 찾아 메모리에 적재해야한다. 그런다음 운영체제는 “INIT”와 같은 첫번째 프로세스를 실행하고, 어떤 Event가 발생하기를 기다린다. #인터럽트 // 종류: 예외상황, 하드웨..
2015.02.03
no image
Simple memo(Jump2Python)
Simple notepad # memo.pyimport sysimport time def Usage():print """=====Usage %s -v : View memo%s -a : Add memo=====""" %(sys.argv[0],sys.argv[0]) if not sys.argv[1:] or sys.argv[1] not in ['-a','-v']:Usage()elif sys.argv[1] == '-v':open("memo.txt",'r')print open("memo.txt").read()elif sys.argv[1] == '-a':word=raw_input("Enter memo : ")f= open("memo.txt",'a')f.write(time.ctime()+": "+word+'\n')f..
2015.02.02
정보보안개론 0x08
Security System 인증 시스템인증 시스템은 인증을 하고자 하는 주체에 대해 식별하고, 이에 대한 인증 서비스를 제공하는 시스템이다. 인증 시스템에서는 사용자에 대한 식별과 인증을 수행하는 수단으로 크게 다음 세 가지 방식을 사용한다.Something You Know사용자가 알고 있는 정보를 이용해 인증하는 것으로 가장 기본적이고 전통적인 수단으로, 사용자의 아이디와 새으둬르르 이용한 인증이 대표적인 예이다.이 방식은 사용자의 기억에 의존하기 떄문에 값싸고 편리하게 사용할수 있지만, 패스워드를 안전하게 관리하기는 조금 어렵다. 많은 해킹이 사용자의 패스워드를 알아내는데 집중되어 있기 떄문에 누출될 가능성이 높고 누출될 경우 공격자가 사용자의 계정을 악용하여 쉽게 시스템에 접근할수 있기 떄문이다...
2015.01.24
Assembly Basic Commands
데이터 타입BYTE : 8비트 부호 없는 정수SBYTE : 8비트 부호 있는 정수WORD : 16비트 부호 없는 정수SWORD : 16비트 부호 있는 정수DWORD : 32비트 부호 없는 정수SDWORD : 32비트 부호 있는 정수FWORD : 48비트 정수QWORD : 64비트 정수TBYTE : 80비트 정수 연산자(operand) 타입r8 : 8비트 범용 레지스터r16 : 16비트 범용 레지스터r32 : 32비트 범용 레지스터Reg : 임의의 범용 레지스터Sreg : 16비트 세그먼트 레지스터Imm : 8, 16, 32비트 상수imm8 : 8비트 상수imm16 : 16비트 상수imm32 : 32비트 상수r/m8 : 8비트 범용 레지스터 또는 8비트 메모리r/m16 : 16비트 범용 레지스터 또는 16..
2015.01.23
정보보안개론 0x07
암호에 대한 이해암호문 (Cipher Text) : 비일을 유지하기 위해 당사자 끼리만 알수 있도록 꾸민 약속 기호암호화 (Encryption) : 평문을 암호문으로 바꾸는 것복호화 (Decryption) : 암호문을 평문으로 바꾸는 것 암호화 알고리즘 : 암호화를 수행하거나 복호화를 수행할떄 양쪽이 서로 알고있어야 할 수단암호화 키 : 약속한 규칙 암호의 발전사전치법전치법은 단순히 메시지에 있는 문자의 위치를 바꾸는 방법이다.대체법대체법은 해당 글자를 다른 글자로 대체하여 암호화 하는 방법이다.알파벳 한글자를 다른 하나의 글자로 대체하는 방식으로 암호화를 수행 (시저 암호, 모노알파베틱 암호) 한 글자가 암호화키와의 맵핑에 따라 여러가지 다른문자로 대체되어 암호화(비즈네르, 플레이페어 암호) 대칭 암호..
2015.01.23

Memo.py in GitHub

Kail-KM
|2015. 2. 26. 03:10

'Programming > Python' 카테고리의 다른 글

Key_logger.py in GitHub  (0) 2015.03.05
Del_file.py in GitHub  (0) 2015.03.02
Setup.py // Py2Exe 사용법  (0) 2015.02.26
Steal_Path.py in GitHub  (0) 2015.02.26
Simple memo(Jump2Python)  (0) 2015.02.02

Morris Worm


The Morris worm or Internet worm of November 2, 1988 was one of the first computer worms distributed via the Internet. It is considered the first worm and was certainly the first to gain significant mainstream media attention. It also resulted in the first conviction in the US under the 1986 Computer Fraud and Abuse Act.[1] It was written by a graduate student at Cornell UniversityRobert Tappan Morris, and launched on November 2, 1988 from MIT.



Morris_worm.zip


http://www.rohitab.com/discuss/topic/20307-the-morris-worm-source-code/


I've found the source code of the Morris worm in the F-13 site.


I never tryed to compile it because I know that I will need an old C compiler to this.
Its kind of strange because I was thinking that the morris worm was coded in asm, not in c.

If you are interested in the source code here it is. :)


'Reversing > Malware Analysis' 카테고리의 다른 글

Nethost.exe분석  (1) 2015.11.26
server.exe 분석  (0) 2015.10.05
Rejoice와 서버파일 분석(정적)  (0) 2015.01.15
Rejoice와 서버파일 분석(초기,동적)  (0) 2015.01.15
악성코드 'Lucci.exe' 소스코드 C++  (0) 2015.01.11

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 Sysyem Concepts //컴퓨터 시스템의 구성  (0) 2015.02.03
정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23

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
정보보안개론 0x08  (0) 2015.01.24
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23

Simple notepad




# memo.py

import sys

import time


def Usage():

print """

=====

Usage


%s -v : View memo

%s -a : Add memo

=====""" %(sys.argv[0],sys.argv[0])


if not sys.argv[1:] or sys.argv[1] not in ['-a','-v']:

Usage()

elif sys.argv[1] == '-v':

open("memo.txt",'r')

print open("memo.txt").read()

elif sys.argv[1] == '-a':

word=raw_input("Enter memo : ")

f= open("memo.txt",'a')

f.write(time.ctime()+": "+word+'\n')

f.close()

print "Added"






sys.argv[0] : 입력변수로 파일의 이름이 입력된다.

sys.argv[1] : 입력변수로 파일 이름 뒤에 '-v'나 '-a'와 같은 인자를 입력할 경우 해당 경우로 진행된다.



if not sys.argv[1:] or sys.argv[1] not in ['-a','-v']

Usage()

: argv[1:]가 존재하지 않거나 sys.argv[1] 부분이 '-a' 나 '-v'가 아닐 경우 Usage()를 호출한다.



elif sys.argv[1] == '-v':

open("memo.txt",'r')

print open("memo.txt").read()

:sys.argv[1] 가 -v 일 경우, memo.txt를 'r'모드로 연결 시킨다. 그후 open된 파일을 print 함수를 통해 출력을 하며 출력 되는 것은 open("memo.txt").read()로 그 파일의 전체를 출력한다.


elif sys.argv[1] == '-a':

word=raw_input("Enter memo : ")

f= open("memo.txt",'a')

f.write(time.ctime()+": "+word+'\n')

f.close()

print "Added"

:sys.argv[1]가 -a일 경우, word를 통해서 새로 메모할 문자열을 입력을 받고 그후 open(--,'a')를 통해서 그 내용을 덧붙이고자 하며, f.write를 통해 파일에 입력을 한다.









'Programming > Python' 카테고리의 다른 글

Key_logger.py in GitHub  (0) 2015.03.05
Del_file.py in GitHub  (0) 2015.03.02
Setup.py // Py2Exe 사용법  (0) 2015.02.26
Steal_Path.py in GitHub  (0) 2015.02.26
Memo.py in GitHub  (0) 2015.02.26

정보보안개론 0x08

Kail-KM
|2015. 1. 24. 01:06
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
정보보안개론 0x07  (0) 2015.01.23
정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22

데이터 타입


BYTE : 8비트 부호 없는 정수

SBYTE : 8비트 부호 있는 정수

WORD : 16비트 부호 없는 정수

SWORD : 16비트 부호 있는 정수

DWORD : 32비트 부호 없는 정수

SDWORD : 32비트 부호 있는 정수

FWORD : 48비트 정수

QWORD : 64비트 정수

TBYTE : 80비트 정수

 


연산자(operand) 타입


r8 : 8비트 범용 레지스터

r16 : 16비트 범용 레지스터

r32 : 32비트 범용 레지스터

Reg : 임의의 범용 레지스터

Sreg : 16비트 세그먼트 레지스터

Imm : 8, 16, 32비트 상수

imm8 : 8비트 상수

imm16 : 16비트 상수

imm32 : 32비트 상수

r/m8 : 8비트 범용 레지스터 또는 8비트 메모리

r/m16 : 16비트 범용 레지스터 또는 16비트 메모리

r/m32 : 32비트 범용 레지스터 또는 32비트 메모리

mem : 8, 16, 32 비트 메모리


 

명령어 (Command Destination,Source ) 



- ADD(add) : destination과 source를 더해 destination에 저장한다.

 

- SUB(Subtract) : destination에서 source값을 뺀 뒤 destination에 저장한다.

 

- SBB(Subtract with Borrow) : 하위 자리의 수계산 중에 빌림수를 가져갔다면 그것을

                                           감안해 뺄셈을 한다.

dst = dst - src - CF 식으로 생각하면 된다.

 

- MUL(Unsigned Integer Multiply) : 부호 없는 al, ax, eax의 값을 피연산자와 곱한다.

피연산자가 8비트 이면 al과 곱해서 ax에 저장되고 16비트이면 ax와 곱해서 dx:ax에 저장된다.

피연산자가 32비트 이면 EAX와 곱해서 EDX:EAX에 저장된다.

 

- IMUL(Integer Multiplication) : 부호 있는 al, ax, eax의 값을 피연산자와 곱한다.

결과에 따라 CF, OF가 달라질 수 있다.

피연산자가 8비트 이면 al과 곱해서 ax에 저장되고 16비트이면 ax와 곱해서 dx:ax에 저장된다.

피연산자가 32비트 이면 EAX와 곱해서 EDX:EAX에 저장된다.

결과에서 사용되는 비트 이외에 남은 비트를 부호비트로 채운다.

 

- DIV(Unsigned Integer Divide) : 8, 16, 32비트 부호 없는 값의 나눗셈을 한다.

ax/8bit 값 -> al:ah (몫:나머지)

dx:ax/16bit 값 -> ax:dx

edx:eax/32bit 값 -> eax:edx

결과에 따라 CF, OF, ZF가 세트될 수 있다.

 

- IDIV(Integer Divide) : 8, 16, 32비트 부호 있는 값의 나눗셈을 한다.

ax/8bit 값 -> al:ah (몫:나머지)

dx:ax/16bit 값 -> ax:dx

edx:eax/32bit 값 -> eax:edx

나눌 대상은 나눌 값보다 커야 한다. 부호 없는 경우는 xor연산을 해 0으로 초기화시키면서

확장을 시키고 부호 있는 경우 movsx 동작을 하는 CBW, CWD, CDQ로 부호비트로 채우면서

초기화 시켜서 나눗셈 연산을 수행한다.

 

- INC(Increase) : 피 연산자에 1을 더한다.

연산 결과에 따라 ZF나 OF가 세트 될 수 있다.

- DEC(decrease) : 피 연산자에 1을 뺀다.

연산 결과에 따라 ZF나 OF가 세트 될 수 있다.

 

- LEA(Load Effective Address) : source 의 주소값을 destination에 복사한다.

다시말해 간단히 source 주소값을 알아내서 destination에 복사하는 명령어라고 보면된다.

 

- MOV(Move data) : source 데이터를 destination으로 복사한다.

 

- MOVS(Move String) : source에서 destination으로 복사한다.

                                 문자열을 다루기 때문에 ESI와 EDI를 다룬다.

                                 따라서 ESI 안의 주소가 가리키는 문자열을 EDI 안의 주소가

                                 가리키는 곳으로 복사한다.

MOVS destination, Source

(MOVSB, MOVSW, MOVSD, MOVSQ : BYTE, WORD, DWORD, QWORD)

복사하는 단위마다 명령어가 다르다.

MOVSQ : 64비트에서 사용 가능한 명령어.

 

- MOVZX(Move with zero-Extend) : BYTE나 WORD크기의 피 연산자를 WORD나 DWORD

                                                   크기로 확장하고 남은 비트는 0으로 채운다.

 

- MOVSX(Move with Sign eXtend) : BYTE나 WORD 크기의 피연산자를 WORD나 DWORD

                                                    크기로 확장하고 부호는 그대로 유지한다.

                                                    다시 말해 나머지 공간을 부호비트로 채운다.

* movzx와 movsx의 차이점은 확장시 부호비트에 따라 값이 달라지기 때문에

확장시 확장된 공간을 부호비트로 채우거나 0으로 채우기 위해 두가지로 나뉘어 진다.

movxz - unsign , movsz - sing

 

- rep(repeat string) : ECX가 0이 될 때 까지 문자열 관련 명령을 반복시킨다.

                             문자열 관련 명령어는 MOVS, SCAS, STOS 등이 있다.

 

- repne(repeat until Not Equal) : 보통 SCAS명령어와 함께 쓰인다.

지정된 데이터 타입별로 문자열을 구분하고 한번 구분할 때마다 ECX를 -1 시킨다.

ZF가 1이거나 ECX가 0이 되기 전까지 반복한다.

시작 하는 순간 ECX를 -1 하고 시작한다.

 

- SCAS(Scan String) : 보통 REPNE REPE와 같이 사용된다.

                               Register와 Memory의 데이터 비교한다.

AL 또는 AX, EAX와 ES:(E)DI가 지시한 메모리 내용 비교 후 같은 값이면 ZF가 1로 세트된다.

scasb, scasw, scasd로 사용 한다.

자동으로 DF에 따라 EDI값이 달라진다.

 

- STOS(Store String) : AL, AX, EAX 안의 값을 EDI가 가리키는 곳으로 문자열을 저장시킨다.

Stosb, stosw, stosd로 사용되며 rep명령어와 함께 사용될 수도 있다.

DF에 따라 EDI 값이 + 또는 - 된다.

 

- LOOP : ECX가 0이 될 때 까지 정해진 라벨로 goto 한다.

디스 어셈블리 되면 라벨은 주소가 된다. 다시말해 라벨은 주소다.

또 loop label 을 디스 어셈블리 하면 loopd short 주소 이런 형식으로 나오는데

Loop를 사용하면 CX를 사용한다는 이야기이고 loopd는 ECX값을 사용한다는 이야기이다.

Short은 가까운 라벨을 찾겠다는 의미인데 별 뜻은 없다라고 난 생각한다.

 

- AND : 논리연산자 중 하나로 마스크 비트를 씌우는 동작을 한다.

예를 들면 네트워크에서 서브넷 마스크를 설정하면 네트워크 이름이 나오게 되는게

하나의 예이다.

 

- SAR(Shift Arithmetic Right) : SHR 명령을 사용하면 부호 비트가 변화하기 때문에 값이

                                            일정하게 바뀌지 않는다.

이때 사용 하는 것이 SAR인데 SHR은 무조건 오른쪽으로 비트를 밀어버리는 반면에

SAR은 오른쪽으로 비트를 밀고 기존의 부호 비트를 다시 MSB에 적용시킨다.

예를 들어 10110110 (-74)라는 비트를 SHR하면 01011011(91)이 되는데

만약 SAR하면 11011011(-37)이 된다.

neg : 음수값을 양수로 양수값을 음수로 바꿀때 사용

 

- TEST : 두 오퍼랜드값을 AND연산을 수행한다.

하지만 결과는 저장하지 않고 플래그 레지스터에만 영향을 준다.

대체적으로 TEST 명령 후 jmp 구문이 온다.

TEST는 CMP와 비교할 수 있는데 둘 다 비교 후 결과는 저장하지 않고

플레그 레지스터만 바꾼다.

예를 들어 if문을 사용할 때 비교 대상이 있을경우(if(a<10) 와 비교 대상이 없을경우(if(a))

가 있는데 비교 대상이 있을 경우는 cmp를 쓰고 비교 대상이 없을 경우는

현재 상태를 모르기 때문에 값이 뭔지 알아내기 위해서 TEST 명령어를 이용해 AND연산을

이용해 자신이 어떤 값인지 알아낸다.

보통 참인지 거짓인지를 알아내기 위해 사용한다.

OF와 CF는 항상 0으로 세트되고 TEST 연산 결과값이 0이면 ZF가 1로 세트되고

아니면 0으로 해제된다.

 

- CALL : 함수 호출 시 사용된다.

Jmp와 같이 프로그램의 실행 흐름을 변경 시키지만 jmp명령어와 다른 점은

돌아올 리턴 어드레스를 스택에 저장한다는 것이다.

 

-CMP : 두 오퍼랜드를 비교한다.

Destination 에서 source 를 묵시적으로 값을 빼서 비교한다.

두 피연산자의 값이 같다면 결과는 0이 되고 ZF가 1로 세트된다.

 

- OFFSET : 세그먼트 시작부터 변수가 위치한 거리까지 상대적인 거리를 리턴한다.

예를 들어 lea edi, offset value 하면 세그먼트로부터 value의 위치를 edi에 저장한다.

 

- NOP(No Operation) : 아무일도 하지 않는다.

필요에 따라 유용하게 사용하는데 예를 들면 추가적인 코드를 삽입시키고자 할 때

중간에 바로 삽입이 안되기 때문에 공간을 만들어야 한다.

이럴 때 필요없는 코드를 nop하면 그만큼의 공간을 확보할 수 있다.

 

조건 점프 명령



 JMP는 플래그 래지스터 값들을 이용해 조건이 만족하면 점프를 수행하게 되는 명령어이다.


JA(Jump if (unsigned) above) : CF = 0 and ZF = 0

JAE(Jump if (unsigned) above or equal) : CF = 0

JB(Jump if (unsigned) below) : CF = 1

JBE(Jump if (unsigned) below or equal) : CF = 1 or ZF = 1

JC(Jump if carry flag set) : CF = 1

JCXZ(Jump if CX is 0) : CX = 0

JE(Jump if equal) : ZF = 1

JECXZ(Jump if ECX is 0) : ECX = 0

JG(Jump if (signed) greater) : ZF = 0 and SF = 0

JGE(Jump if (singed) greater of equal) : SF = OF

JL(Jump if (signed) less) : SF != OF

JLE(Jump if (signed) less or equal) : ZF = 1 and OF != OF

JNA(Jump if (unsigned) not above) : CF = 1 or ZF = 1

JNAE(Jump if (unsigned) not above or equal) : CF = 1

JNB(Jump if (unsigned) not below) : CF = 0

JNBE(Jump if (unsigned) not below or equal) : CF = 0 and ZF = 0

JNC(Jump if carry flag not set) : CF = 0

JNE(Jump if not equal) : ZF = 0

JNG(Jump if (signed) not greater : ZF = 1 or SF != OF

JNGE(Jump if (signed) not greater or equal) : SF != OF

JNL(Jump if (signed) not less) : SF = OF

JNLE(Jump if (signed) not less or equal) : ZF = 0 and SF = OF

JNO(Jump if overflow flag not set) : OF = 0

JNP(Jump if parity flag not set) : PF = 0

JNS(Jump if sign flag not set) : SF = 0

JNZ(Jump if not zero) : ZF = 0

JO(Jump if overflow flag set) : OF = 1

JP(Jump if parity flag set) : PF = 1

JPE(Jump if parity is equal) : PF = 1

JPO(Jump if parity is odd) : PF = 0

JS(Jump if sign flag is set) : SF = 1

JZ(Jump is zero) : ZF = 1


 

부호 확장 명령어


부호 있는 나눗셈 연산을 할 시 나눌 대상이 되는 값은 나눌 값보다 커야 하기 때문에 확장을

시켜줘야 하는데 부호 있는 확장을 할 시 사용하는 명령어가 부호 확장 명령어 이다.

- CBW(Convert Byte to Word) : byte크기를 word 크기로 확장시킴

- CWD(Convert Word to Dword) : word크기를 dword 크기로 확장시킴

- CDQ(Convert Dword to Qword) : dword 크기를 qword 크기로 확장시킴

*동작은 movsx와 같고 개념은 초기화 개념으로 본다.

'Reversing > Theory' 카테고리의 다른 글

RVA to RAW 쉽게 생각해보기  (1) 2015.03.20
범용 CPU 레지스터  (1) 2015.03.04
PE File Format 0x04  (0) 2015.01.13
IDA PRO 단축키  (0) 2015.01.13
PE FILE Format 0x03  (0) 2015.01.10

정보보안개론 0x07

Kail-KM
|2015. 1. 23. 02:48

암호에 대한 이해


암호문 (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
정보보안개론 0x06  (0) 2015.01.23
정보보안개론 0x05  (0) 2015.01.22
정보보안개론 0x04  (0) 2015.01.21