TCP와 UDP를 이용한 스캔은 시스템 자체의 활성화 여부가 아닌 포트 스캔을 한다. 물론 포트가 열려 있다면 해당 시스템은 활성화되어 있는 것이다.


1. TCP Open 스캔


TCP를 이용한 가장 기본적인 스캔으로는 Open 스캔이 있다. 먼저 동작하리라고 예상하는 포트에 세션을 생성하기 위한 SYN 패킷을 보낸다. 포트가 열린 경우 서버에서 SYN + ACK 패킷이 돌아오고, 공격자는 다시 ACK 패킷을 보낸다.



(a)에서 볼 수 있듯이 Open 스캔은 3-way-handshake 과정을 모두 거친다. 따라서 상대방 시스템에 로그가 남는다. 포트가 닫혀 있는 경우에는 (b)처럼 공격자가 SYN 패킷을 보내면 RST+ACK 패킷이 돌아오고, 공격자는 아무 패킷도 보내지 않는다.

Open 스캔 중에는 Reverse Ident라는 방법이 있다. 이 방법은 세션을 성립한 상태에서 원격지 서버에서 데몬을 실행하고 있는 프로세스의 소유권자를 확인하기 위한 것이다.


* 데몬 : 시스템의 사용자 인터페이스에는 나타나지 않지만, 서비스를 요청하면 이에 반응할 수 있도록 항상 실행되고 있는 프로그램을 말한다.



위 그림에서 확인할 수 있듯이 Reverse Ident 스캔은 세션을 성립한 후에 113번 포트를 연다. 113번 포트는 사용자 인증을 위해 사용되지만, 이 서비스는 보통 중지되어 있다.



2. 스텔스 스캔


스텔스 스캔은 세션을 완전히 성립하지 않고 공격 대상 시스템의 포트 활성화 여부를 알아내기 대문에 공격 대상 시스템에 로그가 남지 않는다. 따라서 공격 대상의 시스템 관리자는 어떤 IP를 가진 공격자가 자신의 시스템을 스캔했는지 확인할 수가 없다. 스텔스 스캔은 이처럼 단순히 로그를 남기지 않는 것만이 아니라, 공격 대상을 속이고 자신의 위치를 숨기는 스캔 모두를 통칭한다.

TCP Half Open 스캔이 대표적이다. 스캔의 시작은 Open 스캔과 같다. 먼저 SYN 패킷을 보낸다. 포트가 열린 경우 서버는 SYN+ACK 패킷을 보내고 공격자는 즉시 연결을 끊는 RST 패킷을 보낸다. 포트가 닫힌 경우는 Open 스캔과 같다.



스텔스 스캔의 다른 형토로 FIN 패킷을 보내는 방법이 있다. 포트가 열린 경우에는 응답이 없고, 포트가 닫힌 경우에만 RST 패킷이 되돌아 온다.



NULL과 XMAS 패킷을 보내는 때도 이와 같은 결과를 얻을 수 있다. NULL은 플래그 값을 설정하지 않고 보낸 패킷을 말하고, XMAS는 ACK, FIN, RST, SYN, URG 플래그 모두를 설정하여 보낸 패킷을 말한다. XMAS 패킷은 크리스마스 선물처럼 푸짐하게 모두 준다는 의미로 붙여진 이름이다.


또 다른 방법으로 ACK 패킷을 보내는 방법이 있다. 이때 포트 하나가 아니라 모든 포트에 ACK 패킷을 보낸다. ACK 패킷을 받은 시스템은 이에 대한 RST 패킷을 보내고 공격자는 RST 패킷의 TTL 값과 윈도우의 크기를 분석한다. 포트가 열린 경우 TTL 값이 64 이하인 RST 패킷이 돌아오고, 윈도우가 0이 아닌 임의의 값을 가진 RST 패킷이 돌아온다. 포트가 닫힌 경우에는 TTL 값이 운영체제에 따라 일정하게 큰 값이며, 윈도우의 크기가 0인 RST 패킷이 돌아온다.


TCP 패킷을 이용한 스캔 역시 ICMP 스캔처럼 모든 시스템에 동일하게 적용되는 것은 아니다. 이러한 스캔 방법은 최근 시스템에는 거의 적용되지 않는다고 생각해도 될 만큼 많이 알려졌다. 하지만 SYN 패킷을 이용한 스캔 방법은 세션을 성립하기 위한 정당한 패킷과 구별할 수 없기 때문에 아직도 유효하며 아주 효과적이다.


