16비트 기반의 DOS 환경에서 사용할 수 있는 물리적 메모리는 1MB인 것에 비해 주소를 참조하는 것은 당시 2^16=64KB 영역에서 밖에 접근을 못 했다. 

한 줄 요약 : 사용자가 접근할 수 있는 메모리 영역이 64KB 밖에 안된다.


여기서 1MB는 2^20이므로 사용할 수 있는 레지스터의 범위가 확장되어야 한다. 사람들은 어떻게 하면 레지스터를 확장할까 고민했고 이에 대한 결론으로 2개의 레지스터를 활용하는 방안이 채택됐다. 하지만 매번 2개의 레지스터를 활용하면 32비트만큼 중 20비트만 사용하기 때문에 12비트의 자원이 낭비하는 일이 발생하게 됐다.


그래서 사람들은 이를 대체하기 위해 세그먼트라는 현재 사용할 수 있는 메모리 영역을 정하고 내부에서 오프셋이라는 개념을 사용하여 추가적으로 메모리를 세밀하게 접근할 수 있도록 규정했다. 이를 이용하여 16비트 기반의 환경에서도 1MB만큼의 메모리 영역을 참조하는 것이 가능해졌다.


세그먼트 예시 ) 5000:1234h -> 51234h (실제 주소)


WRITTEN BY
흉내지빠귀

받은 트랙백이 없고 , 댓글이 없습니다.
secret
AH (8Bit) , AL (8Bit),
AX (Accumulator Register, 16Bit), EAX(Extended AX, 32Bit), RAX(64Bit)
덧셈, 뺄셈, 곱셈과 나눗셈 등과 같은 연산 명령에서 자동으로 사용되고 함수의 리턴 값이 저장되는 용도로 사용된다.

BH (8Bit) , BL (8Bit),
BX (Base Register, 16Bit) , EBX(Extended BX, 32Bit), RBX(64Bit)
ESI나 EDI와 결합하여 인덱스에 사용되며 주로 보조적인 역할로 많이 사용된다.

CH (8Bit) , CL (8Bit),
CX (Counter Register, 16Bit) , ECX(Extended CX, 32Bit), RCX(64Bit)
반복 명령어 사용하는 경우, 반복 카운터로 사용된다.

DH (8Bit) , DL (8Bit),
DX (Data Register, 16Bit), EDX(Extended DX, 32Bit), RDX(64Bit)
AX와 같이 쓰이며 부호 확장 명령 등에사용되며 주로 부동 소수점 연산에 많이 이용되며, 문자열을 출력할 때도 사용된다.

SI (Source Index,16Bit), ESI  (Extended SI, 32Bit), RSI(64Bit)
주로 문자열 복사이나 데이터를 복사하는데 많이 사용되며 복사 출발지를 담당한다.

DI (Source Index,16Bit), EDI  (Extended DI, 32Bit), RDI(64Bit)
주로 문자열 복사이나 데이터를 복사하는데 많이 사용되며 복사 목적지를 담당한다.

SP (Stack Pointer, 16Bit), ESP (Extended SP, 32Bit), RSP(64Bit)
주로 스택에서 현재 위치를 나타내는데 사용되며 스택에서 저장된 값을 꺼낼 때 해당 포인터의 위치를 참조한다.

BP (Base Pointer, 16Bit), EBP (Extended BP, 32Bit), RBP(64Bit)
주로 스택에서 현재 함수의 시작 위치를 나타내는데 사용되며 스택에서 저장된 각 함수에 대한 변수 값의 메모리 상의 범위를 나타날 때 사용되며 이 값을 기준으로 한 범위를 스택 프레임이라고 한다.
(리눅스에서는 Stack Frame Pointer, SFP라고 불린다.)

IP (Instruction Pointer, 16Bit), EIP (Extended IP, 32Bit), RIP(64Bit)
다음 실행될 명령어의 위치를 가리키는 포인터로 함수가 호출된 이후 반환될 때, 다음 명령어를 실행되는 위치는 RET 값을 참조한다.

WRITTEN BY
흉내지빠귀

받은 트랙백이 없고 , 댓글이 없습니다.
secret
리버스 엔지니어링

사용자의 요구 사항 분석을 통해 설계를 진행한 결과를 소스 코드로 작성하고 어셈블리어로 변환되어 최종적으로 기계어 코드 형태의 바이너리로 컴파일되는 과정, 즉 소프트웨어를 개발하는 과정을 정방향 분석 혹은 소프트웨어 엔지니어링이라고 한다. 

