Top Coder RAW novel - Chapter (68)
탑 코더-68화(68/303)
# 68
체크 포인트
슬롯머신 프로그램 자체는 단순하게 제작되어 있다. 랜덤 제너레이터라는 내부 프로그램이 레바를 당기거나, 버튼을 누르는 순간 작동해 당첨여부가 결정 된다. 그게 핵심이었다.
나머지는 기기 모니터링을 위한 프로토콜.
보안을 위한 프로토콜.
그런 몇 가지가 다였다.
단순할수록 해킹의 위험은 적다. 그럼에도 보안에 문제가 생겼다. 리암은 바로 슬롯머신 사내 담당자를 호출했다.
크라운 카지노 그룹은 슬롯머신도 자체 생산한다. 그랬기에 담당자를 호출 한 지 10분도 채 되지 않아 엔지니어가 내려왔다. 리암이 담당 엔지니어에게 취약점 내용을 보여주며 말했다.
“여기 이번 대회에서 나온 보안 취약점입니다.”
도착한 엔지니어가 내용에 집중하는 사이 함께 내려온 개발 총괄이사가 여유롭게 웃으며 말했다.
“우리 제품이 그럴 리 없다는 거 자네도 잘 알잖아. 뿐만 아니라 머신에서 외부 조작은 환수율 조정만이 가능한데. 그건 수도 없이 테스트를 거쳤어.”
환수율.
슬롯머신에 설정할 수 있는 한 가지 값으로 95%를 설정하면 게이머는 게임을 할때 마다 100원 중 5원을 잃게 된다.
“저도 믿기지가 않지만. 제 눈으로 똑똑히 봤습니다. 슬롯머신이 원격으로 동작하는 모습을.”
그 말에 개발 총괄이사의 미간이 잔뜩 찌푸려졌다. 한 마디 더 하고 싶었지만 참는 눈치.
‘슬롯머신이 원격으로 움직여? 말이 되는 소리를 해야 믿어주지······.’
슬롯머신은 절대 원격으로 움직일 수 없다. 그래선 안 되기에 아예 고려가 되어 있지 않았다.
그런데 원격 조종이 된다?
헛소리 하지 말라는 말이 목구멍 까지 올라온 걸 참았다. 개발 총괄이사가 엔지니어를 보며 말했다.
“어때?”
“······.”
엔지니어는 말없이 취약점 분석 결과를 살펴보고 있었다. 그렇게 수 십 분이 더 지나고 나서야 겨우 입을 열었다.
“일단 올라가서 더 테스트를 해봐야 할 것 같습니다.”
그러자 리암이 엔지니어를 강하게 쏘아보았다.
“슬롯머신이 뚫릴 수 있는 가능성이 있다는 말입니까?”
“그건 걱정하지 않아도 됩니다. 지금까지 그런 사례가 나온 적은 없습니다. 좀 더 자세히 테스트를 해보면 분명 이게 거짓이라는 게 밝혀질 겁니다.”
“아시겠지만 만의 하나도 있어서는 안 됩니다.”
리암의 우려에 개발 총괄 이사가 입 꼬리를 끌어올리며 말했다.
“그런 일은 없을 테니 걱정하지 않아도 된다니까 그러네.”
***
대회장.
FFF팀 리더 에이든이 머리를 부여잡고 괴로움에 몸부림쳤다.
“뭐야. 또 역전이야!”
“우리도 털자.”
“슬롯머신을?”
헤나가 눈을 반짝이며 고개를 끄덕였다. 에이든이 한층 더 괴로움에 몸부림쳤다.
“벌써 몇 번이나 시도 해봤어.”
“안 됐구나.”
“젠장! 왜 자꾸 정의가 지는 거지.”
“그 놈의 정의 타령은. 네가 정의가 아닌가 보지.”
에이든의 안면이 딱딱하게 굳어졌다. 뭔가 깨달음을 얻은 표정.
“그런가. 그거였나.”
딱.
헤나가 에이든의 이마에 딱 밤을 날렸다.
“헛소리 말고 대회에나 집중해. 아직 하루 남았어.”
그러나 에이든은 전의를 상실한 표정이었다.
“이미 진거나 마찬가지야. 저 녀석이 할 수 있는 걸 나는 못하니까.”
“너도 할 수 있어. 그리고 그게 팀의 리더가 할 소리냐?”
“나 리더 아닌데.”
“···뭐?”
“지금부터 리더는 너다.”
헤나의 푸른색 눈동자에서 붉은 불길이 치솟아 올랐다.
“이 미친놈이 진짜 보자보자 하니까!”
헤나의 악다구니에 에이든의 얼굴에 두려움이 서렸다.
“당장 대회에 집중하지 못해!”
“이, 일단 진정하고 내 말 좀.”
“말 하지 말고 찾아내! 어서! 당장! 빨리!”
히스테리 컬한 모습은 마치 영화에 나오는 마녀를 연상케 했다. 겁에 질린 에이든이 재빨리 모니터로 시선을 돌렸다.
“아, 알았어.”
해나가 으드득 이를 갈며 말했다.
“이기기 전까지 잘 생각도 하지 마.”
헤나의 엄포에 에이든의 목이 거북이처럼 움츠러들였다.
같은 시각.
1등을 하고 있음에도 승호 팀의 분위기는 한 치의 여유도 찾아볼 수 없을 만큼 딱딱했다.
“동수 2111번 프로세스 메모리 덤프 분석 끝났어?”
“아직 입니다.”
“앞으로 5분 더 분석해보고 별것 없으면 다음으로 넘어간다.”
“네.”
승호의 지시에 일사불란하게 움직였다.
벌써 이틀째.
다들 피곤한 기색이 가득했다.
단숨에 차지한 1등.
잠시 여유를 부려도 되건만 그런 행동을 보이는 직원은 한 명도 없었다.
“CTO님. 지금까지 수집한 flag 운영진에 보고 하겠습니다.”
“그래요. 수고했습니다.”
원지훈이 머리를 긁적거리며 말했다.
“하하, 아닙니다. CTO님이야 말로 이틀째 잠 도 안 주무시고.”
“저도 제 커리어에 도움이 되기 때문에 하는 일입니다. 제가 고생한다고 생각하실 필요 없어요.”
“하하, 알겠습니다.”
원지훈이 수집한 flag 보고를 위해 운영진을 찾아갔다. 대회장에 있는 건 이렇게 세 명.
나머지 다섯 명은 호텔 방에서 팀을 서포트 하고 있었다.
1. zerone : 2311.
2. FFF : 1803.
······.
점수판을 보던 이정훈이 입술을 꽉 깨물었다. 대시 보드에서 한국 팀이 1위를 하고 있는 모습을 보는 건 처음이었다. 평생 숙원 중 하나가 체크포인트 우승.
그 현장에 함께 있다는 것만으로 가슴이 벅차올랐다.
“이번에는 꼭.”
최종 우승을 통해 그 숙원을 풀고 싶었다. 비록 자신의 힘은 아닐 지라도.
***
개발 사무실로 돌아온 엔지니어는 바로 테스트에 들어갔다. 납품된 슬롯머신과 동일한 머신에 네트워크 선을 연결하고 취약점 분석을 다시 차분히 읽어 내려갔다.
1.환수율 설정 프로토콜에 특수문자 삽입 후 요청.
2.오류로 슬롯머신 프로그램이 재시작.
3.재시작시 서버와 통신이 이루어짐.
4.서버와의 통신 시 파일리스 악성코드 삽임.
요약을 하자면 이렇게 4단계로 이루어진다. 내용을 숙지한 엔지니어가 차례대로 내용을 실행해 나갔다. 엔지니어는 긴장 된 눈빛으로 슬롯머신에서 올라오는 로그를 살폈다.
환수 율에 특수문자를 넣자.
0x0000000027e84000
“DestroyThard”
[_thread_blocked, id=38340, stack(0x00000000034d0000,0x00000000035d0000)]0x0000000027e7b000 Thread
“daemon [_thread_blocked, id=38104, stack(0x000000002f7a0000,0x000000002f8a0000)]
0x0000000027e7e800 clientP.
슬롯머신이 정체를 알 수 없는 로그를 내뱉으며 자동으로 재시작 되었다. 정의되지 않은 예외사항이 발생할 경우 재시작 하도록 프로그래밍 되어 있었기에 일어난 일이었다.
재시작이 되며.
IgnisSlot: The first specified datafile ibdataibdata1 did not exist:
IgnisSlot: a new database to be created!
IgnisSlot: Setting file ibdataibdata1 size to 209715200IgnisSlot: Database physically writes the file full: wait…
IgnisSlot: Log file iblogsib_logfile0 did not exist: new to be created 새로운 로그를 뱉어냈다.
IgnisSlot: 192.0.1.1 Connecting······.
그리고 서버와 통신을 시작했다. 그때 운영진이 전해준 스크립트를 실행했다.
그러자.
처음에는 아무런 반응이 없었다.
“휴우······.”
안도의 한숨을 내쉬며 안심하려는 찰나.
띠리리리리.
띠리리리리.
빰빠람.
빠라라라라라람.
파앙.
파앙.
슬롯머신에서 잭팟이 터졌다. 엔지니어의 안색에서 핏기가 사라졌다.
***
개발 총괄 이사의 연락을 받은 리암의 표정이 딱딱하게 굳어졌다. 이건 자신의 선에서 처리 할 문제가 아니었다. 리암은 급히 직속상관에게 보고했다. 돌아온 대답은 자신이 예상하던 그대로였다.
-당장 취약 점 발견했다는 그 사람. 찾아내!
리암은 바로 스마트폰으로 부하 직원에게 연락했다.
“당장 슬롯머신 취약점 분석한 사람 사무실로 데려와.”
-그게 지금 한창 대회 중이라······.
“대회고 뭐고. 지금 그게 중요해? 당장 수 백 억이 날아갈 수도 있는 상황인데. 그리고 대회 후원해 주는데 그 정도 부탁도 못하냐.”
리암의 호통에 부하직원이 잔뜩 주눅이든 목소리로 알았다고 대답했다.
그리고 몇 분 뒤.
다시 전화가 걸려왔다.
-운영진이 안 된다고 한다.
-아직 대회 중이라 대회가 끝날 때 까지 기다려 달라고 하는데요.
그러나 리암은 기다릴 수 없었다. 이게 당장 해결되지 못하면 자신의 목이 날아가는 것으로 끝나지 않는다. 리암은 바로 대회가 열리고 있는 링컨 홀로 찾아갔다. 갑작스런 소란에 한창 해킹에 열중하고 있던 사람들의 시선이 일제히 문 쪽을 향했다.
고동수가 승호를 보며 말했다.
“승호님. 지금 승호님을 부르고 있는 것 같은데요.”
모니터에 시선을 고정 시킨 채 대회에 열중하던 승호가 고개를 들었다.
“나?”
“네. 정문 쪽에 저 아저씨가요.”
고개를 돌려 보니 구면.
이곳 매니저라고 했었던 남자였다.
“저 사람이 난 왜.”
“그건 저도 잘······.”
-미스터 가스호! 제로원!
-제로원! 미스터 가스호!
강승호도 아니고 가스 호라니.
승호는 피식 웃음을 흘렸다.
“가스호라니··· 저게 내 이름 부르는 게 맞냐.”
“영미 권 얘들이 받침에 약하니까. 아마 맞을 겁니다.”
둘이 대화를 나누는 사이 리암이 성큼성큼 다가왔다. 운영진이 막았지만 전혀 개의치 않고 대회장으로 들어섰다.
승호가 앉아 있던 책상위에 놓인 푯말을 확인한 리암이 또 한 번 소리를 질렀다.
“가스호씨?”
깊은 한숨을 내쉰 승호가 고개를 끄덕였다.
“네. 그런데 왜 그러십니까? 며칠 전 그 일 때문이라면 이미 다 끝난 일 아닌가요?”
리암이 고개를 저었다.
“그것 때문이 아닙니다. 이번 대회에 제출하신 슬롯머신 취약점에 관해서입니다.”
“그게 왜요.”
“그 내용 대로라면 당장이라도 해킹을 통해 잭팟이 터질 가능성이 열려 있다는 뜻이라. 저희 카지노는 그런 불상사를 막고자 최대한 빨리 패치를 제작 하려고 합니다.”
“보시다 시피 제가 지금 대회 참가 중이 라서. 끝나고 따로 이야기를 하시죠.”
“수 백 억이 달려 있습니다.”
“지금 대회 중이라고 말씀 드렸는데.”
“운영진에게 말해서 잠시 멈추도록 하겠습니다. 어차피 저희가 후원사니까요.”
승호가 슬쩍 주변을 둘러보았다. 다들 어안이 벙벙한 채 승호를 보고 있었다. 그때 운영진이 다급한 표정으로 달려와 리암을 말렸다.
“이러시면 안 됩니다. 대회 끝날 때 까지 기다리셔야 합니다.”
리암이 같은 말을 반복했다.
“수백억이 달려 있습니다.”
“아니 그래도 대회는 마치고.”
“문제가 생기면 손해 배상 하실 겁니까? 만약 그 사이 그 취약점이 외부로 흘러나가기라도 하면. 누가 책임지실 겁니까?”
운영진 중 한 명이 앞으로 나서며 코웃음을 쳤다.
“참네. 손해 배상이라니. 무슨 말이 되는 소리를 해야 들어주지. 오히려 대회를 망치고 있는 당신들이 손해 배상을 해야지.”
“이 사람이 발견한 취약점 때문에 슬롯머신에 무슨 일이라도 생기면 그쪽에 손해 배상 청구 하겠습니다. 취약점을 아는 건 당신들 그리고 여기 강승호 씨 밖에 없으니까.”
리암이 눈을 부릅뜨고 운영진을 노려보았다. 그 안에 담긴 협박에 운영진은 여전히 피식 거리며 리암을 바라보았다.
“당신 지금 여기서 무슨 짓을 하고 있는지 알고는 있는 겁니까?”
“간단합니다. 슬롯머신에 문제가 생겼고. 그걸 해결해야 합니다.”
피식 거리며 코웃음을 치는 운영진 또 한 번 나섰다.
“이래서 머리 나쁜 새끼들은 점잖게 말로 하면 듣지를 않는 다니까.”
햇빛을 보지 못한 듯 새 하얀 얼굴.
아령한 번 들어본 적 없는 것 같은 가느다란 팔 다리.
쓰고 있는 뿔테 안경은 그의 연약함을 더하는 도구였다. 리암은 순간 자신이 잘못 들었다고 생각했다.
“뭐, 뭐?”
남자가 가느다란 두 손을 들어 보이며 말했다.
“네가 가진 단백질 덩어리가 더 강한지. 내 두 손이 더 강할지. 한 번 해볼까?”
남자의 도발에 이번에는 리암이 픽 코웃음을 쳤다.
“어디 한 번 해봐.”
강대강의 대치.
승호가 둘을 흥미롭게 바라보았다.