TCP를 이용한 또 다른 스텔스 스캔 방법으로는 TCP 단편화가 있다. 이 방법은 크기가 20바이트인 TCP 헤더를 패킷 두 개로 나누어 보내는 것이다. 첫 번째 패킷에 출발지 IP주소와 도착지 IP주소를, 두 번째 패킷에 스캔하고자 하는 포트 번호가 있는 부분을 보낸다. 첫 번째 패킷은 TCP 포트에 대한 정보가 없기 때문에 방화벽을 통과하고, 두 번째 패킷은 출발지 주소와 목적지 주소가 없어 방화벽을 지날 수 있다.

'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] 스푸핑 공격  (0) 2017.04.30
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] ICMP스캔  (0) 2017.04.30
[Network Hacking] DNS( Domain Name System )  (0) 2017.04.24
[Network Hacking] OSI 7계층  (0) 2017.04.23
Posted by Imp3rio

1. 스캔에 대한 이해


스캔은 서비스를 제공하는 서버의 작동 여부와 서버가 제공하는 서비스를 확인하기 위한 작업이다. TCP 기반의 프로토콜은 기본적으로 요청을 보내면 응답을 전달해 준다. 스캔은 ㄴ방화벽과 IDS( 침입 탐지 시스템 )을 우회하기 위해 발전한 스캔은 종류가 무척 다양하다.



2. Ping


서버의 동작 여부를 알아보는 가장 기본적인 스캔은 ping을 이용하는 것이다. 검사하고자 하는 네트워크에서 동작하는 서버를 찾아내는 일은 공격 대상 네트워크에서 공격 대상의 IP 주소를 결정하는 데 무척 중요하다.

ping은 네트워크와 시스템이 정상적으로 작동하는지 확인하기 위한 간단한 유틸리티로, ICMP를 사용하며, 기본적으로 TCP/IP 네트워크에서 사용된다.

넷웨어와 같이 다른 프로토콜 체제를 쓰는 네트워크에서는 ping 유틸리티도 다르며, 모든 네트워크에 ping이 있는 것은 아니다. 


* 넷웨어 : 가장 광범위하게 설치되었던 노벨의 네트워크 서버 운영체제다. 초기 넷웨어는 대기업이나 중소기업용 근거리 통신망에서 노벨의 제품 간 통신에 주로 사용했다. 그후 대규모 네트워크의 필요성이 커지자 새롭게 설계되었다.

* ICMP : 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 오류를 알려주는 프로토콜이다.


3. ICMP 스캔


ICMP를 이용해 공격 대상 시스템의 활성화 여부를 알아보는 방법은 다음 네 가지다.


Ⅰ Echo Request( Type 8 )와 Echo Reply( Type 0 ) 이용하기

Ⅱ Timestamp Request( Type 13 )와 Time Reply( Type 14 ) 이용하기

Ⅲ Information Request( Type 15 )와 Information Reply( Type 16 ) 이용하기

Ⅳ ICMP Address Network Request( Type 17 )와 ICMP Address Network Reply( Type 18 ) 이용하기


가장 일반적인 방법은 Ⅰ을 이용하는 것이며, 일반적으로 옵션 없이 ping 유틸리티를 사용하면 된다.




① ICMP 패킷의 길이를 나타내는 것으로, 운영체제마다 보내는 바이트의 길이가 다르다. 유닉스와 리눅스와 같은 시스템은 위 그림처럼 대부분 56바이트 ICMP Echo Request 패킷을 생성하여 보낸다. 윈도우 시스템은 32바이트이다. 각 바이트의 내용은 의미없는 알파벳으로 채워진다.

② 공격 대상에서 보내온 ICMP Echo Reply 패킷의 크기이다.

③ TTL( Time To Live ) 값으로, 라우팅 정보가 잘못되어 패킷이 네트워크를 무한대로 돌아다니지 않도록 최초 라우터를 제외한 라우터를 지날 때마다 값이 1씩 줄어든다. TTL 값도 운영체제에 따라 조금씩 다르다.

운영체제 

 ICMP Request 패킷 TTL 

 ICMP Reply 패킷 TTL 

 리눅스 커널 2.6 

 64

 64

 리눅스 커널 2.2 - 2.4

 255

 64

 리눅스 커널 2.0

 64

 64

 우분투

 128

 128

 FreeBSD

 255

 255

 솔라리스

 255

 255

 HP-UX

 255

 255

 윈도우 95

 32

 32

 윈도우 98

 128

 128

 윈도우 NT

 128

 128

 윈도우 서버 2003, 2008, 2012

 128

 128

