Top Coder RAW novel - Chapter (169)
탑 코더-169화(169/303)
# 169
이제는 스마트 시티
북한 정찰총국 산하 110연구소.
대외적으로 전혀 알려져 있지 않은 110연구소는 북한 내에서 손꼽히는 엘리트들이 모여 있는 곳이었다. 그런 똑똑한 이들이 모여 있었기에 전 세계 5위에 달하는 해킹 능력을 보유 할 수 있었다. 그런 그들의 얼굴이 긴장으로 딱딱하게 굳어져 있었다.
“참모부 서버 연결 끊겠습니다.”
“뭐야! 거기까지 뚫렸어?”
“파악 중입니다. 단지 만약을 대비해 선제 조치를 취할 필요가 있습니다.”
“거 오늘 따라 일 처리가 형편 없구만. 승냥이 떼들 공격이 한, 두 번도 아니고.”
자리에 앉아 있던 요원이 아랫입술을 꽉 깨물었다. 110연구소 소장이 다른 요원을 보며 물었다.
“기래서 그 간나 새끼들 정체는 언제쯤 밝혀지네. 이번에도 중앙정보국? 아니면 국정원 놈들 짓이네?”
“연구소 데이터베이스에 없는 아이피라 시간이 필요 합니다.”
“시간은 어제부터 벌써 하루나 주었어. 앞으로 하루 더 주갔어. 만약 그 안에 해결하지 못하면 어찌 될지 자네들이 더 잘 알거야.”
앉아 있는 요원들의 목울대가 일제히 꿀렁거렸다. 누구 보다 잘 알고 있었다.
광산 행.
함경남도에 위치한 석탄 광산에 끌려가 중노동을 하게 하게 된다. 그 일을 일주일만 해도 지금 이곳이 천국처럼 느껴진다는 것이 다녀온 이들의 공통된 말이었다. 요원들이 일제히 소리쳤다.
“최선을 다하겠습니다!”
“기래 날래 날래 결과를 가져 오라우. 기래야 나도 동무들도 살 수 있어.”
연구소장의 표정도 썩 좋지는 않았다. 만약 정말 내부 서버가 털려 데이터가 유실 되었다면.
‘살아도 산 게 아닐 거다.’
얼마 전 조선 엑스포에서 근무하던 해커들이 미국 CIA에 검거 되어 관계자들이 탄광 행에 처해졌다.
그 몇 달 전.
갑자기 퍼진 바이러스로 인해 대규모 정전 사태가 발생해 또 탄광 행. 만약 이번 사태를 제대로 수습하지 못하면 자신도 비슷한 처지가 될 것이 뻔했다. 그러나 사태는 수습될 기미가 보이지 않았다.
“이, 이게 뭔······.”
-삐빅. 삐비빅
-access denied
한 요원의 모니터에 떠오른 문자열이 연쇄적으로 다른 모니터로 번져가고 있었다. 역으로 해킹을 당하고 있다는 뜻이었다.
***
함께 작업을 하던 다른 요원들이 자리에서 일어나 승호의 뒤편에 서 있었다.
“Foot Printing에서 Gaining Access까지 한 시간 만에 끝낸 거 맞지?”
옆에 서 있던 제임스가 무겁게 고개를 끄덕였다. 대략 적으로 말하는 해킹의 8단계 중 4단계 까지 불과 하루 밖에 걸리지 않았다. 이건 뭐 거의 아우토반을 달리는 자동차 같은 속도였다. 함께 있던 요원 중 한 명이 혼잣말을 중얼 거렸다.
“이 정도면 삼 일 안으로 전부 끝날 수도 있겠는데······.”
“설마······.”
“그러면··· 우리 밥 그릇 뺏기는 거 아냐?”
누군가의 농담에도 아무런 리 액션을 하지 못할 만큼 승호의 속도는 경이. 그 자체였다. 집중해서 작업을 진행하던 승호도 인기척을 느꼈는지 입을 열었다.
“이거 작업하면서 동시에 교육해도 됩니까?”
그 중에 결정권한이 있던 제임스가 고개를 끄덕였다.
“네. 가능하다면.”
“그럼 바로 교육 시작하겠습니다. 어차피 여러분들에게 이론을 교육하는 건 큰 의미가 없을 겁니다. 오늘처럼 사례 중심으로 교육 하게 될 겁니다.”
승호는 손을 움직이면서도 입을 멈추지 않았다.
“이미 모아두신 정보들을 이용해 서버 접속 까지는 무난히 할 수 있었습니다. 문제는 그 이후 관리자 권한을 획득하는 것인데. 보시는 것처럼.”
멈추지 않은 승호의 손에서 특정 명령어가 날아갔다.
netstat -an.
명령어를 치자 포트가 바인딩 되어 있는 여러 프로세스들이 나타났다.
“이 중 포트가 열려 있으나 아무런 동작을 하지 않는 프로세스를 바꿔치기 하겠습니다. 하는 방법은 setui 비트 변경. 아시다 시피 미눅스에서 일반 파일을 실행할 때.”
승호가 설명을 하려고 하자 제임스가 입을 열었다.
“알고 있습니다.”
“하하, 네. 그러면 자세한 설명은 생략하겠습니다. 보시는 것처럼 sql 인젝션으로 찾아낸 일반 사용자 아이디로 접속. 그 이후 미눅스 기본 제공 컴파일러인 파이썬으로 setui를 찾아내는 스크립트를 만들었습니다.”
제임스가 재빨리 물었다.
“스크립트요?”
“네. 스크립트는 추후 따로 공유해드리겠습니다. 보시면 크게 어려운 점을 없을 겁니다.”
“알겠습니다.”
“그렇게 찾아낸 파일에 /bin/bash를 삽입하는 것도 설명 안 드려도 되겠죠?”
“네.”
“그러면 이제 미눅스에서 관리자 권한을 실행할 준비가 된 겁니다. 다음은 여기서 DB 권한 탈취 방법입니다.”
승호가 설명을 이어 나갈수록 병풍처럼 서 있던 요원들이 허리를 숙이며 모니터에 집중했다. 한 사람은 스마트폰을 켜고 승호의 목소리를 녹음하고 있었다.
이내.
얼마 지나지 않아.
“이렇게 DB 권한까지 탈취 했습니다. 여기서 내용을 추출 하는 건 기존 명령어를 그대로 사용하면 됩니다.”
mysql -h 192.168.0.11 -P 41000 -u root -pwjdckfchdrnr11승호는 mysql 데이터베이스에 접속하겠다는 명령어를 쳤다.
그리고.
show databases;
해당 데이터베이스에 어떤 데이터가 있는 지 확인하는 단계 까지 나아갔다. 명령어를 친 승호가 물었다.
“확인해보고 몇 개만 가져옵니까? 아니면 전부다 추출 합니까. 전부다 가져오면 중간에 끊길 위험이 있습니다.”
그 사이에 승호가 키보드 바로 앞에 놓아둔 타이머의 시간이 흐르고 있었다.
4:30.
4:29.
4:28.
승호가 정해 놓은 각 부분별 타임 라인 이었다.
아무 대답이 없자 승호가 다시 물었다.
“최대 4분밖에 남지 않았습니다. 어떻게 할까요?”
“저, 전부. 일단 전부 가져 옵시다.”
고개를 끄덕인 승호가 다시 명령어를 입력했다.
mysql -h 192.168.0.11 -P 41000 -u root -pwjdckfchdrnr11 mysql < ./mysql.sql 명령어를 입력하자.
-export 중입니다······(1%)-export 중입니다······(15%)-export 중입니다······(25%)이내 데이터 추출이 시작되었다. 추출 된 데이터를 다시 로컬로 복사. 그리고 usb로 까지 옮겨 담았다. 승호가 컴퓨터에서 뽑아낸 usb를 뒤로 건넸다.
“일단 하나 복사했으니까 확인해보세요.”
마른 침을 삼키고 있던 제임스가 재빨리 usb를 넘겨받아 분석 팀으로 넘겼다.
“그러면 다른 서버 해킹을 시작 하겠습니다. 이쪽은 방금 전과는 다른 방식으로 접근해야 합니다. 왜냐하면 제가 말씀 드렸던 setui를 찾아내는 스크립트를 실행시켜도 아무런 결과가 나오지 않기 때문입니다. 그러면 여기서 질문 하나 하겠습니다. 이때 가장 시간이 많이 걸리는 작업이 무엇일까요?”
처음으로 던진 질문에 요원 한 명이 입을 열었다.
“그건··· 어떤 방식으로 접근해야 하는지 찾아내는 것 아닐까요.”
다른 요원이 고개를 끄덕이며 동조했다.
“저도 마찬가지 생각입니다. 해당 서버가 어떤 취약점을 가지고 있는지 찾아내는데 가장 많은 시간이 듭니다.”
그러자 승호가 고개를 끄덕이며 웃어보였다.
“하하, 네 맞습니다. 다들 취약점을 빠르게 찾아내는 자신만의 스크립트 정도는 하나씩 가지고 있을 겁니다. 그건 저 역시 마찬 가지고요. 그걸 이렇게 실행하면.”
그러자 화면에 해당 서버의 취약점이 주르륵 출력되었다.
“물론 이건 예상 취약점이기에 정확하지 않을 수도 있습니다. 그러나 범위를 좁혀 시간을 단축시킬 수 있습니다. 이 코드 역시 작업이 끝나고 공유해드리겠습니다.”
이미 놀라운 승호의 실력을 눈앞에서 충분히 경험했다. 모여 있던 미국 최고의 정보기관 요원들이 열렬히 고개를 끄덕였다.
“보시면 출력된 취약점들 중 제가 생각하는 우선 순위는······.”
승호는 설명을 이어나갔고, 요원들은 가끔 메모까지 해가며 승호의 말을 경청했다.
***
중국 인민해방군 연합 참모부.
그 건물 내에 위치한 회의실이 시끌벅적했다.
“작전 계획이 유출 되다니. 그 놈들은 기밀 관리를 도대체 어떻게 하는 거야!”
“지금은 당장 북한과 연합 작전인 ‘7일 작전’을 폐기하고 새롭게 계획을 세우는 것에 집중해야 할 것 같습니다. 이미 적에게 노출 된 작전은 아무 의미가 없으니까요.”
“유출 경로를 추적 중에 있습니다만. 쉽지 않은 모양입니다.”
회의실 내 가장 지위가 높은 왕슈잉 상장(대장)이 목소리를 높였다.
“예상되는 범위라도 있을 거 아냐!”
상장의 호통에도 부하들은 딱히 입을 열지 못했다. 이건 자신들의 잘못이 아니었다. 북한의 실수로 흘러나간 작전계획이었다. 부하 한 명이 겨우 입을 열었다.
“···북한에서는 미국을 의심하고 있습니다.”
“미국 해킹 시도가 어디 한 두 번이야! 그걸 대답이라고. 우리 쪽 분석은?”
“현재 사이버 요원들을 투입해 진행하고 있습니다. 다만 아직 결과가 나오지 않은 상태입니다.”
왕슈잉이 눈을 감으며 의자에 몸을 기댔다. 회의실에 앉아 있는 참모진들이 좌불안석 하며 서로 눈치를 살폈다.
“알았으니까 당장 작전 계획 폐기하고, 새롭게 구상해와. 그리고 어떤 놈들이 해킹해 갔는지 철저히 파악하고.”
“알겠습니다.”
지시를 내린 왕슈잉이 떠나고, 참모진들이 바삐 움직이기 시작했다. 누구는 작전 계획을 새롭게 수립하는 작업을 또 다른 이는 북한과 협력하고 있는 사이버 요원들이 있는 사이버 사령부로 향했다.
같은 시각 중국 사이버사령부.
사령부내에서도 최고로 엄선 된 인원들만이 입대하는 여와팀. 그 팀이 북한 발 해킹으로 시끄러웠다.
“러시아에서 해킹을 시도 했다고? 러시아에서 왜.”
이내 다른 요원이 급히 나섰다.
“아, 아닙니다. 러시아에서 연락이 왔는데 자신들도 해킹당한 것 같다고 합니다.”
여와팀 팀장이 목청을 높였다.
“그럼 도대체 어디야!”
상관의 고함소리에 사무실이 조용해 졌다. 요원들은 묵묵히 역추적에 몰두했다. 북한이 공유해준 로그를 확인하고, ssh를 통해 북한 쪽 서버에 직접 접속. 확인하는 작업을 진행했다. 그러던 중 한 요원이 살짝 아랫입술을 깨물며 중얼 거렸다.
“러시아를 접속 할 때도 이탈리아 쪽 공공기관 서버로 우회한 것으로 확인 됩니다.”
대부분의 해킹이 이와 비슷하게 이루어진다. 전 세계 여러 서버를 경우 해 목적지 서버를 해킹한다. 그렇게 되면 각 경유지 서버를 확인하지 않으면 최초 공격자를 확인 한다는 것이 사실 상 불가능해지는 것이다.
이때 경유하는 서버의 개수는 적게는 수 개에서 많을 경우 수 십 개가 되는 경우도 있다. 그걸 일일이 확인 할 수 없기 때문에 역추적이 어려웠다. 여와팀의 팀장이 깊은 한숨을 내쉬었다.
“전부 확인하려면 얼마나 걸릴 것 같은데.”
“최소 1주일 정도가 걸립니다. 러시아에 협조를 구하고, 이탈리에도······.”
“우리도 그냥 해킹해서 추적 진행하면?”
“자칫 문제의 소지가 될 위험이 있습니다.”
“우리가 언제부터 그런 걱정 하면서 일 진행했어.”
“알겠습니다.”
그렇게 한 시간 여가 지난 뒤.
해킹을 진행하던 요원의 목소리가 한 없이 작아졌다.
“추적 실패 한 것 같습니다. 경유지 서버에 남아있는 로그가 전부 삭제되어 있습니다. 그래서 이탈리아까지 밖에는······.”
콰앙!
분을 참지 못한 여와팀 팀장이 발로 책상을 차는 소리였다.