서론

웹 서버는 HTTP/HTTPS 프로토콜을 사용해 컨텐츠를 제공하는 서버를 의미합니다. 그런 서버를 분석하는 일에는 방법도 도구도 많습니다만, 필자는 본 문서에서 필자의 경험에 기초한 기본적인 수준의 접근 방법을 안내하고자 합니다.

본 문서는 기본적인 웹 서버의 정보 분석 방법을 기술합니다. 상세한 웹 설계 방법론 등은 다루지 않으며, 수월한 이해를 위해서는 기초적인 웹 구조의 이해가 필요합니다.

도메인

DNS lookup

웹 서버는 십중팔구 도메인을 갖습니다. 아이피보다 훨씬 알기도 기억하기도 쉬운 별칭이기 때문입니다. 그러한 도메인은 웹 서버를 대표하며 웹 서버 분석시 제일 먼저 맞닥뜨리게 되는 부분입니다.

도메인의 정보를 알기 위해서는 제일 먼저 DNS 서버에 질의해야 합니다. 이 과정을 DNS resolve라고 하며, 보통은 사용자가 HTTP 리퀘스트를 하는 과정에 자동으로 포함 되어 있지만, 저희는 이 부분을 손수 확인하고자 합니다.

이러한 과정을 수행하는 프로그램을 보통 DNS Client라고 합니다. 이러한 DNS 클라이언트는 여럿 있고, 전통적으로는 dig 등이 사용되었습니다. 최근에는 dogdoggo등도 나왔고, 동작에 큰 차이는 없으니 독자 분의 입맛에 맞으시는대로 사용하셔도 문제는 없습니다.

질의하는 레코드에는 대개 A, AAAA, MX, TXT, CNAME, SRV 등이 있습니다. A는 ipv4, AAAA는 ipv6, MX는 메일 등을 의미합니다.

독자 분께서는 이러한 레코드들을 질의하여 DNS에 대한 정보를 획득할 수 있습니다.

WHOIS

WHOIS 질의를 하는 방법도 있습니다. WHOIS는 RFC3912로 정의된 프로토콜이며, WHOIS 질의시 도메인 등록 업체 및 날짜, 등록자에 대한 정보를 얻을 수 있습니다. 한국의 경우 KISA에서 지원하고 있으며, 이외에도 많은 서비스들과 프로그램이 있으므로 원하시는 것을 찾아 사용하시는 편이 좋습니다.

TLS

현대 웹 서비스들은 거의 대부분 HTTPS, TLS(SSL)을 지원합니다. 하지만 각 서버마다 그 구현의 상세, 지원하는 TLS 버전 및 Cipher 등이 다른 경우가 많습니다. 이러한 상세 내용을 분석하기 위한 도구는 많지만, 대표적으로는 openssl의 s_client가 사용됩니다. 이를 이용해 접속하면 인증서와 TLS 버전, Cipher 등의 정보를 얻을 수 있습니다.

HTTP

그 다음은 HTTP 통신입니다. HTTP 통신을 분석하는 방법이야 많습니다만, 대표적으로는 Burpsuite 및 Mitmproxy가 사용됩니다. 앱 분석에는 에뮬레이터 + mitmproxy를 자주 사용합니다. 앱을 뜯어보는 방법도 있지만 우선 HTTP 요청부터 분석합니다.

Mitmproxy의 경우 API 분석을 위해 mitmproxy2swagger도 함께 사용하곤 합니다.

HTTP 분석의 경우 웹 서비스마다 구조나 동작 등이 다르고, 분석 목적도 다른 경우가 많기 때문에 상세한 내용을 말씀드리기는 어렵습니다. 다만 로드밸런서, base64 및 md5 등의 암호화 알고리즘, url encoding과 useragent 및 server 헤더. ajax의 개념과 HTTP 프로토콜에 관한 이해가 있으면 좋습니다.

추가로 API의 경우 개인적으로 postman/insomnia 대안 Bruno를 추천합니다.