RSS 프로젝트 제로
팔로우
Windows 버그 클래스: IDispatch를 사용하여 트랩된 COM 개체 접근
구글 프로젝트 제로의 연구원 제임스 포쇼는 DCOM 및 .NET Remoting과 같은 객체 지향 원격 기술에서 "포획된 객체 버그 클래스"에 대해 논의합니다. 이러한 기술은 프로세스 및 보안 경계를 넘나드는 객체 지향 인터페이스 개발을 허용하지만, 이러한 유연성에는 권한 상승 또는 원격 코드 실행 가능성을 포함한 단점이 있습니다.원격으로 처리할 수 있는 모든 객체가 안전한 것은 아니며, XML 라이브러리와 같이 일부 객체는 XSLT 문서의 컨텍스트에서 임의의 스크립트 코드를 실행할 수 있습니다. XML 문서 객체가 경계를 넘어 액세스 가능하게 되면 클라이언트는 서버 프로세스의 컨텍스트에서 코드를 실행할 수 있습니다.이 버그 클래스를 유발할 수 있는 여러 시나리오가 있는데, 여기에는 안전하지 않은 객체를 무심코 공유하는 것, 비동기 마샬링 기본 요소를 사용하는 것, 그리고 객체를 조회하고 인스턴스화하는 기본 메커니즘을 악용하는 것이 포함됩니다. 예를 들어, Windows Runtime 라이브러리는 기존 XML DOM Document v6 COM 객체에 코드를 추가하여 런타임 관련 인터페이스를 노출하고 악의적인 클라이언트가 이전 IXMLDOMDocument 인터페이스를 쿼리하여 XSLT 스크립트를 실행할 수 있도록 하는 버그를 도입했습니다.또 다른 예로 FileInfo 및 DirectoryInfo .NET 클래스는 값과 참조로 모두 마샬링될 수 있으며 서버 프로세스에서 객체의 새 인스턴스를 만드는 데 사용될 수 있습니다. 공격자는 객체의 직렬화된 형태를 서버로 보내면 서버가 객체의 새 인스턴스를 만들고, 생성된 객체를 다시 읽으면 공격자에게 참조로 마샬링되는 것을 활용할 수 있습니다.마지막으로 언급된 시나리오는 객체를 조회하고 인스턴스화하는 기본 메커니즘을 악용하여 예상치 못한 객체를 생성하는 것입니다. 예를 들어 COM에서 공격자는 CoCreateInstance API를 사용하여 서버의 컨텍스트에서 임의의 COM 객체를 생성하고 클라이언트로 반환받을 수 있습니다. 이는 서버에서 생성된 XML DOM Document 객체를 클라이언트로 참조로 마샬링하여 반환받고, 이를 사용하여 서버의 컨텍스트에서 임의의 코드를 실행하여 악용될 수 있습니다.이러한 시나리오는 객체 지향 원격 기술 사용의 보안 영향을 신중하게 고려하고 보안 경계를 넘어 안전한 객체만 공유하도록 하는 것이 얼마나 중요한지 강조합니다.