[Digital Forensic] Live Response (실시간 대응) (3)

 

실시간 대응


(7) Mac OS X 휘발성 정보 수집

  • Mac OS X는 Apple사에서 개발한 운영체제이며 그 기반으로 Unix를 두고 있음

  • 해당 OS에서의 휘발성 정보들은 다른 OS들의 휘발성 정보와 대부분 동일하며 수집 방법만 조금 다름

  • 버전별로 조사관이 원하는 데이터를 저장하고 있는 파일 위치가 다르기 때문에, 조사관은 데이터 수집 대상의 Mac OS X 버전을 확인, 버전에 따라 수집할 데이터의 위치 파악 필요

  • Unix를 기반으로 두기 때문에 대부분의 Unix 명령어가 동일하게 적용되며, Linux에서도 동일하게 휘발성 정보 수집 가능

 

1) 시스템 시간

  • Windows 경우 datetime 명령어 조합을 이용하여 시스템 현재 시간 정보를 수집하였는데, Mac OS X도 동일하게 date 명령어로 수집 가능

  • 또한 해당 시스템이 얼마나 부팅되어 있었는지도 확인 가능하며 이때 사용하는 명령어는 uptime 명령어

  • 시스템 시간은 어떤 사건의 발생 시점 & 끝난 시점과 같은 기준점이나 범위를 구분지어 주어 굉장히 중요한 정보

 

2) 네트워크 연결 정보

  • 현재 시스템이 연결하고 있는 호스트와 연결했던 호스트 등을 보여줌

  • 시스템 재시작이나 종료되면 해당 정보는 모두 삭제되어 휘발성 정보에 속함

  • Windows에서는 netstat -an 명령어로 수집했었는데 Mac OS X 또한 동일

 

3) 프로세스 목록

  • 어떤 OS에서든지 프로세스 목록 수집은 중요 (루트킷이나 백도어의 프로세스가 실행되고 있을 수 있기 때문)

  • 프로세스 목록은 ps 명령어로 수집 가능하며, 보통 사용 옵션은 -ef 옵션이다.

 

4) 사용자 정보

  • Mac OS X는 유닉스를 기반으로 하고 있으며, 유닉스는 다중 사용자 시스템으로 여러 사용자들이 동시 접속하여 어떤 기능 수행이 가능

  • 그렇기에 현재 접속한 사용자들을 알아볼 수 있으며 이 정보는 시스템 전원이 Off되는 순간 삭제

  • 꼭 현재 접속 기록이 아닌 이전 접속 사용자 기록 또한 볼 수 있으며, 현재 접속 사용자 정보 명령어는 w(who), 현재 원격 & 로컬 사용자 정보는 finger가 있고, 옵션으로는 -lmsp가 있음

  • 이전 접속 사용자 정보에 대한 명령어는 last 명령어가 있음

 

5) 파일 정보

  • 현재 어떤 파일이 어떤 명령으로 인해 열려 있고, 어떤 네트워킹 작업을 하고 있는지 수집할 수 있는 명령어는 lsof가 있으며, 옵션으로는 -i, -P 옵션이 있음

 

6) 시간 정보

  • 포렌식에서 어떤 대상을 분석하던 시간은 정말 중요한 정보이며 사건의 기준이 됨

  • Mac OS X도 다른 OS나 파일 시스템과 동일하게 MAC(Modify, Access, Create) Time이 존재, 여기에 추가로 Change Time이 존재 (HFS+ 파일 시스템에서 시간 정보는 Catalog File의 파일 레코드에 존재)

종류

설명

Modify Time

파일 내용을 수정한 경우(메타데이터 수정 포함) 갱신

Access Time

파일을 읽거나 실행한 경우 갱신

Create Time

파일이 생성된 시간을 의미

Change Time

파일의 메타데이터가 수정된 경우 갱신(Change Time이 갱신될 경우 Modify Time도 같이 갱신)

 

  • stat 명령어로 시간을 확인해보면 Access, Modify, Change, Create Time순으로 출력 됨

  • 사용자가 파일이나 디렉토리에 변경 / 접근 / 어떠한 행위 하게 되면 시간 값들은 업데이트 되어 특정 사건의 특정 행동 기준점을 세울 수 있게 도와줌

 

7) Property List

  • Mac OS X는 다른 OS와 다르게 프로퍼티 리스트(plist)라는 파일들이 존재

  • 해당 파일은 실행되는 어플리케이션 정보들이 저장되는 파일이며, 일반 TEXT와 실행 파일 두 개의 종류로 나뉨

  • Text 파일은 xml 형태로 되어 있으며, 실행 파일은 xml 형태로 되어 있지 않으나 plutil 명령어를 이용하여 xml 형태로 변형시키기 가능

 

 

7-1. Property List (네트워크 정보)

  • 네트워크 정보를 볼 수 있는 plist 파일은 /Library/Preferences/SystemConfiguration 폴더에 존재

  • 포렌식 관점에서 주목해야 할 파일은 preferences.plist와 com.apple.network.identification.plist가 있음

  • preferences.plist 파일은 네트워크 일반 정보(인터페이스 카드 정보, 컴퓨터 이름 등)가 저장되어 있음

  • com.apple.network.identification.plist 파일은 네트워크 정보의 히스토리(이전에 할당 받았던 IP 주소 등)를 저장하고 있음

 

7-2. Property List (사용자 정보)

  • 사용자 정보 또한 plist 파일로 저장되며, /private/var/db/dslocal/nodes/Default/users/ 폴더에 사용자 계정명과 동일하게 저장

  • 사용자 정보 관련 파일들은 /etc/passwd 파일과 동일하게 사용자 쉘, 권한, 홈 디렉토리 등을 저장

  • 해당 파일들은 일반 text 프로퍼티 리스트 파일이 아닌 실행 프로퍼티 파일이라 plutil 명령어로 변환해 주어야 분석 가능

  • xml 파일로 변환 시 -convert xml1 옵션 / 바이너리 파일로 변환 시 -convert binary1 옵션 사용

 

7-3. Property List (그룹 정보)

  • 사용자 정보가 아닌 그룹 정보는 Default/groups 폴더에 존재

  • admin.plist 파일은 root 권한이 어떤 사용자에게 부여되었는지 기록되는 파일

  • 시스템에 마지막 로그인한 사용자 저장 파일은 /Library/Preferences/com.apple.loginwindow.plist 파일

 

