Top Coder RAW novel - Chapter (11)
탑 코더-11화(11/303)
# 11
갑질을 이기는 기술
────────────────오후 3시 10분.
일행은 다시 회의실에 자리를 잡고 앉았다. 자신을 김신우라 소개한 과장이 먼저 입을 열었다.
“지금까지 선진에 납품되는 많은 소프트웨어대해 보안 점검을 벌였지만 51건의 지적을 받고, 일주일 만에 전부 해결한 케이스는 거의 없었습니다.”
김신우는 차분히 설명을 이어나갔다.
“그러던 중 여기 송보나 대리가 특이한 점을 하나 발견했다고 해서 이렇게 자리를 마련하게 되었습니다. 송 대리.”
큰 눈에 찹쌀떡처럼 몰랑해 보이는 피부가 인상적인 송보나가 입을 열었다.
“지금 부터는 제가 말씀드리겠습니다.”
송보나가 전면의 스크린에 빔을 쏘았다. 그리고 포트사에서 출시된 인터넷 브러우저를 열어 시내 소프트가 시연회 때 보였던 웹 페이지에 접속해, 코드 보기를 클릭했다.
“여기 시내 소프트 검색 화면 코드 입니다.”
etAttribute(“eid”)));)a=a.parentNode;return b||google.kEI};sinae.getLEI=function(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute(“leid”)));)a=a.parentNode;return b};sinae.https=function(){return
“https:”
==window.location.protocol};sinae.ml=function(){return null};sinae.time=function(){return(new Date).getTime()};
당장 의미를 알아보기 힘든 문자열이 나열 되어 있었다. 정상 적인 스크립트의 형태가 아니었다.
“어떤 방법을 사용했는지 이 코드를 원복 시키는 뷰티파이 작업이 통 먹히질 않았습니다. 그래서 문의를 드리니 베이스128을 적용했다는 대답을 들었습니다. 그러나 제가 알기로 베이스 인코딩은 최대 94 까지만 존재하는 것으로 알고 있어요.”
송보나가 다시 승호를 쳐다보았다. 황호근, 최기훈, 박태수도 승호를 보았다. 송보나가 말을 이었다.
“저도 자바 스크립트 코드 난독 화 방법이라면 다양하게 알 고 있습니다. 문자열을 split 하는 방법, xor 인코딩 방법, 8-bit 아스키ii 또는 대중적으로 많이 사용되는 칼 데이먼 난독화 모듈. 그 어느 것으로도 이걸 풀 수는 없었습니다. 정말 베이스128이라는 걸 사용하신 건지 그게 궁금합니다.”
표정에도 궁금증이 가득했다. 승호가 천천히 입을 열었다.
“정확히는 베이스128로만 이루어진 건 아닙니다.
승호가 황호근을 슬쩍 보았다. 황호근이 고개를 끄덕이자 그제야 말을 이었다.
“사실 보신 코드의 난독 화는 총 3가지 단계를 거칩니다. 먼저 k-obfuscation 알고리즘으로 명명한 파이프라인을 탑니다. 해당 알고리즘에서 1차 적으로 코드를 알아보기 힘든 형태로 변경해 버립니다. 이를테면 무작위로 위치를 변경한 다음 한 줄로 만들어버리는 거죠. 다음으로 통과하는 것이 베이스128로 만들어진 인코딩 라이브러리입니다. 이걸 통해 코드는 한 번 더 난독화가 진행됩니다. 세 번째로 이렇게 인코딩 된 코드를 방금 전 말씀하신 칼 데이먼 난독화 모듈을 통해 한 번 더 변경합니다.”
송보나가 급히 물었다.
“k-obfuscation 알고리즘은 또 뭔가요?”
“그건 시내 소프트 자체 모듈로 여기에 자바 스크립트 코드를 넣으면 말씀 드린 데로 코드의 순서가 무작위로 바뀌면서 자동 정렬됩니다.”
“그렇게 된 코드를 베이스128에 넣었다?”
“맞습니다. 베이스128은 베이스64를 조금 업그레이드 시킨 버전으로 표현 불가능한 33개의 제어 문자를 표현 할 수 있는 형태로 변형하였습니다.”
“그건 불가능해요. 33개의 문자는 일종의 예약된 지시어 인대 그걸 마음대로 바꾸면 베이스 인코딩이 작동하지 않아요.”
“베이스64는 최초 8비트 이진 데이터를 문자에 영향을 받지 않는 아스키코드로 표현하기 위해 나타났습니다. 64는 64 진법이라는 뜻으로 2의 제곱수들로 표현할 수 있는 가장 큰 진법. 128이 나오지 않은 이유는 128진법이 되려면 화면에 표현할 수 있는 기호가 128개가 되어야 하는데 그렇지 못하기 때문이라 다들 말하죠.
승호의 장황한 설명에 송보나가 툴툴거렸다.
“죄송하지만 지금 베이스인코딩의 기원을 듣고 싶은 게 아닙니다.”
“거기에 보면 표현 불가능한 문자들에 대해 정확히 화면에 표시 하지 말 라고 된 내용은 없습니다. 오히려 전 이렇게 묻고 싶네요. 왜 자꾸 안 된다고 하시는 지요? 이렇게 결과물이 눈 앞에 있는데. 설마 그 안의 원리 까지 전부 하나하나 설명해 달라는 말씀이신가요?”
승호가 자문자답했다.
“전 오픈소스를 만든 게 아닙니다. 돈을 받고 파는 기업용 솔루션을 만든 겁니다.”
승호가 잠시 말을 멈추었다. 그리고 다시 황호근을 보았다. 미간이 잔뜩 찌푸려져 있었다. 승호의 반박에 사무실의 공기가 팽팽하게 당겨졌다. 송보나가 황호근을 보며 말했다. 목소리가 조금은 작아져 있었다.
“혹시. 실례가 안 된다면··· 더 자세히 들을 수 있을까요?”
김신우가 한 마디 거들었다.
“솔루션 납품은 긍정적으로 검토 될 겁니다. 걱정하지 않으셔도 됩니다.”
황호근이 기다렸다는 듯이 입을 열었다.
“죄송하지만 구두 약속은 유의미한 신뢰를 형성하기 힘들 것 같습니다.”
검색 솔루션을 납품하며 단단히 당했다. 똑같은 일을 또 당할 수는 없었다.
“문서상으로 솔루션 납품 건에 대한 약속이 있어야 저희도 더 자세히 말씀을 드릴 수 있을 것 같습니다.”
그러고는 입을 꾹 다물었다. 난처한 표정의 송보나가 김신우를 보았다. 김신우가 얕은 한숨을 내쉬었다.
“이런 말씀 까지는 드리지 않으려고 했는데··· 혹시 얼마 전에 터진 KU 통신사 개인정보 해킹 사건 들어보셨습니까?”
승호도 알 고 있는 내용이었다. 자신이 사고를 당하기 전 뉴스에 대대적으로 나왔었다. 김신우가 말을 이었다.
“그것 때문에 KISA에서 대규모 보안 점검이 진행되는 중입니다. 점검을 대비하기 위해 우수한 보안 기술을 가진 회사들과 협력하여 선진에 적용하기 위해 알아보고 있는 중이고요. 만약 기술 셋이 저희가 원하는 것이라면 충분히 구입할 의사가 있습니다.”
황호근이 단호히 대답했다.
“더욱 자세한 설명은 의사만으로는 힘들 것 같습니다. 기술 기업이 기술을 넘겨주면 끝이니까요.”
김신우의 표정이 딱딱하게 굳어졌다. 승호는 입맛을 다시며 핸드폰을 만지작거렸다. 아까부터 거슬리는 게 하나 있었다.
0101111000000011······.
tco scan; tcp scan
선진 데이터시스템에서 제공해 주는 무선 와이파이를 통해서 달갑지 않은 명령어가 자꾸 핸드폰으로 흘러들어왔다.
해석해본 결과는 tcp scan.
서버에서 사용하는 포트를 확인하는 명령어로 대부분 해킹을 하기 전 시스템의 사전 정보 획득을 위해 사용되는 명령어였다.
‘설마 선진도 공격을 받고 있나······.’
그렇지 않다면 자신의 핸드폰 까지 tcp scan을 할 이유가 없었다. 모두의 시선이 황호근에게 향해 있을 때 승호가 조심스럽게 입을 열었다.
“혹시 선진도 지금 공격을 받고 있나요?”
말을 하던 김신우의 표정이 왈칵 구겨졌다.
“네? 지금 무슨 말씀을 하시는 겁니까.”
싸늘해진 목소리.
회의실에는 차가운 냉기가 흘렀다.
“개인적으로 보안을 대단히 중시 여깁니다. 그래서 핸드폰에도 몇 가지 툴들을 깔아 두는데 아까부터 계속 tcp scan을 하려는 패킷이 들어와서요.”
송보나가 꿀꺽 마른 침을 삼키며 승호를 보았다. 승호가 말을 이었다.
“제 핸드폰이 잡고 있는 건 선진에서 제공하는 무선인터넷 공유기입니다. DHCP로 IP를 할당해 주기 때문에 상대는 제 핸드폰인 줄 모를 겁니다. 그렇다면 공격자가 무작위로 선진 데이터 시스템의 망에 공격 패킷을 보내고 있다는 생각밖에 들지 않아서요.”
차가워진 분위기에 최기훈이 승호의 옆구리를 툭 치며 말했다.
“하··· 하하. 이 친구가 오늘 일을 많이 해서 많이 피곤 한가 봅니다.”
그러고는 조용히 귀에 대고 속삭였다.
“너, 지금 무슨 말을 하는 거야. 책임 질 수 있어? 공격 패킷이 들어오고 있다니.”
살짝 고개를 끄덕인 승호가 말을 이었다.
“급히 저를 찾으신 이유가 아무래도 그것 같은데······.”
송보나의 눈이 더할 나위 없이 커져 있었다. 김신우도 마찬가지 반응이었다. 승호가 한 번 더 물었다.
“정말 선진 데이터시스템에 아무런 문제가 없는 겁니까?”
송보나와 김신우는 아무런 대답을 하지 못했다. 황호근도 놀란 눈으로 승호를 보고 있었다. 도대체 무슨 말을 하는 건지 알 수 가 없었다.
그러나 저 말이 맞는다는 반응을 취하고 있는 저 둘은 또 뭐란 말인가.
도무지 이해할 수 없는 일투성이였다.
김신우가 겨우 입을 열었다.
“정말 그 툴에 그런 내용이 나옵니까?”
승호가 고개를 끄덕였다. 정확히는 자신의 손을 통해 들어오는 정보였다.
“네.”
승호의 단호함에 김신우가 송보나를 보았다. 둘은 무언의 대화를 나누었고, 송보나가 입을 열었다.
“먼저 이 사실은 대외비에 속하는 것으로 절대 발설해서는 안 된다는 점을 명심해 주시기 바랍니다. 검색 솔루션을 납품하며 쓰신 보안서약서가 적용된다는 점도 상기 해주시고요.”
황호근이 고개를 끄덕였다.
“미팅을 잡은 진짜 이유는··· 사실 선진에 해킹 예고장이 날아왔습니다.”
송보나가 노트북을 돌려 메일 하나를 보여 주었다.
Get ready. we’ll take your data soon.
준비해. 곧 너의 데이터를 가져갈 테니.