Cavity Virus(혹은 SpaceFiller Virus)은 자주 사용되는 바이러스는 아니라고 한다.
독립 실행이 불가한 바이러스의 특성상 어떠한 위치(Boot Sector Virus라면 MBR 등)에 기생해야 하는데, Cavity Virus는 파일의 빈 공간(\x90)에 자신의 코드를 심어 외관상 파일의 크기 변경 없이 파일을 감염상태로 만들어 추적을 어렵게 하는 바이러스라고 한다.
대표적인 Cavity Virus는 1987년에 발견된 Lehigh Virus이다. Lehigh Virus는 초기 DOS Virus고 COMMAND.COM을 포함한 빈공간에 자신을 기생시킨다. 그 후 네트워크에 연결된 플로피 디스크에 4번의 자기 복사를 수행하고 자신의 원본 파일을 삭제하는 (대표적인 웜과 결합된 형태)를 가지고 있다.
< Lehigh Virus를 발견한 Lehigh university 이미지 출처 : https://www1.lehigh.edu/ >
조금더 예시를 찾고 있는데, 잘 보이지 않는다.
Cavity Virus의 특징이라고 할 수 있었던 빈 공간에 자신의 정보를 넣는 것은 다른 바이러스에서도 사용할 수 있는 테크닉이라, 따로 Cavity Virus라고 지칭하는 일이 없는거 같다.
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 된다.
필연적으로 우리는 살아가며 많은 인연을 만나고, 또 많은 인연과 헤어진다. 컴퓨터의 세상에서도 컴퓨터 혼자서 살아가는 것보다는 다른 컴퓨터와 협업하며 살아가는 것이 당연히 이득이다. 어떤 문제를 해결하는 데 있어서 한 사람이 걸리는 시간이 1시간이라면 두 명이 머리를 맞대면 30분 만에 해결하듯이, 컴퓨터도 컴퓨터들과 소통을 하면서 비약적인 성능 향상을 도모할 수 있다.
이번 씹정세시간에는 컴퓨터 사이에서의 연결을 의미하는 네트워크의 기본을 알아보자.
네트워크의 정의와 기본 용어
컴퓨터 네트워크(computer network) 또는 컴퓨터망(문화어: 컴퓨터망)은 노드들이 자원을 공유할 수 있게 하는 디지털 전기통신망의 하나이다. 즉, 분산되어 있는 컴퓨터를 통신망으로 연결한 것을 말한다.
- 출처 : 위키백과 https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
즉 네트워크는 서로 다른 컴퓨터 단말기들이 연결되어 있는 형태와 그 모든 것들을 의미한다.
사람을 컴퓨터라고 생각하고 다음의 대조를 해보면 이해가 조금 더 쉬울 거 같다.
위의 사진은 철수와 영희의 대화 장면이다. 이 그림에서
"철수"는 "영희"에게 "한국말"로 "대화"를 걸고 있다.
자연스럽게 이루어지고 직관적으로 보이는 이 대화에 컴퓨터 통신의 용어를 이해할 수 있는 기초가 들어있다. 우선 "철수"와 "영희"는 서로를 식별할 수 있는 이름으로 부르고 있다. 이를 컴퓨터 세상에서는 "주소"라고 칭한다. 또한 이 둘은 "한국말"을 사용해서 대화를 이어가고 있다. 만약 철수가 "한국말"로 대화를 거는데 영희가 "러시아어"를 사용한다면 둘의 소통은 불편을 격을 것이다. 이렇게 서로 어떻게 대화할지를 규정한 것을 컴퓨터세상에서는 "프로토콜"이라고 칭한다. 이들의 "대화"는 메시지를 담고 서로에게 전달된다. 마치 쿠팡 택배 같은 느낌인데, 컴퓨터에는 이렇게 전달되는 데이터 그 자체를 "패킷"이라고 칭한다.
용어① 주소 : 컴퓨터를 식별할 수 있는 일련의 정보(EX : IPv4, v6, MAC address, DNS 설정된 별칭 등)
용어② 프로토콜 : 네트워크에서의 일련의 통신규약
용어③ 패킷 : 네트워크에서 데이터의 전송 단위
네트워크의 시작
어떤 것이던 필요에 의해서 만들어지게 된다. 조지 스티비츠라는 사람이 1940년 전신기(누르면 비트가 발생하는 장치이다.)를 사용해서 뉴욕까지 명령어를 보내는 것이 처음으로 여겨지며, 현대의 네트워크라는 개념의 전신은 1960년대 미국의 국방부가 만든 ARPANET로 여겨지고 있다. 여크시 천조국이다.
< 출처 : 위키백과 알파넷의 논리 지도 https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EB%84%B7>
이번 시간에는 네트워크의 기본 용어와 네트워크의 역사에 대해서 간략하게 알아보았다. 아직 어려운 내용은 하나도 없으니, 복습하며 면학을 마무리 하자
기술이 비약적으로 발전함에 따라 자료의 크기도 어마어마 해지고 있다. 우리도 너무 옛날 자료만 봐왔으니까 채신 기술 키워드 하나 보고 가자. 이름하여 "빅데이터", 빅데이터는 다음 3가지를 특징으로 한다.(흔히 3V라고 한다.)
Volume : 엄청난 자료의 양
Velocity : 엄청난 데이터의 입출력 속도
Variety : 엄청난 타입의 자료들
그 중 오늘 포스팅과 관련된 Volume은 특히 테라 단위를 넘어 페타바이트를 넘나드는 수준으로 엄청난 속도의 데이터 펌핑이 트렌드로 떠오르고 있다.
씹정세 3번째 시간, 이렇게 커다란 정보들로 발전하기까지 조그마한 비트 하나에서 시작된 그 한걸음부터 오늘은 컴퓨터에서의 정보의 단위를 알아보자.
SI 단위
공학적으로 단위를 표현하는 방법은 SI접두어 표기법을 따른다. SI는 국제단위계라는 전 세계에서 표준화된 단위를 말한다. 기본단위인 길이(m), 질량(kg), 시간(s), 전류(A), 온도(K), 물질량(mol), 광도(cd)를 쓰고, 크기를 쉽게 표현하기 쉽도록 다음과 같은 접두어를 붙인다.
이는 2^10=1024인점에서 오류가 발생한다. 2의 10 제곱은 당연하게도 1024이다. 또한 이진법이 사용되는 전자 세상에서는 당연히 이진수 단위로 정보를 끊어 표현하는 게 정확하고 당연스러운 행위이다. 따라서 먼 옛날 선조들께선 2^10인 1024를 1000으로, 10^3으로 대충 유사 값으로 계산을 한 거다!!!!
이게 정보가 작은 이전에는 상관이 없었는데, 정보가 기가, 테라 단위로 올라가다 보니 1000/1024인 약 0.97배만큼 차이가 나기 시작한 것이다!(다 X소 사장님이 비트를 밑장 뺀 게 아니라는 말이다.)
이를 해결하기 위해서 GB가 아닌 GiB를 중첩 표기하는 등 노력은 이어지고 있다.
이번 씹정세 시간에는 SI표기법과 bit, byte표기법을 알아보았다. 엄청나게 빠른 속도로 컴퓨터 전문가에 가까워지고 있는 여러분들을 칭찬하며, 필자는 다음 씹정세에서 기다리겠다.