7-4. Property List (최근 접근한 어플리케이션)

  • 사용자가 최근 접근한 어플리케이션 정보 저장 plist 파일은 com.apple.recentitems.plist

  • 위치는 /Users/<사용자 이름>/Library/Preferences에 위치하며 파일 서버 접근 정보도 포함

  • 어플리케이션 정보 저장 plist 파일은 접근 시간, 즉 타임 스탬프를 제공해주지 않아 해당 정보만을 가지고 특정 시점에 접근된 파일을 찾기에는 무리가 있음

 

7-5. Property List (디스크 이미지)

  • 해당 시스템에서 사용자가 오픈한 디스크 이미지 전체 경로 포함 plist 파일은 com.apple.DiskUtility.plist이고 위치는 recentitems.plist 파일과 동일

  • FXConnectToLastURL Key : 어플리케이션이 마지막으로 연결하였던 파일 서버의 전체 주소 제공

  • FXDesktopVolumePositions Key : 시스템에서 이전에 마운트되었던 볼륨명과 마운트 포인트명 제공

  • FXRecentFolders Key : 사용자가 최근에 보거나 접근한 디렉토리 정보 제공

 

7-6. Property List (연결 디바이스 정보)

  • 포렌식 수행 과정에서 연결된 디바이스들의 정보 중 가장 관심이 가는 것은 당연 이동식 저장 장치이고, 이 정보는 kernel.log에 저장

  • 또 다른 연결 디바이스 정보들은 com.apple.iPod.plist에 저장

  • kernel.log는 /var/log 디렉토리에 위치하며, 당연히 외부 장치형 디바이스의 연결 정보만 저장하는 것이 아니기에 특정 키워드로 검색해야 함

  • 특정 키워드는 'USBMSC' 이다.

  • 출력 정보에 대한 내용은 날짜 및 시간 / 연결 디바이스 타입 / Serial Number / Vender ID / Product ID / Firmware Version이 있음

  • 해당 파일은 /Users/<사용자 이름>/Library/Preferences 디렉토리에 있으며 해당 파일에는 여러 디바이스 리스트와 연결 시각 등 kernel.log와 거의 유사한 정보들이 목록화 되어 있음

 

 

지금까지 Mac OS X에서 휘발성 정보를 알아보고 수집하는 방법을 알아보았다.

 

Mac OS X나 유닉스, 리눅스 경우 Windows와 다르게 대부분 쉘 명령어를 통해 정보를 수집할수 있다.

 

즉, 스크립트나 자동화 프로그램을 만든다 해도 추가적인 프로그램이 필요 없는 것이다.

 

또 지금까지 알아본 정보들이 Mac OS X의 휘발성 정보의 전부가 아니기 때문에, 로그 정보가 더 있지만 그 부분은 너무 방대하다.

 

앞으로 Mac OS X에 대한 분석은 더 진행되어야 하며, Mac 기반의 스마트폰, 패드 등이 지금보다 더 보급화되고 여러 분야에 응용되어 사용된다면 침해 사고 또한 그 증가 추세가 비례적일 것이다.


# Reference

 

http://www.yes24.com/Product/Goods/8511539

[System] 80x86 시스템 CPU 구조와 레지스터

 

시스템 해킹


(1) 80x86 시스템 CPU 구조와 레지스터

1-1. 80x86 시스템

  • 8086/8088 시스템은 XT라고 칭했던 인텔 CPU의 IBM PC 중 아주 초기 보급형 모델

  • 그러다 AT라는 80286 시스템 발표, 이후부터 익숙한 이름의 모델이 등장

  • 바로 80을 떼고 80386을 386, 80486을 486으로 칭했던 시스템들이며 80x86은 이런 시스템을 통칭하는 말

[그림 1] 인텔 CPU 모델별 관련 정보

 

1-2. 80x86 시스템 CPU 구조

 

[그림 2] 80x86 시스템 구조

 

1-2-1. 연산 장치

  • 연산 장치(ALU)는 CPU(중앙 처리 장치) 핵심 부분 중 하나이며, 산술과 논리 연산을 수행하는 연산 회로 집합으로 구성

구성 요소 기능
내부 장치 가산기(Adder) 덧셈 연산 수행
보수기(Complementer) 뺄셈 연산 수행, 1의 보수나 2의 보수 방식 이용
시프터(Shifter) 비트를 오른쪽 / 왼쪽으로 이동하여 나눗셈, 곱셈 연산 수행
관련 레지스터 누산기(Accumulator) 연산의 중간 결과 저장

데이터 레지스터

(Data Register)

연산에 사용할 데이터 저장

          상태 레지스터           

(Status Register)

연산 실행 결과로 나타나는 양수나 음수, 자리 올림, 오버플로 상태 기억

 

1-2-2. 제어 장치

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

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

구성 요소 기능
내부 장치

명령 해독기

(Instruction Decoder)

명령 레지스터에 있는 명령 해독 > 부호기로 전송
부호기(Decoder) 명령 해독기가 전송한 명령 > 신호로 만들어 각 장치로 전송
주소 해독기(Address Decoder)

명령 레지스터에 있는 주소 해독 > 메모리 실제 주소로 변환

>  데이터 레지스터에 저장

관련 레지스터

프로그램 카운터

(Program Counter)

다음에 실행할 명령 주소를 저장

명령 레지스터

(Instruction Register)

현재 실행 중인 명령을 저장

메모리 주소 레지스터

(Memory Address Register)

주기억장치의 번지 저장

메모리 버퍼 레지스터

(Memory Buffer Register)

메모리 주소 레지스터에 저장된 주소 실제 내용 저장

 

1-3. 레지스터

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

  • 대개 연산 장치나 제어 장치에 함께 포함

 

1-3-1. 레지스터 종류 & 기능

  • 사람이 일상 생활에서 메모하는 것처럼, 프로그램도 메모를 하는 데 이때 메모지 역할을 하는 것

  • 프로그램이 사용하는 메모지 종류와 내용을 알면 프로그램 동작 원리 이해에 도움

 

1-3-2. 범용 레지스터