이 때, 이렇게 만들어진 바이너리를 역으로 분석하면서 개발자 및 사용자의 요구 사항을 역 추적하는 과정을 역방향 분석 혹은 리버스 엔지니어링 ,줄여서 리버싱이라고 한다. 그리고 리버싱을 수행하는 사람을 리버스 엔지니어 (리버서)라고 한다.

본래 리버서라는 직업은 유명하지 않았으나 많은 악성코드의 등장으로 인해 보안업체에서 이들의 고객을 보호하기 위해 각종 S/W를 리버싱하는 작업이 업무로써 인정을 받게 된다.


크래커 vs 해커

크래커는 불법적으로 자신의 이익을 위해 프로그램을 리버싱하여 크랙한 프로그램을 배포하는 사람을 의미하고 해커는 프로그램을 만드는 과정에서 발생되는 오류를 분석함으로써 취약점을 찾아내고 보안 강화를 목적으로 자신이 찾은 취약점을 공유하여 보안 분야의 기술 발전에 기여하는 사람을 의미한다.


해커라는 용어는 1950년 후반에 MIT의 철도 연구 동아리 Hack이라는 단어에서 유래했으며, 본래 해커는 똑똑한 사람을 의미하는 단어였으나 MIT의 동아리 회원들이 프로그램 관련 취약점들을 분석하고 찾아내면서 이러한 일을 수행하는 사람을 해커라고 칭하게 된다.


리버싱은 과연 "합법"과 "불법" 둘 중 어느 것일까? 

이전 해커들의 행동으로 인해 리버싱은 본래 불법적인 경우가 많았으나 2018년 10월 기준으로 저작권법 제 15823호 제 101조의 4 항목에 정당한 권한에 의하여 프로그램을 이용하는 자 또는 그의 허락을 받은 자는 호환에 필요한 정보를 쉽게 없을 수 없으며 그 획득이 불가피한 경우, 해당 프로그램의 호환에 필요한 부분에 한하여 프로그램의 지적재산권자의 허락을 받지 아니하고 프로그램코드역분석을 할 수 있다.


한 줄 요약 : 구매자 혹은 무료 사용자가 호환성 문제로 인해 해당 부분을 리버싱하는 건 허락된다. (여기서 무료 사용자는 불법적으로 사용하는 사람은 제외한다.)


또한 프로그램역분석을 통해 얻은 정보는 다음 각 호의 어느 하나에 해당하는 경우, 이를 이용할 수 없다.

① 호환 목적 외에 다른 목적을 위해 이용하거나 제 3자에게 제공하는 경우

② 프로그램코드역분석의 대상이 되는 프로그램과 표현이 실질적으로 유사한 프로그램을 개발 · 제작 · 판매하거나 그 밖에 프로그램의 저작권을 침해하는 행위에 이용되는 경우


한 줄 요약 : 호환성 문제가 아닌 다른 이유로 배포하거나 분석한 프로그램과 유사한 프로그램을 만드는 목적의 리버싱은 불법으로 정의한다.


보안 업체가 수행하는 리버싱은 과연 합법인가?

보안 업체가 진행하는 리버싱은 기업 입장에서의 고객의 요청으로 진행되는 작업이므로 충분한 권한을 가지고 있다.


고객의 요청이 없는 악성코드의 경우, 해당 소프트웨어의 역분석을 위해 해커의 동의를 구하기 어렵기 때문에 불법적인 소프트웨어를 리버싱하는 것에는 큰 문제가 없으나 이와 유사한 불법 소프트웨어를 개발 · 제작 · 판매되는 것은 금지된다.




악성코드의 역사


1972년

소설가 데이비드 제럴드의 공상과학소설 "When Harlie was One"에서 '다른 컴퓨터에 계속 자신을 복제, 감염된 컴퓨터의 운영체제에 영향을 미쳐 점차 시스템을 마비시키는 장치를 한 과학자가 제작해 배포한다'는 내용이 소개됐다. 신기한 점은 그 당시 악성코드라는 용어가 확립되기 전이었다는 점이다.


1984년

프레드 코헨(Fred Cohen)이 컴퓨터 바이러스라는 용어를 처음으로 정의했다.


1986년

