인터넷뱅킹 메모리 해킹
이번 인터넷 뱅킹 메모리 해킹 사건이 온라인 게임 해킹과 비교가 된다는 얘기가 많아
몇년동안 게임보안 시장에서 종사해온 입장에서 한번 글을 남겨봅니다.
일단 구현론적인 접근 쪽에서야 큰 차이점은 없다고 생각합니다. 메모리 상에 올라온 코드를
위/변조(혹은 데이터) 해서 정상 값을 다른 값으로 바꿔 Run 시키는, 메모리 치팅의 아주
기본적인 개념이죠.
하지만 둘은 엄연히 큰 차이점이 존재합니다. 이 차이점은 크게 두가지,
1) 공격자가 얻을 수 있는 이익?
2) 방어론적인 방법
먼저 첫번째부터 예를 들어보겠습니다. 일반적으로 온라인 게임 해킹은 자동 사냥을 한다던가
아이템을 복사한다던가 남보다 파워가 배가 되는 공격력을 얻기 위한다던가 하는 목적으로
사용합니다. 즉 자기가 자기 자신 이익을 위해 직접 자신의 PC에 설치하여 사용한다는 얘기입니다.
반면에 인터넷 뱅킹 해킹은 기껏해야 선보일 수 있는 것들이 계좌번호를 바꾼다던가, 금액을
바꾼다던가 하는 shift류의 value change 기술 뿐입니다. 값 바꿔서 장난칠 수 있는 수준
밖에는 안 된다는 얘끼죠. 나머지는 어쨌든 궁극적으로 server side에서 처리가 되고 있기
때문에, 내 통장에 100원밖에 없는데 100만원을 이체하라 이런것은 원천적으로 불가능하죠.
100만원의 잔고가 있을 때 100원을 보내게 할 순 있겠지만요 :p
즉, 인터넷 뱅킹 해킹은 자신이 직접 자신의 PC에 설치해서는 별로 건질 만한 이득이 없습니다.
이 해킹으로 무언가 소득을 얻으려면 남의 PC에 몰래 은밀하게 플그램으로 구현해서 깔아놓아야
합니다. 그래서 그 사람이 인터넷 뱅킹으로 어디 계좌 이체를 할 때 플그램이 자동으로 가동되게
하여 계좌번호를 머 내 계좌로 바꾸게 한다던가, 다른 계좌로 바꾸게 한다던가 그런식의 접근을
해야합니다.
온라인 게임 해킹과 다시 비교해 보았을 때, "능동과 수동" 이것이 큰 차이점이겠네요.
즉, 자기가 꼴리는 때 원하는 시간 아무때나 온라인 게임에 접속해서 메모리 치팅 가격을 날리는
적극적인 모습보다는 누군가 인터넷 뱅킹으로 송금을 할 때까지 잠자코 기다리는 수동적인
방법론이 서로 다르다 이겁니다.
비유를 하자면 전자의 모습은 물가로 나가 그물을 물속에 처넣고 고기를 제손으로 직접
끌어올리는 모습, 그리고 후자의 경우는 낚시터에 낚시대를 걸어놓고 조용히 눈먼고기가
걸리길 기다리길 바라는 모습이라 할 수 있겠네요.
요약하면, 인터넷 뱅킹 해킹으로 자기 자신의 PC에 설치해서 얻을 수 있는 이득은 기껏해야
친구들 앞에서 "이것봐라 내가 계좌번호 딴데로 바까서 보낼 수 있다" 하면서 자랑하는 수준밖에
안 됩니다. 즉 그 얼마전 KBS 취재파일 4321에 나온 모자이크 처리된 자칭 해커가 기자 앞에서
잘났다고 보여준 그 꼴이 전부라 이겁니다.
즉 사용자의 PC에 몰래 깔아야 원하는 목적을 달성할 수 있다는 관점에서 이 인터넷 뱅킹
메모리 해킹은 바이러스나 백도어적인 시각에서 접근해야 하며, 만약 취재파일 4321에 나온
해커가 티비에 나오기 전에 이런 방식을 사용한 바이러스가 먼저 세상에 등장했다면 기사는
이런 식으로 나오지 않았겠죠. 그 해커는 어지간히도 메모리 해킹에 대해 잇슈화 시키고
싶었나 봅니다.
공격 방법이 같다면 방어도 같아야 할거 아닙니까. 하지만 보안 처리도 전혀 다릅니다
각설하고 저는 온라인 게임 해킹과 인터넷 뱅킹 메모리 해킹과는 전~~~혀 다르다는 시각을
이번에는 방어 방법 관점면에서 얘기해 보겠습니다. 일단 온라인 게임에서는 공격해라 아이템을
줏어 먹어라 머 이런 작업들이 클라에서 처리되어 내 메모리에 저장되는 경우가 많습니다. 이런
경우는 그 메모리를 공략하면 많은 것을 획득할 수 있습니다. 하지만 인터넷뱅킹에서 설마 그런
구조로 되어 있을까요? 인터넷 뱅킹을 할때 내 컴터의 메모리에 저장되는 내용은 계좌번호나 머
그런 정보와 데이터를 보낼 서버의 목적지 등이 있을 뿐입니다. 클라이언트에선 껍데기 처리만
하고 실 처리는 서버에서 이루어집니다. 만약 클라이언트에서 돈을 보내고 이런짓을 한다면-.-
생각만 해도 끔찍하네요 :)
따라서 온라인 게임에서는 메모리에 많은 정보가 주어져 있기 때문에 아무리 막을라고 몸부림을
쳐도 개발자가 생각지도 못한 치트가 나오기도 합니다. 그러나 그것이 한두번 나왔다고 그 게임이
완전히 망하거나 그러진 않죠. 한두번 핵은 걍 애교감입니다. 하지만 인터넷 뱅킹은 한번 뚫리면?
그건 바로 기사감이자, 주식 하락입니다.
따라서 온라인 게임은 메모리 보호 기술을 주력으로 사용합니다. EPROCESS구조체 끊어서
프로세스 감추고 SDT Restore하고(취약점이 나온 이후 요즘은 inline hook으로 다들 교체)
각종 Cheat Tool 다 감지하여 터미네이트 시키고, 등등등 ....어떤 상태에서든 보호하고 있는
메모리의 번지가 보지 않도록 발악을 합니다만 사실 DLL만 하나 집어넣어도 오만가지 짓이 다
됩니다. 하지만 인터넷 뱅킹이 겨우 이딴 Anti-Debugging 기술에 의존한다면
그건 더이상 인터넷 뱅킹이 아니겠죠. 잘 차려놓은 밥상이니 다들 덤벼들려고 난리칠겁니다.
클라이언트에서 복잡한 처리를 하면 개발자도 사용자도 모두 괴롭습니다.
서버 단에서 사용자와 서버만이 알 수 있는 방법으로 검증해야 합니다.
따라서 요즘 나오는 논의가, 인터넷 뱅킹 할 때도 메모리 보호를 하자, 암복호화 구조를 바까 보자,
새로운 방식의 인증 알고리즘을 사용하자 머 내용의 한두줄만 읽어도 머리가 복잡해지는 구조론적
토의가 활발히 이루어지고 있는데 사실 제가 생각할 때는 다 필요 없습니다. 그냥 핸드폰 인증만
해주면 될 것 같습니다. 무슨 소리냐면, 메모리 해킹이라고 나오는 찌라시도 결국 메모리 상에서
정리된 데이터를 바탕으로 패킷을 조립하고 그걸 서버로 보내주어야 합니다.
거기서 변조를 하든 위조를 하든 액수를 바꾸든 어쨌든 최종 데이터가 도착하는 서버에서
송금될 계좌번호와 액수를 사용자에게 핸폰으로 보내줘서 최종 확인하게 한다면, 로컬에서 아무리
메모리 값을 갈아꼈다 뺐다 하더라도 사용자가 최종 값을 확인할 수 있겠죠. 서버가 해킹당하지
않는다면 곧 송금될 정확한 정보가 사용자에게 체크를 위해 날라갈겁니다. 그리고 핸드폰으로
묻겠죠, "이 계좌와 액수가 맞습니까?" 사용자가 NO를 선택하면 엄한 값으로 이체는 되지
않을거고요. 서버에서의 퍼포먼스가 걱정이 된다면 암복호화 알고리즘을 연구하기 보다는
서버 튜닝에 오히려 더 관심갖는게 나을 것 같습니다.
즉, 위변조 자체는 막을 수 없지만, 변조하면 알아내겠다 ! 입니다
이같은 내용을 물론 다른 많은 보안 종사자들도 알고 있을 것이고
또 이미 다들 이미 연구/구현에 들어가 있을지도 모릅니다.
메모리 해킹이란 말 자체도 이번에 생긴 머 최신기술? 웃기지도 않습니다.
저는 초등학교 때 PCTools로 도스게임의 메모리의 바이너리를 바까서 캐릭터의 능력치를 이빠이
올려봤고 각종 장애물을 다 무력화 시켜봤습니다. 그때 그 작업을 같이 한 저와 저의 친구들인
초딩들은 모조리 메모리해킹의 달인인 것이 분명하고 이미 이 분야에선 선구자 이겠네요?
메모리 해킹은 과거에도 숱하게 있었왔고 관련 종사자 뿐만 아니고 비슷한 분야에 발가락이라도
한번 담가본 사람이라면 누구나 알고 있는 꺼리입니다.
그리고 그건 온라인 게임 해킹과 스타트는 비슷하다고 볼 수 있겠습니다만, 공격 방법도,
보안 처리도 전혀 다른 완전히 다른 해킹이라 말하고 싶습니다.
이상 메모리 해킹 분야를 몇년간 전담했고 또 지금도 하고 있는 보안 종사자의 잡소리였습니다.
window31. 2007년 9월.
