기초 공부 중

2017. 12. 4. 02:470x06 Malware

728x90

모든 컴퓨터에는 운영체제와 소프트웨어가 설치되어 있다. 하지만, 운영체제는 단순히 어플리케이션의 원활한 활동을 위해 도와주는 매개체에 불과하다. 하지만, 컴퓨터의 장치가 다르면 거기에 맞는 운영체제도 달라지게 된다. 예를들어 A학교 학생의 교복과 B학교 학생의 교복이 다른 것 처럼 말이다. 그렇다면 A학교는 A학교만의 컴퓨터 장치를 가지고 있는 것이고, B학교는 B학교만의 컴퓨터 장치를 가지고 있게 되는 것이다.

A학교 학생이 A학교 교복을 입교 B학교의 구성원은 될 수가 없다. 


우리 운영체제에는 윈도우즈, 리눅스, VXWorks, Symbian 등이 존재한다.

VXWorks는 임베디드 디바이스에서 주로 쓰인다고 하며, Symbian은 휴대폰에서 사용한다고 한다. Symbian은 조사해보니 노키아 휴대폰에서 사용되는 것이라고 한다. 


가끔 씩 사람들이 안드로이드는 운영체제가 아니냐? 라고 질문을 할 때가 있는데 나는 이 질문에 대해서 안드로이드는 운영체제가 아닌 플랫폼이라고 말을 하고 싶다. 운영체제라 함은 사용자 인터페이스를 제공해주고, 컴퓨터를 동작시킴과 동시에 연산결과를 사용자가 알 수 있게 해주면서 시스템에 대한 디버깅과 진단 정보의 제공이 있어야 한다. 

안드로이드가 이런 역할은 하지 않는 것 같다. 하지만 또 다른말을 해보면, OS자체도 플랫폼에 속해있다고 볼 수 있다. 늘 이것에 대해 종종 생각을 하지만 아직 완벽하게 개념 정립이 안되어 있기도 하다.

그렇지만, 확실한 것은 플랫폼은 개발자 입장에서 응용프로그램 개발/실행 환경을 제공하는 모든 하드웨어, 소프트웨어 구성임과 동시에 사용자 입장에서는 설치하고 사용할 수 있는 프로그램을 제공하는 하드웨어, 소프트웨어 구성을 의미한다고 보기에 앱 어플리케이션을 실행할 수 있게 도와주는 안드로이드는 플랫폼이라고 생각한다.



커널의 중요 요소에 대해 한번 더 되짚어 보는 시간을 가졌다. 커널에 대한 기본적인 사전적 정의는 평소에 숙지하고 있었으나, 정확한 기능에 대해서는 숙지를 못하고 있었는데 이번 기회에 숙지를 하기로 했다. 


우선, 간단하게 4가지의 기능이 존재하게 된다.

프로세스 관리, 파일 접근, 보안, 메모리 관리가 중요 요소 4가지 이다.


1. 프로세스 관리 

프로세스가 동작하려면 무엇이 있어야 할까? 그것은 바로 CPU이다. 

커널은 CPU 스케줄링을 관리하는 코드를 포함하고 있다. 운영체제가 스레드를 지원한다면 커널은 각각의 스레드 별로 CPU 스케줄링을 수행할 것이다. 모든 스레드와 프로세스에 대한 정보는 메모리상의 데이터 구조체에 의해서 유지와 관리가 된다. 

공격자는 데이터 구조체를 변경하게 되면 특정 프로세스를 은닉할 수가 있게 된다. 

아직까지 이 구조체가 00이다 라고 확고한 대답을 하지 못하는 경우로 봐서 해당 주제에 대한 지식이 많이 부족한 것 같다. 


2. 파일 접근 

운영체제가 제공하는 것 중 파일시스템이라는 것이 있다. 

파일시스템이 없다면, 운영체제에서 파일을 사용할 수가 없을 것이다. 

그 이유는 파일시스템이 파일과 디스크 블록간에 밀접한 연결작업을 해주기 때문이다.


파일같은 경우는 정보를 저장할 수 있는 기억장소공간이 디스크에 할당되어 있기 때문에 다른 파일들과 구별되는 고유의 이름이 존재한다.

디스크같은 경우는 소멸되지 않는 기억장치로써 파일은 프로세스가 수행 후 종료되면서 파괴될 수 있지만 디스크는 계속 존재하게 된다. 

개념은 그렇다하고, 왜 밀접한 연결작업을 해주는걸까?


디스크는 고정된 블록단위를 가지고 있는데 (블록 당 512바이트) 이 블록단위로 데이터를 저장하게 된다. 

파일은 바이트가 "연속적"으로 이어져 있는 구조이다. 하지만, 이 파일들이 모두가 다 같은 공간에 저장되는 것은 아니다.

저 마다의 방이 존재한다. 그 방에 접근하기 위해서는 특정 오프셋을 알아야한다. 특정 오프셋을 안다는 것은 디스크가 가지고 있는 섹터단위를 안다는 것이다.

디스크는 입력과 출력을 섹터 단위로 처리한다. 하지만, 파일을 열람하려는 사용자는 블록에 대한 정보도 모르고, 섹터에 대한 정보도 가지고 있지 않다.

그리고 디스크는 바이트 단위로 처리를 할 수가 없다. 파일이 들어있는 메모리는 바이트 단위로 처리를 할 수가 있다. 이렇게 현저하게 상반되는 특징을 가지고 있기

때문에 둘이는 친구가 되어야 한다. 즉, 디스크는 바이트 단위 처리를 메모리에게 제공받고, 파일은 블록의 정보를 디스크에게 제공받게 됨으로써 

둘이는 구조적 결함 없이 원활하게 상호관계가 형성이 되게 된다.


3. 보안 

커널은 각 프로세스들만의 사생활을 보호해주어야 할 의무를 지니고 있다. 즉, 프로세스간의 독립성을 유지시켜주어야 한다. 그렇게 하기 위해 각각의 프로세스가 접근할 수 있는 메모리 영역을 분리시켜주는 것이고, 권한 또한 설정이 되어 있다. 


4. 메모리 관리 

하드웨어 플랫폼은 복잡한 메모리 관리 체계를 가지고 있다. 아까 3번에서 프로세스들만의 각각의 방을 제공해주긴 해야하지만, 메모리의 "주소"는 중복될 수가 있다. 이 말이 무슨말이냐면 A.exe에서 0x401000을 사용한다고, B.exe에서 0x401000을 사용하지 못하게 하지는 않는다는 것이다. 이러한 것이 가능한 이유가 매핑 때문이다.

이를 좀 더 자세히 알려면 메모리 매핑에 대해서 공부해야한다. 


'0x06 Malware' 카테고리의 다른 글

강의 준비  (0) 2017.12.08
기초 공부중  (0) 2017.12.04
기초공부 중  (0) 2017.12.03
Good Job  (0) 2017.11.29
레몬 세미나  (0) 2017.10.28