티스토리 뷰

소프트웨어공학, CS

HTTP 의 약점

이재원님 2021. 5. 5. 18:47

해당글은 그림으로 배우는 HTTP & Network 책의 7장 내용의 일부를 요약한 내용입니다.

 


 

HTTP 는 주로 다음과 같은 약점을 가지고 있다. 이 약점들은 HTTP 만이 아닌, 다른 암호화하지 않은 프토로콜에도 공통되는 문제이다.

 

  • 평문(암호화 하지 않은) 통신이기 때문에 도청 가능
  • 통신 상대를 확인하지 않기 때문에 위장 가능
  • 완전성을 증명할 수 없기 때문에 변조 가능

 

1. 평문이기 때문에 도청 가능


HTTP 리퀘스트와 리스폰스 통신 내용은 암호화 되지 않아 평문으로 HTTP 메시지를 보내게 된다.

 

TCP/IP 는 도청 가능한 네트워크

  • 암호화되어 있지 않은 통신에 약점이 있는 이유는 TCP/IP 의 구조의 통신 내용은 전부 통신 경로의 도중에 엿볼 수 있기 때문이다
  • 인터넷은 전 세계를 경유하는 네트워크로 되어 있다
  • 즉, 통신 경로상에서 악의를 가진 누군가가 패킷을 수집하는 것만으로 통신 내용을 도청할 수 있다
  • 암호화된 통신에서도 도청은 가능하지만 메시지의 의미는 간파할 수 없다
  • 패킷 캡쳐에는 Wireshark 라는 툴이 자주 사용된다

 

암호화로 도청을 피하다

암호화에는 몇가지의 대상이 있다.

 

  • 통신 암호화
    • HTTP 에는 암호화 구조는 없지만 SSL(Secure Socket Layer)이나 TLS(Tranport Layer Security)이라는 다른 프로토콜을 조합함으로써 HTTP의 통신 내용을 암호화 할 수 있다
    • SSL 등을 이용해 안전한  통신로를 확립하고 나서 그 통신로를 사용해 HTTP 통신을 한다
    • 이런 SSL 을 조합한 HTTP 를 HTTPS(HTTP Secure)나  HTTP over SSL 이라고 부른다
  • 콘텐츠 암호화
    • 통신하고 있는 콘텐츠의 내용 자체를 암호화해 버리는 방법이다
    • 즉, HTTP 메시지에 포함되는 콘텐츠만 암호화하는 방식이다
    • 콘텐츠의 암호화를 유효하게 하기 위해서는 클라이언트와 서버가 콘텐츠의 암복호화하는 구조가 전제가 되므로, 평상시에 유저가 사용하는 브라우저와 웹서버에서는 이용하는 것이 어렵다

 

 

2. 통신 상대를 확인하지 않기 때문에 위장 가능


HTTP 리퀘스트나 리스폰스에서는 통신 상대를 확인하지 않는다.

따라서, 리퀘스트를 보낸 서버나 리스폰스를 반환한 클라이언트가 바뀌어도 알 수 없다.

 

누구나 리퀘스트할 수 있다

HTTP 는 누구이던 간에 리퀘스트를 보내면 리스폰스가 반환되는 매우 심플한 구조로 되어 있지만, 상대를 확인하지 않는 점이 약점일 수가 있으며 그 약점은 다음과 같다.

 

  • 리퀘스트를 보낸 곳의 웹 서버가 원래 의도한 리스폰스를 보내야 하는 웹서버인지 아닌지를 확인할 수 없다. 위장한 웹 서버일 우려가 있다
  • 리스폰스를 반환한 곳의 클라이언트가 원래 의도한 리퀘스트를 보낸 클라이언트인지 아닌지를 확인할 수 없다. 위장한 클라이언트일 우려가 있다
  • 통신하고 있는 상대가 접근이 허가된 상대인지 아닌지를 확인할 수 없다. 중요한 정보를 가진 웹 서버에서는 특정 상대만 통신을 허가하고 싶을 때가 있다
  • 어디의 누가 리퀘스트를 했는지를 확인할 수가 없다
  • 의미없는 리퀘스트라도 수신하게 된다. 대량의 리퀘스트에 의한 DoS 공격(서비스 불능 공격)을 방지할 수가 없다

 

상대를 확인하는 증명서

  • HTTP 에서는 통신 상대를 확인할 수 없지만 SSL로 상대를 확인할 수 있다 (SSL 은 상대를 확인하는 수단으로 증명서를 제공함)
  • 증명서는 신뢰할 수 있는 제3자 기관에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명한다
  • 증명서를 위조하는 것은 기술적으로 상당히 어렵다
  • 통신 상대의 서버나 클라이언트가 가진 증명서를 확인함으로써 통신 상대가 내가 통신하고자 하는 상대인지 아닌지를 판단할 수 있다

 

 

3. 완전성을 증명할 수 없기 때문에 변조 가능


완전성이랑 정보의 정확성을 가리킨다. 그것을 증명할 수 없다는 것은 정보가 정확한지 아닌지를 확인할 수 없음을 의미한다.

 

수신한 내용이 다를지도 모른다

  • HTTP 가 완전성을 증명할 수 없다는 뜻은 리퀘스트나 리스폰스를 상대가 수신하기 전에 변조되더라도 알 수 없다는 뜻이다
  • 예를 들어, 어떤 사이트에서 콘텐츠를 다운로드 했다고 하면 클라이언테 다운로드 파일과 서버 상에 있는 파일이 정말로 같은 것인지 아닌지 모른다는 것이다
  • 이와 같이 공격자가 도중에 리퀘스트나 리스폰스를 빼앗아 변조하는 공격을 중간자 공격(Man-in-the-middle attack, MITM attack) 이라고 부른다

 

변조를 방지하려면?

  • 다운로드 받은 파일의 MD5 나 SHA-1 등의 해시 값을 확인하는 방법과 디지털 서명을 확인하는 방법도 있긴 하나 이 해시/서명 값들 자체도 적절하게 수정되어 있다면 유저로서는 알 수가 없으며 브라우저에서 자동적으로 검사가 진행되는게 아니라 제한적이다
  • 확실히 방지하기 위해서는 HTTPS 를 사용할 필요가 있다
  • 즉, HTTP 만으로는 완전성을 보증하는 것이 어렵기 때문에 다른 프로토콜을 조합함으로써 실현하고 있다

 

'소프트웨어공학, CS' 카테고리의 다른 글

성능 향상을 위한 인프라 구조  (0) 2021.08.04
무정지를 위한 인프라 구조  (0) 2021.07.31
HTTP 에 보안을 더한 HTTPS  (0) 2021.05.09
댓글