<Axxxxx 로그인 예시>
1. 국내 유명 주요 보안 업체인 Axxxxx의 정상 로그인 테스트
TLS암호화 여부와 상관없이 개발자모드에서 Network Traffic을 확인해 본다.
캡처 부분 중 “SECRET_PASSWORD” 부분이 입력한 비밀번호임.
2. Progress Telerik Fiddler 으로 HTTPS Decode옵션을 켜놓고 로그인 시도시
(Fidder의 인증서는 PC에 등록하지 않음)
3. 무시하고 강제 로그인시 fiddler에서 캡처
<하지만 위 상황은 안전하지 않다고 할 수 없다>
해당 연결은 TLS을 이용한 HTTPS연결을 사용하고 있다. TLS연결의 경우 비대칭 키 암호화 방식을 기반으로 한다. TLS연결의 방식을 대강 설명하자면, 서버가 가지고 있는 인증서의 Public Key을 클라이언트(브라우저)에게 보내어 클라이언트가 랜덤으로 생성한 세션 키를 서버의 Public Key로 암호화하여 서버에게 전달한다. 이 과정을 키 교환이라고 한다. 이후 과정부터는 해당 키를 통해 대칭키 암호화를 이용해 서버와 클라이언트가 보안 통신을 한다. TLS인증 방식을 무력화 하는 방법은 MITM(중간자 공격)방식이 있다. MITM방식은 중간에 Proxy서버가 자기 자신을 클라이언트에게 대상서버라고 속이는 방식이다. 그리고 서버와는 정상적인 보안 통신을 하고, 클라이언트와는 자기가 만든 가짜 인증서를 사용하여 오고가는 패킷을 볼 수 있게 된다. TLS에서는 이러한 공격을 무력화 시키기 위해 PKI(공개키 기반 구조)의 인증서를 사용한다. 이는 신뢰할 수 있는 루트 인증 기관(CA)의 인증서를 미리 컴퓨터에 저장해 놓고, CA에서 서버의 인증서의 키를 전자서명하여 인증서에 포함시킨다. 이러한 과정을 통해 MITM공격이 발생하여 서버의 인증서가 변경되면 CA의 전자서명이 없기 때문에 클라이언트 브라우저에서는 이를 인지할 수 있게 되고 따라서 사용자에게 해킹위험을 경고하여 더 이상 진행하지 않도록 한다.
<HSTS 적용시>
일반적인 웹 사이트의 경우 MITM공격이 발생한 경우 웹 브라우저에서 경고를 하지만 사용자 선택에 의해 해당 경고를 무시하고 다음 과정을 실행할 수 있다. 이러한 경우 사용자의 과실이지만 위 예시처럼 사용자의 크리덴셜이 노출될 수 있다.
이러한 일 또한 방지하기 위해서는 HSTS(HTTP Strict Transport Security)을 사용해야 한다. 이는 한번 이상 정상적인 방법으로 웹사이트에 접근했을 경우 브라우저가 서버 인증서를 저장하고 유지하도록 하여 이후 MITM공격이 발생하였을 때 아래 사진과 같이 더 이상 다음 과정으로 진행하지 못하게 막는 기능이다.
*여기서 잠깐*
만약 Fiddler으로 SSL Decrypt옵션을 켰는데 위와 같은 경고창이 뜨지 않는다면? 이는 Fiddler의 인증서를 컴퓨터에 “신뢰할 수 있는 루트 인증 기관”으로 저장한 것이다.
”Export root certificate to Desktop” 버튼을 누르게 되면 사용자의 컴퓨터에 Fiddler의 인증서를 신뢰할 수 있도록 저장시킨다.
앞서 설명했듯이 TLS은 PKI기반을 하며 “신뢰할 수 있는 루트 인증 기관”의 인증서는 미리 컴퓨터에 저장해 놓는 방식으로 서버의 인증서의 신뢰 여부를 검증한다. 하지만 만약 정상적인 CA인증서가 아닌 위와 같이 Fiddler의 인증서를 신뢰할 수 있게 하면 Fiddler가 임의로 생성한 MITM용 인증서까지 신뢰할 수 있게 된다. 따라서 브라우저도 Fiddler의 가짜 인증서를 신뢰한다고 표현하는 것이다.
실제 사용 환경에서는 해커가 사용자의 컴퓨터에 가짜 CA인증서를 저장할 수 없다. 따라서 PKI기반의 TLS통신은 “안전하”며, 현재 TLS통신 외에 공공 네트워크에서 안전하게 통신할 수 있는 있는 방법은 세상에 존재하지 않는다.
댓글