괴짜 프로그래머의 일상사~@@
프로그래밍, 컴퓨터, 그리고 일상에 관한 소소한 이야기들...
Blog | Guestbook
Keyword | Local | Tag
T 102 / Y 700 / Total 3405160
Catergories
Calendar
«   2023/06   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
Tag
디버그, 가젯, 프로세스, MSDN, insight, freakonomics, The Old New Thing, C++, 백신, 인터넷 뱅킹, 비스타, 선스팍, 연리지, 태그, GLAT, 작업, 양병규, 체크, 루이 로페즈, 고민,
Archive
Link
Search
  submit
Recent Articles
Recent Comments
Recent Trackbacks
2007/08/28 12:08
이슈 되겠어? 적용 되겠어? : 메모리 해킹
[GGG]
어젠가 풀리비님의 글을 보다가 관련 내용을 보게 되었다. 그 내용을 처음 보았을 때만 해도 "그냥 뉴스에 나왔나 보다"라고 생각을 했다. 왜냐면 그만큼 해묵은 방법이었기 때문이다. 그런데 예상외로 여기저기서 이슈가 되고 있는 모습이 눈에 띈다. "그 방법이 통하기 때문에 그런게 아닐까?"란 생각을 조심스럽게 해본다.

메모리 해킹이란 방법은 십 수년 아니 컴퓨터가 생기던 시절부터 있었던 메카니즘이다. 고전적인 수법인만큼 그 방법도 여러 수천 가지에 이른다(실제적으로 여러 수천 가지는 아니다). 따라서 기존에 나와있는 방법에 대해서 대응력을 가지는 것은 가능하겠지만 전혀 새로운 형태로 다른 프로세스의 메모리에 접근하는 것을 원칙적으로 차단하는 것은 매우 힘든 일이다.

그렇다면 메모리 해킹을 막을 방법은 없을까? 물론 방법이 없는 것은 아니다. 과거 컴퓨터의 역사와 같이한 방법인 만큼 그것을 막는 방법도 다양하게 연구되었다. 그 중 최종 결론은 데이터가 메모리에 존재하는 구간을 최소화 시켜야 한다는 것이었다. 궁극적으로 데이터가 메모리에 존재하는 시간이 0이 되면 메모리 해킹은 무용지물이 된다. 메모리에 데이터가 없다면 조작할 것이 없는 것이고, 결국은 메모리 해킹은 무위로 돌아갈 수 밖에 없기 때문이다. 이를 인터넷 뱅킹에 적용해서 생각해 보면 다음과 같이 된다.

인터넷 뱅킹을 하기 위해서 사용자가 입력해야 하는 아주 중요한 자료는 두 가지다. 이체 대상 계좌번호와 이체 금액이다. 이 둘은 사용자가 직접 입력하고 화면에 표시된다. 화면에 표시된다는 말은 이미 메모리 상에 존재한다는 말이다. 그래서 지금 메모리 해킹이 문제가 되고 있다. 이 두 데이터가 메모리 상에 존재하지 않는다면 안전하다는 것은 앞서 설명했다. 이 둘을 표시하지 않고 인터넷 뱅킹을 할 수 있을까? 물론 없다. 사용자가 실수로 잘못된 정보를 입력할 수 있기 때문에 보여주는 과정은 절대적으로 필요하다. 그렇다면 인터넷 뱅킹의 메모리 해킹을 막는것은 불가능 한가? 그것도 아니다.

과거 MMORPG 게임에 처음 메모리 해킹이 적용됐을때 그 파급효과는 정말 컸다. 거의 모든 데이터가 클라이언트에 저장되었기 때문에 고치기만 하면 적용되는 그런 세상이었다. 하지만 지금은 많이 달라졌다. 메모리 해킹 툴을 사용해서 클라이언트를 조작해도 데이터가 변경되진 않는다. 어떻게 그렇게 됐을까? 원리는 간단하다. 클라이언트에서 표시되는 데이터는 단지 보여지는 역할만 하기 때문이다. 모든 데이터 생성은 서버에서 이루어지는 것이다. 주사위를 굴린 값도 서버에서 생성되어 클라이언트로 전송된다. 그래서 요즘의 MMORPG 게임은 메모리 해킹 보다는 봇을 막는것이 좀 더 중심이 되고 있다.

