현업 개발자입니다. 3500만명이 당첨된 네이트 사태를 맞이하여, 제가 아는 범위에서 인터넷 보안에 대해 최대한 쉽게 써 보겠습니다. 아마도 많은 분들이 상당부분 아시는 내용일 것입니다만 그래도 모든 사람들이 강력한 보안을 이루길 바라는 마음에서 올려 봅니다. 실력 좋은 개발자는 아니지만, 개인적으로 이 정도 내용은 넷 세상을 살아가면서 '알아두면 유용하다'를 넘어서
생존을 위해 기본적으로 모두가 알아야 할 것이라 생각하기에 한 번 써 보겠습니다. 글이 길다 싶으시면 굵은 부분이라도 숙지하시면 좋을 것 같습니다.
1. 웹사이트가 비밀번호를 저장하는 방식
현재 개개인을 식별하기 위해서 대부분의 웹사이트가 쓰고 있는 방법은 ID와 비번의 조합입니다. 그리고 비밀번호는 어떠한 형태로든 당연히 서버에 저장되어 있어야 확인이 가능하겠죠?
이 때 가장 생각해내기 쉬운 방법은 DB에 ID와 비밀번호를 그대로 저장한 다음에 입력이 들어오면 맞춰보는 것입니다. 예. 개념없는 방법입니다. 서버가 모종의 방법으로 해킹을 당하게 되면 ID와 비번이 그대로 뚫리는건 물론이고, 해킹이 없더라도 관리자가 비번을 그대로 볼 수 있다는 것 역시 크나큰 문제입니다.
그런데 중소 웹사이트 가운데에는 실제로 그렇게 하는 곳이 적잖이 있습니다.어처구니 없는 경우인데, 정말 많이 일어나는 일입니다. 그렇기 때문에 이런 식으로 비번을 털린 다음에 대륙의 해커들은 그 비번을 다른 사이트, 게임 이런 것들에 한 번 넣어 봅니다. 비번이 다르면 그냥 아쉬운거고 비번이 같으면 땡잡은거죠. 해커가 당신의 비번을 알아낸 것입니다. (그렇기 때문에 게임 아이디와 비번이 털렸다고 해서 그 게임의 서버가 털렸다고 단정할 수는 없는 것입니다.) 이렇게 알아낸 아이디와 패스워드의 쌍들은 대륙에서 고가에(라고 해봤자 인당 몇천원이라고 들었지만..) 거래되고 있습니다.
가끔씩 pgr에 광고글들이 레이드를 하는 경우를 본 것을 기억하실겁니다. 이 역시 아이디의 주인이 두달 유예기간 참고 광고글을 올렸다기보다는, 그 주인이 쓰는 ID와 비번의 쌍을 해커가 pgr이 아닌 다른 경로를 통해 알고 있었고 그걸 이용했을 가능성이 큰 것입니다.
개인적으로는 이런 사이트는 정부에서 막대한 벌금을 물려야 한다고 생각하는데, 어떤 사이트가 ID와 비번을 그대로 저장하고 있는지를 간접적으로 알아 볼 방법이 있긴 있습니다. 바로 비밀번호 찾기인데요,
비밀번호 찾기를 눌렀을때 '귀하의 비밀번호는 무엇무엇입니다'라고 친절하게 알려주면 100%입니다. 당장 탈퇴하고 이 사이트 이용하지 말라고 주변에 알리시면 되겠습니다.
kcm1700님 추가 : 비밀번호를 암호화하지 않고 저장하면 불법으로 처벌할 수 있다고 합니다. 그런데 딱히 신고창구는 없는 것 같네요.. (출처 :
http://kldp.org/node/113272 )
2. 대부분의 사이트
이런 문제 때문에 실제로 대부분의 개념을 약간이라도 탑재한 사이트의 서버에서 일어나고 있는 일은 이렇습니다.
"ID pgr21, 비번 pgr#qaz을 서버에 보낸다"가 일어나게 되면, 서버는 받은 비번 "pgr#qaz"를 복잡한 규칙(몇가지 많이 쓰는 규칙이 있고 이 규칙은 이미 잘 알려져 있습니다)으로 ga5RAm+x4aHn39maeJh 와 같이 복잡한 문자열로 변환합니다. 그러면 서버에는 (pgr21 , ga5RAm+x4aHn39maeJh) 의 쌍이 이미 써 있기 때문에 '아 맞는 비번을 쳤나보다'라고 인식하여 로그인을 시켜주게 됩니다.
그렇다면 서버에 ga5RAm+x4aHn39maeJh이 저장되어 있는데 이걸 통해 pgr#qaz가 암호였다는걸 알 수 있느냐? 이건 (가능한 경우도 있긴 합니다만) 일반적으로 굉장히 어렵습니다. 왜냐하면 규칙이 복잡하기도 하거니와 서로 다른 원래의 암호, 예를 들어 zaq#rgp가 똑같이 그 규칙에 의해 ga5RAm+x4aHn39maeJh로 변환될 수 있기 때문입니다. 그렇기 때문에 DB를 몽땅 털어가도 비번을 알 수 없다..는 얘기는 이론적으로는 맞는 것처럼 보이기도 합니다.
하지만 이 경우에도 문제가 있습니다. 암호의 변환규칙은 이미 잘 알려져있다고 했습니다. 해커들 역시 잘 알고 있고, 1234, abcd, qwer 이런 식의 쉬운 조합, 혹은 적은 글자수의 비밀번호 수백수천수억개가 그 규칙에 의해 어떻게 변환되어 있는지의 표를 미리 가지고 있습니다. 그렇기때문에 이런 사이트라 할지라도 역시 해커들은 DB만 털면 회원들의 비밀번호를 많이 알아낼 수 있습니다. (pgr을 포함한 제로보드4를 쓰는 사이트들이 이 방법을 이용하는 것으로 알고 있습니다.)
그렇기 때문에 기본적으로 간단한 암호는 쓰시면 안됩니다. 이름 이니셜, 한영변환 이런 스킬도 되도록 쓰면 안됩니다. 해커들이 추측할 수 있기 때문입니다. "unf%Y8a" 이런 식으로 겉보기에는 아무리 봐도 규칙성이 없지만 사실은 뭔가 의미가 있는 문자열을 비번으로 쓰셔야 합니다.
3. 그래도 소용없다
그래서 2의 방법에서 말씀드린 문제점을 보완하기 위해 다음과 같은 방법을 많이 씁니다. 아이디어는 간단한데, 규칙에 의해 변환을 할 때, Salt라고 불리우는 사이트 고유의 문자열(예를 들어 rgp)을 붙여 변환하는 것입니다. 그렇게 되면 앞에 말씀드린 비번 pgr#qaz 대신 pgr#qazrgp를 변환하게 되고, 이 변환된 암호는 ga5RAm+x4aHn39maeJh가 아닌 sZm5hIHVpbndrbGV와 같은 전혀 다른 문자열이 되기 때문에 앞서 말씀드린 해커들의 암호표를 쓸 수가 없게 됩니다.
물론 이 경우에도 해커들의 의지가 확고하기 때문에 안전하지 않습니다. DB가 털렸다는건 Salt도 털렸다는걸 뜻하기 때문이죠. 원래 Salt를 도입한 것은 'Salt를 깊숙히 보안이 강력한 다른 서버에 숨겨놓으면 됨'의 의미였는데 사실 여건상 그걸 지키는 사이트는 많지 않죠.
결국 웬만한 문자열에 대한 암호표를 생성하는 프로그램을 짜서 돌린 다음에 다시 만들어버리면 간단한 비번들은 털리게 됩니다. 그리고 애초에 사이트마다 같은 비번을 쓰면 1과 같이 암호를 평문 그대로 저장하는 경우 때문에 털리게 됩니다. 그렇기때문에 비번을 만들때의 권장사항은 다음과 같습니다.
1) 가능하면 대소문자를 섞어서 쓰세요. 해커들은 해커표를 만들기 위해 하나하나 시도해 볼 때 소문자로만 된 문자열, 대문자로만 된 문자열을 먼저 해 봅니다. 그 편이 경우의 수가 훨씬 적으니까요.
2) 특수문자를 중간에 끼워 넣으세요. 1)과 비슷한 이유인데, 해커들은 특수문자가 없는 경우를 먼저 시도해 봅니다.
3) 되도록 암호를 길게 만드세요. 이 역시 1)2)와 비슷한 이유입니다. 해커들은 짧은 단어부터 먼저 넣어봅니다.
4) 사이트마다 모두 비번을 다르게 쓰세요. 기억하기 쉽게 하려면 기본암호를 5자리(예/fYb#i)로 만들고 도메인이 pgr21.com 이면 pgr 세글자를 붙이는 식으로 하면 좋습니다. 왜냐 하면 해커들도 바쁜 사람들이기 때문에 그 정도로 복잡해지면 그냥 좀 더 허술한 다른 ID를 찾기 마련입니다.
5) 알패스와 같은 비번관리 소프트웨어는 쓰지 마세요. 내 컴퓨터가 해킹당하면 모든 비밀번호가 다 노출됩니다.
그런데 현실은 역시 녹록치 않은게, 이번에 문제가 된 네이트만 하더라도 대문자를 비번에 못쓰게 했습니다. 그리고 사용할 수 있는 특수문자도 제한했습니다. 아마도 그렇게 하는 편이 개발자가 코딩하기엔 약간 더 편하기 때문일겁니다. 네이트의 보안의식이 얼마나 허술했는지를 보여주는 단적인 예입니다.
4. 비번 말고 민번은?
이번 사건 관련해서 네이트의 언플중에 가장 웃기지도 않는게 이 부분입니다. 1~3에서 말씀드린 바와 달리 애초에 민번이라는건 암호화의 의미가 없습니다. 민번으로 들어갈 수 있는 숫자는 문자열에 비해 훨씬 제한적이니까요. 앞의 여섯자리는 생년월일이라 경우의 수가 4만개정도밖에 없고, 뒤의 7자리중 맨 앞자리도 1234중 하나.. 이런 식으로 경우의 수는 몇십억개밖에 되지 않습니다. 말이 몇십억개지 컴퓨터로 돌리면 금방이기 때문에 쉽게 알아낼 수 있습니다.
그러므로 3500만명의 주민등록번호는 그냥 다 털렸을 확률이 매우매우매우 높습니다. 네이트도 앞서 말씀드린 Salt를 썼기때문에 변환된 민번을 풀기 어렵다고 주장하는 모양인데, 해킹을 당해서 DB는 털렸는데 Salt나 변환규칙이 안털렸을 확률은 정말 희박합니다.
그리고 (확실하지 않습니다만) 네이트의 언플을 통한 거짓말을 보면 탈퇴한 회원이라고 해서 안전하리라는 보장도 없다고 생각합니다. 네이트가 탈퇴한 회원들의 DB를 오랫동안 가지고 있었고 이것도 같이 털렸는데 공개하자니 '탈퇴한 회원 DB를 왜 가지고 있냐'는 비난에 직면할 것이 두려워 은폐하고 있다.. 이 역시 꽤 개연성 있는 추측입니다. 그렇기때문에 네이트에서 조회해서 안털린걸로 나왔더라도 안심하실 수 없습니다.
그렇기때문에 저는 애초에 어떤 사이트도 DB에 주민등록번호를 절대 저장하지 말았어야 한다고 생각하는데, 뭐 이미 대한민국 국민의 민번이 대륙의 공공재가 된 이 시점에 와서 이런 말을 하는건 별로 의미가 없어 보입니다. 아무쪼록 pgr 역시 민번을 저장하지 않고도 회원관리의 연속성을 이어나갈 수 있는 묘안을 찾을 수 있었으면 좋겠습니다.
5. 내 컴퓨터 지키기
의외로..가 아니라 정말 많은 분들의 컴퓨터가 악성코드와 공존하고 있습니다. 그리고 현재의 대부분의 악성코드는 사용자의 자료를 삭제하는 등의 자기에게 이득도 없는 짓을 하기보다는 유저 자신도 모르게 DDoS를 일으키기 위한 좀비PC로 만들거나, 키보드 입력을 감시하다가 비번을 빼내거나 하는 데에 사용됩니다.
악성코드가 깔리는 가장 큰 이유는 불법복제 소프트웨어입니다. 시리얼키 생성기들중 악성코드가 정말 많습니다. 그렇기 때문에 웬만하면 불법복제를 하지 마시고,
꼭 시리얼키 생성기를 쓰셔야 한다면 안쓰는 다른 컴퓨터에서 쓰시거나 윈도우7일 경우 XP모드같은걸 사용하시면 되겠습니다.
그리고 그 다음으로 큰 이유는 USB드라이브라고 불리우는 이동식씨의
디스크입니다. 이를 통해 악성코드에 감염되는 것을 막으려면 윈도우의 자동실행을 끄시면 됩니다. 방법은 다음을 참조하시면 됩니다. 둘 중 어느 방법을 쓰셔도 좋습니다. 윈도우7일 경우에는 자동실행이 없으므로 신경 안쓰셔도 됩니다.
http://smilecap.tistory.com/422
http://binote.com/105537
그리고 또 하나 큰 이유는 윈도우 자동업데이트를 하지 않는 것입니다. 정품이 아닌 분들의 경우 정품인증 문제때문에 더욱 이런 경우가 많은데, 정품을 쓰라는 부탁은 드리지 않겠습니다만 강제 정품인증 크랙같은걸 사용하시는 한이 있더라도 업데이트는 꾸준히 해주시는게 좋습니다.
물여우님 추가 : 플래시, 오피스 등의 프로그램 업데이트도 충실히 해주셔야 합니다. 플래시의 취약점을 이용해 악성코드를 사용자 모르게 심는 경우도 많습니다.
그리고 요즘은 많지 않습니다만 몇년 전만 해도 ActiveX를 통한 악성코드 감염이 꽤 많습니다. 일단 익스플로러를 웬만하면 쓰지 마시고, ActiveX를 깔아야만 이용할 수 있는 사이트라면 웬만하면 이용하지 마시고, 이용 안할 수 없다면 XP모드같은걸 쓰시거나 정말 100% 신뢰할 수 있을때만 까시면 됩니다.
이 네가지 정도만 지키시면 사실 딱히 백신프로그램 없이도 안전하게 컴퓨터를 쓰실 수 있습니다. 하지만 저 역시도 게으르기 때문에 저걸 다 지키진 못하고 그냥 avast를 깔아 쓰고 있습니다. avira는 안써봤는데 역시 평이 괜찮더군요. 나머지 v3, 알약 등의 한국형 유명백신들은 안타깝게도 그렇게 평이 좋지 못합니다.
여기까지고요, 궁금하신 점이 있으시다면 댓글 달아주시면 최대한 답변 드리겠습니다. 그리고 틀린 부분이나 추가했으면 하는 부분도 말씀해주시면 반영하도록 하겠습니다.