범주 80386 레지스터 이름 비트 용도

범용 레지스터

(General Register)

EAX 누산기(Accumulator) 32

주로 산술 연산에 사용

(함수 결과 값 저장)

EBX

베이스 레지스터

(Base Register)

32

특정 주소 저장

(주소 지정 확대하는 인덱스로 사용)

ECX

카운트 레지스터

(Count Register)

32

반복적 실행되는 특정 명령에 사용

(루프 반복 횟수 & 좌우 방향 시프트 비트 수 기억)

EDX

데이터 레지스터

(Data Register)

32 일반 자료 저장(입출력 동작에 사용)

 

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

  • 80386 CPU에서 사용하는 범용 레지스터는 EAX, EBX, ECX, EDX 등이 있음 

[그림 3] 범용 레지스터 종류 & 구분

 

  • 앞의 E는 '확장된'을 의미하며, 32비트 레지스터

  • 이 레지스터의 오른쪽 16비트를 각각 AX, BX, CX, DX라고 하며, 다시 둘로 나뉨

  • 예를 들어, AX는 왼쪽 8비트 상위 부분을 AH, 오른쪽 8비트 부분을 AL이라 함

 

EAX 레지스터

  • 누산기인 EAX 레지스터는 입출력과 대부분의 산술 연산에서 사용 (예 : 곱셈, 나눗셈, 변환 명령은 EAX 사용)

  • 사용 시에 더 효율적인 기계 코드를 생성하는 명령도 있으며, Win32 API 함수들은 모두 리턴 값을 EAX에 저장한 후에 리턴

 

EBX 레지스터

  • DS 세그먼트의 포인터를 주로 저장하며, ESI나 EDI와 결합하여 인덱스에 사용

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

 

ECX 레지스터

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

 

EDX 레지스터

  • 입출력 연산에 사용하며, 큰 수의 곱셈과 나눗셈 연산에서 EAX와 함께 사용

 

 

1-3-3. 세그먼트 레지스터

범주 80386 레지스터 이름 비트 용도

세그먼트  레지스터

(Segment Register)

CS

코드 세그먼트 레지스터

(Code Segment Register)

16

실행할 기계 명령어가 저장된 메모리   주소 지정

DS

데이터 세그먼트 레지스터

(Data Segment Register)

16

프로그램에서 정의된 데이터, 상수,     작업 영역

메모리 주소 지정

SS

스택 세그먼트 레지스터

(Stack Segment Register)

16

프로그램 스택 세그먼트 시작 주소 저장

메모리 상에 스택 구현을 가능하게 함

ES, FS, GS

엑스트라 세그먼트 레지스터

(Extra Segment Register)

16 문자 연산과 추가 메모리를 지정하는 데 사용하는 여분의 레지스터

 

  • 세그먼트는 프로그램에 정의한 메모리 상의 특정 영역 (코드, 데이터, 스택 등을 포함)

  • 세그먼트는 메모리 대부분에 위치 가능, 실제 모드에서는 최대 64KB 크기까지 가능

  • 각 세그먼트의 주소를 지정하고, 특히 PC 계열에 사용하는 인텔 프로세서는 자신의 주소 지정 기능을 제공

  • 기본으로 CS, DS, SS 등 레지스터 세 개를 사용하며, ES나 FS, GS 레지스터는 여분으로 프로그램 크기나 필요에 따라 사용 가능

 

[그림 4] 세그먼트 레지스터 & 세그먼트 맵핑

 

CS 레지스터

  • 코드 세그먼트는 실행될 기계 명령을 포함

  • 코드 세그먼트의 시작 주소를 가리키며, 일반 프로그래밍에서는 이 레지스터를 직접 참조할 필요 X

 

DS 레지스터

  • 데이터 세그먼트는 프로그램에 정의된 데이터, 상수, 작업 영역을 포함

  • 데이터 세그먼트의 시작 주소를 가리키며, 프로그램은 참조하려는 데이터의 오프셋을 DS 레지스터에 저장된 주소 값에 더해 데이터 세그먼트 안의 데이터를 참조

 

SS 레지스터

  • 스택 세그먼트는 프로그램 실행 시, 실행 과정에서 필요 데이터나 연산 결과 등을 임시로 저장 / 삭제하는 목적 사용

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

 

ES / FS / GS 레지스터

  • ES 레지스터는 추가로 사용된 데이터 세그먼트 주소를 가리킴

  • 메모리 주소 지정을 다루는 문자 데이터 연산에 사용하는 데, 이때 EDI 레지스터와 함께 사용

  • FS와 GS 레지스터도 목적은 비슷, 실제로는 거의 사용 X

 

 

2-3-4. 포인터 레지스터

범주 80386 레지스터 이름 비트 용도

포인터 레지스터

(Pointer Register)

EBP

베이스 포인터

(Base Pointer)

32

SS 레지스터와 함께 사용

스택 안의 변수 값을 읽는 데 사용

ESP

스택 포인터

(Stack Pointer)

32

SS 레지스터와 함께 사용

스택 가장 끝 주소를 가리킴

EIP

명령 포인터

(Instruction Pointer)

32

다음 명령어 오프셋(상대 위치 주소)을 저장

CS 레지스터와 합쳐 다음에 수행할 명령 주소 형성

 

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

 

EBP 레지스터

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

  • 함수로 전달되는 지역 변수 등을 참조할 때 기준이 됨

  • ESP 레지스터와 함께 써서 스택 프레임을 형성하기도 함

  • 스택 프레임 기법은 함수가 호출될 때 ESP를 EBP에 저장하고 있다가 (mov %esp, %ebp) 모든 루틴이 끝나고 함수를 리턴하면 ESP 값을 돌려주어 스택 형성에 문제가 생기지 않도록 함

  • 실제 메모리 상 주소를 참조할 때 SS 레지스터와 함께 사용

 

ESP 레지스터

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

  • 스택은 높은 주소 > 낮은 주소로 이동하면서 데이터를 저장하므로, 스택이 확장되면 스택 포인터도 높은 주소에서 낮은 주소로 값 변경

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

 

EIP 레지스터

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

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

  • 실제 메모리 상 주소를 참조할 때 CS 레지스터와 함께 사용

 

 

1-3-5. 인덱스 레지스터

