Top Coder RAW novel - Chapter (49)
탑 코더-49화(49/303)
# 49
터지면 죽는다
────────────────경찰에게 끌려간 조성원이 영문도 모른 채 눈을 껌벅 거리며 앉아 있었다.
“메일을 확인한 정확한 시간이 어떻게 됩니까?”
“아··· 그게 점심을 먹고 쉬려고 노트북을 켰을 때니까 12시 30분쯤 이니까 아마 그쯤이 아닐까. 싶은데······
“아마요? 지금 사태를 제대로 인지하지 못하신 것 같은데. 조성원씨 때문에 한수원 컴퓨터 수십 대가 악성코드에 감염되었습니다.”
“그, 그건 저도 정말 몰랐습니다. 저는 그냥 본사에서 온 메일인 줄 알았습니다. 정말입니다.”
“그래서요. 계속 말해보세요.”
“그, 그래서. 첨부 파일을 확인해 봤더니. 아무 내용이 없어서 바로 회신 했을 뿐입니다. 그게 다예요.”
조성원은 억울했다. 정말 그게 다였다. 그러나 쉽사리 믿는 눈치가 아니었다.
“그러니까. 최초 12시 30분경 메일 확인했다. 첨부파일을 열었고, 파일이 비어있어 다시 회신 했다. 이 말 맞습니까?”
조성원이 열렬히 고개를 끄덕였다.
“그러면 노트북은 왜 발전소 내부로 들고 들어갔습니까?”
“그, 그건.”
“사실대로 말씀하세요. 지금 진술은 법정에서 불리하게 사용 될 수 있습니다.”
딱딱한 경찰의 말에 조성원이 어렵게 입을 열었다.
“모니터링 하다가··· 비는 시간에 게임을 하려고······.”
“쯧쯧······.”
심문을 하던 경찰이 혀를 찼다. 어이가 없는지 고개를 절레절레 흔들었다.
“악성코드가 심어져 있는 노트북을 발전소 내부로 들고 들어갔다.”
조성원이 푹 고개를 떨어뜨렸다. 그때 문이 열리며 낯선 남성 한 명이 심문실로 들어왔다. 앉아 있던 경찰이 뒤를 돌아보았다. 심문 실에 함부로 들어온다?
남자의 위치가 낮지 않다는 뜻이었다.
“누구십니까?”
“지금부터 이 사건은 합수단으로 이첩되었습니다. 관련 자료 일체를 저희 쪽 직원에게 넘겨주세요.”
“네, 네?”
“조성원씨 신병 인도 절차도 함께 진행하겠습니다.”
경찰이 눈을 동그랗게 뜨고 남자를 보았다. 뒤 따라 들어온 동료 경찰이 재빨리 귓속말을 전했다.
“국정원입니다.”
“······.”
그 한 마디로 상황은 종료 되었다. 조성원은 영문을 모른 채 또 다른 곳으로 끌려갔다.
‘도대체 무슨 일이 벌어지고 있는 거야······.’
***
KISA(한국인터넷진흥원) 사이버 침해대응 본부 본부장 이정훈은 연락을 받자마자 대한 대학교로 이동했다. 이동하는 와중에 매뉴얼대로 국정원 국가사이버안전담당관에게 연락을 취했다.
“현재까지 상황은 한수원 악성코드 감염. 대한 대학교 원자력 관련 연구용역 자료 유출입니다.”
“네. 기타 확인되는 사항 있다면 다시 정보 공유해 드리겠습니다.”
말을 마친 이정훈이 전화를 끊었다. 옆에 있던 직원이 물었다.
“이번에도 북한 소행일까요?”
“모르지. 중국 놈들일 수도 있고. 아니면 미국 놈들일 지도.”
“의도가 뭘까요. 지금 까지 돈을 달라는 메시지도 없고.”
이정훈의 표정이 딱딱하게 굳어졌다.
“한 가지만 아니길 바랄 수밖에.”
“테러······.”
이정훈이 무겁게 고개를 끄덕였다.
현재 나올 수 있는 최악의 수.
그 생각은 하고 싶지도 않았다.
“빨리 가자.”
그 한 마디에 옆에 있던 직원이 연락을 취했다. 앞서가던 경찰차가 사이렌을 켰다. 이정훈이 탄 차가 도심을 질주해 대한대학교로 이동했다.
차에서 내린 이정훈은 날듯이 뛰어 사건 현장에 도착했다. 이미 많은 사람들이 원자력시스템 연구실에 모여 있었다. 그 중 얼굴이 익숙한 사람들이 몇몇 보였다.
일단 허춘수 교수.
각종 보안 관련 세미나나 컨퍼런스에서 자주 마주쳤다. KISA에서도 종종 자문을 구하는 교수님이었다.
그리고 고동수.
주니어부 준우승을 했던 친구.
백채원.
대학생부 우승을 했던 친구.
마지막으로 강승호.
최초로 일반부에서 한국 팀을 우승 시킨 사람.
왠지 그 가 있다면 이번 사건도 빠르게 수습 되지 않을까. 문득 그런 생각이 스쳐 지나갔다. 이정훈이 허춘수에게 다가가 물었다.
“어떻게 된 일입니까?”
허춘수가 자초지종을 설명해 나갔다. 설명을 듣는 이정훈의 표정이 굳어졌다가 다시 풀리길 수차례.
허춘수의 설명이 끝나자 이정훈의 시선이 승호를 향했다.
“그러니까. 저 분이 만든 ZONE 서비스 테스트 도중에 해킹 정황이 포착되었다. 이 말씀이십니까?”
허춘수가 고개를 끄덕였다.
“맞네. 그게 시작이야.”
“여기 서버 실에도 각종 보안 툴들이 설치되어 있을 텐데··· 거기에서 못 잡은 걸 잡았다.”
“아직 완벽한건 아니네. 유출 된 파일이 십여 개 되는데 그 중 한 개만 잡았으니까. 뭐 그것만 해도 대단한 거긴 하지. 그래서 어떻게 됐나? 뭐 좀 알아낸 게 있어?”
“한수원 쪽 PC에 악성코드가 다량 발견 됐습니다. 최초 협력사 직원 메일 쪽에서 시작 된 것 같더군요. 그렇게 감염된 PC만 현재 50여대. 내부에서 백신을 만들고 있습니다. 문제는······.”
“발전소가 감염 됐을지도 모른다는 거군.”
“네. 그쪽은 망 분리가 철저하게 되어 있어서 그럴 일은 없겠지만 정말 만의 하나라도 그렇게 된다면······.”
허춘수는 차마 대답하지 못했다. 이정훈도 입술을 꽉 깨문 채 더 이상 입을 떼지 못했다.
승호는 자리에 앉아 로그를 살펴보고 있었다.
‘확인된 IP는 러시아 블라디보스톡. 이놈들이 왜 한국의 원전 관련 자료들을······.’
잘 이해가 되지 않았다. 그렇다고 딱히 돈을 내놓으라는 요구사항도 없다. 더 이상 반응이 없으니 일 진행이 되질 않고 있었다. 그런 승호에게 이정훈이 다가갔다.
“오랜 만입니다.”
승호가 고개를 갸웃거렸다. 본적이 있었던가?
의문부호를 알아차린 이정훈이 말했다.
“더 게이트에서 뵙습니다. 시상식 때요.”
“아······.”
그러자 기억의 저 편에서 얼굴이 떠올랐다.
“사이버 침해대응 본부장 이정훈님?”
“네. 맞습니다.”
이정훈이 주머니에서 USB를 꺼내들었다.
“이번 사건과 관련해서 악성코드 하나 담아 왔는데 살펴봐 주실 수 있을까요?”
“당연하죠.”
고개를 끄덕인 승호가 노트북에 USB를 꼽았다.
-월성 원자력시스템 모니터링 개선 연구 용역.dox USB에 담겨 있는 건 덜렁 이 파일 하나.
뒤에서 지켜보던 이정훈이 설명 해주었다.
“해당 파일에 악성코드가 심어져 협력사 직원을 통해 한수원 본사로 넘어갔습니다. 현재 저희가 파악한 바로는 파일리스 형태 인 것으로 파악하고 있습니다.”
파일리스.
많은 악성코드들이 파일의 형태로 남아 피해자 컴퓨터에 저장된다. 파일리스는 파일이 아닌 메모리상에만 존재하는 특징을 가진다. 문제는 휘발성이기 때문에 대부분의 공격자는 한 번의 공격으로 큰 피해를 주려고 의도한다는 것이다. 이정훈이 빠르게 말을 이었다.
“현재 KISA 내부에서도 분석 중에 있습니다만. 시간이 걸리고 있습니다. 만약 이 악성코드가 발전소 내부 망을 통해 주제어 실까지 들어가게 된다면······.”
뒷말은 무엇인지 승호도 능히 짐작할 수 있었다. 이정훈이 입술을 꽉 깨물며 말했다.
“지금 1분 1초가 급한 상황입니다.”
“알겠습니다. 최대한 빨리 살펴보겠습니다.
승호가 굳은 표정으로 노트북에 파일을 카피 하고 실행시켰다. IDA를 켜서 어셈블리 형태로 변환할 시간조차 없었다.
원자력.
그 단어가 내포하고 있는 폭발력은 승호를 조급하게 만들기에 충분했다. 승호는 바로 0과 1의 세계에 진입했다.
0111000011111······.
셀 수조차 없이 많은 0과 1이 눈앞에 나타났다. 승호는 그 중 파일에서 시작된 흐름을 따라갔다.
수분을 두 눈을 부릅뜨고 집중하던 중.
기존의 패턴과 다른 부분이 보였다.
‘다른 부분은 00xx로 끝나는데 왜 이것 만······.’
우리가 흔히 문서를 작성하면 텍스트만 들어가는 것이 아니다. 때로는 표를 넣기도 하고, 어떤 이는 이미지를 넣기도 한다. 그것들이 합쳐져 하나의 파일이 되는 것이다.
그렇기에 하나의 문서 파일은 다양한 파일의 압축본이나 마찬 가지였다. 그 압축 본에 들어가서는 안 될게 들어가 있었다. 승호는 정신없이 정상적으로 작성된 파일을 확인해 보았다.
정상과 비정상.
그 두 파일 사이의 차이점을 발견한 것이다.
‘역시 이건 정상 코드가 아냐.’
두 파일을 비교하자 문제점은 확연히 드러났다. 일종의 이물질이 섞여 있는 것이다. 물론 다른 이들도 시간을 들여 찾는 다면 발 견 할 수 있는 내용이었다. 그러나 승호만큼 빠르게 찾아낼 수는 없으리라.
승호는 다른 정상 파일을 만들어 한 번 더 확인해 보았다. 역시나 같은 문제점이 발견되었다.
“찾았습니다.”
그 한 마디에 사람들이 우르르 몰려들었다.
승호는 설명을 위해 ‘올리디버거’라는 툴을 인터넷에서 다운로드 받았다. 그 툴을 이용해 이정훈이 건넨 파일을 열어, 마우스로 빠르게 스크롤을 내리다 한 부분에서 멈춰 세웠다.
“이 부분을 보시면··· 여기. 이게 악성코드로 보입니다.”
승호가 정상 파일을 열어 같은 부분을 가리켰다. 누군가 질문을 하려고 했다. 이정훈이 그 직원을 막아 세웠다.
“일단 들어. 질문은 다 듣고 나서.”
직원이 물러서자 승호가 설명을 이어나갔다.
“정상 파일은 110X로 끝나는데. 여기만 00xx로 끝나고 있어요. 이 쪽 라인이 하는 일을 디스어셈블리 해보면 더 정확히 알 수 있습니다.”
승호가 어셈블리 형태로 변환된 코드를 가리켰다.
MOV 1100X1
LOOP1
MOVSB 11101 -> 11XC
…….
LOOP1_END
“보시면 타깃의 메모리로 올라가면 무한 루프를 돌면서 계속해서 좀비 프로세스를 만들어내는 걸 확인 하실 수 있습니다.”
승호의 말에 이정훈이 침음을 삼켰다.
“그렇다는 말은··· 만약 아무런 조치를 취하지 못하면.”
“아마 타겟이 메모리 부족으로 다운 될 겁니다.”
허춘수가 사색이 되어 말했다.
“의도치 않게 시스템이 셧 다운 될 수 있다는 말이군. 물론 그게 대한 방비가 되어 있겠지만··· 만에 하나라는 게 있으니.”
이정훈이 조용히 중얼 거렸다.
“시스템 오작동. 정보 유출. 셧 다운. 모든 경우의 수가 열려있는 거나 마찬가지군.”
이정훈이 입술을 꽉 깨물더니, 거친 콧김을 내뿜으며 소리쳤다.
“젠장! 어떤 X새끼들이 이런 짓을 벌이는 거야!”
옆에 있던 KISA 직원이 이정훈을 진정 시키려 했지만 쉬이 진정 되질 않았다. 승호가 그런 이정훈을 보며 말했다.
“시간이 없습니다. 우선 한 팀은 백신을 만들고, 다른 팀은 감염 여부를 확인해 보셔야 할 것 같습니다.”
이정훈이 황급히 전화를 걸었다.
“분석은 어떻게 됐어?”
-아직 진행 중입니다.
다시 국정원 쪽에도 전화를 걸어 보았다. 그러나 돌아온 대답은 크게 다르지 않았다. 아직 동작 방식 분석조차 못하고 있었다. 길게 한숨을 내쉰 이정훈이 승호를 보며 말했다.
“죄송하지만··· 월성으로 가주실 수 있습니까?”
대답은 다른 곳에서 들렸다.
잔뜩 들뜬 목소리.
“무, 물론입니다.”
고동수였다. 사람들의 시선이 고동수를 향했다.
“아··· 스, 승호님이라면 갈 것 같다고 말씀 드린 겁니다.”
이정훈이 인상을 팍 쓰며 고동수를 보았다. 고동수가 마른 침을 삼키며 시선을 회피했다. 승호가 입을 열었다.
“차를 타고 가도 3시간은 넘게 걸릴 텐데······.”
“밖에 헬기 대기해 있습니다. 그걸 타고 가면 됩니다.”
이정훈을 태우기 위해 국정원에서 섭외해둔 헬기였다.