CEH(Certified Ethical Hacker)를 공부하며 네트워크 프로토콜에 대한 공부를 또 열심히 하고 있다. 한 때 상어 좀 썼던 사람으로 ICMP에 대해 공부한 내용을 공유한다.


ICMP

ICMP는 네트워크 상에서 오류 메시지를 전송하는데 사용하는 프로토콜이다.(예를 데이터 전송 목적으로 사용하지는 않는다.) RFC 792에 정의되어 있으며 프로토콜 넘버는 1번이다.(와 첫 빠따) 

* 흔히 볼 수 있는 ICMP를 발생시키는 메시지는 영원한 네트워크 관리자의 친구 PING이다.(ICMP 0, 8) IP 다이어그램을 사용하는 패킷의 TTL이 0이 되면 시간초과(ICMP 11)이 발생한다.

 

 

ICMP의 구조

ICMP는 IPv4의 헤더 뒤에서 시작된다. 고정된 8바이트의 헤더와 나머지는 가변된 길이를 가지고 있다. 

 

  • offset 0byte : 타입
  • offset 1byte : 코드(서브타입)
  • offset 2~3byte : CheckSum
  • offset 4~byte : offset 0byte인 타입에 따라 길이, 내용이 다름

 

ICMP 제어 타입

ICMP는 v4와 v6를 포함하여 예약된 번호인 37-255를 제외 0~36의 37개의 타입이 존재한다. 

각 타입은 ICMP헤더 offset 1의 서브타입으로 타입별 세부적인 정보를 지시할 수 있다.
흔하게 사용되는 ICMPv4에는 다음과 같은 ICMP 타입과 그에 따른 서브타입이 존재한다.

  • ICMP Type 0 : Echo Reply(Ping의 응답, Type 8과 같이 쓰인다.)
  • ICMP Type 3 : Destination Unreachable(목적지 도달 불가)
    ICMP Type 3-0 : Network Unreachable(목적지로 가는 경로가 없을 때)
    ICMP Type 3-1 : Host Unreachable(최종 목적지 호스트에 도달할 수 없을 때)
    ICMP Type 3-2 : Protocol Unreachable(목적지 호스트에서 지정된 프로토콜을 사용할 수 없을 때)
    ICMP Type 3-3 : Port Unreachable(목적지 호스트에 특정 포트번호를 사용할 수 없을 때)
    ICMP Type 3-4 : Fragmentation Needed(단편화<Fragmentation>이 필요한데, Defragmentation Flag가 설정된 경우)
  • ICMP Type 4 : Source Quench(현재는 사용하지 않는다. 통신량의 폭주로 목적지나 라우터의 버퍼를 초과한 경우 발생된다.)
  • ICMP Type 5 : Redirect(패킷을 받은 라우터가 목적지로 가는 더 짧은 경로를 갖는 라우터를 알고 있을 때 사용됨)
    ICMP Type 5-0 : Redirect for Destination Network
    ICMP Type 5-1 : Redirect for Destination Host
    ICMP Type 5-2 : Redirect for Destination Network Based on ToS(Type of Service)
    ICMP Type 5-3 : Redirect for Destination Host Based on ToS(Type of Service)
  • ICMP Type 8 : Echo Request(Ping의 요청, Type 0와 같이 쓰인다.)
  • ICMP Type 9 : Router Advertisement(자신이 라우터임을 주기적으로 알리는 네트워크 메시지)
  • ICMP Type 10 : Router Solicitation(라우터 탐색용 질의 메시지, Type 9번으로 응답하거나 한다.)
  • ICMP Type 11 : Time Exceed(패킷이 TTL을 넘어갈때 << 루프나 스톰 발생 / TTL이 너무 낮은 경우) 

CheckSum
송신자와 수신자는 모두 1의 보수연산을 한 체크섬으로 패킷의 무결성을 보증한다. 만약 체크섬이 일치하지 않는 겨우 패킷은 DROP 된다.

'정보보안-이론 > XX에 대하여' 카테고리의 다른 글

CAM Table에 대하여  (0) 2021.05.14
OLE에 대하여  (0) 2021.05.13
Cavity Virus에 대하여  (0) 2021.05.12
USBDumper에 대하여  (0) 2021.05.12
정규표현식에 대하여  (0) 2021.04.17