범주 80386 레지스터 이름 비트 용도

인덱스 레지스터

(Index Register)

EDI

목적지 인덱스

(Destination Index)

32 목적지 주소 값 저장
ESI

출발지 인덱스

(Source Index)

32 출발지 주소 값 저장

 

  • 데이터를 복사할 때 출발지와 목적지 주소를 각각 가리키는 레지스터로 사용

  • EDI, ESI가 있으며 오른쪽 16비트를 각각 DI, SI라고 함

 

 

ESI & EDI 레지스터

  • 주로 메모리의 한 영역(Source)에서 다른 영역(Destination)으로 데이터를 연속적으로 복사할 때 사용

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

 

 

1-3-6. 플래그 레지스터

범주 80386 레지스터 이름 비트 용도
플래그 레지스터 EFLAGS

플래그 레지스터

(Flag Register)

32 연산 결과 및 시스템 상태와 관련된 여러 플래그 값 저장

 

[그림 5] EFLAGS 레지스터의 플래그 맵핑

 

  • 크기가 32비트이며, 컴퓨터의 다양한 상태를 나타내는 비트를 포함

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

  • 위 그림에서 각 비트는 1(Set), 0(Clear) 값을 가지며, 비교 연산과 산술 연산을 포함하는 많은 명령이 플래그 상태를 변화시키고, 어떤 명령은 다음 행동을 결정하려고 플래그 상태를 점검함

 

 

상태 플래그 (State Flag)

  • 상태 플래그(0, 2, 4, 6, 7, 11비트)는 산술 명령(ADD, SUB, MUL, DIV) 결과를 반영

  • CF(Carry Flag / 비트 0) : 산술 연산 결과로 자리 올림이나 자리 내림이 발생할 때 세트된다. (STC, CLC 같은 어셈블리어 명령으로 값 수정 가능)

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

  • OF(Overflow Flag / 비트 11) : 부호가 있는 수의 오버플로가 발생하거나 MSB(Most Significant Bit)를 변경했을 때 세트(1)

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

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

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

 

제어 플래그 (Control Flag)

  • 제어 플래그인 DF(Direction Flag / 비트 10)는 스트링 명령(MOVS, CMPS, SCAS, LODS, STOS)을 제어

  • DF가 1이면 스트링 명령은 자동 감소함(스트링을 높은 주소에서 낮은 주소로 처리)

  • DF가 0이면 스트링 명령은 자동 증가(스트링을 낮은 주소에서 높은 주소로 처리)

  • STD / CLD 명령은 각각 DF 플래그가 세트(1)되고 클리어(0)됨

 

시스템 플래그 (System Flag)

  • 운영체제나 장치 드라이버를 제어

  • TF(Trap Flag / 비트 8) : 디버깅 할 때 'Single Step Mode'를 활성화하면 세트되고, 비활성화하면 클리어

  • IF(Interupt enable Flag / 비트 9) : 프로세서의 인터럽트 처리 여부를 제어하며, IF가 세트되어 있으면 시스템의 인터럽트를 처리하고 클리어 되어 있으면 시스템 인터럽트 무시

  • IOPL(I/O Privilege Level / 비트 12, 13) : 현재 실행하는 프로그램이나 태스크의 입출력 특권 레벨을 지시하며, 현재 실행 중인 프로그램이나 태스크가 I/O 주소 공간에 접근하려면 CPL이 I/O 특권 레벨보다 낮거나 같아야 함

  • 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 명령의 지원 유무 결정


# Reference

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B3283906872

[Web] HTTP 기본 개념

 

HyperText Transfer Protocol


(1) HTTP (HyperText Transfer Protocol)

  • 인터넷에서는 FTP, Telnet, HTTP, SMTP, POP 등 여러 프로토콜 사용 > 가장 많이 사용하는 프로토콜

  • 문서 간의 상호 연결 > 다양한 텍스트, 그래픽, 애니메이션을 화면에 보여주고, 사운드를 재생해 줌

  • 전 세계의 수많은 정보를 탐색하기 위해 HTTP 이용

  • RFC 1945 문서 > HTTP는 0.9 버전부터 사용 > 단순히 읽기 기능만 지원

[그림1] HTTP 이용 > 서버에 연결

 

1. 먼저 클라이언트가 웹 브라우저를 이용하여 서버에 연결 요청 > 서버는 요청한 클라이언트에 대한 서비스 준비

 

2. 클라이언트가 읽고자 하는 문서를 서버에 요청 > 서버는 그 문서를 전달 > 연결 종료

 

  • 위 그림의 기본 연결은 HTTP 버전에 관계 없이 동일

  • 기능이 많이 부족했던 HTTP 0.9 버전은 오래 사용 X

  • 현재 웹에서 주로 사용하는 HTTP는 1.0과 1.1버전

  • HTTP 1.0의 메소드는 GET / HEAD / POST 방식 지원

  • HTTP 1.1의 메소드는 OPTIONS / GET / HEAD / POST / PUT / DELETE / TRACE / CONNECT 방식 지원

 

1-1. HTTP & HTTPS

  • HTTP 프로토콜은 데이터가 네트워크 장비 통과 시, 암호화 되지 않은 단순한 TCP 사용 > 네트워크에 잠입한 공격자가 중간에 정보 가로채기 가능

  • HTTPS(HTTP over Secure Socket Layer)는 애플리케이션 계층 프로토콜 > SSL(Secure Socket Layer)을 이용, 클라이언트와 서버 사이에 주고 받는 정보를 보호하는 데 사용

  • HTTPS는 공격자가 중간에 스니핑 하기 어렵게 만듦 > 그러나 웹 애플리케이션 해킹의 주요 원인인 사용자 입력 값에 대한 검증 X

 

 

1-1-1.Request (웹 서버에 데이터를 요청하는 패킷)

[그림 2] Request

 

일반적으로 첫 번째 줄에는 다음과 같은 내용이 들어간다.

 

  • HTTP 전송 방법 : 웹 서버로부터 자료를 가져오는 기능인 GET 사용 > 별도의 메시지 보기를 필요 X

  • 요청된 URL : 웹 서버 자료 요청 시에 사용하는 경로

  • HTTP 버전 : 인터넷에서 가장 일반적으로 사용되는 버전은 1.0 / 1.1 > 대부분 브라우저는 초깃값으로 1.1 사용 (1.1은 1.0과 달리 요청이 강제적)

 