위도우 10 

 64

 64

줄어든 TTL 값으로 원격지 시스템이 라우터 몇 개를 거쳐서 도달했는지 알 수 있다. 세계 어느 곳에 있는 시스템일지라도 20여개 이상을 지나는 경우는 드물다. 보통 기본 TTL이 64라고 생각하는데, TTL 값이 55라면 자신의 경계라우터를 포함해 라우터 12개를 지나 목표 시스템에 도달한 것이다.

④ Echo Request 패킷을 보낸 후 Reply 패킷을 받기까지의 시간이다.

⑤ Request 패킷의 개수, Reply 패킷의 개수, 손실된 패킷의 개수를 보여준다.

⑥ Request 패킷을 보낸 후 Reply 패킷이 오기까지의 시간 정보를 알려준다.


라우터나 방화벽 등에서 ICMP Echo Request 패킷을 막는 경우가 있는데, 이때 이용할 수 있는 방법으로 세 가지를 생각할 수 있다.


첫 번째 방법은 Ⅱ를 이용하는 것이다. Timestamp Request 패킷은 원격지 시스템의 현재 시각을 알아보기 위한 것이다. 송신자가 패킷을 보낸 시각과 수신자가 패킷을 받은 시각, 송신자가 수신자에게 전송하는 동안 걸린 시간으로 공격 대상의 현재 시스템 시각을 알 수 있다. 하지만 Timestamp Request 패킷에 Reply 패킷을 돌려보내는 시스템이 시간만 알려준다고 생각할 수는 없다. 상대 시스템의 Reply 패킷이 돌아온다는 것은 상대 시스템이 활성화 되어 있음을 말하는 것이다.


두 번째 방법은 Ⅲ을 이용하는 것이다. 원래 Information Request와 Reply는 메인 프레임의 단말기처럼 부팅할 때 자신의 디스크가 없는 시스템이 스스로 IP를 설정할 수 있도록 하는 패킷으로, 자신이 네트워크를 찾기 위해 개발되었다. 기본 목적은 RARP, DHCP와 같은 프로토콜과 같지만 다른 프로토콜을 이용한 방법에 비해 원시적이라고 할 수 있다.


마지막으로 Ⅳ를 이용하는 것이다. 이 패킷 역시 Information Request 패킷처럼 단말기가 부팅될 때 자신이 속한 네트워크의 서브넷 마스크를 알기 위해 보낸다.


ICMP 패킷을 이용한 앞의 세 가지 방법이 모든 운영체제에서 작동하지는 않는다. 운영체제에 따라 일부만 지원하므로 지원 여부를 살펴보면 다음과 같다.


 운영체제 

 Information 

 Timestamp 

 Address Mask 

 리눅스 커널 2.2 - 2.6 

 X 

 O 

 X 

 FreeBSD 

 X 

 O 

 X 

 솔라리스 

 X

 O

 O 

 HP-UX 

 O 

 O 

 X 

 AIX v4 

 O 

 O 

 X 

 윈도우 98 

 X 

 O 

 O 

 윈도우 NT sp4 

 X 

 X 

 X 

 윈도우 2000 이상 

 X 

 O 

 X 


ICMP를 이용한 여러 가지 ping은 시스템 하나를 조사하기에는 적절하지만 큰 네트워크에서 활성화 시스템을 찾는 데는 그다지 효과적이지 않다. 네트워크 전체에서 활성화 시스템을 찾는 일을 스위핑( Sweeping )이라고 한다. 스위핑은 검색하고자 하는 네트워크에 브로드캐스트 ping을 보내거나 자동화 도구를 이용해 특정 범위의 네트워크에 ping을 보낸다.

'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] 스푸핑 공격  (0) 2017.04.30
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] TCP 스캔  (0) 2017.04.30
[Network Hacking] DNS( Domain Name System )  (0) 2017.04.24
[Network Hacking] OSI 7계층  (0) 2017.04.23
Posted by Imp3rio

1. FAT( File Allocation Table )


FAT은 디지털 카메라 등에 장착되는 대부분의 메모리 카드와 수많은 컴퓨터 시스템에 널리 쓰이는 컴퓨터 파일 시스템 구조이다. FAT 파일 시스템은 상대적으로 간단하기 때문에 플로피 디스크, 플래시 메모리 카드, 디지털 카메라 및 다른 수많은 휴대용 기기에서 흔하게 볼 수 있다. FAT의 성능은 다른 대부분의 파일 시스템에 견주어 좋지 않은 평을 받는다. 그 까닭은 운영 시간을 낭비하게 만드는 너무나도 단순한 자료 구조를 이용하고 조그마한 파일이 많이 있으면 디스크 공간을 잘 활용하지 못하기 때문이다.