정규표현식은 여러 목적으로 사용된다. 정규표현식 자체는 어렵지 않다.

 

정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.

< 정규표현식의 정의 : 출처 위키백과 ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D >

이 정규표현식이 참.... 알면 편한데 문자열 파싱 하는 일이 자주 없다 보니 필자는 자주 안 쓰게 된다. 사용법이 헷갈린 것도 있고, 자주 안 보면 까먹기 일수이다. 이번 포스팅에서 내 기억도 살릴 겸 정규표현식에 대해서 정리를 해보고자 한다.

 


패턴

일단 정규 표현식은 문자열을 표현하는 "패턴"이라는 놈이 존재한다. 즉 이 "패턴"을 가지고 노는 게 정규표현식에서 자유로워야 하는데, 이 "패턴"에는 특정한 의미를 가진 "메타 문자"라는 게 존재한다.(예를 들면 정규표현식에서 점(.)은 New Line을 제외한 모든 한 문자를 의미한다.)

 

표준 표현법

아래는 POSIX의 기본/확장 문법을 정리한 표이다.

메타문자 기능 설명
. 문자 New Line을 제외한 1개의 문자
[ ] 문자 집합 대괄호에 써있는 문자중 하나를 선택한다. 
ex : [abc]d >> ab, ac, ad
[^ ] 부정 대괄호에 써있는 문자를 제외하고 선택한다.
ex : [^abc]d >> 일단 ab, ac, ad는 뺀다.
^ 처음 처음을 의미한다. 
ex : ^[asdf] >> a, s, d, f로 시작하는 문자(열)
$ 끝을 의미한다.
ex : $[asdf] >> a, s, d, f로 끝나는 문자(열)
| 선택 여러 식 중 하나를 선택한다.(파이프다)
( ) 하위식 식 여러개를 하나로 묶는다. 약간 드모르간인듯
ex : abc|acd == a(b|c)d 
\n 일치하는n번째 패턴 일치하는 패턴 중 n번째 패턴을 의미한다. (New Line이 아니다!)
* 0회 이상 0개 이상의 문자를 포함한다. 
ex : a*b >> b, ab, aab, aaab, aaaab 등등
+ 1회 이상 1개 이상의 문자를 포함한다. 
ex : a+b >> ab, aab, aaab, aaaab 등등
? 0또는 1회 ex : a?b >> b, ab
{m, n} m회 이상, n회 이하 ex : a{1,4}c >> ac, aac, aaac, aaaac 

 

또한 문자열을 지정할 때 자주 사용하는 정규표현식은 다음과 같다. 

* 아래는 POSIX 표준이 아닌 ASCII 식을 첨부한다.(더 활용성이 높다고 생각한다.)

ASCII 표현식 설명
[A-Za-z0-9] 영숫자
[^A-Za-z0-9] 영숫자가 아님
[\t] 공백 혹은 탭
[\x00-\x1F\x7F] 제어문자(00은 NULL을 1F는 이스케이프 시퀀스를, 7F는 ASCII Character DEL(? 맞는지 모르겠다.)
[\x21-\x7E] 보이는 문자
[ \t\r\n\v\f] 모든 공백문자

 

POSIX란?

POSIX는 portable Operating System Interface의 약어로 서로 다른 UNIX의 공통 API를 정리해서 이식성을 향상하기 위한 IEEE의 표준규격이다. POSIX 규격은 C 언어의 시스템 콜(System Call), 압축 포맷까지 광범위한 범위를 표준 한다. Window도 POSIX 서브시스템과 비슷한 시스템(SUA)을 탑재하고 있어서 POSIX를 만족하는 응용 프로그램이 실행 가능하다.

 


정규표현식은 거의 모든 에디터나 프로그래밍 언어에서 지원한다. 자유자재로 사용할 줄 아는 게 확실하게 도움이 된다.

'정보보안-이론 > XX에 대하여' 카테고리의 다른 글

CAM Table에 대하여  (0) 2021.05.14
OLE에 대하여  (0) 2021.05.13
Cavity Virus에 대하여  (0) 2021.05.12
USBDumper에 대하여  (0) 2021.05.12
ICMPv4에 대하여  (0) 2021.05.11

+ Recent posts