최초의 바이러스라고 불리는 브레인 바이러스는 본래 바이러스가 아닌 소프트웨어 기반의 복제 방지 프로그램이었다. 파키스탄에서 프로그래머로 일하던 알비 형제는 자신들의 소프트웨어가 불법 복제되는 일을 알게 됐고, 이를 막기 위해 소프트웨어 방지 프로그램을 제작했다고 한다. 하지만 1985년에 현재 세계에서 백신을 제작하는 기업중 3위를 차지하고 있는 기업인 트렌드 마이크로를 창업한 스티브 창은 돈을 벌 목적으로 하드웨어 기반의 디스크 복제 방지 솔루션을 제작했다. 하지만 하드웨어 기반이기 때문에 가격도 비싸고, 이러한 높은 가격은 소비자들에게 피해가 고스란히 전해졌다. 하지만 이후 브레인 바이러스 소식을 들은 스티브 창은 소프트웨어기반의 불법 소프트웨어 솔루션이 존재한다는 사실에 놀라 이들을 만나 브레인 바이러스 기술을 팔 것을 요구했으며 알비 형제는 흔쾌히 브레인 바이러스를 그에게 팔았다고 한다.


1987년

예루살렘 대학에서 13일의 금요일 바이러스가 유포되기 시작했다. 해당 바이러스의 증상은 13일의 금요일만 되면 시스템에 존재하는 파일들을 삭제했으며 해결법은 컴퓨터의 전원을 끄는 방법밖에 없었다. 호기심이 많은 스티브 창은 이 바이러스에 대해 관심을 가져 제작자를 찾아가보니 세계 백신 기업 중 하나인 맥 아피의 창업자 인 맥 아피였다. 스티브 창은 맥 아피에게 기술을 판매할 것을 요구했으나 맥 아피는 돈보다는 서러 가진 기술을 거래하자고 했으며, 이후 이를 기반으로 트렌드 마이크로와 맥 아피라는 회사가 탄생하게 된다.


1988년

88 서울 올림픽이 한국에서 개최되면서 이와 동시에 브레인 바이러스가 한국에 유포되기 시작했으며 이 때 의대생이었던 안철수의 컴퓨터에 해당 바이러스가 감염됐다. 안철수는 해당 바이러스가 특정 영역을 변조한다는 사실을 깨닫고 수 작업으로 치료를 했고 동료들에게 치료법을 알려주었으나 이해하지 못해서 Vaccine.com이라는 프로그램을 개발하여 유포했다. 당시 주변 사람들이 안철수가 만든 Vaccine.com의 앞 글자를 딴 백신이라는 이름으로 부르면서 많은 사람들에게 퍼져 나갔고 이로 인해, 현재 많은 한국인들이 안티 바이러스를 백신이라 부르게 된다.


1989년

모리스 웜이 발생하며 미국의 네트워크를 마비시키는 일이 발생했으며 해당 웜은 최초의 웜 바이러스로, 컴퓨터의 자료를 삭제하는 목적보다 자가증식을 통해 기기의 리소스를 잡아먹어 성능을 저하시키는 공격 형식이었다. 훗날 이 웜은 기반으로 한 다양한 악성코드가 등장하게 되는 계기 중 하나가 됐다.


1991년

연결형 바이러스가 출현했다. 지금까지 연결형 바이러스는 단 2종으로 디스크 섹터 깊숙히 어딘가에 코어를 숨겨놓아 찾기도 어렵고, 수정하기도 까다롭게 만든 바이러스다. 그만큼 개발난이도도 높아 이러한 바이러스는 잘 발견되지 않는다.


1994년

문서를 통한 감염이 가능하다는 것을 증명한 매크로 바이러스가 등장했다. 다른 바이러스처럼 고난이도 기술을 사용하지 않고, 어렵지 않게 웜/바이러스 제작이 가능하다는것을 증명했으며 이러한 바이러스는 5세대 바이러스에 속한다. 바이러스는 1세대부터 4세대로 나뉘어져있으며, 1세대는 POC 형식의 바이러스, 2세대는 암호화가 적용된 바이러스, 3세대는 은폐형 바이러스, 4세대는 다형성이 적용된 바이러스다. 여기서 세대는 시기 별로 나눈 것이 아닌 해당 세대에서 구현 가능한 기술력을 기준으로 나누어진 것이다.


1999년

CIH 바이러스와 멜리사 바이러스가 등장했다. PC 자원을 파괴시키는 CIH는 수많은 사람들의 PC를 감염시킴으로써 피해 규모는 더 컸으나 멜리사 바이러스가 최초로 메일을 이용하여 유포된 바이러스로 유명해져 해당 년도의 대표적인 바이러스로 뽑히게 된다.


2001년

