오픈웹 관련: SSL과 관련된 공격들…

최근 며칠간 오픈웹의 구글 그룹에서는 SSL 의 안정성에 대한 많은 이야기들이 오가고 있습니다. 대표적으로 MITM이란 해킹 기법과 이를 통한 SSL Sniff, SSL Strip 등에 대한 문제가 제기됐습니다.

사실 저는 보안과 관련해선 크게 공부해보지 않았기 때문에 관련된 내용을 처음 듣게 되었고, 어떤 식으로 공격이 이루어지는지에 대해 살펴봤습니다. (보안과 관련해서는 Calling convention, stack overflow 등을 이용한 exploit 방법과 SQL/Code injection 등 외엔 시도 해본 적이 없습니다.)

그럼 오늘 공부한 걸 바탕으로 MITM, SSL Sniff, SSL Strip 등에 대해서 살펴보도록 합시다.

MITM이 무엇일까요?

우선 기본적으로 ssl 통신을 이용할 경우 서버와 클라이언트는 보안 채널을 통해 데이터를 주고 받게 되며 보안 채널을 만들기 위해서는 SSL 혹은 TLS(SSL v3) 등이 사용됩니다.

그런데 TCP/IP의 구조 상 서버와 클라이언트는 직접 연결되는 것이 아니라 여기저기를 거쳐서 연결되게 되며 중간에 악의적인 라우터가 있다거나 AP를 가장한 공격자가 있다거나 한 경우 통신의 내용이 위/변조될 가능성이 있게 됩니다.

위 그림과 같이 서버와 클라이언트 사이에 누군가가 끼어드는 공격을 (간단하게는 무선 AP를 가장한 공격자) MITM (Man In The Middle)이라고 부르게 되겠습니다.

그런데 아까 얘기했다시피 SSL을 이용할 경우 내용은 암호화 되어 전송되기 때문에 중간에 누가 끼어들더라도 그 내용을 알아볼 수가 없어야 하며, 그 누군가가 내가 보낸 데이터를 변조해서 보내는 것 또한 불가능해야할 것입니다.

SSL Sniff 별거 아니네

세상이 앞에서 얘기했던 것처럼 이상적이라 문제가 발생하지 않을 거라면 참 좋겠지만, 그렇지가 못합니다. 우선 공격자-서버 사이에 ssl 채널이 형성되고, 사용자-공격자 사이에 또 하나의 ssl 채널이 형성되는 경우를 들 수 있을텐데요. 서명된 SSL 인증서의 경우 Domain Name, Certificate Authority 정보 등을 이용하여 유효한 인증서인지를 확인할 수 있기 때문에, 이 경우라면 공격자가 제대로된 인증서를 가지고 있을 수 없으므로 ‘유효하지 않은 인증서’ 경고가 뜨게 됩니다.

하지만 무지 몽매한 사용자들의 70% 이상은 경고를 무시한다고 하네요.

더 문제가 되는 것은 다음 경우입니다. 우선 인증서를 서명하는 과정에 대해 알아야 하는데요. 이 인증서는 아래 그림에서와 같이 다단계 서명이 가능합니다. 루트 인증서로 서명받은 CA1 인증서는 또다른 인증서인 CA2 인증서를 서명할 수 있고, CA2인증서로 사인받은 서버 인증서는 유효성을 인정받을 수 있습니다.

그런데 공격자의 인증서가 CA2로 서명을 받고, 서명이 되어 있는 자신의 인증서를 이용하여 서버의 (가짜) 인증서를 서명한 경우라면 문제가 될 수 있게 됩니다.

CA 인증서는 뭐 아무나 받을 수 있는 건 아닌거 같지만 문제는 CA 인증서인지를 체크하는 CA 항목 값을 무시해버리는 브라우져가 있다는 것이죠. 다시 말해 다른 인증서를 서명할 수 없는 인증서를 통해 가짜 인증서를 서명했다고 하더라도 브라우져에서 이를 제대로 된 인증서로 판단할 수 있단 말입니다. http://www.thoughtcrime.org/ie-ssl-chain.txt

이 경우에는 유효하지 않은 인증서라는 오류가 뜨질 않기 때문에 내가 지금 당하고 있다는 사실을 알아차릴 수가 없게 됩니다. -_-a 업데이트를 열심히 해야하는 이유 되겠습니다. 이제 IE6를 보내줄 때도 됐자나요.

SSL Strip

Plain text에서 SSL로 전환되는 것은 폼 값을 전송하는 버튼을 눌렀을 때라거나 링크를 클릭했을 때 입니다. 하지만 링크를 클릭해보기 전(위에 마우스를 올려보기 전), 그리고 버튼을 누른 후 값이 전송되기 전까지는 이게 SSL로 넘어가게 되는지 Plain text로 넘어가게 되는지를 알 수 있는 방법이 없습니다. (소스 보기 제외)

그렇기 때문에 공격자는 html의 내용 등을 그대로 릴레이 해주는 것이 아니라 ‘<a href=”https://abcd.net…’ 식의 링크 그리고 ‘<form action=”https://abcd.net…’ 식의 값을 ‘<a href=”http://abcd.net…’, ‘<form action=”http://abcd.net…’ 식으로 바꿔서 전송해주는 것이죠.

이렇게 할 경우 공격자와 서버는 (제대로된) SSL 통신을 하게 될 테고, 공격자와 사용자는 Plain text로 데이터를 전송하게 됩니다. 전송되는 데이터의 위변조는 아주 쉬워지게 되겠구요.