1-1-2. 웹 해킹 관련 요소

 

서버가 클라이언트에 전송한 인자 값에 추가 정보를 보낼 때 사용

 

 URL 주소에 나타난 호스트명을 자세하게 나타내기 위해 사용

 

URL 주소에 나타난 호스트명을 자세하게 나타내기 위해 사용

 

 GET 방식은 다음과 같이 요청 데이터에 대한 인수를 URL을 통해 웹 브라우저로 전송

>  링크 주소만 알아도 연결된 페이지의 내용 확인 가능

 

 

1-1-3. POST 메소드

  • URL에 요청 데이터를 전달하지 않고, HTTP의 헤더 영역이 아닌 보디 영역에 소켓을 이용하여 데이터를 전송한다.

  • 위의 '?hi_id=363' 부분이 없으며, URL을 통해 인수값을 전송하지 않아 다른 사람이 링크를 통해 해당 페이지를 볼 수 없다.

  • 보내려는 인자 값이 URL을 통해 노출되지 않아 보안 측면에서 GET 방식보다 안전한 편이다.

일반 게시판 경우, 목록이나 글을 보는 화면에는 접근 자유도 부여를 위해 GET 방식을 사용하고, 글을 저장 / 수정 / 삭제하는 작업 시에는 보안을 위해 POST 방식을 사용한다.

 

다음은 POST 메소드의 예이다.

 

[그림 3] POST 메소드 예

 

 

그 외 Request 메소드

  • HEAD : 서버 쪽 데이터를 검색, 요청하는 데 사용

  • OPTIONS : 자원에 대한 요구-응답 관계에서 관련 선택 사항에 대한 정보 요청 시 사용 > 클라이언트는 어느 것을 선택할지 결정 가능, 자원 관련 필요 사항 결정과 서버의 수행 능력도 볼 수 있음

  • PUT : 메시지 포함 데이터를 지정한 URI(Uniform resource identifier) 장소에 지정 이름으로 저장

  • DELETE : URI에 지정되있는 자원을 서버에서 지울 수 있게 함

  • TRACE : 요구 메시지의 최종 수신처까지 루프백 검사용으로 사용 > 클라이언트가 보내는 요구 메시지가 거쳐 가는 프록시 & 게이트웨이 중간 경로와 최종 수신 서버에 이르는 경로 알아낼 때 사용

 

1-2-1. Response (클라이언트가 보낸 Request의 응답 패킷)

  • Response 패킷에 담긴 주요 내용 > 서버에서 쓰이는 프로토콜 버전, HTTP 상태 코드 등이며, 전달 데이터 형식과 데이터 길이 등과 같은 추가 정보 포함

  • 헤더 정보 뒤에 빈 줄이 하나 들어감 > 그 다음 실제 데이터가 전달(실제 데이터는 HTML / 그림 파일) > 데이터 전달 종료 시에 서버 연결을 끊음

 

[표 1] HTTP 일반적인 상태코드

상태 코드 함축적 의미 설명
100번대 정보 전송

임시 응답을 나타내는 Status-Line과 선택적인 헤더로 이루어지고, 빈 줄로 끝을 맺음

HTTP 1.0까지는 계열에 대한 어떤 정의도 이루어지지 않았기 때문에 시험용 외에 서버 쪽의 추가 응답이 없음

200번대 성공 클라이언트 요청이 성공적 수신되어 처리 되었음을 의미
300번대 리다이렉션 클라이언트 요구 사항 처리를 위해 다른 곳에 있는 자원이 필요하다는 것을 의미
400번대 클라이언트 에러 클라이언트가 서버에 보내는 요구 메시지를 완전히 처리하지 못한 경우처럼 클라이언트 측에서 오류 발생을 의미
500번대 서버 에러 서버 자체에서 생긴 오류 상황이나 클라이언트의 요구 사항을 제대로 처리할 수 없을 때 발생

 

[그림 4] 상세 상태 코드

 

 

[표 2] HTTP 중요 상태 코드

상태 코드 의미
200 OK 클라이언트 요청이 성공
201 Created 클라이언트 PUT 요청이 성공적
301 Moved Permanently 브라우저 요청을 다른 URL로 항시 전달

다른 URL 정보는 Location 헤더에 나타남
302 Moved Temporarily 브라우저 요청을 임시 URL로 변경

Location 헤더에 임시로 변경한 URL 정보를 적음

클라이언트가 다음에 같은 요청 시, 기존 URL로 돌아감
304 Not Modified 브라우저가 서버 요청 자료에 대해 서버는 클라이언트 내에 복사된 캐시를 사용하면 된다를 의미

서버는 If-Modified-Since와 If-None-Match 요청 헤더를 사용하여 클라이언트가 가장 최근 자료를 가지고 있는지 확인
400 Bad Request 클라이언트가 서버에 잘못된 요청을 했다를 의미

예로, 클라이언트가 URL 주소 중간에 빈 공간을 넣는 등 부적절한 방법으로 서버 요청했을 시, 해당 응답 코드를 받음
401 Unauthorized 서버가 클라이언트 요청에 대해 HTTP 인증 확인을 요구하는 것을 의미
403 Forbidden 클라이언트 요청에 대한 접근 차단
404 Not Found 클라이언트가 서버에 요청한 자료가 존재하지 않음
405 Method Not Allowed 클라이언트가 요청에 이용한 메소드는 해당 URL에 지원이 불가능
413 Request Entity Too Large 클라이언트가 요청한 보디가 서버에서 처리하기에 너무 크다는 것을 의미
500 Internal Server Error 서버가 클라이언트 요청을 실행할 수 없을 때 발생

SQL 인젝션 취약점 확인 여부에 응용

 

HTTP 1.1은 계층적 프록시, 캐시, 지속적인 연결 필요성, 가상 호스트 등 영향 측면에서 HTTP 1.0에 비해 많이 개선되었다.

 

요즘 웹에서는 텍스트로만 된 문서를 찾아보기 어렵고 대부분 그림, 음악, 동영상 등이 함께 포함된다.

 

 

