이 포스트는 널널한 개발자님의 강의를 듣고 작성한 글입니다.
신문기사를 보면 '~ 원격코드 실행 취약점 발견'로 많이 봤을 것이다. 그런데 취약점인데 '원격코드 실행'이라는 말이 들어가면 보안 등급은 Critical로 변경이 된다. '인증없는 공격자가 루트권한으로 임의의 코드를 실행'한다른 말이 중요한데 여기서 루트권한이라는 것은 관리자를 뜻하고 관리자로 임의의 코드를 실행한다는 것은 시스템을 장악했다는 소리이다.
이 user-mode에서도 좀 더 자세히 살펴보면 linux에서는 Daemon 윈도우에서는 Service라는 시스템 프로세스가 있다. 이 프로세스들은 OS가 알아서 실행시켜준다.
예를 들어 PC라는 세상이 있는데 여기에 우리가 로그인을 하는데 '나'를 대신하여 존재하는 프로세스가 있다. 이 프로세스라는것도 키보드, 마우스로 통제하는데 이렇게 해서 OS 위의 세상을 돌아다닌다.
커널을 국가로 비유하면 user-mode에 프로세스는 국민이고 데몬, 서비스같은 시스템 프로세스를 공무원으로 비유할 수 있겠다. 중요한것은 시스템 프로세스도 프로세스인데 프로세스마다 권한이라는 개념이 있는데 이 시스템 프로세스는 기본적으로 관리자이다. 다시말해 root이다.
우리가 PC를 켜서 부팅을 하면 제일 먼저 보이는 화면이 나오는데 이 화면의 프로세스가 로그인 프로세스인데 이 프로세스가 중대한 역할을 하는데 이 프로세스에 대해서 우리는 계정정보를 입력하고 승인되면 컴퓨터 세상으로 들어간다. 이때 로그인 프로세스는 내가 입력한 정보가 맞다면 그때 실행을 해주는데 이때 프로세스를 실행하는데 그 프로세스가 shell이다. 이때 shell도 프로세스라 권한을 부여받는데 권한 부여해주는 프로세스가 로그인 프로세스이다. 만약, 로그인할 때 관리자로 로그인하면 shell은 관리자 권한을 갖는다.
또 이 shell을 통해 명령을 입력후 새로운 프로세스를 생성 및 실행하는데 이 실행의 주체가 되는 shell을 부모 프로세스라고 하고 새로운 프로세스를 자식 프로세스라고 하는데 특별한 이유가 없다면 자식은 권한을 상속받는다.
어떤 시스템 프로세스가 관리자 권한을 가지는데 이 프로세스안에 코드가 있고 코드를 작동해 실행을 할텐데 관리자 프로세스에 대해 어떤 코드를 주입(키보드, 네트워크, 파일형태로)하고 주입정보를 가지고 시스템 프로세스를 오작동하게 만든다. 그러면 시스템 프로세스들이 shell 프로세스 실행을 시키지도 않았는데 실행시킨다. 그러면 shell 프로세스는 권한을 상속받아 관리자 권한을 갖고 시스템 장악이 되고 혹은 악성코드를 실행시켜 관리자 권한을 받아 바이러스를 퍼트린다.
이걸 막기위한 기법으로 관리자 프로세스 차단 혹은 OS가 모니터링을 하는데 그 기법을 Secured OS라고 불린다.