다시 인터넷 뱅킹으로 돌아가보자. 우리는 클라이언트에 데이터가 저장될 수 밖에 없다면 단지 보여주는 기능만을 하도록 그것을 제한하면 메모리 해킹에 효율적으로 대응할 수 있다는 것을 게임에서 배웠다. 어떠한 방법을 통해서 이것을 인터넷 뱅킹에 적용할 수 있을까? 가장 기본적인 원리는 모든 것을 서버가 결정한다는데 있다. 다음과 같은 예를 한번 생각해보자.

사용자가 로그인을 한다. 이제 계좌번호를 입력할 순간이 되면 서버에서 그림을 열 조각 보내 준다. 이 그림은 0부터 9까지에 대응하는 그림이다. 하지만 각 그림에는 고유 키번호가 맵핑되어 있다. 즉 소프트웨어적으로 0번 그림이 0이라는 것을 알아낼 방법은 없다. 사람이 0을보고 누르면 그에 대응하는 키 값이 들어가는 것이다. 사용자가 1,2,3,4를 눌렀고 서버로 c,d,e,x가 전송되었다고 해보자. 서버는 받은 데이터를 자신이 보내준 그림 데이터에 근거해서 원복한다. 그럼 1,2,3,4가 나온다. 그럼 서버에서 그걸 다시 클라이언트로 전송한다. 화면에는 사용자가 입력한 계좌 번호가 나올 것이다. 메모리 해킹을 하는 프로그램이 그것을 조작해본들 그건 단지 뷰일 뿐이다. 서버로 전송되는 값이 아니란 의미다.

물론 이 경우에도 서버에서 발생시킨 그림 조각을 해킹 프로그램이 알아낸다면 해킹을 할 수가 있다. 하지만 이는 자동화하기가 매우 난해하다. 해커라면 리버싱을 통해서 그림과 의미를 매칭시킬 수 있지만 프로그램은 그것을 하기가 무척 어렵다. 결론적으로 0번 그림을 보고 그것이 0이라는 것을 인식하는 문제로 귀결되는데 이는 아직까지는 불가능하기 때문이다. 또한 그 이미지 자체도 동적으로 바뀐다면 더욱 프로그램으로 인식하기 어려워진다.

이때까지 말한 이 솔루션은 사실 새로운 방식도 아니고 몇 해 전에나 제안되던 구식 방법이다. 이 방식이 적용되지 않았던 이유는 단 한가지였다. 사용성이 떨어진다는 점이었다. 유저 입장에서도 골치아프고, 적용하는 업체 입장에서도 고칠 곳이 많아진다. 결과론적으로 비용이 올라간다는 것이었다. 맞는 말이긴 하다. ㅎㅎ

바이러스가 나오면 백신 업체가 돈을 벌고, 해킹 소식이 나오면 보안 업체가 돈을 버는 것은 초등학생도 알 만한 일이다. 이미 솔루션을 구축하고 이 뉴스가 일파만파 퍼지기를 기다리고 있는 보안업체가 있을지도 모른다. 물론 그들이 잘못한건 없다. 이슈가 되지 않으면 적용하지 않는 세태가 더 잘못된게 아닐까?

기사 말미에 나오는 휴대폰 인증도 좋은 방법이다. 그런데 휴대폰 방법을 적용하려면 이런 말을 하는 사람들이 꼭 있다. "그럼 휴대폰없는 사람은 인터넷 뱅킹도 하지 말라는 말이냐?" 그래서 집전화까지 지원하게 된다. ㅋㅋ