HTTP 1.0을 이용 > index.html 읽기

HTTP 1.0에서는 문서에 몇 개의 그림이 있든 상관없이 텍스트가 저장된 HTML 문서를 먼저 전송받은 후 연결을 끊고 다시 연결하여 그림을 전송받는다.

 

HTTP 1.1을 이용 > index.html 읽기

 

HTTP 1.1에서는 연결 요청이 계속 들어오면 HTML 문서를 받은 후 바로 그림 파일을 요청한다.


# Reference

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B2924064192

[DataBase] 데이터베이스 모델

 

데이터베이스


(1) 데이터베이스 모델

  • 데이터가 어떻게 저장, 관리, 처리되는지 정의한 논리적 구조

  • 가장 대표적인 모델은 '관계형 모델'

 

1-1. 관계형 모델

  • 사용이 쉽다는 점에서 가장 널리 쓰이는 DBMS 모델

  • Row와 Column으로 구성된 테이블 구조로, SQL이라는 언어를 통해 조작

  • 테이블을 표라고 생각했을 때 Row는 가로줄, Column은 세로줄을 의미

  • Row는 레코드라고 부르기도 함

[그림 1] 테이블 구조

 

테이블은 여러 개의 Row와 Column으로 구성, 각각 Row는 레코드(Record)라고 하며 Object(객체) 또는 Entity라고도 한다.

 

필드(field)는 테이블에서 Column에 대응하며 Attribute(속성)라고도 한다.

 

테이블은 하나가 아닌 여러 개 존재 가능, DBMS 중 관계형 모델을 기반으로 한 RDBMS(Relational DataBase Management System, 관계형 데이터베이스 관리 시스템)는 여러 테이블을 조합하여 원하는 데이터를 찾을 수 있도록 하여 좀 더 복잡한 데이터 처리 요구를 수행한다.

 

이처럼 여러 개의 테이블이 존재, 그들 사이의 관계를 식별하기 위한 것이 키(key)라고 한다.

 

키는 테이블에서 고유하게 식별할 수 있는 Row이다.

 

 

후보키

  • 각 행을 유일하게 식별할 수 있는 속성(Column)

  • 모든 테이블은 반드시 하나 이상의 후보 키를 가짐 > 유일성과 최소성 만족

  • 쉽게 말해, 레코드를 유일하게 구별할 수 있는 Column들의 부분 집합

cust_num cust_id cust_birth cust_country
001 origintaste 1999-11-19 Korea
002 cork 2000-02-12 Korea
003 daniel 2001-04-05 USA
004 Kelvin 2002-03-05 UK

위 테이블을 보면 4개의 Column 중에서 중복되지 않은 값이 나타나는 것은 cust_num, cust_id, cust_birth로 각 레코드를 유일하게 식별하는 후보키가 될 수 있다.

 

하지만 cust_country의 경우 중복되는 값이 존재하기 때문에 후보키가 될 수 없다.

 

만약 cust_birth에 동일 생일을 가진 고객의 레코드 정보 추가 시, cust_birth 또한 후보키가 될 수 없다.

 

 

기본키(주 키)

  • 후보키 중에서 선택한 것으로 테이블의 주 키가 됨

  • 기본키로 정의된 Column은 Null 값을 가질 수 없고, 같은 값이 중복으로 저장될 수 없음

  • 후보키들을 조합하거나 그들 중 하나를 선택하여 기본키 만들기 가능

  • 후보키들 중 일부와 다른 Column을 조합하여 기본키 만들기 가능

 

대체키(보조키)

  • 후보키가 둘 이상일 때 기본키를 제외한 나머지를 대체키라고 함

  • cust_num, cust_id, cust_birth에서 cust_num을 기본키로 정의하였다면 나머지 cust_id와 cust_birth가 대체키가 됨

 

슈퍼키

  • 한 테이블 내에 있는 Column들의 집합으로 구성된 키

  • 유일성 만족 / 최소성 불만족

  • 슈퍼키를 구성하는 Column들이 조합되어야 각 레코드 구별 가능

  • 흩어진 Column 몇몇으로는 각 레코드 구별 X

  • cust_id와 cust_country를 조합 > 키를 만들 시, 둘이 뭉쳐있어야만 테이블 각 레코드 유일하게 식별 가능 / cust_id가 떨어진 cust_country 혼자로는 테이블 레코드 유일하게 식별 X

 

외래키

  • 한 테이블이 다른 테이블 참조 > 그들의 관계를 표현하는 키

  • 외래키로 지정 > 참조 테이블의 기본키에 없는 값은 입력 X

 

[그림 2] 기본키와 외래키

 

customer_information의 테이블에서 데이터 중복이 없고 각 레코드를 고유하게 식별하는 Column은 customer_id으로 해당 테이블의 기본키가 된다.

 

order_information 테이블 경우 기본키가 될 수 있는 Column은 order_id이다.

 

두 테이블을 연결해주는 Column은 customer_information에서의 customer_id, order_information에서의 cust_id이다.

 

따라서 cust_id는 order_information의 외래키가 된다.

 

위와 같이 관계형 데이터베이스에서 각각의 테이블들은 외래키로 참조할 수 있다.

 

※ 관계형 모델이 지니는 위와 같은 특징으로 1대1 또는 다대다 관계의 데이터를 표현하기에 좋다.


1-2. 네트워크 모델

[그림 3] 네트워크 모델

  • 70년대에 주로 사용하였던 데이터 모델 > 계층적 데이터 모델과 비슷한 구조를 지님

  • 계층적 DBMS는 자식이 여러 부모를 갖는 것이 불가능 > 네트워크 모델은 가능

  • 좀 더 복잡한 다대다 데이터 관계를 다룰 수 있음

  • 계층적 DBMS가 트리구조면, 네트워크 모델은 그래프 구조

  • 데이터 독립성, 데이터 무결성, 데이터 조작면에서 보완


1-3. 계층적 모델

 

[그림 4] 계층적 모델

  • 데이터들이 트리 구조로 조직 > 부모-자식 관계 형성

  • IBM의 IMS(Information Management System)와 같은 초기 DBMS 메인 프레임 사용

  • 부모-자식 관계가 명확한 상황을 제외, 활용도가 높지 않음


