해커가 암호없이 관리자 권한을 얻는 방법은 원격코드를 실행하는 것이다. 이는 운영체제(OS)와 관련된 내용이다. 해당 강의 목록에선 OS에 관한 내용을 다뤄준다.
키보드와 마우스로 프로세스를 통제해서 컴퓨터를 조작할 수 있도록 도와준다. OS가 국가라면 시스템 프로세스는 공무원이라고 비유할 수 있다. 시스템 프로세스는 관리자(root) 권한을 갖게된다.
윈도우 로그인 화면은 사실상 프로세스에 권한을 주입하는 과정이라고 생각할 수 있다. 프로세스 인증 방식은 웹의 로그인 세션과 같은 구조를 갖고있다.
윈도우 로그인을 완려하면 Process Shell이 열려 권한을 부여해준다(DI). Process Shell을 통해 명령어로 새로운 프로세스를 작동한다면 권한을 상속시켜준다.
Login Process -> Process Shell -> Program Process 순서로 권한이 상속된다.
시스템 프로세스가 관리자 권한을 갖고있을 때, 해당 프로세스에 특정 정보를 주입시켜주면서 프로세스 오작동을 일으킨다. 결과적으로 Process Shell을 실행하도록 만들어 관리자 권한이 해커에게 넘어가게된다.
OS수준에서 Shell의 오작동을 방지하는 기술을 Secure OS라고 한다.
어벤져스의 윈터솔저가 암호코드를 들으면 명령모드로 변환되는 것이 원격코드를 주입시켜 관리자권한을 탈취하는 방식과 흡사하다고 한다.
Thread: 실행의 단위. Cpu 코어가 여러개 있을 때 연산의 개수를 스레드라고 할 수 있다.
하나의 프로세스에는 여러개의 스레드가 존재할 수 있다. 스레드에는 상태라는 개념이 따라다닌다. 작동 중인 경우 스레드는 Running이라는 상태를 갖게되고, 잠깐 멈춰야 할 땐 Suspend 상태에 처하게된다.
Sleep() 함수에는 ms단위의 시간을 매개변수로 넣어준다. Sleep함수가 실행된다면 Cpu의 스케줄러에게 요청을 하여, 상태전환과 관련된 목록에서 Sleep함수를 요청한 특정 스레드를 제외시켜준다.
이는 리액트의 스케줄러가 Cpu의 스케줄러를 따라했다고 생각하면 될 것 같다. 그럼 스레드의 상태(state)는 리액트의 상태 관리와 흡사한 상태라고 이해할 수 있다.
Sleep이 실행되는 동안 스케줄러에서 제외가 되는거지 스레드가 완전 멈추는 것은 아니라는 걸 명심하자. 또 한가지 주의할 점은, 1ms의 시간동안 Sleep을 했다는 가정하에, 1ms를 스케줄러에서 제외하는 것이기 때문에, 실제로 걸리는 시간은 1ms보다 크다. 그렇기에 부정확한 결과를 반환하는 함수라 위험성(우연)이라는 특징을 내재하고있다.
이러한 우연의 특징을 교묘하게 이용한 기능이 랜덤뽑기 기능이라 볼 수 있다. Cpu가 동작하는 시간은 Cpu의 상태에 따라 다르기에, 랜덤시드만 던져주면 사람이 느끼기에 랜덤한 숫자를 던져주기 때문이다. 하지만 이 세상에 있는 모든 랜덤은 pseudo random (수도랜덤)에 속한다. 완벽한 랜덤은 없다는 사실만 알아두도록 하자.
영상에서 책을 추천해줬는데, OS + system programming이 책에 포함되어 있다고 한다.
https://www.academia.edu/42880365/Operating_System_Concepts_10th_Edition
여기서 원본 PDF를 다운받을 수 있으니, 꼭 참고하자.
유익한 글이었습니다.