Trackback : http://jiniya.net/tt/trackback/579
메모리 해킹을 통한 신한은행 인터넷 뱅킹 송금액 조작 블로그를 돌아다니가 우연히 [재미있는 글]을 보게되었다.요약하면 인터넷 뱅킹을 이용할 때 송금 내용을 사용자에게 확인을 시켜주는 과정에서해당 정보가 메모리에 남게 되고 이 메모리 영.. http://sseol.net/blog/142 2007/09/05 13:58
Z (2007/08/28 13:11)
영진님이 언제부터 일케 글을 잘 썼지?... 시원시원하네....
codewiz (2007/08/28 13:35)
질럿님 칭찬이죠?
칭찬으로 듣겠습니다. 쿄쿄쿄.. ㅎㅎ

풀리비 (2007/08/28 19:49)
오.. 이게 이미 캐캐묵은 이슈였군요! 세상은 역시나 넓군요.
새로운 사실을 또 알았습니다. 고맙습니다.
codewiz (2007/08/29 18:50)
네 근본 방법은 오래됐습니다.
뱅킹에 아무도 적용을 해보지 않았을 뿐이죠.

민경욱 (2007/08/30 09:31)
이번 문제를 취재했던 KBS 민경욱 기잡니다. 해킹 툴을 뚝딱 만들어낸 해커를 보고 그 기술에 놀랐는데, 이렇게 논리 정연하게 대응책을 써놓으신 걸 보고 다시 한 번 놀라고 갑니다. 정말 세상은 넓고 인재는 많다는 생각을 했습니다. 문제는 이런 문제에 촉각을 곤두세우고 신속한 대응책을 마련해야 할 금보연의 자칭 전문가라는 사람은 해커가 이 해킹 툴을 4시간 만에 만들어냈다는 걸 믿지 않더군요. 또 다른 은행에도 적용될 해킹 툴을 만드는 데 얼마나 걸릴 것 같느냐는 질문에 대해 기술 팀장이라는 사람은 몇 달은 걸려야 할 거라고 하더군요. 똑같은 질문을 그 해커에게 했더니 이렇게 대답했습니다. "음... 한 번 만들어본 거니까... 한 시간쯤이면 되겠군요."
codewiz (2007/08/30 10:39)
방문해주셔서 감사합니다.

그런데 그 전문가 분의 입장도 무시할 순 없습니다. 막연하게 해묵은 방법이라는 것을 알고는 있지만 실제 그것을 이용해서 뚫는 것은 또 다른 문제이기 때문입니다. 미분의 원리를 안다고 해고 모든 복잡한 미분 문제를 단번에 풀 수 없는 것과 같은 원리죠.

여기저기서 촬영한 해커에 대한 무수한 추측이 난무하고 있더군요. 누굴까? 하는 ㅋㅋ

TTF (2007/08/31 09:14)
음.. 아직도 이런 종류의 일이 해킹으로 인식되는 현실이 너무 안타깝습니다.
대부분의 개발자분들이 리버스 엔지니어링에 관심이 없거나 접해보지 않은 경우가 많아서
자신이 개발한 프로그램에 대해서 리버스 엔지니어링이 될 가능성을 고려하지 않기 때문에,
이런 문제가 아직도 발생하는 것이 아닌가... 하는 생각을 해봅니다.

자물쇠 만드는 사람은 자물쇠를 만들 때 열쇠 없이도 열린다는 가능성을 배제하고 만들게 됩니다.
내가 만든 자물쇠는 꼭 열쇠로만 열어야 한다는 닫힌 생각에서 벗어나서,
혹시 열쇠 말고도 다른걸로도 열리지는 않을까? 하는 의문을 가지고 직접 테스트를 해봐야 겠죠 ^^;
codewiz (2007/08/31 12:19)
메모리 해킹은 개발자의 보안 수준이 미비해서 발생했다기 보다는 컴퓨터 아키텍처 자체의 문제로 보는 것이 타당하다고 생각됩니다. 사실 아무리 어려운 수준의 보안 코드를 삽입하더라도 리버싱을 원천적으로 불가능하게 만들수는 없습니다. 왜냐하면 결국 CPU는 원본 코드를 실행시키기 때문이죠. 단지 해커가 귀찮아질 뿐이죠.