8시간만에 25만대 이상의 컴퓨터를 감염시킨 코드 레드 웜이 발생했다. 파일 리스 기반의 공격으로 패킷 형태로 전송됐기 때문에 파일이라는 존재가 없어 안티 바이러스 기업 측에서는 이건 패킷이기 때문에 방화벽 업체의 문제라고 주장하고 방화벽 업체 측에서는 악성코드이기 때문에 안티 바이러스 기업의 문제라면서 주장함으로써 갈등이 있었지만 결국 방화벽 업체의 문제로 판정되어 방화벽 업체에 패킷을 차단하는 형식으로 문제를 해결했다. 하지만 이후 안티 바이러스 측에서 백신에 방화벽을 탑재하면서 당시 어울림 방화벽이라는 회사는 이로 인해 문을 닫았다고 한다. 코드 레드 웜 공격을 받은 미국은 중국의 소행으로 판단하여 코드 블루 웜으로 공격했으며 중국측에서 자신들의 소행이 아니라고 주장했지만 이를 무시당하고 사이버 공격을 받게 되자 중국에서 코드그린 웜으로 맞대응했다.


2003년

슬래머 웜이 등장했다. 전 세계적으로 큰 피해를 입었지만 이는 사실 바이러스로 인한 마비가 아닌 보안 장비의 문제 때문에 피해가 확대된 사건이다. 당시 이스라엘에서 제조한 보안장비가 유명세를 떨치면서 많은 기업들이 이용했는데, 바이러스가 공격하면 해당 장비는 DNS 서버에 질의하는 과정이 존재했다. 해당 장비가 공격이 되면서 수많은 DNS 요청이 서버에 몰렸고, 결국 DNS 서버가 다운되면서 이를 이용한 서비스를 이용할 수 없어졌다. 이 때 블래스터 웜을 포함한 많은 웜들이 등장했다.


2004년

마이둠 웜. 네트워크 트래픽을 증가시켜 피해를 주었고, 이 웜에는 백도어가 포함됐다. 또한 블루투스를 통해 전염된 사례로써 휴대폰도 더 이상 안전지대가 아니라는 것을 보여준 카비르 웜도 존재한다.


2005년

휴대전화에 저장된 번호로 악성코드를 확산시키는 컴 워리어가 등장했다.


2006년

맥 OS는 바이러스부터 안전하다는 잘못된 인식으로 인해 맥 사용자가 증가하면서 생겨난 맥 OS용 바이러스인 LEAP가 등장했다.


2007년

분산 C&C 서버 사용하는 백도어 트로이목마 STORM 웜이 등장했으며, 이메일을 통해 확산됐다.


2010년

이란 등 중동 국가에서 집중적으로 발견된 SCADA 망 분리 시스템의 물리적 취약점을 노린 스턱스넷이 등장했으며 역사상 발견된 최초의 악성코드로 유명하다. 여러 OS에 호환이 되고, 구조가 복잡하여 보통의 10KB 바이러스와는 다르게 500KB나 된다. 에드워드 스노든의 프리즘 고발로 인해 NSA와 이스라엘이 공동 제작했음이 드러났으며 이는 사이버 전쟁의 시작을 알리는 신호로 알려져있다.


2011년

산업용 제어 시스템을 공격하는데 유용한 정보를 수집하는 정교한 트로이목마 DUQU가 등장했으며 스턱스넷과 동일하게 제로데이 취약점을 이용했다.


2012년

사이버 무기로 적극적으로 사용되고 있는 Flame 악성코드가 등장했으며 적극적인 공격보다는 도청, 정보유출과 같은 조용한 성격을 가지고 있다. 


2015~2017

랜섬웨어의 전성기로 현재에도 매그니튜드 익스플로잇이나 최신 취약점을 활용한 랜섬웨어가 꾸준히 발생하고 있다. 한 번은 새도우 브로커스라는 해커 조직이 NSA를 상대로 해킹한 적이 있다고 한다. NSA에게 백억 달러의 돈을 요구했지만 NSA는 해킹당했을리가 없다며 상대하지 않았다고 한다. 새도우 브로커스는 해킹된 문서의 일부분을 보여줌으로써 증명했지만, NSA 측은 이에 대해 상대하지 않았다. 그러자 새도우브로커스는 해커들을 대상으로 투자형식으로 백억 달러의 금액을 넘기면 NSA측에서 보유하고 있던 제로데이 취약점을 공개할 것으로 약속했지만, 몇몇 해커들이 노력해도 제시한 금액을 채우지 못해 포기했다고 한다. 결국 마지막으로 보안 업체들에게 요구했지만 백 억달러를 주면 넘겨줄 것으로 얘기했으나 보안 업체 또한 해당 금액을 채우지 못함으로써 무산되어 이와 화가 난 해커가 모두 공개했다고 한다. 올해 랜섬웨어에 의한 피해를 줄이기 위해 카스퍼스키 랩에서 노 모어 랜섬웨어 프로젝트를 주도하기 시작했다.









WRITTEN BY
흉내지빠귀

받은 트랙백이 없고 , 댓글이 없습니다.
secret