1-4. 객체 지향형 모델

 

[그림 5] 오브젝트와 클래스

  • 객체 지향 프로그래밍(OOP, Object Oriented Programming)과 관계형 데이터베이스 특징을 결합한 형태

  • 데이터를 오브젝트와 클래스로 표현 > 오브젝트는 실세계의 개체, 클래스는 오브젝트의 집합

  • 객체 지향형 데이터베이스에서 모든 개체 > 오브젝트

  • 오브젝트는 property(상태)와 method(행위)로 구성, 각각의 오브젝트는 고유 식별자를 지님

 

Customer라는 오브젝트가 있을 때, 위 그림에서 Customer의 상태를 설명하는 Property에는 고객 ID, 이름, 주소, 이메일 주소가 있다.

 

그리고 Customer 오브젝트가 수행할 수 있는 행위, Behavior로는 아이템 검색, 선호 목록, 카트에 넣기, 지불하기 등이 있다.

 

Property와 Behavior를 아울러 오브젝트라 하고, 이 오브젝트 들이 여럿 모여 클래스를 이룬다.

 

오브젝트와 클래스 외에 상속, 캡슐화 등의 객체 지향 프로그래밍 특징을 지니고 있으며, 관계형 데이터베이스와 비교하면 널리 쓰이지 않는 모델이다.


# Reference

 

http://www.yes24.com/Product/Goods/87579830

'DB' 카테고리의 다른 글

[DataBase]DCL (데이터 제어어)  (0) 2020.03.20
[DataBase] DML (데이터 조작어)  (0) 2020.03.20
[DataBase] DDL (데이터 정의어)  (0) 2020.03.20
[DataBase] DBMS(Database Management System)  (0) 2020.03.18
[DataBase] 데이터베이스 기초  (0) 2020.03.06

Network Forensic #37 (Sans Network Forensic [Puzzle 8] #7)

 

네트워크 포렌식 37번 문제

 

Sans Network Forensic 마지막 정리이다.

 

우선 1번 ~ 6번 문제 풀이 때 사용했었던 필수 도구인 Wireshark로 해당 파일을 열어준다.

 

Wireshark : 오픈 소스 패킷 분석 프로그램으로 pcap을 이용하여 패킷을 잡아내는 것이 주요 기능

 

다운로드 사이트 : https://www.wireshark.org/download.html

 

Wireshark · Download

Riverbed is Wireshark's primary sponsor and provides our funding. They also make great products that fully integrate with Wireshark. I have a lot of traffic... ANSWER: SteelCentral™ AppResponse 11 • Full stack analysis – from packets to pages • Rich perfor

www.wireshark.org

이번 문제는 Joe가 사용하는 WEP 패스워드를 구하는 문제이다.

 

이 문제는 특별하게 정리할 내용이 없다..

 

그 이유는, 앞에 5번 문제에서 풀이한 aircrack-ng 도구를 통해 WEP 패스워드를 이미 구했기 때문이다.

 

[그림 1] WEP 패스워드 확인

 

위 화면에서 보이는 것은 WEP 패스워드이다.

 

플래그로 입력해주면 문제 해결이 가능하다..!


Network Forensic #38 (Sans Network Forensic [Puzzle 8] #8)

 

네트워크 포렌식 38번 문제

 

문제에서 설명하는 WAP의 관리자는 Joe이다. 

 

Joe의 MAC 주소(00:11:22:33:44:55)는 문제에서 알려주었으니 Joe의 MAC 주소를 통해 Joe의 IP 주소를 확인할 수 있다.

 

Wireshark의 필터 기능을 이용해서 Joe의 MAC 주소로 통신한 패킷을 확인하면 DHCP를 통해 IP를 할당 받은 것을 확인 가능하다.

 

[그림 2] Joe의 IP 주소 확인

 

해당 DHCP 패킷을 통해 Joe의 IP 주소는 192.168.1.100이라는 것을 확인할 수 있다.

 

이제 NetworkMiner 도구를 사용해보자.

 

NetworkMiner : 네트워크 포렌식 분석 도구로써 사용하는 운영체제나 세션, 호스트 이름, 열려있는 포트 정보 탐지 기능 등 상세한 정보를 얻을 수 있는 도구

 

다운로드 사이트 : https://www.netresec.com/index.ashx?page=NetworkMiner

 

NetworkMiner - The NSM and Network Forensics Analysis Tool ⛏

Network Miner is a network forensics tool for analyzing network traffic

www.netresec.com

 

[그림 3] Joe Username과 Password

 

NetworkMiner를 사용해 [Credentials] 탭을 확인해보면 Joe의 IP 주소인 192.168.1.100에서 192.168.1.1로 접속한 Username과 Password를 위 화면처럼 확인할 수 있다.

 

[그림 4] NetworkMiner Parameters 확인

 

또한 [Parameters] 탭을 통해 IP 주소 192.168.1.100에서 192.168.1.1로 보내지는 패킷을 확인해보면 Authorization이라는 Parameter name을 확인할 수 있으며 Parameter value 값에 base64로 인코딩 된 문자열을 확인할 수 있다.

 

따라서 username과 password를 플래그로 입력해주면 문제 해결이 가능하다.


Network Forensic #39 (Sans Network Forensic [Puzzle 8] #9)

 

네트워크 포렌식 39번 문제

 

이번 문제는 WAP의 관리 암호가 무엇으로 변경되었는지 구하는 문제이다.

 

문제에서 passphrase라는 단어가 이번 문제의 결정적 힌트이다.

 

Wireshark의 찾기 기능을 이용해서 String 검색으로 Packet details에서 passphrase 단어를 찾으면 POST 패킷 하나를 확인할 수 있다.

 

[그림 5] passphrase 값 확인

 

passphrase 값에 hahp0~ 이라는 값이 들어가 있는 것을 확인할 수 있으며, 플래그로 입력해주면 된다.


# Reference

 

http://www.yes24.com/Product/Goods/59156934

Network Forensic #34 (Sans Network Forensic [Puzzle 8] #4)

 

네트워크 포렌식 34번 문제

 

앞에서 주어진 pcap 파일로 계속 풀어나가는 문제이다.

 