개꿈닷넷 (2007/08/31 10:19)
고려하지 않는게 아니라 일정 또는 금액 때문이겠죠...ㅋ

모두들 진실과 현실은 회피하고 이상한데서 원인을 찾는군요 :)
codewiz (2007/08/31 12:21)
네 현실적인 문제를 무시할 순 없죠.

Jerry (2007/09/03 16:20)
내용 매우 유익하게 잘 봤습니다. 글쎄요. 제짧은 견해로는 IE와 같은 브라우저가 대단히 범용적인 아키텍처 기반위에서 동작하는 어플리케이션이며, 이러한 어플리케이션 위에서 인터넷 뱅킹 서비스가 된다는 점에서 부터 문제점이 발생한다고 봅니다. 이러한 경우, DOM, COM, BHO 구간에서 공격자가 개입할 수 있는 Access Path가 무궁무진하다는 점은 이미 알려진 문제죠.(각종 Proxy 관련 문제는 일단 좀 빼죠...짭짭.) 이번 문제는 Reverse Engineering도 일부 문제점임은 부인할 수 없으나, 결론적으로 암호화된 Transaction이 어딘가에서는 반드시 풀리고, 사용자가 입력하는 무언가가 반드시 존재한다는 인터넷 뱅킹 서비스 아키텍처에 기인한다고 봅니다.

말씀해 주신 제언내역은 아주 좋네요. 현재의 국내 인터넷 뱅킹과 같은 서비스가 플랫폼 독립적 서비스가 되지 못하여, 국제표준과도 한참은 멀어져 있는 듯 한데, 이미지 뱅킹 방식이면 이러한 문제는 없어질 듯 하네요. ^^

다만, 이러한 경우, 이미지 뱅킹 방식을 구현했을 때의 문제점이 뭐가 있을지 잠시 생각해 봤습니다.

첫번째는, 현재의 인터넷 뱅킹에서의 취약점들은 사용자임과 동시에 공격자인 경우의 문제점을 적극적으로 방어하기가 곤란한 한계점이 분명 존재함니다. 또한, 위에서 언급한 바와 같이 어떤 방식이던지 암호화 구간은 클라이언트에서 사용자에게 해독되는 구간이 반드시 존재합니다. 따라서 언급해 주신 해결 방식은 공격자의 시도를 좀 더 어렵게 만드는 측면은 있겠습니다만, 사용자 입력 구간에 대한 보호와 위변조 여부를 Server 사이드에서 검증하기 어렵다는 문제는 여전히 남으며, 이러한 경우, 기존의 서비스 아키텍처를 변환한 댓가(비용)를 기준으로 할 때, 그렇게 큰 효과성을 볼 수 있는가?는 질문을 스스로 던져봤는데... 좀 비관적입니다.

두번째는 그 수많은 사용자를 위한 서비스를 이미지 방식으로 만들면, 서버사이드에서 이미지를 생성하거나, 클라이언트에서 사용자의 입력값을 이미지로 조합하는데, 상당한 시간이 걸릴 것은 분명하며, 이미지 변환을 위한 또다른 ActiveX와 같은 이미지 리더 및 이미지 메이커는 또 다른 비극의 시작일 수 있고, 이미지 방식의 인터넷 뱅킹은 현재의 인터넷 뱅킹 시스템을 엄청나게 확장해야 가능한 시나리오라는 점 입니다. 또한, 저속 인터넷 사용자들의 경우에는 이미지 다운로드 및 업로드를 통해 인터넷 뱅킹을 사용하는데, 상당한 애로를 격을 수도 있다는 점 입니다.

