운영체제

[운영체제] 원격코드 실행 원리 : 운영체제 이론의 시작

wjdwwidz 2024. 6. 27. 14:55

Process

컴퓨터로 게임을 하는 과정을 생각해보자. 게임으로 접속 (로그인) 하면 아바타 , 캐릭터 등이 나를 대신해 활동한다. 

그렇다면 컴퓨터를 실행할 때도 나를 대신한 무언가가 존재하지 않을까?

 

우리는 그것을 Process라고 한다. 키보드, 마우스로 조작하는 대상은 기본적으로 process다. 우리가 캐릭터를 움직인다고 해서 게임의 월드의 날씨나 정책이 바뀌지 않듯이, 컴퓨터를 키보드, 마우스를 이용해 process를 통제한다고 한들, 컴퓨터 내부 기본 정책은 바뀌지 않는다. 


컴퓨터 3대 구성 요소

  • User :  Daemon(리눅스), Service (윈도우) 등의 시스템 프로세스  | 캐릭터,  공무원 역할
  • Kernel (SW): 관리, 제어 | 게임 월드, 국가 의 역할
  • H/W : CPU + RAM 

 

컴퓨터는 피지컬 (H/W) + 로지컬(S/W; 커널+유저 영역)으로 이루어져 있다.

 

여기서 Kernel + User를 "운영체제" 라 부른다. 

 


부모 프로세스와 자식 프로세스

 

컴퓨터를 부팅할 때의 화면(GUI)을 상상해보자. 우리가 마주하는 그것은 화면에 불과하며, 그 화면이 띄워지는 동안 컴퓨터 안에서는 알맹이에 해당하는 Process 가 실행되고 있다.

 

 

부팅 시에 실행되는 프로세스는 Login Process라고 하며, 문지기 역할을 한다. 계정정보 ID, pw를 입력하면 게임 월드 안으로 들어가는 것처럼 우리도 Login Process를 통해 컴퓨터 안에 들어갈 수 있게 된다. 로그인 프로세스는 나의 정보를 확인해서 맞다면, 다음 어떤 것을 "실행"을 해준다. 로그인 프로세스의 주요 기능은 "인증" 과 다음 프로세스 하나를 "실행" 해주는 것. 

 

로그인 프로세스를 거치면 Shell을 실행하게 된다.( 윈도우로 치면 탐색기, 리눅스는 Bash 등 )
Shell 을 통해 우리는 또 무언가를 실행하는데,  이 실행의 주체가 되는 Shell은 부모 프로세스, shell로 인해 실행되는 프로세스는 자식 프로세스이다. 이 때 프로세스마다 권한이 있는데 , 로그인 프로세스가 인식한 정보에 알맞게 다음 프로세스인 Shell 에도 권한을 부여해준다. 관리자로 LoginProecess에 로그인했을 때는 다음 Shell을 실행할 때도 관리자 권한이 부여된다는 뜻.

 

특별한 이유가 없다면 자식 프로세스는 부모 권한을 상속받게 된다. 

 

 

권한

프로세스는 저마다 권한을 가진다. (관리자, root, systemAdmin) 

우리는 이런 경우를 상상해볼 수 있다. 
롯데월드를 신나게 즐기고 밖으로 나와보니, 한 학생이 다가와 자유이용권을 자기에게 주면 안 되겠느냐고 부탁한다. 
귀가가 예정되어있던 나는 그 학생에게 자유이용권을 넘겨준다. 
그 학생은 자유이용권을 가지고 롯데월드에 입장한다. 

학생은 자유이용권을 넘겨받음으로써, 권한을 부여받은 것이다.

 

 

1. 로그인 프로세스가 나에게 권한 부여를 한다. 이 때 "인증"이라는 절차를 걸친다.

권한이 부여되면 그 권한에 따라 자식 프로세스(시스템 프로세스) 를 통제할 수 있다. 컴퓨터라는 월드에서 나로 식별되는 캐릭터가 shell, 이므로 어떤 계정으로 로그인 하냐에 따라 캐릭터가 할 수 있는 것들이 달라지는 원리.

 

2.  시스템 수준에서 작동하는 *Samba와 같은 시스템 프로세스는 관리자 권한을 가지고 있다. 삼바라는 프로세스 안에는 어떤 코드를 가지고 있고, 그 코드로 다음 프로세스들을 동작시킬 수 있다.


원격코드 실행

 

소위 "해킹을 한다" 는 , 관리자 권한을 가진 Process 에 대고 무언가를 주입하는 것이다. 키보드로 치든, 네트워크로 보내든, 파일에 썼다가 읽게 만들든, 어떻게든 정보를 주입한다. 주입하는 정보를 가지고 일차적으로 Samba 와 같은 (또는 Shell 등)관리자 권한을 가진 Process가 오작동하게 만든다. 해킹의 기본 원리는 "오작동"에서 시작한다. 

 

그렇게 되면 주입 당한 프로그램은 시키지도 않은 짓을 하는데, 결과적으로 Shell 프로세스를 실행하게 만든다.

 

System Process가 Shell을 실행하게 만들면, 이 shell 은 (process로 부터 권한을 상속받아) 관리자 권한을 가지게 된다. 관리자 권한으로 접근하게 되면, 이후 그 시스템을 완벽히 장악할 수 있고, 악성코드를 관리자 권한으로 돌리게 되는 등의 행위를 시작한다.

 

결국 권한을 얻는다는 것은, 이 프로세스 안에 원래 존재하던 코드가 아닌데 (원래 무언가를 실행시키는 shell 코드가 존재하지 않는데) , 그것을 어떻게든 주입해서, 존재하지 않는 코드가 실행되도록 유도하는 것이다. 권한을 가지고 탈취하게 되면 모든 것을 장악할 수 있다.

 

이를 막기 위해 관리자 권한을 가지는 Process의 생성을 제한하거나 / 소위 '실행' 이라는 행위를 OS수준에서 모니터링하고, 허용된 게 아니면 차단시키는 것 (Secure OS)등의 보안 솔루션을 적용하기도 한다. (이는 Kernel 차원에서 일어나는 것)

 

 

 

 


 

* Samba : Windows 운영체제를 사용하는 PC에서 Linux 또는 UNIX 서버에 접속하여 파일이나 프린터를 공유하여 사용할 수 있도록 해 주는 프로그램

윈도우와 유닉스계열의 운영체제나 다른 시스템 간의 자원을 공유할 수 있도록 만든 프로그램

출처: https://inpa.tistory.com/entry/LINUX-📚-삼바SAMBA-설치-설정-※-총정리 [Inpa Dev 👨‍💻:티스토리]


ref :

https://www.youtube.com/watch?v=ZrNp9Be83qQ&list=PLXvgR_grOs1DGFOeD792kHlRml0PhCe9l&index=1

 

https://velog.io/@roeniss/%EB%84%90%EB%84%90%ED%95%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B0%95%EC%9D%98-%EC%9A%94%EC%95%BD