2. FAT32


2기가바이트 이상의 하드디스크를 지원하며, 윈도우 95 OSR2부터 이 파일 시스템을 사용할 수 있다.

FAT32에서는 하나의 파일은 최대 4기가바이트 - 1바이트의 용량을 가질 수 있다. 하나의 파티션이 최대 8테라바이트의 용량을 가질 수 있고, 최대 268,435,437개의 파일을 담을 수 있다. 윈도우 98, 윈도우 Me와 같은 구형 운영체제나, 리눅스, OS X와 같은 운영 체제에서 윈도우와 호환성이 필요할 때, 또는 디지털카메라, 게임기 등에서도 이용된다.



3. FAT32 파티션 구조


FAT32의 파티션 구조는 아래 그림과 같으며 여기서는 Boot Sector의 구조에 대해 알아보고 실제 데이터가 있는 위치까지 추적하는 방법에 대해 알아보자.


Boot Sector

(VBR) 

Reserved 

FAT 

FAT Mirror

Root

Directory 

Data

Area 


Boot Sector는 MBR 구조와 같이 특정 오프셋 별로 가리키는 의미가 다르다.


① Boot Code : 0 ~ 2 byte

② BIOS Parameter Block : 3 ~ 8 byte

③ Boot Code와 Error Message : 90 ~ 509 byte

④ 시그니처 2byte : 510 ~ 511 byte



이제 FAT32의 BR 영역에 대해 알아보자.( 사용하지 않는 영역에 대해서는 따로 언급하지 않겠다. )


FAT 32의 BR 구조는 위와 같이 나타낼 수 있다. 각 영역의 의미는 다음 표와 같다.


의미 

내용 

 Jump Boot Code

 Boot Strap Code로 점프하기 위한 부분이다.

OEM Name 

 OEM 회사를 나타내는 문자열. FAT32는 MSDOS 5.X

Byte Per Sector 

 한 섹터가 몇 byte로 구서되어 있는지를 나타낸다. 기본 512 byte

SP 

 클러스터를 구성하는 섹터의 수. 기본적으로 8개의 섹터를 사용

RS( Reserved Sector ) 

 예약된 섹터의 개수

FAT 개수 

 FAT의 개수를 나타낸다. FAT32는 기본 2개

Media Type 

 볼륨이 어떤 미디어 매체를 이용하는지를 나타낸다.

Total Sector 32 

 파티션 상의 총 섹터 개수

FAT Size 32 

 FAT 영역의 섹터 수. 단, FAT 1개에 대한 크기

File System Version 

 FAT32의 버전 정보

Root Directory Cluster 

 루트 디렉터리의 시작 위치

File System Information 

 FSInfo 구조체에 대한 정보가 어디에 저장되어 있는지를 나타낸다.

 BR 기준 보통 1번 섹터에 저장된다.

Boot Record Backup Sector

 BR이 백업된 섹터 번호를 나타낸다. 기본 값으로 6을 사용한다.

Volume ID 

 볼륨 시리얼 번호를 나타낸다.

Volume Label( 1, 2 ) 

 볼륨의 이름을 기록

File System Type 

 해당 파일 시스템의 타입을 나타낸다. FAT32의 값을 저장한다.


Reserved 영역은 예약된 파일시스템에 대한 정보를 구조체로 저장하고 있으며, BR에 대한 백업 본을 저장하고 있다. FAT 영역의 경우 클러스터의 상태 값을 가지고 있는 영역으로써, 각각의 클러스터 정보는 4byte로 나타나게 된다.



- FAT 영역

① 4byte는 미디어 타입을 나타내며, F8 FF FF 0F는 하드디스크를 나타낸다.

② 4byte는 파티션의 상태를 나타낸다. 파티션의 상태는 보통 FF FF FF FF로 나타나게 된다.

③ 4byte는 루트 디렉터리의 클러스터 정보를 나타낸다.

④ 실제 데이터의 연속된 클러스터 공간할당 영역을 나타낸다.



4. 루트 디렉터리 추적


FAT32.vhd.zip

위 실습 파일을 다운로드 하여 압축을 푼다. 그리고 HxD의 '기타설정 > 디스크 이미지 열기' 메뉴로 열고 첫 번째 파티션의 시작 위치로 이동하면 다음과 같은 화면을 볼 수 있다.