앞서 살펴본 3번 문제는 WEP으로 암호화 된 데이터 프레임이 얼마나 존재하는지에 대해 물어봤고, 4번 문제의 경우 WEP으로 암호화하기 위한 초기화 벡터(iv)에 대한 값이 중복되지 않고, 총 몇 개가 있는지 물어보는 문제이다.

 

앞에서 살펴본 도구와 똑같이 Wireshark로 분석을 진행한다.

 

Wireshark : 오픈 소스 패킷 분석 프로그램으로 pcap을 이용하여 패킷을 잡아내는 것이 주요 기능

 

다운로드 사이트 : https://www.wireshark.org/download.html

 

Wireshark · Download

Riverbed is Wireshark's primary sponsor and provides our funding. They also make great products that fully integrate with Wireshark. I have a lot of traffic... ANSWER: SteelCentral™ AppResponse 11 • Full stack analysis – from packets to pages • Rich perfor

www.wireshark.org

초기화 벡터 값(iv)은 패킷 세부 내용을 통해 확인할 수 있다.

 

[그림 1] 초기화 벡터 확인

 

Wireshark 필터를 통해 초기화 벡터를 가진 패킷들을 필터링해 볼 수 있지만, 중복된 초기화 벡터를 가진 패킷을 제거하지 못한다.

 

그렇기 때문에 문제에서 요구하는 답을 찾을 수 없다.

 

이런 경우에는, 처리된 패킷 중에서 보고자하는 패킷들만 볼 수 있도록 자체 필터를 사용해서 해결이 가능하다.

 

따라서 Tshark 도구의 자체 필터 기능을 사용해서 캡처된 패킷 중에 보고자하는 패킷들만 선별해서 볼 수 있다.

 

Tshark : Wireshark 도구의 CLI 버전이라고 할 수 있으며, 리눅스 환경에서 사용 가능

 

설치 방법 : sudo apt-get install Tshark 입력

 

 

[그림 2] Tshark 필터 적용 내용 및 결과

 

리눅스에서 Tshark를 실행시켜 패킷 중에서 보고자하는 패킷들만 선별해서 보는 것이 가능하다.

 

※ 해당 문제에서 사용한 Tshark 필터 사용 옵션

  • -r : pcap 파일 읽어오기

  • -Y : Wireshark 디스플레이 필터 사용

  • -T fields : 각 field를 사용자 정의대로 출력

  • -e : 출력하고자 하는 필드 지정

  • sort -u : 필드 내 값을 제거하고 유일한 값만 출력

  • wc -l : 특정 파일의 행의 개수만 출력

 

Tshark를 사용해 필터 적용한 결과, 위 화면과 같이 결과 값이 출력되는 것을 확인할 수 있다.


Network Forensic #35 (Sans Network Forensic [Puzzle 8] #5)

 

네트워크 포렌식 35번 문제

 

이번에는 2계층 공격에 대한 MAC 주소를 구하는 문제이다.

 

네트워크 2계층에서의 공격을 알아보기 위해 aircrack-ng와 airdecap-ng 도구를 사용해서 무선랜 패킷의 암호화를 풀어 분석하였다.

 

aircrack-ng : 무선랜 패킷 파일에 대한 종합 분석 도구이며, Monitoring / Attacking / Testing / Cracking 등 다양한 기능을 사용할 수 있다. (airdecap는 같은 폴더에 존재하며, 복호화 도구이다.)

 

다운로드 사이트 : https://www.aircrack-ng.org/

 

Aircrack-ng

This release brings a ton of improvements. Along with bug fixes and improvements for a lot of tools, we have huge improvements under the hood thanks to code cleanup, deduplication, and reorganization of the source code. We also improved our buildbot, and a

www.aircrack-ng.org

 

[그림 3] aircrack-ng (GUI) 도구 실행

 

원래 기본 도구는 CLI 형태지만, 편리성을 위해 GUI 도구로 실행하였다.

 

문제 파일을 선택한 다음, Launch 버튼을 누르면 분석을 시작한다.

 

[그림 4] aircrack-ng를 사용해 암호화 키 확인

 

분석 결과, 암호화 키를 얻을 수 있다.

 

이제 airdecap-ng 도구를 실행하여 복호화하자.

 

[그림 5] airdecap-ng (GUI) 도구 실행

 

위와 똑같이 파일을 선택하고, 얻은 암호화 키를 입력한 다음 Launch 버튼을 눌러 분석을 진행한다.

 

[그림 6] airdecap-ng로 복호화

 

다음과 같은 결과가 나오면서, 복호화 된 파일이 생성되었다.

 

이제 복호화 된 pcap 파일을 Wireshark를 통해 확인해보자.

 

[그림 7] ARP 패킷 확인

 

복호화 된 pcap 파일을 확인해보면 ARP 프로토콜이 매우 많이 발생한 것을 확인할 수 있다.

 

ARP는 2계층에 속하는 통신 프로토콜이므로 ARP를 이용한 공격으로 추측할 수 있다.

 

따라서 필터를 이용해 ARP 패킷만 확인해보면 위 화면과 같이 계속해서 한 개의 호스트에서 지속적인 ARP 패킷을 보내는 것을 확인할 수 있다.

 

[그림 8] MAC 주소 확인

 

지속적인 ARP 패킷을 보내는 호스트의 MAC 주소는 다음과 같이 찾을 수 있다.

 

화면에 보이는 MAC 주소를 플래그로 입력해주면 문제 해결이 가능하다.


Network Forensic #36 (Sans Network Forensic [Puzzle 8] #6)

 

네트워크 포렌식 36번 문제

 

이 문제도 4번 문제와 같이 초기화 벡터를 구하는 문제이다.

 

문제 4번과 같은 방식으로 Tshark 도구를 통해 플래그를 구할 수 있다.

 

> 공격자 측면

[그림 9] 공격자 측면 Tshark 필터 적용 내용 및 결과

 

> 공격자 이외의 측면

[그림 10] 공격자 이외의 측면 Tshark 필터 적용 내용 및 결과

 

플래그에 대한 값은 공격자와 공격자 이외의 초기화 벡터를 더한 값이 된다.

 

따라서 위 화면의 2개의 값을 더하면 플래그를 구할 수 있다.


# Reference

 

http://www.yes24.com/Product/Goods/59156934

+ Recent posts