시간이나 비용이 들어도 바뀌어야 할 부분은 좀 바뀌어야 한다는 것이 제 생각인데, 문제는 무엇을 어떻게 바꾸어야 할지를 모르겠는 점이 문제라고 봅니다.

codewiz (2007/09/03 17:47)
고견 감사합니다.
답글을 작성하다 길어질 것 같아서 새로운 글로 남겨두었습니다.
http://www.jiniya.net/tt/590

binish (2008/04/14 17:51)
궁금한 사항이 있어서 글을 남깁니다.

위에서 제안한 방법은 일반적인 경우라 생각되고 실제 뱅킹에서 로그인할 때 사용자가 입력하는,
계좌번호와 비밀번호, 이체금액등은 클라이언트의 메모리에 존재하기 때문에,
만약 메모리 해킹툴이 클라이언트에 심어져있다면 위 방법은 전혀 무관하다고 생각이 됩니다.

이슈화 되었던 사항은 이런 경우로 생각되는데요,
혹시 이에 대한 아이디어나 대책을 생각해보시거나 알고 계신것이 있는지요..? ^^

마당쇠 (2008/07/03 16:58)
우연히 들러서 유익한 내용을 보게되었습니다.
짧은 소견으로, 모든 것이 그렇듯이 기술적대책과 정책적대책이 적절히 조합될 필요가 있을 것 같습니다.
기술적대책은 앞에서의 여러 논의들 처럼 관련 전문가분들이 제시하여야 겠고,
정책적대책은 범죄(해킹을 통한 부당이익 취득 등)에 대한 댓가를 분명히 치르도록 하는 것이겠죠.

얼마전 우연히 관련 내용을 검색 중 뉴스 기사를 접하였는데, 기술적대책으로 활용할 만한 내용으로 보입니다.
"또 모비싸인서비스는 휴대폰에 공인인증서를 보관하기 때문에 해킹 등으로부터 안전할 뿐만 아니라, 휴대폰을 단순히 공인인증서 저장 매체로만 사용하는 유사 서비스와는 달리 휴대폰에 있는 인증서를 PC로 다시 옮길 필요가 없어 메모리 해킹으로 인한 피해도 방지할 수 있다."
(http://www.etnews.co.kr/news/detail.html?id=200804030242)

기사에는 자세한 설명이 없어서 궁금함을 견디지 못하고 알아보니, 방법이 이렇습니다.
(http://www.mobisign.co.kr)
1. 공인인증서를 휴대폰으로 옮겨서 저장한다.
2. PC에서 인터넷뱅킹 등을 하다가 전자문서(이체내역, 즉 금액,계좌번호 등)에 전자서명이 필요한 경우, 휴대폰으로 전자문서를 보내고, 휴대폰에서 동 내용을 확인한 후 전자서명을 수행한다.
3. 휴대폰에서 생성한 전자서명값을 PC에 전송한다.

전자서명법에서 전자서명은 무결성(전자서명후 전자문서가 변경되지 않음)과 부인방지(거래내역을 부인할 수 없음) 효과가 있어, 인터넷뱅킹 등의 전자거래에서 공인인증서를 이용한 전자서명을 하게 됩니다.

위의 경우(MobiSign이라고 하더군요), 전자문서를 휴대폰에서 확인한 후 전자서명을 하게됨으로 PC메모리 상에서 해킹이 되더라도 이를 인지할 수 있다는 장점은 있을 것으로 보입니다.

음~~휴대폰 자체에서의 해킹이 가능할지는 모르겠네여^^....

movies123 (2021/04/01 16:15)
I appreciated your work very thanks

welding companies in anchorage (2021/11/29 23:12)
Awesome! Learned alot thanks so much keep posting more.

Name   Password   Home   Secret   Submit
 Prev   1  ...  141   142   143   144   145   146   147   148   149  ...  604   Next 
codewiz’s Blog is powered by Tattertools.com / Designed by faido