트렌드

(-.-)a “악성코드는 어떻게 만드나요?”

2015.03.05

‘흥신소’는 돈을 받고 남의 뒤를 밟는 일을 주로 한다고 합니다. ‘블로터 흥신소’는 독자 여러분의 질문을 받고, 궁금한 점을 대신 알아봐 드리겠습니다. IT에 관한 질문, 아낌없이 던져주세요. 블로터 흥신소는 공짜입니다. e메일(sideway@bloter.net), 페이스북 (http://www.facebook.com/Bloter.net), 트위터 (@bloter_news) 모두 열려있습니다.

“악성코드가 어떻게 생겼는지 알고 싶습니다. ‘코드’가 뭔지, 어떻게 짜여진 건지, 그게 어떻게 작용해 해커가 정보를 빼돌리는지 알려주세요.” – 나복엽 독자

며칠 전 ‘IT용어사전’이라는 꼭지로 보안 기사에 자주 나오는 용어를 설명해드렸습니다. 그 기사를 읽은 나복엽 독자께서 악성코드에 관해 좀더 자세히 알려달라고 e메일을 보냈습니다. 저 혼자 공부해서 알려드리기 벅차서 전문가에게 물어보고 답변 드리는 ‘흥신소’로 넘겼습니다. 국산 백신 알약을 만드는 이스트소프트에서 일하는 김진욱 비즈니스본부 홍보팀장에게 물어봤습니다. 김진욱 팀장은 악성코드도 일반 컴퓨터 프로그램과 크게 다르지 않다고 답했습니다.

Malware Matrix

Malware Matrix

1. 코드가 뭔가요

코드(code)란 컴퓨터 프로그램이 작동하게 만드는 명령어의 집합입니다. 다른 말로 프로그래밍 언어라고도 부르지요. 사람이 쓰는 말에 한국어, 중국어, 영어가 있듯 프로그래밍 언어도 종류가 다양합니다. C, 자바, 파이선 등 모두 헤아리기도 힘들죠.

코드가 쌓이고 거기에 사람이 사용하기 쉽게 디자인 요소가 덧붙으면 우리가 흔히 쓰는 컴퓨터 프로그램이 됩니다.

2. 악성코드는 뭔가요

정상 프로그램 속에 숨어들어 사용자 의사에 반하는 짓을 하는 나쁜 프로그램입니다. 윈도우나 맥 OS, 안드로이드, iOS 같은 운영체제(OS) 역시 거대한 프로그램입니다. OS 위에는 한글이나 파워포인트, 엑셀, 워드 같은 각종 응용프로그램이 돌아가죠. 악성코드는 이들 속에 몸을 숨기고 정상 프로그램이 잘 돌아가는 와중에 몰래 작동해 나쁜 짓을 합니다. 보통 비밀번호나 금융정보 등 ‘가치 있는 정보’를 노리죠.

3. 악성코드는 어떻게 만드나요

악성코드도 결국 코드 중 한 종류입니다. 컴퓨터 프로그램을 만들듯 만듭니다. 이를 코딩 또는 프로그래밍이라고 하죠. 개발자라면 누구나 악성코드를 만들 수 있다는 뜻입니다. “악성코드와 정상적인 프로그램은 한끗 차이”라고 김진욱 팀장은 설명했습니다.

처음으로 컴퓨터 바이러스를 만든 사람도 컴퓨터를 망가뜨리려는 게 아니라 자기의 개발 능력을 과시하고 싶어서 그랬다고 합니다. 컴퓨터 바이러스도 악성코드의 한 종류죠. 초기 악성코드는 이렇게 장난처럼 만들어진 경우가 많았습니다.

하지만 요즘은 다릅니다. 악성코드가 악질이 됐죠. 컴퓨터가 널리 쓰이기 시작하면서 컴퓨터로 다루는 정보의 가치도 커졌습니다. 이걸 빼돌리면 돈이 되는 세상이 됐습니다. 그러자 악성코드를 만드는 일도 지하경제로 성장했습니다. 기업처럼 활동하는 해커 집단도 속속 등장합니다. 이들은 웬만한 기업만큼 돈을 법니다.

또 원자력발전소 같은 기간시설과 군사장비도 컴퓨터로 운용되기 때문에 사이버 보안이 안보에 중요한 요소로 자리잡았습니다. 실제로 사이버 전쟁이 벌어지기도 합니다.

4. 악성코드는 어떻게 생겼나요

바로 위에 말씀드린 내용과 조금 겹칩니다. 악성코드도 여타 컴퓨터 프로그램과 똑같이 생겼습니다. 같은 프로그래밍 언어로 같은 방식으로 만듭니다. 그러니 생긴 것도 같지요. 샘플을 보여달라고 요청했지만 거절당했습니다. 김진욱 팀장은 “개발을 아는 사람이 보면 따라 만들 우려가 있으니 양해해 달라”라고 말했습니다. 아래는 카스퍼스키랩이 낸 보고서에서 보여준 악성코드의 일부입니다.

펌웨어 덮어씌우기가 가능한 제조사 목록 (출처 : 카스퍼스키랩 보고서 17쪽)

▲ 펌웨어 덮어씌우기가 가능한 제조사 목록 (출처 : 카스퍼스키랩 보고서 17쪽)

5. 악성코드는 정보를 어떻게 빼가나요

악성코드가 정보를 빼가는 원리도 다른 프로그램이 네트워크로 데이터를 보내는 것과 같습니다. 다른 점은 사용자 몰래 정보를 수집하고 쏜다는 정도죠.

먼저 정상적인 사용 환경을 살펴보죠. 독자님이 블로터 웹사이트에서 기사를 본다고 칩시다. 독자님이 웹주소(URL)을 누르면 컴퓨터가 블로터 웹서버에 기사 데이터를 요청합니다. 서버는 기사에 해당하는 데이터를 독자님 컴퓨터로 쏴줍니다. 독자님 컴퓨터는 그 데이터를 받아 화면에 보기 좋게 뿌려줍니다.

이번에는 악성코드 차례입니다. 인터넷 사용내역을 몰래 수집하고 해커에게 보내는 스파이웨어가 컴퓨터에 깔려있다고 가정하죠. 독자님이 블로터 웹사이트에서 기사 웹주소를 누르면, 그걸 스파이웨어가 기록합니다. 독자님 컴퓨터가 서버에 요청한 데이터는 뭔지, 돌려받은 데이터는 뭔지 훔쳐봅니다.

수집한 정보는 독자님 몰래 해커가 만들어둔 C&C(command & control) 서버로 보냅니다. C&C 서버는 이름처럼 해커가 내린 명령을 활동 중인 수많은 악성코드에 전달하고 통제하는 역할을 합니다. 만약 컴퓨터에 비밀번호나 공인인증서 같은 민간한 정보를 훔치는 악성코드가 깔렸다면 해커 C&C로 이런 데이터가 빠져나갑니다.

6. 백신은 악성코드를 어떻게 잡나요

악성코드와 이를 잡는 백신은 창과 방패의 관계입니다. 하루 사이에도 수많은 악성코드가 쏟아집니다. 비정상적인 기능을 하는 코드를 사용자나 백신 프로그램이 확인하면, 이를 백신 회사로 보냅니다. 백신 회사 개발자는 코드를 분석하고 악성코드라고 확인되면 이에 맞는 보안 패치를 내놓습니다. 백신 회사가 미처 발견하지 못한 악성코드는 정체가 들키기 전까지 활개칠 수밖에 없죠.

그래서 요즘은 휴리스틱 분석 기법을 동원합니다. 악성코드가 나쁜 짓을 하는데 자주 쓰는 코드가 있습니다. 그 패턴을 분석해 이와 유사한 기능을 하는 코드를 발견하면 악성코드로 의심된다고 경고 메시지를 띄우는 겁니다. 악성코드에 주로 쓰이는 코드 패턴을 데이터베이스로 만들어 사용한다고 김진욱 팀장은 말했습니다.

그래도 완벽하게 막을 수는 없습니다. 그래서 최근에는 샌드박스라는 기법을 동원합니다. 진짜 사용자 컴퓨터와 네트워크 사이에 가상 컴퓨터를 설치하고, 네트워크로 들어오는 코드를 실행해 악성코드인지 아닌지 확인해보는 겁니다. 만약 악성코드가 숨겨져 있다면 전송을 차단하고, 멀쩡하다면 사용자에게 전달하는 거죠. 예전에 궁중에서 왕이 먹기 전에 음식을 찍어 먹던 궁녀 같은 역할을 한달까요.

샌드박스도 완벽하지는 않습니다. 실행할 당시에는 멀쩡한 프로그램이지만, 시간이 지나고 본색을 드러내는 식으로 교묘하게 만들어진 악성코드가 나왔기 때문입니다. 아까 말씀드렸듯이, 악성코드와 이를 잡는 기술은 창과 방패입니다. 해킹 산업과 보안 업계도 마찬가지입니다. 서로 맞물리며 성장하는 셈이죠.

nuribit@bloter.net

기술의 중심에서 사람을 봅니다. 쉽고 친절하게 쓰겠습니다. e메일 nuribit@bloter.net / 트위터 @nuri_bit / 페이스북 facebook.com/nuribit0