아주 주의 깊은 사용자가 아니라면 이 차이를 알아채는 건 쉬운 일이 아닙니다. 오픈웹 메일링 리스트의 토의에서 EV 인증서를 사용할 경우 큼지막한 확인 마크가 뜨기 때문에 이 문제를 근본적으로 막을 수 있을거라 얘기하고 있지만 무지한 사용자들에게 그렇게 대단한 임무를 수행하도록 하는 건 분명 문제를 일으킬 수 있다고 생각합니다.

IDN

이 외에도 IDN (Internationalizer domain name)을 이용한 MITM 공격도 있을 수 있겠는데요. a.cn 과 같은 도메인을 등록해 두고, IDN을 이용해서 gmail.com/someuri.a.cn 처럼 보이는 서브 도메인을 설정하는 것입니다. 사실 도메인에는 영어 + 숫자 + 대쉬(-) + 점(.) 정도만이 사용이 가능하지만 IDN을 이용할 경우 / 같은 글자를 영어 + 숫자 로 만들 수 있게 됩니다.http://en.wikipedia.org/wiki/IDN_homograph_attack

눈으로 보기엔 정말 gmail.com 의 도메인으로 보이기 때문에 (특히나 url이 길어진다면 확인은 더 힘들겠죠.) 문제를 확인하기가 정말 쉽지 않을 것으로 보입니다.

사용자의 주의가 필요한 때

위에서 얘기했던 내용들을 이용해서 하룻동안 117개의 이메일 계정, 16개의 카드 번호, 페이팔 어카운트 7개, 그 외 300개 정도의 로그인 정보를 얻어낼 수 있었다고 합니다. 더 놀라운건 이를 알아챈 사람이 단 한 명도 없었다는 점이죠.https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf

사실 저는 페이팔 피싱에 당해본 적이 있습니다. 빨리 알아챘기 때문에 피해를 보진 않았지만요.

SSL 통신의 경우 브라우져의 주소창에 자물쇠 표시가 나타난다고 하지만 paypal-account.com 같은 피싱 url에 아무렇지도 않게 반응했던 기억을 되살려보면 무지한 사용자들이 주소창에 자물쇠 표시가 나타나는지 안나타나는지를 그렇게 유심히 살펴볼 것이라고는 생각치 않습니다.

정말 사용자의 주의 만이 문제를 최소화 시킬 수 있는 방법이 되겠지만 이게 말처럼 간단한 일은 아니란 말이죠.

그럼 어쩌라고?

하지만 공인 인증 시스템, 보안 카드 등의 2차적 보안 장치가 있기 때문에, ActiveX를 이용한 보안 채널을 SSL로 바꾼다고 해서 보안 문제가 생길거라고는 생각치 않습니다. (ActiveX라고 위 문제들을 피해갈 수 있을 거라곤 여전히 생각하지 않습니다. 그리고 국내 시스템에 대한 문제를 서로 까발리지 않으려고 하는 풍토를 얘기하시며 SSL은 여기저기서 뚤으려고 시도를 하고 있고 관련된 내용이 여기저기서 발표되기 때문에 위험하다고 하시는 분이 있는데, 오히려 드러나지 않는 문제가 더 무서운 것입니다.)

마치며

메일링 리스트에 Visa International 에서 주최한 PCI DSS(Payment Card Industry Data Security Standard) 교육과 관련된 내용을 개제해주신 분이 계신데요. 이 중 다음과 같은 항목이 있습니다.

5. 안티바이러스
– 바이러스가 자주 감염되는 환경에 대한 Antivirus 설치(WIndows라는 말이 MS로비로 빠졌어요.)
– Antivirus Reporting

사실 공인 인증(전자 서명)의 경우 API를 표준화 하게 될 경우 구현이 그렇게 어렵지 않을 것으로 생각되며 실제 XecureWeb등에서는 비 윈도우즈 환경을 위한 코드를 가지고 있는 것으로 알고 있습니다. 하지만 윈도우 환경을 기준으로 한 키보드 보안 모듈 등 때문에 심사를 통과하지 못하고 있죠. 왜 인터넷 뱅킹 등에서는 이런 식으로 플랫폼에 따른 차별적 보안 제도를 도입해주질 않는건지 답답합니다.

플랫폼에 상관없는 정보의 공유를 위해 만들어진 웹이 특정 플랫폼으로 제한 받아야만 하는 이 현실이 얼른 개선되었음 좋겠습니다.

덧: SSL과 SEED를 비교하시는 분이 계신데, SSL 은 보안 계층이고, SEED 는 암호화 알고리즘 입니다. SEED는 AES, DES 등과 비교되어야지 SSL과 비교되어야 할 내용이 아니란거죠. SEED가 SSL보다 안전합니다란 말은 ‘UTF-8이 HTTP보다 더 강력합니다.’ 뭐 이런 말과 똑같은 겁니다.

Published by

3 thoughts on “오픈웹 관련: SSL과 관련된 공격들…”

  1. 오호
    부담없이 한번 쭈욱 읽어보고 다시 읽어보고 다시 읽어봅니다.
    또 읽어봐야겠지요 ㅎㅎ

    머리 속에 남아야할 내용은 SSL 이어야 하는데
    마지막 문구만 맴도는 것 같네요 ^^;;

    잘 보고 갑니다!
    열심히 배워야겠어요 ㅎㅎㅎ

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">