Introduction
Mojo
는 Chromium Engine에서 사용하는 IPC
이며, 프로세스 간의 통신을 용이하게 하기 위한 Runtime Library collection
이다. 내가 Mojo
를 공부하는 이유는
Chromium Engine에 대한 전반적인 이해도를 높여 실제 0-day vulnerability
분석과 crbug source auditing
을 용이하게 하기 위함이다. sandbox escaping
취약점을 연구
하기 위하여 꼭 알아야 하는 요소이다.
Mojo
Renderer Process
에서 여러가지 방법으로 Browser Process
와 대화(상호작용)
가 가능하다. 그 방법 중 하나가 바로 Mojom Interface
이다. Mojo
통신은
대부분 비동기
이다. 즉, Mojom
메소드의 반환 값을 얻기 위해서는 callback
이나 promise
를 구현해야 한다.
Mojo는 기본적으로 Remote endpoint
와 Receiver endpoint
가 존재한다. Remote
에서 Method Call을 수행하면 Receiver
에 구현되어 있는 Method가 동작하게 된다.
Mojo Files
은 Chrome을 빌드할 때 생성되며 BUILD.gn
을 수정하여 특정 인터페이스에 대한 바인딩을 수행할 수도 있다.
Mojo Method Call
이제 Mojo 통신을 위해 우리는 Remote endpoint
를 만들어야 한다. 이 Remote endpoint
를 만들기 위해서는 자바스크립트에서 mojo_bindings.js을 로드하고 Chrome에 --enable-blink-features=MojoJS
플래그를 추가하여 Mojo Method
에 직접적으로 접근할 수 있는 환경을 구성해야 한다.
아래 코드는 IDBFactory
인터페이스에 바인드하는 예시다.
1 |
|
이렇게 하면 idbPtr 객체를 이용해 Method Call
이 가능해진다.