실제 데이터 정보를 담고 있는 루트 디렉터리의 위치를 알아내기 위한 정보만 짚고 넘어가자.



FAT32의 BR 영역에서 필요한 정보만 분석해보면 아래 표와 같다.


의미 

내용 

BS 

0x0200 

SP 

0x04 

RS 

0x19F6 

FAT 개수 

0x02 

Total Sector 32 

0x00062800 

FAT Size 32 

0x00000305 

Root Directory Cluster 

0x02

File System Information 

0x01

Boot Record Backup Sector 

0x06


루트 디렉터리로 가기 위해서는 FAT Area의 위치를 알아야 한다. FAT Area의 주소는 다음과 같이 구할 수 있다.

128 ( BR 주소 ) + 6,646( Reserved Sector( 0x19F6 ) ) = 6,774 섹터


6,774번 섹터로 이동하게 되면 FAT의 구조를 볼 수 있다. 아래 그림에서 00으로 채워진 공간은 사용하지 않는 FAT Area 영역이다.



루트 디렉터리로 가기 위해서는 FAT 주소에 FAT 크기의 2를 곱한 값을 더해주면 된다. 2를 곱해주는 이유는 FAT의 개수가 기본적으로 2개이기 때문이다.

6,774 + ( 773( 0x0305 ) * 2 ) = 8,320 섹터




8,320 섹터로 이동하게 되면 우리가 원하던 데이터에 대한 정보를 저장하고 있는 루트 디렉터리를 볼 수 있다. 이제 루트 디렉터리의 구조에 대해 알아보자.



- Name : 파일에 대한 이름을 나타낸다. 첫 번째 byte가 0xE5로 시작되면 삭제된 파일을 나타낸다. 삭제된 파일을 나타내는 0xE5를 다른 문자열로 바꾸면 해당 파일은 복구할 수 있다. 0x00이면 사용하지 않는 영역이다.

- Extension : 파일 확장자

- Attr : 파일에 대한 속성이다.

- Reserved : 예약된 영역

- Create Time Tenth : 생성 시간을 1/100초 단위까지 측정. 0~199의 값을 사용

- Create time : 파일이 생성된 시간을 나타낸다. 시간 변환은 A6 93이라는 정보가 저장되어 있다고 하면, 93 A6( 리틀엔디안 방식 )을 2진수로 변환하여 각각의 2진수를 우측에서 좌측으로 5자리, 6자리, 5자리씩 끊어주면 된다. 초단위의 경우 5비트를 사용한다. 즉, 0 ~ 31까지 표현할 수 있기 때문에 60초를 표현하기 위해 2를 곱해주어야 한다. 

- Create Date : 파일이 생성된 날짜를 나타낸다. 날짜 변환은 82 48이라는 정보가 저장되어 있다고 하면, 48 82( 리틀엔디안 방식 )를 2진수로 변환하여 각각의 2진수를 우측에서 좌측으로 7자리, 4자리, 5자리로 끊어주면 된다. 년단위의 경우 기준이 1980년이기 때문에 계산한 값에 1980을 더해주면 된다.

- Last Accessed Date : 파일에 마지막 접근된 날짜

- Starting Cluster Hi : 파일에 대한 클러스터 상위 값

- Last Written Time : 파일에 대한 마지막 수정시간

- Last Written Date : 파일에 대한 마지막 수정 날짜

- Starting Cluster Low : 파일에 대한 클러스터 하위 값

- File Size : 파일에 대한 크기


8,320 섹터에 있는 실제 데이터를 루트 디렉터리 클러스터 오프셋 별로 분석해보면 NCS.txt 파일과 DISK.jpg 파일이 존재한다는 것을 알 수 있다. NCS.txt 파일을 살펴보면 파일의 크기는 0x0D로 13 바이트이고, 파일의 생성 시간은 0x7490으로 14시 36분 16초다. 그리고 생성 날짜는 각각 0x4A9C로 2017년 4월 28일 임을 알 수 있다.


마지막으로 실제 데이터가 있는 위치를 찾아가기 위해서는 다음과 같이 계산하면 된다.

Cluster Hi + Cluster Low = 00 00 + 00 08 = 8

( 8 - 2 ) * 4 ( SP ) = 24

8,320 + 24 = 8,344



Hello world!! 라고 데이터가 저장되어 있음을 확인할 수 있다.

Posted by Imp3rio