리버스 엔지니어링은 다양한 분야에서 사용될 수 있는 용어다. 이 책은 그중에서 소프트웨어 리버스 엔지니어링을 다룬다. 소프트웨어 개발을 위해 개발자가 프로그래밍 언어로 작성한 소스코드는 컴파일러에 의해 CPU가 실행할 수 있는 바이너리 코드 형태로 변환된다. 그렇게 만들어진 바이너리 코드를 디스어셈블러를 이용해 우리가 이해할 수 있는 어셈블리 코드로 변환할 수 있다. 소프트웨어 리버스 엔지니어링은 디스어셈블리 과정으로 만들어진 어셈블리 코드를 해석해 해당 소프트웨어의 동작 방식을 이해하고 분석하는 과정이라고 할 수 있다. 따라서 리버스 엔지니어링에 있어 어셈블리 코드의 이해는 필수라고 할 수 있다. 어셈블리 코드는 그것이 동작하는 CPU의 종류에 따라 각기 다른 스펙으로 정의된다. 독자는 이 책을 통해 어셈블리 코드를 분석하는 방법을 알 수 있을 것이다. 그리고 일반적인 x86 계열의 CPU뿐만 아니라 ARM, MIPS에 대한 어셈블리 코드도 매번 비교 설명하기 때문에 PC용 바이너리뿐만 아니라 IoT 기기와 같은 다양한 플랫폼에서 동작하는 바이너리를 리버스 엔지니어링할 수 있는 기반 기술을 배울 수 있을 것이다.
웹어셈블리는 기존의 웹 애플리케이션 개발 패러다임을 바꿀 수 있는 기술로, 앞으로 어떻게 성장하고 발전해 나갈 것인지 관심 갖고 지켜봐야 하는 분야다. 아직 일반적으로 사용되기에는 진입 장벽이 있고 부족한 점도 있지만 기술 자체의 개념과 목적, 필요성이 명확하기 때문에 대부분의 웹 브라우저 벤더에서 이미 웹어셈블리를 지원하고 있다.
비록 지금은 다른 웹 기술에 비해서 상대적으로 많은 관심을 받거나 사용되는 것은 아니지만, 웹어셈블리를 사용해 기존보다 빠른 성능의 웹 애플리케이션을 만들 수 있다. 그리고 이를 통해서 사용자들에게 다양하고 풍부한 웹 경험을 제공할 수 있다. 비단 PC나 모바일의 웹 브라우저 기반의 웹 애플리케이션뿐만 아니라, 잠재적으로 IoT나 자동차, 로봇 등 다양한 플랫폼에도 네이티브 애플리케이션처럼 적용이 가능하다고 생각한다.
이 책을 통해 웹어셈블리가 무엇이며, 웹어셈블리 모듈을 어떻게 작성하고 빌드하는지, 작성한 웹어셈블리 모듈과 자바스크립트가 어떻게 상호작용하며 웹어셈블리를 이용해서 어떤 웹 애플리케이션을 만들 수 있는지 자세히 알게 될 것이다.
OAuth는 현재 웹 애플리케이션이나 서비스뿐만 아니라 네이티브 애플리케이션에 이르기까지 광범위하게 사용되고 있다. 사용하기 쉽고, 서비스 간의 연동과 구현을 간단히 해결할 수 있게 해주기 때문일 것이다. 이 책은 OAuth가 무엇인지를 설명할 뿐만 아니라 OAuth의 구현 방법과 구현에 있어서의 고려사항 등 OAuth와 관련된 전반적인 내용을 모두 설명하고 가이드하고 있다. 특히, OAuth 구현에 있어서 중요하게 고려해야 하는 보안적인 부분(OAuth 구현에 있어서 발생할 수 있는 일반적인 보안 취약점과 그것을 피하는 방법)에 많은 지면을 할당해 OAuth 구현에 있어서의 잠재적인 위협을 자세히 설명하고 실용적인 가이드를 제시하고 있다는 것이 특징이라고 할 수 있다.
그리고 토큰 및 동적 클라이언트 등록과 좀 더 고급 주제에 대해서도 설명하고 있다. 즉, OpenID 커네트와 JOSE/JWT, JOSE 메커니즘, 토큰 인트로스펙션, 토큰 폐기와 같은 많은 관련 기술들도 함께 설명하고 있다. 또한, OAuth 2.0이 인증 프로토콜이 아닌 이유와 OpenID 커넥트를 이용한 OAuth 기반 인증 프로토콜을 구축 방법에 대해서도 살펴보며, 사용자간 공유를 지원하는 UMA(User Managed Access) 프로토콜과, PoP(Proof of Possession) 토큰, HEART, iGov 프로파일 대해서도 살펴본다. 한마디로 OAuth 뿐만 아니라 OAuth와 관련된 모든 것을 다루고 있다고 보아도 무리는 아닐 것이다.
OAuth를 단순히 강력하고 사용하기 편한 도구로만 바라보지 말고 하나의 서비스를 구성하는 중요한 구성 요소 중 하나라고 생각한다면 그 바라보는 관점이 달라지게 돼 OAuth의 유연함과 확장성을 제대로 이용할 수 있는 계기가 될 것이다. 그 결과 OAuth가 여러분의 서비스 내부에 더 깊숙하게 녹아 들어가게 되는 계기가 되길 희망한다.
웹 애플리케이션 기술은 매우 역동적으로 변화, 발전해 왔다. 앞으로도 계속해서 새로운 웹 애플리케이션 기술이 등장하고 사라질 것이다. 또한 웹 애플리케이션 기술은 그 영역을 지속해서 확장해 나가고 있다. PC나 모바일 기기뿐만 아니라 다양한 가전 기기, 자동차, 로봇, 산업 기기 등 현재는 그 영역을 경계 짓는 것 자체가 무의미하게 여겨질 정도다.
그런 역동적인 웹 애플리케이션 기술 중에서 가장 많이 사용되는 것 중 하나가 바로 OAuth 2.0이다. OAuth 2.0은 전 세계적으로 널리 사용되는 표준 인가 프로토콜이다. Facebook, Google뿐만 아니라 국내외의 수많은 IT 기업들이 자신들의 서비스나 애플리케이션에 OAuth 2.0 기술을 적용하고 있다. 또한, 그러한 기업들은 Open API 형태로 자신들의 기술들을 오픈하는 경우가 많은데, 그런 Open API에 대한 인가 프레임워크로서 OAuth 2.0이 주로 사용되다. 따라서 지금 여러분들이 주로 사용하는 애플리케이션 중에서 OAuth 2.0 기술을 이용하는 것이 생각보다 많을 것이다. OAuth 2.0이 그렇게 보편적으로 널리 사용되는 이유 중 하나는 OAuth 2.0이 사용자 인가 문제를 간단히 해결해 주기 때문이다. 물론, 보안하는 관점에서 OAuth 2.0을 자세히 들여다보면 잠재적으로 문제가 될 만한 부분이 보일 수 있다. 하지만 OAuth 2.0은 오픈 스펙이기 때문에 그것의 세부적이고 전체적인 구현 방법 자체에 대해서는 명확히 정의하지 않는다. 따라서 OAuth 2.0을 구현하는 방법은 개발사마다 약간씩은 다를 수 있다. 즉, OAuth 2.0에 대한 잠재적인 보안 위협은 OAuth 2.0 스펙 자체보다 그것을 구현하는 방법에 더 의존적이라고 말할 수 있다. 물론 이 책에서는 OAuth 2.0 애플리케이션을 개발하면서 보안적으로 어떤 것을 고려해야 하는지 설명하며, OAuth 2.0 애플리케이션에 대한 보안 공격은 어떤 것이 있을 수 있고 각 공격에 대한 대응 방법도 설명한다.
이 책은 매우 체계적으로 OAuth 2.0의 스펙을 설명하며, 동시에 실제 예제 애플리케이션을 통해서 그 내용을 친절히 설명한다. 또한, OAuth 2.0 스펙의 다른 군더더기를 빼고 핵심적인 부분에 집중함으로써 OAuth 2.0을 이해하고자 하는 독자나 OAuth 2.0을 이용해 애플리케이션을 개발하고자 하는 개발자에게 매우 실용적인 가이드다.
OAuth 2.0은 현재 광범위하게 사용되고 있는 인가(Authorization) 프로토콜이다. 상대적으로 구현이 간단할 뿐만 아니라 다양한 확장성을 제공하고 있기 때문에 많이 사용된다고 할 수 있다. 즉, 데스크톱 애플리케이션, 모바일 앱, 그리고 웹 애플리케이션 등 다양한 형태의 애플리케이션에서 인가 플로우를 간단히 개발할 수 있게 해준다.
이 책을 통해 매우 다양한 형태의 OAuth 2.0 애플리케이션과 그 확장된 기능 구현에 대해 배울 수 있다. 즉, Spring Security를 이용해 다양한 형태의 OAuth 2.0 인가 플로우뿐만 아니라 동적 클라이언트 등록, 토큰 인트로스펙션, PKCE, JWT 액세스 토큰, OpenID Connect 같은 확장된 주제와 기능을 어떻게 구현하면 되는지 예제 코드를 기반으로 실질적으로 가이드한다. 또한 OAuth 2.0 클라이언트와 서버 간에 발생할 수 있는 보안 취약점과 그것을 방지하기 위한 방법을 제시한다.
OAuth 2.0은 엄밀히 말하면 인증(Authentication) 프로토콜이 아닌 인가 프로토콜이기 때문에 인증 프로토콜이 추가로 필요한 애플리케이션인 경우 OAuth 2.0을 확장해서 인증을 구현하거나 별도의 인증 프로토콜을 구현하는 데 대해 좀 더 깊이 생각할 수 있는 계기가 되길 희망한다.
리버스 엔지니어링은 전통적으로 소프트웨어 보안과 디지털 포렌식, 악성코드 분석, 보안 취약점 연구 등 사이버 보안 영역에서 필요한 중요 기술로 자리 잡고 있습니다. 오늘날의 IT 환경은 클라우드 컴퓨팅, 사물인터넷(IoT, Internet of Things), 인공지능(AI, Artificial Intelligence) 등 혁신적인 기술이 주도하고 있으며 앞으로도 새로운 IT 기술이 주도하는 방향으로 끊임없이 진화해갈 것입니다. 그러한 새로운 기술들은 새로운 기회를 제공하지만 새로운 형태의 보안 위협에 직면하게 하고 있습니다. 전통적인 보안 위협뿐만 아니라 새로운 형태의 보안 위협에 대응하는 데 기본적으로 필요한 기술이 소프트웨어 분석 능력입니다. 단순한 소프트웨어 분석 역량이 아닌 보안 위협의 본질을 파악하고 그것을 역추적할 수 있는 기술과 통찰력이 필요합니다. 이를 위해 사이버 보안 전문가에게 필요한 기본 도구 중 하나가 리버스 엔지니어링 도구입니다. 기드라는 오픈소스 리버스 엔지니어링 도구 중 가장 강력하고 유연합니다. 오픈소스이기 때문에 전 세계의 사이버 보안 전문가와 연구자들이 적극적으로 기능을 발전시키고 있다는 장점이 있습니다. 기드라는 강력한 디컴파일러와 디스어셈블러를 포함하고 있으며 복잡한 바이너리 분석을 손쉽게 수행할 수 있는 다양한 기능을 제공하고 있습니다.
기드라의 설치부터 기본 사용법 그리고 기드라가 제공하는 다양한 기능 및 활용 방법을 자세히 설명하며, 사용자가 필요하다면 자신만의 고유한 기능을 만들어 사용할 수 있는 방법까지 자세히 다루는 것이 이 책입니다. 즉, 리버스 엔지니어링을 수행해야 하는 사이버 보안 담당자를 위한 종합적이고 전문적인 안내서이자 실용적인 지침서라고 할 수 있습니다. 기드라를 활용한 리버스 엔지니어링의 세계를 깊이 이해하고 자신의 리버스 엔지니어링 능력을 한 단계 끌어올리는 기회가 되길 바랍니다.